Realtime out of band Response

I’m using the Realtime API to trigger a server-initiated out-of-band self-diagnostic during an active voice session.

Current shape:

  • response.create
  • response.conversation = "none"
  • response.input omitted
  • response.tools = [diagnostic_report]
  • response.tool_choice = "required"

The goal is for the model to produce a hidden diagnostic report, not speak to the caller and not write anything back into the default conversation.

The report should answer things like:

  • What objective does the model believe it is currently on?
  • What tools does the model believe are currently available?
  • Is the model ready to move to the next objective?
  • What state/facts from the conversation is it using to make that decision?

My understanding is:

  • With conversation: "none" and input omitted, the response is out-of-band but still uses the default conversation context.
  • If I set response.input, that creates a custom context instead of using the default conversation.
  • Therefore, if I use input to provide diagnostic context, I also need to include or reference the relevant transcript/conversation items myself.

Is that correct?

What is the recommended pattern for this kind of hidden self-diagnostic?

Should I:

  1. Keep input omitted and put the active objective/tool context into instructions, so the response still uses the default conversation context?
  2. Use input with item_references to existing conversation items plus explicit diagnostic context?
  3. Use a separate non-Realtime model call with an explicit transcript/state payload instead?

The main thing I want to avoid is accidentally losing conversation context while trying to add server-side state like objective instructions and the active
tool list.