trustgraph-cli 1.3.6__tar.gz → 1.3.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of trustgraph-cli might be problematic. Click here for more details.

Files changed (71) hide show
  1. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/PKG-INFO +1 -1
  2. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/pyproject.toml +2 -0
  3. trustgraph_cli-1.3.7/trustgraph/cli/invoke_nlp_query.py +111 -0
  4. trustgraph_cli-1.3.7/trustgraph/cli/invoke_structured_query.py +159 -0
  5. trustgraph_cli-1.3.7/trustgraph/cli_version.py +1 -0
  6. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/PKG-INFO +1 -1
  7. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/SOURCES.txt +2 -0
  8. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/entry_points.txt +2 -0
  9. trustgraph_cli-1.3.6/trustgraph/cli_version.py +0 -1
  10. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/README.md +0 -0
  11. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/setup.cfg +0 -0
  12. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/__init__.py +0 -0
  13. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/add_library_document.py +0 -0
  14. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/delete_config_item.py +0 -0
  15. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/delete_flow_class.py +0 -0
  16. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/delete_kg_core.py +0 -0
  17. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/delete_mcp_tool.py +0 -0
  18. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/delete_tool.py +0 -0
  19. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/dump_msgpack.py +0 -0
  20. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/get_config_item.py +0 -0
  21. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/get_flow_class.py +0 -0
  22. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/get_kg_core.py +0 -0
  23. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/graph_to_turtle.py +0 -0
  24. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/init_pulsar_manager.py +0 -0
  25. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/init_trustgraph.py +0 -0
  26. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_agent.py +0 -0
  27. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_document_rag.py +0 -0
  28. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_graph_rag.py +0 -0
  29. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_llm.py +0 -0
  30. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_mcp_tool.py +0 -0
  31. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_objects_query.py +0 -0
  32. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/invoke_prompt.py +0 -0
  33. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/list_config_items.py +0 -0
  34. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_doc_embeds.py +0 -0
  35. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_kg_core.py +0 -0
  36. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_knowledge.py +0 -0
  37. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_pdf.py +0 -0
  38. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_sample_documents.py +0 -0
  39. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_text.py +0 -0
  40. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/load_turtle.py +0 -0
  41. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/put_config_item.py +0 -0
  42. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/put_flow_class.py +0 -0
  43. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/put_kg_core.py +0 -0
  44. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/remove_library_document.py +0 -0
  45. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/save_doc_embeds.py +0 -0
  46. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/set_mcp_tool.py +0 -0
  47. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/set_prompt.py +0 -0
  48. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/set_token_costs.py +0 -0
  49. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/set_tool.py +0 -0
  50. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_config.py +0 -0
  51. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_flow_classes.py +0 -0
  52. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_flow_state.py +0 -0
  53. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_flows.py +0 -0
  54. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_graph.py +0 -0
  55. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_kg_cores.py +0 -0
  56. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_library_documents.py +0 -0
  57. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_library_processing.py +0 -0
  58. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_mcp_tools.py +0 -0
  59. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_processor_state.py +0 -0
  60. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_prompts.py +0 -0
  61. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_token_costs.py +0 -0
  62. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_token_rate.py +0 -0
  63. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/show_tools.py +0 -0
  64. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/start_flow.py +0 -0
  65. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/start_library_processing.py +0 -0
  66. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/stop_flow.py +0 -0
  67. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/stop_library_processing.py +0 -0
  68. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph/cli/unload_kg_core.py +0 -0
  69. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/dependency_links.txt +0 -0
  70. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/requires.txt +0 -0
  71. {trustgraph_cli-1.3.6 → trustgraph_cli-1.3.7}/trustgraph_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trustgraph-cli
3
- Version: 1.3.6
3
+ Version: 1.3.7
4
4
  Summary: TrustGraph provides a means to run a pipeline of flexible AI processing components in a flexible means to achieve a processing pipeline.
5
5
  Author-email: "trustgraph.ai" <security@trustgraph.ai>
6
6
  Project-URL: Homepage, https://github.com/trustgraph-ai/trustgraph
