Module: RubyLLM::Providers::Mistral::Speech
- Included in:
- ChatCompletions
- Defined in:
- lib/ruby_llm/providers/mistral/speech.rb
Overview
Speech dialect for the Mistral API, which requires a voice from its own catalog and returns JSON with base64 audio instead of raw bytes.
Class Method Summary collapse
- .parse_speech_response(response, model:, voice:, format:) ⇒ Object
- .render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
- .stream_speech(payload, model:, voice:, format:) ⇒ Object
Class Method Details
.parse_speech_response(response, model:, voice:, format:) ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/ruby_llm/providers/mistral/speech.rb', line 40 def parse_speech_response(response, model:, voice:, format:) RubyLLM::Speech.new( data: Base64.decode64(response.body['audio_data'].to_s), model: model, voice: voice, format: (format || 'mp3').to_s ) end |
.render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/ruby_llm/providers/mistral/speech.rb', line 31 def render_speech_payload(input, model:, voice:, format:, provider_options: {}) { model: model, input: input, voice_id: voice, response_format: format }.compact.merge() end |
.stream_speech(payload, model:, voice:, format:) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/ruby_llm/providers/mistral/speech.rb', line 11 def stream_speech(payload, model:, voice:, format:) audio = +''.b final = nil stream_events(speech_url(model:), payload.merge(stream: true)) do |event| case event['type'] when 'speech.audio.delta' data = Base64.strict_decode64(event.fetch('audio_data')) audio << data yield SpeechChunk.new(data:, format: format || 'mp3') unless data.empty? when 'speech.audio.done' final = event end end raise Error, 'Mistral speech stream ended before its completion event' unless final usage = final['usage'] || {} RubyLLM::Speech.new(data: audio, model:, voice:, format: format || 'mp3', input_tokens: usage['prompt_tokens'], output_tokens: usage['completion_tokens']) end |