| |
|
| | """Validate the OpenRouter setup in the backend."""
|
| |
|
| | import json
|
| | import os
|
| | import sys
|
| | from pathlib import Path
|
| |
|
| | from dotenv import load_dotenv
|
| |
|
| |
|
| | load_dotenv()
|
| |
|
| |
|
| | def check_env_variables():
|
| | """Check that required environment variables are set."""
|
| | print("=" * 60)
|
| | print("Checking Environment Variables")
|
| | print("=" * 60)
|
| |
|
| | required = ["OPENROUTER_API_KEY", "HF_TOKEN"]
|
| | optional = ["OPENROUTER_MODEL", "OPENROUTER_REFERER", "OPENROUTER_APP_TITLE"]
|
| |
|
| | all_good = True
|
| |
|
| | for var in required:
|
| | value = os.environ.get(var)
|
| | if value:
|
| | masked = value[:20] + "..." if len(value) > 20 else value
|
| | print(f"β
{var}: {masked}")
|
| | else:
|
| | print(f"β {var}: NOT SET (Required)")
|
| | all_good = False
|
| |
|
| | for var in optional:
|
| | value = os.environ.get(var)
|
| | if value:
|
| | print(f"β
{var}: {value}")
|
| | else:
|
| | print(f"β οΈ {var}: Not set (Optional)")
|
| |
|
| | return all_good
|
| |
|
| |
|
| | def check_config_file():
|
| | """Check that the config file is properly configured."""
|
| | print("\n" + "=" * 60)
|
| | print("Checking Config File")
|
| | print("=" * 60)
|
| |
|
| | config_path = Path(__file__).parent / "configs" / "main_agent_config.json"
|
| |
|
| | if not config_path.exists():
|
| | print(f"β Config file not found: {config_path}")
|
| | return False
|
| |
|
| | try:
|
| | with open(config_path) as f:
|
| | config = json.load(f)
|
| |
|
| | print(f"β
Config file loaded: {config_path}")
|
| |
|
| |
|
| | checks = [
|
| | ("model_name", config.get("model_name")),
|
| | ("openrouter_enabled", config.get("openrouter_enabled")),
|
| | ("openrouter_model", config.get("openrouter_model")),
|
| | ]
|
| |
|
| | for key, value in checks:
|
| | if value:
|
| | print(f"β
{key}: {value}")
|
| | else:
|
| | print(f"β οΈ {key}: Not set")
|
| |
|
| |
|
| | if config.get("openrouter_enabled"):
|
| | print("\nβ
OpenRouter is ENABLED in config")
|
| | else:
|
| | print("\nβ οΈ OpenRouter is NOT enabled in config")
|
| |
|
| | return True
|
| |
|
| | except json.JSONDecodeError as e:
|
| | print(f"β Invalid JSON in config file: {e}")
|
| | return False
|
| | except Exception as e:
|
| | print(f"β Error reading config: {e}")
|
| | return False
|
| |
|
| |
|
| | def check_agent_loop():
|
| | """Check that agent_loop.py has the OpenRouter fixes."""
|
| | print("\n" + "=" * 60)
|
| | print("Checking Agent Loop (OpenRouter Integration)")
|
| | print("=" * 60)
|
| |
|
| | agent_loop_path = Path(__file__).parent / "agent" / "core" / "agent_loop.py"
|
| |
|
| | if not agent_loop_path.exists():
|
| | print(f"β agent_loop.py not found: {agent_loop_path}")
|
| | return False
|
| |
|
| | with open(agent_loop_path) as f:
|
| | content = f.read()
|
| |
|
| | checks = [
|
| | ("api_base_to_use", "api_base parameter"),
|
| | ("extra_headers", "extra_headers parameter"),
|
| | ("https://openrouter.ai/api/v1", "OpenRouter API base URL"),
|
| | ("HTTP-Referer", "HTTP-Referer header"),
|
| | ("X-Title", "X-Title header"),
|
| | ]
|
| |
|
| | all_good = True
|
| | for keyword, description in checks:
|
| | if keyword in content:
|
| | print(f"β
{description}: Found")
|
| | else:
|
| | print(f"β {description}: NOT found")
|
| | all_good = False
|
| |
|
| | return all_good
|
| |
|
| |
|
| | def check_routes():
|
| | """Check that routes/agent.py has the OpenRouter fixes."""
|
| | print("\n" + "=" * 60)
|
| | print("Checking Routes (OpenRouter Integration)")
|
| | print("=" * 60)
|
| |
|
| | routes_path = Path(__file__).parent / "routes" / "agent.py"
|
| |
|
| | if not routes_path.exists():
|
| | print(f"β agent.py not found: {routes_path}")
|
| | return False
|
| |
|
| | with open(routes_path) as f:
|
| | content = f.read()
|
| |
|
| | checks = [
|
| | ("llm_health_check", "Health check endpoint"),
|
| | ("generate_title", "Title generation endpoint"),
|
| | ("api_base", "api_base in routes"),
|
| | ("openrouter_enabled", "openrouter_enabled check"),
|
| | ]
|
| |
|
| | all_good = True
|
| | for keyword, description in checks:
|
| | if keyword in content:
|
| | print(f"β
{description}: Found")
|
| | else:
|
| | print(f"β {description}: NOT found")
|
| | all_good = False
|
| |
|
| | return all_good
|
| |
|
| |
|
| | def main():
|
| | """Run all validation checks."""
|
| | print("=" * 60)
|
| | print("OpenRouter Setup Validation")
|
| | print("=" * 60)
|
| |
|
| | results = []
|
| |
|
| | results.append(("Environment Variables", check_env_variables()))
|
| | results.append(("Config File", check_config_file()))
|
| | results.append(("Agent Loop", check_agent_loop()))
|
| | results.append(("Routes", check_routes()))
|
| |
|
| | print("\n" + "=" * 60)
|
| | print("Validation Summary")
|
| | print("=" * 60)
|
| |
|
| | for name, passed in results:
|
| | status = "β
PASS" if passed else "β FAIL"
|
| | print(f"{name}: {status}")
|
| |
|
| | all_passed = all(r[1] for r in results)
|
| |
|
| | if all_passed:
|
| | print("\nπ All validation checks passed!")
|
| | print("The backend is configured correctly for OpenRouter.")
|
| | return 0
|
| | else:
|
| | print("\nβ οΈ Some validation checks failed.")
|
| | print("Please review the errors above and fix the issues.")
|
| | return 1
|
| |
|
| |
|
| | if __name__ == "__main__":
|
| | sys.exit(main())
|
| |
|