Skip to main content

Overview

FloeTTSService provides an OpenAI-compatible interface for text-to-speech through Floe — a unified billing ledger for voice AI where one key powers the LLM, STT, and TTS legs of an agent, metered per call and bounded by pre-call spend caps. It extends Pipecat’s OpenAITTSService, so streamed audio, metrics, and tracing work unchanged. BYOK-first. Pass provider_key= with your own vendor key and Floe routes the call on your key, billing only its service fee while still metering the call and enforcing your spend caps. Omit it to go keyless and let Floe manage the keys.

Source Repository

Source code, examples, and issues for the Floe integration

PyPI Package

The pipecat-floe package on PyPI

Floe

Documentation and supported models for Floe

API Keys

Create and manage your Floe agent keys

Installation

This is a community-maintained package distributed separately from pipecat-ai:

Prerequisites

Floe Account Setup

Before using the Floe TTS service, you need:
  1. Floe Account: Sign up at the Floe dashboard
  2. API Key: Create an agent key from your dashboard. New keys come with welcome credit that covers the first calls.

Required Environment Variables

  • FLOE_API_KEY: Your Floe agent key for authentication

Configuration

str
default:"None"
Floe agent key. Falls back to the FLOE_API_KEY environment variable if not provided. Raises ValueError if neither is set.
str
default:"openai/tts-1"
Fully qualified provider/model identifier (for example "openai/tts-1"). A bare model name is rejected by Floe.
str
default:"alloy"
Voice identifier to synthesize with.
str
default:"https://credit-api.floelabs.xyz/v1"
Floe OpenAI-compatible base URL.
str
default:"None"
Optional Floe task ID sent as the X-Floe-Task-Id header, so a per-task budget can bound one conversation. Attached via a custom httpx client; if you pass your own http_client, add the header to it yourself.
str
default:"None"
BYOK. Your upstream vendor key, sent as the X-Floe-Provider-Key header. Floe routes the call on your key and bills only its service fee, while still metering the call and enforcing your spend caps. Omit for the keyless path. Like task_id, it’s attached via a custom httpx client; if you pass your own http_client, add the header to it yourself.
Additional keyword arguments passed through to the underlying OpenAITTSService.

Usage

See the source repository for a complete runnable example wiring a WebSocket transport → STT → LLM → TTS.

Compatibility

Built and verified against Pipecat v1.7.0+. Check the source repository for the latest tested version and changelog.