mirror of
https://github.com/semantica-agi/semantica.git
synced 2026-08-29 04:26:20 +00:00
- Add tests/test_030_context_graph_realworld_extended.py (105 tests, 0 failed)
- ContextGraph advanced methods: analyze_decision_influence,
get_decision_insights, trace_decision_causality,
enforce_decision_policy, find_precedents_by_scenario
- Research paper citation KG (arXiv provenance: Transformer, BERT,
GPT-3, GPT-4, LLaMA, PaLM — source URLs as entity provenance)
- E-commerce KG with pricing / supply-chain causal decision chains
- GraphBuilderWithProvenance with GitHub + arXiv web-sourced data
- AlgorithmTrackerWithProvenance: all 10 methods incl. 9 domain-specific
ones added in 0.3.0-alpha (track_cross_domain_similarity, etc.)
- Parquet export: entities, relationships, full KG, all codecs (PR #343)
- ArangoDB AQL export: INSERT content, custom collections (PR #342)
- Deduplication v2: two-stage prefilter, phonetic blocking, hybrid_v2,
budget limiting (PR #339); semantic rel dedup v2 (PR #340)
- AgentMemory: store, retrieve, statistics, conversation history
- Full E2E workflow: build → decisions → influence → export → dedup
- Multi-domain precedent search (SEC EDGAR, AMA, M&A news sources)
- Graph serialization round-trips (research, ecommerce, GitHub domains)
- Incremental/delta processing simulation (PR #349)
- All 190 tests (85 existing + 105 new) pass, 0 failed
- Fix Discord invite link — replace expiring links with permanent invite
across all docs and GitHub files:
Old: discord.gg/N7WmAuDH, discord.gg/ggb7vWeP
New: discord.gg/sV34vps5hH (never-expire, unlimited invites)
Files: README.md, CONTRIBUTING.md, CONTRIBUTORS.md, SUPPORT.md,
.github/SUPPORT.md, docs/index.md, docs/getting-started.md,
docs/CodeExamples.md, docs/reference/provenance.md,
semantica/change_management/change_management_usage.md
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
738 lines
19 KiB
Markdown
738 lines
19 KiB
Markdown
# Provenance Tracking Module
|
|
|
|
**W3C PROV-O compliant provenance tracking for high-stakes domains requiring complete traceability**
|
|
|
|
## Overview
|
|
|
|
The Semantica provenance module provides W3C PROV-O compliant tracking for knowledge graphs, enabling complete end-to-end lineage from source documents to query responses. Designed for high-stakes domains where every decision must be explainable and auditable.
|
|
|
|
<div class="grid cards" markdown>
|
|
|
|
- :material-web:{ .lg .middle } **W3C PROV-O Compliant**
|
|
|
|
---
|
|
|
|
Implements PROV-O ontology (prov:Entity, prov:Activity, prov:Agent, prov:wasDerivedFrom)
|
|
|
|
- :material-all-inclusive:{ .lg .middle } **Complete Coverage**
|
|
|
|
---
|
|
|
|
All 17 Semantica modules integrated for comprehensive tracking
|
|
|
|
- :material-file-document:{ .lg .middle } **Source Tracking**
|
|
|
|
---
|
|
|
|
Document identifiers, page numbers, sections, and direct quotes supported
|
|
|
|
- :material-backup-restore:{ .lg .middle } **Backward Compatible**
|
|
|
|
---
|
|
|
|
100% backward compatible, opt-in only with zero breaking changes
|
|
|
|
- :material-database:{ .lg .middle } **Multiple Storage**
|
|
|
|
---
|
|
|
|
InMemory (fast) and SQLite (persistent) backends available
|
|
|
|
- :material-share-variant:{ .lg .middle } **Bridge Axiom Support**
|
|
|
|
---
|
|
|
|
Translation chain tracking for domain transformations (L1 → L2 → L3)
|
|
|
|
- :material-shield-check:{ .lg .middle } **Integrity Verification**
|
|
|
|
---
|
|
|
|
SHA-256 checksums for tamper detection and verification
|
|
|
|
- :material-link-variant:{ .lg .middle } **Complete Lineage**
|
|
|
|
---
|
|
|
|
End-to-end tracing from document to AI response
|
|
|
|
</div>
|
|
|
|
### Key Features
|
|
|
|
- ✅ **W3C PROV-O Compliant** — Implements PROV-O ontology (prov:Entity, prov:Activity, prov:Agent, prov:wasDerivedFrom)
|
|
- ✅ **All 17 Modules Integrated** — Complete coverage across Semantica
|
|
- ✅ **Source Tracking** — Document identifiers, page numbers, sections, and direct quotes supported
|
|
- ✅ **Zero Breaking Changes** — 100% backward compatible, opt-in only
|
|
- ✅ **Multiple Storage Backends** — InMemory (fast) and SQLite (persistent)
|
|
- ✅ **Bridge Axiom Support** — Translation chain tracking for domain transformations (L1 → L2 → L3)
|
|
- ✅ **Integrity Verification** — SHA-256 checksums for tamper detection
|
|
- ✅ **Complete Lineage Tracing** — End-to-end from document to response
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
The provenance module is included with Semantica. No additional installation required.
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager
|
|
```
|
|
|
|
---
|
|
|
|
## Core Components
|
|
|
|
### ProvenanceManager
|
|
|
|
Central manager for all provenance tracking operations.
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager
|
|
|
|
# Initialize with in-memory storage (default)
|
|
manager = ProvenanceManager()
|
|
|
|
# Initialize with persistent SQLite storage
|
|
manager = ProvenanceManager(storage_path="provenance.db")
|
|
```
|
|
|
|
**Key capabilities:**
|
|
- Track entities and relationships with complete lineage
|
|
- Store provenance data in memory or persistent SQLite storage
|
|
- Query provenance information for audit and compliance
|
|
- Maintain W3C PROV-O compliant records
|
|
|
|
**Methods:**
|
|
- `track_entity(entity_id, source, entity_type, **metadata)` — Track entity provenance
|
|
- `track_relationship(relationship_id, source, subject, predicate, obj, **metadata)` — Track relationship provenance
|
|
- `track_chunk(chunk_id, source_document, chunk_text, start_char, end_char, **metadata)` — Track document chunk provenance
|
|
- `track_property_source(entity_id, property_name, value, source, **metadata)` — Track property-level provenance
|
|
- `get_lineage(entity_id)` — Retrieve complete lineage for an entity
|
|
- `get_statistics()` — Get provenance statistics
|
|
- `get_all_entries()` — Retrieve all provenance entries
|
|
|
|
### Storage Backends
|
|
|
|
#### InMemoryStorage
|
|
|
|
Fast, non-persistent storage for development and testing.
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager, InMemoryStorage
|
|
|
|
manager = ProvenanceManager(storage=InMemoryStorage())
|
|
```
|
|
|
|
**Best for:**
|
|
- Development and testing environments
|
|
- Temporary provenance tracking
|
|
- High-performance scenarios where persistence isn't required
|
|
- Rapid prototyping and debugging
|
|
|
|
#### SQLiteStorage
|
|
|
|
Persistent storage for production use.
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager, SQLiteStorage
|
|
|
|
storage = SQLiteStorage("provenance.db")
|
|
manager = ProvenanceManager(storage=storage)
|
|
```
|
|
|
|
**Best for:**
|
|
- Production deployments requiring persistence
|
|
- Long-term provenance storage
|
|
- Compliance and audit requirements
|
|
- Multi-process environments
|
|
|
|
### Data Schemas
|
|
|
|
#### ProvenanceEntry
|
|
|
|
Core data structure for provenance tracking.
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceEntry
|
|
from datetime import datetime
|
|
|
|
entry = ProvenanceEntry(
|
|
entity_id="entity_1",
|
|
source="document.pdf",
|
|
timestamp=datetime.now(),
|
|
entity_type="named_entity",
|
|
metadata={"text": "Apple Inc.", "confidence": 0.95}
|
|
)
|
|
```
|
|
|
|
#### SourceReference
|
|
|
|
Structured source information with page and section details.
|
|
|
|
```python
|
|
from semantica.provenance import SourceReference
|
|
|
|
source = SourceReference(
|
|
document="research_paper.pdf",
|
|
page=5,
|
|
section="Results",
|
|
confidence=0.98
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Module Integrations
|
|
|
|
All Semantica modules have provenance-enabled versions. Enable tracking by setting `provenance=True`.
|
|
|
|
### Semantic Extract
|
|
|
|
```python
|
|
from semantica.semantic_extract.semantic_extract_provenance import (
|
|
NERExtractorWithProvenance,
|
|
RelationExtractorWithProvenance,
|
|
EventDetectorWithProvenance,
|
|
CoreferenceResolverWithProvenance,
|
|
TripletExtractorWithProvenance
|
|
)
|
|
|
|
# Named Entity Recognition with provenance
|
|
ner = NERExtractorWithProvenance(provenance=True)
|
|
entities = ner.extract(
|
|
text="Apple Inc. was founded by Steve Jobs in Cupertino.",
|
|
source="company_history.pdf"
|
|
)
|
|
|
|
# Access provenance manager
|
|
prov_manager = ner._prov_manager
|
|
lineage = prov_manager.get_lineage("entity_id")
|
|
```
|
|
|
|
**Tracks:** Entity text, labels, confidence scores, source documents, character positions, extraction timestamps
|
|
|
|
### LLM Providers
|
|
|
|
```python
|
|
from semantica.llms.llms_provenance import (
|
|
GroqLLMWithProvenance,
|
|
OpenAILLMWithProvenance,
|
|
HuggingFaceLLMWithProvenance,
|
|
LiteLLMWithProvenance
|
|
)
|
|
|
|
# Groq LLM with provenance
|
|
llm = GroqLLMWithProvenance(
|
|
provenance=True,
|
|
model="llama-3.1-70b"
|
|
)
|
|
|
|
response = llm.generate("What is artificial intelligence?")
|
|
|
|
# Access cost and performance data
|
|
stats = llm._prov_manager.get_statistics()
|
|
```
|
|
|
|
**Tracks:** Model name, prompt/completion tokens, API costs, latency, generation parameters, prompts and responses
|
|
|
|
### Pipeline Execution
|
|
|
|
```python
|
|
from semantica.pipeline.pipeline_provenance import PipelineWithProvenance
|
|
|
|
pipeline = PipelineWithProvenance(provenance=True)
|
|
result = pipeline.run(data=input_data, source="input_file.json")
|
|
```
|
|
|
|
**Tracks:** Pipeline steps executed, duration, input/output data, execution status
|
|
|
|
### Context Management
|
|
|
|
```python
|
|
from semantica.context.context_provenance import ContextManagerWithProvenance
|
|
|
|
ctx = ContextManagerWithProvenance(provenance=True)
|
|
ctx.add_context("Relevant background information", source="knowledge_base.txt")
|
|
```
|
|
|
|
**Tracks:** Context additions, sources, timestamps
|
|
|
|
### Document Ingestion
|
|
|
|
```python
|
|
from semantica.ingest.ingest_provenance import PDFIngestorWithProvenance
|
|
|
|
ingestor = PDFIngestorWithProvenance(provenance=True)
|
|
documents = ingestor.ingest("research_paper.pdf")
|
|
```
|
|
|
|
**Tracks:** File paths, page counts, file metadata, ingestion timestamps
|
|
|
|
### Embeddings Generation
|
|
|
|
```python
|
|
from semantica.embeddings.embeddings_provenance import EmbeddingGeneratorWithProvenance
|
|
|
|
embedder = EmbeddingGeneratorWithProvenance(
|
|
provenance=True,
|
|
model="sentence-transformers/all-mpnet-base-v2"
|
|
)
|
|
embeddings = embedder.embed(["Text 1", "Text 2"], source="corpus.txt")
|
|
```
|
|
|
|
**Tracks:** Model name, embedding dimensions, generation timestamps
|
|
|
|
### Graph Store
|
|
|
|
```python
|
|
from semantica.graph_store.graph_store_provenance import GraphStoreWithProvenance
|
|
|
|
store = GraphStoreWithProvenance(provenance=True)
|
|
store.add_node(entity_node, source="knowledge_graph.json")
|
|
```
|
|
|
|
**Tracks:** Nodes added, node properties, graph structure changes
|
|
|
|
### Vector Store
|
|
|
|
```python
|
|
from semantica.vector_store.vector_store_provenance import VectorStoreWithProvenance
|
|
|
|
store = VectorStoreWithProvenance(provenance=True)
|
|
store.add_vectors(embedding_vectors, source="embeddings.npy")
|
|
```
|
|
|
|
**Tracks:** Vectors stored, dimensions, storage timestamps
|
|
|
|
### Triplet Store
|
|
|
|
```python
|
|
from semantica.triplet_store.triplet_store_provenance import TripletStoreWithProvenance
|
|
|
|
store = TripletStoreWithProvenance(provenance=True)
|
|
store.add_triplet("Steve_Jobs", "founded", "Apple_Inc", source="knowledge_base.ttl")
|
|
```
|
|
|
|
**Tracks:** Subject, predicate, object, confidence scores, timestamps
|
|
|
|
### Other Modules
|
|
|
|
All remaining modules follow the same pattern:
|
|
|
|
- **Reasoning** — `ReasoningEngineWithProvenance`
|
|
- **Conflicts** — `SourceTrackerWithUnifiedBackend`
|
|
- **Deduplication** — `DeduplicatorWithProvenance`
|
|
- **Export** — `ExporterWithProvenance`
|
|
- **Parse** — `ParserWithProvenance`
|
|
- **Normalize** — `NormalizerWithProvenance`
|
|
- **Ontology** — `OntologyManagerWithProvenance`
|
|
- **Visualization** — `VisualizerWithProvenance`
|
|
|
|
---
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Entity Tracking
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager
|
|
|
|
manager = ProvenanceManager()
|
|
|
|
# Track entity
|
|
manager.track_entity(
|
|
entity_id="entity_1",
|
|
source="document.pdf",
|
|
entity_type="organization",
|
|
metadata={
|
|
"name": "Apple Inc.",
|
|
"confidence": 0.95,
|
|
"extraction_method": "NER"
|
|
}
|
|
)
|
|
|
|
# Retrieve lineage
|
|
lineage = manager.get_lineage("entity_1")
|
|
print(f"Source: {lineage['source']}")
|
|
print(f"Timestamp: {lineage['timestamp']}")
|
|
print(f"Metadata: {lineage['metadata']}")
|
|
```
|
|
|
|
### Relationship Tracking
|
|
|
|
```python
|
|
# Track entities
|
|
manager.track_entity("steve_jobs", "biography.pdf", "person")
|
|
manager.track_entity("apple_inc", "biography.pdf", "organization")
|
|
|
|
# Track relationship
|
|
manager.track_relationship(
|
|
relationship_id="rel_1",
|
|
source="biography.pdf",
|
|
subject="steve_jobs",
|
|
predicate="founded",
|
|
obj="apple_inc",
|
|
metadata={"confidence": 0.92}
|
|
)
|
|
```
|
|
|
|
### Lineage Chain Tracking
|
|
|
|
```python
|
|
# Create lineage chain: document → chunk → entity
|
|
manager.track_entity("doc_1", "research_paper.pdf", "document")
|
|
|
|
manager.track_chunk(
|
|
chunk_id="chunk_1",
|
|
source_document="doc_1",
|
|
chunk_text="Sample text content",
|
|
start_char=0,
|
|
end_char=100
|
|
)
|
|
|
|
manager.track_entity(
|
|
entity_id="entity_1",
|
|
source="chunk_1",
|
|
entity_type="named_entity",
|
|
metadata={"text": "Apple"}
|
|
)
|
|
|
|
# Retrieve complete lineage
|
|
lineage = manager.get_lineage("entity_1")
|
|
print(f"Lineage chain: {lineage['lineage_chain']}")
|
|
```
|
|
|
|
### Property-Level Provenance
|
|
|
|
```python
|
|
from semantica.provenance import SourceReference
|
|
|
|
# Track entity
|
|
manager.track_entity("company_1", "doc.pdf", "organization")
|
|
|
|
# Track property sources
|
|
manager.track_property_source(
|
|
entity_id="company_1",
|
|
property_name="revenue",
|
|
value="$394.3B",
|
|
source=SourceReference(
|
|
document="annual_report_2023.pdf",
|
|
page=5,
|
|
section="Financial Summary",
|
|
confidence=0.98
|
|
)
|
|
)
|
|
|
|
manager.track_property_source(
|
|
entity_id="company_1",
|
|
property_name="employees",
|
|
value="500",
|
|
source=SourceReference(
|
|
document="company_profile.pdf",
|
|
page=2,
|
|
confidence=0.90
|
|
)
|
|
)
|
|
```
|
|
|
|
### End-to-End Workflow
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager
|
|
from semantica.ingest.ingest_provenance import PDFIngestorWithProvenance
|
|
from semantica.semantic_extract.semantic_extract_provenance import NERExtractorWithProvenance
|
|
from semantica.llms.llms_provenance import GroqLLMWithProvenance
|
|
from semantica.graph_store.graph_store_provenance import GraphStoreWithProvenance
|
|
|
|
# Initialize
|
|
manager = ProvenanceManager()
|
|
|
|
# Step 1: Ingest
|
|
ingestor = PDFIngestorWithProvenance(provenance=True)
|
|
documents = ingestor.ingest("research_paper.pdf")
|
|
|
|
# Step 2: Extract
|
|
ner = NERExtractorWithProvenance(provenance=True)
|
|
entities = ner.extract(documents[0].text, source="research_paper.pdf")
|
|
|
|
# Step 3: LLM Analysis
|
|
llm = GroqLLMWithProvenance(provenance=True)
|
|
summary = llm.generate(f"Summarize: {documents[0].text[:500]}")
|
|
|
|
# Step 4: Store
|
|
graph = GraphStoreWithProvenance(provenance=True)
|
|
for entity in entities:
|
|
graph.add_node(entity, source="research_paper.pdf")
|
|
|
|
# Step 5: Retrieve provenance
|
|
lineage = ner._prov_manager.get_lineage("entity_id")
|
|
stats = ner._prov_manager.get_statistics()
|
|
print(f"Total operations: {stats['total_entries']}")
|
|
```
|
|
|
|
---
|
|
|
|
## Bridge Axioms
|
|
|
|
Bridge axioms enable translation chain tracking across multiple abstraction layers.
|
|
|
|
```python
|
|
from semantica.provenance.bridge_axiom import BridgeAxiom, TranslationChain
|
|
|
|
# Create bridge axiom
|
|
axiom = BridgeAxiom(
|
|
source_layer="L1_ecological",
|
|
target_layer="L2_financial",
|
|
translation_rule="fish_biomass_to_revenue",
|
|
confidence=0.89
|
|
)
|
|
|
|
# Add provenance
|
|
axiom.add_source_provenance(
|
|
document="DOI:10.1371/journal.pone.0023601",
|
|
location="Figure 2",
|
|
quote="Total fish biomass increased by 463%"
|
|
)
|
|
|
|
# Create translation chain
|
|
chain = TranslationChain()
|
|
chain.add_axiom(axiom)
|
|
|
|
# Track complete chain
|
|
provenance_data = chain.get_complete_provenance()
|
|
```
|
|
|
|
**Use Cases:**
|
|
- Blue Finance: Ecological data → Financial metrics
|
|
- Healthcare: Clinical data → Treatment recommendations
|
|
- Legal: Evidence → Legal conclusions
|
|
- Pharmaceutical: Research data → Drug efficacy claims
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### 1. Always Provide Source Information
|
|
|
|
```python
|
|
# ✅ GOOD - Provides source
|
|
entities = ner.extract(text, source="document.pdf")
|
|
|
|
# ❌ BAD - No source information
|
|
entities = ner.extract(text)
|
|
```
|
|
|
|
### 2. Use Descriptive Entity IDs
|
|
|
|
```python
|
|
# ✅ GOOD - Descriptive IDs
|
|
manager.track_entity("company_apple_inc", source, "organization")
|
|
|
|
# ❌ BAD - Generic IDs
|
|
manager.track_entity("entity_1", source, "organization")
|
|
```
|
|
|
|
### 3. Include Rich Metadata
|
|
|
|
```python
|
|
# ✅ GOOD - Rich metadata
|
|
manager.track_entity(
|
|
entity_id="person_steve_jobs",
|
|
source="biography.pdf",
|
|
entity_type="person",
|
|
metadata={
|
|
"full_name": "Steve Jobs",
|
|
"birth_year": 1955,
|
|
"confidence": 0.95,
|
|
"extraction_method": "NER_spacy"
|
|
}
|
|
)
|
|
```
|
|
|
|
### 4. Enable Provenance for High-Stakes Operations
|
|
|
|
```python
|
|
# For high-stakes requirements
|
|
llm = GroqLLMWithProvenance(provenance=True) # Track all LLM calls
|
|
ner = NERExtractorWithProvenance(provenance=True) # Track all extractions
|
|
```
|
|
|
|
### 5. Use Persistent Storage for Production
|
|
|
|
```python
|
|
from semantica.provenance import ProvenanceManager, SQLiteStorage
|
|
|
|
# Use SQLite for persistence
|
|
storage = SQLiteStorage("provenance.db")
|
|
manager = ProvenanceManager(storage=storage)
|
|
```
|
|
|
|
---
|
|
|
|
## Performance
|
|
|
|
### Benchmarks
|
|
|
|
- **Entity tracking:** Fast per operation
|
|
- **Lineage retrieval:** Quick retrieval for long chains
|
|
- **Batch operations:** High-throughput batch processing
|
|
- **Storage:** InMemory (fastest), SQLite (persistent)
|
|
|
|
### Optimization Tips
|
|
|
|
1. **Batch Operations:** Use batch methods for multiple entities
|
|
2. **Selective Tracking:** Only track provenance for critical entities
|
|
3. **Storage Choice:** Use InMemory for development, SQLite for production
|
|
4. **Index Optimization:** SQLite automatically indexes entity_id and source_document
|
|
|
|
---
|
|
|
|
## Compliance Standards Support
|
|
|
|
The provenance module provides **technical infrastructure** that supports compliance efforts:
|
|
|
|
- **W3C PROV-O** — Implements PROV-O ontology data structures and relationships
|
|
- **FDA 21 CFR Part 11** — Provides audit trails, checksums, and temporal tracking for electronic records
|
|
- **SOX** — Enables financial data lineage tracking and integrity verification
|
|
- **HIPAA** — Supports healthcare data integrity through checksums and source tracking
|
|
- **TNFD** — Enables bridge axiom tracking for nature-to-financial translations
|
|
|
|
**Important:** This module provides the *technical capabilities* for compliance. Organizations must implement additional policies, procedures, validation, and controls to meet specific regulatory requirements. Semantica does not provide regulatory certification or legal compliance guarantees.
|
|
|
|
---
|
|
|
|
## API Reference
|
|
|
|
### ProvenanceManager
|
|
|
|
#### `__init__(storage=None, storage_path=None)`
|
|
|
|
Initialize provenance manager.
|
|
|
|
**Parameters:**
|
|
- `storage` (ProvenanceStorage, optional): Storage backend instance
|
|
- `storage_path` (str, optional): Path for SQLite storage
|
|
|
|
#### `track_entity(entity_id, source, entity_type, **metadata)`
|
|
|
|
Track entity provenance.
|
|
|
|
**Parameters:**
|
|
- `entity_id` (str): Unique identifier for entity
|
|
- `source` (str): Source document or identifier
|
|
- `entity_type` (str): Type of entity
|
|
- `**metadata`: Additional metadata
|
|
|
|
**Returns:** ProvenanceEntry
|
|
|
|
#### `track_relationship(relationship_id, source, subject, predicate, obj, **metadata)`
|
|
|
|
Track relationship provenance.
|
|
|
|
**Parameters:**
|
|
- `relationship_id` (str): Unique identifier for relationship
|
|
- `source` (str): Source document
|
|
- `subject` (str): Subject entity ID
|
|
- `predicate` (str): Relationship type
|
|
- `obj` (str): Object entity ID
|
|
- `**metadata`: Additional metadata
|
|
|
|
**Returns:** ProvenanceEntry
|
|
|
|
#### `track_chunk(chunk_id, source_document, chunk_text, start_char, end_char, **metadata)`
|
|
|
|
Track document chunk provenance.
|
|
|
|
**Parameters:**
|
|
- `chunk_id` (str): Unique identifier for chunk
|
|
- `source_document` (str): Source document ID
|
|
- `chunk_text` (str): Text content of chunk
|
|
- `start_char` (int): Start character position
|
|
- `end_char` (int): End character position
|
|
- `**metadata`: Additional metadata
|
|
|
|
**Returns:** ProvenanceEntry
|
|
|
|
#### `get_lineage(entity_id)`
|
|
|
|
Retrieve complete lineage for an entity.
|
|
|
|
**Parameters:**
|
|
- `entity_id` (str): Entity identifier
|
|
|
|
**Returns:** dict with lineage information
|
|
|
|
#### `get_statistics()`
|
|
|
|
Get provenance statistics.
|
|
|
|
**Returns:** dict with statistics (total_entries, entities, relationships, chunks)
|
|
|
|
---
|
|
|
|
## Testing
|
|
|
|
Run the provenance test suite:
|
|
|
|
```bash
|
|
# All provenance tests
|
|
pytest tests/provenance/ -v
|
|
|
|
# Specific test categories
|
|
pytest tests/provenance/test_manager.py -v
|
|
pytest tests/provenance/test_storage.py -v
|
|
pytest tests/provenance/test_bridge_axiom.py -v
|
|
pytest tests/provenance/test_integration.py -v
|
|
|
|
# Module integration tests
|
|
pytest tests/provenance/test_semantic_extract_provenance.py -v
|
|
pytest tests/provenance/test_llms_provenance.py -v
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Provenance Not Being Tracked
|
|
|
|
```python
|
|
# Check if provenance is enabled
|
|
print(f"Provenance enabled: {obj.provenance}")
|
|
print(f"Manager available: {obj._prov_manager is not None}")
|
|
```
|
|
|
|
### Performance Issues
|
|
|
|
```python
|
|
# Use batch operations
|
|
entities = [{"id": f"entity_{i}"} for i in range(1000)]
|
|
manager.track_entities_batch(entities, source="doc_1")
|
|
```
|
|
|
|
### Storage Growing Too Large
|
|
|
|
```python
|
|
# Use separate databases for different time periods
|
|
manager_2026 = ProvenanceManager(storage_path="provenance_2026.db")
|
|
```
|
|
|
|
---
|
|
|
|
## See Also
|
|
|
|
- [Provenance Usage Guide](https://github.com/Hawksight-AI/semantica/blob/main/semantica/provenance/provenance_usage.md) — Comprehensive usage documentation
|
|
- [Change Management](change_management.md) — Version control and audit trails
|
|
- [Conflicts Module](conflicts.md) — Source tracking and conflict resolution
|
|
- [Knowledge Graph](kg.md) — Entity and relationship tracking
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT License - See [LICENSE](../../LICENSE) for details.
|
|
|
|
## Support
|
|
|
|
For issues or questions, please open an issue on GitHub or join our [Discord](https://discord.gg/sV34vps5hH).
|