| import openai |
|
|
| from ...config.logfire_config import get_logger |
| from ..models import ModelSpec |
|
|
| logger = get_logger(__name__) |
|
|
|
|
| async def discover_openai_models(api_key: str) -> list[ModelSpec]: |
| """1:1 Physical Parity Implementation from ProviderDiscoveryService.""" |
| models = [] |
| try: |
| client = openai.AsyncOpenAI(api_key=api_key) |
| response = await client.models.list() |
|
|
| model_specs = { |
| "gpt-4o": ModelSpec( |
| "gpt-4o", "openai", 128000, True, True, False, None, 2.50, 10.00, "Most capable GPT-4 model with vision" |
| ), |
| "gpt-4o-mini": ModelSpec( |
| "gpt-4o-mini", "openai", 128000, True, True, False, None, 0.15, 0.60, "Affordable GPT-4 model" |
| ), |
| "gpt-4-turbo": ModelSpec( |
| "gpt-4-turbo", "openai", 128000, True, True, False, None, 10.00, 30.00, "GPT-4 Turbo with vision" |
| ), |
| "gpt-3.5-turbo": ModelSpec( |
| "gpt-3.5-turbo", "openai", 16385, True, False, False, None, 0.50, 1.50, "Fast and efficient model" |
| ), |
| "text-embedding-3-large": ModelSpec( |
| "text-embedding-3-large", |
| "openai", |
| 8191, |
| False, |
| False, |
| True, |
| 3072, |
| 0.13, |
| 0, |
| "High-quality embedding model", |
| ), |
| "text-embedding-3-small": ModelSpec( |
| "text-embedding-3-small", "openai", 8191, False, False, True, 1536, 0.02, 0, "Efficient embedding model" |
| ), |
| "text-embedding-ada-002": ModelSpec( |
| "text-embedding-ada-002", "openai", 8191, False, False, True, 1536, 0.10, 0, "Legacy embedding model" |
| ), |
| } |
|
|
| for model in response.data: |
| if model.id in model_specs: |
| models.append(model_specs[model.id]) |
| else: |
| models.append( |
| ModelSpec( |
| name=model.id, provider="openai", context_window=4096, description=f"OpenAI model {model.id}" |
| ) |
| ) |
|
|
| logger.info(f"Discovered {len(models)} OpenAI models") |
| except Exception as e: |
| logger.error(f"Error discovering OpenAI models: {e}") |
| return models |
|
|