Added async OpenAI services (#1)
* added async openai services * added async openai services * added Deepgram service with 05 example * modernized the 'say one thing' example * async all the things * cleanup and user greeting * more cleanup
This commit is contained in:
@@ -13,6 +13,7 @@ from dailyai.orchestrator import OrchestratorConfig, Orchestrator
|
||||
from dailyai.message_handler.message_handler import MessageHandler
|
||||
from dailyai.services.ai_services import AIServiceConfig
|
||||
from dailyai.services.azure_ai_services import AzureImageGenService, AzureTTSService, AzureLLMService
|
||||
from dailyai.services.deepgram_ai_services import DeepgramTTSService
|
||||
|
||||
def add_bot_to_room(room_url, token, expiration) -> None:
|
||||
|
||||
|
||||
55
src/samples/theoretical-to-real/01a-greet-user.py
Normal file
55
src/samples/theoretical-to-real/01a-greet-user.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import asyncio
|
||||
import time
|
||||
from typing import AsyncGenerator
|
||||
|
||||
from dailyai.output_queue import OutputQueueFrame, FrameType
|
||||
from dailyai.services.daily_transport_service import DailyTransportService
|
||||
from dailyai.services.azure_ai_services import AzureTTSService
|
||||
from dailyai.services.deepgram_ai_services import DeepgramTTSService
|
||||
|
||||
async def main(room_url):
|
||||
# create a transport service object using environment variables for
|
||||
# the transport service's API key, room url, and any other configuration.
|
||||
# services can all define and document the environment variables they use.
|
||||
# services all also take an optional config object that is used instead of
|
||||
# environment variables.
|
||||
#
|
||||
# the abstract transport service APIs presumably can map pretty closely
|
||||
# to the daily-python basic API
|
||||
meeting_duration_minutes = 1
|
||||
transport = DailyTransportService(
|
||||
room_url,
|
||||
None,
|
||||
"Greeter",
|
||||
meeting_duration_minutes,
|
||||
)
|
||||
transport.mic_enabled = True
|
||||
|
||||
# similarly, create a tts service
|
||||
tts = DeepgramTTSService()
|
||||
|
||||
# Get the generator for the audio. This will start running in the background,
|
||||
# and when we ask the generator for its items, we'll get what it's generated.
|
||||
|
||||
# Register an event handler so we can play the audio when the participant joins.
|
||||
print("settting up handler")
|
||||
@transport.event_handler("on_participant_joined")
|
||||
async def on_participant_joined(transport, participant):
|
||||
print(f"participant joined: {participant['info']['userName']}")
|
||||
if participant["info"]["isLocal"]:
|
||||
return
|
||||
audio_generator: AsyncGenerator[bytes, None] = tts.run_tts(f"Hello there, {participant['info']['userName']}!")
|
||||
|
||||
async for audio in audio_generator:
|
||||
transport.output_queue.put(OutputQueueFrame(FrameType.AUDIO_FRAME, audio))
|
||||
|
||||
print("setting up call state handler")
|
||||
@transport.event_handler("on_call_state_updated")
|
||||
async def on_call_joined(transport, state):
|
||||
print(f"call state callback: {state}")
|
||||
|
||||
await transport.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main("https://chad-hq.daily.co/howdy"))
|
||||
@@ -1,7 +1,9 @@
|
||||
import asyncio
|
||||
|
||||
from dailyai.output_queue import OutputQueueFrame, FrameType
|
||||
from dailyai.services.azure_ai_services import AzureLLMService, AzureTTSService, AzureImageGenServiceREST
|
||||
from dailyai.services.azure_ai_services import AzureTTSService
|
||||
from dailyai.services.open_ai_services import OpenAILLMService, OpenAIImageGenService
|
||||
from dailyai.services.deepgram_ai_services import DeepgramTTSService
|
||||
from dailyai.services.daily_transport_service import DailyTransportService
|
||||
|
||||
async def main(room_url, token):
|
||||
@@ -23,9 +25,9 @@ async def main(room_url, token):
|
||||
transport.camera_width = 1024
|
||||
transport.camera_height = 1024
|
||||
|
||||
llm = AzureLLMService()
|
||||
tts = AzureTTSService()
|
||||
dalle = AzureImageGenServiceREST()
|
||||
llm = OpenAILLMService()
|
||||
tts = DeepgramTTSService()
|
||||
dalle = OpenAIImageGenService()
|
||||
|
||||
async def get_all_audio(text):
|
||||
all_audio = bytearray()
|
||||
@@ -44,7 +46,7 @@ async def main(room_url, token):
|
||||
}
|
||||
]
|
||||
)
|
||||
print(f"got llm for {month}")
|
||||
print(f"got llm for {month}, {inference_text}")
|
||||
|
||||
(image, audio) = await asyncio.gather(
|
||||
*[dalle.run_image_gen(inference_text, "1024x1024"), get_all_audio(inference_text)]
|
||||
@@ -90,4 +92,4 @@ async def main(room_url, token):
|
||||
print("Done")
|
||||
|
||||
if __name__=="__main__":
|
||||
asyncio.run(main("https://moishe.daily.co/Lettvins", None))
|
||||
asyncio.run(main("https://chad-hq.daily.co/howdy", None))
|
||||
|
||||
Reference in New Issue
Block a user