mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 10:17:00 +00:00
fix(mistralai): handle null content in tool call responses (#34268)
This commit is contained in:
@@ -148,7 +148,8 @@ def _convert_mistral_chat_message_to_message(
|
|||||||
if role != "assistant":
|
if role != "assistant":
|
||||||
msg = f"Expected role to be 'assistant', got {role}"
|
msg = f"Expected role to be 'assistant', got {role}"
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
content = cast("str", _message["content"])
|
# Mistral returns None for tool invocations
|
||||||
|
content = _message.get("content", "") or ""
|
||||||
|
|
||||||
additional_kwargs: dict = {}
|
additional_kwargs: dict = {}
|
||||||
tool_calls = []
|
tool_calls = []
|
||||||
|
|||||||
@@ -238,6 +238,58 @@ def test__convert_dict_to_message_tool_call() -> None:
|
|||||||
assert _convert_message_to_mistral_chat_message(expected_output) == message
|
assert _convert_message_to_mistral_chat_message(expected_output) == message
|
||||||
|
|
||||||
|
|
||||||
|
def test__convert_dict_to_message_tool_call_with_null_content() -> None:
|
||||||
|
raw_tool_call = {
|
||||||
|
"id": "ssAbar4Dr",
|
||||||
|
"function": {
|
||||||
|
"arguments": '{"name": "Sally", "hair_color": "green"}',
|
||||||
|
"name": "GenerateUsername",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
message = {"role": "assistant", "content": None, "tool_calls": [raw_tool_call]}
|
||||||
|
result = _convert_mistral_chat_message_to_message(message)
|
||||||
|
expected_output = AIMessage(
|
||||||
|
content="",
|
||||||
|
additional_kwargs={"tool_calls": [raw_tool_call]},
|
||||||
|
tool_calls=[
|
||||||
|
ToolCall(
|
||||||
|
name="GenerateUsername",
|
||||||
|
args={"name": "Sally", "hair_color": "green"},
|
||||||
|
id="ssAbar4Dr",
|
||||||
|
type="tool_call",
|
||||||
|
)
|
||||||
|
],
|
||||||
|
response_metadata={"model_provider": "mistralai"},
|
||||||
|
)
|
||||||
|
assert result == expected_output
|
||||||
|
|
||||||
|
|
||||||
|
def test__convert_dict_to_message_with_missing_content() -> None:
|
||||||
|
raw_tool_call = {
|
||||||
|
"id": "ssAbar4Dr",
|
||||||
|
"function": {
|
||||||
|
"arguments": '{"query": "test search"}',
|
||||||
|
"name": "search",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
message = {"role": "assistant", "tool_calls": [raw_tool_call]}
|
||||||
|
result = _convert_mistral_chat_message_to_message(message)
|
||||||
|
expected_output = AIMessage(
|
||||||
|
content="",
|
||||||
|
additional_kwargs={"tool_calls": [raw_tool_call]},
|
||||||
|
tool_calls=[
|
||||||
|
ToolCall(
|
||||||
|
name="search",
|
||||||
|
args={"query": "test search"},
|
||||||
|
id="ssAbar4Dr",
|
||||||
|
type="tool_call",
|
||||||
|
)
|
||||||
|
],
|
||||||
|
response_metadata={"model_provider": "mistralai"},
|
||||||
|
)
|
||||||
|
assert result == expected_output
|
||||||
|
|
||||||
|
|
||||||
def test_custom_token_counting() -> None:
|
def test_custom_token_counting() -> None:
|
||||||
def token_encoder(text: str) -> list[int]:
|
def token_encoder(text: str) -> list[int]:
|
||||||
return [1, 2, 3]
|
return [1, 2, 3]
|
||||||
|
|||||||
Reference in New Issue
Block a user