Skip to content

Add Gemini 3.5 Flash to model list#1422

Merged
tawnymanticore merged 2 commits into
mainfrom
add-model/gemini-3-5-flash
May 21, 2026
Merged

Add Gemini 3.5 Flash to model list#1422
tawnymanticore merged 2 commits into
mainfrom
add-model/gemini-3-5-flash

Conversation

@tawnymanticore
Copy link
Copy Markdown
Collaborator

@tawnymanticore tawnymanticore commented May 20, 2026

What does this PR do?

Adds Google's Gemini 3.5 Flash model (released May 19, 2026) with support for OpenRouter, Gemini API, and Vertex AI providers. This model brings frontier-level coding and reasoning performance at 4x speed with Flash-tier pricing.

Applied the zero-sum rule by removing suggested_for_data_gen and suggested_for_evals flags from the older Gemini 3 Flash model to maintain stable suggested model counts.

The Vertex provider entry was also brought to full parity with the Gemini API and OpenRouter entries: supports_doc_extraction, multimodal_capable, supports_vision, and the full multimodal_mime_types list (documents, images, audio, video) — addressing the gemini-code-assist and coderabbitai review feedback.

Test Results

All tests passed across all three providers (OpenRouter, Gemini API, Vertex). The Vertex suite was re-run with valid gcloud credentials after the initial auth failures.

The model supports thinking levels (minimal, low, medium, high) via the GEMINI_3_FLASH_THINKING_LEVELS constant, multimodal capabilities (documents, images, audio, video), and structured output via JSON schema.

Gemini 3.5 Flash (openrouter):

  • 17 passed, 0 failed

Gemini 3.5 Flash (gemini_api):

  • 26 passed, 0 failed

