Class: Gemini::Live

Inherits:
Object
  • Object
show all
Defined in:
lib/gemini/live.rb,
lib/gemini/live/session.rb,
lib/gemini/live/connection.rb,
lib/gemini/live/configuration.rb,
lib/gemini/live/message_builder.rb

Overview

Live API client for real-time audio/video/text interactions

Examples:

Basic text conversation

client = Gemini::Client.new(api_key)
session = client.live.connect(model: "gemini-2.5-flash-live-preview")

session.on(:setup_complete) { puts "Connected!" }
session.on(:text) { |text| puts "AI: #{text}" }
session.on(:error) { |e| puts "Error: #{e}" }

session.send_text("Hello!")
sleep 5
session.close

Audio conversation

session = client.live.connect(
  model: "gemini-2.5-flash-live-preview",
  response_modality: "AUDIO",
  voice_name: "Puck"
)

session.on(:audio) { |data, mime| play_audio(data) }
session.send_audio(pcm_data)  # 16-bit PCM, 16kHz, mono

With block (auto-close)

client.live.connect(model: "gemini-2.5-flash-live-preview") do |session|
  session.on(:text) { |text| puts text }
  session.send_text("Hello!")
  sleep 5
end  # session.close called automatically

Defined Under Namespace

Classes: Configuration, Connection, MessageBuilder, Session

Instance Method Summary collapse

Constructor Details

#initialize(client:) ⇒ Live

Returns a new instance of Live.



41
42
43
# File 'lib/gemini/live.rb', line 41

def initialize(client:)
  @client = client
end

Instance Method Details

#connect(model: Configuration::DEFAULT_MODEL, response_modality: "TEXT", voice_name: nil, system_instruction: nil, tools: nil, context_window_compression: nil, session_resumption: nil, automatic_activity_detection: true, media_resolution: nil, output_audio_transcription: false) {|session| ... } ⇒ Gemini::Live::Session

Establish a WebSocket connection and return a session

Parameters:

  • model (String) (defaults to: Configuration::DEFAULT_MODEL)

    Model to use (default: “gemini-2.5-flash-live-preview”)

  • response_modality (String) (defaults to: "TEXT")

    “TEXT” or “AUDIO” (default: “TEXT”)

  • voice_name (String) (defaults to: nil)

    Voice for audio responses (Puck, Charon, Kore, etc.)

  • system_instruction (String) (defaults to: nil)

    System prompt

  • tools (Array) (defaults to: nil)

    Tool definitions for function calling

  • context_window_compression (Hash) (defaults to: nil)

    Compression settings for long sessions

  • session_resumption (Hash) (defaults to: nil)

    Session resumption settings

  • automatic_activity_detection (Boolean) (defaults to: true)

    Enable/disable automatic VAD (default: true)

  • media_resolution (String) (defaults to: nil)

    Media resolution setting

  • output_audio_transcription (Boolean) (defaults to: false)

    Enable audio transcription (default: false)

Yields:

  • (session)

    If block given, yields the session and closes it when block returns

Returns:



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/gemini/live.rb', line 60

def connect(
  model: Configuration::DEFAULT_MODEL,
  response_modality: "TEXT",
  voice_name: nil,
  system_instruction: nil,
  tools: nil,
  context_window_compression: nil,
  session_resumption: nil,
  automatic_activity_detection: true,
  media_resolution: nil,
  output_audio_transcription: false,
  &block
)
  config = Configuration.new(
    model: model,
    response_modality: response_modality,
    voice_name: voice_name,
    system_instruction: system_instruction,
    tools: tools,
    context_window_compression: context_window_compression,
    session_resumption: session_resumption,
    automatic_activity_detection: automatic_activity_detection,
    media_resolution: media_resolution,
    output_audio_transcription: output_audio_transcription
  )

  session = Session.new(
    api_key: @client.api_key,
    configuration: config
  )

  if block_given?
    begin
      yield session
    ensure
      session.close
    end
  else
    session
  end
end