import argparse
import asyncio
def extract_arguments():
parser = argparse.ArgumentParser(description="Example")
parser.add_argument(
"-u", "--room-url", type=str, default=os.getenv("DAILY_SAMPLE_ROOM_URL", "")
)
parser.add_argument(
"-t", "--token", type=str, default=os.getenv("DAILY_SAMPLE_ROOM_TOKEN", None)
)
parser.add_argument(
"-p", "--prompt", type=str, default="You are a pirate captain"
)
parser.add_argument("-l", "--language", type=str, default="en-US")
return parser.parse_args()
async def main():
args = extract_arguments()
print(f"room_url: {args.room_url}")
daily_transport = DailyTransport(
args.room_url,
args.token,
"Chatbot",
DailyParams(
audio_in_enabled=True,
audio_out_enabled=True,
),
)
llm = GeminiLiveLLMService(
api_key=os.getenv("GOOGLE_API_KEY"),
settings=GeminiLiveLLMService.Settings(
system_instruction=SYSTEM_INSTRUCTION,
voice="Puck",
language=args.language, # Pass preferred language to LLM
),
)
messages = [ { role: "system", content: args.prompt } ]
context = LLMContext(messages)
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
context,
user_params=LLMUserAggregatorParams(
vad_analyzer=SileroVADAnalyzer(),
),
)
pipeline = Pipeline(
[
daily_transport.input(),
user_aggregator,
llm,
daily_transport.output(),
assistant_aggregator,
]
)
task = PipelineTask(pipeline)
@rtvi.event_handler("on_client_ready")
async def on_client_ready(rtvi):
logger.debug("Client ready")
# Kick off the conversation
await task.queue_frames([LLMRunFrame()])
@transport.event_handler("on_client_disconnected")
async def on_client_disconnected(transport, client):
logger.debug(f"Client disconnected")
await task.cancel()
runner = PipelineRunner(handle_sigint=False)
await runner.run(task)
if __name__ == "__main__":
asyncio.run(main())