@@ -131,23 +131,36 @@ def _begin_service_threading(self):
131131 # begin to run the llm request, monitored by context tracker
132132 # we re-use previously created thread for best performance
133133 if DEBUG : logger .info (f"[client] { self .episode_uuid } | before asyncio run self.llm_infer" )
134+
135+ # Check if there's a running event loop
134136 try :
135137 loop = asyncio .get_running_loop ()
136- except :
138+ created_new_loop = False
139+ except RuntimeError :
140+ # No running loop, create a new one
137141 loop = asyncio .new_event_loop ()
138- context_tracker_executor = SharedInferenceTrackerThreadExecutor (self .max_inference_tracker_threads ).get_shared_executor ()
139- future = loop .run_in_executor (
140- context_tracker_executor ,
141- asyncio .run ,
142- self .llm_proxy_with_tracker .chat_completion_request (
143- req = parsed_msg .completion_request ,
144- timeline_uuid = parsed_msg .timeline_uuid ,
145- agent_name = parsed_msg .agent_name ,
146- target_tag = parsed_msg .target_tag ,
147- episode_uuid = parsed_msg .episode_uuid ,
142+ asyncio .set_event_loop (loop )
143+ created_new_loop = True
144+
145+ try :
146+ context_tracker_executor = SharedInferenceTrackerThreadExecutor (self .max_inference_tracker_threads ).get_shared_executor ()
147+ future = loop .run_in_executor (
148+ context_tracker_executor ,
149+ asyncio .run ,
150+ self .llm_proxy_with_tracker .chat_completion_request (
151+ req = parsed_msg .completion_request ,
152+ timeline_uuid = parsed_msg .timeline_uuid ,
153+ agent_name = parsed_msg .agent_name ,
154+ target_tag = parsed_msg .target_tag ,
155+ episode_uuid = parsed_msg .episode_uuid ,
156+ )
148157 )
149- )
150- result = loop .run_until_complete (future ).model_dump_json () # type: ignore
158+ result = loop .run_until_complete (future ).model_dump_json () # type: ignore
159+ finally :
160+ # Clean up the event loop if we created it
161+ if created_new_loop :
162+ loop .close ()
163+ asyncio .set_event_loop (None )
151164
152165 if DEBUG : logger .info (f"[client] { self .episode_uuid } | before send_string (send llm call result)" )
153166
0 commit comments