If you enable the OpenAI ResponsesâŻAPI together with a vector store in AIâŻEngine, twoâstep questions crash with No tool output foundâŚ. A quick fix is to disable the ResponsesâŻAPI; the sections below explain why the bug happens and how rawâAPI users can avoid it too.
AIâŻEngine
Turning on the ResponsesâŻAPIâŻ+âŻVector Store option lets the assistant use file_search to pull passages from your PDFs or Markdown and every WordPress helper you expose, such as wp_create_post or wp_upload_media.
All goodâuntil someone asks a twoâpart question that needs both tools. GPTâ4o sends one function call, waits for your reply, then sends the second. Because the ResponsesâŻAPI expects all calls and outputs in a single response, AIâŻEngine throws:
No tool output found for function callâŚ
Singleâtool prompts are fine; multiâtoolâŻ+âŻvector store is what breaks.
Quick Fix
In AIâŻEngineâŻââŻSettingsâŻââŻDevTools, switch off âUse ResponsesâŻAPI,â or phrase questions so that only one tool fires per turn.
AI Engine Roadmap
Stateful collector â intercept the assistantâs first reply, keep asking âcontinueâ until every function_call arrives, then run them together.
Smart gating â when a prompt clearly contains âandâ or âalso,â temporarily disable file_search so the model stays in normal multiâfunction mode.
Wait for OpenAI â once the platform fixes parallel calls with vector stores, you can reâenable the ResponsesâŻAPI and enjoy true oneâshot automation.
All these approaches are workâarounds; a real fix must come from OpenAI.
Direct Use of the OpenAI API
The same bug appears in custom apps that combine file_search (or any vector tool) with two or more custom functions.
What breaks
Desired flow â the assistant replies once with [function_call A, function_call B]. You execute both and return both outputs.
Actual flow with file_search on â the assistant sends only function_call A. After you answer, it sends function_call B. The ResponsesâŻAPI complains because B should have been in the first response.
Reasoningâmode models (GPTâ4o, o4âmini) prefer to chain tools turnâbyâturn, but the API spec demands they come together. Hence the clash.
Cleaner approaches
Collector loop â keep calling POSTâŻ/responses with previous_response_id until the assistant stops emitting new function_calls, then execute everything at once.
Selective tool set â answer the vectorâstore part first, then send a second prompt for the remaining tools.
Hang tight â OpenAI has acknowledged the bug; once fixed, multiâcall orchestration should âjust work.â
// pseudoâcollector
let messages = [];
let pending = [];
let res = await openai.responses.create({ model, tools, messages });
while (res.choices[0].message.tool_calls) {
pending.push(...res.choices[0].message.tool_calls);
res = await openai.responses.create({
model,
tools,
previous_response_id: res.id,
messages
});
}
// run pending â send outputs
For now: keep it singleâtool or singleâturn
If you see No tool output found⌠in your logs, ask yourself: âAm I calling two tools and file_search in the same turn?â If so, split the steps or use the collector loop above until the next model update.
That should keep your chats hummingâwhether you run WordPress with AIâŻEngine or wire straight into the OpenAIâŻAPI. Happy building!