From 18c2b37358623f20e0c5314a61da20d01e04812d Mon Sep 17 00:00:00 2001 From: Chad Bailey Date: Thu, 22 Feb 2024 15:39:21 -0600 Subject: [PATCH] groq worqs --- pyproject.toml | 1 + src/dailyai/services/ai_services.py | 1 - .../services/base_transport_service.py | 4 --- src/dailyai/services/groq_ai_services.py | 32 +++++++++++++++++-- ...c-listen-respond-interruptible-refactor.py | 3 +- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2f5d8dc95..c007dbf7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [ "daily-python", "fal", "faster_whisper", + "groq", "google-cloud-texttospeech", "numpy", "openai", diff --git a/src/dailyai/services/ai_services.py b/src/dailyai/services/ai_services.py index 45376b74e..bb8f3429f 100644 --- a/src/dailyai/services/ai_services.py +++ b/src/dailyai/services/ai_services.py @@ -150,7 +150,6 @@ class TTSService(AIService): print(f"audio chunk size: {len(audio_chunk)}") size = 8000 for i in range(0, len(audio_chunk), size): - print(f"i is {i}") yield AudioQueueFrame(audio_chunk[i : i+size]) yield TTSCompletedFrame(text) diff --git a/src/dailyai/services/base_transport_service.py b/src/dailyai/services/base_transport_service.py index 387fc2d2d..c155425be 100644 --- a/src/dailyai/services/base_transport_service.py +++ b/src/dailyai/services/base_transport_service.py @@ -392,13 +392,9 @@ class BaseTransportService(): # if interrupted, we just pull frames off the queue and discard them if not self._is_interrupted.is_set(): - print( - f"~~~ not interrupted so popping frame of type {type(frame)}") if frame: if isinstance(frame, AudioQueueFrame): chunk = frame.data - print( - f"~~~ length of this chunk: {len(chunk)}") all_audio_frames.extend(chunk) b.extend(chunk) diff --git a/src/dailyai/services/groq_ai_services.py b/src/dailyai/services/groq_ai_services.py index 4a6c5f6ef..f024e2a5d 100644 --- a/src/dailyai/services/groq_ai_services.py +++ b/src/dailyai/services/groq_ai_services.py @@ -1,7 +1,33 @@ -import aiohttp +import os +import groq +from groq import AsyncGroq from dailyai.services.ai_services import LLMService +from collections.abc import AsyncGenerator class GroqLLMService(LLMService): - def __init__(self, *, api_key, model="llama2-70b-4096"): - pass + def __init__(self, *, api_key, model="mixtral-8x7b-32768", context): + super().__init__(context) + self._model = model + # os.environ["GROQ_SECRET_ACCESS_KEY"] = api_key + + self._client = AsyncGroq() + + async def run_llm_async(self, messages) -> AsyncGenerator[str, None]: + print(f"messages are {messages}") + try: + resp = await self._client.chat.completions.create(messages=messages, model=self._model) + print(f"got chunks from groq: {resp}") + + if resp.choices[0].message.content: + yield resp.choices[0].message.content + except groq.APIConnectionError as e: + print("The server could not be reached") + print(e.__cause__) # an underlying Exception, likely raised within httpx. + except groq.RateLimitError as e: + print("A 429 status code was received; we should back off a bit.") + except groq.APIStatusError as e: + print("Another non-200-range status code was received") + print(e.status_code) + print(e.response) + \ No newline at end of file diff --git a/src/examples/foundational/06c-listen-respond-interruptible-refactor.py b/src/examples/foundational/06c-listen-respond-interruptible-refactor.py index 4860fabe6..22d0e783e 100644 --- a/src/examples/foundational/06c-listen-respond-interruptible-refactor.py +++ b/src/examples/foundational/06c-listen-respond-interruptible-refactor.py @@ -9,6 +9,7 @@ from dailyai.services.azure_ai_services import AzureLLMService, AzureTTSService from dailyai.services.elevenlabs_ai_service import ElevenLabsTTSService from dailyai.services.open_ai_services import OpenAILLMService from dailyai.services.ai_services import FrameLogger +from dailyai.services.groq_ai_services import GroqLLMService from examples.foundational.support.runner import configure @@ -42,7 +43,7 @@ async def main(room_url: str, token): # context=context) llm = OpenAILLMService( context=context, api_key=os.getenv("OPENAI_CHATGPT_API_KEY")) - + llm = GroqLLMService(api_key=os.getenv("GROQ_API_KEY"), context=context) tts = AzureTTSService( api_key=os.getenv("AZURE_SPEECH_API_KEY"), region=os.getenv("AZURE_SPEECH_REGION"))