fix: route deepseek through opencode

This commit is contained in:
Codex
2026-05-21 10:30:17 +00:00
parent 27d0ddff51
commit 8b8b74e953
14 changed files with 133 additions and 43 deletions
@@ -21,6 +21,8 @@ const MAX_PREVIEW_CHARS: usize = 6000;
const WORKDIR_MAX_CHARS: usize = 512;
const SCHEDULER_HEARTBEAT_STALE_MS: i64 = 5 * 60 * 1000;
const CODEX_STATS_TIME_ZONE: &str = "Asia/Shanghai";
const DEEPSEEK_CHAT_MODEL: &str = "deepseek-chat";
const MINIMAX_M27_MODEL: &str = "minimax-m2.7";
#[derive(Clone)]
struct Config {
@@ -130,13 +132,17 @@ fn normalize_code_model(value: &str) -> String {
let lower = raw.to_ascii_lowercase();
let leaf = lower.rsplit('/').next().unwrap_or(&lower);
if leaf == "m2.7" || leaf == "minimax-m2.7" {
return "minimax-m2.7".to_string();
return MINIMAX_M27_MODEL.to_string();
}
if leaf == "deepseek" || leaf == "deepseek-chat" {
return DEEPSEEK_CHAT_MODEL.to_string();
}
raw.to_string()
}
fn code_agent_port(model: &str) -> &'static str {
if normalize_code_model(model) == "minimax-m2.7" {
let normalized = normalize_code_model(model);
if normalized == MINIMAX_M27_MODEL || normalized == DEEPSEEK_CHAT_MODEL {
"opencode"
} else {
"codex"
@@ -208,7 +214,7 @@ fn config_from_env() -> Result<Config, String> {
return Err("DATABASE_URL is required".to_string());
}
let default_model = normalize_code_model(&env_string("CODE_QUEUE_DEFAULT_MODEL", "gpt-5.5"));
let model_source = env_string("CODE_QUEUE_MODELS", "gpt-5.5,gpt-5.4-mini,gpt-5.4,minimax-m2.7");
let model_source = env_string("CODE_QUEUE_MODELS", "gpt-5.5,gpt-5.4-mini,gpt-5.4,deepseek-chat,minimax-m2.7");
let mut code_models = vec![default_model.clone()];
for item in model_source.split(',') {
let model = normalize_code_model(item);
@@ -304,7 +304,9 @@ const codeQueueEnvironmentHint = [
].join("\n");
const maxTaskAttempts = 99;
const workdirMaxLength = 512;
const defaultCodeModels = ["gpt-5.5", "gpt-5.4-mini", "gpt-5.4", "minimax-m2.7"];
const deepseekChatModel = "deepseek-chat";
const minimaxM27Model = "minimax-m2.7";
const defaultCodeModels = ["gpt-5.5", "gpt-5.4-mini", "gpt-5.4", deepseekChatModel, minimaxM27Model];
const codeExecutionModes: CodeExecutionMode[] = ["default", "windows-native"];
const codexStatsTimeZone = "Asia/Shanghai";
const schedulerHeartbeatStaleMs = 5 * 60 * 1000;
@@ -503,12 +505,14 @@ function normalizeCodeModel(value: string): string {
if (raw.length === 0) return raw;
const lower = raw.toLowerCase();
const leaf = lower.includes("/") ? lower.split("/").at(-1) ?? lower : lower;
if (leaf === "minimax-m2.7" || leaf === "m2.7") return "minimax-m2.7";
if (leaf === "minimax-m2.7" || leaf === "m2.7") return minimaxM27Model;
if (leaf === "deepseek" || leaf === "deepseek-chat") return deepseekChatModel;
return raw;
}
function codeAgentPortForModel(model: string): "codex" | "opencode" {
return normalizeCodeModel(model) === "minimax-m2.7" ? "opencode" : "codex";
const normalized = normalizeCodeModel(model);
return normalized === minimaxM27Model || normalized === deepseekChatModel ? "opencode" : "codex";
}
function codeAgentPortInfo(kind: "codex" | "opencode"): JsonRecord {