Skip to content

fix: add missing Gemini GenerationConfig/GoogleSearch/response fields from OpenAPI spec - #4987

Open
Shaik-Sirajuddin wants to merge 8 commits into
maximhq:devfrom
Shaik-Sirajuddin:fix/gemini-openapi-config-gaps
Open

fix: add missing Gemini GenerationConfig/GoogleSearch/response fields from OpenAPI spec#4987
Shaik-Sirajuddin wants to merge 8 commits into
maximhq:devfrom
Shaik-Sirajuddin:fix/gemini-openapi-config-gaps

Conversation

@Shaik-Sirajuddin

@Shaik-Sirajuddin Shaik-Sirajuddin commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Description

Closes #5166

Adds 4 real Gemini generateContent OpenAPI config/response fields that were missing from Bifrost's Gemini provider types, found via a schema-sync comparison against Google's published OpenAPI spec.

Details

  • Added GenerationConfig.ResponseFormat/TranslationConfig/EnableEnhancedCivicAnswers, GoogleSearch.SearchTypes, and GenerateContentResponse.ModelStatus (works for both streaming and non-streaming since both paths share the same struct).
  • Wired translation_config/enable_enhanced_civic_answers/response_format as named extra_params keys on both chat completions and responses request paths, matching the existing safety_settings/cached_content/labels pattern.
  • Scoped to core/providers/gemini only (Gemini-only wire types, Vertex has its own copy); fields with no OpenAI-canonical equivalent stay extra_params-only by design (see gen/gemini-openapi-config-gaps.md).

Checklist

  • Tests added/updated and passing (go test ./...)
  • Verified against a real endpoint (not just mocked/unit tests)
  • Docs updated (or N/A) — internal scope note in gen/, no user-facing docs impacted

@Shaik-Sirajuddin
Shaik-Sirajuddin force-pushed the fix/gemini-openapi-config-gaps branch from a9fe3e8 to 1fc4637 Compare July 7, 2026 09:02
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@Shaik-Sirajuddin, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: dc7b1ec2-d34b-4abb-aa36-cda67ccc2e34

📥 Commits

Reviewing files that changed from the base of the PR and between a2b4d52 and 06fb0ad.

📒 Files selected for processing (2)
  • core/providers/gemini/openapiconfiggaps_test.go
  • core/providers/gemini/utils.go
📝 Walkthrough

Walkthrough

Gemini request conversion now maps additional generation options from ExtraParams, while Gemini types support translation, response format, search types, and model status JSON fields.

Changes

Gemini configuration and response fields

Layer / File(s) Summary
Gemini types and JSON decoding
core/providers/gemini/types.go
Adds typed generation configuration, search type, translation, response format, and model status fields with snake_case decoding support.
Request extra parameter mapping
core/providers/gemini/chat.go, core/providers/gemini/responses.go
Extracts translation, enhanced civic answers, and response format values from ExtraParams into GenerationConfig while removing consumed keys.
Configuration and response decoding tests
core/providers/gemini/openapiconfiggaps_test.go
Tests request extraction, passthrough parameters, snake_case decoding, search type variants, and model status unmarshalling.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: akshaydeo, danpiths, roroghost17

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR explains the change, but it misses several required template sections like Summary, Changes, Type of change, Affected areas, and How to test. Reformat the PR description to match the template and add the missing sections, especially Summary, Changes, Type of change, Affected areas, and How to test.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding missing Gemini fields from the OpenAPI spec.
Linked Issues check ✅ Passed The Gemini fields and request mapping satisfy #5166 by preserving translation_config, response_format, enable_enhanced_civic_answers, search_types, and model_status.
Out of Scope Changes check ✅ Passed The changes stay scoped to core/providers/gemini and tests, with no obvious unrelated code or scope creep.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@greptile-apps

greptile-apps Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

Safe to merge — the change is additive, confined to the Gemini provider package, and the new wire types follow the established camelCase/snake_case alias pattern used throughout the file.

