diff --git a/internal/registry/model_definitions.go b/internal/registry/model_definitions.go index 12464094..adcaacb7 100644 --- a/internal/registry/model_definitions.go +++ b/internal/registry/model_definitions.go @@ -19,6 +19,7 @@ import ( // - codex // - qwen // - iflow +// - kimi // - kiro // - github-copilot // - kiro @@ -43,6 +44,8 @@ func GetStaticModelDefinitionsByChannel(channel string) []*ModelInfo { return GetQwenModels() case "iflow": return GetIFlowModels() + case "kimi": + return GetKimiModels() case "github-copilot": return GetGitHubCopilotModels() case "kiro": @@ -93,6 +96,7 @@ func LookupStaticModelInfo(modelID string) *ModelInfo { GetOpenAIModels(), GetQwenModels(), GetIFlowModels(), + GetKimiModels(), GetGitHubCopilotModels(), GetKiroModels(), GetAmazonQModels(), diff --git a/internal/registry/model_definitions_static_data.go b/internal/registry/model_definitions_static_data.go index 39b2aa0c..26716804 100644 --- a/internal/registry/model_definitions_static_data.go +++ b/internal/registry/model_definitions_static_data.go @@ -788,6 +788,19 @@ func GetQwenModels() []*ModelInfo { MaxCompletionTokens: 2048, SupportedParameters: []string{"temperature", "top_p", "max_tokens", "stream", "stop"}, }, + { + ID: "coder-model", + Object: "model", + Created: 1771171200, + OwnedBy: "qwen", + Type: "qwen", + Version: "3.5", + DisplayName: "Qwen 3.5 Plus", + Description: "efficient hybrid model with leading coding performance", + ContextLength: 1048576, + MaxCompletionTokens: 65536, + SupportedParameters: []string{"temperature", "top_p", "max_tokens", "stream", "stop"}, + }, { ID: "vision-model", Object: "model", diff --git a/internal/runtime/executor/qwen_executor.go b/internal/runtime/executor/qwen_executor.go index 28b803ad..69e1f7fa 100644 --- a/internal/runtime/executor/qwen_executor.go +++ b/internal/runtime/executor/qwen_executor.go @@ -22,9 +22,7 @@ import ( ) const ( - qwenUserAgent = "google-api-nodejs-client/9.15.1" - qwenXGoogAPIClient = "gl-node/22.17.0" - qwenClientMetadataValue = "ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI" + qwenUserAgent = "QwenCode/0.10.3 (darwin; arm64)" ) // QwenExecutor is a stateless executor for Qwen Code using OpenAI-compatible chat completions. @@ -344,8 +342,18 @@ func applyQwenHeaders(r *http.Request, token string, stream bool) { r.Header.Set("Content-Type", "application/json") r.Header.Set("Authorization", "Bearer "+token) r.Header.Set("User-Agent", qwenUserAgent) - r.Header.Set("X-Goog-Api-Client", qwenXGoogAPIClient) - r.Header.Set("Client-Metadata", qwenClientMetadataValue) + r.Header.Set("X-Dashscope-Useragent", qwenUserAgent) + r.Header.Set("X-Stainless-Runtime-Version", "v22.17.0") + r.Header.Set("Sec-Fetch-Mode", "cors") + r.Header.Set("X-Stainless-Lang", "js") + r.Header.Set("X-Stainless-Arch", "arm64") + r.Header.Set("X-Stainless-Package-Version", "5.11.0") + r.Header.Set("X-Dashscope-Cachecontrol", "enable") + r.Header.Set("X-Stainless-Retry-Count", "0") + r.Header.Set("X-Stainless-Os", "MacOS") + r.Header.Set("X-Dashscope-Authtype", "qwen-oauth") + r.Header.Set("X-Stainless-Runtime", "node") + if stream { r.Header.Set("Accept", "text/event-stream") return