Gemini 3.5 Flash (vertex):

  • 24 passed, 3 skipped, 0 failed (skips are pre-existing conditional skips in the test suite: text/plain and text/markdown extraction probes, and logprobs_geval which Vertex/Gemini doesn't surface)

Gemini 3.5 Flash (openrouter):
✅ test_data_gen_all_models_providers[gemini_3_5_flash-openrouter]
✅ test_data_gen_sample_all_models_providers[gemini_3_5_flash-openrouter]
✅ test_data_gen_sample_all_models_providers_with_structured_output[gemini_3_5_flash-openrouter]
✅ test_all_built_in_models_llm_as_judge[gemini_3_5_flash-openrouter]
✅ test_all_built_in_models_structured_output[gemini_3_5_flash-openrouter]
✅ test_all_built_in_models_structured_input[gemini_3_5_flash-openrouter]
✅ test_structured_output_cot_prompt_builder[gemini_3_5_flash-openrouter]
✅ test_structured_input_cot_prompt_builder[gemini_3_5_flash-openrouter]
✅ test_all_models_providers_plaintext[gemini_3_5_flash-openrouter]
✅ test_cot_prompt_builder[gemini_3_5_flash-openrouter]
✅ test_tools_all_built_in_models[gemini_3_5_flash-openrouter]
✅ test_supports_vision_is_coherent[gemini_3_5_flash-openrouter]
✅ test_extract_document_success[application/pdf-text_probe0-gemini_3_5_flash-openrouter]
✅ test_extract_document_success[text/html-text_probe3-gemini_3_5_flash-openrouter]
✅ test_extract_document_success[text/csv-text_probe4-gemini_3_5_flash-openrouter]
✅ test_extract_document_success[image/jpeg-text_probe6-gemini_3_5_flash-openrouter]
✅ test_extract_document_success[image/jpeg-text_probe7-gemini_3_5_flash-openrouter]
✅ test_extract_document_success[image/png-text_probe5-gemini_3_5_flash-openrouter]
✅ test_provider_bad_request[gemini_3_5_flash-openrouter]
✅ test_thinking_level_reasoning_content[ModelProviderName.openrouter/gemini_3_5_flash/minimal]
✅ test_thinking_level_reasoning_content[ModelProviderName.openrouter/gemini_3_5_flash/low]
✅ test_thinking_level_reasoning_content[ModelProviderName.openrouter/gemini_3_5_flash/medium]
✅ test_thinking_level_reasoning_content[ModelProviderName.openrouter/gemini_3_5_flash/high]

Gemini 3.5 Flash (gemini_api):
✅ test_data_gen_all_models_providers[gemini_3_5_flash-gemini_api]
✅ test_data_gen_sample_all_models_providers[gemini_3_5_flash-gemini_api]
✅ test_data_gen_sample_all_models_providers_with_structured_output[gemini_3_5_flash-gemini_api]
✅ test_all_built_in_models_llm_as_judge[gemini_3_5_flash-gemini_api]
✅ test_all_built_in_models_structured_output[gemini_3_5_flash-gemini_api]
✅ test_all_built_in_models_structured_input[gemini_3_5_flash-gemini_api]
✅ test_structured_output_cot_prompt_builder[gemini_3_5_flash-gemini_api]
✅ test_structured_input_cot_prompt_builder[gemini_3_5_flash-gemini_api]
✅ test_all_models_providers_plaintext[gemini_3_5_flash-gemini_api]
✅ test_cot_prompt_builder[gemini_3_5_flash-gemini_api]
✅ test_tools_all_built_in_models[gemini_3_5_flash-gemini_api]
✅ test_supports_vision_is_coherent[gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[application/pdf-text_probe0-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[text/html-text_probe3-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[text/csv-text_probe4-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[image/jpeg-text_probe6-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[image/jpeg-text_probe7-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[image/png-text_probe5-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[video/mp4-text_probe8-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[video/quicktime-text_probe9-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[audio/mpeg-text_probe10-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[audio/ogg-text_probe11-gemini_3_5_flash-gemini_api]
✅ test_extract_document_success[audio/wav-text_probe12-gemini_3_5_flash-gemini_api]
✅ test_provider_bad_request[gemini_3_5_flash-gemini_api]
✅ test_thinking_level_reasoning_content[ModelProviderName.gemini_api/gemini_3_5_flash/minimal]
✅ test_thinking_level_reasoning_content[ModelProviderName.gemini_api/gemini_3_5_flash/low]
✅ test_thinking_level_reasoning_content[ModelProviderName.gemini_api/gemini_3_5_flash/medium]
✅ test_thinking_level_reasoning_content[ModelProviderName.gemini_api/gemini_3_5_flash/high]

Gemini 3.5 Flash (vertex):
✅ test_data_gen_all_models_providers[gemini_3_5_flash-vertex]
✅ test_data_gen_sample_all_models_providers[gemini_3_5_flash-vertex]
✅ test_data_gen_sample_all_models_providers_with_structured_output[gemini_3_5_flash-vertex]
✅ test_all_built_in_models_llm_as_judge[gemini_3_5_flash-vertex]
⏭️ test_all_built_in_models_logprobs_geval[gemini_3_5_flash-vertex]
✅ test_extract_document_success[application/pdf-text_probe0-gemini_3_5_flash-vertex]
⏭️ test_extract_document_success[text/plain-text_probe1-gemini_3_5_flash-vertex]
⏭️ test_extract_document_success[text/markdown-text_probe2-gemini_3_5_flash-vertex]
✅ test_extract_document_success[text/html-text_probe3-gemini_3_5_flash-vertex]
✅ test_extract_document_success[text/csv-text_probe4-gemini_3_5_flash-vertex]
✅ test_extract_document_success[image/png-text_probe5-gemini_3_5_flash-vertex]
✅ test_extract_document_success[image/jpeg-text_probe6-gemini_3_5_flash-vertex]
✅ test_extract_document_success[image/jpeg-text_probe7-gemini_3_5_flash-vertex]
✅ test_extract_document_success[video/mp4-text_probe8-gemini_3_5_flash-vertex]
✅ test_extract_document_success[video/quicktime-text_probe9-gemini_3_5_flash-vertex]
✅ test_extract_document_success[audio/mpeg-text_probe10-gemini_3_5_flash-vertex]
✅ test_extract_document_success[audio/ogg-text_probe11-gemini_3_5_flash-vertex]
✅ test_extract_document_success[audio/wav-text_probe12-gemini_3_5_flash-vertex]
✅ test_supports_vision_is_coherent[gemini_3_5_flash-vertex]
✅ test_provider_bad_request[gemini_3_5_flash-vertex]
✅ test_all_built_in_models_structured_output[gemini_3_5_flash-vertex]
✅ test_all_built_in_models_structured_input[gemini_3_5_flash-vertex]
✅ test_structured_input_cot_prompt_builder[gemini_3_5_flash-vertex]
✅ test_structured_output_cot_prompt_builder[gemini_3_5_flash-vertex]
✅ test_tools_all_built_in_models[gemini_3_5_flash-vertex]
✅ test_all_models_providers_plaintext[gemini_3_5_flash-vertex]
✅ test_cot_prompt_builder[gemini_3_5_flash-vertex]

Checklists

  • Tests have been run locally and passed
  • New tests have been added to any work in /lib

Related to Slack thread: https://getkiln.slack.com/archives/C0AG8U78MNG/p1779283975481699?thread_ts=1779283765.647149&cid=C0AG8U78MNG


Generated by Claude Code

Released May 19, 2026. Frontier-level coding and reasoning at 4x speed.
Applied zero-sum rule: removed suggested flags from Gemini 3 Flash.

https://claude.ai/code/session_013vy5C9RfT3dgKnALCiECyK
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 20, 2026

Review Change Stack

Walkthrough

This PR registers Gemini 3.5 Flash: it adds ModelName.gemini_3_5_flash and a new KilnModel entry with provider configurations for openrouter, gemini_api, and vertex (structured output, thinking-level settings, reasoning flag, and multimodal MIME types).

Changes

Gemini 3.5 Flash Model Addition

Layer / File(s) Summary
Model enum and built-in configuration
libs/core/kiln_ai/adapters/ml_model_list.py
ModelName enum gains gemini_3_5_flash. New KilnModel entry defines featured_rank, editorial_notes, and provider settings for openrouter, gemini_api, and vertex with structured_output_mode, suggested usage flags, thinking-level allowlists/defaults, gemini_reasoning_enabled, and multimodal MIME type support (gemini_api includes audio/video types).

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

  • Kiln-AI/Kiln#1423: Related Vertex provider changes referencing vertex_ai/gemini-3.5-flash usage/auth flow.
  • Kiln-AI/Kiln#915: Adds a Gemini Flash model entry with similar provider multimodal and reasoning configuration.
  • Kiln-AI/Kiln#1401: Adds Gemini “Flash” model entries with structured output, thinking-level, and multimodal MIME settings.

Suggested reviewers

  • scosman
  • leonardmq
  • chiang-daniel

"A rabbit hops through code so bright,
Adding Flash to Gemini's light.
Enums and providers dressed just right,
Multimodal dreams take flight tonight. 🐰✨"

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the main change: adding Gemini 3.5 Flash to the model list.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The PR description comprehensively covers all required sections with detailed test results, model capabilities, and related context.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-model/gemini-3-5-flash

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for the Gemini 3.5 Flash model across OpenRouter, Gemini API, and Vertex AI providers, while simultaneously removing data generation and evaluation suggestions for the older Gemini 3 Flash model. Feedback indicates that the Vertex AI configuration for Gemini 3.5 Flash lacks multimodal and document extraction flags, which should be added to ensure feature parity with the other providers.

Comment on lines +2545 to +2556
KilnModelProvider(
name=ModelProviderName.vertex,
model_id="gemini-3.5-flash",
structured_output_mode=StructuredOutputMode.json_schema,
suggested_for_data_gen=True,
suggested_for_evals=True,
# while the model is capable of reasoning, it doesn't always return it in the response
# reasoning_capable=True,
gemini_reasoning_enabled=True,
available_thinking_levels=GEMINI_3_FLASH_THINKING_LEVELS,
default_thinking_level="high",
),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Vertex AI provider configuration for Gemini 3.5 Flash is missing multimodal and document extraction flags. Gemini 3.5 Flash supports vision, audio, video, and document extraction, and these capabilities should be enabled for the Vertex provider to maintain parity with the Gemini API and OpenRouter configurations.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@libs/core/kiln_ai/adapters/ml_model_list.py`:
- Around line 2545-2556: The KilnModelProvider entry for model_id
"gemini-3.5-flash" is missing multimodal/doc-extraction flags; update the
KilnModelProvider instantiation (the KilnModelProvider call for model_id
"gemini-3.5-flash") to include supports_doc_extraction=True,
supports_vision=True, multimodal_capable=True, and set multimodal_mime_types to
the same list used by other Gemini 3.5 Flash providers (e.g. image/png,
image/jpeg, application/pdf, image/tiff) so Vertex is treated as
multimodal/document-capable in capability-gated flows.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b1c18d0f-5456-4f91-a42d-80804b2d694b

📥 Commits

Reviewing files that changed from the base of the PR and between 2a0a58d and a10a811.

📒 Files selected for processing (1)
  • libs/core/kiln_ai/adapters/ml_model_list.py

Comment thread libs/core/kiln_ai/adapters/ml_model_list.py
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 20, 2026

📊 Coverage Report

Overall Coverage: 92%

Diff: origin/main...HEAD

No lines with coverage information in this diff.


Adds supports_doc_extraction, multimodal_capable, supports_vision,
and multimodal_mime_types to the Vertex provider entry for Gemini
3.5 Flash so it has parity with the Gemini API and OpenRouter
configurations. Addresses review feedback that the Vertex entry
was missing multimodal/document-extraction capability flags despite
the model supporting them.

Verified by running the full paid Vertex test suite (24 passed, 3
unrelated skips, 0 failures), including document extraction tests
across PDF/CSV/HTML/PNG/JPG/MP3/OGG/WAV/MP4/MOV.

Co-authored-by: Cursor <cursoragent@cursor.com>
@tawnymanticore
Copy link
Copy Markdown
Collaborator Author

Update: Vertex multimodal/doc-extraction flags + verified Vertex tests

Addresses the review feedback from both gemini-code-assist and coderabbitai about the Vertex provider entry missing multimodal capability flags.

Changes in c2f4a0b

Added the following to the Vertex KilnModelProvider entry for Gemini 3.5 Flash so it has parity with the Gemini API and OpenRouter entries:

  • supports_doc_extraction=True
  • multimodal_capable=True
  • supports_vision=True
  • multimodal_mime_types=[...] with the full set: PDF, CSV, TXT, HTML, MD, JPG, PNG, MP3, WAV, OGG, MP4, MOV

Vertex test results (re-run with valid credentials)

Now that I had Vertex auth set up locally, I re-ran the full paid suite for gemini_3_5_flash-vertex — 24 passed, 3 skipped, 0 failed. The 3 skips are pre-existing conditional skips in the test suite (text/plain and text/markdown extraction probes, and logprobs_geval which Vertex/Gemini doesn't surface), not anything specific to this model.

Gemini 3.5 Flash (vertex):

  • ✅ test_data_gen_all_models_providers[gemini_3_5_flash-vertex]
  • ✅ test_data_gen_sample_all_models_providers[gemini_3_5_flash-vertex]
  • ✅ test_data_gen_sample_all_models_providers_with_structured_output[gemini_3_5_flash-vertex]
  • ✅ test_all_built_in_models_llm_as_judge[gemini_3_5_flash-vertex]
  • ⏭️ test_all_built_in_models_logprobs_geval[gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[application/pdf-text_probe0-gemini_3_5_flash-vertex]
  • ⏭️ test_extract_document_success[text/plain-text_probe1-gemini_3_5_flash-vertex]
  • ⏭️ test_extract_document_success[text/markdown-text_probe2-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[text/html-text_probe3-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[text/csv-text_probe4-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[image/png-text_probe5-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[image/jpeg-text_probe6-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[image/jpeg-text_probe7-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[video/mp4-text_probe8-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[video/quicktime-text_probe9-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[audio/mpeg-text_probe10-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[audio/ogg-text_probe11-gemini_3_5_flash-vertex]
  • ✅ test_extract_document_success[audio/wav-text_probe12-gemini_3_5_flash-vertex]
  • ✅ test_supports_vision_is_coherent[gemini_3_5_flash-vertex]
  • ✅ test_provider_bad_request[gemini_3_5_flash-vertex]
  • ✅ test_all_built_in_models_structured_output[gemini_3_5_flash-vertex]
  • ✅ test_all_built_in_models_structured_input[gemini_3_5_flash-vertex]
  • ✅ test_structured_input_cot_prompt_builder[gemini_3_5_flash-vertex]
  • ✅ test_structured_output_cot_prompt_builder[gemini_3_5_flash-vertex]
  • ✅ test_tools_all_built_in_models[gemini_3_5_flash-vertex]
  • ✅ test_all_models_providers_plaintext[gemini_3_5_flash-vertex]
  • ✅ test_cot_prompt_builder[gemini_3_5_flash-vertex]

All three providers (OpenRouter, Gemini API, Vertex) now have full multimodal + document-extraction parity and a green paid test run.

@tawnymanticore tawnymanticore requested a review from leonardmq May 20, 2026 22:11
@tawnymanticore tawnymanticore merged commit 2304624 into main May 21, 2026
15 checks passed
@tawnymanticore tawnymanticore deleted the add-model/gemini-3-5-flash branch May 21, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants