From 82c1ee6ce2dbc5328e66745938f9c8a7682e500d Mon Sep 17 00:00:00 2001 From: Mohammad Saddam Hossain Date: Mon, 19 Oct 2026 08:15:51 +0530 Subject: [PATCH 1/2] fix(ai): gemini default model is dead for new API keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live-checking ai.runSummary with a real Gemini key (per #168 follow-up) found the default gemini-2.5-flash returns HTTP 404 "no longer available to new users" — every ai.provider: gemini config without an explicit ai.model is broken out of the box. Switch the default to gemini-3.8-flash, confirmed against the real API (prompt -> HTTP call -> response parse all verified end-to-end, including a realistic run-summary prompt). Co-Authored-By: Claude Sonnet 5 --- docs-site/docs/reporting/html-report.md | 2 +- src/main/java/com/seleniumboot/ai/AiProvider.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs-site/docs/reporting/html-report.md b/docs-site/docs/reporting/html-report.md index 9330fb5..2669c95 100644 --- a/docs-site/docs/reporting/html-report.md +++ b/docs-site/docs/reporting/html-report.md @@ -114,7 +114,7 @@ The AI features (`ai.failureAnalysis` and `ai.runSummary`) are not tied to one v | `ai.provider` | Backend | Default `ai.model` | |---|---|---| | `anthropic` (default) | Claude Messages API | `claude-haiku-4-5-20251001` | -| `gemini` | Google Gemini `generateContent` | `gemini-2.5-flash` | +| `gemini` | Google Gemini `generateContent` | `gemini-3.8-flash` | | `openai` | Any OpenAI-compatible `/chat/completions` endpoint | `gpt-4o-mini` | ```yaml diff --git a/src/main/java/com/seleniumboot/ai/AiProvider.java b/src/main/java/com/seleniumboot/ai/AiProvider.java index 0a89398..10d9f00 100644 --- a/src/main/java/com/seleniumboot/ai/AiProvider.java +++ b/src/main/java/com/seleniumboot/ai/AiProvider.java @@ -18,7 +18,7 @@ enum AiProvider { ANTHROPIC("https://api.anthropic.com/v1", "claude-haiku-4-5-20251001"), - GEMINI("https://generativelanguage.googleapis.com/v1beta", "gemini-2.5-flash"), + GEMINI("https://generativelanguage.googleapis.com/v1beta", "gemini-3.8-flash"), OPENAI("https://api.openai.com/v1", "gpt-4o-mini"); final String defaultBaseUrl; From c87f2488d1eae7015627f42f56b02285f2510590 Mon Sep 17 00:00:00 2001 From: Mohammad Saddam Hossain Date: Mon, 19 Oct 2026 09:38:22 +0530 Subject: [PATCH 2/2] fix(ai): use the gemini-flash-latest alias instead of a pinned model Pinned Gemini model names get retired (gemini-2.5-flash already was); the -latest alias does not. Confirmed against the real Gemini API. Adds a test pinning the default endpoint. Co-Authored-By: Claude Sonnet 5.5 --- docs-site/docs/reporting/html-report.md | 2 +- src/main/java/com/seleniumboot/ai/AiProvider.java | 2 +- src/test/java/com/seleniumboot/ai/AiProviderTest.java | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs-site/docs/reporting/html-report.md b/docs-site/docs/reporting/html-report.md index 2669c95..0950c52 100644 --- a/docs-site/docs/reporting/html-report.md +++ b/docs-site/docs/reporting/html-report.md @@ -114,7 +114,7 @@ The AI features (`ai.failureAnalysis` and `ai.runSummary`) are not tied to one v | `ai.provider` | Backend | Default `ai.model` | |---|---|---| | `anthropic` (default) | Claude Messages API | `claude-haiku-4-5-20251001` | -| `gemini` | Google Gemini `generateContent` | `gemini-3.8-flash` | +| `gemini` | Google Gemini `generateContent` | `gemini-flash-latest` | | `openai` | Any OpenAI-compatible `/chat/completions` endpoint | `gpt-4o-mini` | ```yaml diff --git a/src/main/java/com/seleniumboot/ai/AiProvider.java b/src/main/java/com/seleniumboot/ai/AiProvider.java index 10d9f00..8fa705a 100644 --- a/src/main/java/com/seleniumboot/ai/AiProvider.java +++ b/src/main/java/com/seleniumboot/ai/AiProvider.java @@ -18,7 +18,7 @@ enum AiProvider { ANTHROPIC("https://api.anthropic.com/v1", "claude-haiku-4-5-20251001"), - GEMINI("https://generativelanguage.googleapis.com/v1beta", "gemini-3.8-flash"), + GEMINI("https://generativelanguage.googleapis.com/v1beta", "gemini-flash-latest"), OPENAI("https://api.openai.com/v1", "gpt-4o-mini"); final String defaultBaseUrl; diff --git a/src/test/java/com/seleniumboot/ai/AiProviderTest.java b/src/test/java/com/seleniumboot/ai/AiProviderTest.java index 1a14d5d..c0e31f1 100644 --- a/src/test/java/com/seleniumboot/ai/AiProviderTest.java +++ b/src/test/java/com/seleniumboot/ai/AiProviderTest.java @@ -78,6 +78,13 @@ public void geminiUsesGenerateContentAndKeyHeader() { Assert.assertTrue(body.get().contains("\"parts\":[{\"text\":\"ping\"}]")); } + @Test + public void geminiDefaultModelIsTheLatestAlias() { + reply = "{\"candidates\":[{\"content\":{\"parts\":[{\"text\":\"ok\"}]}}]}"; + Assert.assertEquals(AiFailureAnalyzer.callApi(cfg("gemini", null), "g1", "ping"), "ok"); + Assert.assertEquals(path.get(), "/api/models/gemini-flash-latest:generateContent"); + } + @Test public void openAiCompatibleUsesChatCompletionsAndBearerAuth() { reply = "{\"choices\":[{\"message\":{\"role\":\"assistant\",\"content\":\"gpt says hi\"}}]}";