Fix: OpenRouter/Together/Fireworks detection + deprecated gpt-4-turbo-preview model

Issues fixed:
- OpenRouter API key not recognized: _set_no_provider_error() now checks all 7
  provider keys (was only checking Anthropic/OpenAI/Google), so users with only
  OPENROUTER_API_KEY set no longer get "No API keys configured" error
- Error message now lists all 8 providers (added OpenRouter, Together, Fireworks)
  instead of only 5 (Anthropic, OpenAI, Google, Ollama, LM Studio)
- gpt-4-turbo-preview (deprecated by OpenAI, 404 error) replaced with gpt-4o
  as default OpenAI model in LLMClient init and generate() fallback
- Settings API model list updated: removed gpt-4-turbo-preview and o1-preview/mini,
  added gpt-4.1, gpt-4.1-mini, o3-mini
- .env.example comment updated to reference gpt-4o instead of gpt-4-turbo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
CyberSecurityUP
2026-02-22 18:04:43 -03:00
co-authored by Claude Opus 4.6
parent e0935793c5
commit 4041018397
4 changed files with 25 additions and 14 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ FIREWORKS_API_KEY=
# Max output tokens (up to 64000 for Claude). Comment out for profile defaults. # Max output tokens (up to 64000 for Claude). Comment out for profile defaults.
#MAX_OUTPUT_TOKENS=64000 #MAX_OUTPUT_TOKENS=64000
# Select specific model name (e.g., claude-sonnet-4-20250514, gpt-4-turbo, llama3.2, qwen2.5) # Select specific model name (e.g., claude-sonnet-4-20250514, gpt-4o, llama3.2, qwen2.5)
# Leave empty for provider default # Leave empty for provider default
#DEFAULT_LLM_MODEL= #DEFAULT_LLM_MODEL=
+16 -7
View File
@@ -1856,17 +1856,26 @@ async def send_realtime_message(session_id: str, request: RealtimeMessageRequest
if not llm_status.get("lmstudio_available"): if not llm_status.get("lmstudio_available"):
error_details.append("LM Studio not running") error_details.append("LM Studio not running")
if not llm_status.get("has_google_key"): if not llm_status.get("has_google_key"):
error_details.append("No GOOGLE_API_KEY set") error_details.append("No GEMINI_API_KEY set")
if not llm_status.get("has_openrouter_key"):
error_details.append("No OPENROUTER_API_KEY set")
if not llm_status.get("has_together_key"):
error_details.append("No TOGETHER_API_KEY set")
if not llm_status.get("has_fireworks_key"):
error_details.append("No FIREWORKS_API_KEY set")
error_msg = f"""⚠️ **No LLM Provider Available** error_msg = f"""⚠️ **No LLM Provider Available**
Configure at least one of the following: Configure at least one of the following in your `.env` file:
1. **Claude (Anthropic)**: Set `ANTHROPIC_API_KEY` environment variable 1. **Claude (Anthropic)**: Set `ANTHROPIC_API_KEY`
2. **OpenAI/ChatGPT**: Set `OPENAI_API_KEY` environment variable 2. **OpenAI/ChatGPT**: Set `OPENAI_API_KEY`
3. **Google Gemini**: Set `GOOGLE_API_KEY` environment variable 3. **OpenRouter (multi-model)**: Set `OPENROUTER_API_KEY`
4. **Ollama (Local)**: Run `ollama serve` and ensure a model is pulled 4. **Google Gemini**: Set `GEMINI_API_KEY`
5. **LM Studio (Local)**: Start LM Studio server on port 1234 5. **Together AI**: Set `TOGETHER_API_KEY`
6. **Fireworks AI**: Set `FIREWORKS_API_KEY`
7. **Ollama (Local)**: Run `ollama serve` and ensure a model is pulled
8. **LM Studio (Local)**: Start LM Studio server on port 1234
**Current status:** **Current status:**
{chr(10).join(f"- {d}" for d in error_details) if error_details else "- Unknown configuration issue"} {chr(10).join(f"- {d}" for d in error_details) if error_details else "- Unknown configuration issue"}
+3 -3
View File
@@ -538,11 +538,11 @@ CLOUD_MODELS = {
{"model_id": "claude-haiku-4-20250514", "display_name": "Claude Haiku 4", "context_length": 200000}, {"model_id": "claude-haiku-4-20250514", "display_name": "Claude Haiku 4", "context_length": 200000},
], ],
"openai": [ "openai": [
{"model_id": "gpt-4-turbo-preview", "display_name": "GPT-4 Turbo", "context_length": 128000},
{"model_id": "gpt-4o", "display_name": "GPT-4o", "context_length": 128000}, {"model_id": "gpt-4o", "display_name": "GPT-4o", "context_length": 128000},
{"model_id": "gpt-4o-mini", "display_name": "GPT-4o Mini", "context_length": 128000}, {"model_id": "gpt-4o-mini", "display_name": "GPT-4o Mini", "context_length": 128000},
{"model_id": "o1-preview", "display_name": "O1 Preview", "context_length": 128000}, {"model_id": "gpt-4.1", "display_name": "GPT-4.1", "context_length": 1047576},
{"model_id": "o1-mini", "display_name": "O1 Mini", "context_length": 128000}, {"model_id": "gpt-4.1-mini", "display_name": "GPT-4.1 Mini", "context_length": 1047576},
{"model_id": "o3-mini", "display_name": "O3 Mini", "context_length": 200000},
], ],
"gemini": [ "gemini": [
{"model_id": "gemini-pro", "display_name": "Gemini Pro", "context_length": 30720}, {"model_id": "gemini-pro", "display_name": "Gemini Pro", "context_length": 30720},
+5 -3
View File
@@ -421,7 +421,7 @@ class LLMClient:
try: try:
self.client = openai.OpenAI(api_key=self.openai_key) self.client = openai.OpenAI(api_key=self.openai_key)
self.provider = "openai" self.provider = "openai"
self.model_name = self.configured_model or "gpt-4-turbo-preview" self.model_name = self.configured_model or "gpt-4o"
print(f"[LLM] OpenAI API initialized (model: {self.model_name})") print(f"[LLM] OpenAI API initialized (model: {self.model_name})")
return return
except Exception as e: except Exception as e:
@@ -514,8 +514,10 @@ class LLMClient:
errors = [] errors = []
if not ANTHROPIC_AVAILABLE and not OPENAI_AVAILABLE: if not ANTHROPIC_AVAILABLE and not OPENAI_AVAILABLE:
errors.append("LLM libraries not installed (run: pip install anthropic openai)") errors.append("LLM libraries not installed (run: pip install anthropic openai)")
if not self.anthropic_key and not self.openai_key and not self.google_key: all_keys = [self.anthropic_key, self.openai_key, self.google_key,
errors.append("No API keys configured") self.openrouter_key, self.together_key, self.fireworks_key, self.codex_key]
if not any(all_keys):
errors.append("No API keys configured (set ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY, GEMINI_API_KEY, TOGETHER_API_KEY, or FIREWORKS_API_KEY)")
if not self._check_ollama(): if not self._check_ollama():
errors.append("Ollama not running locally") errors.append("Ollama not running locally")
if not self._check_lmstudio(): if not self._check_lmstudio():