diff --git a/trustgraph-base/trustgraph/api/flow.py b/trustgraph-base/trustgraph/api/flow.py index 681696c3..74b7a117 100644 --- a/trustgraph-base/trustgraph/api/flow.py +++ b/trustgraph-base/trustgraph/api/flow.py @@ -132,16 +132,24 @@ class FlowInstance: input )["response"] - def agent(self, question, user="trustgraph", state="", group=None, history=None): + def agent(self, question, user="trustgraph", state=None, group=None, history=None): # The input consists of a question and optional context input = { "question": question, "user": user, - "state": state, - "group": group or [], - "history": history or [] } + + # Only include state if it has a value + if state is not None: + input["state"] = state + + # Only include group if it has a value + if group is not None: + input["group"] = group + + # Always include history (empty list if None) + input["history"] = history or [] return self.request( "service/agent", diff --git a/trustgraph-base/trustgraph/messaging/translators/agent.py b/trustgraph-base/trustgraph/messaging/translators/agent.py index 4408fea3..d6ce8bbb 100644 --- a/trustgraph-base/trustgraph/messaging/translators/agent.py +++ b/trustgraph-base/trustgraph/messaging/translators/agent.py @@ -9,8 +9,8 @@ class AgentRequestTranslator(MessageTranslator): def to_pulsar(self, data: Dict[str, Any]) -> AgentRequest: return AgentRequest( question=data["question"], - state=data.get("state", ""), - group=data.get("group", []), + state=data.get("state", None), + group=data.get("group", None), history=data.get("history", []), user=data.get("user", "trustgraph") ) diff --git a/trustgraph-cli/trustgraph/cli/invoke_agent.py b/trustgraph-cli/trustgraph/cli/invoke_agent.py index c5ca93e4..4c853dee 100644 --- a/trustgraph-cli/trustgraph/cli/invoke_agent.py +++ b/trustgraph-cli/trustgraph/cli/invoke_agent.py @@ -29,7 +29,7 @@ def output(text, prefix="> ", width=78): async def question( url, question, flow_id, user, collection, - plan=None, state=None, verbose=False + plan=None, state=None, group=None, verbose=False ): if not url.endswith("/"): @@ -55,19 +55,24 @@ async def question( async with connect(url) as ws: - req = json.dumps({ + req = { "id": mid, "service": "agent", "flow": flow_id, "request": { "question": question, "user": user, - "state": state or "", - "group": [], "history": [] } + } + + # Only add optional fields if they have values + if state is not None: + req["request"]["state"] = state + if group is not None: + req["request"]["group"] = group - }) + req = json.dumps(req) await ws.send(req) @@ -144,6 +149,12 @@ def main(): help=f'Agent initial state (default: unspecified)' ) + parser.add_argument( + '-g', '--group', + nargs='+', + help='Agent tool groups (can specify multiple)' + ) + parser.add_argument( '-v', '--verbose', action="store_true", @@ -163,6 +174,7 @@ def main(): collection = args.collection, plan = args.plan, state = args.state, + group = args.group, verbose = args.verbose, ) )