@@ -159,7 +159,11 @@ async def run_agent_sse(req: RunAgentRequest) -> StreamingResponse:
159159 session_id = req .session_id ,
160160 )
161161 if not session :
162- raise HTTPException (status_code = 404 , detail = "Session not found" )
162+ e = HTTPException (status_code = 404 , detail = "Session not found" )
163+ telemetry .trace_agent_server_finish (
164+ path = "/run_sse" , func_result = "" , exception = e
165+ )
166+ raise e
163167
164168 # Convert the events to properly formatted SSE
165169 async def event_generator ():
@@ -212,7 +216,7 @@ async def event_generator():
212216 except Exception as e :
213217 logger .exception ("Error in event_generator: %s" , e )
214218 telemetry .trace_agent_server_finish (
215- path = "/invoke " , func_result = "" , exception = e
219+ path = "/run_sse " , func_result = "" , exception = e
216220 )
217221 yield f"data: { json .dumps ({'error' : str (e )})} \n \n "
218222 # Returns a streaming response with the proper media type for SSE
@@ -222,6 +226,17 @@ async def event_generator():
222226 media_type = "text/event-stream" ,
223227 )
224228
229+ # Move the custom /run_sse route to the beginning of the routes list for priority matching (without deleting the ADK default route)
230+ routes = self .app .router .routes
231+ for i , r in enumerate (routes ):
232+ if (
233+ getattr (r , "path" , None ) == "/run_sse"
234+ and "POST" in getattr (r , "methods" , set ())
235+ and getattr (r ,"endpoint" , None ) == run_agent_sse
236+ ):
237+ routes .insert (0 , routes .pop (i ))
238+ break
239+
225240 # Attach ASGI middleware for unified telemetry across all routes
226241 self .app .add_middleware (AgentkitTelemetryHTTPMiddleware )
227242
@@ -236,13 +251,25 @@ async def _invoke_compat(request: Request):
236251 for k , v in dict (headers ).items ()
237252 if k .lower () not in {"authorization" , "token" }
238253 }
254+ # trace request attributes on current span
255+ telemetry .trace_agent_server (
256+ func_name = "_invoke_compat" ,
257+ span = span ,
258+ headers = telemetry_headers ,
259+ text = "" ,
260+ )
261+
239262 user_id = headers .get ("user_id" ) or "agentkit_user"
240263 session_id = headers .get ("session_id" ) or ""
241264
242265 # Determine app_name from loader
243266 app_names = self .server .agent_loader .list_agents ()
244267 if not app_names :
245- raise HTTPException (status_code = 404 , detail = "No agents configured" )
268+ exception = HTTPException (status_code = 404 , detail = "No agents configured" )
269+ telemetry .trace_agent_server_finish (
270+ path = "/invoke" , func_result = "" , exception = exception
271+ )
272+ raise exception
246273 app_name = app_names [0 ]
247274
248275 # Parse payload and convert to ADK Content
@@ -266,13 +293,6 @@ async def _invoke_compat(request: Request):
266293 text = ""
267294 content = types .UserContent (parts = [types .Part (text = text or "" )])
268295
269- # trace request attributes on current span
270- telemetry .trace_agent_server (
271- func_name = "_invoke_compat" ,
272- span = span ,
273- headers = telemetry_headers ,
274- text = text or "" ,
275- )
276296
277297 # Ensure session exists
278298 session = await self .server .session_service .get_session (
@@ -305,10 +325,10 @@ async def event_generator():
305325 # finish span on successful end of stream handled by middleware
306326 pass
307327 except Exception as e :
308- yield f'data: {{"error": "{ str (e )} "}}\n \n '
309328 telemetry .trace_agent_server_finish (
310329 path = "/invoke" , func_result = "" , exception = e
311330 )
331+ yield f'data: {{"error": "{ str (e )} "}}\n \n '
312332
313333 return StreamingResponse (
314334 event_generator (),
0 commit comments