diff --git a/trustgraph-base/trustgraph/api/flow.py b/trustgraph-base/trustgraph/api/flow.py index b3c86c4e..25af08e0 100644 --- a/trustgraph-base/trustgraph/api/flow.py +++ b/trustgraph-base/trustgraph/api/flow.py @@ -456,20 +456,24 @@ class FlowInstance: return response - def structured_query(self, question): + def structured_query(self, question, user="trustgraph", collection="default"): """ Execute a natural language question against structured data. Combines NLP query conversion and GraphQL execution. Args: question: Natural language question + user: Cassandra keyspace identifier (default: "trustgraph") + collection: Data collection identifier (default: "default") Returns: dict with data and optional errors """ input = { - "question": question + "question": question, + "user": user, + "collection": collection } response = self.request( diff --git a/trustgraph-base/trustgraph/messaging/translators/structured_query.py b/trustgraph-base/trustgraph/messaging/translators/structured_query.py index c6a8abc8..cc3ae80c 100644 --- a/trustgraph-base/trustgraph/messaging/translators/structured_query.py +++ b/trustgraph-base/trustgraph/messaging/translators/structured_query.py @@ -9,12 +9,16 @@ class StructuredQueryRequestTranslator(MessageTranslator): def to_pulsar(self, data: Dict[str, Any]) -> StructuredQueryRequest: return StructuredQueryRequest( - question=data.get("question", "") + question=data.get("question", ""), + user=data.get("user", "trustgraph"), # Default fallback + collection=data.get("collection", "default") # Default fallback ) def from_pulsar(self, obj: StructuredQueryRequest) -> Dict[str, Any]: return { - "question": obj.question + "question": obj.question, + "user": obj.user, + "collection": obj.collection } diff --git a/trustgraph-base/trustgraph/schema/services/structured_query.py b/trustgraph-base/trustgraph/schema/services/structured_query.py index 537fc36b..df21bfe2 100644 --- a/trustgraph-base/trustgraph/schema/services/structured_query.py +++ b/trustgraph-base/trustgraph/schema/services/structured_query.py @@ -9,6 +9,8 @@ from ..core.topic import topic class StructuredQueryRequest(Record): question = String() + user = String() # Cassandra keyspace identifier + collection = String() # Data collection identifier class StructuredQueryResponse(Record): error = Error() diff --git a/trustgraph-cli/trustgraph/cli/invoke_structured_query.py b/trustgraph-cli/trustgraph/cli/invoke_structured_query.py index 8f34e747..9f5f8540 100644 --- a/trustgraph-cli/trustgraph/cli/invoke_structured_query.py +++ b/trustgraph-cli/trustgraph/cli/invoke_structured_query.py @@ -79,11 +79,11 @@ def format_table_data(rows, table_name, output_format): else: return json.dumps({table_name: rows}, indent=2) -def structured_query(url, flow_id, question, output_format='table'): +def structured_query(url, flow_id, question, user='trustgraph', collection='default', output_format='table'): api = Api(url).flow().id(flow_id) - resp = api.structured_query(question=question) + resp = api.structured_query(question=question, user=user, collection=collection) # Check for errors if "error" in resp and resp["error"]: @@ -132,6 +132,18 @@ def main(): help='Natural language question to execute', ) + parser.add_argument( + '--user', + default='trustgraph', + help='Cassandra keyspace identifier (default: trustgraph)' + ) + + parser.add_argument( + '--collection', + default='default', + help='Data collection identifier (default: default)' + ) + parser.add_argument( '--format', choices=['table', 'json', 'csv'], @@ -147,6 +159,8 @@ def main(): url=args.url, flow_id=args.flow_id, question=args.question, + user=args.user, + collection=args.collection, output_format=args.format, ) diff --git a/trustgraph-flow/trustgraph/retrieval/structured_query/service.py b/trustgraph-flow/trustgraph/retrieval/structured_query/service.py index 28327f82..4b1a04a4 100644 --- a/trustgraph-flow/trustgraph/retrieval/structured_query/service.py +++ b/trustgraph-flow/trustgraph/retrieval/structured_query/service.py @@ -111,11 +111,10 @@ class Processor(FlowProcessor): else: variables_as_strings[key] = str(value) - # Use standard TrustGraph user/collection values - # These should eventually come from authentication/context + # Use user/collection values from request objects_request = ObjectsQueryRequest( - user="trustgraph", # Standard TrustGraph user - collection="default", # Standard default collection + user=request.user, + collection=request.collection, query=nlp_response.graphql_query, variables=variables_as_strings, operation_name=None