@@ -43,8 +43,10 @@ tg-invoke-document-rag = "trustgraph.cli.invoke_document_rag:main"
43
43
  tg-invoke-graph-rag = "trustgraph.cli.invoke_graph_rag:main"
44
44
  tg-invoke-llm = "trustgraph.cli.invoke_llm:main"
45
45
  tg-invoke-mcp-tool = "trustgraph.cli.invoke_mcp_tool:main"
46
+ tg-invoke-nlp-query = "trustgraph.cli.invoke_nlp_query:main"
46
47
  tg-invoke-objects-query = "trustgraph.cli.invoke_objects_query:main"
47
48
  tg-invoke-prompt = "trustgraph.cli.invoke_prompt:main"
49
+ tg-invoke-structured-query = "trustgraph.cli.invoke_structured_query:main"
48
50
  tg-load-doc-embeds = "trustgraph.cli.load_doc_embeds:main"
49
51
  tg-load-kg-core = "trustgraph.cli.load_kg_core:main"
50
52
  tg-load-pdf = "trustgraph.cli.load_pdf:main"
@@ -0,0 +1,111 @@
1
+ """
2
+ Uses the NLP Query service to convert natural language questions to GraphQL queries
3
+ """
4
+
5
+ import argparse
6
+ import os
7
+ import json
8
+ import sys
9
+ from trustgraph.api import Api
10
+
11
+ default_url = os.getenv("TRUSTGRAPH_URL", 'http://localhost:8088/')
12
+
13
+ def nlp_query(url, flow_id, question, max_results, output_format='json'):
14
+
15
+ api = Api(url).flow().id(flow_id)
16
+
17
+ resp = api.nlp_query(
18
+ question=question,
19
+ max_results=max_results
20
+ )
21
+
22
+ # Check for errors
23
+ if "error" in resp and resp["error"]:
24
+ print("Error:", resp["error"].get("message", "Unknown error"), file=sys.stderr)
25
+ sys.exit(1)
26
+
27
+ # Format output based on requested format
28
+ if output_format == 'json':
29
+ print(json.dumps(resp, indent=2))
30
+ elif output_format == 'graphql':
31
+ # Just print the GraphQL query
32
+ if "graphql_query" in resp:
33
+ print(resp["graphql_query"])
34
+ else:
35
+ print("No GraphQL query generated", file=sys.stderr)
36
+ sys.exit(1)
37
+ elif output_format == 'summary':
38
+ # Print a human-readable summary
39
+ if "graphql_query" in resp:
40
+ print(f"Generated GraphQL Query:")
41
+ print("-" * 40)
42
+ print(resp["graphql_query"])
43
+ print("-" * 40)
44
+ if "detected_schemas" in resp and resp["detected_schemas"]:
45
+ print(f"Detected Schemas: {', '.join(resp['detected_schemas'])}")
46
+ if "confidence" in resp:
47
+ print(f"Confidence: {resp['confidence']:.2%}")
48
+ if "variables" in resp and resp["variables"]:
49
+ print(f"Variables: {json.dumps(resp['variables'], indent=2)}")
50
+ else:
51
+ print("No GraphQL query generated", file=sys.stderr)
52
+ sys.exit(1)
53
+
54
+ def main():
55
+
56
+ parser = argparse.ArgumentParser(
57
+ prog='tg-invoke-nlp-query',
58
+ description=__doc__,
59
+ )
60
+
61
+ parser.add_argument(
62
+ '-u', '--url',
63
+ default=default_url,
64
+ help=f'API URL (default: {default_url})',
65
+ )
66
+
67
+ parser.add_argument(
68
+ '-f', '--flow-id',
69
+ default="default",
70
+ help=f'Flow ID (default: default)'
71
+ )
72
+
73
+ parser.add_argument(
74
+ '-q', '--question',
75
+ required=True,
76
+ help='Natural language question to convert to GraphQL',
77
+ )
78
+
79
+ parser.add_argument(
80
+ '-m', '--max-results',
81
+ type=int,
82
+ default=100,
83
+ help='Maximum number of results (default: 100)'
84
+ )
85
+
86
+ parser.add_argument(
87
+ '--format',
88
+ choices=['json', 'graphql', 'summary'],
89
+ default='summary',
90
+ help='Output format (default: summary)'
91
+ )
92
+
93
+ args = parser.parse_args()
94
+
95
+ try:
96
+
97
+ nlp_query(
98
+ url=args.url,
99
+ flow_id=args.flow_id,
100
+ question=args.question,
101
+ max_results=args.max_results,
102
+ output_format=args.format,
103
+ )
104
+
105
+ except Exception as e:
106
+
107
+ print("Exception:", e, flush=True, file=sys.stderr)
108
+ sys.exit(1)
109
+
110
+ if __name__ == "__main__":
111
+ main()
@@ -0,0 +1,159 @@
1
+ """
2
+ Uses the Structured Query service to execute natural language questions against structured data
3
+ """
4
+
5
+ import argparse
6
+ import os
7
+ import json
8
+ import sys
9
+ import csv
10
+ import io
11
+ from trustgraph.api import Api
12
+ from tabulate import tabulate
13
+
14
+ default_url = os.getenv("TRUSTGRAPH_URL", 'http://localhost:8088/')
15
+
16
+ def format_output(data, output_format):
17
+ """Format structured query response data in the specified format"""
18
+ if not data:
19
+ return "No data returned"
20
+
21
+ # Handle case where data contains multiple query results
22
+ if isinstance(data, dict) and len(data) == 1:
23
+ # Single query result - extract the list
24
+ query_name, result_list = next(iter(data.items()))
25
+ if isinstance(result_list, list):
26
+ return format_table_data(result_list, query_name, output_format)
27
+
28
+ # Multiple queries or non-list data - use JSON format
29
+ if output_format == 'json':
30
+ return json.dumps(data, indent=2)
31
+ else:
32
+ return json.dumps(data, indent=2) # Fallback to JSON
33
+
34
+ def format_table_data(rows, table_name, output_format):
35
+ """Format a list of rows in the specified format"""
36
+ if not rows:
37
+ return f"No {table_name} found"
38
+
39
+ if output_format == 'json':
40
+ return json.dumps({table_name: rows}, indent=2)
41
+
42
+ elif output_format == 'csv':
43
+ # Get field names in order from first row, then add any missing ones
44
+ fieldnames = list(rows[0].keys()) if rows else []
45
+ # Add any additional fields from other rows that might be missing
46
+ all_fields = set(fieldnames)
47
+ for row in rows:
48
+ for field in row.keys():
49
+ if field not in all_fields:
50
+ fieldnames.append(field)
51
+ all_fields.add(field)
52
+
53
+ # Create CSV string
54
+ output = io.StringIO()
55
+ writer = csv.DictWriter(output, fieldnames=fieldnames)
56
+ writer.writeheader()
57
+ writer.writerows(rows)
58
+ return output.getvalue().rstrip()
59
+
60
+ elif output_format == 'table':
61
+ # Get field names in order from first row, then add any missing ones
62
+ fieldnames = list(rows[0].keys()) if rows else []
63
+ # Add any additional fields from other rows that might be missing
64
+ all_fields = set(fieldnames)
65
+ for row in rows:
66
+ for field in row.keys():
67
+ if field not in all_fields:
68
+ fieldnames.append(field)
69
+ all_fields.add(field)
70
+
71
+ # Create table data
72
+ table_data = []
73
+ for row in rows:
74
+ table_row = [row.get(field, '') for field in fieldnames]
75
+ table_data.append(table_row)
76
+
77
+ return tabulate(table_data, headers=fieldnames, tablefmt='pretty')
78
+
79
+ else:
80
+ return json.dumps({table_name: rows}, indent=2)
81
+
82
+ def structured_query(url, flow_id, question, output_format='table'):
83
+
84
+ api = Api(url).flow().id(flow_id)
85
+
86
+ resp = api.structured_query(question=question)
87
+
88
+ # Check for errors
89
+ if "error" in resp and resp["error"]:
90
+ print("Error:", resp["error"].get("message", "Unknown error"), file=sys.stderr)
91
+ sys.exit(1)
92
+
93
+ # Check for query errors
94
+ if "errors" in resp and resp["errors"]:
95
+ print("Query Errors:", file=sys.stderr)
96
+ for error in resp["errors"]:
97
+ print(f" - {error}", file=sys.stderr)
98
+ # Still print data if available
99
+ if "data" in resp and resp["data"]:
100
+ print(format_output(resp["data"], output_format))
101
+ sys.exit(1)
102
+
103
+ # Print the data
104
+ if "data" in resp:
105
+ print(format_output(resp["data"], output_format))
106
+ else:
107
+ print("No data returned", file=sys.stderr)
108
+ sys.exit(1)
109
+
110
+ def main():
111
+
112
+ parser = argparse.ArgumentParser(
113
+ prog='tg-invoke-structured-query',
114
+ description=__doc__,
115
+ )
116
+
117
+ parser.add_argument(
118
+ '-u', '--url',
119
+ default=default_url,
120
+ help=f'API URL (default: {default_url})',
121
+ )
122
+
123
+ parser.add_argument(
124
+ '-f', '--flow-id',
125
+ default="default",
126
+ help=f'Flow ID (default: default)'
127
+ )
128
+
129
+ parser.add_argument(
130
+ '-q', '--question',
131
+ required=True,
132
+ help='Natural language question to execute',
133
+ )
134
+
135
+ parser.add_argument(
136
+ '--format',
137
+ choices=['table', 'json', 'csv'],
138
+ default='table',
139
+ help='Output format (default: table)'
140
+ )
141
+
142
+ args = parser.parse_args()
143
+
144
+ try:
145
+
146
+ structured_query(
147
+ url=args.url,
148
+ flow_id=args.flow_id,
149
+ question=args.question,
150
+ output_format=args.format,
151
+ )
152
+
153
+ except Exception as e:
154
+
155
+ print("Exception:", e, flush=True, file=sys.stderr)
156
+ sys.exit(1)
157
+
158
+ if __name__ == "__main__":
159
+ main()
@@ -0,0 +1 @@
1
+ __version__ = "1.3.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trustgraph-cli
3
- Version: 1.3.6
3
+ Version: 1.3.7
4
4
  Summary: TrustGraph provides a means to run a pipeline of flexible AI processing components in a flexible means to achieve a processing pipeline.
