diff --git a/sentience/__init__.py b/sentience/__init__.py index e382fb8..a5e5b5e 100644 --- a/sentience/__init__.py +++ b/sentience/__init__.py @@ -64,6 +64,7 @@ from .inspector import Inspector, inspect from .llm_provider import ( AnthropicProvider, + DeepInfraProvider, LLMProvider, LLMResponse, LocalLLMProvider, @@ -227,6 +228,7 @@ "LLMResponse", "OpenAIProvider", "AnthropicProvider", + "DeepInfraProvider", "LocalLLMProvider", "LocalVisionLLMProvider", "MLXVLMProvider", diff --git a/sentience/llm_provider.py b/sentience/llm_provider.py index 8939b8d..4874e47 100644 --- a/sentience/llm_provider.py +++ b/sentience/llm_provider.py @@ -319,6 +319,28 @@ def model_name(self) -> str: return self._model_name +class DeepInfraProvider(OpenAIProvider): + """ + DeepInfra provider via OpenAI-compatible API. + + Uses DeepInfra's OpenAI-compatible endpoint: + https://api.deepinfra.com/v1/openai + + API token is read from DEEPINFRA_TOKEN or DEEPINFRA_API_KEY if not provided. + """ + + def __init__( + self, + api_key: str | None = None, + model: str = "meta-llama/Meta-Llama-3-8B-Instruct", + base_url: str = "https://api.deepinfra.com/v1/openai", + ): + api_key = get_api_key_from_env( + ["DEEPINFRA_TOKEN", "DEEPINFRA_API_KEY"], api_key + ) + super().__init__(api_key=api_key, model=model, base_url=base_url) + + class AnthropicProvider(LLMProvider): """ Anthropic provider implementation (Claude 3 Opus, Sonnet, Haiku, etc.)