mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 00:16:23 +02:00
Terminology Rename, and named-graphs for explainability data
Changed terminology:
- session -> question
- retrieval -> exploration
- selection -> focus
- answer -> synthesis
- uris.py: Renamed query_session_uri → question_uri,
retrieval_uri → exploration_uri, selection_uri → focus_uri,
answer_uri → synthesis_uri
- triples.py: Renamed corresponding triple generation functions with
updated labels ("GraphRAG question", "Exploration", "Focus",
"Synthesis")
- namespaces.py: Added named graph constants GRAPH_DEFAULT,
GRAPH_SOURCE, GRAPH_RETRIEVAL
- init.py: Updated exports
- graph_rag.py: Updated to use new terminology
- invoke_graph_rag.py: Updated CLI to display new stage names
(Question, Exploration, Focus, Synthesis)
Query-Time Explainability → Named Graph
- triples.py: Added set_graph() helper function to set named graph
on triples
- graph_rag.py: All explainability triples now use GRAPH_RETRIEVAL
named graph
- rag.py: Explainability triples stored in user's collection (not
separate collection) with named graph
Extraction Provenance → Named Graph
- relationships/extract.py: Provenance triples use GRAPH_SOURCE
named graph
- definitions/extract.py: Provenance triples use GRAPH_SOURCE
named graph
- chunker.py: Provenance triples use GRAPH_SOURCE named graph
- pdf_decoder.py: Provenance triples use GRAPH_SOURCE named graph
CLI Updates
- show_graph.py: Added -g/--graph option to filter by named graph and
--show-graph to display graph column
Also:
- Fix knowledge core schemas
146 lines
No EOL
4 KiB
Python
146 lines
No EOL
4 KiB
Python
"""
|
|
Connects to the graph query service and dumps all graph edges.
|
|
Uses streaming mode for lower time-to-first-result and reduced memory overhead.
|
|
|
|
Named graphs:
|
|
- Default graph (empty): Core knowledge facts
|
|
- urn:graph:source: Extraction provenance (document/chunk sources)
|
|
- urn:graph:retrieval: Query-time explainability (question, exploration, focus, synthesis)
|
|
"""
|
|
|
|
import argparse
|
|
import os
|
|
from trustgraph.api import Api
|
|
|
|
default_url = os.getenv("TRUSTGRAPH_URL", 'http://localhost:8088/')
|
|
default_user = 'trustgraph'
|
|
default_collection = 'default'
|
|
default_token = os.getenv("TRUSTGRAPH_TOKEN", None)
|
|
|
|
# Named graph constants for convenience
|
|
GRAPH_DEFAULT = ""
|
|
GRAPH_SOURCE = "urn:graph:source"
|
|
GRAPH_RETRIEVAL = "urn:graph:retrieval"
|
|
|
|
|
|
def show_graph(url, flow_id, user, collection, limit, batch_size, graph=None, show_graph_column=False, token=None):
|
|
|
|
socket = Api(url, token=token).socket()
|
|
flow = socket.flow(flow_id)
|
|
|
|
try:
|
|
for batch in flow.triples_query_stream(
|
|
user=user,
|
|
collection=collection,
|
|
s=None, p=None, o=None,
|
|
g=graph, # Filter by named graph (None = all graphs)
|
|
limit=limit,
|
|
batch_size=batch_size,
|
|
):
|
|
for triple in batch:
|
|
s = triple.get("s", {})
|
|
p = triple.get("p", {})
|
|
o = triple.get("o", {})
|
|
g = triple.get("g") # Named graph (None = default graph)
|
|
# Format terms for display
|
|
s_str = s.get("v", s.get("i", str(s)))
|
|
p_str = p.get("v", p.get("i", str(p)))
|
|
o_str = o.get("v", o.get("i", str(o)))
|
|
if show_graph_column:
|
|
g_str = g if g else "(default)"
|
|
print(f"[{g_str}]", s_str, p_str, o_str)
|
|
else:
|
|
print(s_str, p_str, o_str)
|
|
finally:
|
|
socket.close()
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(
|
|
prog='tg-show-graph',
|
|
description=__doc__,
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-u', '--api-url',
|
|
default=default_url,
|
|
help=f'API URL (default: {default_url})',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-f', '--flow-id',
|
|
default="default",
|
|
help=f'Flow ID (default: default)'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-U', '--user',
|
|
default=default_user,
|
|
help=f'User ID (default: {default_user})'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-C', '--collection',
|
|
default=default_collection,
|
|
help=f'Collection ID (default: {default_collection})'
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-t', '--token',
|
|
default=default_token,
|
|
help='Authentication token (default: $TRUSTGRAPH_TOKEN)',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-l', '--limit',
|
|
type=int,
|
|
default=10000,
|
|
help='Maximum number of triples to return (default: 10000)',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-b', '--batch-size',
|
|
type=int,
|
|
default=20,
|
|
help='Triples per streaming batch (default: 20)',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-g', '--graph',
|
|
default=None,
|
|
help='Filter by named graph (e.g., urn:graph:source, urn:graph:retrieval). Use "" for default graph only.',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--show-graph',
|
|
action='store_true',
|
|
help='Show graph column in output',
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Handle empty string for default graph filter
|
|
graph = args.graph
|
|
if graph == '""' or graph == "''":
|
|
graph = "" # Filter to default graph only
|
|
|
|
try:
|
|
|
|
show_graph(
|
|
url = args.api_url,
|
|
flow_id = args.flow_id,
|
|
user = args.user,
|
|
collection = args.collection,
|
|
limit = args.limit,
|
|
batch_size = args.batch_size,
|
|
graph = graph,
|
|
show_graph_column = args.show_graph,
|
|
token = args.token,
|
|
)
|
|
|
|
except Exception as e:
|
|
|
|
print("Exception:", e, flush=True)
|
|
|
|
if __name__ == "__main__":
|
|
main() |