From 42c42884113d8fe2567f66266fa486be9fcd040e Mon Sep 17 00:00:00 2001 From: teknium1 <127238744+teknium1@users.noreply.github.com> Date: Tue, 19 May 2026 23:09:12 -0700 Subject: [PATCH] fix(chat_completions): broaden tool_name strip docstring + AUTHOR_MAP Salvage follow-up to PR #28958 (savanne-kham): - convert_messages() docstring now explicitly documents the tool_name strip alongside Codex fields, names which providers reject it (Fireworks, Moonshot/Kimi), and why permissive providers (OpenRouter, MiniMax) masked the bug. - AUTHOR_MAP entry for savanne.kham@protonmail.com -> savanne-kham. --- agent/transports/chat_completions.py | 18 ++++++++++++++---- scripts/release.py | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/agent/transports/chat_completions.py b/agent/transports/chat_completions.py index ed5d8b0ba43..fa36301bd81 100644 --- a/agent/transports/chat_completions.py +++ b/agent/transports/chat_completions.py @@ -112,11 +112,21 @@ class ChatCompletionsTransport(ProviderTransport): def convert_messages( self, messages: list[dict[str, Any]], **kwargs ) -> list[dict[str, Any]]: - """Messages are already in OpenAI format — sanitize Codex leaks only. + """Messages are already in OpenAI format — strip internal fields + that strict chat-completions providers reject with HTTP 400/422. - Strips Codex Responses API fields (``codex_reasoning_items`` / - ``codex_message_items`` on the message, ``call_id``/``response_item_id`` - on tool_calls) that strict chat-completions providers reject with 400/422. + Strips: + + - Codex Responses API fields: ``codex_reasoning_items`` / + ``codex_message_items`` on the message, ``call_id`` / + ``response_item_id`` on ``tool_calls`` entries. + - ``tool_name`` on tool-result messages — written by + ``make_tool_result_message()`` for the SQLite FTS index, but not + part of the Chat Completions schema. Strict providers (Fireworks, + Moonshot/Kimi) reject any payload containing it with + ``Extra inputs are not permitted, field: 'messages[N].tool_name'``. + Permissive providers (OpenRouter, MiniMax) silently ignore the + field, which masked the bug for months. """ needs_sanitize = False for msg in messages: diff --git a/scripts/release.py b/scripts/release.py index 718b1079a0c..6658513f9ca 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -372,6 +372,7 @@ AUTHOR_MAP = { "bloodcarter@gmail.com": "bloodcarter", "scott@scotttrinh.com": "scotttrinh", "quocanh261997@gmail.com": "quocanh261997", + "savanne.kham@protonmail.com": "savanne-kham", # PR #28958 salvage (strip tool_name for strict providers) # contributors (from noreply pattern) "david.vv@icloud.com": "davidvv", "wangqiang@wangqiangdeMac-mini.local": "xiaoqiang243",