I’m using the Realtime API to trigger a server-initiated out-of-band self-diagnostic during an active voice session.
Current shape:
response.createresponse.conversation = "none"response.inputomittedresponse.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"andinputomitted, 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
inputto 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:
- Keep
inputomitted and put the active objective/tool context intoinstructions, so the response still uses the default conversation context? - Use
inputwithitem_references to existing conversation items plus explicit diagnostic context? - 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.