Skip to content

[Feature]: google-antigravity — route base model + reasoning effort to the correct tiered wire ID (collapsed picker rows) #2025

Closed

Description

@GoldenLoaf24h

Area

Provider integration — Google Antigravity (reasoning-effort routing)

What are you trying to accomplish?

Change Gemini Flash thinking effort on the google-antigravity provider without switching models. After #1897, discovery exposes each CCA thinking tier as a separate picker row (gemini-3.7-flash-low/-medium/-high, same for 3.5/3.6, gemini-3.1-pro-low/high), so the client's reasoning-effort control no longer has any effect on the rows users actually see.

What prevents this today?

Rule 1 of resolveAntigravityEffortWireModel (src/providers/antigravity-models.ts) treats any suffix ID as "the suffix IS the effort": it returns the resolved wire ID unchanged and deliberately sends no thinkingConfig, so an explicit effort from the client (e.g. low, or none) is silently discarded for suffix models. The smoother path already exists but is unreachable from the picker: rule 2 maps a base model + effort to the correct tiered wire ID (gemini-3.7-flash + high → the high-tier wire ID, thinkingLevel preserved), and ANTIGRAVITY_MODEL_EFFORTS already advertises the ladder for base IDs (gemini-3.7-flash: [low, medium, high]).

What should OpenCodex do?

  • Expose collapsed base-model rows for discovered tiered models (by default or via an option) and drive the upstream wire ID from the request's reasoning effort through the existing rule-2 mapping — one model selection covers all thinking levels.
  • Honor an explicit effort when a suffix ID was selected (strip the suffix, then apply rule 2), or at least surface a warning that the effort was ignored instead of silently dropping it.
  • Document a none/minimal → low expectation: CCA exposes no "thinking off" tier for Flash, so none cannot be honored upstream.

Possible implementation

  • When discovery returns tier-suffixed rows, also register the derived base ID with its effort ladder from ANTIGRAVITY_MODEL_EFFORTS (dedup per base), letting rule 2 resolve base + effort → wire ID at request time in src/adapters/google.ts.
  • In rule 1, when an explicit effort is present and differs from the suffix tier, either apply rule 2 on the stripped base or log a warning once per request.

Example usage or interface

model: gemini-3.7-flash, reasoning effort: low   → wire: low tier
model: gemini-3.7-flash, reasoning effort: high  → wire: high tier

Live-verified in commit a70bb78: the effort ladder reaches the wire (reasoning_tokens 0/27/84 for low/medium/high).

Alternatives or workarounds

  • Keep one picker row per tier and switch models to change effort (current behavior).
  • Pin gemini-3.7-flash-low as the near-"no thinking" choice (low measured 0 reasoning tokens in the commit above).

Additional context

Rule semantics reference: devlog _fin/260722_antigravity_effort_routing/010_models.md (precedence rules 1–3) and 020_adapter.md (suffix IDs receive no clamping; rule 1 returns thinkingLevel: undefined).

Checks

  • I searched existing issues and documentation.
  • I removed secrets and personal data.

