From d8029550f758fed626caa1615a8f6d66efa02db4 Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 16:18:50 +0800 Subject: [PATCH 1/5] fix: do not consume user quota if failed (close #881) --- controller/relay-image.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/controller/relay-image.go b/controller/relay-image.go index 7e1fed39..14a2983b 100644 --- a/controller/relay-image.go +++ b/controller/relay-image.go @@ -168,6 +168,9 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode var textResponse ImageResponse defer func(ctx context.Context) { + if resp.StatusCode != http.StatusOK { + return + } err := model.PostConsumeTokenQuota(tokenId, quota) if err != nil { common.SysError("error consuming token remain quota: " + err.Error()) From af8908db540d0ad4650e7595b79b0ccb066a9a38 Mon Sep 17 00:00:00 2001 From: Tisfeng Date: Mon, 1 Jan 2024 16:42:19 +0800 Subject: [PATCH 2/5] feat: able to change gemini safety setting (#867) * perf: adjust gemini safety settings, set BLOCK_NONE by default * feat: able to adjust by env variable --------- Co-authored-by: JustSong --- README.md | 1 + common/constants.go | 2 ++ common/utils.go | 7 +++++++ controller/relay-gemini.go | 36 ++++++++++++++++++------------------ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index ff9e0bc0..b53936c4 100644 --- a/README.md +++ b/README.md @@ -366,6 +366,7 @@ graph LR + `DATA_GYM_CACHE_DIR`:目前该配置作用与 `TIKTOKEN_CACHE_DIR` 一致,但是优先级没有它高。 15. `RELAY_TIMEOUT`:中继超时设置,单位为秒,默认不设置超时时间。 16. `SQLITE_BUSY_TIMEOUT`:SQLite 锁等待超时设置,单位为毫秒,默认 `3000`。 +17. `GEMINI_SAFETY_SETTING`:Gemini 的安全设置,默认 `BLOCK_NONE`。 ### 命令行参数 1. `--port `: 指定服务器监听的端口号,默认为 `3000`。 diff --git a/common/constants.go b/common/constants.go index 60700ec8..e4cbf8bf 100644 --- a/common/constants.go +++ b/common/constants.go @@ -98,6 +98,8 @@ var BatchUpdateInterval = GetOrDefault("BATCH_UPDATE_INTERVAL", 5) var RelayTimeout = GetOrDefault("RELAY_TIMEOUT", 0) // unit is second +var GeminiSafetySetting = GetOrDefaultString("GEMINI_SAFETY_SETTING", "BLOCK_NONE") + const ( RequestIdKey = "X-Oneapi-Request-Id" ) diff --git a/common/utils.go b/common/utils.go index 21bec8f5..9a7038e2 100644 --- a/common/utils.go +++ b/common/utils.go @@ -196,6 +196,13 @@ func GetOrDefault(env string, defaultValue int) int { return num } +func GetOrDefaultString(env string, defaultValue string) string { + if env == "" || os.Getenv(env) == "" { + return defaultValue + } + return os.Getenv(env) +} + func MessageWithRequestId(message string, id string) string { return fmt.Sprintf("%s (request id: %s)", message, id) } diff --git a/controller/relay-gemini.go b/controller/relay-gemini.go index ec55d4b6..d8ab58d6 100644 --- a/controller/relay-gemini.go +++ b/controller/relay-gemini.go @@ -63,24 +63,24 @@ type GeminiChatGenerationConfig struct { func requestOpenAI2Gemini(textRequest GeneralOpenAIRequest) *GeminiChatRequest { geminiRequest := GeminiChatRequest{ Contents: make([]GeminiChatContent, 0, len(textRequest.Messages)), - //SafetySettings: []GeminiChatSafetySettings{ - // { - // Category: "HARM_CATEGORY_HARASSMENT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_HATE_SPEECH", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_DANGEROUS_CONTENT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - //}, + SafetySettings: []GeminiChatSafetySettings{ + { + Category: "HARM_CATEGORY_HARASSMENT", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_HATE_SPEECH", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_DANGEROUS_CONTENT", + Threshold: common.GeminiSafetySetting, + }, + }, GenerationConfig: GeminiChatGenerationConfig{ Temperature: textRequest.Temperature, TopP: textRequest.TopP, From c725cc88429aed1e013729b6c87ced20a040544e Mon Sep 17 00:00:00 2001 From: Zhanliang Liu Date: Mon, 1 Jan 2024 17:00:23 +0800 Subject: [PATCH 3/5] fix: base 64 encoded format support of gemini-pro-vision for field image_url/url (#878) --- common/image/image.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/image/image.go b/common/image/image.go index a602936a..27045d28 100644 --- a/common/image/image.go +++ b/common/image/image.go @@ -44,6 +44,18 @@ func GetImageSizeFromUrl(url string) (width int, height int, err error) { } func GetImageFromUrl(url string) (mimeType string, data string, err error) { + // Regex to match data URL pattern + dataURLPattern := regexp.MustCompile(`data:image/([^;]+);base64,(.*)`) + + // Check if the URL is a data URL + matches := dataURLPattern.FindStringSubmatch(url) + if len(matches) == 3 { + // URL is a data URL + mimeType = "image/" + matches[1] + data = matches[2] + return + } + isImage, err := IsImageUrl(url) if !isImage { return From 498dea2dbbd7d68261ef32a900711d555181bb68 Mon Sep 17 00:00:00 2001 From: Tailen <15708073+Tailen@users.noreply.github.com> Date: Mon, 1 Jan 2024 17:06:17 +0800 Subject: [PATCH 4/5] feat: add support for davinci-002 and babbage-002 (#888) --- common/model-ratio.go | 2 ++ controller/model.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/common/model-ratio.go b/common/model-ratio.go index fa2adaa1..2908be17 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -52,6 +52,8 @@ var ModelRatio = map[string]float64{ "gpt-3.5-turbo-16k-0613": 1.5, "gpt-3.5-turbo-instruct": 0.75, // $0.0015 / 1K tokens "gpt-3.5-turbo-1106": 0.5, // $0.001 / 1K tokens + "davinci-002" 1, // $0.002 / 1K tokens + "babbage-002" 0.2, // $0.0004 / 1K tokens "text-ada-001": 0.2, "text-babbage-001": 0.25, "text-curie-001": 1, diff --git a/controller/model.go b/controller/model.go index 6a759b63..6cb530db 100644 --- a/controller/model.go +++ b/controller/model.go @@ -342,6 +342,24 @@ func init() { Root: "code-davinci-edit-001", Parent: nil, }, + { + Id: "davinci-002", + Object: "model", + Created: 1677649963, + OwnedBy: "openai", + Permission: permission, + Root: "davinci-002", + Parent: nil, + }, + { + Id: "babbage-002", + Object: "model", + Created: 1677649963, + OwnedBy: "openai", + Permission: permission, + Root: "babbage-002", + Parent: nil, + }, { Id: "claude-instant-1", Object: "model", From c50c6095651570d01a172c0eb2f166535ca24366 Mon Sep 17 00:00:00 2001 From: Seven Yu <422347121@qq.com> Date: Mon, 1 Jan 2024 17:09:12 +0800 Subject: [PATCH 5/5] fix: fix button copywriting (#880) * feat: rename Channel button * fix: update en.json --------- Co-authored-by: seven.yu Co-authored-by: JustSong --- i18n/en.json | 4 +++- web/src/components/ChannelsTable.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index b0deb83a..7b51909b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -526,5 +526,7 @@ "模型版本": "Model version", "请输入星火大模型版本,注意是接口地址中的版本号,例如:v2.1": "Please enter the version of the Starfire model, note that it is the version number in the interface address, for example: v2.1", "点击查看": "click to view", - "请确保已在 Azure 上创建了 gpt-35-turbo 模型,并且 apiVersion 已正确填写!": "Please make sure that the gpt-35-turbo model has been created on Azure, and the apiVersion has been filled in correctly!" + "请确保已在 Azure 上创建了 gpt-35-turbo 模型,并且 apiVersion 已正确填写!": "Please make sure that the gpt-35-turbo model has been created on Azure, and the apiVersion has been filled in correctly!", + "测试所有渠道": "Test all channels", + "更新已启用渠道余额": "Update the balance of enabled channels" } diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index 5d68e2da..a2adfd32 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -523,10 +523,10 @@ const ChannelsTable = () => { 添加新的渠道 + loading={loading || updatingBalance}>更新已启用渠道余额