Source code for backend.services.ai_service
# AI-Service: Einheitliches Interface für Claude und Ollama
# Abstrahiert den AI-Provider — der Rest der App spricht nur mit diesem Service
# Umschaltbar via config.py oder API-Endpunkt
from backend.infra.config import AI_PROVIDER
from backend.services.claude_provider import ClaudeProvider
from backend.services.ollama_provider import OllamaProvider
# Beide Provider instanziieren
_providers = {
"claude": ClaudeProvider(),
"ollama": OllamaProvider(),
}
# Aktuell aktiver Provider (kann zur Laufzeit geändert werden)
_active_provider = AI_PROVIDER
[docs]
def get_provider():
"""Gibt den aktuell aktiven AI-Provider zurück."""
return _providers[_active_provider]
[docs]
def set_provider(name: str):
"""
Wechselt den aktiven AI-Provider.
Erlaubte Werte: "claude" oder "ollama"
"""
global _active_provider
if name not in _providers:
raise ValueError(f"Unbekannter Provider: '{name}'. Erlaubt: claude, ollama")
_active_provider = name
[docs]
def get_active_provider_name() -> str:
"""Gibt den Namen des aktuell aktiven Providers zurück."""
return _active_provider
[docs]
async def summarize(text: str) -> dict:
"""
Generiert eine Zusammenfassung mit Schlüsselbegriffen.
Gibt zurück: {"summary": str, "key_terms": list[str]}
"""
return await get_provider().summarize(text)
[docs]
async def explain_term(term: str, context: str) -> str:
"""
Erklärt einen Fachbegriff im Kontext des Dokuments.
Gibt eine verständliche Erklärung zurück.
"""
return await get_provider().explain_term(term, context)
[docs]
async def generate_mindmap(text: str) -> list[dict]:
"""
Generiert eine Mindmap-Struktur aus einem Text.
Gibt eine Liste von Knoten zurück: [{"label": str, "detail": str, "children": [...]}]
"""
return await get_provider().generate_mindmap(text)
[docs]
async def deep_dive(node_label: str, node_detail: str, context: str) -> list[dict]:
"""
Generiert Unterknoten für einen Mindmap-Knoten (Reinzoomen).
Gibt eine Liste von Kind-Knoten zurück.
"""
return await get_provider().deep_dive(node_label, node_detail, context)