hermes-hub/src/antigravity_provider/models.py
2026-08-20 00:17:11 +07:00

90 lines
3.3 KiB
Python

from __future__ import annotations
ANTIGRAVITY_PREFIX = "google-antigravity/"
DEFAULT_MODEL = "google-antigravity/gemini-3.5-flash"
KNOWN_MODELS: dict[str, int] = {
"google-antigravity/gemini-3.7-flash": 65536,
"google-antigravity/gemini-3.6-flash": 65536,
"google-antigravity/gemini-3.5-flash": 65536,
"google-antigravity/gemini-3.1-pro": 65535,
"google-antigravity/claude-sonnet-4-6": 64000,
"google-antigravity/claude-opus-4-6": 64000,
"google-antigravity/gpt-oss-120b": 65536,
}
WIRE_PROFILES: dict[str, dict[str, object]] = {
"gemini-3.5-flash-extra-low": {"modelEnum": "MODEL_PLACEHOLDER_M187", "maxOutputTokens": 65536},
"gemini-3.5-flash-low": {"modelEnum": "MODEL_PLACEHOLDER_M20", "maxOutputTokens": 65536},
"gemini-3-flash-agent": {"modelEnum": "MODEL_PLACEHOLDER_M132", "maxOutputTokens": 65536},
"gemini-3.1-pro-low": {"modelEnum": "MODEL_PLACEHOLDER_M36", "maxOutputTokens": 65535},
"gemini-pro-agent": {"modelEnum": "MODEL_PLACEHOLDER_M16", "maxOutputTokens": 65535},
"claude-sonnet-4-6": {"maxOutputTokens": 64000},
"claude-opus-4-6-thinking": {"maxOutputTokens": 64000},
"openai/gpt-oss-120b-maas": {"maxOutputTokens": 65536},
}
def strip_provider_prefix(model: str) -> str:
model = (model or "").strip()
return model[len(ANTIGRAVITY_PREFIX) :] if model.startswith(ANTIGRAVITY_PREFIX) else model
def normalize_model_id(model: str) -> str:
model = (model or "").strip()
if not model:
return DEFAULT_MODEL
if "/" not in model:
return f"{ANTIGRAVITY_PREFIX}{model}"
return model
def _effort(effort: str | None) -> str:
value = (effort or "low").lower().replace("_", "-")
if value in {"none", "off", "disabled"}:
return "off"
if value in {"minimum", "minimal"}:
return "minimal"
if value in {"medium", "normal"}:
return "medium"
if value in {"high", "xhigh", "max"}:
return "high"
return "low"
def clamp_reasoning_effort(model: str, reasoning_effort: str | None = None) -> str:
logical = strip_provider_prefix(normalize_model_id(model))
effort = _effort(reasoning_effort)
if effort == "off":
return "off"
if logical == "gemini-3.1-pro":
return "high" if effort == "high" else "low"
if logical == "gemini-3.5-flash":
if effort == "high":
return "high"
if effort == "medium":
return "medium"
return "low"
if logical in {"gpt-oss-120b", "openai/gpt-oss-120b-maas"}:
return "medium"
return effort
def resolve_wire_model_id(model: str, reasoning_effort: str | None = None) -> str:
logical = strip_provider_prefix(normalize_model_id(model))
effort = clamp_reasoning_effort(model, reasoning_effort)
if logical == "gemini-3.1-pro":
return "gemini-pro-agent" if effort == "high" else "gemini-3.1-pro-low"
if logical == "gemini-3.5-flash":
if effort == "high":
return "gemini-3-flash-agent"
if effort == "medium":
return "gemini-3.5-flash-low"
return "gemini-3.5-flash-extra-low"
if logical == "claude-opus-4-6":
return "claude-opus-4-6-thinking"
if logical == "claude-sonnet-4-6":
return "claude-sonnet-4-6"
if logical in {"gpt-oss-120b", "openai/gpt-oss-120b-maas"}:
return "openai/gpt-oss-120b-maas"
return logical