Skip to main content

Overview

The Camb.ai SDK supports using Baseten as a TTS provider, allowing you to run MARS models on your own Baseten infrastructure for enhanced control and scalability.

Key Features

  • Self-hosted Infrastructure: Run MARS models on your own Baseten deployment
  • Voice Cloning: Requires reference audio for voice cloning capabilities
  • Streaming Support: Real-time audio streaming
  • Full SDK Integration: Works seamlessly with both Python and TypeScript SDKs

Prerequisites

  • A Baseten account with MARS model deployed
  • Your Baseten API key
  • Your Baseten model URL (mars_pro_url)
  • A reference audio file for voice cloning

Python SDK

Installation

pip install camb-sdk

Usage

import base64
from camb.client import CambAI, save_stream_to_file

client = CambAI(
    tts_provider="baseten",
    provider_params={
        "api_key": "xyz",
        "mars_pro_url": "https://model-xyz.api.baseten.co/environments/production/predict"
    }
)

def main():
    response = client.text_to_speech.tts(
        text="Hello World and my dear friends",
        language="en-us",
        speech_model="mars-pro",
        request_options={
            "additional_body_parameters": {
                "reference_audio": base64.b64encode(open("audio.wav", "rb").read()).decode('utf-8'),
                "reference_language": "en-us"  # required
            },
            "timeout_in_seconds": 300
        }
    )
    save_stream_to_file(response, "tts_output.mp3")
    print("Success! Audio saved to tts_output.mp3")

if __name__ == "__main__":
    main()

TypeScript SDK

Installation

npm install @camb-ai/sdk

Usage

import { CambClient, saveStreamToFile } from '@camb-ai/sdk';
import * as fs from 'fs';

// Initialize client with Baseten provider
const client = new CambClient({
    ttsProvider: 'baseten',
    providerParams: {
        api_key: process.env.BASETEN_API_KEY || 'YOUR_BASETEN_API_KEY',
        mars_pro_url: process.env.BASETEN_URL || 'YOUR_BASETEN_MARS_PRO_URL'
    }
});

async function main() {
    try {
        // Read reference audio file (you need to provide this)
        const referenceAudioPath = process.env.REFERENCE_AUDIO_PATH || 'reference.wav';

        if (!fs.existsSync(referenceAudioPath)) {
            console.error(`Reference audio file not found: ${referenceAudioPath}`);
            console.log('Please provide a reference audio file or set REFERENCE_AUDIO_PATH environment variable');
            return;
        }

        const referenceAudio = fs.readFileSync(referenceAudioPath).toString('base64');

        console.log('Generating speech with Baseten provider...');
        const response = await client.textToSpeech.tts({
            text: 'Hello World and my dear friends',
            language: 'en-us',
            speech_model: 'mars-pro',
            additional_body_parameters: {
                reference_audio: referenceAudio,
                reference_language: 'en-us'  // required
            }
        });

        const outputFile = 'baseten_output.wav';
        await saveStreamToFile(response, outputFile);
        console.log(`✓ Audio generated with Baseten provider and saved to ${outputFile}`);

    } catch (error) {
        console.error('Error:', error.message);
        if (error.body) {
            console.error('Details:', error.body);
        }
    }
}

main();

Configuration

Required Parameters

ParameterDescription
api_keyYour Baseten API key
mars_pro_urlYour Baseten MARS model endpoint URL
reference_audioBase64-encoded reference audio for voice cloning
reference_languageLanguage code of the reference audio (e.g., en-us)

Optional Parameters

ParameterDescriptionDefault
speech_modelMARS model variantmars-pro
languageTarget language for synthesisen-us
output_formatAudio output formatmp3
timeout_in_secondsRequest timeout-

Resources