ComposioHQ/composio · error · Error
No run ID found
Error message
No run ID found
What it means
OpenAIProvider.waitAndHandleAssistantStreamToolCalls throws 'No run ID found' when it finishes consuming a streamed assistant (OpenAI Assistants API) response without ever observing a run ID. Without a run ID the SDK cannot retrieve the final run to inspect required actions/tool calls, so the streaming tool-call handling aborts.
Source
Thrown at ts/packages/core/src/provider/OpenAIProvider.ts:480
tool_outputs: toolOutputs,
});
}
// Break if the run status becomes inactive
if (
[
'thread.run.completed',
'thread.run.failed',
'thread.run.cancelled',
'thread.run.expired',
].includes(event.event)
) {
break;
}
}
if (!runId) {
throw new Error('No run ID found');
}
// Handle any final actions after the stream ends
let finalRun = await client.beta.threads.runs.retrieve(runId, {
thread_id: thread.id,
});
while (['queued', 'in_progress', 'requires_action'].includes(finalRun.status)) {
if (finalRun.status === 'requires_action') {
const toolOutputs = await this.handleAssistantMessage(userId, finalRun, options, modifiers);
// Submit tool outputs
finalRun = await client.beta.threads.runs.submitToolOutputs(runId, {
thread_id: thread.id,
tool_outputs: toolOutputs,
});
} else {
// Update the run statusView on GitHub (pinned to 64b1b85502)
Solutions
- Check that you pass the correct threadId and that the run was created and streamed via client.beta.threads.runs.stream
- Pin/upgrade the openai package to a version compatible with your @composio/core version so run-identification events are parsed
- Log the raw stream events to confirm a thread.run event with an id is present; if absent, inspect network/proxy interference
- Retry the request — transient truncation can cause a missing run event
Defensive patterns
Strategy: retry
Validate before calling
if (!threadId || !runId) throw new Error('Missing thread/run before streaming assistant tool calls'); Try / catch
try { await waitAndHandleAssistantStreamToolCalls(...); } catch (e) { if (e instanceof Error && e.message === 'No run ID found') { await retryWithBackoff(...); } else throw e; } Prevention
- Pin compatible openai + @composio/core versions
- Verify thread and run exist before streaming
- Retry once on truncated streams
When it happens
Trigger: Streaming an OpenAI Assistant response (client.beta.threads.runs.stream) where the stream completes but no event carrying thread.run.id (or equivalent run identifier) arrives — e.g. malformed/partial stream, unexpected event ordering, or an API response shape change from a version bump of the openai package.
Common situations: Upgrading the openai SDK or Composio SDK where stream event names changed; proxy or gateway stripping SSE events; network interruption truncating the stream before the run event; using a thread/run created outside the SDK.
Related errors
AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28).
Data as JSON: /api/errors/0d38f1955c14db16.
Report an issue: GitHub.