Skip to content
For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Primary navigation
Theme

Connect

Connect to Live without query parameters. Send session.start with model and session configuration, then wait for session.started. Follow the Live prompting guide before writing instructions.

WebSocket wss://api.openai.com/v1/live/sessions

Connect

package main

import (
	"context"
	"fmt"
	openai "github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/live"
	"log"
	"time"
)

func main() {
	if err := observe(); err != nil {
		log.Fatal(err)
	}
}

func observe() error {
	// Stop waiting if the peer never sends the expected events.
	ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
	defer cancel()
	client := openai.NewClient()
	// New primary session; model belongs in session.start, not the URL.
	connection, err := client.Live.Connect(ctx, live.LiveConnectionOptions{})
	if err != nil {
		return err
	}
	// Release the transport after the terminal event or an error.
	defer connection.Close()

	if err := connection.Send(ctx, live.ClientEventParamOfSessionStart(live.SessionConfigParam{Model: "gpt-live-1"})); err != nil {
		return err
	}
	closeRequested := false
	for {
		received, err := connection.Recv(ctx)
		if err != nil {
			return fmt.Errorf("disconnected before session.closed; final usage unconfirmed: %w", err)
		}
		switch event := received.AsAny().(type) {
		case live.ErrorEvent:
			return fmt.Errorf("Live reported a session error.")
		case live.SessionStartedEvent:
			// Wait for startup before closing the session this example owns.
			fmt.Println("Session ready:", event.Session.ID, event.Session.Model)
			err = connection.Send(ctx, live.ClientEventUnionParam{OfSessionClose: &live.SessionCloseEventParam{}})
			closeRequested = err == nil
		case live.SessionClosedEvent:
			if !closeRequested || event.Reason != "close_requested" {
				return fmt.Errorf("session ended unexpectedly: %s; usage=%v", event.Reason, event.Usage)
			}
			fmt.Println("Final usage:", event.Usage)
			return nil
		}
		if err != nil {
			return err
		}
	}
}