From 99b6c6992d5aab845bc6d67d5c4ec418581d762b Mon Sep 17 00:00:00 2001 From: Moishe Lettvin Date: Thu, 28 Dec 2023 13:11:16 -0500 Subject: [PATCH] Update Azure OpenAI to new OpenAI API spec --- README.md | 2 +- src/dailyai/services/azure_ai_services.py | 55 +++++++++---------- .../services/to_be_updated/open_ai_service.py | 36 ++++++------ 3 files changed, 43 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index bbdaf5af7..71cf35633 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ pip install path_to_this_repo Tou can run the simple sample like so: ``` -src/samples/simple-sample/simple-sample.py -u [YOUR_ROOM_URL] -k [YOUR_DAILY_API_KEY] +src/samples/simple-sample/simple-sample.py -u your_room_url -k your_daily_api_key ``` Note that the sample uses Azure's TTS and LLM services. You'll need to set the following environment variables for the sample to work: diff --git a/src/dailyai/services/azure_ai_services.py b/src/dailyai/services/azure_ai_services.py index cf891c8e0..8420531b8 100644 --- a/src/dailyai/services/azure_ai_services.py +++ b/src/dailyai/services/azure_ai_services.py @@ -1,6 +1,7 @@ import json import io -import openai +from openai import AzureOpenAI + import os import requests @@ -45,17 +46,20 @@ class AzureTTSService(TTSService): self.logger.info("Error details: {}".format(cancellation_details.error_details)) class AzureLLMService(LLMService): - def get_response(self, messages, stream): - return openai.ChatCompletion.create( - api_type="azure", - api_version="2023-06-01-preview", + def __init__(self): + super().__init__() + self.client = AzureOpenAI( api_key=os.getenv("AZURE_CHATGPT_KEY"), - api_base=os.getenv("AZURE_CHATGPT_ENDPOINT"), - deployment_id=os.getenv("AZURE_CHATGPT_DEPLOYMENT_ID"), - stream=stream, - messages=messages, + azure_endpoint=os.getenv("AZURE_CHATGPT_ENDPOINT"), + api_version="2023-12-01-preview", ) + def get_response(self, messages, stream): + return self.client.chat.completions.create( + stream=stream, + messages=messages, + model=os.getenv("AZURE_CHATGPT_DEPLOYMENT_ID"), + ) def run_llm_async(self, messages) -> Generator[str, None, None]: local_messages = messages.copy() @@ -65,15 +69,11 @@ class AzureLLMService(LLMService): response = self.get_response(local_messages, stream=True) for chunk in response: - if len(chunk["choices"]) == 0: + if len(chunk.choices) == 0: continue - if "content" in chunk["choices"][0]["delta"]: - if ( - chunk["choices"][0]["delta"]["content"] != {} - ): # streaming a content chunk - yield chunk["choices"][0]["delta"]["content"] - + if chunk.choices[0].delta.content: + yield chunk.choices[0].delta.content def run_llm(self, messages) -> str | None: local_messages = messages.copy() @@ -81,13 +81,8 @@ class AzureLLMService(LLMService): self.logger.debug(f"Generating chat via azure: {messages_for_log}") response = self.get_response(local_messages, stream=False) - if ( - response - and len(response["choices"]) > 0 - and "message" in response["choices"][0] - and "content" in response["choices"][0]["message"] - ): - return response["choices"][0]["message"]["content"] + if response and len(response.choices) > 0: + return response.choices[0].message.content else: return None @@ -97,13 +92,13 @@ class AzureImageGenService(ImageGenService): def run_image_gen(self, sentence) -> tuple[str, Image.Image]: self.logger.info("Generating azure image", sentence) - image = openai.Image.create( - api_type = 'azure', - api_version = '2023-06-01-preview', - api_key = os.getenv('AZURE_DALLE_KEY'), - api_base = os.getenv('AZURE_DALLE_ENDPOINT'), - deployment_id = os.getenv("AZURE_DALLE_DEPLOYMENT_ID"), - prompt=f'{sentence} in the style of {self.image_style}', + image = OpenAI().images.generate( + api_type="azure", + api_version="2023-06-01-preview", + api_key=os.getenv("AZURE_DALLE_KEY"), + api_base=os.getenv("AZURE_DALLE_ENDPOINT"), + deployment_id=os.getenv("AZURE_DALLE_DEPLOYMENT_ID"), + prompt=f"{sentence} in the style of {self.image_style}", n=1, size=f"1024x1024", ) diff --git a/src/dailyai/services/to_be_updated/open_ai_service.py b/src/dailyai/services/to_be_updated/open_ai_service.py index 88ce45ac1..273b697e2 100644 --- a/src/dailyai/services/to_be_updated/open_ai_service.py +++ b/src/dailyai/services/to_be_updated/open_ai_service.py @@ -2,7 +2,9 @@ from services.ai_service import AIService import requests from PIL import Image import io -import openai +from openai import OpenAI + +client = OpenAI() import os import time import json @@ -21,15 +23,13 @@ class OpenAIService(AIService): model = os.getenv("OPEN_AI_MODEL") if not model: model = "gpt-4" - response = openai.ChatCompletion.create( - api_type = 'openai', - api_version = '2020-11-07', - api_base = "https://api.openai.com/v1", - api_key = os.getenv("OPEN_AI_KEY"), - model=model, - stream=stream, - messages=local_messages - ) + response = client.chat.completions.create(api_type = 'openai', + api_version = '2020-11-07', + api_base = "https://api.openai.com/v1", + api_key = os.getenv("OPEN_AI_KEY"), + model=model, + stream=stream, + messages=local_messages) return response @@ -37,15 +37,13 @@ class OpenAIService(AIService): self.logger.info("🖌️ generating openai image async for ", sentence) start = time.time() - image = openai.Image.create( - api_type = 'openai', - api_version = '2020-11-07', - api_base = "https://api.openai.com/v1", - api_key = os.getenv("OPEN_AI_KEY"), - prompt=f'{sentence} in the style of {self.image_style}', - n=1, - size=f"1024x1024", - ) + image = client.images.generate(api_type = 'openai', + api_version = '2020-11-07', + api_base = "https://api.openai.com/v1", + api_key = os.getenv("OPEN_AI_KEY"), + prompt=f'{sentence} in the style of {self.image_style}', + n=1, + size=f"1024x1024") image_url = image["data"][0]["url"] self.logger.info("🖌️ generated image from url", image["data"][0]["url"]) response = requests.get(image_url)