TTOPM's picture
Upload 313 files
6b53875 verified
# src/openai_trilayer/capabilities.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Optional
@dataclass(frozen=True)
class ModelCapabilities:
tools: bool = True # function/tool calling
structured_outputs: bool = True # JSON-Schema response_format
vision: bool = False # image inputs
audio: bool = False # audio inputs/outputs
max_output_tokens_hint: Optional[int] = None
def infer_capabilities(model: str) -> ModelCapabilities:
"""
Heuristic: prefer permissive defaults; disable features only
for clearly incompatible/legacy models by pattern.
This keeps us forward-compatible with future OpenAI models.
"""
m = model.lower()
# conservative legacy gates (adjust as needed)
if any(x in m for x in ["turbo-instruct", "text-davinci", "gpt-3.5"]):
return ModelCapabilities(tools=False, structured_outputs=False)
if "mini" in m:
return ModelCapabilities(tools=True, structured_outputs=True, max_output_tokens_hint=2048)
if "realtime" in m or "omni" in m:
return ModelCapabilities(tools=True, structured_outputs=True, audio=True, vision=True)
# default: assume modern features supported
return ModelCapabilities()