All new types have correct UnmarshalJSON implementations, the key-deletion pattern matches the existing safety_settings/cached_content/labels convention, the false-boolean case for enable_enhanced_civic_answers is explicitly tested, and the utils.go canonical response_format branch is gated behind the presence of at least one modality key so it cannot accidentally shadow the OpenAI json_schema path.

No files require special attention.

Important Files Changed

Filename Overview
core/providers/gemini/types.go Adds seven new types and three new fields; all camelCase/snake_case UnmarshalJSON implementations follow the existing alias-struct pattern correctly and the GenerateContentResponse custom MarshalJSON/UnmarshalJSON pair picks up ModelStatus through the embedded Alias.
core/providers/gemini/chat.go New extra_params extraction blocks for translation_config, enable_enhanced_civic_answers, and response_format follow the established delete-then-extract pattern; enable_enhanced_civic_answers false-value case is tested and correct.
core/providers/gemini/responses.go Mirrors the chat.go additions; responses path does not use convertParamsToGenerationConfig for response_format, so there is no canonical-vs-ExtraParams conflict on this path.
core/providers/gemini/utils.go Adds an else branch inside the existing response_format handler that detects a Gemini-native per-modality shape (presence of text/image/audio keys) and wires it to the new ResponseFormat field; correctly placed after the OpenAI type-discriminator check.
core/providers/gemini/openapiconfiggaps_test.go Comprehensive tests covering camelCase/snake_case round-trips, ExtraParams extraction for both converter paths, passthrough-key survival, false-valued bool extraction, and canonical response_format vs json_schema disambiguation.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[BifrostChatRequest / BifrostResponsesRequest] --> B{Params.ExtraParams?}
    B -- translation_config --> C[SafeExtractFromMap]
    C --> D[delete from ExtraParams]
    D --> E[safeExtractGeminiStruct TranslationConfig]
    E -- ok --> F[GenerationConfig.TranslationConfig]
    B -- enable_enhanced_civic_answers --> G[SafeExtractBoolPointer]
    G -- ok --> H[delete from ExtraParams]
    H --> I[GenerationConfig.EnableEnhancedCivicAnswers]
    B -- response_format --> J[SafeExtractFromMap]
    J --> K[delete from ExtraParams]
    K --> L[safeExtractGeminiStruct ResponseFormatConfig]
    L -- ok --> M[GenerationConfig.ResponseFormat]
    A2[Params.ResponseFormat canonical field] --> N{has type key?}
    N -- yes, json_schema/json_object --> O[ResponseMIMEType + ResponseJSONSchema]
    N -- no, has text/image/audio key --> P[safeExtractGeminiStruct ResponseFormatConfig]
    P -- ok --> M
    Q[GoogleSearch extra_params] --> R[SearchTypes field]
    S[GenerateContentResponse JSON] --> T[ModelStatus field]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[BifrostChatRequest / BifrostResponsesRequest] --> B{Params.ExtraParams?}
    B -- translation_config --> C[SafeExtractFromMap]
    C --> D[delete from ExtraParams]
    D --> E[safeExtractGeminiStruct TranslationConfig]
    E -- ok --> F[GenerationConfig.TranslationConfig]
    B -- enable_enhanced_civic_answers --> G[SafeExtractBoolPointer]
    G -- ok --> H[delete from ExtraParams]
    H --> I[GenerationConfig.EnableEnhancedCivicAnswers]
    B -- response_format --> J[SafeExtractFromMap]
    J --> K[delete from ExtraParams]
    K --> L[safeExtractGeminiStruct ResponseFormatConfig]
    L -- ok --> M[GenerationConfig.ResponseFormat]
    A2[Params.ResponseFormat canonical field] --> N{has type key?}
    N -- yes, json_schema/json_object --> O[ResponseMIMEType + ResponseJSONSchema]
    N -- no, has text/image/audio key --> P[safeExtractGeminiStruct ResponseFormatConfig]
    P -- ok --> M
    Q[GoogleSearch extra_params] --> R[SearchTypes field]
    S[GenerateContentResponse JSON] --> T[ModelStatus field]
