CheckMat / chatmock /fast_mode.py
aiqknow's picture
Upload 97 files
35205e8 verified
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
from .model_registry import normalize_model_name
PRIORITY_SUPPORTED_MODELS = frozenset(
(
"gpt-5.4",
"gpt-5.2",
"gpt-5.1",
"gpt-5",
"gpt-5.1-codex",
"gpt-5-codex",
)
)
_TRUE_STRINGS = {"1", "true", "yes", "on"}
_FALSE_STRINGS = {"0", "false", "no", "off"}
def parse_optional_bool(value: Any) -> bool | None:
if isinstance(value, bool):
return value
if isinstance(value, str):
normalized = value.strip().lower()
if normalized in _TRUE_STRINGS:
return True
if normalized in _FALSE_STRINGS:
return False
return None
def supports_priority_service_tier(model: str | None) -> bool:
return normalize_model_name(model) in PRIORITY_SUPPORTED_MODELS
@dataclass(frozen=True)
class ServiceTierResolution:
service_tier: str | None
error_message: str | None = None
warning_message: str | None = None
used_server_default: bool = False
def resolve_service_tier(
model: str | None,
*,
request_fast_mode: Any = None,
request_service_tier: Any = None,
server_fast_mode: bool = False,
) -> ServiceTierResolution:
explicit_fast_mode = parse_optional_bool(request_fast_mode)
tier: str | None = None
explicit_request = False
used_server_default = False
if explicit_fast_mode is not None:
tier = "priority" if explicit_fast_mode else None
explicit_request = True
elif isinstance(request_service_tier, str) and request_service_tier.strip():
tier = request_service_tier.strip().lower()
explicit_request = True
elif server_fast_mode:
tier = "priority"
used_server_default = True
if tier == "priority" and not supports_priority_service_tier(model):
normalized = normalize_model_name(model)
message = (
f"Fast mode is not supported for model '{normalized}'. "
"Use a supported GPT-5 priority-processing model or disable fast mode for this request."
)
if explicit_request:
return ServiceTierResolution(
service_tier=None,
error_message=message,
used_server_default=used_server_default,
)
return ServiceTierResolution(
service_tier=None,
warning_message=message,
used_server_default=used_server_default,
)
return ServiceTierResolution(
service_tier=tier,
used_server_default=used_server_default,
)