From 30cda28ec89bedea32b8e1292db185e9b6ce32fa Mon Sep 17 00:00:00 2001 From: curo1305 Date: Sun, 17 May 2026 13:54:18 +0200 Subject: [PATCH] fix(setup,chat): pass dummy api_key for local providers litellm requires the api_key field even for local OpenAI-compatible servers (LM Studio, llama.cpp). Use "local" as a sentinel value for providers that don't require a real key. Co-Authored-By: Claude Sonnet 4.6 --- src/pyra/chat/session.py | 6 +++--- src/pyra/setup/wizard.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pyra/chat/session.py b/src/pyra/chat/session.py index 4b19b46..9988935 100644 --- a/src/pyra/chat/session.py +++ b/src/pyra/chat/session.py @@ -102,17 +102,17 @@ def _call_ai(cfg: PyraConfig, history: ConversationHistory) -> str: from pyra.vault.reader import get_key provider = get_provider(cfg.ai.provider_id) - api_key = get_key(cfg.ai.provider_id) if provider.requires_key else None + # Local providers don't need a real key but litellm requires the field + api_key = get_key(cfg.ai.provider_id) if provider.requires_key else "local" kwargs: dict = { "model": f"{provider.litellm_prefix}{cfg.ai.model}", "messages": history.build_for_api(), "stream": True, + "api_key": api_key, } if cfg.ai.base_url: kwargs["api_base"] = cfg.ai.base_url - if api_key: - kwargs["api_key"] = api_key litellm.suppress_debug_info = True stream = litellm.completion(**kwargs) diff --git a/src/pyra/setup/wizard.py b/src/pyra/setup/wizard.py index 3cc1b6f..c2a5fb3 100644 --- a/src/pyra/setup/wizard.py +++ b/src/pyra/setup/wizard.py @@ -121,16 +121,16 @@ def _test_connection(provider: Provider, model: str) -> None: try: import litellm - api_key = get_key(provider.id) if provider.requires_key else "no-key" + # Local providers don't need a real key but litellm still requires the field + api_key = get_key(provider.id) if provider.requires_key else "local" kwargs: dict = { "model": f"{provider.litellm_prefix}{model}", "messages": [{"role": "user", "content": "Reply with exactly: OK"}], "max_tokens": 10, + "api_key": api_key, } if provider.base_url: kwargs["api_base"] = provider.base_url - if api_key and api_key != "no-key": - kwargs["api_key"] = api_key litellm.completion(**kwargs) console.print("[green]✓ Connection OK[/green]")