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ā¦
Depending on the client, you may see it as “No tool output found for tool call” instead. Its mirror image, “No tool call found for function call output with call_id“, comes from the same mismatch: an output sent for a call the API no longer has pending.
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!