反馈 / #1917
#1917 Codex's client-side tool_search is left out: a Responses client cannot reach its own tools
open · @msola-ht · 0 评论 · 去 GitHub 看
说明
**What I want to do:** use Codex (CLI or Desktop, Responses wire API) against Strata as an agent, with the
client's own tools reachable. Today the model can never learn about the tools the client keeps in reserve, so an
agent session cannot search the web or use anything the client does not declare inline.
Codex's tool discovery runs on the client, so nothing has to run inside Strata. Codex declares it as
```json
{"type": "tool_search", "execution": "client", "description": "Search for additional tools ...", "parameters": {...}}
```
with no `name`. `serve/responses.py` has `tool_search` in `HOSTED_TOOLS` (`61b3fb5d`, line 34), so the declaration is
dropped and the server notes:
```
[strata] /v1/responses: left out the hosted tools tool_search (this server cannot run them)
```
The loop, as measured from real Codex 0.160 traffic, is all client-side:
1. the declaration above, beside the client's ordinary `function` / `custom` / `namespace` tools;
2. the model calls it: `{"type": "tool_search_call", "status": "completed", "execution": "client", "call_id": "...",
"arguments": {"query": "web search internet", "limit": 10}}` - no `name`, `arguments` an object;
3. the client searches its own tools and sends them back in the next request's `input` as
`{"type": "tool_search_output", "call_id": "...", "execution": "client", "tools": [ ... ]}` - the same `tools`
array shape an `additional_tools` item carries (#782), a `namespace` with the found tools inside;
4. the model calls one of them, and that call comes back with `namespace` and `name` (the mapping from #812).
**Workaround today:** keep every tool declared inline. That is what the client no longer does for its larger tool
sets, and it costs prompt tokens on every request.
**What I would like:** run the loop above, opt-in - `"codex_tool_search": true` in `strata-<model>.json`, off by
default - so the default path stays as it is: the declaration stays a hosted tool that is left out, and the two
input items stay unsupported items.
I have a patch that does this and measured the loop end to end with a real Responses client; I will open a pull
request for it.
本站相关内容
相关页面的快捷入口。