extractGeminiConfig extracts thinking configuration from Gemini format request body. Gemini API format: - generationConfig.thinkingConfig.thinkingLevel: "none", "auto", or level name (Gemini 3) - generationConfig.thinkingConfig.thinkingBudget: integer (Gemini 2.5) For antigravity providers, the pa
(body []byte, provider string)
| 564 | // Priority: thinkingLevel is checked first (Gemini 3 format), then thinkingBudget (Gemini 2.5 format). |
| 565 | // This allows newer Gemini 3 level-based configs to take precedence. |
| 566 | func extractGeminiConfig(body []byte, provider string) ThinkingConfig { |
| 567 | prefix := "generationConfig.thinkingConfig" |
| 568 | if provider == "antigravity" { |
| 569 | prefix = "request.generationConfig.thinkingConfig" |
| 570 | } |
| 571 | |
| 572 | // Check thinkingLevel first (Gemini 3 format takes precedence) |
| 573 | level := gjson.GetBytes(body, prefix+".thinkingLevel") |
| 574 | if !level.Exists() { |
| 575 | // Google official Gemini Python SDK sends snake_case field names |
| 576 | level = gjson.GetBytes(body, prefix+".thinking_level") |
| 577 | } |
| 578 | if level.Exists() { |
| 579 | value := level.String() |
| 580 | switch value { |
| 581 | case "none": |
| 582 | return ThinkingConfig{Mode: ModeNone, Budget: 0} |
| 583 | case "auto": |
| 584 | return ThinkingConfig{Mode: ModeAuto, Budget: -1} |
| 585 | default: |
| 586 | return ThinkingConfig{Mode: ModeLevel, Level: ThinkingLevel(value)} |
| 587 | } |
| 588 | } |
| 589 | |
| 590 | // Check thinkingBudget (Gemini 2.5 format) |
| 591 | budget := gjson.GetBytes(body, prefix+".thinkingBudget") |
| 592 | if !budget.Exists() { |
| 593 | // Google official Gemini Python SDK sends snake_case field names |
| 594 | budget = gjson.GetBytes(body, prefix+".thinking_budget") |
| 595 | } |
| 596 | if budget.Exists() { |
| 597 | value := int(budget.Int()) |
| 598 | switch value { |
| 599 | case 0: |
| 600 | return ThinkingConfig{Mode: ModeNone, Budget: 0} |
| 601 | case -1: |
| 602 | return ThinkingConfig{Mode: ModeAuto, Budget: -1} |
| 603 | default: |
| 604 | return ThinkingConfig{Mode: ModeBudget, Budget: value} |
| 605 | } |
| 606 | } |
| 607 | |
| 608 | return ThinkingConfig{} |
| 609 | } |
| 610 | |
| 611 | // extractOpenAIConfig extracts thinking configuration from OpenAI format request body. |
| 612 | // |
no test coverage detected