Module: RubyLLM::Protocols::Gemini::Speech
- Defined in:
- lib/ruby_llm/protocols/gemini/speech.rb
Overview
Speech generation methods for the Gemini API implementation
Instance Method Summary collapse
-
#parse_speech_response(response, model:, voice:, format:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument.
- #render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
- #speech_url(model:) ⇒ Object
Instance Method Details
#parse_speech_response(response, model:, voice:, format:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ruby_llm/protocols/gemini/speech.rb', line 42 def parse_speech_response(response, model:, voice:, format:) # rubocop:disable Lint/UnusedMethodArgument audio = response.body.dig('candidates', 0, 'content', 'parts', 0, 'inlineData', 'data') raise Error, 'Unexpected response format from Gemini speech generation API' unless audio RubyLLM::Speech.new( data: Base64.decode64(audio), model: model, voice: voice || 'Kore', format: 'pcm' ) end |
#render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ruby_llm/protocols/gemini/speech.rb', line 14 def render_speech_payload(input, model:, voice:, format:, provider_options: {}) RubyLLM.logger.debug { "Ignoring speech format #{format}. Gemini returns PCM audio." } if format payload = { contents: [ { role: 'user', parts: [ { text: input } ] } ], generationConfig: { responseModalities: ['AUDIO'], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: voice || 'Kore' } } } }, model: model } Support::Utils.deep_merge(payload, ) end |
#speech_url(model:) ⇒ Object
10 11 12 |
# File 'lib/ruby_llm/protocols/gemini/speech.rb', line 10 def speech_url(model:) "models/#{model}:generateContent" end |