From c0c410759ea21d4e8916ddb179572e749269d9e0 Mon Sep 17 00:00:00 2001
From: Wey Gu <weyl.gu@gmail.com>
Date: Thu, 27 Feb 2025 11:57:08 +0800
Subject: [PATCH] fix: openai-like openai agent streaming over vLLM (#17927)

---
 .../llama_index/llms/openai/utils.py              | 15 ++++++++++++---
 .../llms/llama-index-llms-openai/pyproject.toml   |  2 +-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/utils.py b/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/utils.py
index 7fde73a16c..c36d57a776 100644
--- a/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/utils.py
+++ b/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/utils.py
@@ -626,10 +626,19 @@ def update_tool_calls(
             # validations to get passed by mypy
             assert t.function is not None
             assert tc_delta.function is not None
-            assert t.function.arguments is not None
-            assert t.function.name is not None
-            assert t.id is not None
 
+            # Initialize fields if they're None
+            # OpenAI(or Compatible)'s streaming API can return partial tool call
+            # information across multiple chunks where some fields may be None in
+            # initial chunks and populated in subsequent ones
+            if t.function.arguments is None:
+                t.function.arguments = ""
+            if t.function.name is None:
+                t.function.name = ""
+            if t.id is None:
+                t.id = ""
+
+            # Update with delta values
             t.function.arguments += tc_delta.function.arguments or ""
             t.function.name += tc_delta.function.name or ""
             t.id += tc_delta.id or ""
diff --git a/llama-index-integrations/llms/llama-index-llms-openai/pyproject.toml b/llama-index-integrations/llms/llama-index-llms-openai/pyproject.toml
index 572492a362..9e42ba647a 100644
--- a/llama-index-integrations/llms/llama-index-llms-openai/pyproject.toml
+++ b/llama-index-integrations/llms/llama-index-llms-openai/pyproject.toml
@@ -29,7 +29,7 @@ exclude = ["**/BUILD"]
 license = "MIT"
 name = "llama-index-llms-openai"
 readme = "README.md"
-version = "0.3.21"
+version = "0.3.22"
 
 [tool.poetry.dependencies]
 python = ">=3.9,<4.0"
-- 
GitLab