From 4d2d9a421241f1b8b4a92456a5c885bd92ef1ec8 Mon Sep 17 00:00:00 2001 From: Charles Green Date: Sat, 19 Sep 2026 20:12:43 +0900 Subject: [PATCH] feat(gemini): default model to gemini-3.5-flash Replace the gemini-2.5-pro remap (empty / gpt-5.4) with gemini-3.5-flash for Vertex coding loops. Sync already overrides via caller model input. --- README.md | 2 +- cmd/aixgo-code/init_select.go | 2 +- cmd/aixgo-code/main.go | 2 +- cmd/aixgo-code/main_test.go | 6 +++--- internal/engine/gemini/gemini_test.go | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 569eba4..6a693da 100644 --- a/README.md +++ b/README.md @@ -249,7 +249,7 @@ export AIXGO_VERTEX_LOCATION="us-central1" # optional export AIXGO_VERTEX_API_KEY="" ``` -In GitHub Actions, pass reusable-workflow inputs `vertex-project`, `vertex-location`, and secret `vertex-api-key` instead of Azure. The workflow installs `@google/gemini-cli` when `vertex-project` is set. Default model is `gemini-2.5-pro` (override with `--model` / workflow `model:`). +In GitHub Actions, pass reusable-workflow inputs `vertex-project`, `vertex-location`, and secret `vertex-api-key` instead of Azure. The workflow installs `@google/gemini-cli` when `vertex-project` is set. Default model is `gemini-3.5-flash` (override with `--model` / workflow `model:`). ## Deployment model diff --git a/cmd/aixgo-code/init_select.go b/cmd/aixgo-code/init_select.go index d87d334..23c4706 100644 --- a/cmd/aixgo-code/init_select.go +++ b/cmd/aixgo-code/init_select.go @@ -295,7 +295,7 @@ func callerEngineBlocks(engine string) (inputs, secrets string) { case "gemini": inputs = " vertex-project: ${{ vars.AIXGO_VERTEX_PROJECT }}\n" + " vertex-location: ${{ vars.AIXGO_VERTEX_LOCATION }}\n" + - " # model: gemini-2.5-pro" + " # model: gemini-3.5-flash" secrets = " vertex-api-key: ${{ secrets.AIXGO_VERTEX_API_KEY }}\n" + " github-app-private-key: ${{ secrets.AIXGO_GH_APP_PRIVATE_KEY }}" case "claude": diff --git a/cmd/aixgo-code/main.go b/cmd/aixgo-code/main.go index ebc2557..d9cfff7 100644 --- a/cmd/aixgo-code/main.go +++ b/cmd/aixgo-code/main.go @@ -229,7 +229,7 @@ func newRunner(cfg *config.Config, codexHome, model string) engine.Runner { } if cfg.Engine == "gemini" { if model == "" || model == "gpt-5.4" { - model = "gemini-2.5-pro" + model = "gemini-3.5-flash" } return &gemini.Runner{Model: model} } diff --git a/cmd/aixgo-code/main_test.go b/cmd/aixgo-code/main_test.go index 7d6916d..93bbd23 100644 --- a/cmd/aixgo-code/main_test.go +++ b/cmd/aixgo-code/main_test.go @@ -1079,11 +1079,11 @@ func TestNewRunnerSelectsTheEngine(t *testing.T) { if !ok { t.Fatal("engine: gemini must select the Gemini adapter") } - if g.Model != "gemini-2.5-pro" { - t.Fatalf("gemini default model = %q, want gemini-2.5-pro", g.Model) + if g.Model != "gemini-3.5-flash" { + t.Fatalf("gemini default model = %q, want gemini-3.5-flash", g.Model) } g2, _ := newRunner(&config.Config{Engine: "gemini"}, t.TempDir(), "gpt-5.4").(*gemini.Runner) - if g2.Model != "gemini-2.5-pro" { + if g2.Model != "gemini-3.5-flash" { t.Fatalf("the Codex default must not be forwarded to Gemini: %q", g2.Model) } g3, _ := newRunner(&config.Config{Engine: "gemini"}, t.TempDir(), "gemini-2.5-flash").(*gemini.Runner) diff --git a/internal/engine/gemini/gemini_test.go b/internal/engine/gemini/gemini_test.go index 7512539..9e44b3d 100644 --- a/internal/engine/gemini/gemini_test.go +++ b/internal/engine/gemini/gemini_test.go @@ -34,12 +34,12 @@ func TestRunPassesThePromptAndModel(t *testing.T) { r.Bin = writeFakeGemini(t, echoArgs) res, err := r.Run(context.Background(), domain.RunRequest{ Role: domain.RoleImplementer, WorkDir: t.TempDir(), - Prompt: "do the thing", Model: "gemini-2.5-pro", + Prompt: "do the thing", Model: "gemini-3.5-flash", }) if err != nil { t.Fatalf("unexpected error: %v", err) } - for _, want := range []string{"-p", "do the thing", "-m", "gemini-2.5-pro"} { + for _, want := range []string{"-p", "do the thing", "-m", "gemini-3.5-flash"} { if !strings.Contains(res.Summary, want) { t.Fatalf("args missing %q: %s", want, res.Summary) }