Class: Gemini::Live::Session
- Inherits:
-
Object
- Object
- Gemini::Live::Session
- Defined in:
- lib/gemini/live/session.rb
Overview
Live API session manager
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
-
#last_resumption_token ⇒ Object
readonly
Returns the value of attribute last_resumption_token.
-
#usage_metadata ⇒ Object
readonly
Returns the value of attribute usage_metadata.
Instance Method Summary collapse
-
#activity_end ⇒ Object
Manual VAD control - signal activity end.
-
#activity_start ⇒ Object
Manual VAD control - signal activity start.
-
#close ⇒ Object
Close the session.
- #connected? ⇒ Boolean
-
#initialize(api_key:, configuration:) ⇒ Session
constructor
A new instance of Session.
-
#on(event, &block) ⇒ Object
Register event handler Supported events: :setup_complete - Session setup completed :text - Text response received (text) :audio - Audio data received (base64_data, mime_type) :data - Other inline data received (base64_data, mime_type) :tool_call - Tool call requested (function_calls) :interrupted - User interrupted the model :turn_complete - Model turn completed :generation_complete - Generation completed :usage_metadata - Token usage info received (metadata) :session_resumption - Session resumption token updated (update) :go_away - Connection will close soon (info) :error - Error occurred (error) :close - Connection closed (code, reason).
-
#send_audio(audio_data, mime_type: "audio/pcm;rate=16000") ⇒ Object
Send audio data (Base64 encoded PCM).
-
#send_realtime_text(text) ⇒ Object
Send text input via realtimeInput.text (universal form).
-
#send_text(text, turn_complete: true) ⇒ Object
Send text message via clientContent.turns.
-
#send_tool_response(function_responses) ⇒ Object
Send tool response.
-
#send_video(image_data, mime_type: "image/jpeg") ⇒ Object
Send video/image data (Base64 encoded).
- #setup_complete? ⇒ Boolean
Constructor Details
#initialize(api_key:, configuration:) ⇒ Session
Returns a new instance of Session.
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/gemini/live/session.rb', line 12 def initialize(api_key:, configuration:) @api_key = api_key @configuration = configuration @event_handlers = Hash.new { |h, k| h[k] = [] } @connected = false @setup_complete = false @last_resumption_token = nil @usage_metadata = nil @connection = nil setup_connection end |
Instance Attribute Details
#configuration ⇒ Object (readonly)
Returns the value of attribute configuration.
10 11 12 |
# File 'lib/gemini/live/session.rb', line 10 def configuration @configuration end |
#last_resumption_token ⇒ Object (readonly)
Returns the value of attribute last_resumption_token.
10 11 12 |
# File 'lib/gemini/live/session.rb', line 10 def last_resumption_token @last_resumption_token end |
#usage_metadata ⇒ Object (readonly)
Returns the value of attribute usage_metadata.
10 11 12 |
# File 'lib/gemini/live/session.rb', line 10 def @usage_metadata end |
Instance Method Details
#activity_end ⇒ Object
Manual VAD control - signal activity end
104 105 106 107 |
# File 'lib/gemini/live/session.rb', line 104 def activity_end ensure_setup_complete! @connection.send(MessageBuilder.activity_end) end |
#activity_start ⇒ Object
Manual VAD control - signal activity start
98 99 100 101 |
# File 'lib/gemini/live/session.rb', line 98 def activity_start ensure_setup_complete! @connection.send(MessageBuilder.activity_start) end |
#close ⇒ Object
Close the session
110 111 112 113 114 |
# File 'lib/gemini/live/session.rb', line 110 def close @connection&.close @connected = false @setup_complete = false end |
#connected? ⇒ Boolean
116 117 118 |
# File 'lib/gemini/live/session.rb', line 116 def connected? @connected && @connection&.connected? end |
#on(event, &block) ⇒ Object
Register event handler Supported events:
:setup_complete - Session setup completed
:text - Text response received (text)
:audio - Audio data received (base64_data, mime_type)
:data - Other inline data received (base64_data, mime_type)
:tool_call - Tool call requested (function_calls)
:interrupted - User interrupted the model
:turn_complete - Model turn completed
:generation_complete - Generation completed
:usage_metadata - Token usage info received (metadata)
:session_resumption - Session resumption token updated (update)
:go_away - Connection will close soon (info)
:error - Error occurred (error)
:close - Connection closed (code, reason)
40 41 42 43 |
# File 'lib/gemini/live/session.rb', line 40 def on(event, &block) @event_handlers[event.to_sym] << block self end |
#send_audio(audio_data, mime_type: "audio/pcm;rate=16000") ⇒ Object
Send audio data (Base64 encoded PCM)
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/gemini/live/session.rb', line 67 def send_audio(audio_data, mime_type: "audio/pcm;rate=16000") ensure_setup_complete! encoded_data = audio_data.is_a?(String) && audio_data.encoding == Encoding::BINARY ? Base64.strict_encode64(audio_data) : audio_data = MessageBuilder.realtime_input( audio_data: encoded_data, mime_type: mime_type ) @connection.send() end |
#send_realtime_text(text) ⇒ Object
Send text input via realtimeInput.text (universal form). Works with every currently-deployed Live model, including gemini-3.1-flash-live-preview and native-audio variants.
61 62 63 64 |
# File 'lib/gemini/live/session.rb', line 61 def send_realtime_text(text) ensure_setup_complete! @connection.send(MessageBuilder.realtime_text(text)) end |
#send_text(text, turn_complete: true) ⇒ Object
Send text message via clientContent.turns. This is the legacy form used by native-audio Live models. Newer models such as gemini-3.1-flash-live-preview reject this payload — use #send_realtime_text instead, which works on every Live model.
49 50 51 52 53 54 55 56 |
# File 'lib/gemini/live/session.rb', line 49 def send_text(text, turn_complete: true) ensure_setup_complete! = MessageBuilder.client_content( text: text, turn_complete: turn_complete ) @connection.send() end |
#send_tool_response(function_responses) ⇒ Object
Send tool response
91 92 93 94 95 |
# File 'lib/gemini/live/session.rb', line 91 def send_tool_response(function_responses) ensure_setup_complete! = MessageBuilder.tool_response(function_responses) @connection.send() end |
#send_video(image_data, mime_type: "image/jpeg") ⇒ Object
Send video/image data (Base64 encoded)
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/gemini/live/session.rb', line 79 def send_video(image_data, mime_type: "image/jpeg") ensure_setup_complete! encoded_data = image_data.is_a?(String) && image_data.encoding == Encoding::BINARY ? Base64.strict_encode64(image_data) : image_data = MessageBuilder.realtime_input( video_data: encoded_data, mime_type: mime_type ) @connection.send() end |
#setup_complete? ⇒ Boolean
120 121 122 |
# File 'lib/gemini/live/session.rb', line 120 def setup_complete? @setup_complete end |