@@ -926,22 +926,27 @@ async def stream(
926926 ):
927927 yield chunk
928928
929- async def run_client (self , model_spec : str | dict , messages : list [Message ], ** kwargs ):
929+ def _log_messages (self , messages : list [Message ]):
930930 log_debug (f"Input messages: \033 [95m{ len (messages )} messages\033 [0m including system" )
931931 previous_role = None
932932 for i , message in enumerate (messages ):
933933 role = message ["role" ]
934934 if role == "system" :
935935 continue
936- role_char = "u" if role == "user" else "a"
937- log_debug (f"Message \033 [95m{ i } ({ role_char } )\033 [0m: { format_msg_content (message ['content' ])} " )
936+ content = message .get ("content" ) if isinstance (message , dict ) else None
937+ if not content and "tool_calls" in message :
938+ content = truncate_string (json .dumps (message ["tool_calls" ], indent = 2 ), max_length = 1000 )
939+ role_char = role [0 ]
940+ log_debug (f"Message \033 [95m{ i } ({ role_char } )\033 [0m: { format_msg_content (content )} " )
938941 if previous_role == role :
939942 log_debug (
940943 "\033 [91mWARNING: Two consecutive messages from the same role; "
941944 "some providers disallow this.\033 [0m"
942945 )
943946 previous_role = role
944947
948+ async def run_client (self , model_spec : str | dict , messages : list [Message ], ** kwargs ):
949+ self ._log_messages (messages )
945950 response_model = kwargs .get ("response_model" )
946951 client = await self .get_client (model_spec , ** kwargs )
947952 if not response_model :
@@ -1358,29 +1363,18 @@ async def get_client(self, model_spec: str | dict, response_model: type[BaseMode
13581363 return partial (client_callable .func , * client_callable .args , timeout = self .timeout , ** client_callable .keywords )
13591364
13601365 async def run_client (self , model_spec : str | dict , messages : list [Message ] | list [dict [str , Any ]], ** kwargs ):
1361- if self .api == "responses" :
1362- log_debug (f"Input messages: \033 [95m{ len (messages )} messages\033 [0m including system" )
1363- for i , message in enumerate (messages ):
1364- role = message .get ("role" ) if isinstance (message , dict ) else None
1365- content = message .get ("content" ) if isinstance (message , dict ) else None
1366- if role == "system" :
1367- continue
1368- if role in ("user" , "assistant" , "tool" ):
1369- role_char = "u" if role == "user" else "a"
1370- log_debug (f"Message \033 [95m{ i } ({ role_char } )\033 [0m: { format_msg_content (content )} " )
1371- else :
1372- item_type = message .get ("type" ) if isinstance (message , dict ) else type (message ).__name__
1373- log_debug (f"Message \033 [95m{ i } \033 [0m: [{ item_type } ] { truncate_string (str (message ), max_length = 2000 )} " )
1374-
1375- if kwargs .get ("tools" ):
1376- kwargs = dict (kwargs )
1377- kwargs ["tools" ] = self ._transform_responses_tools (kwargs .get ("tools" ))
1378- client = await self .get_client (model_spec , ** kwargs )
1379- result = await client (input = messages , ** kwargs )
1380- log_debug (f"LLM Response: \033 [95m{ truncate_string (str (result ), max_length = 1000 )} \033 [0m\n ---" )
1381- return result
1366+ if self .api == "chat_completions" :
1367+ return await super ().run_client (model_spec , messages , ** kwargs )
1368+
1369+ self ._log_messages (messages )
1370+ if kwargs .get ("tools" ):
1371+ kwargs = dict (kwargs )
1372+ kwargs ["tools" ] = self ._transform_responses_tools (kwargs .get ("tools" ))
1373+ client = await self .get_client (model_spec , ** kwargs )
1374+ result = await client (input = messages , ** kwargs )
1375+ log_debug (f"LLM Response: \033 [95m{ truncate_string (str (result ), max_length = 1000 )} \033 [0m\n ---" )
1376+ return result
13821377
1383- return await super ().run_client (model_spec , messages , ** kwargs )
13841378
13851379
13861380class AzureOpenAI (Llm , AzureOpenAIMixin ):
0 commit comments