async def main():
async with aiohttp.ClientSession() as session:
# Configure transport
(room_url, token) = await configure(session)
transport = DailyTransport(
room_url,
token,
"Chatbot",
DailyParams(
audio_out_enabled=True,
camera_out_enabled=True,
vad_enabled=True,
transcription_enabled=True
),
)
# Initialize conversation context with duohub memory
initial_messages = [
{
"role": "system",
"content": "You are Chatbot, a friendly, helpful robot..."
}
]
context = Window(
messages=initial_messages,
memory_id='your-memory-id', # Replace with your duohub memory ID
api_key=os.getenv("DUOHUB_API_KEY")
)
# Initialize services
tts = CartesiaTTSService(
api_key=os.getenv("CARTESIA_API_KEY"),
voice_id="your-voice-id"
)
llm = OpenAILLMService(
api_key=os.getenv("OPENAI_API_KEY"),
model="gpt-4"
)
# Create context aggregator
context_aggregator = llm.create_context_aggregator(context)
# Build pipeline
pipeline = Pipeline([
transport.input(),
context_aggregator.user(),
llm,
tts,
transport.output(),
context_aggregator.assistant(),
])
task = PipelineTask(pipeline, PipelineParams(allow_interruptions=True))
# Handle new participants
@transport.event_handler("on_first_participant_joined")
async def on_first_participant_joined(transport, participant):
await transport.capture_participant_transcription(participant["id"])
await task.queue_frames([LLMMessagesFrame(initial_messages)])
# Run the pipeline
runner = PipelineRunner()
await runner.run(task)
if __name__ == "__main__":
asyncio.run(main())