Skip to content
Closed
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
132 changes: 131 additions & 1 deletion .github/workflows/opencode-review-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3492,6 +3492,136 @@ jobs:
"context": 200000,
"output": 32000
}
},
"grok-code-free": {
"name": "Grok Code Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"code-supernova-free": {
"name": "Code Supernova Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"qwen3-coder-free": {
"name": "Qwen3 Coder Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"gpt-oss-120b-free": {
"name": "GPT-OSS 120B Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"kimi-k2-free": {
"name": "Kimi K2 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"glm-4.6-free": {
"name": "GLM 4.6 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"glm-4.5-free": {
"name": "GLM 4.5 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"minimax-m2-free": {
"name": "MiniMax M2 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"qwen3-max-free": {
"name": "Qwen3 Max Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"deepseek-v3.1-free": {
"name": "DeepSeek V3.1 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"glm-4.7-free": {
"name": "GLM 4.7 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"minimax-m2.5-free": {
"name": "MiniMax M2.5 Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
},
"mimo-v2-pro-free": {
"name": "MiMo V2 Pro Free",
"tool_call": true,
"reasoning": true,
"limit": {
"context": 200000,
"output": 32000
}
},
"mimo-v2-omni-free": {
"name": "MiMo V2 Omni Free",
"tool_call": true,
"reasoning": true,
"limit": {
"context": 200000,
"output": 32000
}
},
"nemotron-3-super-free": {
"name": "Nemotron 3 Super Free",
"tool_call": true,
"limit": {
"context": 1000000,
"output": 128000
}
},
"qwen3.6-plus-free": {
"name": "Qwen3.6 Plus Free",
"tool_call": true,
"limit": {
"context": 256000,
"output": 64000
}
}
}
},
Expand Down Expand Up @@ -3824,7 +3954,7 @@ jobs:
# cost-efficient tier, cheaper than the legacy gpt-5 it replaced
# ($1/$6 vs $1.25/$10 per 1M tokens) so the org OpenAI budget
# stretches further between top-ups.
OPENCODE_MODEL_CANDIDATES: "${{ needs.validate-pr-metadata.outputs.is_private == 'false' && 'opencode-free/nemotron-3-ultra-free opencode-free/deepseek-v4-flash-free opencode-free/north-mini-code-free opencode-free/laguna-s-2.1-free opencode-free/ling-3.0-flash-free opencode-free/big-pickle opencode-free/mimo-v2.5-free ' || '' }}github-models/deepseek/deepseek-v3-0324 openai/gpt-5.6-luna openrouter/deepseek/deepseek-v3.2 openrouter/qwen/qwen3-coder github-models/openai/gpt-4.1 github-models/openai/gpt-5 github-models/openai/gpt-5-chat github-models/openai/o3 github-models/deepseek/deepseek-r1-0528 github-models/deepseek/deepseek-r1"
OPENCODE_MODEL_CANDIDATES: "${{ needs.validate-pr-metadata.outputs.is_private == 'false' && 'opencode-free/nemotron-3-ultra-free opencode-free/deepseek-v4-flash-free opencode-free/north-mini-code-free opencode-free/laguna-s-2.1-free opencode-free/ling-3.0-flash-free opencode-free/big-pickle opencode-free/mimo-v2.5-free opencode-free/grok-code-free opencode-free/code-supernova-free opencode-free/qwen3-coder-free opencode-free/gpt-oss-120b-free opencode-free/kimi-k2-free opencode-free/glm-4.6-free opencode-free/glm-4.5-free opencode-free/minimax-m2-free opencode-free/qwen3-max-free opencode-free/deepseek-v3.1-free opencode-free/glm-4.7-free opencode-free/minimax-m2.5-free opencode-free/mimo-v2-pro-free opencode-free/mimo-v2-omni-free opencode-free/nemotron-3-super-free opencode-free/qwen3.6-plus-free ' || '' }}github-models/deepseek/deepseek-v3-0324 openai/gpt-5.6-luna openrouter/deepseek/deepseek-v3.2 openrouter/qwen/qwen3-coder github-models/openai/gpt-4.1 github-models/openai/gpt-5 github-models/openai/gpt-5-chat github-models/openai/o3 github-models/deepseek/deepseek-r1-0528 github-models/deepseek/deepseek-r1"
# One attempt per model, then fall through to the next model. Retrying
# the SAME model 5x let a rate-limited/hung leader consume the whole
# step, so the pool never reached a healthy fallback model.
Expand Down
84 changes: 82 additions & 2 deletions tests/test_opencode_agent_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,23 @@ def test_opencode_model_pool_sets_high_effort_for_capable_candidates():
"opencode-free/laguna-s-2.1-free "
"opencode-free/ling-3.0-flash-free "
"opencode-free/big-pickle "
"opencode-free/mimo-v2.5-free ' || '' }}"
"opencode-free/mimo-v2.5-free "
"opencode-free/grok-code-free "
"opencode-free/code-supernova-free "
"opencode-free/qwen3-coder-free "
"opencode-free/gpt-oss-120b-free "
"opencode-free/kimi-k2-free "
"opencode-free/glm-4.6-free "
"opencode-free/glm-4.5-free "
"opencode-free/minimax-m2-free "
"opencode-free/qwen3-max-free "
"opencode-free/deepseek-v3.1-free "
"opencode-free/glm-4.7-free "
"opencode-free/minimax-m2.5-free "
"opencode-free/mimo-v2-pro-free "
"opencode-free/mimo-v2-omni-free "
"opencode-free/nemotron-3-super-free "
"opencode-free/qwen3.6-plus-free ' || '' }}"
)
candidates_text = candidates_match.group(1)
assert candidates_text.startswith(conditional_public_candidate)
Expand All @@ -110,6 +126,22 @@ def test_opencode_model_pool_sets_high_effort_for_capable_candidates():
"opencode-free/ling-3.0-flash-free",
"opencode-free/big-pickle",
"opencode-free/mimo-v2.5-free",
"opencode-free/grok-code-free",
"opencode-free/code-supernova-free",
"opencode-free/qwen3-coder-free",
"opencode-free/gpt-oss-120b-free",
"opencode-free/kimi-k2-free",
"opencode-free/glm-4.6-free",
"opencode-free/glm-4.5-free",
"opencode-free/minimax-m2-free",
"opencode-free/qwen3-max-free",
"opencode-free/deepseek-v3.1-free",
"opencode-free/glm-4.7-free",
"opencode-free/minimax-m2.5-free",
"opencode-free/mimo-v2-pro-free",
"opencode-free/mimo-v2-omni-free",
"opencode-free/nemotron-3-super-free",
"opencode-free/qwen3.6-plus-free",
*candidates_text.removeprefix(conditional_public_candidate).split(),
]
candidate_pairs = [candidate.split("/", 1) for candidate in candidates]
Expand All @@ -134,6 +166,22 @@ def test_opencode_model_pool_sets_high_effort_for_capable_candidates():
["opencode-free", "ling-3.0-flash-free"],
["opencode-free", "big-pickle"],
["opencode-free", "mimo-v2.5-free"],
["opencode-free", "grok-code-free"],
["opencode-free", "code-supernova-free"],
["opencode-free", "qwen3-coder-free"],
["opencode-free", "gpt-oss-120b-free"],
["opencode-free", "kimi-k2-free"],
["opencode-free", "glm-4.6-free"],
["opencode-free", "glm-4.5-free"],
["opencode-free", "minimax-m2-free"],
["opencode-free", "qwen3-max-free"],
["opencode-free", "deepseek-v3.1-free"],
["opencode-free", "glm-4.7-free"],
["opencode-free", "minimax-m2.5-free"],
["opencode-free", "mimo-v2-pro-free"],
["opencode-free", "mimo-v2-omni-free"],
["opencode-free", "nemotron-3-super-free"],
["opencode-free", "qwen3.6-plus-free"],
["github-models", "deepseek/deepseek-v3-0324"],
["openai", "gpt-5.6-luna"],
["openrouter", "deepseek/deepseek-v3.2"],
Expand Down Expand Up @@ -169,6 +217,22 @@ def test_opencode_model_pool_sets_high_effort_for_capable_candidates():
"ling-3.0-flash-free",
"big-pickle",
"mimo-v2.5-free",
"grok-code-free",
"code-supernova-free",
"qwen3-coder-free",
"gpt-oss-120b-free",
"kimi-k2-free",
"glm-4.6-free",
"glm-4.5-free",
"minimax-m2-free",
"qwen3-max-free",
"deepseek-v3.1-free",
"glm-4.7-free",
"minimax-m2.5-free",
"mimo-v2-pro-free",
"mimo-v2-omni-free",
"nemotron-3-super-free",
"qwen3.6-plus-free",
}
nemotron_model = free_models["nemotron-3-ultra-free"]
deepseek_model = free_models["deepseek-v4-flash-free"]
Expand Down Expand Up @@ -1299,7 +1363,23 @@ def test_workflow_provisions_sandbox_tool_and_reviewer_agent():
"opencode-free/laguna-s-2.1-free "
"opencode-free/ling-3.0-flash-free "
"opencode-free/big-pickle "
"opencode-free/mimo-v2.5-free ' || ''"
"opencode-free/mimo-v2.5-free "
"opencode-free/grok-code-free "
"opencode-free/code-supernova-free "
"opencode-free/qwen3-coder-free "
"opencode-free/gpt-oss-120b-free "
"opencode-free/kimi-k2-free "
"opencode-free/glm-4.6-free "
"opencode-free/glm-4.5-free "
"opencode-free/minimax-m2-free "
"opencode-free/qwen3-max-free "
"opencode-free/deepseek-v3.1-free "
"opencode-free/glm-4.7-free "
"opencode-free/minimax-m2.5-free "
"opencode-free/mimo-v2-pro-free "
"opencode-free/mimo-v2-omni-free "
"opencode-free/nemotron-3-super-free "
"opencode-free/qwen3.6-plus-free ' || ''"
) in workflow
assert (
"github-models/deepseek/deepseek-v3-0324 "
Expand Down
Loading