105 lines
3.3 KiB
Python
105 lines
3.3 KiB
Python
"""
|
|
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()
|