Skip to content

Commit 3f5078e

Browse files
authored
Unify LLM message logging (#1841)
1 parent c34ab44 commit 3f5078e

1 file changed

Lines changed: 19 additions & 25 deletions

File tree

lumen/ai/llm.py

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

13861380
class AzureOpenAI(Llm, AzureOpenAIMixin):

0 commit comments

Comments
 (0)