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



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

Yields:

  • (session)

    If block given, yields the session and closes it when block 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