@@ -58,7 +58,7 @@ async def _get_tools(self) -> Optional[List[dict[str, Any]]]:
5858 if f is not None and not isinstance (f , dict ):
5959 f_name = getattr (f , "name" , None )
6060 f_params = getattr (f , "parameters" , None )
61- if hasattr (f_params , "model_dump" ):
61+ if f_params is not None and hasattr (f_params , "model_dump" ):
6262 f_params = f_params .model_dump ()
6363 func_obj = FunctionLike (name = f_name , parameters = f_params )
6464 t = {"type" : t .get ("type" , "function" ), "function" : func_obj }
@@ -70,7 +70,7 @@ async def _get_tools(self) -> Optional[List[dict[str, Any]]]:
7070 # Construct a dict from object-like tool
7171 name = getattr (func , "name" , None )
7272 params = getattr (func , "parameters" , None )
73- if hasattr (params , "model_dump" ):
73+ if params is not None and hasattr (params , "model_dump" ):
7474 params_payload = params .model_dump ()
7575 elif isinstance (params , dict ):
7676 params_payload = params
@@ -135,15 +135,15 @@ async def _call_model(self, messages: list[Message], tools: Optional[List[dict[s
135135 for tool in tools or []:
136136 if isinstance (tool , dict ):
137137 fn = tool .get ("function" )
138- if hasattr (fn , "model_dump" ):
138+ if fn is not None and hasattr (fn , "model_dump" ):
139139 fn_payload = fn .model_dump ()
140140 elif isinstance (fn , dict ):
141141 fn_payload = fn
142142 else :
143143 # Best effort fallback
144144 name = getattr (fn , "name" , None )
145145 params = getattr (fn , "parameters" , None )
146- if hasattr (params , "model_dump" ):
146+ if params is not None and hasattr (params , "model_dump" ):
147147 params_payload = params .model_dump ()
148148 elif isinstance (params , dict ):
149149 params_payload = params
@@ -157,7 +157,7 @@ async def _call_model(self, messages: list[Message], tools: Optional[List[dict[s
157157 func = getattr (tool , "function" , None )
158158 name = getattr (func , "name" , None )
159159 params = getattr (func , "parameters" , None )
160- if hasattr (params , "model_dump" ):
160+ if params is not None and hasattr (params , "model_dump" ):
161161 params_payload = params .model_dump ()
162162 elif isinstance (params , dict ):
163163 params_payload = params
@@ -192,11 +192,11 @@ async def _execute_tool_call(
192192 return tool_call_id , content
193193
194194 def _get_content_from_tool_result (self , tool_result : CallToolResult | str ) -> List [TextContent ]:
195+ if isinstance (tool_result , str ):
196+ return [TextContent (text = tool_result , type = "text" )]
195197 if getattr (tool_result , "structuredContent" , None ):
196198 return [TextContent (text = json .dumps (tool_result .structuredContent ), type = "text" )]
197199 normalized : List [TextContent ] = []
198- if isinstance (tool_result , str ):
199- return [TextContent (text = tool_result , type = "text" )]
200200 for content in getattr (tool_result , "content" , []) or []:
201201 if isinstance (content , TextContent ):
202202 normalized .append (content )
0 commit comments