diff --git a/api/apps/sdk/session.py b/api/apps/sdk/session.py index 10439564d5..e628a3c960 100644 --- a/api/apps/sdk/session.py +++ b/api/apps/sdk/session.py @@ -584,6 +584,7 @@ async def agent_completions(tenant_id, agent_id): reference = {} final_ans = "" trace_items = [] + structured_output = {} async for answer in agent_completion(tenant_id=tenant_id, agent_id=agent_id, **req): try: ans = json.loads(answer[5:]) @@ -594,20 +595,26 @@ async def agent_completions(tenant_id, agent_id): if ans.get("data", {}).get("reference", None): reference.update(ans["data"]["reference"]) - if return_trace and ans.get("event") == "node_finished": - data = ans.get("data", {}) - trace_items.append( - { - "component_id": data.get("component_id"), - "trace": [copy.deepcopy(data)], - } - ) + if ans.get("event") == "node_finished": + node_out = ans.get("data", {}).get("outputs", {}) + if node_out.get("structured"): + structured_output = node_out["structured"] + if return_trace: + data = ans.get("data", {}) + trace_items.append( + { + "component_id": data.get("component_id"), + "trace": [copy.deepcopy(data)], + } + ) final_ans = ans except Exception as e: return get_result(data=f"**ERROR**: {str(e)}") final_ans["data"]["content"] = full_content final_ans["data"]["reference"] = reference + if structured_output: + final_ans["data"]["structured"] = structured_output if return_trace and final_ans: final_ans["data"]["trace"] = trace_items return get_result(data=final_ans)