Module: RubyLLM::Providers::XAI::Speech
- Included in:
- ChatCompletions, Responses
- Defined in:
- lib/ruby_llm/providers/xai/speech.rb
Overview
Speech dialect for the xAI Voice API. The /v1/tts endpoint is model-less: it takes text, voice_id, and a required language (defaulted to auto-detection) and returns raw audio bytes.
Class Method Summary collapse
- .parse_speech_response(response, model:, voice:, format:) ⇒ Object
-
.render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument.
-
.speech_url(model:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument.
- .stream_speech(payload, model:, voice:, format:) ⇒ Object
Class Method Details
.parse_speech_response(response, model:, voice:, format:) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/ruby_llm/providers/xai/speech.rb', line 26 def parse_speech_response(response, model:, voice:, format:) RubyLLM::Speech.new( data: response.body, model: model, voice: voice || 'eve', format: (format || 'mp3').to_s ) end |
.render_speech_payload(input, model:, voice:, format:, provider_options: {}) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument
16 17 18 19 20 21 22 23 24 |
# File 'lib/ruby_llm/providers/xai/speech.rb', line 16 def render_speech_payload(input, model:, voice:, format:, provider_options: {}) # rubocop:disable Lint/UnusedMethodArgument payload = { text: input, voice_id: voice, language: 'auto' }.compact payload[:output_format] = { codec: format.to_s } if format Support::Utils.deep_merge(payload, ) end |
.speech_url(model:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument
12 13 14 |
# File 'lib/ruby_llm/providers/xai/speech.rb', line 12 def speech_url(model:) # rubocop:disable Lint/UnusedMethodArgument 'tts' end |
.stream_speech(payload, model:, voice:, format:) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/ruby_llm/providers/xai/speech.rb', line 35 def stream_speech(payload, model:, voice:, format:, &) if payload[:with_timestamps] || payload['with_timestamps'] raise ArgumentError, 'xAI streaming speech does not accept with_timestamps' end stream_speech_response(speech_url(model:), payload, model:, voice:, format:, &) end |