AI-310: streaming support for @temporalio/openai-agents#2147
Conversation
Wire the @temporalio/workflow-streams primitive into the OpenAI Agents runner
so an agent running inside a Workflow can stream model events to an external
subscriber via a Workflow Stream topic, reaching parity with the Python SDK.
Streaming is exposed through run(agent, input, { stream: true }). The streaming
model Activity publishes each event live to the configured topic and returns the
full event list, which the Workflow yields deterministically on replay (it never
polls the live stream). The user hosts the WorkflowStream; the topic is plugin
config via modelParams.streamingTopic.
| export const STREAMING_TOPIC_NOT_CONFIGURED = { | ||
| type: 'StreamingTopicNotConfigured', | ||
| message: | ||
| 'Streaming requires modelParams.streamingTopic to be set on OpenAIAgentsPlugin. ' + |
There was a problem hiding this comment.
Can we update the readme to ensure we document that clients need to set modelParams / modelParams.streamingTopic on the plugin? And/or have a snippet in the readme showing how people need to update their client code to use streaming, not just the workflow side?
There was a problem hiding this comment.
Also - workflows started via schedules or the Temporal UI/CLI don't get a header at all so streaming can never be enabled for them, right? (IIUC modelParams reaches the Workflow exclusively through the __openai_agents_config header injected at workflow start by the client-side interceptor...) When you're calling configureBundler could you bake in a default modelParams to enable that use case when no header is present? Or would that force streaming to be enabled all the time, which is also not what we want? Maybe just a limitation to document?
There was a problem hiding this comment.
Good catch. Rather than baking defaults into the bundler, I added a defaultModelParams option to the TemporalOpenAIRunner constructor.
There was a problem hiding this comment.
also added the readme snippets.
Add `defaultModelParams` to `TemporalOpenAIRunner`, layered under the client's `modelParams` header, so streaming (and every other model param) can be configured for Workflows started without the client interceptor — a Schedule or the Temporal UI/CLI. Client-set fields still win per field; the inbound interceptor now stores only client-explicit fields so pre-baked defaults can't clobber the constructor defaults. Bring `getStreamedResponse` to parity with `getResponse`: wrap in a generation span and apply the dynamic `ModelSummaryProvider`. Document client-side plugin setup, the `defaultModelParams` layer, and a `truncate` caution for stream heap/history growth.
Adds streaming to the OpenAI Agents integration by wiring in the @temporalio/workflow-streams primitive, mirroring the Python SDK. An agent running inside a Workflow can stream model events to an external subscriber via a Workflow Stream topic, exposed through
run(agent, input, { stream: true }).The streaming model Activity publishes each event live to the configured topic and returns the full event list, which the Workflow yields deterministically on replay rather than polling the live stream. The user hosts the
WorkflowStream; the topic name is plugin config viamodelParams.streamingTopic.