Skip to main content

ElevenLabs Text-to-Speech components for Haystack.

Project description

ElevenLabs Haystack Integration

This repository contains an integration of ElevenLabs' Text-to-Speech API with Haystack pipelines. This package allows you to convert text to speech using ElevenLabs' API and optionally save the generated audio to AWS S3.

Installation

pip install elevenlabs_haystack

Setting Up API Keys

ElevenLabs API Key

To access the ElevenLabs API, you need to create an account and obtain an API key.

  1. Go to the ElevenLabs website and sign up for an account.
  2. Once logged in, navigate to the Profile section.
  3. In the API section, generate a new API key.
  4. Copy the API key.

AWS Credentials

To store generated audio files on AWS S3, you need AWS credentials (Access Key ID, Secret Access Key) and specify a region.

  1. If you don’t have an AWS account, sign up at AWS.
  2. Create a new IAM user and assign the necessary permissions to allow the user to upload files to S3. The AmazonS3FullAccess policy is sufficient for this example.
  3. Once the IAM user is created, download or note the AWS Access Key ID and Secret Access Key.
  4. Identify the AWS Region where your S3 bucket resides (e.g., us-east-1). This information can be found in the AWS Management Console.
  5. Finally, create or identify the S3 bucket where the generated audio files will be saved.

Create a .env file in the root directory with the following content (replace with your actual credentials):

ELEVENLABS_API_KEY=sk_your_elevenlabs_api_key_here
AWS_ACCESS_KEY_ID=your_aws_access_key_id
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key
AWS_REGION_NAME=us-east-1
AWS_S3_BUCKET_NAME=your_s3_bucket_name

These variables will be automatically loaded using dotenv and used to access ElevenLabs and AWS services securely.

Usage

Basic Text-to-Speech Example

This example shows how to use the ElevenLabsTextToSpeech component to convert text to speech and save the generated audio file locally or in an AWS S3 bucket. It uses environment variables to access sensitive credentials.

from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech

# Initialize the ElevenLabsTextToSpeech component using environment variables for sensitive data
tts = ElevenLabsTextToSpeech(
    elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
    output_folder="audio_files",  # Save the generated audio locally
    voice_id="Xb7hH8MSUJpSbSDYk0k2",  # ElevenLabs voice ID (Alice)
    aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"),  # S3 bucket for optional upload
    aws_s3_output_folder="s3_files",  # Save the generated audio to AWS S3
    aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
    aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
    aws_region_name=Secret.from_env_var("AWS_REGION_NAME"),  # AWS region
    voice_settings={
        "stability": 0.75,
        "similarity_boost": 0.75,
        "style": 0.5,
        "use_speaker_boost": True,  # Optional voice settings
    },
)

# Run the text-to-speech conversion
result = tts.run("Hello, world!")

# Print the result
print(result)

"""
{
    "id": "elevenlabs-id",
    "file_name": "audio_files/elevenlabs-id.mp3",
    "s3_file_name": "s3_files/elevenlabs-id.mp3",
    "s3_bucket_name": "test-bucket",
    "s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""

Example Using Haystack Pipeline

This example demonstrates how to integrate the ElevenLabsTextToSpeech component into a Haystack pipeline. Additionally, we define a WelcomeTextGenerator component that generates a personalized welcome message.

from haystack import component, Pipeline
from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech

# Define a simple component to generate a welcome message
@component
class WelcomeTextGenerator:
    """
    A component generating a personal welcome message and making it upper case.
    """
    @component.output_types(welcome_text=str, note=str)
    def run(self, name: str):
        return {
            "welcome_text": f'Hello {name}, welcome to Haystack!'.upper(),
            "note": "welcome message is ready"
        }

# Create a Pipeline
text_pipeline = Pipeline()

# Add WelcomeTextGenerator to the Pipeline
text_pipeline.add_component(
    name="welcome_text_generator",
    instance=WelcomeTextGenerator()
)

# Add ElevenLabsTextToSpeech to the Pipeline using environment variables
text_pipeline.add_component(
    name="tts",
    instance=ElevenLabsTextToSpeech(
        elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
        output_folder="audio_files",  # Save the generated audio locally
        voice_id="Xb7hH8MSUJpSbSDYk0k2",  # ElevenLabs voice ID (Alice)
        aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"),  # S3 bucket for optional upload
        aws_s3_output_folder="s3_files",  # Save the generated audio to AWS S3
        aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
        aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
        aws_region_name=Secret.from_env_var("AWS_REGION_NAME"),  # Load region from env
        voice_settings={
            "stability": 0.75,
            "similarity_boost": 0.75,
            "style": 0.5,
            "use_speaker_boost": True,  # Optional voice settings
        },
    ),
)

# Connect the output of WelcomeTextGenerator to the input of ElevenLabsTextToSpeech
text_pipeline.connect(sender="welcome_text_generator.welcome_text", receiver="tts")

# Run the pipeline with a sample name
result = text_pipeline.run({"welcome_text_generator": {"name": "Bilge"}})

# Print the result
print(result)

"""
{
    "id": "elevenlabs-id",
    "file_name": "audio_files/elevenlabs-id.mp3",
    "s3_file_name": "s3_files/elevenlabs-id.mp3",
    "s3_bucket_name": "test-bucket",
    "s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elevenlabs_haystack-0.4.5.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

elevenlabs_haystack-0.4.5-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file elevenlabs_haystack-0.4.5.tar.gz.

File metadata

  • Download URL: elevenlabs_haystack-0.4.5.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for elevenlabs_haystack-0.4.5.tar.gz
Algorithm Hash digest
SHA256 bb02727bd9af1151f639dc4cbc843ef50faa30ee7cf738b54a36b425e1bb84eb
MD5 aca6bee80dc8448bbf9134183f2d9cbd
BLAKE2b-256 3d6eb23630610777f3ae490d0d066d937d5831abd263f68aa9a5ba8906e245c5

See more details on using hashes here.

File details

Details for the file elevenlabs_haystack-0.4.5-py3-none-any.whl.

File metadata

File hashes

Hashes for elevenlabs_haystack-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 7571330bd983a207ac48abae95dd5c8ef76eb6eeed6f7a8137c2293b7b00f9d1
MD5 8743ebbd73a93c2ca20d5d59ee9b30c6
BLAKE2b-256 91c20050b7faaadd0700c04e5b8f99e75f79bdfbe83ccff3f06c91d2f4092e5c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page