AEE / aee_explainer_era.py
NextGenC's picture
Upload 10 files
37e65d4 verified
# aee_explainer_era.py
# AEE Era Sürümü: Önermenin epistemik durumu hakkında plausibility dahil açıklama üretir.
from typing import Dict, List, Optional, Any
# Era sürümündeki sınıfları ve utils'i import et
try:
from aee_core_classes_era import Proposition
from aee_utils import get_proposition_by_id, get_linked_propositions
except ImportError:
print("Error: Could not import dependencies from aee_core_classes_era.py or aee_utils.py.")
Proposition = None
# --- Açıklama Üretme Fonksiyonu (Era) ---
def generate_explanation_era(prop_id: str, kb: Dict[str, Proposition]) -> str:
"""
Verilen ID'ye sahip önermenin epistemik durumu hakkında (Plausibility dahil)
insan tarafından okunabilir bir açıklama metni üretir.
"""
if not Proposition: return "Error: Proposition class not available."
prop = get_proposition_by_id(prop_id, kb)
if not prop:
return f"Error: Proposition with ID '{prop_id}' not found in the Knowledge Base."
ep_data = prop.epistemic_data
# Bağlantıları al
supporters = get_linked_propositions(prop_id, kb, link_type='supports')
contradictors = get_linked_propositions(prop_id, kb, link_type='contradicts')
# Metin parçalarını oluştur (Era versiyonu)
explanation_lines = []
explanation_lines.append(f"--- Epistemic Explanation (Era) for Proposition ID: {prop.prop_id[:8]} ---")
explanation_lines.append(f"Statement : '{prop.text_span}'")
explanation_lines.append(f"Extracted Struct : {'[NEGATED] ' if prop.is_negated else ''}"
f"{prop.subject_lemma} - {prop.relation_lemma} - {prop.value_lemma}")
explanation_lines.append("-" * 20)
explanation_lines.append(f"Source : {ep_data.source_id} (Type: {ep_data.source_type or 'N/A'})")
explanation_lines.append(f"Timestamp : {ep_data.timestamp.strftime('%Y-%m-%d %H:%M:%S')}")
explanation_lines.append(f"Source Reliability: {ep_data.reliability_score:.2f}" if ep_data.reliability_score is not None else "N/A")
# Plausibility bilgilerini ekle
explanation_lines.append(f"Plausibility Score: {ep_data.plausibility_score:.2f}" if ep_data.plausibility_score is not None else "N/A")
explanation_lines.append(f"Validation Notes : [{', '.join(ep_data.validation_notes) if ep_data.validation_notes else 'None'}]")
explanation_lines.append(f"Confidence Score : {ep_data.computed_confidence:.3f} (Initial: {ep_data.initial_confidence:.2f})")
explanation_lines.append("-" * 20)
explanation_lines.append(f"Supporting Props ({len(supporters)}): "
f"[{', '.join([p.prop_id[:8] for p in supporters]) if supporters else 'None'}]")
explanation_lines.append(f"Contradicting Props ({len(contradictors)}): "
f"[{', '.join([p.prop_id[:8] for p in contradictors]) if contradictors else 'None'}]")
explanation_lines.append("-" * 20)
explanation_lines.append(f"Potential Bias Flags: "
f"[{', '.join(ep_data.bias_flags) if ep_data.bias_flags else 'None'}]")
explanation_lines.append("--- End of Explanation ---")
return "\n".join(explanation_lines)
# --- Test Bloğu ---
if __name__ == "__main__":
print("Testing AEE Explainer Module (Era Version)...")
if Proposition:
from aee_core_classes_era import EpistemicData # Era class'ını import et
print("Creating a mock Knowledge Base for Era explainer testing...")
kb_test: Dict[str, Proposition] = {}
# Örnek önermeler (plausibility ve notlar dahil)
ed1 = EpistemicData(source_id="src1:news.com", initial_confidence=0.8, computed_confidence=0.85, reliability_score=0.7, source_type='news')
prop1 = Proposition("sky is blue", "sky is blue", ed1, "sky", "be", "blue", False)
prop1.epistemic_data.plausibility_score = 0.95 # Manuel test plausibility
ed2 = EpistemicData(source_id="src2:user_blog", initial_confidence=0.4, computed_confidence=0.2, reliability_score=0.3, source_type='blog')
prop2 = Proposition("sky is green", "sky is green", ed2, "sky", "be", "green", False)
prop2.epistemic_data.plausibility_score = 0.15 # Manuel test plausibility
prop2.epistemic_data.validation_notes.append("Low plausibility based on common knowledge")
prop2.epistemic_data.bias_flags.append("UNCOMMON_CLAIM")
# Manuel link ekleyelim (örnek amaçlı)
prop1.epistemic_data.contradicts.append(prop2.prop_id) # Gerçekte bunlar çelişmez ama test için ekleyelim
prop2.epistemic_data.contradicts.append(prop1.prop_id)
kb_test[prop1.prop_id] = prop1
kb_test[prop2.prop_id] = prop2
print(f"Mock KB created with {len(kb_test)} propositions.")
# Test 1: Açıklama üretme (prop1 için)
print("\n--- Generating Explanation for Prop 1 (Era) ---")
explanation1 = generate_explanation_era(prop1.prop_id, kb_test)
print(explanation1)
# Test 2: Açıklama üretme (prop2 için - plausibility düşük)
print("\n--- Generating Explanation for Prop 2 (Era - Low Plausibility) ---")
explanation2 = generate_explanation_era(prop2.prop_id, kb_test)
print(explanation2)
else:
print("Could not run tests because Proposition class import failed.")
print("\nExplainer module (Era) testing complete.")