Files
mesh-configs/skills/devops/model-allocation/scripts/mock_data.py
T

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()