5
5
  Author-email: "trustgraph.ai" <security@trustgraph.ai>
6
6
  Project-URL: Homepage, https://github.com/trustgraph-ai/trustgraph
@@ -20,8 +20,10 @@ trustgraph/cli/invoke_document_rag.py
20
20
  trustgraph/cli/invoke_graph_rag.py
21
21
  trustgraph/cli/invoke_llm.py
22
22
  trustgraph/cli/invoke_mcp_tool.py
23
+ trustgraph/cli/invoke_nlp_query.py
23
24
  trustgraph/cli/invoke_objects_query.py
24
25
  trustgraph/cli/invoke_prompt.py
26
+ trustgraph/cli/invoke_structured_query.py
25
27
  trustgraph/cli/list_config_items.py
26
28
  trustgraph/cli/load_doc_embeds.py
27
29
  trustgraph/cli/load_kg_core.py
@@ -16,8 +16,10 @@ tg-invoke-document-rag = trustgraph.cli.invoke_document_rag:main
16
16
  tg-invoke-graph-rag = trustgraph.cli.invoke_graph_rag:main
17
17
  tg-invoke-llm = trustgraph.cli.invoke_llm:main
18
18
  tg-invoke-mcp-tool = trustgraph.cli.invoke_mcp_tool:main
19
+ tg-invoke-nlp-query = trustgraph.cli.invoke_nlp_query:main
19
20
  tg-invoke-objects-query = trustgraph.cli.invoke_objects_query:main
20
21
  tg-invoke-prompt = trustgraph.cli.invoke_prompt:main
22
+ tg-invoke-structured-query = trustgraph.cli.invoke_structured_query:main
21
23
  tg-list-config-items = trustgraph.cli.list_config_items:main
22
24
  tg-load-doc-embeds = trustgraph.cli.load_doc_embeds:main
23
25
  tg-load-kg-core = trustgraph.cli.load_kg_core:main
@@ -1 +0,0 @@
1
- __version__ = "1.3.6"
File without changes
File without changes