ki: return_model-Flag + ki_model in wiki_rassen; Evaluator filtert Claude-Einträge raus

This commit is contained in:
rene 2026-04-24 18:29:23 +02:00
parent d80abf07e5
commit eea1de6d95
4 changed files with 14 additions and 5 deletions

View file

@ -917,6 +917,7 @@ def _migrate(conn_factory):
("vorkommen_de", "TEXT"), ("vorkommen_de", "TEXT"),
("wikipedia_url_de","TEXT"), ("wikipedia_url_de","TEXT"),
("ki_enriched", "INTEGER DEFAULT 0"), ("ki_enriched", "INTEGER DEFAULT 0"),
("ki_model", "TEXT"),
]: ]:
try: try:
conn.execute(f"ALTER TABLE wiki_rassen ADD COLUMN {col} {typedef}") conn.execute(f"ALTER TABLE wiki_rassen ADD COLUMN {col} {typedef}")

View file

@ -69,6 +69,7 @@ async def complete(
requires_premium: bool = False, requires_premium: bool = False,
user_is_premium: bool = False, user_is_premium: bool = False,
json_mode: bool = False, json_mode: bool = False,
return_model: bool = False,
) -> str: ) -> str:
""" """
KI-Completion. Wählt automatisch den richtigen Backend. KI-Completion. Wählt automatisch den richtigen Backend.
@ -99,18 +100,21 @@ async def complete(
# Cloud-Aufruf: nur wenn Premium UND cloud-Modus # Cloud-Aufruf: nur wenn Premium UND cloud-Modus
if requires_premium and user_is_premium and KI_MODE == "cloud": if requires_premium and user_is_premium and KI_MODE == "cloud":
return await _cloud_complete(prompt, system, max_tokens, json_mode) text = await _cloud_complete(prompt, system, max_tokens, json_mode)
return (text, CLOUD_MODEL) if return_model else text
# Lokaler Aufruf: Entwicklung + Free-User # Lokaler Aufruf: Entwicklung + Free-User
if KI_MODE in ("local", "cloud"): if KI_MODE in ("local", "cloud"):
try: try:
return await _local_complete(prompt, system, max_tokens, json_mode) text = await _local_complete(prompt, system, max_tokens, json_mode)
return (text, LOCAL_MODEL) if return_model else text
except Exception as e: except Exception as e:
logger.warning(f"Lokales KI-Modell nicht erreichbar: {e}") logger.warning(f"Lokales KI-Modell nicht erreichbar: {e}")
# Cloud-Fallback: im cloud-Modus immer, sonst nur für Premium-User # Cloud-Fallback: im cloud-Modus immer, sonst nur für Premium-User
if ANTHROPIC_KEY and (KI_MODE == "cloud" or (requires_premium and user_is_premium)): if ANTHROPIC_KEY and (KI_MODE == "cloud" or (requires_premium and user_is_premium)):
logger.info("Fallback auf Cloud-KI.") logger.info("Fallback auf Cloud-KI.")
return await _cloud_complete(prompt, system, max_tokens, json_mode) text = await _cloud_complete(prompt, system, max_tokens, json_mode)
return (text, CLOUD_MODEL) if return_model else text
raise KIUnavailableError( raise KIUnavailableError(
"KI-Modell momentan nicht erreichbar. Bitte später erneut versuchen." "KI-Modell momentan nicht erreichbar. Bitte später erneut versuchen."
) from e ) from e

View file

@ -228,11 +228,12 @@ async def enrich_breeds(limit: int = 10) -> int:
prompt = _PROMPT_TEMPLATE.format(name=name, herkunft=herkunft) prompt = _PROMPT_TEMPLATE.format(name=name, herkunft=herkunft)
try: try:
raw = await complete( raw, used_model = await complete(
prompt, prompt,
system=_SYSTEM, system=_SYSTEM,
max_tokens=600, max_tokens=600,
requires_premium=False, requires_premium=False,
return_model=True,
) )
except KIUnavailableError as e: except KIUnavailableError as e:
logger.warning("KI nicht verfügbar, Anreicherung abgebrochen: %s", e) logger.warning("KI nicht verfügbar, Anreicherung abgebrochen: %s", e)
@ -258,6 +259,7 @@ async def enrich_breeds(limit: int = 10) -> int:
if "temperament" in updates: if "temperament" in updates:
updates["temperament"] = translate_temperament(updates["temperament"]) updates["temperament"] = translate_temperament(updates["temperament"])
updates["ki_enriched"] = 1 updates["ki_enriched"] = 1
updates["ki_model"] = used_model
cols = ", ".join(f"{k}=?" for k in updates) cols = ", ".join(f"{k}=?" for k in updates)
values = list(updates.values()) + [rasse_id] values = list(updates.values()) + [rasse_id]

View file

@ -62,9 +62,11 @@ async def evaluate_enrichment(sample_size: int = 20) -> dict:
"""SELECT name, beschreibung, vorkommen_de, groesse, """SELECT name, beschreibung, vorkommen_de, groesse,
gewicht_min_kg, gewicht_max_kg, lebensdauer, gewicht_min_kg, gewicht_max_kg, lebensdauer,
aktivitaet, erfahrung, kinder_geeignet, aktivitaet, erfahrung, kinder_geeignet,
wohnung_geeignet, temperament wohnung_geeignet, temperament, ki_model
FROM wiki_rassen FROM wiki_rassen
WHERE ki_enriched = 1 WHERE ki_enriched = 1
AND ki_model IS NOT NULL
AND ki_model NOT LIKE 'claude%'
ORDER BY RANDOM() ORDER BY RANDOM()
LIMIT ?""", LIMIT ?""",
(sample_size,), (sample_size,),