from enum import StrEnum, auto from typing import TypeAlias class Provider(StrEnum): OPENAI = auto() OPENAI_COMPATIBLE = auto() AZURE_OPENAI = auto() DEEPSEEK = auto() ANTHROPIC = auto() GOOGLE = auto() VERTEXAI = auto() GROQ = auto() AWS = auto() OLLAMA = auto() OPENROUTER = auto() FAKE = auto() class OpenAIModelName(StrEnum): """https://platform.openai.com/docs/models/gpt-4o""" GPT_5_NANO = "gpt-5-nano" GPT_5_MINI = "gpt-5-mini" GPT_5_1 = "gpt-5.1" class AzureOpenAIModelName(StrEnum): """Azure OpenAI model names""" AZURE_GPT_4O = "azure-gpt-4o" AZURE_GPT_4O_MINI = "azure-gpt-4o-mini" class OpenAIEmbeddingModelName(StrEnum): """https://platform.openai.com/docs/guides/embeddings""" TEXT_EMBEDDING_3_SMALL = "text-embedding-3-small" TEXT_EMBEDDING_3_LARGE = "text-embedding-3-large" TEXT_EMBEDDING_ADA_002 = "text-embedding-ada-002" class DeepseekModelName(StrEnum): """https://api-docs.deepseek.com/quick_start/pricing""" DEEPSEEK_CHAT = "deepseek-chat" class AnthropicModelName(StrEnum): """https://docs.anthropic.com/en/docs/about-claude/models#model-names""" HAIKU_45 = "claude-haiku-4-5" SONNET_45 = "claude-sonnet-4-5" class GoogleModelName(StrEnum): """https://ai.google.dev/gemini-api/docs/models/gemini""" GEMINI_15_PRO = "gemini-1.5-pro" GEMINI_20_FLASH = "gemini-2.0-flash" GEMINI_20_FLASH_LITE = "gemini-2.0-flash-lite" GEMINI_25_FLASH = "gemini-2.5-flash" GEMINI_25_PRO = "gemini-2.5-pro" GEMINI_30_PRO = "gemini-3-pro-preview" class GoogleEmbeddingModelName(StrEnum): """https://ai.google.dev/gemini-api/docs/models/gemini#text-embedding""" TEXT_EMBEDDING_004 = "text-embedding-004" class VertexAIModelName(StrEnum): """https://cloud.google.com/vertex-ai/generative-ai/docs/models""" GEMINI_15_PRO = "gemini-1.5-pro" GEMINI_20_FLASH = "gemini-2.0-flash" GEMINI_20_FLASH_LITE = "models/gemini-2.0-flash-lite" GEMINI_25_FLASH = "models/gemini-2.5-flash" GEMINI_25_PRO = "gemini-2.5-pro" GEMINI_30_PRO = "gemini-3-pro-preview" class GroqModelName(StrEnum): """https://console.groq.com/docs/models""" LLAMA_31_8B = "llama-3.1-8b" LLAMA_33_70B = "llama-3.3-70b" LLAMA_GUARD_4_12B = "meta-llama/llama-guard-4-12b" class AWSModelName(StrEnum): """https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html""" BEDROCK_HAIKU = "bedrock-3.5-haiku" BEDROCK_SONNET = "bedrock-3.5-sonnet" class OllamaModelName(StrEnum): """https://ollama.com/search""" OLLAMA_GENERIC = "ollama" class OllamaEmbeddingModelName(StrEnum): """Common Ollama embedding models""" NOMIC_EMBED_TEXT = "nomic-embed-text" ALL_MINILM = "all-minilm" class OpenRouterModelName(StrEnum): """https://openrouter.ai/models""" GEMINI_25_FLASH = "google/gemini-2.5-flash" class OpenAICompatibleName(StrEnum): """https://platform.openai.com/docs/guides/text-generation""" OPENAI_COMPATIBLE = "openai-compatible" class FakeModelName(StrEnum): """Fake model for testing.""" FAKE = "fake" AllModelEnum: TypeAlias = ( OpenAIModelName | OpenAICompatibleName | AzureOpenAIModelName | DeepseekModelName | AnthropicModelName | GoogleModelName | VertexAIModelName | GroqModelName | AWSModelName | OllamaModelName | OpenRouterModelName | FakeModelName ) AllEmbeddingModelEnum: TypeAlias = ( OpenAIEmbeddingModelName | GoogleEmbeddingModelName | OllamaEmbeddingModelName )