mirror of
https://github.com/semantica-agi/semantica.git
synced 2026-08-29 04:26:20 +00:00
- Rewrote all 26 reference module pages: removed blockquote taglines and horizontal rule separators, added "What You Get" bullet summaries, added constructor/method parameter tables, expanded thin files (graph_store, triplet_store, visualization, provenance) with full API coverage, added backend comparison tables and real-world usage patterns - Renamed Modules tab from "API Reference" and group from "Context & Knowledge" to "Context & Intelligence" in docs.json - Fixed logo: copied "Semantica Logo.png" to web-safe semantica-logo.png and updated all 4 references in docs.json - Improved core docs (index, modules, concepts, quickstart, installation, getting-started) with better fonts, bullet points, and complete module listings (mcp_server, evals, core, utils previously missing) - Rewrote community pages (community, community-projects, contributing-guide, use-cases, architecture, faq, learning-more, glossary) with heading hierarchy fixes, expanded definitions, and better structure - Fixed markdown linter warnings: MD036 bold-as-heading, MD001 heading skips, MD040 missing code fence language, MD032 blank lines around lists
6.3 KiB
6.3 KiB
title, description, icon
| title | description | icon |
|---|---|---|
| Conflicts Module | Multi-source conflict detection and resolution — value, type, temporal, and logical conflicts with investigation guides. | triangle-exclamation |
semantica.conflicts detects and resolves contradictions when multiple sources disagree on the same fact. It surfaces five conflict types, seven resolution strategies, and generates investigation guides for manual review — so conflicts never silently corrupt your knowledge graph.
What You Get
ConflictDetector— value, type, temporal, logical, and relationship conflict detectionConflictResolver— 7 resolution strategies including voting, credibility-weighted, and temporalSourceTracker— track which source each conflicting fact came from, with credibility scoresConflictAnalyzer— pattern analysis, severity grouping, and trend identificationInvestigationGuideGenerator— auto-generate step-by-step investigation checklists for human review
ConflictDetector
from semantica.conflicts import ConflictDetector
detector = ConflictDetector()
conflicts = detector.detect_conflicts(kg)
for conflict in conflicts:
print(f"[{conflict.conflict_type}] '{conflict.entity}' — {conflict.attribute}")
print(f" Sources: {conflict.sources}")
print(f" Severity: {conflict.severity:.2f}")
Detection Types
| Type | What It Detects |
|---|---|
VALUE |
Same entity, same attribute, different values across sources |
TYPE |
Same entity classified as different types in different sources |
TEMPORAL |
Overlapping validity windows with contradictory facts |
LOGICAL |
Facts that violate ontology axioms or SHACL constraints |
RELATIONSHIP |
Inconsistent relationship properties across sources |
Run targeted detection by type:
# Detect all types (default)
conflicts = detector.detect_conflicts(kg)
# Detect specific types only
value_conflicts = detector.detect_value_conflicts(entities, "name")
type_conflicts = detector.detect_type_conflicts(entities)
relation_conflicts = detector.detect_relationship_conflicts(kg)
ConflictResolver
from semantica.conflicts import ConflictResolver, ResolutionStrategy
resolver = ConflictResolver()
results = resolver.resolve_conflicts(conflicts, strategy=ResolutionStrategy.VOTING)
for result in results:
print(f"Resolved '{result.attribute}' → {result.resolved_value}")
print(f" Strategy: {result.strategy}")
Resolution Strategies
| Strategy | Enum | Description |
|---|---|---|
| Majority vote | ResolutionStrategy.VOTING |
Most common value wins |
| Credibility-weighted | ResolutionStrategy.CREDIBILITY_WEIGHTED |
Weighted by source credibility score |
| Most recent | ResolutionStrategy.MOST_RECENT |
Prefer the most recently updated fact |
| First seen | ResolutionStrategy.FIRST_SEEN |
Prefer the first observed value |
| Highest confidence | ResolutionStrategy.HIGHEST_CONFIDENCE |
Prefer the fact with the highest confidence score |
| Manual review | ResolutionStrategy.MANUAL_REVIEW |
Flag for human review |
| Expert review | ResolutionStrategy.EXPERT_REVIEW |
Escalate to a domain expert |
Use the convenience aliases for shorter code:
from semantica.conflicts import voting, credibility_weighted, most_recent, highest_confidence
results = resolver.resolve_conflicts(conflicts, strategy=voting)
Source Credibility Scoring
Assign credibility weights per source so CREDIBILITY_WEIGHTED resolution favors authoritative sources:
from semantica.conflicts import SourceTracker
tracker = SourceTracker()
tracker.set_credibility("pubmed", 0.95)
tracker.set_credibility("wikipedia", 0.80)
tracker.set_credibility("user_input", 0.60)
resolver = ConflictResolver(source_tracker=tracker)
results = resolver.resolve_conflicts(
conflicts,
strategy=ResolutionStrategy.CREDIBILITY_WEIGHTED
)
SourceTracker also builds full traceability chains:
from semantica.conflicts import SourceTracker
tracker = SourceTracker()
tracker.track_entity_source("apple_inc", "crunchbase")
tracker.track_property_source("apple_inc", "revenue", "annual_report_2023")
chain = tracker.get_traceability_chain("apple_inc")
ConflictAnalyzer
Identify patterns and trends across large conflict sets:
from semantica.conflicts import ConflictAnalyzer
analyzer = ConflictAnalyzer()
# Detect recurring patterns
patterns = analyzer.identify_patterns(conflicts)
for pattern in patterns:
print(f"Pattern: {pattern.type} — {pattern.frequency} occurrences")
# Group by severity
by_severity = analyzer.group_by_severity(conflicts)
print(f"Critical: {len(by_severity['critical'])}")
print(f"High: {len(by_severity['high'])}")
print(f"Low: {len(by_severity['low'])}")
# Trend analysis over time
trends = analyzer.analyze_trends(conflicts, time_window="30d")
InvestigationGuideGenerator
Auto-generate human-readable investigation guides for conflicts that can't be automatically resolved:
from semantica.conflicts import InvestigationGuideGenerator, InvestigationGuide
generator = InvestigationGuideGenerator()
guide: InvestigationGuide = generator.generate(conflict)
print(guide.title)
print(guide.context)
for step in guide.steps:
print(f" [{step.order}] {step.description}")
print(f" Check: {step.check}")
Convenience Functions
from semantica.conflicts import (
detect_conflicts, resolve_conflicts, analyze_conflicts,
track_sources, generate_investigation_guide
)
conflicts = detect_conflicts(entities, method="value")
resolved = resolve_conflicts(conflicts, strategy="voting")
analysis = analyze_conflicts(conflicts, method="pattern")
guide = generate_investigation_guide(conflicts[0])