feat(complete): Phase 6 - Loop-Detector, Error-Healer, Grounding-Regel, erweiterte CLI
This commit is contained in:
@@ -160,6 +160,12 @@ class Engram:
|
||||
Berechnet Gesamt-Confidence aus mehreren Faktoren.
|
||||
Kein Neuronales Netz nötig - Heuristik für Phase 1.
|
||||
"""
|
||||
# Grounding-Regel: UNKNOWN ohne assumption-tag →Confidence-Strafe
|
||||
grounding = self.metadata.get("grounding", 0)
|
||||
if grounding == Grounding.UNKNOWN.value and "assumption" not in self.metadata.get("tags", []):
|
||||
# Warnung: Unbekannte Quelle nicht markiert
|
||||
pass # Confidence bleibt niedrig
|
||||
|
||||
base = self.metadata.get("confidence", 0.5)
|
||||
# Korrektheit
|
||||
correctness_score = self.correctness.score()
|
||||
@@ -169,7 +175,7 @@ class Engram:
|
||||
age_days = _age_days(self.metadata.get("created", _now()))
|
||||
recency = max(0, 1.0 - (age_days / 30)) * 0.1 # Nach 30 Tagen = 0
|
||||
# Grounding
|
||||
grounding_boost = (self.metadata.get("grounding", 0) / 4) * 0.2
|
||||
grounding_boost = (grounding / 4) * 0.2
|
||||
|
||||
combined = (
|
||||
base * 0.3 +
|
||||
@@ -180,6 +186,36 @@ class Engram:
|
||||
)
|
||||
return min(max(combined, 0.0), 1.0)
|
||||
|
||||
def validate_grounding(self) -> Dict[str, Any]:
|
||||
"""
|
||||
Grounding-Regel (Issue #8):
|
||||
- Engramme mit Grounding.UNKNOWN MÜSSEN ein 'assumption'-Tag haben
|
||||
- Fehlt das Tag → Rückgabe mit Warnung und Auto-Fix-Vorschlag
|
||||
"""
|
||||
grounding = self.metadata.get("grounding", Grounding.UNKNOWN.value)
|
||||
tags = self.metadata.get("tags", [])
|
||||
|
||||
if grounding == Grounding.UNKNOWN.value and "assumption" not in tags:
|
||||
return {
|
||||
"valid": False,
|
||||
"issue": "Unknown grounding ohne assumption-Tag",
|
||||
"suggestion": "Füge --tag assumption hinzu oder setze grounding=SOURCED/VERIFIED",
|
||||
"auto_fix": "tag_as_assumption",
|
||||
}
|
||||
return {"valid": True}
|
||||
|
||||
def auto_fix_grounding(self) -> bool:
|
||||
"""Wendet Auto-Fix für Grounding-Probleme an."""
|
||||
validation = self.validate_grounding()
|
||||
if not validation["valid"] and validation.get("auto_fix") == "tag_as_assumption":
|
||||
tags = self.metadata.get("tags", [])
|
||||
if "assumption" not in tags:
|
||||
tags.append("assumption")
|
||||
self.metadata["tags"] = tags
|
||||
self.metadata["grounding"] = Grounding.ASSUMPTION.value
|
||||
return True
|
||||
return False
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
"id": str(self.id),
|
||||
|
||||
Reference in New Issue
Block a user