This commit is contained in:
Chad Bailey
2024-01-19 16:49:55 +00:00
parent f03e208580
commit c47f3d0c86
3 changed files with 111 additions and 9 deletions

View File

@@ -21,8 +21,9 @@ async def main(room_url):
meeting_duration_minutes,
)
transport.mic_enabled = True
transport.camera_enabled = True
transport.mic_sample_rate = 16000
transport.camera_enabled = True
transport.camera_width = 1024
transport.camera_height = 1024

View File

@@ -44,20 +44,14 @@ async def main(room_url:str):
bot1_messages.append({"role": "assistant", "content": bot1_msg})
bot2_messages.append({"role": "user", "content": bot1_msg})
audio_generator1 = tts1.run_tts(bot1_msg)
async for audio in audio_generator1:
await transport.send_queue.put(QueueFrame(FrameType.AUDIO, audio))
await tts1.say(bot1_msg, transport.send_queue)
bot2_msg = await llm.run_llm(bot2_messages)
print(f"bot2_msg: {bot2_msg}")
bot2_messages.append({"role": "assistant", "content": bot2_msg})
bot1_messages.append({"role": "user", "content": bot2_msg})
audio_generator2 = tts2.run_tts(bot2_msg)
async for audio in audio_generator2:
await transport.send_queue.put(QueueFrame(FrameType.AUDIO, audio))
await tts2.say(bot2_msg, transport.send_queue)
await asyncio.gather(transport.run(), argue())

View File

@@ -0,0 +1,107 @@
import argparse
import asyncio
import requests
import time
import urllib.parse
from dailyai.services.daily_transport_service import DailyTransportService
from dailyai.services.azure_ai_services import AzureLLMService, AzureTTSService
from dailyai.services.elevenlabs_ai_service import ElevenLabsTTSService
from dailyai.services.fal_ai_services import FalImageGenService
from dailyai.queue_frame import QueueFrame, FrameType
async def main(room_url:str):
global transport
global llm
global tts
transport = DailyTransportService(
room_url,
None,
"Respond bot",
5,
)
transport.mic_enabled = True
transport.mic_sample_rate = 16000
transport.camera_enabled = True
transport.camera_width = 1024
transport.camera_height = 1024
llm = AzureLLMService()
tts1 = AzureTTSService()
tts2 = ElevenLabsTTSService()
dalle = FalImageGenService(image_size="1024x1024")
bot1_messages = [
{"role": "system", "content": "You are a stern librarian. You strongly believe that a hot dog is a sandwich. Start by stating this fact in a few sentences, then be prepared to debate this with the user. Your responses should only be a few sentences long."},
]
bot2_messages = [
{"role": "system", "content": "You are a silly cat, and you strongly believe that a hot dog is not a sandwich. Debate this with the user, only responding with a few sentences."},
]
async def get_bot1_statement():
# Run the LLMs synchronously for the back-and-forth
bot1_msg = await llm.run_llm(bot1_messages)
print(f"bot1_msg: {bot1_msg}")
bot1_messages.append({"role": "assistant", "content": bot1_msg})
bot2_messages.append({"role": "user", "content": bot1_msg})
all_audio = bytearray()
async for audio in tts1.run_tts(bot1_msg):
all_audio.extend(audio)
return all_audio
async def get_bot2_statement():
# Run the LLMs synchronously for the back-and-forth
bot2_msg = await llm.run_llm(bot2_messages)
print(f"bot2_msg: {bot2_msg}")
bot2_messages.append({"role": "assistant", "content": bot2_msg})
bot1_messages.append({"role": "user", "content": bot2_msg})
all_audio = bytearray()
async for audio in tts2.run_tts(bot2_msg):
all_audio.extend(audio)
return all_audio
async def argue():
for i in range(1, 5):
print(f"In iteration {i}")
bot1_description = "An older woman dressed as a librarian, cartoon, serious, highly detailed, 8k"
(audio1, image_data1) = await asyncio.gather(
get_bot1_statement(), dalle.run_image_gen(bot1_description)
)
await transport.send_queue.put(
[
QueueFrame(FrameType.IMAGE, image_data1[1]),
QueueFrame(FrameType.AUDIO, audio1),
]
)
bot2_description = "A cat dressed in a hot dog costume, cartoon, bright colors, funny, highly detailed, 8k"
(audio2, image_data2) = await asyncio.gather(
get_bot2_statement(), dalle.run_image_gen(bot2_description)
)
await transport.send_queue.put(
[
QueueFrame(FrameType.IMAGE, image_data2[1]),
QueueFrame(FrameType.AUDIO, audio2),
]
)
await asyncio.gather(transport.run(), argue())
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Simple Daily Bot Sample")
parser.add_argument(
"-u", "--url", type=str, required=True, help="URL of the Daily room to join"
)
args, unknown = parser.parse_known_args()
asyncio.run(main(args.url))