Sophomores's picture
feat: add pro-enhanced model + extra_fields support
10335bd
Raw
History Blame Contribute Delete
2.06 kB
"""Model definitions and mapping from Gemini frontend JS source."""
# MODE_CATEGORY enum from 028-6eb337387583.js:
# 1=FAST, 2=THINKING, 3=PRO, 4=AUTO, 5=FAST_DYNAMIC_THINKING, 6=FLASH_LITE
MODELS = {
"gemini-3.5-flash": {
"mode": 1, "think": 4,
"desc": "Fast general-purpose model",
},
"gemini-3.5-flash-thinking": {
"mode": 2, "think": 0,
"desc": "Deep thinking mode, longest output (~20k chars)",
},
"gemini-3.1-pro": {
"mode": 3, "think": 4,
"desc": "Pro model (requires cookie for real routing)",
},
"gemini-3.1-pro-enhanced": {
"mode": 3, "think": 4, "extra": {31: 2, 80: 3},
"desc": "Pro with enhanced output (experimental)",
},
"gemini-auto": {
"mode": 4, "think": 4,
"desc": "Auto model selection",
},
"gemini-3.5-flash-thinking-lite": {
"mode": 5, "think": 0,
"desc": "Dynamic thinking with adaptive depth",
},
"gemini-flash-lite": {
"mode": 6, "think": 4,
"desc": "Lightweight fast model",
},
}
def resolve_model(model_name: str, default: str = "gemini-3.5-flash"):
"""Resolve model name to (name, mode_id, think_mode, error, extra_fields).
Unknown model names fall back to default rather than erroring,
since upstream clients may request arbitrary model identifiers.
"""
think_override = None
if "@think=" in model_name:
model_name, think_str = model_name.rsplit("@think=", 1)
try:
think_override = int(think_str)
except ValueError:
return None, None, None, f"Invalid think level: {think_str}", None
cfg = MODELS.get(model_name)
if not cfg:
from .gemini import log
log(f"Unknown model '{model_name}', falling back to '{default}'")
model_name = default
cfg = MODELS[default]
mode_id = cfg["mode"]
think_mode = think_override if think_override is not None else cfg["think"]
extra = cfg.get("extra")
return model_name, mode_id, think_mode, None, extra