Collection+user fields in structured query

This commit is contained in:
Cyber MacGeddon 2025-09-08 16:58:18 +01:00
parent a92050c411
commit 8a01790936
5 changed files with 33 additions and 10 deletions

View file

@ -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(

View file

@ -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
}

View file

@ -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()

View file

@ -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,
)

View file

@ -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