[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94436":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":16,"starSnapshotCount":16,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},94436,"semantica","semantica-agi\u002Fsemantica","semantica-agi","Graph-Native Infrastructure for Context and Accountable AI Systems",null,"https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica","Python",2262,299,25,9,0,92,65.63,false,"main","2026-08-25 04:01:21","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"Semantica Logo.png\" alt=\"Semantica\" width=\"420\"\u002F>\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F18986?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-18986\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F18986\" alt=\"semantica-agi%2Fsemantica | Trendshift\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\n### Graph-Native Infrastructure for Context and Accountable AI Systems\n\n#### *The Open Source Palantir for AI Agents*\n\n> Ingest your enterprise data, extract what matters, build a Context Graph and knowledge graph (KG), and run graph analytics and causal reasoning over all of it, with full decision provenance baked in. Explainable, traceable, and trustworthy by design.\n\n**Decision Intelligence &nbsp;·&nbsp; Context Management &nbsp;·&nbsp; Deterministic Reasoning &nbsp;·&nbsp; Ontology Management &nbsp;·&nbsp; Knowledge Modeling &nbsp;·&nbsp; End-to-End Traceability**\n\n**Open Source &nbsp;·&nbsp; Self-Hostable &nbsp;·&nbsp; Auditable &nbsp;·&nbsp; Governed &nbsp;·&nbsp; Zero Vendor Lock-In**\n\n**Polyglot Graph Storage &nbsp;·&nbsp; RDF & LPG Support &nbsp;·&nbsp; W3C Standards &nbsp;·&nbsp; Interoperable**\n\n#### Built for High-Stakes, Regulated Domains\n\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fsemantica-agi\u002Fsemantica?style=flat-square&color=FFD700&logo=github&logoColor=white&label=Stars)](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica) [![GitHub Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fsemantica-agi\u002Fsemantica?style=flat-square&color=6E40C9&logo=github&logoColor=white&label=Forks)](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica\u002Fnetwork\u002Fmembers) [![Contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Fsemantica-agi\u002Fsemantica?style=flat-square&color=2EA043&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica\u002Fgraphs\u002Fcontributors) [![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fsemantica.svg?style=flat-square&color=0066CC&logo=pypi&logoColor=white)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fsemantica\u002F) [![Total Downloads](https:\u002F\u002Fstatic.pepy.tech\u002Fbadge\u002Fsemantica?style=flat-square)](https:\u002F\u002Fpepy.tech\u002Fproject\u002Fsemantica) [![Python 3.8+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8+-3776AB?style=flat-square&logo=python&logoColor=white)](https:\u002F\u002Fwww.python.org\u002F) [![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg?style=flat-square)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT) [![CI](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fsemantica-agi\u002Fsemantica\u002Fci.yml?style=flat-square&label=CI)](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica\u002Factions) [![Ask DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fsemantica-agi\u002Fsemantica)\n\n[![Website](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebsite-getsemantica.ai-000000?style=flat-square&logo=googlechrome&logoColor=white)](https:\u002F\u002Fgetsemantica.ai\u002F) [![Docs](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocs-docs.getsemantica.ai-0099FF?style=flat-square&logo=readthedocs&logoColor=white)](https:\u002F\u002Fdocs.getsemantica.ai\u002F) [![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-Join%20Community-5865F2?style=flat-square&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FsV34vps5hH) [![Twitter\u002FX](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFollow-%40BuildSemantica-000000?style=flat-square&logo=x&logoColor=white)](https:\u002F\u002Fx.com\u002FBuildSemantica) [![YouTube](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FYouTube-Watch%20Demos-FF0000?style=flat-square&logo=youtube&logoColor=white)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QfnNZg4-dZA) [![Changelog](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FChangelog-View-6E40C9?style=flat-square&logo=keepachangelog&logoColor=white)](CHANGELOG.md)\n\n```bash\npip install semantica\n```\n\n\u003C\u002Fdiv>\n\n---\n\n\u003Cdiv align=\"center\">\n\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QfnNZg4-dZA\" target=\"_blank\">\n\u003Cimg\n  src=\"docs\u002Fassets\u002Fimg\u002Fsemantica-knowledge-explorer-demo.gif\"\n  alt=\"Semantica Knowledge Explorer: live graph, decisions, entity resolution, ontology hub\"\n  width=\"900\"\n\u002F>\n\u003C\u002Fa>\n\n*Knowledge Explorer · Context Graphs · Reasoning Engine · Decision Intelligence · Ontology Hub*\n\n**[▶ Watch the full platform walkthrough](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QfnNZg4-dZA)**\n\n\u003C\u002Fdiv>\n\n---\n\nMost AI agents act without a trail. They store embeddings, not meaning: context that can't be explained, decisions that can't be audited. In lending, that gap is a compliance exposure, not an inconvenience: an underwriting agent's approval has to survive a regulator's \"why\" months later.\n\nSemantica sits underneath your LLM, vector store, and agent framework as a deterministic infrastructure layer: no LLM required for graph construction, reasoning, or provenance.\n\n**Who it's for:**\n\n- **AI\u002FML platform teams** shipping agents that make consequential decisions and need structured, queryable context built from fragmented raw data, not just a vector index\n- **Data platform teams on Databricks or Snowflake** who need to turn tables already sitting in Unity Catalog or a Snowflake warehouse into a governed, lineage-tracked knowledge graph, without exporting that data to a third-party SaaS first\n- **Compliance, risk, and audit teams** who need a straight answer to \"why did the AI do that?\" in a format a regulator will actually accept\n- **Regulated enterprises** (finance, healthcare, legal, government, defense) that can't ship a black box, and can't send their data to someone else's SaaS to get one\n- **Platform and infra engineers** who want the KG, reasoning, and provenance stack self-hosted and swappable, not locked to one vendor's backend\n- **Data and knowledge engineers** building a KG from messy, multi-source data: entities and relationships get extracted, conflicting or contradictory facts are flagged instead of silently overwritten, and duplicates are merged before they turn into noise\n\n**[Quick Start](#quick-start)** &nbsp;·&nbsp; **[Architecture](#architecture)** &nbsp;·&nbsp; **[What You Get](#what-semantica-gives-you)** &nbsp;·&nbsp; **[Why Semantica](#why-semantica)** &nbsp;·&nbsp; **[Decision Intelligence](#decision-intelligence)** &nbsp;·&nbsp; **[Context Graphs](#context-graphs)** &nbsp;·&nbsp; **[Recipe: Audit Trail](#recipe-audit-trail-for-a-regulated-decision)** &nbsp;·&nbsp; **[Module Reference](#module-reference)** &nbsp;·&nbsp; **[Integrations](#integrations)** &nbsp;·&nbsp; **[CLI](#cli)** &nbsp;·&nbsp; **[Performance](#performance)** &nbsp;·&nbsp; **[Install](#installation)**\n\n---\n\n## What Semantica Gives You\n\n- **Context Graphs:** A structured, queryable graph of everything your agent knows, decides, and reasons about\n- **Decision Intelligence:** Every decision is a first-class object: traceable, searchable by precedent, and causally linked\n- **AI Governance & Ontology:** SHACL constraints, conflict detection, compliance rules, OWL generation, and SKOS vocabulary management with a visual editor\n- **Full Auditability:** W3C PROV-O provenance on every fact, with audit trails exportable to JSON, CSV, or RDF\n- **Deterministic Reasoning:** Forward chaining, Rete network, Datalog, and SPARQL with fully explainable paths, not black boxes\n- **Knowledge Pipeline:** Multi-source ingestion, entity-aware chunking, NER\u002Frelation\u002Fevent extraction, and knowledge graph construction, with semantic deduplication and provenance-preserving merges throughout\n- **Enterprise Data Platforms:** Native connectors for Databricks (Unity Catalog + Delta Lake, PAT\u002FOAuth M2M auth, catalog\u002Fschema\u002Ftable\u002Flineage introspection) and Snowflake (warehouse\u002Fdatabase\u002Fschema, key-pair and OAuth auth), so tables already living in your lakehouse or warehouse become graph nodes with provenance, not another export\u002Fimport hop\n- **Graph Analytics:** Centrality, community detection, link prediction, and shortest-path queries over the graph you just built\n- **Polyglot Graph Storage:** Native RDF (embedded Oxigraph, Blazegraph, Apache Jena, Eclipse RDF4J via SPARQL) and Labeled Property Graphs (Neo4j, FalkorDB, Apache AGE, AWS Neptune via Cypher), plus vector stores, all swappable without touching your code\n- **Visualization:** Explore any graph, ontology, or timeline in an interactive browser workbench\n- **Drop-in Integrations:** Native Agno support, a full-featured MCP server, a comprehensive CLI, a REST API, and plugins across major editors\n\n---\n\n## Why Semantica\n\n| | Vector DB + RAG | Plain LLM Memory | **Semantica** |\n| --- | --- | --- | --- |\n| **Recall method** | Embedding similarity | Token window | Graph traversal + semantic search |\n| **Decision history** | Not stored | Not stored | First-class queryable objects |\n| **Provenance** | None | None | W3C PROV-O, source-linked |\n| **Reasoning** | None | Black box | Forward chain, Rete, Datalog, SPARQL |\n| **Conflict detection** | Silent overwrite | Silent overwrite | Detected, flagged, resolved |\n| **Time travel** | No | No | Point-in-time graph snapshots |\n| **Compliance export** | None | None | PROV-O, SHACL, OWL, RDF |\n| **Policy enforcement** | None | None | Built-in rule engine + SHACL |\n| **Entity resolution** | No | No | Blocking + semantic deduplication |\n| **Multi-agent context** | Separate per agent | Separate per agent | Single shared intelligence layer |\n\nSemantica complements your existing stack rather than replacing it. Keep your LLM, vector store, and agent framework exactly as they are; Semantica adds the decision records, causal reasoning, provenance, ontology governance, conflict detection, and audit trails on top. The reasoning engines, KG construction, and provenance layer are fully deterministic; no LLM is required to use them.\n\n---\n\n## Quick Start\n\n```bash\npip install semantica\n```\n\n```python\nfrom semantica.context import ContextGraph\n\ngraph = ContextGraph(advanced_analytics=True)\n\n# Every agent decision becomes a queryable, auditable knowledge node\ndecision_id = graph.record_decision(\n    category=\"vendor_selection\",\n    scenario=\"Choose cloud provider for HIPAA workload\",\n    reasoning=\"AWS offers BAA, mature HIPAA tooling, and existing team expertise\",\n    outcome=\"selected_aws\",\n    confidence=0.93,\n)\n\n# Ask \"why did this happen?\" and get a real, structured answer\nchain     = graph.trace_decision_chain(decision_id)       # full causal ancestry\nsimilar   = graph.find_similar_decisions(\"cloud vendor\", max_results=5)  # precedents\nimpact    = graph.analyze_decision_impact(decision_id)    # downstream influence map\ncompliant = graph.check_decision_rules({\"category\": \"vendor_selection\"})  # policy gate\n```\n\n**Verify your install in 5 seconds:**\n\n```bash\nsemantica doctor\n# Python 3.11.9         pass\n# semantica 0.6.0       pass\n# faiss vector store    pass\n# Config file           pass    ~\u002F.semantica\u002Fconfig.yaml\n```\n\n\u003Cdiv align=\"center\">\n\nIf Semantica solves a real problem for you, a star helps others find it.\n\n**[⭐ Star on GitHub](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica)** &nbsp;·&nbsp; **[Join Discord](https:\u002F\u002Fdiscord.gg\u002FsV34vps5hH)**\n\n\u003C\u002Fdiv>\n\n---\n\n## Architecture\n\nSemantica is a real end-to-end pipeline, not a single library with a marketing name. Every stage below is a shipping module, independently importable:\n\n```\nSources → Ingest → Parse → Normalize → Split → Extract → Conflict Detection → Deduplication\n   → Knowledge Graph → [ Ontology · Reasoning · Provenance · Decisions ] → Enriched KG\n   → Vector Store + Polyglot Graph Store (RDF & LPG) → Export \u002F Visualize \u002F REST · MCP · CLI\n```\n\n- **Ingest:** files, web, databases, enterprise data platforms (Databricks, Snowflake), cloud (Google Drive, Elasticsearch), streams (Kafka, Kinesis), Git, email, MCP\n- **Parse → Normalize → Split:** document parsing, text\u002Fentity\u002Fdate normalization, GraphRAG-native entity-aware chunking\n- **Extract → Conflict Detection → Deduplication:** NER, relations, events, triplets; conflicting facts flagged and resolved before they merge\n- **Knowledge Graph:** `GraphBuilder` constructs the graph; bi-temporal facts and full graph analytics (centrality, communities, link prediction) run on top of it\n- **Ontology · Reasoning · Provenance · Decisions:** the intelligence layer sitting on the KG, with SHACL\u002FOWL governance, Rete\u002FDatalog\u002FSPARQL inference, W3C PROV-O lineage, and first-class decision records\n- **Storage:** polyglot by design, with RDF triple stores (embedded Oxigraph, Blazegraph, Apache Jena, Eclipse RDF4J), Labeled Property Graphs (Neo4j, FalkorDB, Apache AGE, AWS Neptune), and vector stores, all swappable without touching your code\n- **Outputs:** export (RDF, OWL, Parquet, Cypher, JSON-LD), interactive visualization, and access via REST API, MCP server, or CLI\n\n**→ [Full Mermaid diagrams for the pipeline and the decision intelligence lifecycle](ARCHITECTURE.md)**\n\n---\n\n## Decision Intelligence\n\nDecision Intelligence turns every AI choice from an ephemeral inference into a permanent, auditable, queryable record. It answers *\"what did your AI decide, why, and what happened next?\"*: the question regulators and enterprise risk teams ask with increasing urgency.\n\nIn Semantica, a decision is not a log line. It is a first-class graph node with a full lifecycle. In regulated domains, every AI decision must be traceable to a source and defensible to an auditor: `record_decision()` creates a permanent, structured record exportable as W3C PROV-O, the format most compliance frameworks accept for regulator submission.\n\n```\nrecord_decision()             → stored as a graph node with full structured context\nadd_causal_relationship()     → linked to upstream causes and downstream effects\nfind_similar_decisions()      → semantic precedent search across all past decisions\ntrace_decision_chain()        → full causal ancestry back to root causes\nanalyze_decision_impact()     → downstream influence map - everything this decision affected\ncheck_decision_rules()        → policy compliance gate against configurable rule sets\nexport \u002F audit trail          → W3C PROV-O, CSV, or JSON for regulator submission\n```\n\n```python\nfrom semantica.context import ContextGraph\n\ngraph = ContextGraph(advanced_analytics=True)\n\n# Record decisions with full structured context\napp_id = graph.record_decision(\n    category=\"credit_application\",\n    scenario=\"Personal loan, $85k income, 31% DTI, 3yr employment\",\n    reasoning=\"Income meets threshold; employment stable; no adverse credit events\",\n    outcome=\"proceed_to_underwriting\",\n    confidence=0.88,\n    metadata={\"applicant_id\": \"A-7291\"},\n)\nuw_id = graph.record_decision(\n    category=\"loan_underwriting\",\n    scenario=\"Underwriting review for A-7291\",\n    reasoning=\"DTI within policy; clean 36-month credit history\",\n    outcome=\"approved\",\n    confidence=0.94,\n)\nrate_id = graph.record_decision(\n    category=\"interest_rate\",\n    scenario=\"Rate assignment for approved loan A-7291\",\n    outcome=\"rate_set_8.9pct\",\n    reasoning=\"Prime + 2.4% based on risk tier B2\",\n    confidence=0.99,\n)\n\n# Build the auditable causal chain - relationship_type must be one of\n# CAUSED, INFLUENCED, or PRECEDENT_FOR\ngraph.add_causal_relationship(app_id, uw_id,   relationship_type=\"CAUSED\")\ngraph.add_causal_relationship(uw_id,  rate_id, relationship_type=\"INFLUENCED\")\n\n# Query the intelligence\nchain     = graph.trace_decision_chain(rate_id)\nsimilar   = graph.find_similar_decisions(\"personal loan approval, 31% DTI\", max_results=5)\nimpact    = graph.analyze_decision_impact(uw_id)\ncompliant = graph.check_decision_rules({\"category\": \"loan_underwriting\", \"confidence\": 0.94})\ninsights  = graph.get_decision_insights()\n```\n\n---\n\n## Context Graphs\n\nA Context Graph is the structured memory layer that traditional RAG is missing. Instead of flat embeddings that answer *\"what is similar?\"*, a Context Graph answers *\"what is connected, why, and how?\"* Every entity, relationship, decision, and fact is a first-class node, queryable by graph traversal. Entities link to source documents, decisions link to evidence and consequences, facts carry full provenance, and conflicts are detected, not silently overwritten.\n\n```python\nfrom semantica.context import ContextGraph, AgentContext\nfrom semantica.vector_store import VectorStore\n\ngraph = ContextGraph(advanced_analytics=True)\n\n# Add nodes with typed properties\ngraph.add_node(\"acme_corp\",    \"Organization\", name=\"Acme Corp\", industry=\"SaaS\")\ngraph.add_node(\"alice_chen\",   \"Person\",       name=\"Alice Chen\", role=\"CTO\")\ngraph.add_node(\"contract_001\", \"Contract\",     value=2_400_000, currency=\"USD\")\n\n# Add typed, weighted edges (extra kwargs become edge metadata)\ngraph.add_edge(\"alice_chen\", \"acme_corp\",    edge_type=\"works_for\",  since=\"2019-03-01\")\ngraph.add_edge(\"acme_corp\",  \"contract_001\", edge_type=\"party_to\",   signed=\"2024-01-15\")\n\n# BFS traversal - hop through the graph from any node\nneighbors = graph.get_neighbors(\"acme_corp\", hops=2)\n\n# Point-in-time snapshot - the graph as it existed on any past date\nsnapshot  = graph.state_at(\"2024-01-01\")\n\n# AgentContext - high-level API for agent memory workflows\nvs  = VectorStore(backend=\"faiss\")\nctx = AgentContext(vector_store=vs, knowledge_graph=graph)\nctx.store(\"Alice approved the Acme renewal in Q1 2024\", conversation_id=\"conv_001\")\nretrieved = ctx.retrieve(\"who approved the Acme contract?\")\n```\n\n**Why graph over embeddings:** traversal finds connections embeddings miss (a person 3 hops from a contract); every node carries provenance so you can always ask *\"where did this come from?\"*; conflicts are flagged before they corrupt your knowledge base; point-in-time snapshots let you replay history without reprocessing.\n\n---\n\n## Recipe: Audit Trail for a Regulated Decision\n\nThe flagship pattern: record a causally-linked decision chain, attach provenance to every entity, and export a regulator-ready audit trail.\n\n```python\nfrom semantica.context import ContextGraph\nfrom semantica.provenance import ProvenanceManager\nfrom semantica.export import RDFExporter\n\ngraph = ContextGraph(advanced_analytics=True)\nprov  = ProvenanceManager(storage_path=\".\u002Faudit.db\")\n\n# Record the decision chain\nd1 = graph.record_decision(\n    category=\"drug_interaction_check\", scenario=\"Patient P-4821: warfarin + amiodarone co-prescribed\",\n    reasoning=\"Amiodarone potentiates warfarin's anticoagulant effect\", outcome=\"flag_for_review\", confidence=0.91,\n)\nd2 = graph.record_decision(\n    category=\"dosage_adjustment\", scenario=\"INR monitoring plan for P-4821\",\n    reasoning=\"Reduce warfarin dose per interaction severity; recheck INR in 5 days\", outcome=\"dose_reduced_30pct\", confidence=0.87,\n)\n# relationship_type must be one of CAUSED, INFLUENCED, or PRECEDENT_FOR\ngraph.add_causal_relationship(d1, d2, relationship_type=\"CAUSED\")\n\n# Track provenance for every entity\nprov.track_entity(\"patient_P4821\", source=\"ehr\u002Fmedication_orders_2024.json\",\n                  metadata={\"extractor\": \"NamedEntityRecognizer\"})\n\n# Export W3C PROV-O for regulator submission - RDFExporter expects\n# {\"entities\": [...], \"relationships\": [...]}, so map ContextGraph.to_dict()'s\n# {\"nodes\": [...], \"edges\": [...]} shape onto it first\ngraph_dict = graph.to_dict()\nkg = {\n    \"entities\": [{\"id\": n[\"id\"], \"type\": n[\"type\"], \"text\": n[\"content\"]} for n in graph_dict[\"nodes\"]],\n    \"relationships\": [\n        {\"source_id\": e[\"source\"], \"target_id\": e[\"target\"], \"type\": e[\"type\"]}\n        for e in graph_dict[\"edges\"]\n    ],\n}\nRDFExporter().export(kg, \"audit_trail.ttl\", format=\"turtle\")\n```\n\nMore recipes (GraphRAG pipelines, an AML rules engine, ontology-to-KG in one pass) are in **[More Recipes](#more-recipes)** below.\n\n---\n\n## Explore the Platform\n\nEvery module below is independently importable, with working code samples verified against the current source tree; use one or all of them.\n\n| Module | What it does |\n| --- | --- |\n| [`semantica.ingest`](#semanticaingest-multi-source-ingestion) | Files, web, databases, APIs, streams, email, Git, Parquet, Databricks, Snowflake, MCP |\n| [`semantica.semantic_extract`](#semanticasemantic_extract-ner-relations-events-triplets) | NER, relation extraction, event detection, triplet generation |\n| [`semantica.kg`](#semanticakg-knowledge-graph-construction--analysis) | Graph construction, centrality, communities, link prediction |\n| [`semantica.reasoning`](#semanticareasoning-forward-chaining-rete-datalog-sparql) | Forward chaining, Rete, Datalog, SPARQL, fully explainable |\n| [`semantica.vector_store`](#semanticavector_store-hybrid--filtered-semantic-search) | FAISS, Qdrant, Weaviate, Milvus, Pinecone, PgVector, hybrid search |\n| [`semantica.split`](#semanticasplit-graphrag-native-document-chunking) | Entity-aware, relation-aware, ontology-aware chunking for GraphRAG |\n| [`semantica.provenance`](#semanticaprovenance-w3c-prov-o-lineage) | W3C PROV-O lineage on every fact |\n| [`semantica.ontology`](#semanticaontology-owl-generation-shacl-validation) | OWL generation, SHACL validation, SKOS vocabularies |\n| [`semantica.conflicts`](#semanticaconflicts-conflict-detection--resolution) | Detect and resolve conflicting facts across sources |\n| [`semantica.deduplication`](#semanticadeduplication-entity-resolution-at-scale) | Entity resolution at scale |\n| [`semantica.normalize`](#semanticanormalize-data-normalization--cleaning) | Text, entity, date, and number normalization; dataset cleaning |\n| [`semantica.pipeline`](#semanticapipeline-pipeline-dsl) | Declarative, parallel pipeline DSL for ingest → extract → build → export |\n| [`semantica.export`](#semanticaexport-rdf-owl-parquet-cypher-json-ld) | RDF, OWL, Parquet, Cypher, JSON-LD |\n| [`semantica.visualization`](#semanticavisualization-interactive-graph-workbench) | Force-directed graphs, ontology hierarchies, temporal dashboards |\n| [Temporal Intelligence](#temporal-intelligence-bi-temporal-graphs--time-travel) | Bi-temporal facts, Allen interval algebra, time travel |\n| [Multi-Agent (Agno)](#multi-agent-shared-context-with-agno) | One shared context graph across every agent on a team |\n\n**↓ Expand [Module Reference](#module-reference) below** for every module's working example, or jump to [More Recipes](#more-recipes), the full [Integrations](#integrations) matrix, [MCP tool list](#mcp-server), and [REST endpoints](#rest-api).\n\n---\n\n## Module Reference\n\nExpand any module below for its runnable example.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.ingest\u003C\u002Fcode>\u003C\u002Fb>: Multi-Source Ingestion\u003C\u002Fsummary>\n\u003Ca id=\"semanticaingest-multi-source-ingestion\">\u003C\u002Fa>\n\nIngest from files, web, databases, APIs, streams, email, Git repos, Parquet, Databricks, Snowflake, or MCP servers, all through a unified interface.\n\n```python\nfrom semantica.ingest import FileIngestor, WebIngestor, ParquetIngestor, DBIngestor\n\n# Ingest an entire directory of contracts (PDF, DOCX, HTML, TXT)\ndocs = FileIngestor().ingest_directory(\".\u002Fcontracts\u002F\", recursive=True)\n\n# Ingest live web content with robots.txt compliance\npages = WebIngestor().ingest_url(\"https:\u002F\u002Fexample.com\u002Freports\u002Fannual-2024.html\")\n\n# Ingest structured data from Parquet with Snappy compression\nrecords = ParquetIngestor().ingest(\".\u002Fdata\u002Ftransactions.parquet\")\n\n# Ingest from a SQL database - specify which tables to pull\nrows = DBIngestor().ingest_database(\n    connection_string=\"postgresql:\u002F\u002Fuser:pass@localhost\u002Fmydb\",\n    include_tables=[\"customer_events\"],\n    max_rows_per_table=50_000,\n)\n```\n\n```python\n# Enterprise data platforms - pull tables straight out of your lakehouse\n# or warehouse, with lineage, instead of exporting to CSV first\nfrom semantica.ingest import DatabricksIngestor, SnowflakeIngestor\n\n# pip install \"semantica[db-databricks]\"\ndatabricks = DatabricksIngestor(\n    host=\"https:\u002F\u002Fadb-xxx.azuredatabricks.net\",\n    token=\"dapi-xxxxxxxx\",              # or client_id\u002Fclient_secret for OAuth M2M\n    http_path=\"\u002Fsql\u002F1.0\u002Fwarehouses\u002Fxxxxxxxx\",\n    catalog=\"main\",\n)\ncustomers    = databricks.ingest_table(\"customers\", limit=10_000)\nsales        = databricks.ingest_query(\"SELECT * FROM sales WHERE region = 'EMEA'\")\ntable_lineage = databricks.get_table_lineage(\"customers\", catalog=\"main\", schema=\"default\")  # Unity Catalog lineage\n\n# pip install semantica[db-snowflake]\nsnowflake = SnowflakeIngestor(\n    account=\"myaccount\",\n    user=\"myuser\",\n    password=\"mypassword\",              # or private_key=... for key-pair; use authenticator=\"oauth\", token=... for OAuth\n    warehouse=\"COMPUTE_WH\",\n    database=\"MYDB\",\n)\norders = snowflake.ingest_table(\"ORDERS\", limit=10_000)\n```\n\n> **Security Note:** Never hardcode credentials (`token`, `password`, `private_key`) in production code; pass them via environment variables (e.g., `DATABRICKS_TOKEN`, `SNOWFLAKE_PASSWORD`) or a secrets manager.\n\n**Supported sources:** Local files (PDF, DOCX, PPTX, HTML, TXT, CSV, JSON, YAML, Excel, XML) · Web pages · RSS\u002FAtom feeds · REST APIs · Databases (PostgreSQL, MySQL, SQLite, Oracle, SQL Server) · Parquet datasets · Databricks (Unity Catalog + Delta Lake) · Snowflake · Git repositories · Email (IMAP\u002FPOP3) · Message streams (Kafka, RabbitMQ, Kinesis, Pulsar) · MCP resources · Apache Arrow\u002FFeather\u002FIPC (`ArrowIngestor`)\n\nDuckDB, Elasticsearch, Google Drive, HuggingFace, MongoDB, and Pandas ingestion also ship (`DuckDBIngestor`, `ElasticIngestor`, `GDriveIngestor`, `HuggingFaceIngestor`, `MongoIngestor`, `PandasIngestor`) but aren't re-exported from the top-level `semantica.ingest` namespace yet — import them directly: `from semantica.ingest.duckdb_ingestor import DuckDBIngestor`.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.semantic_extract\u003C\u002Fcode>\u003C\u002Fb>: NER, Relations, Events, Triplets\u003C\u002Fsummary>\n\u003Ca id=\"semanticasemantic_extract-ner-relations-events-triplets\">\u003C\u002Fa>\n\nExtract structured knowledge from raw text in one pass.\n\n```python\nfrom semantica.semantic_extract import (\n    NamedEntityRecognizer,\n    RelationExtractor,\n    EventDetector,\n    TripletExtractor,\n)\n\ntext = \"\"\"\nAnthropic CEO Dario Amodei announced a $7.3B Series E funding round in partnership\nwith Google and Spark Capital, valuing the company at $61.5B as of Q4 2024.\n\"\"\"\n\n# Named entity recognition with confidence thresholding\nner = NamedEntityRecognizer(confidence_threshold=0.7)\nentities = ner.extract_entities(text)\n# → [Entity(name=\"Dario Amodei\", type=\"PERSON\"), Entity(name=\"Anthropic\", type=\"ORG\"),\n#    Entity(name=\"Google\", type=\"ORG\"), Entity(name=\"$7.3B\", type=\"MONEY\"), ...]\n\n# Relationship extraction - bidirectional support\nrel_extractor = RelationExtractor(confidence_threshold=0.6, bidirectional=True)\nrelations = rel_extractor.extract_relations(text, entities=entities)\n# → [Relation(subject=\"Dario Amodei\", predicate=\"ceo_of\", object=\"Anthropic\"),\n#    Relation(subject=\"Anthropic\", predicate=\"raised\", object=\"$7.3B Series E\"), ...]\n\n# Event detection with temporal processing\nevents = EventDetector(extract_participants=True, extract_time=True).detect_events(text)\n# → [Event(type=\"FUNDING\", participants=[\"Anthropic\",\"Google\",\"Spark Capital\"],\n#          amount=\"$7.3B\", date=\"Q4 2024\")]\n\n# RDF triplets with optional provenance metadata\ntriplets = TripletExtractor(include_temporal=True, include_provenance=True).extract_triplets(text)\n# → [(\"Anthropic\", \"valuation\", \"$61.5B\"), (\"Dario Amodei\", \"is_ceo_of\", \"Anthropic\"), ...]\n```\n\nBatch processing across many documents uses `ner.process_batch([...])`, not a per-call `extract_entities_batch` on the facade class.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.kg\u003C\u002Fcode>\u003C\u002Fb>: Knowledge Graph Construction & Analysis\u003C\u002Fsummary>\n\u003Ca id=\"semanticakg-knowledge-graph-construction--analysis\">\u003C\u002Fa>\n\nBuild a production knowledge graph from documents and run graph algorithms over it.\n\n```python\nfrom semantica.ingest import FileIngestor\nfrom semantica.kg import (\n    GraphBuilder,\n    GraphAnalyzer,\n    CentralityCalculator,\n    CommunityDetector,\n    PathFinder,\n    LinkPredictor,\n    BiTemporalFact,\n)\nfrom datetime import datetime\n\n# Build KG - merge duplicate entities, track temporal edges\nsources = FileIngestor().ingest_directory(\".\u002Fcontracts\u002F\", recursive=True)\nkg = GraphBuilder(merge_entities=True, enable_temporal=True).build(sources)\n\n# Graph analytics\nanalyzer    = GraphAnalyzer()\nanalysis    = analyzer.analyze_graph(kg)             # full graph metrics\n\ncentrality  = CentralityCalculator()\ndegree      = centrality.calculate_degree_centrality(kg)    # most-connected entities\nbetweenness = centrality.calculate_betweenness_centrality(kg)\n\ncommunities = CommunityDetector().detect_communities(kg, method=\"louvain\")  # natural clusters\npath        = PathFinder().find_shortest_path(kg, \"alice_chen\", \"contract_001\")\npredictions = LinkPredictor().predict_links(kg, top_k=10)   # relationship predictions\n\n# Bi-temporal facts - track valid time vs. recorded time independently\nfact = BiTemporalFact(\n    valid_from=datetime(2024, 3, 1),\n    valid_until=datetime(2025, 1, 1),\n    recorded_at=datetime(2024, 3, 5),\n)\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.reasoning\u003C\u002Fcode>\u003C\u002Fb>: Forward Chaining, Rete, Datalog, SPARQL\u003C\u002Fsummary>\n\u003Ca id=\"semanticareasoning-forward-chaining-rete-datalog-sparql\">\u003C\u002Fa>\n\nRun explainable rule-based inference, not a black box.\n\n```python\nfrom semantica.reasoning import ReteEngine, Rule, Fact, RuleType\n\nrete = ReteEngine()\nrete.build_network([\n    Rule(\n        rule_id=\"aml_flag\",\n        name=\"Flag high-risk transactions\",\n        conditions=[\n            {\"field\": \"amount\",  \"operator\": \">\",  \"value\": 10_000},\n            {\"field\": \"country\", \"operator\": \"in\", \"value\": [\"IR\", \"KP\", \"SY\"]},\n        ],\n        conclusion=\"flag_for_compliance_review\",\n        rule_type=RuleType.IMPLICATION,\n    ),\n    Rule(\n        rule_id=\"velocity_check\",\n        name=\"Flag rapid sequential transfers\",\n        conditions=[\n            {\"field\": \"transfers_in_1h\", \"operator\": \">\", \"value\": 5},\n            {\"field\": \"total_amount\",    \"operator\": \">\", \"value\": 50_000},\n        ],\n        conclusion=\"flag_velocity_breach\",\n        rule_type=RuleType.IMPLICATION,\n    ),\n])\n\nrete.add_fact(Fact(\"tx_001\", \"transaction\", [{\"amount\": 15_000, \"country\": \"IR\"}]))\nflagged = rete.match_patterns()\n# → [{\"rule\": \"aml_flag\", \"matched_facts\": [\"tx_001\"], \"conclusion\": \"flag_for_compliance_review\"}]\n```\n\n> **Current limitation:** `ReteEngine`'s alpha-node condition matcher is intentionally simple in this release — validate `match_patterns()` output against your actual rule set before wiring it into a production compliance gate; more selective condition evaluation is on the roadmap.\n\n```python\n# Recursive Datalog - natural language for graph queries\nfrom semantica.reasoning import DatalogReasoner\n\nengine = DatalogReasoner()\nengine.add_fact(\"parent(tom, bob)\")\nengine.add_fact(\"parent(bob, ann)\")\nengine.add_fact(\"parent(ann, pat)\")\nengine.add_rule(\"ancestor(X, Y) :- parent(X, Y).\")\nengine.add_rule(\"ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).\")\nancestors = engine.query(\"ancestor(tom, ?X)\")\n# → [{\"X\": \"bob\"}, {\"X\": \"ann\"}, {\"X\": \"pat\"}]\n```\n\n```python\n# Explainable reasoning - trace the path, not just the answer\nfrom semantica.reasoning import ExplanationGenerator, Reasoner\n\nreasoner = Reasoner()\nreasoner.add_fact(\"parent(tom, bob)\")\nreasoner.add_rule(\"ancestor(X, Y) :- parent(X, Y)\")\nresult = reasoner.forward_chain()\n\nexplainer = ExplanationGenerator()\nexplanation = explainer.generate_explanation(result)\n# → Explanation(conclusion=\"...\", steps=[ReasoningStep(...)], justification=Justification(...))\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.vector_store\u003C\u002Fcode>\u003C\u002Fb>: Hybrid & Filtered Semantic Search\u003C\u002Fsummary>\n\u003Ca id=\"semanticavector_store-hybrid--filtered-semantic-search\">\u003C\u002Fa>\n\nDrop-in vector store with multiple backends, hybrid search, and decision-aware retrieval.\n\n```python\nfrom semantica.vector_store import VectorStore, HybridSearch\n\n# In-memory backend shown here: HybridSearch and explain_decision() work out of the box.\n# Swap backend=\"qdrant\" \u002F \"weaviate\" \u002F \"milvus\" \u002F \"pinecone\" \u002F \"pgvector\" \u002F \"faiss\" once you\n# scale past a single process — search() and store_decision() work identically on all of them.\nvs = VectorStore(backend=\"inmemory\", dimension=1536)\n\n# Store a decision with scenario description and outcome\nvs.store_decision(\n    scenario=\"Personal loan A-7291, $85k income, 31% DTI, 3yr employment\",\n    outcome=\"approved\",\n    confidence=0.94,\n    category=\"loan_underwriting\",\n)\n\n# Semantic similarity search\nresults = vs.search(\n    query=\"personal loan approval with low DTI\",\n    limit=10,\n)\n\n# Hybrid search - dense + sparse retrieval in one pass with RRF fusion\nhs   = HybridSearch(vector_store=vs)\nhits = hs.search(\"high-risk transactions 2024\")\n\n# Explain why a decision was retrieved\nexplanation = vs.explain_decision(results[0][\"id\"])\n```\n\n**Backends:** `faiss` · `qdrant` · `weaviate` · `milvus` · `pinecone` · `pgvector` · `sqlite` · `inmemory`\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.split\u003C\u002Fcode>\u003C\u002Fb>: GraphRAG-Native Document Chunking\u003C\u002Fsummary>\n\u003Ca id=\"semanticasplit-graphrag-native-document-chunking\">\u003C\u002Fa>\n\nKG-aware splitting that preserves entity boundaries, relation triplets, and ontology concepts, essential for GraphRAG pipelines.\n\n```python\nfrom semantica.split import TextSplitter, EntityAwareChunker, RelationAwareChunker\n\ntext = open(\"contracts\u002Fmaster_agreement.txt\").read()\n\n# Standard recursive chunking\nchunks = TextSplitter(method=\"recursive\", chunk_size=1000, chunk_overlap=200).split(text)\n\n# Entity-aware chunking - never splits a named entity across chunks (GraphRAG)\nchunks = TextSplitter(method=\"entity_aware\", ner_method=\"llm\", chunk_size=1000).split(text)\n\n# Relation-aware chunking - preserves (subject, predicate, object) triplets intact\nchunks = RelationAwareChunker(chunk_size=1000, preserve_triplets=True).chunk(text)\n\n# Graph-based chunking - uses centrality to find natural community boundaries\nchunks = TextSplitter(method=\"graph_based\", chunk_size=1000).split(text)\n\n# Hierarchical chunking - multi-level (section → paragraph → sentence)\nchunks = TextSplitter(method=\"hierarchical\", levels=[\"section\", \"paragraph\"]).split(text)\n```\n\n**Supported methods:** `recursive` · `token` · `sentence` · `paragraph` · `semantic_transformer` · `entity_aware` · `relation_aware` · `graph_based` · `ontology_aware` · `hierarchical` · `community_detection` · `centrality_based` · `llm`\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.provenance\u003C\u002Fcode>\u003C\u002Fb>: W3C PROV-O Lineage\u003C\u002Fsummary>\n\u003Ca id=\"semanticaprovenance-w3c-prov-o-lineage\">\u003C\u002Fa>\n\nEvery fact is linked to its source. No black boxes, no mystery outputs.\n\n```python\nfrom semantica.provenance import ProvenanceManager\n\nprov = ProvenanceManager(storage_path=\".\u002Fprovenance.db\")\n\n# Track where every entity came from\nprov.track_entity(\n    entity_id=\"acme_corp\",\n    source=\"contracts\u002Facme_master_agreement_2024.pdf\",\n    metadata={\"page\": 1, \"confidence\": 0.97, \"extractor\": \"NamedEntityRecognizer\"},\n)\n\n# Track a relationship's provenance - entity linkage travels in metadata\nprov.track_relationship(\n    relationship_id=\"alice_works_for_acme\",\n    source=\"hr_records\u002Femployees_q1_2024.csv\",\n    metadata={\"source_entity_id\": \"alice_chen\", \"target_entity_id\": \"acme_corp\"},\n)\n\n# Answer \"where did this come from?\"\nlineage = prov.get_lineage(\"acme_corp\")\ntrail   = prov.trace_lineage(\"alice_chen\")   # full ancestor chain\nentry   = prov.get_provenance(\"acme_corp\")\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.ontology\u003C\u002Fcode>\u003C\u002Fb>: OWL Generation, SHACL Validation\u003C\u002Fsummary>\n\u003Ca id=\"semanticaontology-owl-generation-shacl-validation\">\u003C\u002Fa>\n\nGenerate ontologies from data, validate shapes, and manage your vocabulary.\n\n```python\nfrom semantica.ontology import OntologyGenerator, OntologyValidator\n\ndata = {\n    \"entities\": [\n        {\"id\": \"acme_corp\",  \"type\": \"Organization\", \"industry\": \"SaaS\", \"founded\": 2012},\n        {\"id\": \"alice_chen\", \"type\": \"Person\",        \"role\": \"CTO\",     \"since\": 2019},\n    ],\n    \"relationships\": [\n        {\"source\": \"alice_chen\", \"target\": \"acme_corp\", \"type\": \"works_for\"},\n    ],\n}\n\ngen       = OntologyGenerator(base_uri=\"https:\u002F\u002Fsemantica.dev\u002Fontology\u002F\")\nontology  = gen.generate_ontology(data)\nclasses   = gen.infer_classes(data)\nprops     = gen.infer_properties(data, classes)\noptimized = gen.optimize_ontology(ontology)\n\n# Validate against SHACL shapes\nvalidator = OntologyValidator()\nreport    = validator.validate(ontology)\n# → ValidationResult(valid=True, consistent=True, satisfiable=True, errors=[], warnings=[])\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.conflicts\u003C\u002Fcode>\u003C\u002Fb>: Conflict Detection & Resolution\u003C\u002Fsummary>\n\u003Ca id=\"semanticaconflicts-conflict-detection--resolution\">\u003C\u002Fa>\n\nDetect and resolve conflicting facts from multiple sources before they corrupt your knowledge base.\n\n```python\nfrom semantica.conflicts import ConflictDetector, ConflictResolver, SourceTracker\n\nentities_from_source_a = [\n    {\"id\": \"alice_chen\", \"role\": \"CTO\",   \"salary\": 250_000, \"start_date\": \"2019-03-01\"},\n]\nentities_from_source_b = [\n    {\"id\": \"alice_chen\", \"role\": \"VP Eng\", \"salary\": 275_000, \"start_date\": \"2019-03-01\"},\n]\n\n# Detect all conflict types: value, type, relationship, temporal, logical\ndetector   = ConflictDetector()\nconflicts  = detector.detect_conflicts(entities_from_source_a + entities_from_source_b)\n# → [Conflict(entity=\"alice_chen\", field=\"role\",   values=[\"CTO\",\"VP Eng\"], severity=\"HIGH\"),\n#    Conflict(entity=\"alice_chen\", field=\"salary\",  values=[250000,275000],   severity=\"MEDIUM\")]\n\n# Resolve using multiple strategies\nresolver = ConflictResolver()\nresolved = resolver.resolve_conflicts(conflicts, strategy=\"credibility_weighted\")  # weighted by source trust\nresolved = resolver.resolve_conflicts(conflicts, strategy=\"most_recent\")          # prefer most recent\nresolved = resolver.resolve_conflicts(conflicts, strategy=\"voting\")               # majority wins\n\n# Track source credibility over time\ntracker = SourceTracker()\ntracker.register_source(\"source_a\", source_type=\"document\", credibility_score=0.85)\ntracker.register_source(\"source_b\", source_type=\"document\", credibility_score=0.72)\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.deduplication\u003C\u002Fcode>\u003C\u002Fb>: Entity Resolution at Scale\u003C\u002Fsummary>\n\u003Ca id=\"semanticadeduplication-entity-resolution-at-scale\">\u003C\u002Fa>\n\nBlock, cluster, and merge duplicates with semantic similarity.\n\n```python\nfrom semantica.deduplication import DuplicateDetector, EntityMerger\n\nentities = [\n    {\"id\": \"e1\", \"name\": \"Acme Corporation\",  \"domain\": \"acme.com\"},\n    {\"id\": \"e2\", \"name\": \"Acme Corp.\",         \"domain\": \"acme.com\"},\n    {\"id\": \"e3\", \"name\": \"ACME Corp\",          \"domain\": \"acme.co\"},\n    {\"id\": \"e4\", \"name\": \"Globex Industries\",  \"domain\": \"globex.com\"},\n]\n\ndetector   = DuplicateDetector(similarity_threshold=0.75, use_clustering=True)\ncandidates = detector.detect_duplicates(entities)\ngroups     = detector.detect_duplicate_groups(entities)\n# → DuplicateGroup(entities=[\"e1\",\"e2\",\"e3\"], confidence=0.91, strategy=\"semantic+blocking\")\n\nmerger  = EntityMerger(preserve_provenance=True)\nops     = merger.merge_duplicates(entities, strategy=\"keep_most_complete\")\nhistory = merger.get_merge_history()\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.normalize\u003C\u002Fcode>\u003C\u002Fb>: Data Normalization & Cleaning\u003C\u002Fsummary>\n\u003Ca id=\"semanticanormalize-data-normalization--cleaning\">\u003C\u002Fa>\n\nStandardize text, entities, dates, numbers, and encodings before building your knowledge graph.\n\n```python\nfrom semantica.normalize import (\n    TextNormalizer,\n    EntityNormalizer,\n    DateNormalizer,\n    NumberNormalizer,\n    DataCleaner,\n)\n\n# Unicode, whitespace, casing, HTML tags, smart quotes\ntext  = TextNormalizer().normalize(\"  Acme Corp.'s Q4 report...  \")\n# → \"Acme Corp.'s Q4 report...\"\n\n# Alias resolution + entity disambiguation with confidence scores\ncanonical = EntityNormalizer().normalize_entity(\"ACME Corp.\")\n# → NormalizedEntity(canonical=\"Acme Corporation\", type=\"Organization\", confidence=0.91)\n\n# Natural language date parsing with timezone conversion\ndt    = DateNormalizer().normalize_date(\"3 weeks ago\")\n# → datetime(2026, 7, 1, tzinfo=UTC)\n\n# Unit conversion and currency normalization\nprice = NumberNormalizer().normalize_number(\"$1.25M USD\")\n# → NormalizedNumber(value=1_250_000, currency=\"USD\")\n\n# Deduplicate, validate, and impute missing values across a dataset\nclean = DataCleaner().clean_data(records, remove_duplicates=True, handle_missing=True)\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.pipeline\u003C\u002Fcode>\u003C\u002Fb>: Pipeline DSL\u003C\u002Fsummary>\n\u003Ca id=\"semanticapipeline-pipeline-dsl\">\u003C\u002Fa>\n\nCompose ingestion, extraction, and graph-building into a declarative, parallel pipeline.\n\n```python\nfrom semantica.pipeline import PipelineBuilder, ExecutionEngine\n\nbuilder = PipelineBuilder()\n\n# add_step() returns the created PipelineStep, not the builder, so these don't chain\nbuilder.add_step(\"ingest\",      step_type=\"ingest\",           source=\".\u002Fcontracts\u002F\", recursive=True)\nbuilder.add_step(\"extract\",     step_type=\"ner_extract\")\nbuilder.add_step(\"relations\",   step_type=\"relation_extract\")\nbuilder.add_step(\"build_kg\",    step_type=\"kg_build\",         merge_entities=True)\nbuilder.add_step(\"deduplicate\", step_type=\"deduplicate\",      threshold=0.75)\nbuilder.add_step(\"export\",      step_type=\"export\",           format=\"turtle\", output=\"kg.ttl\")\n\n# connect_steps() and set_parallelism() return the builder, so these do chain\npipeline = (\n    builder\n    .connect_steps(\"ingest\",      \"extract\")\n    .connect_steps(\"extract\",     \"relations\")\n    .connect_steps(\"relations\",   \"build_kg\")\n    .connect_steps(\"build_kg\",    \"deduplicate\")\n    .connect_steps(\"deduplicate\", \"export\")\n    .set_parallelism(4)\n    .build(name=\"contracts_pipeline\")\n)\n\nengine   = ExecutionEngine()\nresult   = engine.execute_pipeline(pipeline)\nstatus   = engine.get_pipeline_status(pipeline.name)\nprogress = engine.get_progress(pipeline.name)\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Temporal Intelligence\u003C\u002Fb>: Bi-Temporal Graphs & Time Travel\u003C\u002Fsummary>\n\u003Ca id=\"temporal-intelligence-bi-temporal-graphs--time-travel\">\u003C\u002Fa>\n\nTrack when facts were true *in the world* vs. when they were *recorded*, and query either axis.\n\n```python\nfrom semantica.context import ContextGraph\nfrom semantica.kg import (\n    BiTemporalFact,\n    TemporalGraphQuery,\n    TemporalNormalizer,\n)\nfrom datetime import datetime\n\ngraph = ContextGraph(advanced_analytics=True)\ngraph.add_node(\"alice_chen\", \"Person\",       role=\"VP Engineering\")\ngraph.add_node(\"acme_corp\",  \"Organization\", valuation=1_200_000_000)\n\n# A temporally-bounded edge - valid_from\u002Fvalid_until define when it held true\ngraph.add_edge(\n    \"alice_chen\", \"acme_corp\", edge_type=\"works_for\",\n    valid_from=\"2024-03-01T00:00:00\", valid_until=\"2025-01-01T00:00:00\",\n)\n\n# Point-in-time snapshots - replay history without reprocessing\nsnapshot_2023 = graph.state_at(\"2023-06-01\")\nsnapshot_2024 = graph.state_at(\"2024-01-01\")\n\n# Bi-temporal facts - valid_time is when true in the world;\n# recorded_at is when you learned about it\nfact = BiTemporalFact(\n    valid_from=datetime(2024, 3, 1),\n    valid_until=datetime(2025, 1, 1),\n    recorded_at=datetime(2024, 3, 5),\n)\n\n# Query facts valid within a time window - query_time_range() expects\n# {\"relationships\": [...]} with source_id\u002Ftarget_id keys, which differs from\n# ContextGraph.to_dict()'s {\"nodes\", \"edges\"} shape, so map it first\ngraph_dict = graph.to_dict()\nkg_relationships = {\n    \"relationships\": [\n        {**e, \"source_id\": e[\"source\"], \"target_id\": e[\"target\"]}\n        for e in graph_dict[\"edges\"]\n    ]\n}\n\ntq = TemporalGraphQuery()\nfacts_in_window = tq.query_time_range(\n    kg_relationships, query=\"valid_facts\", start_time=\"2024-01-01\", end_time=\"2024-12-31\"\n)\n\n# Normalize natural language temporal expressions - returns a (start, end) range\nnorm = TemporalNormalizer()\nstart, end = norm.normalize(\"last quarter\")\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.export\u003C\u002Fcode>\u003C\u002Fb>: RDF, OWL, Parquet, Cypher, JSON-LD\u003C\u002Fsummary>\n\u003Ca id=\"semanticaexport-rdf-owl-parquet-cypher-json-ld\">\u003C\u002Fa>\n\nExport to any format required by regulators, graph databases, or downstream systems.\n\n```python\nfrom semantica.export import (\n    RDFExporter,\n    JSONExporter,\n    ParquetExporter,\n    LPGExporter,\n    ReportGenerator,\n)\n\nkg = {\"entities\": [...], \"relationships\": [...]}\n\nrdf = RDFExporter()\nturtle_str = rdf.export_to_rdf(kg, format=\"turtle\")     # returns string\njsonld_str = rdf.export_to_rdf(kg, format=\"json-ld\")\n\nrdf.export(kg, \"kg_audit.ttl\",    format=\"turtle\")\nrdf.export(kg, \"kg_audit.jsonld\", format=\"json-ld\")\nrdf.export(kg, \"kg_audit.nt\",     format=\"n-triples\")\n\n# Columnar analytics - Snappy-compressed Parquet (writes kg_snapshot_entities.parquet\n# and kg_snapshot_relationships.parquet)\nParquetExporter(compression=\"snappy\").export_knowledge_graph(kg, \"kg_snapshot\")\n\n# JSON knowledge graph\nJSONExporter().export_knowledge_graph(kg, \"kg.json\")\n\n# Neo4j \u002F Memgraph Cypher statements for graph database import\nLPGExporter().export(kg, \"kg_import.cypher\")\n\n# Human-readable HTML report\nReportGenerator().generate_report(\n    {\"title\": \"KG Audit Report\", \"summary\": \"Weekly ingestion summary\", \"metrics\": {\"entities\": len(kg[\"entities\"])}},\n    file_path=\"audit_report.html\",\n    format=\"html\",\n)\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>\u003Ccode>semantica.visualization\u003C\u002Fcode>\u003C\u002Fb>: Interactive Graph Workbench\u003C\u002Fsummary>\n\u003Ca id=\"semanticavisualization-interactive-graph-workbench\">\u003C\u002Fa>\n\nRender force-directed graphs, community maps, ontology hierarchies, and temporal dashboards.\n\n```python\nfrom semantica.visualization import (\n    KGVisualizer,\n    OntologyVisualizer,\n    EmbeddingVisualizer,\n    TemporalVisualizer,\n)\nimport numpy as np\n\nkg = {\"entities\": [...], \"relationships\": [...]}\n\n# Interactive force-directed graph (opens in browser)\nviz = KGVisualizer(layout=\"force\", color_scheme=\"default\")\nviz.visualize_network(kg, output=\"interactive\", file_path=\"kg.html\")\nviz.visualize_communities(kg, communities, output=\"interactive\")\nviz.visualize_centrality(kg, centrality, centrality_type=\"degree\")\nviz.visualize_entity_types(kg, output=\"html\", file_path=\"entity_types.html\")\n\n# Ontology class hierarchy\nOntologyVisualizer().visualize_hierarchy(ontology, output=\"interactive\")\n\n# 2D embedding projection (UMAP \u002F t-SNE \u002F PCA)\nEmbeddingVisualizer().visualize_2d_projection(\n    embeddings=np.array([...]),\n    labels=[\"entity_a\", \"entity_b\"],\n    method=\"umap\",\n)\n\n# Timeline scrubber - watch the graph evolve\nTemporalVisualizer().visualize_timeline(kg, output=\"interactive\")\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Multi-Agent Shared Context with Agno\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Ca id=\"multi-agent-shared-context-with-agno\">\u003C\u002Fa>\n\nOne shared intelligence layer. All agents read and write to the same context graph.\n\n```python\n# pip install semantica[agno]\nfrom agno.agent import Agent\nfrom agno.team import Team\nfrom agno.models.anthropic import Claude\nfrom semantica.context import ContextGraph\nfrom semantica.vector_store import VectorStore\nfrom integrations.agno import AgnoSharedContext, AgnoDecisionKit, AgnoKGToolkit\n\nshared = AgnoSharedContext(\n    vector_store=VectorStore(backend=\"faiss\"),\n    knowledge_graph=ContextGraph(advanced_analytics=True),\n    decision_tracking=True,\n)\n\nresearcher = Agent(\n    name=\"Researcher\",\n    model=Claude(id=\"claude-sonnet-4-5\"),\n    memory=shared.bind_agent(\"researcher\"),\n    tools=[AgnoKGToolkit(context=shared)],\n)\nanalyst = Agent(\n    name=\"Analyst\",\n    model=Claude(id=\"claude-sonnet-4-5\"),\n    memory=shared.bind_agent(\"analyst\"),\n    tools=[AgnoDecisionKit(context=shared)],\n)\n\nteam = Team(agents=[researcher, analyst], mode=\"coordinate\")\n# Researcher's findings are instantly available to the Analyst - no copy, no sync\n```\n\n→ [runnable notebooks in the cookbook](https:\u002F\u002Fgithub.com\u002Fsemantica-agi\u002Fsemantica\u002Ftree\u002Fmain\u002Fcookbook), each self-contained and runnable in under 5 minutes\n\n\u003C\u002Fdetails>\n\n---\n\n## More Recipes\n\nThe flagship audit-trail recipe is [above](#recipe-audit-trail-for-a-regulated-decision). Here are three more common patterns.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>End-to-End GraphRAG Pipeline\u003C\u002Fb>\u003C\u002Fsummary>\n\n```python\nfrom semantica.ingest import FileIngestor\nfrom semantica.split import TextSplitter\nfrom semantica.semantic_extract import NamedEntityRecognizer, RelationExtractor\nfrom semantica.kg import GraphBuilder\nfrom semantica.vector_store import VectorStore, HybridSearch\nfrom semantica.context import AgentContext\n\n# 1. Ingest\ndocs = FileIngestor().ingest_directory(\".\u002Fdocs\u002F\", recursive=True)\n\n# 2. Entity-aware chunking - never splits an entity across a chunk boundary\nsplitter = TextSplitter(method=\"entity_aware\", chunk_size=1000)\nchunks   = [splitter.split(doc[\"text\"]) for doc in docs]\n\n# 3. Extract entities and relations\nner      = NamedEntityRecognizer(confidence_threshold=0.7)\nrel_ext  = RelationExtractor(confidence_threshold=0.6)\nentities = [ner.extract_entities(chunk) for chunk_group in chunks for chunk in chunk_group]\n\n# 4. Build KG\nkg = GraphBuilder(merge_entities=True, enable_temporal=True).build(docs)\n\n# 5. Hybrid retrieval\nvs  = VectorStore(backend=\"inmemory\")\nctx = AgentContext(vector_store=vs, knowledge_graph=kg)\nctx.store(\"Alice approved the Acme renewal in Q1 2024\", conversation_id=\"c1\")\n\nresults = HybridSearch(vector_store=vs).search(\"who approved the renewal?\")\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>AML Rules Engine\u003C\u002Fb>\u003C\u002Fsummary>\n\n```python\nfrom semantica.reasoning import ReteEngine, Rule, Fact, RuleType\n\nrete = ReteEngine()\nrete.build_network([\n    Rule(\n        rule_id=\"sanctions_check\",\n        name=\"Flag sanctioned-country transactions\",\n        conditions=[\n            {\"field\": \"amount\",  \"operator\": \">\",  \"value\": 10_000},\n            {\"field\": \"country\", \"operator\": \"in\", \"value\": [\"IR\", \"KP\", \"SY\", \"CU\"]},\n        ],\n        conclusion=\"flag_for_compliance_review\",\n        rule_type=RuleType.IMPLICATION,\n    ),\n])\n\n# Run the rule across a batch of incoming transactions, not just one\nfor tx in [\n    Fact(\"tx_101\", \"transaction\", [{\"amount\": 25_000, \"country\": \"IR\"}]),\n    Fact(\"tx_102\", \"transaction\", [{\"amount\": 4_500,  \"country\": \"DE\"}]),\n    Fact(\"tx_103\", \"transaction\", [{\"amount\": 60_000, \"country\": \"KP\"}]),\n]:\n    rete.add_fact(tx)\n\nflagged = rete.match_patterns()\n```\n\nSame condition-matcher caveat as [above](#semanticareasoning-forward-chaining-rete-datalog-sparql) applies — validate against your rule set before production use.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Ontology-to-Knowledge-Graph in One Pass\u003C\u002Fb>\u003C\u002Fsummary>\n\n```python\nfrom semantica.ingest import FileIngestor\nfrom semantica.semantic_extract import NamedEntityRecognizer, RelationExtractor\nfrom semantica.kg import GraphBuilder\nfrom semantica.ontology import OntologyGenerator, OntologyValidator\nfrom semantica.export import RDFExporter\n\nsources   = FileIngestor().ingest_directory(\".\u002Fcontracts\u002F\")\nner       = NamedEntityRecognizer(confidence_threshold=0.7)\nentities  = ner.process_batch([s[\"text\"] for s in sources])\n\nkg  = GraphBuilder(merge_entities=True).build(sources)\ngen = OntologyGenerator(base_uri=\"https:\u002F\u002Fmyco.dev\u002Fontology\u002F\")\nont = gen.generate_ontology({\"entities\": entities[0], \"relationships\": []})\n\nreport = OntologyValidator().validate(ont)\nif report.valid:\n    RDFExporter().export({\"entities\": entities[0]}, \"ontology.ttl\", format=\"turtle\")\n```\n\n\u003C\u002Fdetails>\n\n---\n\n## Features at a Glance\n\n| Capability | Highlights |\n| --- | --- |\n| **Context Graphs** | Queryable graph of entities, decisions, relationships; causal links; cross-graph navigation |\n| **Decision Intelligence** | `record_decision` · `trace_decision_chain` · `find_similar_decisions` · `analyze_decision_impact` · `check_decision_rules` |\n| **Temporal Intelligence** | Point-in-time snapshots · Allen interval algebra (13 relations) · `TemporalNormalizer` · bi-temporal provenance |\n| **Distance Intelligence** | N×N semantic distance matrices · ego-mode visualization · distance bands · embedding cache |\n| **Semantic Extraction** | NER · relation extraction · event detection · triplet generation · coreference |\n| **Reasoning Engines** | Forward chaining · Rete · deductive · abductive · SPARQL · Datalog with explainable output |\n| **GraphRAG Chunking** | Entity-aware · relation-aware · graph-based · ontology-aware · community-detection chunking |\n| **Conflict Detection** | Value \u002F type \u002F relationship \u002F temporal \u002F logical conflicts · multiple resolution strategies |\n| **Provenance** | W3C PROV-O · every fact traced to source · audit log export JSON\u002FCSV\u002FRDF |\n| **Ontology Hub** | SHACL Studio · visual editor · cross-ontology alignments · health dashboard |\n| **Vector Store** | FAISS · Pinecone · Weaviate · Qdrant · Milvus · PgVector · hybrid + filtered search |\n| **Graph Databases (LPG)** | Neo4j · FalkorDB · Apache AGE · AWS Neptune |\n| **Triple Stores (RDF)** | Oxigraph (embedded) · Blazegraph · Apache Jena · Eclipse RDF4J · unified `TripletStore` interface · SPARQL query & bulk load |\n| **Enterprise Data Platforms** | Databricks (`DatabricksIngestor`: Unity Catalog + Delta Lake, PAT\u002FOAuth M2M, table\u002Fquery ingestion, catalog\u002Fschema\u002Ftable\u002Flineage introspection) · Snowflake (`SnowflakeIngestor`: warehouse\u002Fdatabase\u002Fschema, password\u002Fkey-pair\u002FOAuth auth) |\n| **LLM Providers** | **All already supported today:** OpenAI (GPT-4o, o1, o3) · Anthropic (Claude) · Google Gemini · Mistral · Meta Llama · Groq · Cohere · Azure OpenAI · AWS Bedrock · Ollama · DeepSeek · Perplexity · Together AI · Fireworks AI · Replicate · HuggingFace · via `semantica.llms` and LiteLLM |\n\n---\n\n## Performance\n\nBenchmarks from v0.5.0 on a 118,000-node production graph:\n\n| Operation | Before | After | Improvement |\n| --- | --- | --- | --- |\n| Node search (118k nodes) | 24 ms | 0.004 ms | **6,000×** faster |\n| Embedding cache hit | cold load | revision-based cache | **10×** throughput |\n| Semantic deduplication | baseline | optimized candidate gen | **6.98×** faster |\n| Candidate generation | baseline | blocking strategy | **63.6%** faster |\n\n*Measured on a 118,000-node production graph (AMD EPYC, 64 GB RAM); the deduplication\u002Fcandidate-generation figures are historical measurements recorded in [CHANGELOG.md](CHANGELOG.md) rather than an automated `tests\u002F` assertion. Results vary by hardware, dataset topology, and backend selection — run `pytest tests\u002Fvector_store\u002Ftest_performance_benchmarks.py -s` to measure your own data.*\n\n---\n\n## CLI\n\nEvery capability is available from the terminal. The CLI ships with the package, no separate install required.\n\n```bash\npip install semantica\nsemantica        # startup dashboard\nsemantica doctor # health check\nsemantica --help # full grouped command reference\n```\n\nStart with `semantica`, verify with `doctor`, build a graph, and explore the command groups from one terminal.\n\n**Command groups:** `ingest` · `parse` · `extract` · `kg` · `reason` · `decision` · `temporal` · `provenance` · `ontology` · `embed` · `deduplicate` · `validate` · `export` · `visualize` · `pipeline` · `server` · `explorer` · `mcp` · `doctor` · `shell` · `init` · `watch`\n\n→ [Full CLI reference](https:\u002F\u002Fdocs.getsemantica.ai\u002F)\n\n---\n\n## Integrations\n\nNative plugin bundles for Claude Code, Cursor, Codex, Windsurf, Cline, Continue, VS Code, and OpenClaw; a full-featured MCP server for any MCP-compatible client; a comprehensive REST API; and first-class Agno support for multi-agent shared context. Every major LLM provider is already supported via `semantica.llms` and LiteLLM: OpenAI, Anthropic, Gemini, Mistral, Llama, Groq, Cohere, Azure, Bedrock, Ollama, DeepSeek, HuggingFace, and more.\n\nMCP setup takes 30 seconds — see [MCP Server](#mcp-server) below.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Full integrations matrix\u003C\u002Fb> (editors, MCP clients, REST clients, agentic frameworks)\u003C\u002Fsummary>\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth colspan=\"3\" align=\"left\">Native Plugin Bundle\u003C\u002Fth>\n\u003Cth colspan=\"5\" align=\"left\">MCP Server + Plugin\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fclaude.com\u002Fproduct\u002Fclaude-code\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fanthropics.png?size=120\" alt=\"Claude Code\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Claude Code\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Skills · agents · hooks\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fcursor.com\">\u003Cimg src=\"https:\u002F\u002Fwww.freelogovectors.net\u002Fwp-content\u002Fuploads\u002F2025\u002F06\u002Fcursor-logo-freelogovectors.net_.png\" alt=\"Cursor\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Cursor\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Skills · agents\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fopenai.png?size=120\" alt=\"Codex CLI\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Codex CLI\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Skills · agents\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fwindsurf.com\">\u003Cimg src=\"https:\u002F\u002Fexafunction.github.io\u002Fpublic\u002Fbrand\u002Fwindsurf-black-symbol.svg\" alt=\"Windsurf\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Windsurf\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>\u003Ca href=\"plugins\u002F.windsurf-plugin\u002F\">plugin\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcline\u002Fcline\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcline.png?size=120\" alt=\"Cline\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Cline\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>\u003Ca href=\"plugins\u002F.cline-plugin\u002F\">plugin\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcontinuedev\u002Fcontinue\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcontinuedev.png?size=120\" alt=\"Continue\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Continue\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>\u003Ca href=\"plugins\u002F.continue-plugin\u002F\">plugin\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft.png?size=120\" alt=\"VS Code\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>VS Code\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>\u003Ca href=\"plugins\u002F.vscode-plugin\u002F\">plugin\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"integrations\u002Fopenclaw\u002F\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fopenclaw.png?size=120\" alt=\"OpenClaw\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>OpenClaw\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>MCP + \u003Ca href=\"integrations\u002Fopenclaw\u002F\">plugin\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Cth colspan=\"1\" align=\"left\">MCP Server\u003C\u002Fth>\n\u003Cth colspan=\"7\" align=\"left\">REST API\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fclaude.ai\u002Fdownload\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fanthropics.png?size=120\" alt=\"Claude Desktop\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Claude Desktop\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>MCP server\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Fcopilot\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fgithub.png?size=120\" alt=\"GitHub Copilot\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>GitHub Copilot\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FRooCodeInc\u002FRoo-Code\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FRooCodeInc.png?size=120\" alt=\"Roo Code\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Roo Code\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fblock\u002Fgoose\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fblock.png?size=120\" alt=\"Goose\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Goose\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FKilo-Org\u002Fkilocode\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FKilo-Org.png?size=120\" alt=\"Kilo Code\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Kilo Code\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FAider-AI.png?size=120\" alt=\"Aider\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Aider\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faws\u002Famazon-q-developer-cli\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Faws.png?size=120\" alt=\"Amazon Q\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Amazon Q\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fzed.dev\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fzed-industries.png?size=120\" alt=\"Zed\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Zed\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### Agentic Frameworks\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth colspan=\"8\" align=\"left\">Native Integration\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fagno-agi\u002Fagno\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fagno-agi.png?size=120\" alt=\"Agno\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Agno\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>First-class · \u003Ccode>pip install semantica[agno]\u003C\u002Fcode>\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Cth colspan=\"8\" align=\"left\">Already Supported via REST API &amp; MCP\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flangchain\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai.png?size=120\" alt=\"LangChain\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>LangChain\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai.png?size=120\" alt=\"LangGraph\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>LangGraph\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FcrewAIInc\u002FcrewAI\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FcrewAIInc.png?size=120\" alt=\"CrewAI\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>CrewAI\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frun-llama\u002Fllama_index\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Frun-llama.png?size=120\" alt=\"LlamaIndex\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>LlamaIndex\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fautogen\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft.png?size=120\" alt=\"AutoGen\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>AutoGen\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fopenai.png?size=120\" alt=\"OpenAI Agents SDK\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>OpenAI Agents\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-python\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fgoogle.png?size=120\" alt=\"Google ADK\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Google ADK\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>REST API · MCP\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Cth colspan=\"8\" align=\"left\">Native SDK Integration (Coming Soon)\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flangchain\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Flangchain-ai.png?size=120\" alt=\"LangChain\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>LangChain\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FcrewAIInc\u002FcrewAI\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FcrewAIInc.png?size=120\" alt=\"CrewAI\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>CrewAI\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frun-llama\u002Fllama_index\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Frun-llama.png?size=120\" alt=\"LlamaIndex\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>LlamaIndex\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fautogen\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft.png?size=120\" alt=\"AutoGen\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>AutoGen\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fopenai.png?size=120\" alt=\"OpenAI Agents SDK\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>OpenAI Agents\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"12.5%\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-python\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fgoogle.png?size=120\" alt=\"Google ADK\" width=\"48\" height=\"48\" \u002F>\u003C\u002Fa>\u003Cbr\u002F>\n\u003Cstrong>Google ADK\u003C\u002Fstrong>\u003Cbr\u002F>\n\u003Csub>Dedicated toolkit\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdetails>\n\n### MCP Server\n\nConnect any MCP-compatible client (Claude Desktop, Windsurf, Cline, VS Code) in 30 seconds:\n\n```bash\npython -m semantica.mcp_server\n# or via the installed entry point\nsemantica-mcp\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"semantica\": { \"command\": \"python\", \"args\": [\"-m\", \"semantica.mcp_server\"] }\n  }\n}\n```\n\n**Tools exposed over MCP:**\n\n| Tool | What it does |\n| --- | --- |\n| `extract_entities` | NER on any text |\n| `extract_relations` | Relation extraction |\n| `record_decision` | Persist a decision node |\n| `query_decisions` | Search decision history |\n| `find_precedents` | Semantic precedent lookup |\n| `get_causal_chain` | Full causal ancestry |\n| `add_entity` | Add a KG node |\n| `add_relationship` | Add a KG edge |\n| `run_reasoning` | Execute rule set |\n| `get_graph_analytics` | Centrality, communities |\n| `export_graph` | Export to RDF\u002FJSON\u002FParquet |\n| `get_graph_summary` | Graph statistics |\n\n### REST API\n\n```bash\n# Start the backend\npython -m semantica.server   # port 8000\n\n# Extract entities & relations via REST\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fenrich\u002Fextract \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"text\": \"Apple CEO Tim Cook announced record earnings.\"}'\n\n# List recorded decisions\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fdecisions?category=vendor_selection\"\n\n# Query the knowledge graph\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fgraph\u002Fnode\u002Facme_corp\u002Fneighbors?depth=2\"\n```\n\n**REST endpoints span:** `enrich` (extract) · `graph` · `decisions` · `reasoning` · `provenance` · `ontology` · `embeddings` · `search` · `export` · `pipeline` · `temporal` · `deduplication`\n\n### Plugin Bundles\n\n**Domain skills:** `extract` · `ingest` · `query` · `ontology` · `validate` · `deduplicate` · `embed` · `reason` · `decision` · `causal` · `temporal` · `provenance` · `policy` · `explain` · `export` · `change` · `visualize`\n\n**Specialized agents:** `kg-assistant` · `decision-advisor` · `explainability`\n\nBundles for Claude Code, Cu","Semantica 是一个面向 AI 系统的图原生基础设施，用于构建可追溯、可解释、可审计的上下文与知识管理体系。它支持从企业数据中抽取结构化语义信息，构建融合上下文图（Context Graph）与知识图谱（KG）的统一图模型，提供基于 RDF 和属性图（LPG）的多模态图存储、本体管理、因果推理与决策溯源能力，并严格遵循 W3C 标准。适用于金融风控、医疗合规、政务监管等高可靠性、强可解释性要求的受监管领域，支持私有化部署与零厂商锁定。",2,"2026-08-08 02:30:12","trending"]