|
|
|
@ -92,9 +92,10 @@ def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
|
|
|
|
|
The LangChain message.
|
|
|
|
|
"""
|
|
|
|
|
role = _dict.get("role")
|
|
|
|
|
name = _dict.get("name")
|
|
|
|
|
id_ = _dict.get("id")
|
|
|
|
|
if role == "user":
|
|
|
|
|
return HumanMessage(content=_dict.get("content", ""), id=id_)
|
|
|
|
|
return HumanMessage(content=_dict.get("content", ""), id=id_, name=name)
|
|
|
|
|
elif role == "assistant":
|
|
|
|
|
# Fix for azure
|
|
|
|
|
# Also OpenAI returns None for tool invocations
|
|
|
|
@ -104,12 +105,14 @@ def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
|
|
|
|
|
additional_kwargs["function_call"] = dict(function_call)
|
|
|
|
|
if tool_calls := _dict.get("tool_calls"):
|
|
|
|
|
additional_kwargs["tool_calls"] = tool_calls
|
|
|
|
|
return AIMessage(content=content, additional_kwargs=additional_kwargs, id=id_)
|
|
|
|
|
return AIMessage(
|
|
|
|
|
content=content, additional_kwargs=additional_kwargs, name=name, id=id_
|
|
|
|
|
)
|
|
|
|
|
elif role == "system":
|
|
|
|
|
return SystemMessage(content=_dict.get("content", ""), id=id_)
|
|
|
|
|
return SystemMessage(content=_dict.get("content", ""), name=name, id=id_)
|
|
|
|
|
elif role == "function":
|
|
|
|
|
return FunctionMessage(
|
|
|
|
|
content=_dict.get("content", ""), name=_dict.get("name"), id=id_
|
|
|
|
|
content=_dict.get("content", ""), name=cast(str, _dict.get("name")), id=id_
|
|
|
|
|
)
|
|
|
|
|
elif role == "tool":
|
|
|
|
|
additional_kwargs = {}
|
|
|
|
@ -117,8 +120,9 @@ def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage:
|
|
|
|
|
additional_kwargs["name"] = _dict["name"]
|
|
|
|
|
return ToolMessage(
|
|
|
|
|
content=_dict.get("content", ""),
|
|
|
|
|
tool_call_id=_dict.get("tool_call_id"),
|
|
|
|
|
tool_call_id=cast(str, _dict.get("tool_call_id")),
|
|
|
|
|
additional_kwargs=additional_kwargs,
|
|
|
|
|
name=name,
|
|
|
|
|
id=id_,
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
@ -134,13 +138,16 @@ def _convert_message_to_dict(message: BaseMessage) -> dict:
|
|
|
|
|
Returns:
|
|
|
|
|
The dictionary.
|
|
|
|
|
"""
|
|
|
|
|
message_dict: Dict[str, Any]
|
|
|
|
|
message_dict: Dict[str, Any] = {
|
|
|
|
|
"content": message.content,
|
|
|
|
|
"name": message.name,
|
|
|
|
|
}
|
|
|
|
|
if isinstance(message, ChatMessage):
|
|
|
|
|
message_dict = {"role": message.role, "content": message.content}
|
|
|
|
|
message_dict["role"] = message.role
|
|
|
|
|
elif isinstance(message, HumanMessage):
|
|
|
|
|
message_dict = {"role": "user", "content": message.content}
|
|
|
|
|
message_dict["role"] = "user"
|
|
|
|
|
elif isinstance(message, AIMessage):
|
|
|
|
|
message_dict = {"role": "assistant", "content": message.content}
|
|
|
|
|
message_dict["role"] = "assistant"
|
|
|
|
|
if "function_call" in message.additional_kwargs:
|
|
|
|
|
message_dict["function_call"] = message.additional_kwargs["function_call"]
|
|
|
|
|
# If function call only, content is None not empty string
|
|
|
|
@ -152,19 +159,16 @@ def _convert_message_to_dict(message: BaseMessage) -> dict:
|
|
|
|
|
if message_dict["content"] == "":
|
|
|
|
|
message_dict["content"] = None
|
|
|
|
|
elif isinstance(message, SystemMessage):
|
|
|
|
|
message_dict = {"role": "system", "content": message.content}
|
|
|
|
|
message_dict["role"] = "system"
|
|
|
|
|
elif isinstance(message, FunctionMessage):
|
|
|
|
|
message_dict = {
|
|
|
|
|
"role": "function",
|
|
|
|
|
"content": message.content,
|
|
|
|
|
"name": message.name,
|
|
|
|
|
}
|
|
|
|
|
message_dict["role"] = "function"
|
|
|
|
|
elif isinstance(message, ToolMessage):
|
|
|
|
|
message_dict = {
|
|
|
|
|
"role": "tool",
|
|
|
|
|
"content": message.content,
|
|
|
|
|
"tool_call_id": message.tool_call_id,
|
|
|
|
|
}
|
|
|
|
|
message_dict["role"] = "tool"
|
|
|
|
|
message_dict["tool_call_id"] = message.tool_call_id
|
|
|
|
|
|
|
|
|
|
# tool message doesn't have name: https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages
|
|
|
|
|
if message_dict["name"] is None:
|
|
|
|
|
del message_dict["name"]
|
|
|
|
|
else:
|
|
|
|
|
raise TypeError(f"Got unknown type {message}")
|
|
|
|
|
if "name" in message.additional_kwargs:
|
|
|
|
|