{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.amerint.co/voice-sdk/ox-realtime-v1.schema.json",
  "title": "Ox Realtime 1.0.0 control event",
  "description": "Text control events only. Audio is transported as binary PCM16 frames.",
  "oneOf": [
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "session"
      ],
      "properties": {
        "type": {
          "const": "session.update"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "session": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "item"
      ],
      "properties": {
        "type": {
          "const": "conversation.item.create"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "item": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "response.create"
        },
        "protocol_version": {
          "const": "1.0.0"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "session.close"
        },
        "protocol_version": {
          "const": "1.0.0"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "ping"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "event_id": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "session"
      ],
      "properties": {
        "type": {
          "const": "session.created"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "session": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "session"
      ],
      "properties": {
        "type": {
          "const": "session.updated"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "session": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "input.speech_started"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response_id": {
          "type": "string"
        },
        "generation": {
          "type": "integer"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "input.speech_stopped"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response_id": {
          "type": "string"
        },
        "generation": {
          "type": "integer"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "transcript"
      ],
      "properties": {
        "type": {
          "const": "input.transcript.partial"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "transcript": {
          "type": "string"
        },
        "stability": {
          "type": "number"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "transcript"
      ],
      "properties": {
        "type": {
          "const": "input.transcript.final"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "transcript": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "response"
      ],
      "properties": {
        "type": {
          "const": "response.created"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "delta"
      ],
      "properties": {
        "type": {
          "const": "output.transcript.delta"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "delta": {
          "type": "string"
        },
        "response_id": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "transcript"
      ],
      "properties": {
        "type": {
          "const": "output.transcript.final"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "transcript": {
          "type": "string"
        },
        "response_id": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "output.audio.done"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response_id": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "call_id",
        "name",
        "arguments"
      ],
      "properties": {
        "type": {
          "const": "response.function_call_arguments.done"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "call_id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "arguments": {
          "type": "string",
          "description": "JSON-encoded arguments"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "call_id",
        "name"
      ],
      "properties": {
        "type": {
          "const": "tool.started"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "call_id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "call_id",
        "name",
        "succeeded"
      ],
      "properties": {
        "type": {
          "const": "tool.finished"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "call_id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "succeeded": {
          "type": "boolean"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "response.cancelled"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response_id": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "response"
      ],
      "properties": {
        "type": {
          "const": "response.done"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "response": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "error"
      ],
      "properties": {
        "type": {
          "const": "error"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "error": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "session.end"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "reason": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "const": "pong"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "event_id": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "trace_id",
        "phase",
        "relay_elapsed_ms"
      ],
      "properties": {
        "type": {
          "const": "pandan.relay.trace"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "trace_id": {
          "type": "string"
        },
        "phase": {
          "type": "string"
        },
        "relay_elapsed_ms": {
          "type": "number"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "provider",
        "model",
        "fallback"
      ],
      "properties": {
        "type": {
          "const": "pandan.relay.provider"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "provider": {
          "type": "string"
        },
        "model": {
          "type": "string"
        },
        "fallback": {
          "type": "boolean"
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": true,
      "required": [
        "type",
        "stage",
        "duration_ms",
        "outcome"
      ],
      "properties": {
        "type": {
          "const": "trace.stage"
        },
        "protocol_version": {
          "const": "1.0.0"
        },
        "stage": {
          "type": "string"
        },
        "duration_ms": {
          "type": "number"
        },
        "outcome": {
          "type": "string"
        }
      }
    }
  ]
}
