Skip to content

Commit 4e973ac

Browse files
committed
adding markdown display for MessageBuilder in xray
1 parent ef6f648 commit 4e973ac

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

src/agentlab/analyze/agent_xray.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from agentlab.llm.chat_api import make_system_message, make_user_message
2424
from agentlab.llm.llm_utils import BaseMessage as AgentLabBaseMessage
2525
from agentlab.llm.llm_utils import Discussion
26+
from agentlab.llm.response_api import MessageBuilder
2627

2728
select_dir_instructions = "Select Experiment Directory"
2829
AGENT_NAME_KEY = "agent.agent_name"
@@ -627,12 +628,43 @@ def update_axtree():
627628
return get_obs(key="axtree_txt", default="No AXTree")
628629

629630

631+
def dict_to_markdown(d: dict):
632+
"""
633+
Convert a dictionary to a clean markdown representation, recursively.
634+
635+
dict: type = dict[str, str | list[dict[...]]]
636+
"""
637+
if not d:
638+
return "No Data"
639+
res = ""
640+
for k, v in d.items():
641+
if isinstance(v, dict):
642+
res += f"## {k}\n{dict_to_markdown(v)}\n"
643+
elif isinstance(v, list):
644+
res += f"## {k}\n"
645+
for i, item in enumerate(v):
646+
if isinstance(item, dict):
647+
res += f"### Item {i}\n{dict_to_markdown(item)}\n"
648+
else:
649+
res += f"- {item}\n"
650+
else:
651+
res += f"- **{k}**: {v}\n"
652+
return res
653+
654+
630655
def update_chat_messages():
631656
global info
632657
agent_info = info.exp_result.steps_info[info.step].agent_info
633658
chat_messages = agent_info.get("chat_messages", ["No Chat Messages"])
634659
if isinstance(chat_messages, Discussion):
635660
return chat_messages.to_markdown()
661+
662+
if isinstance(chat_messages, list) and isinstance(chat_messages[0], MessageBuilder):
663+
chat_messages = [
664+
m.to_markdown() if not isinstance(m, dict) else dict_to_markdown(m)
665+
for m in chat_messages
666+
]
667+
return "\n\n".join(chat_messages)
636668
messages = [] # TODO(ThibaultLSDC) remove this at some point
637669
for i, m in enumerate(chat_messages):
638670
if isinstance(m, BaseMessage): # TODO remove once langchain is deprecated

src/agentlab/llm/response_api.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,19 @@ def to_markdown(self) -> str:
118118
if "text" in item:
119119
content.append(item["text"])
120120
elif "image" in item:
121-
content.append(f"![image]({item['image']})")
122-
res = f"{self.role}: " + "\n".join(content)
121+
content.append(f"![Image]({item['image']})")
122+
123+
# Format the role as a header
124+
res = f"## {self.role.capitalize()} Message\n\n"
125+
126+
# Add content with spacing between items
127+
res += "\n\n---\n\n".join(content)
128+
129+
# Add tool call ID if the role is "tool"
123130
if self.role == "tool":
124131
assert self.tool_call_id is not None, "Tool call ID is required for tool messages"
125-
res += f"\nTool call ID: {self.tool_call_id}"
132+
res += f"\n\n---\n\n**Tool Call ID:** `{self.tool_call_id}`"
133+
126134
return res
127135

128136

0 commit comments

Comments
 (0)