Loading

Reviews (6): Last reviewed commit: "fix: pick up Gemini-native response_form..." | Re-trigger Greptile

Comment thread core/providers/gemini/types.go

@coderabbitai coderabbitai Bot left a comment

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.

🧹 Nitpick comments (2)
core/providers/gemini/openapi_config_gaps_test.go (2)

1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Filename violates no-underscore convention.

openapi_config_gaps_test.go has underscores in the base name beyond the _test.go suffix. Should be openapiconfiggaps_test.go.

As per coding guidelines: "Go filenames use no underscores except for _test.go suffix; use concatenated lowercase words (e.g., pluginpipeline.go, not plugin_pipeline.go)".

🤖 Prompt for 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.

In `@core/providers/gemini/openapi_config_gaps_test.go` at line 1, The test file
name violates the Go no-underscore naming convention because the base name of
openapi_config_gaps_test.go contains underscores. Rename it to a concatenated
lowercase form such as openapiconfiggaps_test.go so it keeps the _test.go suffix
but removes underscores from the rest of the filename.

Source: Coding guidelines


62-91: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Responses test doesn't cover response_format extraction.

The chat test (lines 27-31, 45-47) verifies response_format extraction, but TestResponsesRequestExtractsTranslationEnhancedCivicResponseFormat only checks translation_config and enable_enhanced_civic_answers. Given the PR wires response_format into both chat and responses paths, this test should also assert it for the responses path to catch regressions in that specific extraction branch.

✅ Suggested addition to responses test
 		Params: &schemas.ResponsesParameters{
 			ExtraParams: map[string]interface{}{
 				"translation_config": map[string]interface{}{
 					"targetLanguageCode": "fr",
 					"echoTargetLanguage": true,
 				},
 				"enable_enhanced_civic_answers": false,
+				"response_format": map[string]interface{}{
+					"text": map[string]interface{}{
+						"mimeType": "TEXT_PLAIN",
+					},
+				},
 			},
 		},
 	})
 	require.NoError(t, err)
 	require.NotNil(t, result)

 	require.NotNil(t, result.GenerationConfig.TranslationConfig)
 	assert.Equal(t, "fr", result.GenerationConfig.TranslationConfig.TargetLanguageCode)

 	require.NotNil(t, result.GenerationConfig.EnableEnhancedCivicAnswers)
 	assert.False(t, *result.GenerationConfig.EnableEnhancedCivicAnswers)
+
+	require.NotNil(t, result.GenerationConfig.ResponseFormat)
+	require.NotNil(t, result.GenerationConfig.ResponseFormat.Text)
+	assert.Equal(t, "TEXT_PLAIN", result.GenerationConfig.ResponseFormat.Text.MimeType)
 }
🤖 Prompt for 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.

In `@core/providers/gemini/openapi_config_gaps_test.go` around lines 62 - 91, The
responses-path test in
TestResponsesRequestExtractsTranslationEnhancedCivicResponseFormat is missing
coverage for response_format extraction. Update the test to include
response_format in the BifrostResponsesRequest params ExtraParams and assert
that ToGeminiResponsesRequest populates the corresponding field in the returned
GenerationConfig, alongside the existing translation_config and
enable_enhanced_civic_answers checks.
🤖 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.

Nitpick comments:
In `@core/providers/gemini/openapi_config_gaps_test.go`:
- Line 1: The test file name violates the Go no-underscore naming convention
because the base name of openapi_config_gaps_test.go contains underscores.
Rename it to a concatenated lowercase form such as openapiconfiggaps_test.go so
it keeps the _test.go suffix but removes underscores from the rest of the
filename.
- Around line 62-91: The responses-path test in
TestResponsesRequestExtractsTranslationEnhancedCivicResponseFormat is missing
coverage for response_format extraction. Update the test to include
response_format in the BifrostResponsesRequest params ExtraParams and assert
that ToGeminiResponsesRequest populates the corresponding field in the returned
GenerationConfig, alongside the existing translation_config and
enable_enhanced_civic_answers checks.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 66b7ba8d-277e-4bcb-b39b-1b09129683b5

