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

Connect

Attach to an existing Live session. Do not send session.start again.

WebSocket wss://api.openai.com/v1/live/sessions/{session_id}/attach

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()
	// Use an eligible existing Live session ID owned by your project.
	connection, err := client.Live.Sideband.Connect(ctx, "sess_123", live.SidebandConnectionOptions{})
	if err != nil {
		return err
	}
	// Release only this observer, not the owner's session.
	defer connection.Close()

	for {
		received, err := connection.Recv(ctx)
		if err != nil {
			return fmt.Errorf("observer disconnected before a usage update or session.closed: %w", err)
		}
		switch event := received.AsAny().(type) {
		case live.ErrorEvent:
			return fmt.Errorf("Live reported a session error.")
		case live.SessionUsageUpdatedEvent:
			fmt.Println("Current cumulative usage:", event.Usage)
			return nil
		case live.SessionClosedEvent:
			fmt.Println("Final usage:", event.Usage)
			return nil
		}
	}
}