tiphys.llm.models
Model metadata and registry.
Defines context window limits, token costs, and capabilities for various models.
1""" 2Model metadata and registry. 3 4Defines context window limits, token costs, and capabilities for various models. 5""" 6 7from dataclasses import dataclass 8 9 10@dataclass 11class ModelInfo: 12 """Metadata for an LLM model.""" 13 14 id: str 15 provider: str 16 context_window: int 17 max_output_tokens: int 18 supports_vision: bool = False 19 supports_tools: bool = True 20 cost_per_1k_input: float = 0.0 21 cost_per_1k_output: float = 0.0 22 23 24# Registry of known models with their context limits 25MODEL_REGISTRY: dict[str, ModelInfo] = { 26 # Anthropic 27 "anthropic/claude-3-5-sonnet-20240620": ModelInfo( 28 id="anthropic/claude-3-5-sonnet-20240620", 29 provider="anthropic", 30 context_window=200000, 31 max_output_tokens=8192, 32 supports_vision=True, 33 cost_per_1k_input=0.003, 34 cost_per_1k_output=0.015, 35 ), 36 "anthropic/claude-3-5-sonnet": ModelInfo( 37 id="anthropic/claude-3-5-sonnet", 38 provider="anthropic", 39 context_window=200000, 40 max_output_tokens=8192, 41 supports_vision=True, 42 cost_per_1k_input=0.003, 43 cost_per_1k_output=0.015, 44 ), 45 "anthropic/claude-3-opus-20240229": ModelInfo( 46 id="anthropic/claude-3-opus-20240229", 47 provider="anthropic", 48 context_window=200000, 49 max_output_tokens=4096, 50 supports_vision=True, 51 cost_per_1k_input=0.015, 52 cost_per_1k_output=0.075, 53 ), 54 # OpenAI 55 "openai/gpt-4o": ModelInfo( 56 id="openai/gpt-4o", 57 provider="openai", 58 context_window=128000, 59 max_output_tokens=4096, 60 supports_vision=True, 61 cost_per_1k_input=0.005, 62 cost_per_1k_output=0.015, 63 ), 64 "openai/gpt-4-turbo": ModelInfo( 65 id="openai/gpt-4-turbo", 66 provider="openai", 67 context_window=128000, 68 max_output_tokens=4096, 69 supports_vision=True, 70 cost_per_1k_input=0.01, 71 cost_per_1k_output=0.03, 72 ), 73 "openai/gpt-3.5-turbo": ModelInfo( 74 id="openai/gpt-3.5-turbo", 75 provider="openai", 76 context_window=16385, 77 max_output_tokens=4096, 78 cost_per_1k_input=0.0005, 79 cost_per_1k_output=0.0015, 80 ), 81 # Ollama (Defaults, can be overridden) 82 "ollama/llama3": ModelInfo( 83 id="ollama/llama3", 84 provider="ollama", 85 context_window=8192, 86 max_output_tokens=4096, 87 ), 88 "ollama/llama3.1": ModelInfo( 89 id="ollama/llama3.1", 90 provider="ollama", 91 context_window=128000, 92 max_output_tokens=4096, 93 ), 94 "ollama/phi3": ModelInfo( 95 id="ollama/phi3", 96 provider="ollama", 97 context_window=4096, 98 max_output_tokens=4096, 99 ), 100} 101 102 103def get_model_info(model_id: str) -> ModelInfo: 104 """ 105 Get metadata for a model. 106 107 If the model is not in the registry, returns a default ModelInfo. 108 """ 109 if model_id in MODEL_REGISTRY: 110 return MODEL_REGISTRY[model_id] 111 112 # Handle short names (e.g., "claude-3-5-sonnet") 113 for full_id, info in MODEL_REGISTRY.items(): 114 if model_id == full_id or model_id == full_id.split("/")[-1]: 115 return info 116 117 # Default for unknown models 118 provider = model_id.split("/")[0] if "/" in model_id else "unknown" 119 return ModelInfo( 120 id=model_id, 121 provider=provider, 122 context_window=4096, # Conservative default 123 max_output_tokens=4096, 124 )
@dataclass
class
ModelInfo:
11@dataclass 12class ModelInfo: 13 """Metadata for an LLM model.""" 14 15 id: str 16 provider: str 17 context_window: int 18 max_output_tokens: int 19 supports_vision: bool = False 20 supports_tools: bool = True 21 cost_per_1k_input: float = 0.0 22 cost_per_1k_output: float = 0.0
Metadata for an LLM model.
MODEL_REGISTRY: dict[str, ModelInfo] =
{'anthropic/claude-3-5-sonnet-20240620': ModelInfo(id='anthropic/claude-3-5-sonnet-20240620', provider='anthropic', context_window=200000, max_output_tokens=8192, supports_vision=True, supports_tools=True, cost_per_1k_input=0.003, cost_per_1k_output=0.015), 'anthropic/claude-3-5-sonnet': ModelInfo(id='anthropic/claude-3-5-sonnet', provider='anthropic', context_window=200000, max_output_tokens=8192, supports_vision=True, supports_tools=True, cost_per_1k_input=0.003, cost_per_1k_output=0.015), 'anthropic/claude-3-opus-20240229': ModelInfo(id='anthropic/claude-3-opus-20240229', provider='anthropic', context_window=200000, max_output_tokens=4096, supports_vision=True, supports_tools=True, cost_per_1k_input=0.015, cost_per_1k_output=0.075), 'openai/gpt-4o': ModelInfo(id='openai/gpt-4o', provider='openai', context_window=128000, max_output_tokens=4096, supports_vision=True, supports_tools=True, cost_per_1k_input=0.005, cost_per_1k_output=0.015), 'openai/gpt-4-turbo': ModelInfo(id='openai/gpt-4-turbo', provider='openai', context_window=128000, max_output_tokens=4096, supports_vision=True, supports_tools=True, cost_per_1k_input=0.01, cost_per_1k_output=0.03), 'openai/gpt-3.5-turbo': ModelInfo(id='openai/gpt-3.5-turbo', provider='openai', context_window=16385, max_output_tokens=4096, supports_vision=False, supports_tools=True, cost_per_1k_input=0.0005, cost_per_1k_output=0.0015), 'ollama/llama3': ModelInfo(id='ollama/llama3', provider='ollama', context_window=8192, max_output_tokens=4096, supports_vision=False, supports_tools=True, cost_per_1k_input=0.0, cost_per_1k_output=0.0), 'ollama/llama3.1': ModelInfo(id='ollama/llama3.1', provider='ollama', context_window=128000, max_output_tokens=4096, supports_vision=False, supports_tools=True, cost_per_1k_input=0.0, cost_per_1k_output=0.0), 'ollama/phi3': ModelInfo(id='ollama/phi3', provider='ollama', context_window=4096, max_output_tokens=4096, supports_vision=False, supports_tools=True, cost_per_1k_input=0.0, cost_per_1k_output=0.0)}
104def get_model_info(model_id: str) -> ModelInfo: 105 """ 106 Get metadata for a model. 107 108 If the model is not in the registry, returns a default ModelInfo. 109 """ 110 if model_id in MODEL_REGISTRY: 111 return MODEL_REGISTRY[model_id] 112 113 # Handle short names (e.g., "claude-3-5-sonnet") 114 for full_id, info in MODEL_REGISTRY.items(): 115 if model_id == full_id or model_id == full_id.split("/")[-1]: 116 return info 117 118 # Default for unknown models 119 provider = model_id.split("/")[0] if "/" in model_id else "unknown" 120 return ModelInfo( 121 id=model_id, 122 provider=provider, 123 context_window=4096, # Conservative default 124 max_output_tokens=4096, 125 )
Get metadata for a model.
If the model is not in the registry, returns a default ModelInfo.