diff --git a/backend_api_python/app/config/api_keys.py b/backend_api_python/app/config/api_keys.py index ce48ac02b..bbdb2aed0 100644 --- a/backend_api_python/app/config/api_keys.py +++ b/backend_api_python/app/config/api_keys.py @@ -100,6 +100,16 @@ def OPENROUTER_API_KEY(cls): val = load_addon_config().get('openrouter', {}).get('api_key') return val if val else '' + @property + def REQUESTY_API_KEY(cls): + # Always check env var first to avoid stale cache issues + env_val = os.getenv('REQUESTY_API_KEY', '').strip() + if env_val: + return env_val + from app.utils.config_loader import load_addon_config + val = load_addon_config().get('requesty', {}).get('api_key') + return val if val else '' + @property def OPENAI_API_KEY(cls): """OpenAI direct API key""" diff --git a/backend_api_python/app/services/llm.py b/backend_api_python/app/services/llm.py index 766a22d51..f171e19ef 100644 --- a/backend_api_python/app/services/llm.py +++ b/backend_api_python/app/services/llm.py @@ -20,6 +20,7 @@ class LLMProvider(Enum): """Supported LLM providers""" OPENROUTER = "openrouter" + REQUESTY = "requesty" OPENAI = "openai" GOOGLE = "google" DEEPSEEK = "deepseek" @@ -37,6 +38,11 @@ class LLMProvider(Enum): "default_model": "openai/gpt-5.4", "fallback_model": "openai/gpt-4o-mini", }, + LLMProvider.REQUESTY: { + "base_url": "https://router.requesty.ai/v1", + "default_model": "openai/gpt-5.4", + "fallback_model": "openai/gpt-4o-mini", + }, LLMProvider.OPENAI: { "base_url": "https://api.openai.com/v1", "default_model": "gpt-5.4", @@ -125,6 +131,7 @@ def provider(self) -> LLMProvider: LLMProvider.OPENAI, LLMProvider.GOOGLE, LLMProvider.OPENROUTER, + LLMProvider.REQUESTY, ] for p in priority_order: @@ -141,6 +148,7 @@ def get_api_key(self, provider: LLMProvider = None) -> str: key_map = { LLMProvider.OPENROUTER: APIKeys.OPENROUTER_API_KEY, + LLMProvider.REQUESTY: APIKeys.REQUESTY_API_KEY, LLMProvider.OPENAI: APIKeys.OPENAI_API_KEY, LLMProvider.GOOGLE: APIKeys.GOOGLE_API_KEY, LLMProvider.DEEPSEEK: APIKeys.DEEPSEEK_API_KEY, diff --git a/backend_api_python/app/utils/config_loader.py b/backend_api_python/app/utils/config_loader.py index c572ed876..68e6e9bbc 100644 --- a/backend_api_python/app/utils/config_loader.py +++ b/backend_api_python/app/utils/config_loader.py @@ -92,6 +92,9 @@ def env_get(name: str) -> Optional[str]: ('OPENROUTER_TIMEOUT', 'openrouter.timeout', 'int'), ('OPENROUTER_CONNECT_TIMEOUT', 'openrouter.connect_timeout', 'int'), + # Requesty (OpenAI-compatible LLM gateway) + ('REQUESTY_API_KEY', 'requesty.api_key', 'string'), + # OpenAI Direct ('OPENAI_API_KEY', 'openai.api_key', 'string'), ('OPENAI_BASE_URL', 'openai.base_url', 'string'),