From 8c4d2f2c2fcaf59d88bb7b2f5ed88d9b77db6561 Mon Sep 17 00:00:00 2001 From: feitianbubu Date: Wed, 28 Jan 2026 12:54:57 +0800 Subject: [PATCH 1/9] feat: auto-adapt video modal --- .../table/task-logs/modals/ContentModal.jsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/web/src/components/table/task-logs/modals/ContentModal.jsx b/web/src/components/table/task-logs/modals/ContentModal.jsx index 9dc5427c8..88df4d8ce 100644 --- a/web/src/components/table/task-logs/modals/ContentModal.jsx +++ b/web/src/components/table/task-logs/modals/ContentModal.jsx @@ -120,7 +120,7 @@ const ContentModal = ({ } return ( -
+
{isLoading && (
setIsModalOpen(false)} closable={null} bodyStyle={{ - height: isVideo ? '450px' : '400px', + height: isVideo ? '70vh' : '400px', + maxHeight: '80vh', overflow: 'auto', padding: isVideo && videoError ? '0' : '24px', }} - width={800} + width={isVideo ? '90vw' : 800} + style={isVideo ? { maxWidth: 960 } : undefined} > {isVideo ? ( renderVideoContent() From 2c29993cfc8bb5218d5f8b192ed60f665e8dc352 Mon Sep 17 00:00:00 2001 From: Seefs Date: Mon, 2 Feb 2026 14:41:27 +0800 Subject: [PATCH 2/9] feat: /v1/responses qwen3 max --- dto/openai_request.go | 1 + relay/channel/ali/adaptor.go | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dto/openai_request.go b/dto/openai_request.go index 89ebcf144..ab2810c77 100644 --- a/dto/openai_request.go +++ b/dto/openai_request.go @@ -817,6 +817,7 @@ type OpenAIResponsesRequest struct { User string `json:"user,omitempty"` MaxToolCalls uint `json:"max_tool_calls,omitempty"` Prompt json.RawMessage `json:"prompt,omitempty"` + EnableThinking json.RawMessage `json:"enable_thinking,omitempty"` } func (r *OpenAIResponsesRequest) GetTokenCountMeta() *types.TokenCountMeta { diff --git a/relay/channel/ali/adaptor.go b/relay/channel/ali/adaptor.go index 17869a06d..9e9b9b255 100644 --- a/relay/channel/ali/adaptor.go +++ b/relay/channel/ali/adaptor.go @@ -84,6 +84,8 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { fullRequestURL = fmt.Sprintf("%s/compatible-mode/v1/embeddings", info.ChannelBaseUrl) case constant.RelayModeRerank: fullRequestURL = fmt.Sprintf("%s/api/v1/services/rerank/text-rerank/text-rerank", info.ChannelBaseUrl) + case constant.RelayModeResponses: + fullRequestURL = fmt.Sprintf("%s/api/v2/apps/protocols/compatible-mode/v1/responses", info.ChannelBaseUrl) case constant.RelayModeImagesGenerations: if isSyncImageModel(info.OriginModelName) { fullRequestURL = fmt.Sprintf("%s/api/v1/services/aigc/multimodal-generation/generation", info.ChannelBaseUrl) @@ -210,8 +212,7 @@ func (a *Adaptor) ConvertAudioRequest(c *gin.Context, info *relaycommon.RelayInf } func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) { - //TODO implement me - return nil, errors.New("not implemented") + return request, nil } func (a *Adaptor) DoRequest(c *gin.Context, info *relaycommon.RelayInfo, requestBody io.Reader) (any, error) { From b6dc75cb86fc4717bf45073ad18ff469c411aa8a Mon Sep 17 00:00:00 2001 From: Seefs Date: Mon, 2 Feb 2026 14:48:45 +0800 Subject: [PATCH 3/9] feat: /v1/responses perplexity --- dto/openai_request.go | 5 ++++- relay/channel/perplexity/adaptor.go | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dto/openai_request.go b/dto/openai_request.go index ab2810c77..5e40d5472 100644 --- a/dto/openai_request.go +++ b/dto/openai_request.go @@ -817,7 +817,10 @@ type OpenAIResponsesRequest struct { User string `json:"user,omitempty"` MaxToolCalls uint `json:"max_tool_calls,omitempty"` Prompt json.RawMessage `json:"prompt,omitempty"` - EnableThinking json.RawMessage `json:"enable_thinking,omitempty"` + // qwen + EnableThinking json.RawMessage `json:"enable_thinking,omitempty"` + // perplexity + Preset json.RawMessage `json:"preset,omitempty"` } func (r *OpenAIResponsesRequest) GetTokenCountMeta() *types.TokenCountMeta { diff --git a/relay/channel/perplexity/adaptor.go b/relay/channel/perplexity/adaptor.go index 43e39b12e..fc31a603e 100644 --- a/relay/channel/perplexity/adaptor.go +++ b/relay/channel/perplexity/adaptor.go @@ -10,6 +10,7 @@ import ( "github.com/QuantumNous/new-api/relay/channel" "github.com/QuantumNous/new-api/relay/channel/openai" relaycommon "github.com/QuantumNous/new-api/relay/common" + relayconstant "github.com/QuantumNous/new-api/relay/constant" "github.com/QuantumNous/new-api/types" "github.com/gin-gonic/gin" @@ -42,6 +43,9 @@ func (a *Adaptor) Init(info *relaycommon.RelayInfo) { } func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { + if info.RelayMode == relayconstant.RelayModeResponses { + return fmt.Sprintf("%s/v1/responses", info.ChannelBaseUrl), nil + } return fmt.Sprintf("%s/chat/completions", info.ChannelBaseUrl), nil } @@ -71,8 +75,7 @@ func (a *Adaptor) ConvertEmbeddingRequest(c *gin.Context, info *relaycommon.Rela } func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) { - // TODO implement me - return nil, errors.New("not implemented") + return request, nil } func (a *Adaptor) DoRequest(c *gin.Context, info *relaycommon.RelayInfo, requestBody io.Reader) (any, error) { From 0d5ae12ebc0d9cf8b1c1c6547d261f01778d5e9b Mon Sep 17 00:00:00 2001 From: lanfunoe Date: Mon, 2 Feb 2026 14:59:36 +0800 Subject: [PATCH 4/9] fix: make channel Host override take effect --- relay/channel/api_request.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/relay/channel/api_request.go b/relay/channel/api_request.go index 9540195cd..57f15bd33 100644 --- a/relay/channel/api_request.go +++ b/relay/channel/api_request.go @@ -98,6 +98,19 @@ func processHeaderOverride(info *common.RelayInfo, c *gin.Context) (map[string]s return headerOverride, nil } +func applyHeaderOverrideToRequest(req *http.Request, headerOverride map[string]string) { + if req == nil { + return + } + for key, value := range headerOverride { + req.Header.Set(key, value) + // set Host in req + if strings.EqualFold(key, "Host") { + req.Host = value + } + } +} + func DoApiRequest(a Adaptor, c *gin.Context, info *common.RelayInfo, requestBody io.Reader) (*http.Response, error) { fullRequestURL, err := a.GetRequestURL(info) if err != nil { @@ -121,9 +134,7 @@ func DoApiRequest(a Adaptor, c *gin.Context, info *common.RelayInfo, requestBody if err != nil { return nil, err } - for key, value := range headerOverride { - headers.Set(key, value) - } + applyHeaderOverrideToRequest(req, headerOverride) resp, err := doRequest(c, req, info) if err != nil { return nil, fmt.Errorf("do request failed: %w", err) @@ -156,9 +167,7 @@ func DoFormRequest(a Adaptor, c *gin.Context, info *common.RelayInfo, requestBod if err != nil { return nil, err } - for key, value := range headerOverride { - headers.Set(key, value) - } + applyHeaderOverrideToRequest(req, headerOverride) resp, err := doRequest(c, req, info) if err != nil { return nil, fmt.Errorf("do request failed: %w", err) From 57b99055391e4893c6edb6f321c88c40d832a2fa Mon Sep 17 00:00:00 2001 From: Seefs Date: Mon, 2 Feb 2026 15:03:30 +0800 Subject: [PATCH 5/9] fix: claude panic --- relay/channel/claude/relay-claude.go | 81 ++++++++++++++++++---------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index f9f4d4d09..7faa2ac9f 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -437,8 +437,10 @@ func StreamResponseClaude2OpenAI(reqMode int, claudeResponse *dto.ClaudeResponse } } else { if claudeResponse.Type == "message_start" { - response.Id = claudeResponse.Message.Id - response.Model = claudeResponse.Message.Model + if claudeResponse.Message != nil { + response.Id = claudeResponse.Message.Id + response.Model = claudeResponse.Message.Model + } //claudeUsage = &claudeResponse.Message.Usage choice.Delta.SetContentString("") choice.Delta.Role = "assistant" @@ -589,35 +591,49 @@ type ClaudeResponseInfo struct { } func FormatClaudeResponseInfo(requestMode int, claudeResponse *dto.ClaudeResponse, oaiResponse *dto.ChatCompletionsStreamResponse, claudeInfo *ClaudeResponseInfo) bool { + if claudeInfo == nil { + return false + } + if claudeInfo.Usage == nil { + claudeInfo.Usage = &dto.Usage{} + } if requestMode == RequestModeCompletion { claudeInfo.ResponseText.WriteString(claudeResponse.Completion) } else { if claudeResponse.Type == "message_start" { - claudeInfo.ResponseId = claudeResponse.Message.Id - claudeInfo.Model = claudeResponse.Message.Model + if claudeResponse.Message != nil { + claudeInfo.ResponseId = claudeResponse.Message.Id + claudeInfo.Model = claudeResponse.Message.Model + } // message_start, 获取usage - claudeInfo.Usage.PromptTokens = claudeResponse.Message.Usage.InputTokens - claudeInfo.Usage.PromptTokensDetails.CachedTokens = claudeResponse.Message.Usage.CacheReadInputTokens - claudeInfo.Usage.PromptTokensDetails.CachedCreationTokens = claudeResponse.Message.Usage.CacheCreationInputTokens - claudeInfo.Usage.ClaudeCacheCreation5mTokens = claudeResponse.Message.Usage.GetCacheCreation5mTokens() - claudeInfo.Usage.ClaudeCacheCreation1hTokens = claudeResponse.Message.Usage.GetCacheCreation1hTokens() - claudeInfo.Usage.CompletionTokens = claudeResponse.Message.Usage.OutputTokens - } else if claudeResponse.Type == "content_block_delta" { - if claudeResponse.Delta.Text != nil { - claudeInfo.ResponseText.WriteString(*claudeResponse.Delta.Text) + if claudeResponse.Message != nil && claudeResponse.Message.Usage != nil { + claudeInfo.Usage.PromptTokens = claudeResponse.Message.Usage.InputTokens + claudeInfo.Usage.PromptTokensDetails.CachedTokens = claudeResponse.Message.Usage.CacheReadInputTokens + claudeInfo.Usage.PromptTokensDetails.CachedCreationTokens = claudeResponse.Message.Usage.CacheCreationInputTokens + claudeInfo.Usage.ClaudeCacheCreation5mTokens = claudeResponse.Message.Usage.GetCacheCreation5mTokens() + claudeInfo.Usage.ClaudeCacheCreation1hTokens = claudeResponse.Message.Usage.GetCacheCreation1hTokens() + claudeInfo.Usage.CompletionTokens = claudeResponse.Message.Usage.OutputTokens } - if claudeResponse.Delta.Thinking != nil { - claudeInfo.ResponseText.WriteString(*claudeResponse.Delta.Thinking) + } else if claudeResponse.Type == "content_block_delta" { + if claudeResponse.Delta != nil { + if claudeResponse.Delta.Text != nil { + claudeInfo.ResponseText.WriteString(*claudeResponse.Delta.Text) + } + if claudeResponse.Delta.Thinking != nil { + claudeInfo.ResponseText.WriteString(*claudeResponse.Delta.Thinking) + } } } else if claudeResponse.Type == "message_delta" { // 最终的usage获取 - if claudeResponse.Usage.InputTokens > 0 { - // 不叠加,只取最新的 - claudeInfo.Usage.PromptTokens = claudeResponse.Usage.InputTokens + if claudeResponse.Usage != nil { + if claudeResponse.Usage.InputTokens > 0 { + // 不叠加,只取最新的 + claudeInfo.Usage.PromptTokens = claudeResponse.Usage.InputTokens + } + claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens + claudeInfo.Usage.TotalTokens = claudeInfo.Usage.PromptTokens + claudeInfo.Usage.CompletionTokens } - claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens - claudeInfo.Usage.TotalTokens = claudeInfo.Usage.PromptTokens + claudeInfo.Usage.CompletionTokens // 判断是否完整 claudeInfo.Done = true @@ -657,7 +673,9 @@ func HandleStreamResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud } else { if claudeResponse.Type == "message_start" { // message_start, 获取usage - info.UpstreamModelName = claudeResponse.Message.Model + if claudeResponse.Message != nil { + info.UpstreamModelName = claudeResponse.Message.Model + } } else if claudeResponse.Type == "content_block_delta" { } else if claudeResponse.Type == "message_delta" { } @@ -745,13 +763,18 @@ func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud if requestMode == RequestModeCompletion { claudeInfo.Usage = service.ResponseText2Usage(c, claudeResponse.Completion, info.UpstreamModelName, info.GetEstimatePromptTokens()) } else { - claudeInfo.Usage.PromptTokens = claudeResponse.Usage.InputTokens - claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens - claudeInfo.Usage.TotalTokens = claudeResponse.Usage.InputTokens + claudeResponse.Usage.OutputTokens - claudeInfo.Usage.PromptTokensDetails.CachedTokens = claudeResponse.Usage.CacheReadInputTokens - claudeInfo.Usage.PromptTokensDetails.CachedCreationTokens = claudeResponse.Usage.CacheCreationInputTokens - claudeInfo.Usage.ClaudeCacheCreation5mTokens = claudeResponse.Usage.GetCacheCreation5mTokens() - claudeInfo.Usage.ClaudeCacheCreation1hTokens = claudeResponse.Usage.GetCacheCreation1hTokens() + if claudeInfo.Usage == nil { + claudeInfo.Usage = &dto.Usage{} + } + if claudeResponse.Usage != nil { + claudeInfo.Usage.PromptTokens = claudeResponse.Usage.InputTokens + claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens + claudeInfo.Usage.TotalTokens = claudeResponse.Usage.InputTokens + claudeResponse.Usage.OutputTokens + claudeInfo.Usage.PromptTokensDetails.CachedTokens = claudeResponse.Usage.CacheReadInputTokens + claudeInfo.Usage.PromptTokensDetails.CachedCreationTokens = claudeResponse.Usage.CacheCreationInputTokens + claudeInfo.Usage.ClaudeCacheCreation5mTokens = claudeResponse.Usage.GetCacheCreation5mTokens() + claudeInfo.Usage.ClaudeCacheCreation1hTokens = claudeResponse.Usage.GetCacheCreation1hTokens() + } } var responseData []byte switch info.RelayFormat { @@ -766,7 +789,7 @@ func HandleClaudeResponseData(c *gin.Context, info *relaycommon.RelayInfo, claud responseData = data } - if claudeResponse.Usage.ServerToolUse != nil && claudeResponse.Usage.ServerToolUse.WebSearchRequests > 0 { + if claudeResponse.Usage != nil && claudeResponse.Usage.ServerToolUse != nil && claudeResponse.Usage.ServerToolUse.WebSearchRequests > 0 { c.Set("claude_web_search_requests", claudeResponse.Usage.ServerToolUse.WebSearchRequests) } From 16d8055397a6e0a118757d087e06de6c4321fb3f Mon Sep 17 00:00:00 2001 From: CaIon Date: Mon, 2 Feb 2026 21:34:42 +0800 Subject: [PATCH 6/9] feat: add support for jfif image format in file decoder --- service/file_decoder.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service/file_decoder.go b/service/file_decoder.go index 4ca139794..ae3bc581f 100644 --- a/service/file_decoder.go +++ b/service/file_decoder.go @@ -231,6 +231,8 @@ func GetMimeTypeByExtension(ext string) string { return "image/png" case "gif": return "image/gif" + case "jfif": + return "image/jpeg" // Audio files case "mp3": From c50eff53d4925560e38c74943949e1a77413241d Mon Sep 17 00:00:00 2001 From: Seefs Date: Mon, 2 Feb 2026 22:21:49 +0800 Subject: [PATCH 7/9] =?UTF-8?q?feat=EF=BC=9A=20default=20enable=20channel?= =?UTF-8?q?=20affinity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel_affinity_setting.go | 33 +++++++++++++++++-- .../Operation/SettingsChannelAffinity.jsx | 4 +-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/setting/operation_setting/channel_affinity_setting.go b/setting/operation_setting/channel_affinity_setting.go index 7173f7b78..22f19824f 100644 --- a/setting/operation_setting/channel_affinity_setting.go +++ b/setting/operation_setting/channel_affinity_setting.go @@ -33,11 +33,40 @@ type ChannelAffinitySetting struct { } var channelAffinitySetting = ChannelAffinitySetting{ - Enabled: false, + Enabled: true, SwitchOnSuccess: true, MaxEntries: 100_000, DefaultTTLSeconds: 3600, - Rules: []ChannelAffinityRule{}, + Rules: []ChannelAffinityRule{ + { + Name: "codex trace", + ModelRegex: []string{"^gpt-.*$"}, + PathRegex: []string{"/v1/responses"}, + KeySources: []ChannelAffinityKeySource{ + {Type: "gjson", Path: "prompt_cache_key"}, + }, + ValueRegex: "", + TTLSeconds: 0, + SkipRetryOnFailure: false, + IncludeUsingGroup: true, + IncludeRuleName: true, + UserAgentInclude: nil, + }, + { + Name: "claude code trace", + ModelRegex: []string{"^claude-.*$"}, + PathRegex: []string{"/v1/messages"}, + KeySources: []ChannelAffinityKeySource{ + {Type: "gjson", Path: "metadata.user_id"}, + }, + ValueRegex: "", + TTLSeconds: 0, + SkipRetryOnFailure: false, + IncludeUsingGroup: true, + IncludeRuleName: true, + UserAgentInclude: nil, + }, + }, } func init() { diff --git a/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx b/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx index b89f99113..18e2cfbdc 100644 --- a/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx +++ b/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx @@ -67,7 +67,7 @@ const KEY_SOURCE_TYPES = [ const RULE_TEMPLATES = { codex: { - name: 'codex优选', + name: 'codex trace', model_regex: ['^gpt-.*$'], path_regex: ['/v1/responses'], key_sources: [{ type: 'gjson', path: 'prompt_cache_key' }], @@ -78,7 +78,7 @@ const RULE_TEMPLATES = { include_rule_name: true, }, claudeCode: { - name: 'claude-code优选', + name: 'claude-code trace', model_regex: ['^claude-.*$'], path_regex: ['/v1/messages'], key_sources: [{ type: 'gjson', path: 'metadata.user_id' }], From 760fbeb6e6b18ad87535a3c2323cd6dd0b806541 Mon Sep 17 00:00:00 2001 From: Seefs <40468931+seefs001@users.noreply.github.com> Date: Tue, 3 Feb 2026 00:03:19 +0800 Subject: [PATCH 8/9] Merge pull request #2811 from seefs001/fix/openrouter-claude-cache-usage fix: openrouter claude cache usage --- relay/channel/claude/relay-claude.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 7faa2ac9f..4fdf7c275 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -631,7 +631,21 @@ func FormatClaudeResponseInfo(requestMode int, claudeResponse *dto.ClaudeRespons // 不叠加,只取最新的 claudeInfo.Usage.PromptTokens = claudeResponse.Usage.InputTokens } - claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens + if claudeResponse.Usage.CacheReadInputTokens > 0 { + claudeInfo.Usage.PromptTokensDetails.CachedTokens = claudeResponse.Usage.CacheReadInputTokens + } + if claudeResponse.Usage.CacheCreationInputTokens > 0 { + claudeInfo.Usage.PromptTokensDetails.CachedCreationTokens = claudeResponse.Usage.CacheCreationInputTokens + } + if cacheCreation5m := claudeResponse.Usage.GetCacheCreation5mTokens(); cacheCreation5m > 0 { + claudeInfo.Usage.ClaudeCacheCreation5mTokens = cacheCreation5m + } + if cacheCreation1h := claudeResponse.Usage.GetCacheCreation1hTokens(); cacheCreation1h > 0 { + claudeInfo.Usage.ClaudeCacheCreation1hTokens = cacheCreation1h + } + if claudeResponse.Usage.OutputTokens > 0 { + claudeInfo.Usage.CompletionTokens = claudeResponse.Usage.OutputTokens + } claudeInfo.Usage.TotalTokens = claudeInfo.Usage.PromptTokens + claudeInfo.Usage.CompletionTokens } From cbebd15692d5c4a21fedcc90faba477ba139c38c Mon Sep 17 00:00:00 2001 From: Seefs <40468931+seefs001@users.noreply.github.com> Date: Tue, 3 Feb 2026 00:09:45 +0800 Subject: [PATCH 9/9] fix: vertex maas api addr (#2810) * fix: vertex maas api addr --- relay/channel/vertex/adaptor.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/relay/channel/vertex/adaptor.go b/relay/channel/vertex/adaptor.go index bd9cc97c5..964c469fb 100644 --- a/relay/channel/vertex/adaptor.go +++ b/relay/channel/vertex/adaptor.go @@ -24,9 +24,9 @@ import ( ) const ( - RequestModeClaude = 1 - RequestModeGemini = 2 - RequestModeLlama = 3 + RequestModeClaude = 1 + RequestModeGemini = 2 + RequestModeOpenSource = 3 ) var claudeModelMap = map[string]string{ @@ -115,7 +115,7 @@ func (a *Adaptor) Init(info *relaycommon.RelayInfo) { } else if strings.Contains(info.UpstreamModelName, "llama") || // open source models strings.Contains(info.UpstreamModelName, "-maas") { - a.RequestMode = RequestModeLlama + a.RequestMode = RequestModeOpenSource } else { a.RequestMode = RequestModeGemini } @@ -166,10 +166,9 @@ func (a *Adaptor) getRequestUrl(info *relaycommon.RelayInfo, modelName, suffix s suffix, ), nil } - } else if a.RequestMode == RequestModeLlama { + } else if a.RequestMode == RequestModeOpenSource { return fmt.Sprintf( - "https://%s-aiplatform.googleapis.com/v1beta1/projects/%s/locations/%s/endpoints/openapi/chat/completions", - region, + "https://aiplatform.googleapis.com/v1beta1/projects/%s/locations/%s/endpoints/openapi/chat/completions", adc.ProjectID, region, ), nil @@ -242,7 +241,7 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) { model = v } return a.getRequestUrl(info, model, suffix) - } else if a.RequestMode == RequestModeLlama { + } else if a.RequestMode == RequestModeOpenSource { return a.getRequestUrl(info, "", "") } return "", errors.New("unsupported request mode") @@ -340,7 +339,7 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn } c.Set("request_model", request.Model) return geminiRequest, nil - } else if a.RequestMode == RequestModeLlama { + } else if a.RequestMode == RequestModeOpenSource { return request, nil } return nil, errors.New("unsupported request mode") @@ -375,7 +374,7 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycom } else { return gemini.GeminiChatStreamHandler(c, info, resp) } - case RequestModeLlama: + case RequestModeOpenSource: return openai.OaiStreamHandler(c, info, resp) } } else { @@ -391,7 +390,7 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycom } return gemini.GeminiChatHandler(c, info, resp) } - case RequestModeLlama: + case RequestModeOpenSource: return openai.OpenaiHandler(c, info, resp) } }