|
|
""" |
|
|
Model registry for PIPS - centralized model management. |
|
|
|
|
|
This module provides a pluggable model registry that makes it easy to add |
|
|
new models from different providers without modifying the core codebase. |
|
|
""" |
|
|
|
|
|
from typing import Dict, Any, Optional |
|
|
|
|
|
|
|
|
_registry: Dict[str, Dict[str, Any]] = {} |
|
|
|
|
|
def register_model(name: str, provider: str, display: str = "", **config): |
|
|
""" |
|
|
Register a new model in the registry. |
|
|
|
|
|
Args: |
|
|
name: Unique model identifier |
|
|
provider: Provider name (openai, google, anthropic) |
|
|
display: Human-readable display name |
|
|
**config: Additional configuration parameters |
|
|
""" |
|
|
_registry[name] = { |
|
|
"provider": provider, |
|
|
"display": display or name, |
|
|
**config |
|
|
} |
|
|
|
|
|
def list_models() -> Dict[str, Dict[str, Any]]: |
|
|
""" |
|
|
Get all registered models. |
|
|
|
|
|
Returns: |
|
|
Dictionary mapping model names to their configuration |
|
|
""" |
|
|
return _registry.copy() |
|
|
|
|
|
def get_model_config(name: str) -> Optional[Dict[str, Any]]: |
|
|
""" |
|
|
Get configuration for a specific model. |
|
|
|
|
|
Args: |
|
|
name: Model identifier |
|
|
|
|
|
Returns: |
|
|
Model configuration or None if not found |
|
|
""" |
|
|
return _registry.get(name) |
|
|
|
|
|
def get_available_models() -> Dict[str, str]: |
|
|
""" |
|
|
Get available models in the format expected by the UI. |
|
|
|
|
|
Returns: |
|
|
Dictionary mapping model IDs to display names |
|
|
""" |
|
|
return {name: config["display"] for name, config in _registry.items()} |
|
|
|
|
|
|
|
|
def _initialize_default_models(): |
|
|
"""Initialize the registry with default models.""" |
|
|
|
|
|
|
|
|
register_model("gpt-5", "openai", "OpenAI GPT-5") |
|
|
register_model("gpt-5-mini", "openai", "OpenAI GPT-5-mini") |
|
|
register_model("gpt-4.1-2025-04-14", "openai", "OpenAI GPT-4.1") |
|
|
register_model("gpt-4o-2024-08-06", "openai", "OpenAI GPT-4o") |
|
|
register_model("gpt-4.1-mini-2025-04-14", "openai", "OpenAI GPT-4.1 Mini") |
|
|
register_model("gpt-4o-mini", "openai", "OpenAI GPT-4o Mini") |
|
|
register_model("o4-mini-2025-04-16", "openai", "OpenAI o4 Mini") |
|
|
register_model("o3-2025-04-16", "openai", "OpenAI o3") |
|
|
|
|
|
|
|
|
register_model("gemini-2.0-flash", "google", "Google Gemini 2.0 Flash") |
|
|
register_model("gemini-2.0-flash-codeinterpreter", "google", "Google Gemini 2.0 Flash (Code Interpreter)") |
|
|
|
|
|
|
|
|
register_model("claude-sonnet-4-20250514", "anthropic", "Anthropic Claude 4 Sonnet") |
|
|
register_model("claude-opus-4-20250514", "anthropic", "Anthropic Claude 4 Opus") |
|
|
register_model("claude-3-5-haiku-latest", "anthropic", "Anthropic Claude 3.5 Haiku") |
|
|
|
|
|
|
|
|
_initialize_default_models() |
|
|
|