diff --git a/.gitignore b/.gitignore index 9720f3b..e543534 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ docs/ *.pyw *.pyz *.pywz -*.pyzz \ No newline at end of file +*.pyzz +.venv/ +__pycache__/ diff --git a/nanobot/config/schema.py b/nanobot/config/schema.py index c2109a1..ad2e270 100644 --- a/nanobot/config/schema.py +++ b/nanobot/config/schema.py @@ -50,6 +50,7 @@ class ProvidersConfig(BaseModel): anthropic: ProviderConfig = Field(default_factory=ProviderConfig) openai: ProviderConfig = Field(default_factory=ProviderConfig) openrouter: ProviderConfig = Field(default_factory=ProviderConfig) + deepseek: ProviderConfig = Field(default_factory=ProviderConfig) zhipu: ProviderConfig = Field(default_factory=ProviderConfig) vllm: ProviderConfig = Field(default_factory=ProviderConfig) gemini: ProviderConfig = Field(default_factory=ProviderConfig) @@ -91,9 +92,10 @@ class Config(BaseSettings): return Path(self.agents.defaults.workspace).expanduser() def get_api_key(self) -> str | None: - """Get API key in priority order: OpenRouter > Anthropic > OpenAI > Gemini > Zhipu > vLLM.""" + """Get API key in priority order: OpenRouter > DeepSeek > Anthropic > OpenAI > Gemini > Zhipu > vLLM.""" return ( self.providers.openrouter.api_key or + self.providers.deepseek.api_key or self.providers.anthropic.api_key or self.providers.openai.api_key or self.providers.gemini.api_key or diff --git a/nanobot/providers/litellm_provider.py b/nanobot/providers/litellm_provider.py index 42b4bf5..f6dc914 100644 --- a/nanobot/providers/litellm_provider.py +++ b/nanobot/providers/litellm_provider.py @@ -43,6 +43,8 @@ class LiteLLMProvider(LLMProvider): elif self.is_vllm: # vLLM/custom endpoint - uses OpenAI-compatible API os.environ["OPENAI_API_KEY"] = api_key + elif "deepseek" in default_model: + os.environ.setdefault("DEEPSEEK_API_KEY", api_key) elif "anthropic" in default_model: os.environ.setdefault("ANTHROPIC_API_KEY", api_key) elif "openai" in default_model or "gpt" in default_model: @@ -103,6 +105,10 @@ class LiteLLMProvider(LLMProvider): if "gemini" in model.lower() and not model.startswith("gemini/"): model = f"gemini/{model}" + # Force set env vars for the provider based on model + if "deepseek" in model: + os.environ["DEEPSEEK_API_KEY"] = self.api_key + kwargs: dict[str, Any] = { "model": model, "messages": messages,