Chat Completions replay emits an invalid sequence for two messages in one tool-call turn
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
The merge logic lives in Converter.items_to_messages in agents/models/chatcmpl_converter.py, and the SDK comment the report quotes about the rejected sequence sits near it. Start by running the repro snippet from the issue to see the current [assistant(tool_calls), assistant, tool] output. Done means that consecutive same-turn messages fold into the tool-call assistant, the tool result follows immediately, and a later assistant turn stays separate. The existing single-message case should still convert as it does now.
由索引模型根据 Issue 内容生成。
描述
Please read this first
- Have you read the docs? Yes.
- Have you searched for related issues? Yes. #4727 was fixed for a single message following a streamed tool call by #4728; this reports the remaining multi-message case.
Describe the bug
When replaying a Responses-format history ordered as [function_call, message, message, function_call_output], Converter.items_to_messages merges only the first message into the assistant with tool_calls. The second message becomes a separate assistant message before the tool result. The Chat Completions request therefore contains [assistant(tool_calls), assistant, tool]. The SDK's own comment says this sequence is rejected by the API. A message after a refusal in the same tool turn has the same problem.
The malformed payload was observed in a direct converter probe and in the payload passed by Runner.run to a local mocked chat.completions.create. A live HTTP 400 was not measured; the rejection is inferred from the documented Chat Completions tool-call ordering contract and the error shown in #4727.
Debug information
- Agents SDK version: 0.23.1 (also reproduced on
mainat125efa029b4bfd84238bd2c4fd69c3406f802663). - Related library versions: none required for the direct probe.
- Python version: 3.12.
- Operating system: Windows.
- Model and model provider: Chat Completions adapter; local mock client, no paid API call.
- Does the issue reproduce with the latest Agents SDK release? Yes, v0.23.1.
- Does the issue occur consistently or intermittently? Consistently for this input order.
Relevant observed roles:
user
assistant(content='Let me check the weather.', tool_calls=[call_1])
assistant(content='One moment.')
tool(tool_call_id='call_1', content='sunny')
Repro steps
from agents.models.chatcmpl_converter import Converter
items = [
{"role": "user", "content": "What is the weather?"},
{"id": "fc_1", "call_id": "call_1", "name": "get_weather", "arguments": "{}", "type": "function_call"},
{"id": "msg_1", "type": "message", "role": "assistant", "status": "completed", "content": [{"type": "output_text", "text": "Let me check the weather.", "annotations": []}]},
{"id": "msg_2", "type": "message", "role": "assistant", "status": "completed", "content": [{"type": "output_text", "text": "One moment.", "annotations": []}]},
{"type": "function_call_output", "call_id": "call_1", "output": "sunny"},
]
for message in Converter.items_to_messages(items):
print(message)
On v0.23.1, the second assistant message separates the tool-call assistant from its tool result. A control history with just one assistant message between function_call and function_call_output converts correctly.
Expected behavior
The two same-turn text messages should be merged into a single assistant message with the declared tool_calls, immediately followed by the tool result. A later assistant turn after the tool result should stay separate.
- 主要语言
- Python
- 星标
- 30k
- 派生
- 4.9k
- 平均合并
- 15 小时 43 分钟
- 30 天内合并 PR
- 211
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
openai/openai-agents-python 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 77/100
openai/openai-agents-python#5348 · 3 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 4/5 3-5 天 新手友好度 35/100
openai/openai-agents-python#5383 ·
维护者通常 1 天内回复
-
Tool-calling runs get quadratically slower: completed tool calls are re-fingerprinted every turn未关闭
难度 4/5 3-5 天 新手友好度 32/100
openai/openai-agents-python#5382 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 25/100
openai/openai-agents-python#5353 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
enhancement
难度 3/5 1-2 天 新手友好度 65/100
openai/openai-agents-python#5336 · 3 条评论 ·
维护者通常 1 天内回复
查看 openai/openai-agents-python 的全部 Issue
相似的 Issue
-
area: tools documentation good first issue ready for a contributor
难度 2/5 1-3 小时 新手友好度 82/100
eyalgolan/statecraft-israel#873 · 1 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 5 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
bug good first issue
难度 2/5 1-3 小时 新手友好度 85/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复