HipcallTts.Registry (hipcall_tts v0.5.0)

View Source

Provider registry for HipcallTts.

This module maintains a registry of available TTS providers and provides functions to retrieve provider modules and delegate introspection calls.

Providers

The following providers are registered:

  • :openai - OpenAI TTS API
  • :elevenlabs - ElevenLabs TTS API
  • :polly - AWS Polly TTS service
  • :soniox - Soniox TTS API

Examples

# Get list of available providers
HipcallTts.Registry.providers()
# => [:openai, :elevenlabs, :polly, :soniox]

# Get provider module
{:ok, module} = HipcallTts.Registry.get_provider(:openai)
# => {:ok, HipcallTts.Providers.OpenAI}

# Get models for a provider
{:ok, models} = HipcallTts.Registry.models(:openai)
# => {:ok, [%{id: "tts-1", name: "TTS-1", ...}, ...]}

# Get voices for a provider
{:ok, voices} = HipcallTts.Registry.voices(:openai)
# => {:ok, [%{id: "alloy", name: "Alloy", ...}, ...]}

Summary

Functions

Returns the capabilities of the given provider.

Returns models compatible with a specific voice for the given provider.

Gets the module for a given provider name.

Returns a list of supported languages for the given provider.

Returns a list of available models for the given provider.

Returns a list of all registered provider names as atoms.

Returns a list of available voices for the given provider.

Functions

capabilities(provider)

@spec capabilities(atom()) :: {:ok, map()} | {:error, String.t()}

Returns the capabilities of the given provider.

Delegates to the provider module's capabilities/0 function.

Parameters

  • provider - The provider name as an atom

Returns

  • {:ok, capabilities} - Capabilities map on success
  • {:error, message} - Error if the provider is invalid

Examples

{:ok, caps} = HipcallTts.Registry.capabilities(:openai)
# => {:ok, %{streaming: true, formats: ["mp3", "wav"], ...}}

{:error, message} = HipcallTts.Registry.capabilities(:invalid)
# => {:error, "Unknown provider: invalid"}

compatible_models(provider, voice_id)

@spec compatible_models(atom(), String.t()) :: {:ok, list()} | {:error, String.t()}

Returns models compatible with a specific voice for the given provider.

For providers like AWS Polly where some voices only support certain engines, this filters the model list accordingly. For other providers, returns all models.

Parameters

  • provider - The provider name as an atom
  • voice_id - The voice identifier string

Returns

  • {:ok, [model]} - List of compatible model maps on success
  • {:error, message} - Error if the provider is invalid

Examples

{:ok, models} = HipcallTts.Registry.compatible_models(:polly, "Filiz")
# => {:ok, [%{id: "standard", ...}]}

{:ok, models} = HipcallTts.Registry.compatible_models(:polly, "Amy")
# => {:ok, [%{id: "standard", ...}, %{id: "neural", ...}]}

get_provider(name)

@spec get_provider(atom()) :: {:ok, module()} | {:error, String.t()}

Gets the module for a given provider name.

Parameters

  • name - The provider name as an atom (e.g., :openai, :elevenlabs, :polly, :soniox)

Returns

  • {:ok, module} - If the provider is found
  • {:error, message} - If the provider is not found

Examples

{:ok, module} = HipcallTts.Registry.get_provider(:openai)
# => {:ok, HipcallTts.Providers.OpenAI}

{:error, message} = HipcallTts.Registry.get_provider(:invalid)
# => {:error, "Unknown provider: invalid"}

languages(provider)

@spec languages(atom()) :: {:ok, list()} | {:error, String.t()}

Returns a list of supported languages for the given provider.

Delegates to the provider module's languages/0 function.

Parameters

  • provider - The provider name as an atom

Returns

  • {:ok, [language]} - List of language maps on success
  • {:error, message} - Error if the provider is invalid

Examples

{:ok, languages} = HipcallTts.Registry.languages(:openai)
# => {:ok, [%{code: "en", name: "English", ...}, ...]}

{:error, message} = HipcallTts.Registry.languages(:invalid)
# => {:error, "Unknown provider: invalid"}

models(provider)

@spec models(atom()) :: {:ok, list()} | {:error, String.t()}

Returns a list of available models for the given provider.

Delegates to the provider module's models/0 function.

Parameters

  • provider - The provider name as an atom

Returns

  • {:ok, [model]} - List of model maps on success
  • {:error, message} - Error if the provider is invalid

Examples

{:ok, models} = HipcallTts.Registry.models(:openai)
# => {:ok, [%{id: "tts-1", name: "TTS-1", ...}, ...]}

{:error, message} = HipcallTts.Registry.models(:invalid)
# => {:error, "Unknown provider: invalid"}

providers()

@spec providers() :: [atom()]

Returns a list of all registered provider names as atoms.

Returns

A list of provider atoms.

Examples

HipcallTts.Registry.providers()
# => [:openai, :elevenlabs, :polly]

voices(provider)

@spec voices(atom()) :: {:ok, list()} | {:error, String.t()}

Returns a list of available voices for the given provider.

Delegates to the provider module's voices/0 function.

Parameters

  • provider - The provider name as an atom

Returns

  • {:ok, [voice]} - List of voice maps on success
  • {:error, message} - Error if the provider is invalid

Examples

{:ok, voices} = HipcallTts.Registry.voices(:openai)
# => {:ok, [%{id: "alloy", name: "Alloy", gender: :neutral, ...}, ...]}

{:error, message} = HipcallTts.Registry.voices(:invalid)
# => {:error, "Unknown provider: invalid"}