Spaces:
Sleeping
Sleeping
File size: 1,765 Bytes
020020a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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) |