Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions backend_api_python/app/config/api_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"""
Expand Down
8 changes: 8 additions & 0 deletions backend_api_python/app/services/llm.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
class LLMProvider(Enum):
"""Supported LLM providers"""
OPENROUTER = "openrouter"
REQUESTY = "requesty"
OPENAI = "openai"
GOOGLE = "google"
DEEPSEEK = "deepseek"
Expand All @@ -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",
Expand Down Expand Up @@ -125,6 +131,7 @@ def provider(self) -> LLMProvider:
LLMProvider.OPENAI,
LLMProvider.GOOGLE,
LLMProvider.OPENROUTER,
LLMProvider.REQUESTY,
]

for p in priority_order:
Expand All @@ -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,
Expand Down
3 changes: 3 additions & 0 deletions backend_api_python/app/utils/config_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
Expand Down