trustgraph/trustgraph-cli/trustgraph/cli
cybermaggedon 312174eb88
Adding explainability to the ReACT agent (#689)
* Added tech spec

* Add provenance recording to React agent loop

Enables agent sessions to be traced and debugged using the same
explainability infrastructure as GraphRAG. Agent traces record:
- Session start with query and timestamp
- Each iteration's thought, action, arguments, and observation
- Final answer with derivation chain

Changes:
- Add session_id and collection fields to AgentRequest schema
- Add agent predicates (TG_THOUGHT, TG_ACTION, etc.) to namespaces
- Create agent provenance triple generators in provenance/agent.py
- Register explainability producer in agent service
- Emit provenance triples during agent execution
- Update CLI tools to detect and render agent traces alongside GraphRAG

* Updated explainability taxonomy:

GraphRAG: tg:Question → tg:Exploration → tg:Focus → tg:Synthesis

Agent: tg:Question → tg:Analysis(s) → tg:Conclusion

All entities also have their PROV-O type (prov:Activity or prov:Entity).

Updated commit message:

Add provenance recording to React agent loop

Enables agent sessions to be traced and debugged using the same
explainability infrastructure as GraphRAG.

Entity types follow human reasoning patterns:
- tg:Question - the user's query (shared with GraphRAG)
- tg:Analysis - each think/act/observe cycle
- tg:Conclusion - the final answer

Also adds explicit TG types to GraphRAG entities:
- tg:Question, tg:Exploration, tg:Focus, tg:Synthesis

All types retain their PROV-O base types (prov:Activity, prov:Entity).

Changes:
- Add session_id and collection fields to AgentRequest schema
- Add explainability entity types to namespaces.py
- Create agent provenance triple generators
- Register explainability producer in agent service
- Emit provenance triples during agent execution
- Update CLI tools to detect and render both trace types

* Document RAG explainability is now complete. Here's a summary of the
changes made:

Schema Changes:
- trustgraph-base/trustgraph/schema/services/retrieval.py: Added
  explain_id and explain_graph fields to DocumentRagResponse
- trustgraph-base/trustgraph/messaging/translators/retrieval.py:
  Updated translator to handle explainability fields

Provenance Changes:
- trustgraph-base/trustgraph/provenance/namespaces.py: Added
  TG_CHUNK_COUNT and TG_SELECTED_CHUNK predicates
- trustgraph-base/trustgraph/provenance/uris.py: Added
  docrag_question_uri, docrag_exploration_uri, docrag_synthesis_uri
  generators
- trustgraph-base/trustgraph/provenance/triples.py: Added
  docrag_question_triples, docrag_exploration_triples,
  docrag_synthesis_triples builders
- trustgraph-base/trustgraph/provenance/__init__.py: Exported all
  new Document RAG functions and predicates

Service Changes:
- trustgraph-flow/trustgraph/retrieval/document_rag/document_rag.py:
  Added explainability callback support and triple emission at each
  phase (Question → Exploration → Synthesis)
- trustgraph-flow/trustgraph/retrieval/document_rag/rag.py:
  Registered explainability producer and wired up the callback

Documentation:
- docs/tech-specs/agent-explainability.md: Added Document RAG entity
  types and provenance model documentation

Document RAG Provenance Model:
Question (urn:trustgraph:docrag:{uuid})
    │
    │  tg:query, prov:startedAtTime
    │  rdf:type = prov:Activity, tg:Question
    │
    ↓ prov:wasGeneratedBy
    │
Exploration (urn:trustgraph:docrag:{uuid}/exploration)
    │
    │  tg:chunkCount, tg:selectedChunk (multiple)
    │  rdf:type = prov:Entity, tg:Exploration
    │
    ↓ prov:wasDerivedFrom
    │
Synthesis (urn:trustgraph:docrag:{uuid}/synthesis)
    │
    │  tg:content = "The answer..."
    │  rdf:type = prov:Entity, tg:Synthesis

* Specific subtype that makes the retrieval mechanism immediately
obvious:

System: GraphRAG
TG Types on Question: tg:Question, tg:GraphRagQuestion
URI Pattern: urn:trustgraph:question:{uuid}
────────────────────────────────────────
System: Document RAG
TG Types on Question: tg:Question, tg:DocRagQuestion
URI Pattern: urn:trustgraph:docrag:{uuid}
────────────────────────────────────────
System: Agent
TG Types on Question: tg:Question, tg:AgentQuestion
URI Pattern: urn:trustgraph:agent:{uuid}
Files modified:
- trustgraph-base/trustgraph/provenance/namespaces.py - Added
TG_GRAPH_RAG_QUESTION, TG_DOC_RAG_QUESTION, TG_AGENT_QUESTION
- trustgraph-base/trustgraph/provenance/triples.py - Added subtype to
question_triples and docrag_question_triples
- trustgraph-base/trustgraph/provenance/agent.py - Added subtype to
agent_session_triples
- trustgraph-base/trustgraph/provenance/__init__.py - Exported new types
- docs/tech-specs/agent-explainability.md - Documented the subtypes

This allows:
- Query all questions: ?q rdf:type tg:Question
- Query only GraphRAG: ?q rdf:type tg:GraphRagQuestion
- Query only Document RAG: ?q rdf:type tg:DocRagQuestion
- Query only Agent: ?q rdf:type tg:AgentQuestion

* Fixed tests
2026-03-11 15:28:15 +00:00
..
__init__.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
add_library_document.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
delete_collection.py Collection management (#520) 2025-09-18 15:57:52 +01:00
delete_config_item.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
delete_flow_blueprint.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
delete_kg_core.py Fix CLI docs (#470) 2025-08-27 09:08:20 +01:00
delete_mcp_tool.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
delete_tool.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
dump_msgpack.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
dump_queues.py Messaging fabric plugins (#592) 2025-12-17 21:40:43 +00:00
get_config_item.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
get_document_content.py Fix/librarian broken (#674) 2026-03-09 13:36:24 +00:00
get_flow_blueprint.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
get_kg_core.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
graph_to_turtle.py Feature/streaming triples (#676) 2026-03-09 15:46:33 +00:00
init_pulsar_manager.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
init_trustgraph.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
invoke_agent.py Fix non-streaming (2) (#608) 2026-01-12 21:21:51 +00:00
invoke_document_embeddings.py Fix doc embeddings invocation (#672) 2026-03-09 11:07:32 +00:00
invoke_document_rag.py Messaging fabric plugins (#592) 2025-12-17 21:40:43 +00:00
invoke_embeddings.py Batch embeddings (#668) 2026-03-08 18:36:54 +00:00
invoke_graph_embeddings.py Fix doc embeddings invocation (#672) 2026-03-09 11:07:32 +00:00
invoke_graph_rag.py Terminology Rename, and named-graphs for explainability (#682) 2026-03-10 14:35:21 +00:00
invoke_llm.py Fix Python streaming SDK issues (#580) 2025-12-04 20:42:25 +00:00
invoke_mcp_tool.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
invoke_nlp_query.py Structured query support (#492) 2025-09-04 16:06:18 +01:00
invoke_prompt.py Fix Python streaming SDK issues (#580) 2025-12-04 20:42:25 +00:00
invoke_row_embeddings.py Row embeddings APIs exposed (#646) 2026-02-23 21:52:56 +00:00
invoke_rows_query.py Structured data 2 (#645) 2026-02-23 15:56:29 +00:00
invoke_structured_query.py Extend use of user + collection fields (#503) 2025-09-08 18:28:38 +01:00
list_collections.py Fix/queue configurations (#585) 2025-12-06 14:54:47 +00:00
list_config_items.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
list_explain_traces.py Adding explainability to the ReACT agent (#689) 2026-03-11 15:28:15 +00:00
load_doc_embeds.py Document chunks not stored in vector store (#665) 2026-03-07 23:10:45 +00:00
load_kg_core.py Fix CLI docs (#470) 2025-08-27 09:08:20 +01:00
load_knowledge.py Feature/more cli diags (#624) 2026-02-04 14:10:30 +00:00
load_sample_documents.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
load_structured_data.py Structured data 2 (#645) 2026-02-23 15:56:29 +00:00
load_turtle.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
put_config_item.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
put_flow_blueprint.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
put_kg_core.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
query_graph.py Fix Cassandra schema and graph filter semantics (#680) 2026-03-10 12:52:51 +00:00
remove_library_document.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
save_doc_embeds.py Document chunks not stored in vector store (#665) 2026-03-07 23:10:45 +00:00
set_collection.py Fix/queue configurations (#585) 2025-12-06 14:54:47 +00:00
set_mcp_tool.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
set_prompt.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
set_token_costs.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
set_tool.py Row embeddings APIs exposed (#646) 2026-02-23 21:52:56 +00:00
show_config.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_document_hierarchy.py Add explainability CLI tools (#688) 2026-03-11 13:44:29 +00:00
show_explain_trace.py Adding explainability to the ReACT agent (#689) 2026-03-11 15:28:15 +00:00
show_flow_blueprints.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
show_flow_state.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
show_flows.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
show_graph.py Terminology Rename, and named-graphs for explainability (#682) 2026-03-10 14:35:21 +00:00
show_kg_cores.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_library_documents.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_library_processing.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_mcp_tools.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_parameter_types.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
show_processor_state.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
show_prompts.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
show_token_costs.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
show_token_rate.py Migrate from setup.py to pyproject.toml (#440) 2025-07-23 21:22:08 +01:00
show_tools.py Row embeddings APIs exposed (#646) 2026-02-23 21:52:56 +00:00
start_flow.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00
start_library_processing.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
stop_flow.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
stop_library_processing.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
unload_kg_core.py Python API implements streaming interfaces (#577) 2025-12-04 17:38:57 +00:00
verify_system_status.py Fix config inconsistency (#609) 2026-01-14 12:31:40 +00:00