94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
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.5",
|
|
"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,
|
|
)
|