Skip to content

Commit 1103bdf

Browse files
(Ollama) Fix String Value parsing in _parse_arguments_from_tool_call (#30154)
- **Description:** Fix String Value parsing in _parse_arguments_from_tool_call - **Issue:** #30145 --------- Co-authored-by: Chester Curme <[email protected]>
1 parent c0ffc9a commit 1103bdf

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

libs/partners/ollama/langchain_ollama/chat_models.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,17 @@ def _parse_arguments_from_tool_call(
125125
if "function" not in raw_tool_call:
126126
return None
127127
arguments = raw_tool_call["function"]["arguments"]
128-
parsed_arguments = {}
128+
parsed_arguments: dict = {}
129129
if isinstance(arguments, dict):
130130
for key, value in arguments.items():
131131
if isinstance(value, str):
132-
parsed_arguments[key] = _parse_json_string(
132+
parsed_value = _parse_json_string(
133133
value, skip=True, raw_tool_call=raw_tool_call
134134
)
135+
if isinstance(parsed_value, (dict, list)):
136+
parsed_arguments[key] = parsed_value
137+
else:
138+
parsed_arguments[key] = value
135139
else:
136140
parsed_arguments[key] = value
137141
else:

libs/partners/ollama/tests/unit_tests/test_chat_models.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
"""Test chat model integration."""
2-
2+
import json
33
from typing import Dict, Type
44

55
from langchain_tests.unit_tests import ChatModelUnitTests
66

7-
from langchain_ollama.chat_models import ChatOllama
7+
from langchain_ollama.chat_models import ChatOllama, _parse_arguments_from_tool_call
88

99

1010
class TestChatOllama(ChatModelUnitTests):
@@ -15,3 +15,11 @@ def chat_model_class(self) -> Type[ChatOllama]:
1515
@property
1616
def chat_model_params(self) -> Dict:
1717
return {"model": "llama3-groq-tool-use"}
18+
19+
20+
def test__parse_arguments_from_tool_call() -> None:
21+
raw_response = '{"model":"sample-model","message":{"role":"assistant","content":"","tool_calls":[{"function":{"name":"get_profile_details","arguments":{"arg_1":"12345678901234567890123456"}}}]},"done":false}' # noqa: E501
22+
raw_tool_calls = json.loads(raw_response)["message"]["tool_calls"]
23+
response = _parse_arguments_from_tool_call(raw_tool_calls[0])
24+
assert response is not None
25+
assert isinstance(response["arg_1"], str)

0 commit comments

Comments
 (0)