diff --git a/CHANGELOG.md b/CHANGELOG.md index 6282c843a..319c92f12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to **pipecat** will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Changed + +- GoogleLLMService `api_key` argument is now mandatory. + +### Fixed + +- Fixed AzureLLMService. + ## [0.0.23] - 2024-05-23 ### Fixed diff --git a/examples/foundational/12a-describe-video-gemini-flash.py b/examples/foundational/12a-describe-video-gemini-flash.py index 0b5a7893a..00e168ad5 100644 --- a/examples/foundational/12a-describe-video-gemini-flash.py +++ b/examples/foundational/12a-describe-video-gemini-flash.py @@ -62,19 +62,15 @@ async def main(room_url: str, token): ) ) - tts = ElevenLabsTTSService( - aiohttp_session=session, - api_key=os.getenv("ELEVENLABS_API_KEY"), - voice_id=os.getenv("ELEVENLABS_VOICE_ID"), - ) - user_response = UserResponseAggregator() image_requester = UserImageRequester() vision_aggregator = VisionImageFrameAggregator() - google = GoogleLLMService(model="gemini-1.5-flash-latest") + google = GoogleLLMService( + model="gemini-1.5-flash-latest", + api_key=os.getenv("GOOGLE_API_KEY")) tts = ElevenLabsTTSService( aiohttp_session=session, diff --git a/examples/foundational/12b-describe-video-gpt-4o.py b/examples/foundational/12b-describe-video-gpt-4o.py index 2d1e82959..c34a5a94a 100644 --- a/examples/foundational/12b-describe-video-gpt-4o.py +++ b/examples/foundational/12b-describe-video-gpt-4o.py @@ -61,12 +61,6 @@ async def main(room_url: str, token): ) ) - tts = ElevenLabsTTSService( - aiohttp_session=session, - api_key=os.getenv("ELEVENLABS_API_KEY"), - voice_id=os.getenv("ELEVENLABS_VOICE_ID"), - ) - user_response = UserResponseAggregator() image_requester = UserImageRequester() diff --git a/examples/foundational/12c-describe-video-anthropic.py b/examples/foundational/12c-describe-video-anthropic.py index 17ca08407..9a7a9a804 100644 --- a/examples/foundational/12c-describe-video-anthropic.py +++ b/examples/foundational/12c-describe-video-anthropic.py @@ -61,12 +61,6 @@ async def main(room_url: str, token): ) ) - tts = ElevenLabsTTSService( - aiohttp_session=session, - api_key=os.getenv("ELEVENLABS_API_KEY"), - voice_id=os.getenv("ELEVENLABS_VOICE_ID"), - ) - user_response = UserResponseAggregator() image_requester = UserImageRequester() diff --git a/src/pipecat/services/anthropic.py b/src/pipecat/services/anthropic.py index 2610e6dca..f1368f6fa 100644 --- a/src/pipecat/services/anthropic.py +++ b/src/pipecat/services/anthropic.py @@ -44,9 +44,9 @@ class AnthropicLLMService(LLMService): def __init__( self, - api_key, - model="claude-3-opus-20240229", - max_tokens=1024): + api_key: str, + model: str = "claude-3-opus-20240229", + max_tokens: int = 1024): super().__init__() self._client = AsyncAnthropic(api_key=api_key) self._model = model diff --git a/src/pipecat/services/azure.py b/src/pipecat/services/azure.py index d9d5e1b3e..080e3680e 100644 --- a/src/pipecat/services/azure.py +++ b/src/pipecat/services/azure.py @@ -11,6 +11,7 @@ import io from PIL import Image from typing import AsyncGenerator +from numpy import str_ from openai import AsyncAzureOpenAI from pipecat.frames.frames import AudioRawFrame, ErrorFrame, Frame, URLImageRawFrame @@ -73,17 +74,18 @@ class AzureLLMService(BaseOpenAILLMService): def __init__( self, *, - api_key, - endpoint, - api_version="2023-12-01-preview", - model): - super().__init__(api_key=api_key, model=model) + api_key: str, + endpoint: str, + model: str, + api_version: str = "2023-12-01-preview"): + # Initialize variables before calling parent __init__() because that + # will call create_client() and we need those values there. self._endpoint = endpoint self._api_version = api_version - self._model: str = model + super().__init__(api_key=api_key, model=model) def create_client(self, api_key=None, base_url=None): - self._client = AsyncAzureOpenAI( + return AsyncAzureOpenAI( api_key=api_key, azure_endpoint=self._endpoint, api_version=self._api_version, @@ -95,12 +97,12 @@ class AzureImageGenServiceREST(ImageGenService): def __init__( self, *, - api_version="2023-06-01-preview", - image_size: str, aiohttp_session: aiohttp.ClientSession, - api_key, - endpoint, - model, + image_size: str, + api_key: str, + endpoint: str, + model: str, + api_version="2023-06-01-preview", ): super().__init__() diff --git a/src/pipecat/services/fireworks.py b/src/pipecat/services/fireworks.py index 6d2d44e6c..2c1020be5 100644 --- a/src/pipecat/services/fireworks.py +++ b/src/pipecat/services/fireworks.py @@ -19,6 +19,6 @@ except ModuleNotFoundError as e: class FireworksLLMService(BaseOpenAILLMService): def __init__(self, - model="accounts/fireworks/models/firefunction-v1", - base_url="https://api.fireworks.ai/inference/v1"): + model: str = "accounts/fireworks/models/firefunction-v1", + base_url: str = "https://api.fireworks.ai/inference/v1"): super().__init__(model, base_url) diff --git a/src/pipecat/services/google.py b/src/pipecat/services/google.py index f21de30c2..f42a9b069 100644 --- a/src/pipecat/services/google.py +++ b/src/pipecat/services/google.py @@ -40,14 +40,10 @@ class GoogleLLMService(LLMService): franca for all LLM services, so that it is easy to switch between different LLMs. """ - def __init__(self, model="gemini-1.5-flash-latest", api_key=None, **kwargs): + def __init__(self, api_key: str, model: str = "gemini-1.5-flash-latest", **kwargs): super().__init__(**kwargs) - self.model = model - gai.configure(api_key=api_key or os.environ["GOOGLE_API_KEY"]) - self.create_client() - - def create_client(self): - self._client = gai.GenerativeModel(self.model) + gai.configure(api_key=api_key) + self._client = gai.GenerativeModel(model) def _get_messages_from_openai_context( self, context: OpenAILLMContext) -> List[glm.Content]: diff --git a/src/pipecat/services/ollama.py b/src/pipecat/services/ollama.py index 781d00260..5de16dc07 100644 --- a/src/pipecat/services/ollama.py +++ b/src/pipecat/services/ollama.py @@ -9,5 +9,5 @@ from pipecat.services.openai import BaseOpenAILLMService class OLLamaLLMService(BaseOpenAILLMService): - def __init__(self, model="llama2", base_url="http://localhost:11434/v1"): + def __init__(self, model: str = "llama2", base_url: str = "http://localhost:11434/v1"): super().__init__(model=model, base_url=base_url, api_key="ollama") diff --git a/src/pipecat/services/openai.py b/src/pipecat/services/openai.py index fc2be1201..51e4f1dad 100644 --- a/src/pipecat/services/openai.py +++ b/src/pipecat/services/openai.py @@ -58,10 +58,10 @@ class BaseOpenAILLMService(LLMService): def __init__(self, model: str, api_key=None, base_url=None): super().__init__() self._model: str = model - self.create_client(api_key=api_key, base_url=base_url) + self._client = self.create_client(api_key=api_key, base_url=base_url) def create_client(self, api_key=None, base_url=None): - self._client = AsyncOpenAI(api_key=api_key, base_url=base_url) + return AsyncOpenAI(api_key=api_key, base_url=base_url) async def _stream_chat_completions( self, context: OpenAILLMContext