1919from threading import Lock
2020from typing import Any , Callable
2121
22- from app .agent .listen_chat_agent import ListenChatAgent , logger
23- from app .model .chat import AgentModelConfig , Chat
24- from app .service .task import ActionCreateAgentData , Agents , get_task_lock
2522from camel .messages import BaseMessage
2623from camel .models import ModelFactory
2724from camel .toolkits import FunctionTool , RegisteredAgentToolkit
2825from camel .types import ModelPlatformType
2926
27+ from app .agent .listen_chat_agent import ListenChatAgent , logger
28+ from app .model .chat import AgentModelConfig , Chat
29+ from app .service .task import ActionCreateAgentData , Agents , get_task_lock
30+
3031# Thread-safe reference to main event loop using contextvars
3132# This ensures each request has its own event loop reference,
3233# avoiding race conditions
3334_main_event_loop_var : contextvars .ContextVar [asyncio .AbstractEventLoop
3435 | None ] = contextvars .ContextVar (
3536 "_main_event_loop" ,
36- default = None )
37+ default = None
38+ )
3739
3840# Global fallback for main event loop reference
3941# Used when contextvars don't propagate to worker threads
@@ -77,10 +79,12 @@ def _schedule_async_task(coro):
7779 asyncio .run_coroutine_threadsafe (coro , main_loop )
7880 else :
7981 # This should not happen in normal operation - log error and skip
80- logging .error ("No event loop available for async task "
81- "scheduling, task skipped. Ensure "
82- "set_main_event_loop() is called "
83- "before parallel agent creation." )
82+ logging .error (
83+ "No event loop available for async task "
84+ "scheduling, task skipped. Ensure "
85+ "set_main_event_loop() is called "
86+ "before parallel agent creation."
87+ )
8488
8589
8690def agent_model (
@@ -96,8 +100,10 @@ def agent_model(
96100):
97101 task_lock = get_task_lock (options .project_id )
98102 agent_id = str (uuid .uuid4 ())
99- logger .info (f"Creating agent: { agent_name } with id: { agent_id } "
100- f"for project: { options .project_id } " )
103+ logger .info (
104+ f"Creating agent: { agent_name } with id: { agent_id } "
105+ f"for project: { options .project_id } "
106+ )
101107 # Use thread-safe scheduling to support parallel agent creation
102108 _schedule_async_task (
103109 task_lock .put_queue (
@@ -106,7 +112,10 @@ def agent_model(
106112 "agent_name" : agent_name ,
107113 "agent_id" : agent_id ,
108114 "tools" : tool_names or [],
109- })))
115+ }
116+ )
117+ )
118+ )
110119
111120 # Determine model configuration - use custom config if provided,
112121 # otherwise use task defaults
@@ -117,11 +126,14 @@ def agent_model(
117126 for attr in config_attrs :
118127 effective_config [attr ] = getattr (custom_model_config , attr ,
119128 None ) or getattr (options , attr )
120- extra_params = (custom_model_config .extra_params
121- or options .extra_params or {})
122- logger .info (f"Agent { agent_name } using custom model config: "
123- f"platform={ effective_config ['model_platform' ]} , "
124- f"type={ effective_config ['model_type' ]} " )
129+ extra_params = (
130+ custom_model_config .extra_params or options .extra_params or {}
131+ )
132+ logger .info (
133+ f"Agent { agent_name } using custom model config: "
134+ f"platform={ effective_config ['model_platform' ]} , "
135+ f"type={ effective_config ['model_type' ]} "
136+ )
125137 else :
126138 for attr in config_attrs :
127139 effective_config [attr ] = getattr (options , attr )
@@ -163,13 +175,14 @@ def agent_model(
163175 if agent_name == Agents .browser_agent :
164176 try :
165177 model_platform_enum = ModelPlatformType (
166- effective_config ["model_platform" ].lower ())
178+ effective_config ["model_platform" ].lower ()
179+ )
167180 if model_platform_enum in {
168- ModelPlatformType .OPENAI ,
169- ModelPlatformType .AZURE ,
170- ModelPlatformType .OPENAI_COMPATIBLE_MODEL ,
171- ModelPlatformType .LITELLM ,
172- ModelPlatformType .OPENROUTER ,
181+ ModelPlatformType .OPENAI ,
182+ ModelPlatformType .AZURE ,
183+ ModelPlatformType .OPENAI_COMPATIBLE_MODEL ,
184+ ModelPlatformType .LITELLM ,
185+ ModelPlatformType .OPENROUTER ,
173186 }:
174187 model_config ["parallel_tool_calls" ] = False
175188 except (ValueError , AttributeError ):
0 commit comments