1515 StepTrace ,
1616 StepMetrics ,
1717 ExecutionMetrics ,
18+ TokenUsage ,
1819)
1920
2021logger = logging .getLogger (__name__ )
@@ -69,17 +70,26 @@ async def execute(self, query: str, context: Optional[Dict[str, Any]] = None) ->
6970 payload = {"inputs" : {"query" : query , ** context }}
7071
7172 if self .verbose :
72- logger .info (f"🚀 Executing CrewAI request: { query } ..." )
73- logger .debug (f"📤 Payload: { json .dumps (payload , indent = 2 )} " )
74-
75- async with httpx .AsyncClient (timeout = self .timeout ) as client :
76- response = await client .post (
77- self .endpoint ,
78- json = payload ,
79- headers = self .headers ,
80- )
81- response .raise_for_status ()
82- data = response .json ()
73+ print (f"🚀 Executing CrewAI request: { query } ..." )
74+ print (f"📤 Payload: { json .dumps (payload , indent = 2 )} " )
75+ print (f"📡 Endpoint: { self .endpoint } , Timeout: { self .timeout } s" )
76+
77+ try :
78+ print ("Creating httpx client..." ) if self .verbose else None
79+ async with httpx .AsyncClient (timeout = self .timeout ) as client :
80+ print ("Making POST request..." ) if self .verbose else None
81+ response = await client .post (
82+ self .endpoint ,
83+ json = payload ,
84+ headers = self .headers ,
85+ )
86+ print (f"Got response: { response .status_code } " ) if self .verbose else None
87+ response .raise_for_status ()
88+ data = response .json ()
89+ print (f"Parsed JSON response" ) if self .verbose else None
90+ except Exception as e :
91+ print (f"HTTP ERROR: { e } " ) if self .verbose else None
92+ raise
8393
8494 if self .verbose :
8595 logger .debug (f"📥 Response: { json .dumps (data , indent = 2 )[:500 ]} ..." )
@@ -110,7 +120,7 @@ def _parse_tasks(self, data: Dict[str, Any]) -> List[StepTrace]:
110120 step = StepTrace (
111121 step_id = task .get ("id" , f"task-{ i } " ),
112122 step_name = task .get ("description" , f"Task { i + 1 } " ),
113- tool_name = task .get ("tool" ),
123+ tool_name = task .get ("tool" ) or "crew_task" ,
114124 parameters = task .get ("inputs" , {}),
115125 output = task .get ("output" , "" ),
116126 success = task .get ("status" ) == "completed" ,
@@ -129,7 +139,7 @@ def _parse_tasks(self, data: Dict[str, Any]) -> List[StepTrace]:
129139 step = StepTrace (
130140 step_id = f"exec-{ i } " ,
131141 step_name = execution .get ("agent_name" , f"Agent { i + 1 } " ),
132- tool_name = execution .get ("tool_used" ),
142+ tool_name = execution .get ("tool_used" ) or "agent_execution" ,
133143 parameters = {},
134144 output = execution .get ("output" , "" ),
135145 success = True ,
@@ -180,10 +190,16 @@ def _calculate_metrics(
180190 total_tokens = sum (step .metrics .tokens or 0 for step in steps )
181191 total_tokens = total_tokens if total_tokens > 0 else None
182192
193+ # Convert integer total_tokens to TokenUsage object
194+ token_usage = None
195+ if total_tokens :
196+ # CrewAI doesn't provide a breakdown, so put all tokens in output_tokens
197+ token_usage = TokenUsage (output_tokens = total_tokens )
198+
183199 return ExecutionMetrics (
184200 total_cost = total_cost ,
185201 total_latency = total_latency ,
186- total_tokens = total_tokens ,
202+ total_tokens = token_usage ,
187203 )
188204
189205 async def health_check (self ) -> bool :
0 commit comments