""" Mock-Datenquelle für die OpenRouter-Modell-Liste. Diese Funktion hat exakt die Signatur, die auch der echte API-Call später haben wird (siehe TODO), damit daily_model_check.py unverändert bleibt, wenn die echte API eingehängt wird. TODO (später, wenn echte API gewünscht): import requests def fetch_model_list(): resp = requests.get( "https://openrouter.ai/api/v1/models", headers={"Authorization": f"Bearer {OPENROUTER_API_KEY}"}, timeout=10, ) resp.raise_for_status() return resp.json()["data"] """ from datetime import datetime, timezone def fetch_model_list(): """Gibt eine Liste von Modell-Dicts zurück, im gleichen Format wie die echte OpenRouter-API (vereinfacht auf die Felder, die wir brauchen). """ return [ { "id": "nvidia/nemotron-3-super", "context_length": 262000, "price_per_1k_tokens_eur": 0.0009, "family": "nemotron", "tags": ["linux_system", "allround"], "available": True, }, { "id": "nvidia/nemotron-3-ultra", "context_length": 1000000, "price_per_1k_tokens_eur": 0.0027, "family": "nemotron", "tags": ["linux_system", "allround", "orchestration"], "available": True, }, { "id": "deepseek/deepseek-flash", "context_length": 128000, "price_per_1k_tokens_eur": 0.0006, "family": "deepseek", "tags": ["code", "logic", "database"], "available": True, }, { "id": "deepseek/deepseek-pro", "context_length": 128000, "price_per_1k_tokens_eur": 0.0018, "family": "deepseek", "tags": ["code", "logic", "database"], "available": True, }, { "id": "qwen/qwen3-coder:free", "context_length": 1000000, "price_per_1k_tokens_eur": 0.0, "family": "qwen", "tags": ["homebrew_code", "prompt_generation", "code"], "available": True, }, { "id": "qwen/qwen2.5-7b", "context_length": 128000, "price_per_1k_tokens_eur": 0.0003, "family": "qwen", "tags": ["javascript", "database_query"], "available": True, }, { "id": "google/gemini-flash", "context_length": 1000000, "price_per_1k_tokens_eur": 0.0004, "family": "gemini", "tags": ["document_generation", "html_css_js"], "available": True, }, { "id": "anthropic/claude-sonnet", "context_length": 200000, "price_per_1k_tokens_eur": 0.0045, "family": "anthropic", "tags": ["document_generation", "html_css_js", "allround"], "available": True, }, { "id": "anthropic/claude-opus", "context_length": 200000, "price_per_1k_tokens_eur": 0.0900, "family": "anthropic", "tags": ["document_generation", "html_css_js", "allround"], "available": True, }, ] def fetch_timestamp(): return datetime.now(timezone.utc).isoformat()