Fix LLM model list, Castopod API, and server runner

- Remove gpt-4o-realtime (WebSocket-only) from OpenRouter models
- Increase OpenRouter timeout to 60s and max_tokens to 150
- Handle empty LLM responses
- Fix publish_episode.py for current Castopod API fields
- Add port conflict check and graceful shutdown to run.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-06 01:56:09 -07:00
parent a94fc92647
commit 7adf1bbcad
3 changed files with 64 additions and 21 deletions

View File

@@ -7,10 +7,10 @@ from ..config import settings
# Available OpenRouter models
OPENROUTER_MODELS = [
"anthropic/claude-3-haiku",
"anthropic/claude-3.5-sonnet",
"openai/gpt-4o-mini",
"openai/gpt-4o",
"anthropic/claude-3-haiku",
"anthropic/claude-3.5-sonnet",
"google/gemini-flash-1.5",
"google/gemini-pro-1.5",
"meta-llama/llama-3.1-8b-instruct",
@@ -114,7 +114,7 @@ class LLMService:
"""Call OpenRouter API with retry"""
for attempt in range(2): # Try twice
try:
async with httpx.AsyncClient(timeout=30.0) as client:
async with httpx.AsyncClient(timeout=60.0) as client:
response = await client.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={
@@ -124,12 +124,16 @@ class LLMService:
json={
"model": self.openrouter_model,
"messages": messages,
"max_tokens": 100,
"max_tokens": 150,
},
)
response.raise_for_status()
data = response.json()
return data["choices"][0]["message"]["content"]
content = data["choices"][0]["message"]["content"]
if not content or not content.strip():
print(f"OpenRouter returned empty response")
return ""
return content
except (httpx.TimeoutException, httpx.ReadTimeout):
print(f"OpenRouter timeout (attempt {attempt + 1})")
if attempt == 0: