From 7a0049a8d0c97a298622518cc913495d08bf8c0e Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Mon, 13 Jul 2026 13:09:27 +0900 Subject: [PATCH] ci: swap direct-OpenAI review slot from gpt-5 to gpt-5.6-luna MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The org OpenAI account hit insufficient_quota, and legacy gpt-5 ($1.25/M input, $10/M output) was the pool's most expensive direct slot. GPT-5.6 Luna is the newest family's cost-efficient tier at $1/M input, $6/M output — cheaper AND two generations newer — so the same OpenAI budget covers roughly 40% more review output between top-ups. - Register gpt-5.6-luna in the direct-OpenAI provider catalog (1M context, 128K output, reasoning effort high, same shape as the existing gpt-5 entry, which stays for other call sites) - Point the OPENCODE_MODEL_CANDIDATES direct-OpenAI slot at it - Update the pinned contract-test expectations to match Full test suite passes: 375 passed, 8 skipped. Co-Authored-By: Claude Fable 5 --- .github/workflows/opencode-review.yml | 23 ++++++++++++++++++++++- tests/test_opencode_agent_contract.py | 8 ++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/.github/workflows/opencode-review.yml b/.github/workflows/opencode-review.yml index a6ab49c45..2fa848ff1 100644 --- a/.github/workflows/opencode-review.yml +++ b/.github/workflows/opencode-review.yml @@ -2995,6 +2995,23 @@ jobs: "apiKey": "{env:OPENAI_API_KEY}" }, "models": { + "gpt-5.6-luna": { + "name": "OpenAI GPT-5.6 Luna (direct)", + "tool_call": true, + "reasoning": true, + "options": { + "reasoningEffort": "high" + }, + "variants": { + "high": { + "reasoningEffort": "high" + } + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, "gpt-5": { "name": "OpenAI GPT-5 (direct)", "tool_call": true, @@ -3253,7 +3270,11 @@ jobs: # High-sensitivity review candidates only. DeepSeek V3 has been the # most reliable first-pass reviewer in the org queue, then the pool # falls through to full-size GPT/o3 and reasoning-capable fallbacks. - OPENCODE_MODEL_CANDIDATES: "github-models/deepseek/deepseek-v3-0324 openai/gpt-5 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" + # The direct-OpenAI slot runs GPT-5.6 Luna: the newest family's + # 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: "github-models/deepseek/deepseek-v3-0324 openai/gpt-5.6-luna 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. diff --git a/tests/test_opencode_agent_contract.py b/tests/test_opencode_agent_contract.py index 91267970c..13c7c1d0f 100644 --- a/tests/test_opencode_agent_contract.py +++ b/tests/test_opencode_agent_contract.py @@ -86,14 +86,14 @@ def test_opencode_model_pool_sets_high_effort_for_capable_candidates(): assert candidate_pairs assert candidate_pairs == [ ["github-models", "deepseek/deepseek-v3-0324"], - ["openai", "gpt-5"], + ["openai", "gpt-5.6-luna"], ["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"], ] - assert direct_openai_models == ["gpt-5"] + assert direct_openai_models == ["gpt-5.6-luna"] assert set(github_candidate_models).issubset(set(github_models)) assert github_candidate_models == [ "deepseek/deepseek-v3-0324", @@ -670,7 +670,7 @@ def test_workflow_provisions_sandbox_tool_and_reviewer_agent(): assert "Skipping publish-step failed-check OpenCode diagnosis for central review-process self-repair" in workflow assert ( 'OPENCODE_MODEL_CANDIDATES: "github-models/deepseek/deepseek-v3-0324 ' - "openai/gpt-5 " + "openai/gpt-5.6-luna " "github-models/openai/gpt-5 " "github-models/openai/gpt-5-chat " "github-models/openai/o3 " @@ -750,7 +750,7 @@ def test_workflow_provisions_sandbox_tool_and_reviewer_agent(): assert 'OPENCODE_MODEL_CANDIDATES: "github-models/openai/gpt-5-nano"' not in workflow assert ( 'OPENCODE_MODEL_CANDIDATES: "github-models/deepseek/deepseek-v3-0324 ' - "openai/gpt-5 " + "openai/gpt-5.6-luna " "github-models/openai/gpt-5 " "github-models/openai/gpt-5-chat " "github-models/openai/o3 "