import os
import voicegateway
PROJECT = "pipecat-demo"
def build_task(transport_input, transport_output):
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.task import PipelineParams, PipelineTask
from pipecat.services.cartesia.tts import CartesiaTTSService
from pipecat.services.deepgram.stt import DeepgramSTTService
from pipecat.services.openai.llm import OpenAILLMService
stt = DeepgramSTTService(api_key=os.environ["DEEPGRAM_API_KEY"])
# guard() wraps ONE service for control; it returns a drop-in service.
llm = voicegateway.guard(
OpenAILLMService(api_key=os.environ["OPENAI_API_KEY"], model="gpt-4o-mini"),
fallback=[
OpenAILLMService(api_key=os.environ["OPENAI_API_KEY"], model="gpt-4o")
],
budget="$5.00/day",
project=PROJECT,
)
tts = CartesiaTTSService(api_key=os.environ["CARTESIA_API_KEY"])
pipeline = Pipeline([transport_input, stt, llm, tts, transport_output])
return PipelineTask(
pipeline,
# Pipecat emits the usage MetricsFrames the meter reads only when these
# are on; without them there is nothing for attach() to record.
params=PipelineParams(enable_metrics=True, enable_usage_metrics=True),
# attach the single meter via the exported Observer. Equivalent to
# voicegateway.attach(task, project=PROJECT) after construction.
observers=[voicegateway.Observer(project=PROJECT)],
)