|
23 | 23 | from agentlab.llm.chat_api import make_system_message, make_user_message |
24 | 24 | from agentlab.llm.llm_utils import BaseMessage as AgentLabBaseMessage |
25 | 25 | from agentlab.llm.llm_utils import Discussion |
| 26 | +from agentlab.llm.response_api import MessageBuilder |
26 | 27 |
|
27 | 28 | select_dir_instructions = "Select Experiment Directory" |
28 | 29 | AGENT_NAME_KEY = "agent.agent_name" |
@@ -627,12 +628,43 @@ def update_axtree(): |
627 | 628 | return get_obs(key="axtree_txt", default="No AXTree") |
628 | 629 |
|
629 | 630 |
|
| 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 | + |
630 | 655 | def update_chat_messages(): |
631 | 656 | global info |
632 | 657 | agent_info = info.exp_result.steps_info[info.step].agent_info |
633 | 658 | chat_messages = agent_info.get("chat_messages", ["No Chat Messages"]) |
634 | 659 | if isinstance(chat_messages, Discussion): |
635 | 660 | 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) |
636 | 668 | messages = [] # TODO(ThibaultLSDC) remove this at some point |
637 | 669 | for i, m in enumerate(chat_messages): |
638 | 670 | if isinstance(m, BaseMessage): # TODO remove once langchain is deprecated |
|
0 commit comments