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
@@ -1,4 +1,4 @@
import { codexSubmitRoutingRecommendationForTest } from "./src/code-queue";
import { codexSubmitModelRegistryForTest, codexSubmitRoutingRecommendationForTest } from "./src/code-queue";
type JsonRecord = Record<string, unknown>;
@@ -53,16 +53,30 @@ export function runCodeQueueSubmitRoutingContract(): JsonRecord {
assertCondition(runtime.recommendedModel === "gpt-5.5", "runtime/core work should recommend GPT-5.5", runtime);
const medium = codexSubmitRoutingRecommendationForTest(mediumPrompt, "deepseek");
assertCondition(medium.route === "deepseek-codex", "medium bounded frontend work should recommend DeepSeek", medium);
assertCondition(medium.recommendedRunner === "codex", "DeepSeek work should use Codex runner", medium);
assertCondition(medium.route === "deepseek-opencode", "medium bounded frontend work should recommend DeepSeek/OpenCode", medium);
assertCondition(medium.recommendedRunner === "opencode", "DeepSeek work should use OpenCode runner", medium);
assertCondition(medium.recommendedModel === "deepseek-chat", "DeepSeek candidate should recommend deepseek-chat", medium);
assertCondition(asRecord(medium.riskControls).mediumComplexityCandidate === true, "medium prompt should satisfy medium complexity controls", medium);
assertCondition(asRecord(medium.explicitRequest).model === "deepseek-chat", "explicit deepseek alias should normalize to deepseek-chat", medium);
assertCondition(asRecord(medium.explicitRequest).runner === "opencode", "explicit deepseek alias should route to OpenCode", medium);
const policyContract = asRecord(medium.policyContract);
assertCondition(asRecord(policyContract.concurrency).gpt55Routine === 5, "policy contract should expose GPT-5.5 routine concurrency", policyContract);
assertCondition(asRecord(policyContract.concurrency).gpt55BurstMax === 10, "policy contract should expose GPT-5.5 burst concurrency", policyContract);
assertCondition(asRecord(policyContract.concurrency).minimaxSimpleMax === 10, "policy contract should expose MiniMax simple concurrency", policyContract);
assertCondition(asRecord(policyContract.concurrency).deepseekMediumDefault === 5, "policy contract should expose DeepSeek medium default concurrency", policyContract);
const modelTiers = asRecord(policyContract).modelTiers as unknown[];
assertCondition(Array.isArray(modelTiers), "policy contract should expose model tiers", policyContract);
const deepseekTier = modelTiers.map(asRecord).find((tier) => tier.model === "deepseek-chat");
assertCondition(deepseekTier?.runner === "opencode", "DeepSeek policy tier should use OpenCode", policyContract);
const registry = codexSubmitModelRegistryForTest(["gpt-5.5", "deepseek", "minimax-m2.7"]);
const modelPorts = asRecord(registry.modelPorts);
assertCondition(modelPorts["deepseek-chat"] === "opencode", "modelPorts should route deepseek-chat to OpenCode", registry);
assertCondition(modelPorts["minimax-m2.7"] === "opencode", "modelPorts should keep MiniMax on OpenCode", registry);
assertCondition(modelPorts["gpt-5.5"] === "codex", "modelPorts should keep default GPT on Codex", registry);
assertCondition(registry.opencodeModels.includes("deepseek-chat"), "opencodeModels should include deepseek-chat", registry);
assertCondition(registry.opencodeModels.includes("minimax-m2.7"), "opencodeModels should include MiniMax", registry);
assertCondition(registry.codexModels.includes("gpt-5.5"), "codexModels should include default GPT", registry);
const commanderOnly = codexSubmitRoutingRecommendationForTest(commanderOnlyPrompt);
assertCondition(commanderOnly.route === "commander-human-only", "prod restart/secrets/DB work should be commander-only", commanderOnly);
@@ -80,7 +94,8 @@ export function runCodeQueueSubmitRoutingContract(): JsonRecord {
checks: [
"low-risk self-contained prompts recommend minimax-m2.7/OpenCode",
"runtime/core work recommends GPT-5.5/Codex",
"medium bounded frontend work recommends deepseek-chat/Codex",
"medium bounded frontend work recommends deepseek-chat/OpenCode",
"model registry maps deepseek-chat and minimax-m2.7 to OpenCode and GPT-5.5 to Codex",
"dry-run policy contract exposes model-tier concurrency",
"prod/restart/secret/DB work is commander-only",
"explicit --model mismatch is visible and payload is unchanged",