Created
April 26, 2025 02:16
-
-
Save kwindla/c2f0950112a3818ab498292835f65a5b to your computer and use it in GitHub Desktop.
DailyTransport, Gladia, Tagalog / English mixed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Copyright (c) 2024–2025, Daily | |
# | |
# SPDX-License-Identifier: BSD 2-Clause License | |
# | |
import argparse | |
import asyncio | |
import os | |
from dotenv import load_dotenv | |
from loguru import logger | |
from pipecat.audio.vad.silero import SileroVADAnalyzer | |
from pipecat.pipeline.pipeline import Pipeline | |
from pipecat.pipeline.runner import PipelineRunner | |
from pipecat.pipeline.task import PipelineParams, PipelineTask | |
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext | |
from pipecat.services.gladia.config import GladiaInputParams, LanguageConfig | |
from pipecat.services.gladia.stt import GladiaSTTService | |
from pipecat.services.openai.llm import OpenAILLMService | |
from pipecat.services.openai.stt import OpenAISTTService | |
from pipecat.services.openai.tts import OpenAITTSService | |
from pipecat.transcriptions.language import Language | |
from pipecat.transports.base_transport import TransportParams | |
from pipecat.transports.network.small_webrtc import SmallWebRTCTransport | |
from pipecat.transports.network.webrtc_connection import SmallWebRTCConnection | |
from pipecat.transports.services.daily import DailyParams, DailyTransport | |
load_dotenv(override=True) | |
async def run_bot(): | |
logger.info(f"Starting bot") | |
transport = DailyTransport( | |
os.getenv("DAILY_ROOM_URL"), | |
os.getenv("DAILY_TOKEN"), | |
"Respond bot", | |
params=DailyParams( | |
audio_in_enabled=True, | |
audio_out_enabled=True, | |
transcription_enabled=False, | |
vad_audio_passthrough=True, | |
vad_enabled=True, | |
vad_analyzer=SileroVADAnalyzer(), | |
), | |
) | |
stt = GladiaSTTService( | |
api_key=os.getenv("GLADIA_API_KEY"), | |
params=GladiaInputParams( | |
language_config=LanguageConfig( | |
languages=[Language.EN, Language.TL], | |
) | |
), | |
) | |
tts = OpenAITTSService(api_key=os.getenv("OPENAI_API_KEY"), voice="ballad") | |
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY")) | |
messages = [ | |
{ | |
"role": "system", | |
"content": "If the user says something in English, respond in English. If the user says something in Tagalog, say: 'Hey, that's Tagalog.', and then respond in Tagalog.", | |
}, | |
] | |
context = OpenAILLMContext(messages) | |
context_aggregator = llm.create_context_aggregator(context) | |
pipeline = Pipeline( | |
[ | |
transport.input(), # Transport user input | |
stt, # STT | |
context_aggregator.user(), # User responses | |
llm, # LLM | |
tts, # TTS | |
transport.output(), # Transport bot output | |
context_aggregator.assistant(), # Assistant spoken responses | |
] | |
) | |
task = PipelineTask( | |
pipeline, | |
params=PipelineParams( | |
allow_interruptions=True, | |
audio_out_sample_rate=24000, | |
enable_metrics=True, | |
enable_usage_metrics=True, | |
report_only_initial_ttfb=True, | |
), | |
) | |
@transport.event_handler("on_client_connected") | |
async def on_client_connected(transport, client): | |
logger.info(f"Client connected") | |
# Kick off the conversation. | |
messages.append({"role": "user", "content": "Say 'ready'"}) | |
await task.queue_frames([context_aggregator.user().get_context_frame()]) | |
@transport.event_handler("on_client_disconnected") | |
async def on_client_disconnected(transport, client): | |
logger.info(f"Client disconnected") | |
await task.cancel() | |
runner = PipelineRunner() | |
await runner.run(task) | |
if __name__ == "__main__": | |
asyncio.run(run_bot()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment