receptionist-agent / src /download.py
datasaur-dev's picture
add download button
020020a
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
import json
def format_conversation_for_download(conversation: list) -> str:
"""Formats the conversation history for download."""
formatted_messages = []
tool_id_to_name_map = {}
for message in conversation:
if isinstance(message, AIMessage) and message.tool_calls:
for tool_call in message.tool_calls:
tool_id_to_name_map[tool_call["id"]] = tool_call["name"]
for message in conversation:
if isinstance(message, HumanMessage):
formatted_messages.append({"role": "user", "content": message.content})
elif isinstance(message, AIMessage):
if not message.content and not message.tool_calls:
continue
ai_dict = {"role": "assistant"}
if message.content:
ai_dict["content"] = message.content
if message.tool_calls:
ai_dict["tool_calls"] = [
{
"type": "function",
"function": {
"name": tc["name"],
"arguments": tc["args"],
},
}
for tc in message.tool_calls
]
formatted_messages.append(ai_dict)
elif isinstance(message, ToolMessage):
tool_name = tool_id_to_name_map.get(message.tool_call_id)
formatted_messages.append(
{
"role": "tool",
"name": tool_name,
"content": message.content,
}
)
return json.dumps(formatted_messages, indent=4)