Skip to main content
When a GPT-Live conversation needs search, deeper reasoning, or another action that the live model can’t complete on its own, it delegates that work while the live interaction continues. GPT-Live supports two delegation modes, configured in the delegation field of session configuration. Omitted or null delegation defaults to client delegation.

Choose a delegation mode

Start with Responses delegation when its managed workflow fits your task. Choose client delegation when you need more control over the backend’s context, execution, or the results that reach GPT-Live. You choose the mode when you create the session. To change modes, start a new session. In both modes, your application enforces permissions and required confirmations before it runs a tool, and it keeps the authoritative task state.

Configure a delegation mode

Set delegation in the session object. Client delegation:
Responses delegation, with tools:
delegation.responses.service_tier accepts auto, default, flex, or priority. Replacing delegation in a later session.update requires a complete delegation object—nested fields aren’t patched independently. Set delegation to null to reset to client delegation.

Handle client delegation

With client delegation, session.delegation.created identifies a unit of work with target: "client" and a delegation id. The delegation object carries metadata, not the task text, so use transcript events and your application state to work out what the user wants. Save the id to correlate your result.
Return the result with session.commentary.append for content the model should say aloud, or session.thinking.append for quiet context. Set delegation_id to the delegation id. Each event takes a plain-string content of up to 500 tokens.
Repeated appends can continue the same client delegation. The acknowledgment arrives after estimated context injection; it doesn’t prove that the model consumed or spoke the result, or that an external action succeeded.

Handle Responses delegation

By using Responses delegation, session.delegation.created identifies the delegation with target: "responses" and a response_id that binds it to the Responses lifecycle. GPT-Live manages the backend call; don’t send a standalone Responses request into the GPT-Live event stream.
Subsequent Responses events arrive inside a response.event envelope. Dispatch on the nested event.type and preserve the outer delegation_id. Don’t treat top-level response.* values as unwrapped Responses events.
Delegated output text is also injected into the live session, so it can surface as normal transcript and audio output. Live speech and delegated work continue independently: a completed backend response doesn’t mean the user heard the answer.

Complete a client-actionable function call

Read completed function calls from the nested response.output_item.done event inside a response.event envelope. The finished item contains call_id, name, and arguments.
Run your authorized handler, then submit the result as a Responses item with response.item.create.
Submit every required result for the pending tool calls, then explicitly continue the backend response with response.create. Parallel calls require one result per call.
Appending a function result doesn’t automatically continue the response, and it has no standalone success acknowledgment. Keep reading response.event envelopes until the nested lifecycle reaches a terminal event such as response.completed, or an error.