Skip to content

fix: filter empty tool names in responses API path#87

Open
Danielybw wants to merge 1 commit into
ZhiYi-R:mainfrom
Danielybw:fix/empty-tool-name-filter-responses-api
Open

fix: filter empty tool names in responses API path#87
Danielybw wants to merge 1 commit into
ZhiYi-R:mainfrom
Danielybw:fix/empty-tool-name-filter-responses-api

Conversation

@Danielybw

Copy link
Copy Markdown

问题

Codex desktop 有时会发送包含空名称工具的工具列表,上游 API(DeepSeek、Qwen)严格校验会拒绝,导致 502 错误:

Invalid 'tools[36].function.name': empty string. Expected a string with minimum length 1

根因

现有的 filterEmptyToolNames() 只在 chat completions 路径(处理 ChatTool 类型)生效,但 responses API 路径(handleWithAdapters)使用 CoreTool 类型,没有过滤空名称工具。

修复

  • 新增 filterEmptyCoreToolNames() 函数,在 ToCoreRequest 转换后过滤 CoreTool 列表中的空名称工具
  • 添加完整的单元测试覆盖各种边界情况

变更文件

  • internal/service/server/adapter_dispatch.go: 在 responses API 路径调用过滤函数
  • internal/service/server/filter_empty_tools.go: 新增过滤函数实现
  • internal/service/server/filter_empty_tools_test.go: 新增单元测试

测试

go test ./internal/service/server -run TestFilterEmptyCoreToolNames -v

所有测试用例通过:

  • empty_tools
  • no_empty_names
  • one_empty_name_at_end
  • one_empty_name_in_middle
  • all_empty_names

Add filterEmptyCoreToolNames() to filter tools with empty names
after ToCoreRequest conversion in handleWithAdapters.

Root cause: Codex desktop sometimes sends tools with empty names
that upstream APIs (DeepSeek, Qwen) reject with a 400 error.

The existing filterEmptyToolNames() only worked for chat completions
path (ChatTool type). This fix adds a parallel filter for CoreTool
type used in the responses API path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant