ADR 0008: Lightweight-Migration ohne Package-Split
- ports/llm_bewerter.py: Protocol + LlmRequest-Dataclass
- adapters/qwen_bewerter.py: Qwen/DashScope-Adapter mit Retry-Loop
- repositories/{antrag,bewertung,abonnement}_repository.py: Protocol + Sqlite-Impl + InMemory-Fake
- analyzer.py refactored: nimmt Optional[LlmBewerter], AsyncOpenAI-Import raus
- models.py: 5 Domain-Methoden auf Bewertung/MatrixEntry
(ist_ablehnung, hat_fundamental_kritisches_feld, verletzt_score_cap, ...)
- analyzer loggt WARNING wenn LLM Score-Cap-Invariante verletzt
Folge-PR: Callsite-Migration in main.py (~21 direkte database.*-Aufrufe)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 lines
460 B
Python
12 lines
460 B
Python
"""Ports (Protocols) für externe Dienste — Teil der Hexagonal-Migration (ADR 0008).
|
|
|
|
Ein „Port" ist hier ein ``typing.Protocol``, das einen Infrastruktur-
|
|
Zugang beschreibt (LLM-Call, Embedding-Search, Mail-Versand) ohne
|
|
konkrete Implementierung. Adapter in ``app/adapters/`` implementieren
|
|
die Ports gegen reale Systeme; Tests nutzen Fake-Implementierungen.
|
|
"""
|
|
|
|
from .llm_bewerter import LlmBewerter, LlmRequest
|
|
|
|
__all__ = ["LlmBewerter", "LlmRequest"]
|