ElevenLabs — Example Configuration

Partial supporttextToSpeech.convert is currently instrumented. Use the char_count middleware to track character usage and cost.

Text-to-speech

const { weflayr_setup, weflayr_instrument } = require('weflayr');

weflayr_setup({
  intake_url:    process.env.WEFLAYR_INTAKE_URL,
  client_id:     process.env.WEFLAYR_CLIENT_ID,
  client_secret: process.env.WEFLAYR_CLIENT_SECRET,
  event_mode: 'default',
  ignore_fields: (data) => { delete data.text; return data; },
  methods: [
    {
      call: 'textToSpeech.convert',
      middleware: (args) => ({ char_count: args?.text?.length ?? 0 }),
    },
  ],
});

const { ElevenLabsClient } = require('@elevenlabs/elevenlabs-js');
const client = weflayr_instrument(new ElevenLabsClient({ apiKey: process.env.ELEVENLABS_API_KEY }));
import os
from elevenlabs import ElevenLabs
from weflayr import weflayr_setup, weflayr_instrument

weflayr_setup({
    "intake_url":    os.environ["WEFLAYR_INTAKE_URL"],
    "client_id":     os.environ["WEFLAYR_CLIENT_ID"],
    "client_secret": os.environ["WEFLAYR_CLIENT_SECRET"],
    "event_mode":    "default",
    "ignore_fields": lambda data: {k: v for k, v in data.items() if k != "text"},
    "methods": [
        {
            "call": "text_to_speech.convert",
            "middleware": lambda args, resp: {"char_count": len(args.get("text") or "")},
        },
    ],
})

client = weflayr_instrument(ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"]))

Calling the API

Pass __weflayr_tags on any instrumented call to slice analytics by feature, voice, or environment:

// Rachel — stable default voice available on all ElevenLabs plans
const VOICE_ID = '21m00Tcm4TlvDq8ikWAM';

const audio = await client.textToSpeech.convert(VOICE_ID, {
  text: 'Hello! This is a Weflayr ElevenLabs TTS demo.',
  model_id: 'eleven_multilingual_v2',
  output_format: 'mp3_44100_128',
  __weflayr_tags: {
    feature: 'tts',
    provider: 'elevenlabs',
    customer_id: 'id',
  },
});

// Stream audio chunks to a file
const fs = require('fs');
const chunks = [];
for await (const chunk of audio) {
  chunks.push(chunk);
}
fs.writeFileSync('speech.mp3', Buffer.concat(chunks));
# Rachel — stable default voice available on all ElevenLabs plans
VOICE_ID = "21m00Tcm4TlvDq8ikWAM"

audio = client.text_to_speech.convert(
    voice_id=VOICE_ID,
    text="Hello! This is a Weflayr ElevenLabs TTS demo.",
    model_id="eleven_multilingual_v2",
    output_format="mp3_44100_128",
    __weflayr_tags={
        "feature": "tts",
        "provider": "elevenlabs",
        "customer_id": "id",
    },
)

with open("speech.mp3", "wb") as f:
    for chunk in audio:
        f.write(chunk)

Configuration notes

Setting Value Reason
ignore_fields data.text Strip the synthesised text from events; keep metadata
middleware on textToSpeech.convert char_count Compute character usage for cost tracking