# # Copyright (c) 2024, Daily # # SPDX-License-Identifier: BSD 2-Clause License # import asyncio import aiohttp import os import sys from pipecat.frames.frames import EndFrame, LLMMessagesFrame from pipecat.pipeline.pipeline import Pipeline from pipecat.pipeline.runner import PipelineRunner from pipecat.pipeline.task import PipelineTask # from pipecat.services.elevenlabs import ElevenLabsTTSService from pipecat.services.cartesia import CartesiaTTSService from pipecat.services.openai import OpenAILLMService from pipecat.transports.services.daily import DailyParams, DailyTransport from runner import configure from loguru import logger from dotenv import load_dotenv load_dotenv(override=True) logger.remove(0) logger.add(sys.stderr, level="DEBUG") async def main(room_url): async with aiohttp.ClientSession() as session: transport = DailyTransport( room_url, None, "Say One Thing From an LLM", DailyParams(audio_out_enabled=True)) # tts = ElevenLabsTTSService( # aiohttp_session=session, # api_key=os.getenv("ELEVENLABS_API_KEY"), # voice_id=os.getenv("ELEVENLABS_VOICE_ID"), # ) llm = OpenAILLMService( api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o") tts = CartesiaTTSService( api_key=os.getenv("CARTESIA_API_KEY"), voice_id="a0e99841-438c-4a64-b679-ae501e7d6091", # Barbershop Man ) messages = [ { "role": "system", "content": "You are an LLM in a WebRTC session, and this is a 'hello world' demo. Say hello to the world.", }] runner = PipelineRunner() task = PipelineTask(Pipeline([llm, tts, transport.output()])) @transport.event_handler("on_first_participant_joined") async def on_first_participant_joined(transport, participant): # await task.queue_frames([LLMMessagesFrame(messages), EndFrame()]) await task.queue_frames([LLMMessagesFrame(messages)]) await runner.run(task) if __name__ == "__main__": (url, token) = configure() asyncio.run(main(url))