Activity

  1. github-actions commented on Aug 18, 2026

    @github-actions
    Contributor

    Issue reopened

    The report now contains the information required by the automated check. Thanks for updating it.

  2. Ingwannu commented on Aug 18, 2026

    @Ingwannu
    Owner

    Re-checked against current main/dev: the primary Gemini 3.7 path described here is already collapsed and effort-driven.

    • parseAntigravityAvailableModels maps a discovered gemini-3.7-flash-tiered row to picker id gemini-3.7-flash;
    • ANTIGRAVITY_MODEL_EFFORTS advertises low / medium / high on that base row;
    • resolveAntigravityEffortWireModel sends the single tiered wire id with the selected thinkingLevel.

    Two narrower questions remain, but they need a current capture before changing behavior:

    1. If v2.25.0 still shows -low/-medium/-high picker rows, please attach the redacted agentModelSorts, tieredModelIds, and relevant models keys from that account. The current parser should collapse a complete tier set, so the exact payload shape matters.
    2. none/minimal currently fall back to the model default rather than being documented as low. Please confirm whether this is an actual client-emitted request on the current base row, not only a desired alias.

    Marking this needs-info rather than implementing a second collapse path on top of the one already shipped.

  3. added
    needs-infoWaiting on reporter for a concrete spec or reproduction
    providerProvider adapters, OpenAI-compat presets, upstream API quirks
    on Aug 18, 2026
  4. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 26 / 80

    google-antigravity에서 Flash thinking 강도를 모델 바꾸지 않고 조절하고 싶다. #1897 이후 발견이 gemini-3.7-flash-low/medium/high처럼 티어마다 피커 행을 만든다. 클라이언트의 reasoning-effort가 그 행에서는 무시된다. 옵트인 프로바이더 UX 요청이고 needs-info라 26이다. 티어 행을 바꿔 고르는 우회가 있다.

    src/providers/antigravity-models.ts의 resolveAntigravityEffortWireModel() 규칙 1은 맞다. isAntigravitySuffixModelId(modelId)이면 { wireModelId }만 주고 thinkingLevel을 안 넣는다. 접미사가 effort라는 뜻이다. 규칙 2는 베이스 id + effort로 티어 와이어를 고른다. ANTIGRAVITY_MODEL_EFFORTS에 베이스 사다리가 있다. src/adapters/google.ts가 이 함수를 요청 때 호출한다.

    같은 파일의 pickerModelIdForDiscoveredWireId()는 알려진 베이스에 대해 모든 티어가 있으면 베이스 id로 접는다. 파일 머리 주석도 “CCA가 알려진 티어를 다 줄 때만 collapsed picker”다. 접히지 않으면 접미사 행이 남고 규칙 1이 effort를 버린다. 라벨을 먼저 보던 #1897 회귀를 되돌리지 않으려고 접미사 행을 다시 펼치는 쪽은 조심해야 한다.

    none/minimal → low는 CCA Flash에 thinking-off 티어가 없다는 전제다. 조용히 버리기보다 한 번 경고하는 편이 리포터 요구와 같다. 접미사 행을 골랐는데 클라이언트가 다른 effort를 내면, 접미사를 벗기고 규칙 2를 탈지, 경고만 할지를 정해야 한다. 둘 다 코드에 있는 규칙 2를 재사용하면 된다.

    해결방안

    발견이 티어 접미사 행을 줄 때 베이스 id를 ANTIGRAVITY_MODEL_EFFORTS 사다리와 함께 등록해, 피커 기본을 접힌 행으로 둔다. 요청은 기존 규칙 2로 base + effort → wire를 탄다. 접미사 id가 선택된 채 명시 effort가 접미사와 다르면 규칙 1에서 경고하거나 베이스로 벗겨 규칙 2를 탄다. src/adapters/google.ts의 호출부는 그대로 두고 resolveAntigravityEffortWireModel()만 손본다. none은 업스트림에 없다고 문서화하고 low로만 기대한 값을 적는다. 새 와이어 id 테이블은 추측하지 않는다.

    이 댓글은 grok-bot이 작성했습니다

  5. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    이미 dev에 들어옴.

    src/providers/antigravity-models.ts가 티어 suffix를 베이스 피커 한 줄로 접음. #1897이 다시 쪼개던 회귀도 주석으로 막아둠. gemini-3.7-flash는 effort → thinkingLevel, gemini-3.1-pro는 effort → 와이어 맵. resolveAntigravityEffortWireModel rule 2/1b가 그 길임.

    -high 줄을 직접 고르면 effort를 무시하는 건 접미사가 곧 effort라서 의도임. none은 CCA에 꺼짐 티어가 없음.

    이 이슈는 여기까지. 닫음.

    이 댓글은 grok-bot이 작성했습니다

  6. pennytir commented on Oct 11, 2026

    @pennytir

    I only see low, high, ultra. I do not see these options for antigravity in 3.1 pro

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestneeds-infoWaiting on reporter for a concrete spec or reproductionproviderProvider adapters, OpenAI-compat presets, upstream API quirks

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions