[PR #24826] [CLOSED] fix: handle decoded Ollama tool call arguments #131541

Closed
opened 2026-05-21 17:10:12 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/open-webui/pull/24826
Author: @pragnyanramtha
Created: 5/17/2026
Status: Closed

Base: devHead: codex/ollama-tool-call-arguments


📝 Commits (1)

  • 106f919 Handle decoded Ollama tool call arguments

📊 Changes

2 files changed (+80 additions, -2 deletions)

View changed files

backend/open_webui/test/utils/test_payload.py (+70 -0)
📝 backend/open_webui/utils/payload.py (+10 -2)

📄 Description

Summary

  • Handle OpenAI tool-call arguments that are already decoded or omitted when converting chat messages to Ollama format.
  • Add focused payload conversion tests for JSON-string, decoded-dict, and missing tool-call arguments.

Relates to #23907.

Why

Some OpenAI-compatible chat/tool flows can produce function.arguments as an object or omit it. The Ollama conversion path previously called json.loads unconditionally, which raised before the request could be sent.

Changelog Entry

Description

  • Fix Ollama payload conversion for assistant tool calls whose arguments are already decoded or missing.

Added

  • Unit coverage for tool-call argument conversion in convert_messages_openai_to_ollama.

Changed

  • None.

Deprecated

  • None.

Removed

  • None.

Fixed

  • Prevent json.loads from raising when tool-call arguments are already a dictionary or are omitted.

Security

  • None.

Breaking Changes

  • None.

Additional Information

Validation:

  • TMPDIR=/tmp PYTHONPATH=/home/ubuntu/gh-pr/open-webui-worker-next/backend uv run --no-project --python 3.12 --with pytest --with python-mimeparse --with Markdown --with beautifulsoup4 --with cryptography --with-requirements backend/requirements-min.txt pytest backend/open_webui/test/utils/test_payload.py -q
  • TMPDIR=/tmp uv run --no-project --python 3.12 --with ruff ruff format --check backend/open_webui/utils/payload.py backend/open_webui/test/utils/test_payload.py
  • TMPDIR=/tmp uv run --no-project --python 3.12 --with ruff ruff check backend/open_webui/test/utils/test_payload.py

Screenshots or Videos

  • Not applicable; backend payload conversion change.

Contributor License Agreement


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/open-webui/pull/24826 **Author:** [@pragnyanramtha](https://github.com/pragnyanramtha) **Created:** 5/17/2026 **Status:** ❌ Closed **Base:** `dev` ← **Head:** `codex/ollama-tool-call-arguments` --- ### 📝 Commits (1) - [`106f919`](https://github.com/open-webui/open-webui/commit/106f91925f67db2effbb73ab626dc12fb7245272) Handle decoded Ollama tool call arguments ### 📊 Changes **2 files changed** (+80 additions, -2 deletions) <details> <summary>View changed files</summary> ➕ `backend/open_webui/test/utils/test_payload.py` (+70 -0) 📝 `backend/open_webui/utils/payload.py` (+10 -2) </details> ### 📄 Description ## Summary - Handle OpenAI tool-call arguments that are already decoded or omitted when converting chat messages to Ollama format. - Add focused payload conversion tests for JSON-string, decoded-dict, and missing tool-call arguments. Relates to #23907. ## Why Some OpenAI-compatible chat/tool flows can produce `function.arguments` as an object or omit it. The Ollama conversion path previously called `json.loads` unconditionally, which raised before the request could be sent. # Changelog Entry ### Description - Fix Ollama payload conversion for assistant tool calls whose arguments are already decoded or missing. ### Added - Unit coverage for tool-call argument conversion in `convert_messages_openai_to_ollama`. ### Changed - None. ### Deprecated - None. ### Removed - None. ### Fixed - Prevent `json.loads` from raising when tool-call arguments are already a dictionary or are omitted. ### Security - None. ### Breaking Changes - None. --- ### Additional Information Validation: - `TMPDIR=/tmp PYTHONPATH=/home/ubuntu/gh-pr/open-webui-worker-next/backend uv run --no-project --python 3.12 --with pytest --with python-mimeparse --with Markdown --with beautifulsoup4 --with cryptography --with-requirements backend/requirements-min.txt pytest backend/open_webui/test/utils/test_payload.py -q` - `TMPDIR=/tmp uv run --no-project --python 3.12 --with ruff ruff format --check backend/open_webui/utils/payload.py backend/open_webui/test/utils/test_payload.py` - `TMPDIR=/tmp uv run --no-project --python 3.12 --with ruff ruff check backend/open_webui/test/utils/test_payload.py` ### Screenshots or Videos - Not applicable; backend payload conversion change. ### Contributor License Agreement - [x] By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](https://github.com/open-webui/open-webui/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-05-21 17:10:12 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#131541