📥 Commits

Reviewing files that changed from the base of the PR and between d9577ba and e4e3a01.

⛔ Files ignored due to path filters (1)
  • gen/gemini-openapi-config-gaps.md is excluded by !**/gen/**
📒 Files selected for processing (4)
  • core/providers/gemini/chat.go
  • core/providers/gemini/openapi_config_gaps_test.go
  • core/providers/gemini/responses.go
  • core/providers/gemini/types.go

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 7, 2026

@coderabbitai coderabbitai Bot left a comment

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.

🧹 Nitpick comments (1)
core/providers/gemini/openapiconfiggaps_test.go (1)

62-100: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Missing ExtraParams key-deletion assertions for parity with chat test.

Per the line-range change details, the chat completion test (lines 1-60) asserts that translation_config, enable_enhanced_civic_answers, and response_format keys are removed from ExtraParams after extraction. This responses test only asserts the fields land in GenerationConfig but never checks that the corresponding keys were deleted from result.ExtraParams, even though the responses converter (per the PR objective) follows the identical extraction pattern shown in chat.go's ToGeminiChatCompletionRequestWithImageURLSchemes. Adding the deletion assertions would keep test coverage consistent between the two conversion paths and catch a regression if the responses converter forgets to delete() a key.

✅ Suggested assertion additions
 	require.NotNil(t, result.GenerationConfig.ResponseFormat)
 	require.NotNil(t, result.GenerationConfig.ResponseFormat.Text)
 	assert.Equal(t, "TEXT_PLAIN", result.GenerationConfig.ResponseFormat.Text.MimeType)
+
+	assert.NotContains(t, result.ExtraParams, "translation_config")
+	assert.NotContains(t, result.ExtraParams, "enable_enhanced_civic_answers")
+	assert.NotContains(t, result.ExtraParams, "response_format")
 }
🤖 Prompt for 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.

In `@core/providers/gemini/openapiconfiggaps_test.go` around lines 62 - 100, This
responses test covers extraction into GenerationConfig but is missing the parity
checks that the chat test performs for ExtraParams cleanup. In
TestResponsesRequestExtractsTranslationEnhancedCivicResponseFormat, after
calling ToGeminiResponsesRequest, also assert that result.ExtraParams no longer
contains translation_config, enable_enhanced_civic_answers, and response_format,
matching the deletion behavior used by
ToGeminiChatCompletionRequestWithImageURLSchemes and guarding against
regressions in the responses converter.
🤖 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.

Nitpick comments:
In `@core/providers/gemini/openapiconfiggaps_test.go`:
- Around line 62-100: This responses test covers extraction into
GenerationConfig but is missing the parity checks that the chat test performs
for ExtraParams cleanup. In
TestResponsesRequestExtractsTranslationEnhancedCivicResponseFormat, after
calling ToGeminiResponsesRequest, also assert that result.ExtraParams no longer
contains translation_config, enable_enhanced_civic_answers, and response_format,
matching the deletion behavior used by
ToGeminiChatCompletionRequestWithImageURLSchemes and guarding against
regressions in the responses converter.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 150e6d8c-3e65-4926-9ec5-8eb3fdcde9f3

📥 Commits

Reviewing files that changed from the base of the PR and between e4e3a01 and 67d47fb.

📒 Files selected for processing (2)
  • core/providers/gemini/openapiconfiggaps_test.go
  • core/providers/gemini/types.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • core/providers/gemini/types.go

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 7, 2026
Shaik-Sirajuddin added a commit to Shaik-Sirajuddin/bifrost that referenced this pull request Jul 7, 2026
…n test

Mirrors the chat-path test's coverage, per CodeRabbit/Greptile review feedback
noting the asymmetry (PR maximhq#4987).
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 7, 2026
akshaydeo and others added 6 commits July 14, 2026 21:59
## Summary

Briefly explain the purpose of this PR and the problem it solves.

## Changes

- What was changed and why
- Any notable design decisions or trade-offs

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [ ] Docs

## How to test

Describe the steps to validate this change. Include commands and expected outcomes.

```sh
# Core/Transports
go version
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

If adding new configs or environment variables, document them here.

## Screenshots/Recordings

If UI changes, add before/after screenshots or short clips.

## Breaking changes

- [ ] Yes
- [ ] No

If yes, describe impact and migration instructions.

## Related issues

Link related issues and discussions. Example: Closes maximhq#123

## Security considerations

Note any security implications (auth, secrets, PII, sandboxing, etc.).

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
… from OpenAPI spec

Closes 4 real gaps found by schema-sync against Google's generateContent OpenAPI
spec: GenerationConfig.responseFormat/translationConfig/enableEnhancedCivicAnswers,
GoogleSearch.searchTypes, and GenerateContentResponse.modelStatus. Also wires
translation_config/enable_enhanced_civic_answers/response_format as named
extra_params keys on both chat completions and responses request paths, matching
the existing safety_settings/cached_content/labels pattern.
- Add camelCase/snake_case UnmarshalJSON to TranslationConfig, TextResponseFormat,
  ImageResponseFormat, and AudioResponseFormat, matching the sibling GoogleSearch/
  SearchTypes/Interval pattern in this file (Greptile finding).
- Rename test file to drop the internal underscore per repo Go naming convention
  (CodeRabbit nitpick).
- Add response_format coverage to the Responses-path extraction test, and
  snake_case round-trip tests for the newly fixed types.
…n test

Mirrors the chat-path test's coverage, per CodeRabbit/Greptile review feedback
noting the asymmetry (PR maximhq#4987).
@Shaik-Sirajuddin
Shaik-Sirajuddin force-pushed the fix/gemini-openapi-config-gaps branch from 658217e to a2b4d52 Compare July 15, 2026 05:18
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 15, 2026
On /v1/chat/completions, "response_format" is a known top-level field,
so it's parsed into ChatParameters.ResponseFormat and never reaches
ExtraParams — the extraction added earlier only read from ExtraParams,
so real requests silently dropped Gemini's native per-modality
response_format. Found via an actual before/after end-to-end run
against a live Gemini key, not just unit tests.
@Shaik-Sirajuddin

Copy link
Copy Markdown
Contributor Author

E2E verification (official Python OpenAI SDK, real Gemini key)

Ran before/after against two live Bifrost gateways (dd5df2bb8 vs this branch), hitting /v1/chat/completions with translation_config, enable_enhanced_civic_answers, and Gemini's native response_format via extra_body.

All 4 cases returned 200 in both runs (Gemini is lenient about unknown fields), so response text alone wasn't a reliable signal. Decisive check was the actual outgoing generationConfig Bifrost builds:

response_format: {"text": {"mimeType": "text/plain"}} sent as a real response_format param (as any OpenAI-SDK client would send it):

before (dd5df2bb8, generic before this PR): GenerationConfig = {}
after  (a2b4d524e, this PR's original commit): GenerationConfig = {}   <- bug: dropped
after  (06fb0ad0f, latest): GenerationConfig = {"responseFormat":{"text":{"mimeType":"text/plain"}}}

Root cause: /v1/chat/completions treats response_format as a known top-level field (chatParamsKnownFields in transports/bifrost-http/handlers/inference.go), so it's parsed into the canonical ChatParameters.ResponseFormat, never into ExtraParams. The original extraction only read ExtraParams, so real clients silently lost this field — only reachable in unit tests that set ExtraParams directly. Fixed in 06fb0ad0f by handling the Gemini-native shape (no "type" discriminator) inside convertParamsToGenerationConfig, without touching the existing OpenAI json_schema/json_object mapping (regression test added).

translation_config / enable_enhanced_civic_answers don't have this problem — neither key is in chatParamsKnownFields, so both land in ExtraParams correctly via the real HTTP path already.

@CLAassistant

CLAassistant commented Jul 28, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Gemini generateContent request/response fields (translation_config, response_format, search_types, model_status) silently dropped

4 participants