Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions internal/auth/qoder/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ var ModelMap = map[string]string{
"efficient": "efficient",
"lite": "lite",
// Frontier models — pin a specific backing model
"qmodel": "qmodel", // Qwen 3.6 Plus
"dmodel": "dmodel", // DeepSeek V4 Pro
"dfmodel": "dfmodel", // DeepSeek V4 Flash
"gm51model": "gm51model", // GLM 5.1
"kmodel": "kmodel", // Kimi K2.6
"mmodel": "mmodel", // MiniMax M2.7
"qmodel": "qmodel", // Qwen3.7 Plus
"qmodel_latest": "qmodel_latest", // Qwen3.7 Max (latest)
"dmodel": "dmodel", // DeepSeek V4 Pro
"dfmodel": "dfmodel", // DeepSeek V4 Flash
"gm51model": "gm51model", // GLM 5.1
"kmodel": "kmodel", // Kimi K2.6
"mmodel": "mmodel", // MiniMax M3
}

// doRefreshToken performs a token refresh and persists the result to authFilePath.
Expand Down
144 changes: 106 additions & 38 deletions internal/registry/models/models.json
Original file line number Diff line number Diff line change
Expand Up @@ -2151,7 +2151,6 @@
]
}
}

],
"xai": [
{
Expand Down Expand Up @@ -2287,8 +2286,11 @@
"type": "qoder",
"display_name": "Qoder Auto",
"description": "Qoder Auto — automatically selects the best model for your prompt",
"context_length": 131072,
"max_completion_tokens": 65536
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
},
{
"id": "qoder/ultimate",
Expand All @@ -2298,13 +2300,23 @@
"type": "qoder",
"display_name": "Qoder Ultimate",
"description": "Qoder Ultimate — highest quality tier",
"context_length": 131072,
"max_completion_tokens": 65536,
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
],
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true
"dynamic_allowed": true,
"levels": [
"low",
"medium",
"high",
"max",
"xhigh"
]
}
},
{
Expand All @@ -2315,13 +2327,23 @@
"type": "qoder",
"display_name": "Qoder Performance",
"description": "Qoder Performance — balanced quality and speed",
"context_length": 131072,
"max_completion_tokens": 32768,
"context_length": 272000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
],
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true
"dynamic_allowed": true,
"levels": [
"low",
"medium",
"high",
"max",
"xhigh"
]
}
},
{
Expand All @@ -2332,8 +2354,11 @@
"type": "qoder",
"display_name": "Qoder Efficient",
"description": "Qoder Efficient — cost-efficient tier",
"context_length": 131072,
"max_completion_tokens": 16384
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
},
{
"id": "qoder/lite",
Expand All @@ -2343,19 +2368,35 @@
"type": "qoder",
"display_name": "Qoder Lite",
"description": "Qoder Lite — fastest and most affordable tier",
"context_length": 131072,
"max_completion_tokens": 16384
"context_length": 180000
},
{
"id": "qoder/qmodel",
"object": "model",
"created": 1767196800,
"owned_by": "qoder",
"type": "qoder",
"display_name": "Qwen 3.6 Plus (Qoder)",
"description": "Qoder frontier — Qwen 3.6 Plus",
"context_length": 131072,
"max_completion_tokens": 32768
"display_name": "Qwen3.7 Plus (Qoder)",
"description": "Qoder frontier — Qwen3.7 Plus",
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
},
{
"id": "qoder/qmodel_latest",
"object": "model",
"created": 1767196800,
"owned_by": "qoder",
"type": "qoder",
"display_name": "Qwen3.7 Max (Qoder)",
"description": "Qoder frontier — Qwen3.7 Max (latest Qwen)",
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
},
{
"id": "qoder/dmodel",
Expand All @@ -2365,13 +2406,20 @@
"type": "qoder",
"display_name": "DeepSeek V4 Pro (Qoder)",
"description": "Qoder frontier — DeepSeek V4 Pro",
"context_length": 131072,
"max_completion_tokens": 65536,
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
],
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true
"dynamic_allowed": true,
"levels": [
"high",
"max"
]
}
},
{
Expand All @@ -2382,8 +2430,21 @@
"type": "qoder",
"display_name": "DeepSeek V4 Flash (Qoder)",
"description": "Qoder frontier — DeepSeek V4 Flash",
"context_length": 131072,
"max_completion_tokens": 16384
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
],
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true,
"levels": [
"high",
"max"
]
}
},
{
"id": "qoder/gm51model",
Expand All @@ -2393,13 +2454,20 @@
"type": "qoder",
"display_name": "GLM 5.1 (Qoder)",
"description": "Qoder frontier — GLM 5.1",
"context_length": 131072,
"max_completion_tokens": 32768,
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
],
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true
"dynamic_allowed": true,
"levels": [
"high",
"max"
]
}
},
{
Expand All @@ -2410,25 +2478,25 @@
"type": "qoder",
"display_name": "Kimi K2.6 (Qoder)",
"description": "Qoder frontier — Kimi K2.6",
"context_length": 131072,
"max_completion_tokens": 32768,
"thinking": {
"min": 1024,
"max": 32000,
"zero_allowed": true,
"dynamic_allowed": true
}
"context_length": 256000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
},
{
"id": "qoder/mmodel",
"object": "model",
"created": 1767196800,
"owned_by": "qoder",
"type": "qoder",
"display_name": "MiniMax M2.7 (Qoder)",
"description": "Qoder frontier — MiniMax M2.7",
"context_length": 131072,
"max_completion_tokens": 65536
"display_name": "MiniMax M3 (Qoder)",
"description": "Qoder frontier — MiniMax M3",
"context_length": 180000,
"supported_input_modalities": [
"TEXT",
"IMAGE"
]
}
]
}
}
3 changes: 2 additions & 1 deletion internal/runtime/executor/qoder_executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ func (e *QoderExecutor) ExecuteStream(ctx context.Context, authRecord *cliproxya
qoderModel := strings.TrimPrefix(model, "qoder/")
if mapped, ok := qoderauth.ModelMap[qoderModel]; ok {
qoderModel = mapped
} else {
} else if _, cached := storage.GetModelConfig(qoderModel); !cached {
// Not in static map and not in dynamic model cache — reject early.
return nil, fmt.Errorf("unsupported qoder model: %q (received %q)", qoderModel, model)
}

Expand Down
Loading