|
|
|
|
|
|
|
from typing import Dict, List, Optional, Any
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
supporters = get_linked_propositions(prop_id, kb, link_type='supports')
|
|
contradictors = get_linked_propositions(prop_id, kb, link_type='contradicts')
|
|
|
|
|
|
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")
|
|
|
|
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)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("Testing AEE Explainer Module (Era Version)...")
|
|
|
|
if Proposition:
|
|
from aee_core_classes_era import EpistemicData
|
|
print("Creating a mock Knowledge Base for Era explainer testing...")
|
|
kb_test: Dict[str, Proposition] = {}
|
|
|
|
|
|
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
|
|
|
|
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
|
|
prop2.epistemic_data.validation_notes.append("Low plausibility based on common knowledge")
|
|
prop2.epistemic_data.bias_flags.append("UNCOMMON_CLAIM")
|
|
|
|
|
|
prop1.epistemic_data.contradicts.append(prop2.prop_id)
|
|
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.")
|
|
|
|
|
|
print("\n--- Generating Explanation for Prop 1 (Era) ---")
|
|
explanation1 = generate_explanation_era(prop1.prop_id, kb_test)
|
|
print(explanation1)
|
|
|
|
|
|
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.") |