Files
wehub-resource-sync 97e91a83f3
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:36:38 +08:00

127 lines
4.1 KiB
Python

"""Provider detection and registry utilities.
This module contains provider-related enums and detection logic.
"""
from enum import Enum
from instructor.v2.core.mode import DEPRECATED_TO_CORE, Mode
class Provider(Enum):
"""Supported provider identifiers."""
OPENAI = "openai"
AZURE_OPENAI = "azure_openai"
VERTEXAI = "vertexai"
ANTHROPIC = "anthropic"
ANYSCALE = "anyscale"
TOGETHER = "together"
GROQ = "groq"
MISTRAL = "mistral"
COHERE = "cohere"
GEMINI = "gemini"
GENAI = "genai"
DATABRICKS = "databricks"
CEREBRAS = "cerebras"
DEEPSEEK = "deepseek"
FIREWORKS = "fireworks"
WRITER = "writer"
XAI = "xai"
OLLAMA = "ollama"
LITELLM = "litellm"
GOOGLE = "google"
GENERATIVE_AI = "generative-ai"
UNKNOWN = "unknown"
BEDROCK = "bedrock"
PERPLEXITY = "perplexity"
OPENROUTER = "openrouter"
def provider_from_mode(mode: Mode, default: Provider = Provider.OPENAI) -> Provider:
"""Infer provider from a provider-specific Mode."""
mapping = {
Mode.ANTHROPIC_TOOLS: Provider.ANTHROPIC,
Mode.ANTHROPIC_JSON: Provider.ANTHROPIC,
Mode.ANTHROPIC_PARALLEL_TOOLS: Provider.ANTHROPIC,
Mode.ANTHROPIC_REASONING_TOOLS: Provider.ANTHROPIC,
Mode.COHERE_TOOLS: Provider.COHERE,
Mode.COHERE_JSON_SCHEMA: Provider.COHERE,
Mode.MISTRAL_TOOLS: Provider.MISTRAL,
Mode.MISTRAL_STRUCTURED_OUTPUTS: Provider.MISTRAL,
Mode.VERTEXAI_TOOLS: Provider.VERTEXAI,
Mode.VERTEXAI_JSON: Provider.VERTEXAI,
Mode.VERTEXAI_PARALLEL_TOOLS: Provider.VERTEXAI,
Mode.GEMINI_TOOLS: Provider.GEMINI,
Mode.GEMINI_JSON: Provider.GEMINI,
Mode.GENAI_TOOLS: Provider.GENAI,
Mode.GENAI_JSON: Provider.GENAI,
Mode.GENAI_STRUCTURED_OUTPUTS: Provider.GENAI,
Mode.XAI_TOOLS: Provider.XAI,
Mode.XAI_JSON: Provider.XAI,
Mode.CEREBRAS_TOOLS: Provider.CEREBRAS,
Mode.CEREBRAS_JSON: Provider.CEREBRAS,
Mode.FIREWORKS_TOOLS: Provider.FIREWORKS,
Mode.FIREWORKS_JSON: Provider.FIREWORKS,
Mode.WRITER_TOOLS: Provider.WRITER,
Mode.WRITER_JSON: Provider.WRITER,
Mode.BEDROCK_TOOLS: Provider.BEDROCK,
Mode.BEDROCK_JSON: Provider.BEDROCK,
Mode.PERPLEXITY_JSON: Provider.PERPLEXITY,
Mode.OPENROUTER_STRUCTURED_OUTPUTS: Provider.OPENROUTER,
}
return mapping.get(mode, default)
def normalize_mode_for_provider(mode: Mode, _provider: Provider) -> Mode:
"""Apply provider-specific mode overrides before registry lookup."""
if mode in DEPRECATED_TO_CORE:
Mode.warn_deprecated_mode(mode)
return DEPRECATED_TO_CORE[mode]
return mode
def get_provider(base_url: str) -> Provider:
"""
Detect the provider based on the base URL.
Args:
base_url: The base URL to analyze
Returns:
Provider: The detected provider enum value
"""
normalized = str(base_url).lower()
providers = (
("azure", Provider.AZURE_OPENAI),
("anyscale", Provider.ANYSCALE),
("together", Provider.TOGETHER),
("anthropic", Provider.ANTHROPIC),
("cerebras", Provider.CEREBRAS),
("fireworks", Provider.FIREWORKS),
("groq", Provider.GROQ),
("openai", Provider.OPENAI),
("mistral", Provider.MISTRAL),
("cohere", Provider.COHERE),
("generative-ai", Provider.GENERATIVE_AI),
("vertexai", Provider.VERTEXAI),
("gemini", Provider.GEMINI),
("genai", Provider.GENAI),
("google", Provider.GOOGLE),
("databricks", Provider.DATABRICKS),
("deepseek", Provider.DEEPSEEK),
("bedrock", Provider.BEDROCK),
("writer", Provider.WRITER),
("perplexity", Provider.PERPLEXITY),
("ollama", Provider.OLLAMA),
("localhost:11434", Provider.OLLAMA),
("litellm", Provider.LITELLM),
("openrouter", Provider.OPENROUTER),
("x.ai", Provider.XAI),
("xai", Provider.XAI),
)
for token, provider in providers:
if token in normalized:
return provider
return Provider.UNKNOWN