createRealtimeSessionWebSocket method

Future<WebsocketRealtimeSessionController> createRealtimeSessionWebSocket({
  1. required RealtimeModel model,
  2. List<Modality> modalities = const [Modality.audio, Modality.text],
  3. String? instructions,
  4. SpeechVoice? voice,
  5. BetaAudioFormat inputAudioFormat = BetaAudioFormat.pcm16,
  6. BetaAudioFormat outputAudioFormat = BetaAudioFormat.pcm16,
  7. InputAudioTranscription? inputAudioTranscription,
  8. NoiseReduction? inputAudioNoiseReduction,
  9. TurnDetection? turnDetection,
  10. ToolChoice? toolChoice,
  11. num? temperature,
  12. int? maxResponseOutputTokens,
  13. num? speed,
  14. Tracing? tracing,
  15. String? clientSecretAnchor,
  16. int? clientSecretSeconds,
  17. List<RealtimeFunctionToolHandler>? initialTools,
})

Implementation

Future<WebsocketRealtimeSessionController> createRealtimeSessionWebSocket(
    {required RealtimeModel model,
    List<Modality> modalities = const [Modality.audio, Modality.text],
    String? instructions,
    SpeechVoice? voice,
    BetaAudioFormat inputAudioFormat = BetaAudioFormat.pcm16,
    BetaAudioFormat outputAudioFormat = BetaAudioFormat.pcm16,
    InputAudioTranscription? inputAudioTranscription,
    NoiseReduction? inputAudioNoiseReduction,
    TurnDetection? turnDetection,
    ToolChoice? toolChoice,
    num? temperature,
    int? maxResponseOutputTokens,
    num? speed,
    Tracing? tracing, // "auto", Map<String,dynamic>, or null
    // ── Client-secret options ───────────────────────────────────────────
    String? clientSecretAnchor, // created_at
    int? clientSecretSeconds, // 10 – 7200
    List<RealtimeFunctionToolHandler>? initialTools}) async {
  final session = await createRealtimeSession(
      model: model,
      modalities: modalities,
      instructions: instructions,
      voice: voice,
      inputAudioFormat: inputAudioFormat,
      outputAudioFormat: outputAudioFormat,
      inputAudioTranscription: inputAudioTranscription,
      inputAudioNoiseReduction: inputAudioNoiseReduction,
      turnDetection: turnDetection,
      toolChoice: toolChoice,
      temperature: temperature,
      maxResponseOutputTokens: maxResponseOutputTokens,
      speed: speed,
      tracing: tracing,
      clientSecretAnchor: clientSecretAnchor,
      clientSecretSeconds: clientSecretSeconds,
      tools: [...(initialTools?.map((e) => e.metadata) ?? [])]);

  final url = baseUrl.resolve("realtime").replace(scheme: baseUrl.scheme.replaceFirst("http", "ws"));

  final ws = await WebSocketChannel.connect(Uri.parse("$url?model=${model.toJson()}"), protocols: [
    "realtime",
    // Auth
    "openai-insecure-api-key." + (session.clientSecret!.value),
    // Beta protocol, required
    "openai-beta.realtime-v1"
  ]);

  return WebsocketRealtimeSessionController(webSocket: ws, initialTools: initialTools);
}