mirror of
https://github.com/hwchase17/langchain
synced 2024-11-04 06:00:26 +00:00
Fix Azure Openai function calling in streaming mode (#13768)
- **Description**: This PR addresses an issue with the OpenAI API streaming response, where initially the key (arguments) is provided but the value is None. Subsequently, it updates with {"arguments": "{\n"}, leading to a type inconsistency that causes an exception. The specific error encountered is ValueError: additional_kwargs["arguments"] already exists in this message, but with a different type. This change aims to resolve this inconsistency and ensure smooth API interactions. - **Issue**: None. - **Dependencies**: None. - **Tag maintainer**: @eyurtsev This is an updated version of #13229 based on the refactored code. Credit goes to @superken01. Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
This commit is contained in:
parent
e204657b3c
commit
e6862e6e7d
@ -71,7 +71,17 @@ class BaseMessageChunk(BaseMessage):
|
||||
def _merge_kwargs_dict(
|
||||
self, left: Dict[str, Any], right: Dict[str, Any]
|
||||
) -> Dict[str, Any]:
|
||||
"""Merge additional_kwargs from another BaseMessageChunk into this one."""
|
||||
"""Merge additional_kwargs from another BaseMessageChunk into this one,
|
||||
handling specific scenarios where a key exists in both dictionaries
|
||||
but has a value of None in 'left'. In such cases, the method uses the
|
||||
value from 'right' for that key in the merged dictionary.
|
||||
Example:
|
||||
If left = {"function_call": {"arguments": None}} and
|
||||
right = {"function_call": {"arguments": "{\n"}}
|
||||
then, after merging, for the key "function_call",
|
||||
the value from 'right' is used,
|
||||
resulting in merged = {"function_call": {"arguments": "{\n"}}.
|
||||
"""
|
||||
merged = left.copy()
|
||||
for k, v in right.items():
|
||||
if k not in merged:
|
||||
|
@ -42,6 +42,9 @@ def test_message_chunks() -> None:
|
||||
AIMessageChunk(
|
||||
content="", additional_kwargs={"function_call": {"name": "web_search"}}
|
||||
)
|
||||
+ AIMessageChunk(
|
||||
content="", additional_kwargs={"function_call": {"arguments": None}}
|
||||
)
|
||||
+ AIMessageChunk(
|
||||
content="", additional_kwargs={"function_call": {"arguments": "{\n"}}
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user