Update Azure OpenAI to new OpenAI API spec

This commit is contained in:
Moishe Lettvin
2023-12-28 13:11:16 -05:00
parent a92d1db4c9
commit 99b6c6992d
3 changed files with 43 additions and 50 deletions

View File

@@ -27,7 +27,7 @@ pip install path_to_this_repo
Tou can run the simple sample like so: 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: 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:

View File

@@ -1,6 +1,7 @@
import json import json
import io import io
import openai from openai import AzureOpenAI
import os import os
import requests import requests
@@ -45,17 +46,20 @@ class AzureTTSService(TTSService):
self.logger.info("Error details: {}".format(cancellation_details.error_details)) self.logger.info("Error details: {}".format(cancellation_details.error_details))
class AzureLLMService(LLMService): class AzureLLMService(LLMService):
def get_response(self, messages, stream): def __init__(self):
return openai.ChatCompletion.create( super().__init__()
api_type="azure", self.client = AzureOpenAI(
api_version="2023-06-01-preview",
api_key=os.getenv("AZURE_CHATGPT_KEY"), api_key=os.getenv("AZURE_CHATGPT_KEY"),
api_base=os.getenv("AZURE_CHATGPT_ENDPOINT"), azure_endpoint=os.getenv("AZURE_CHATGPT_ENDPOINT"),
deployment_id=os.getenv("AZURE_CHATGPT_DEPLOYMENT_ID"), api_version="2023-12-01-preview",
stream=stream,
messages=messages,
) )
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]: def run_llm_async(self, messages) -> Generator[str, None, None]:
local_messages = messages.copy() local_messages = messages.copy()
@@ -65,15 +69,11 @@ class AzureLLMService(LLMService):
response = self.get_response(local_messages, stream=True) response = self.get_response(local_messages, stream=True)
for chunk in response: for chunk in response:
if len(chunk["choices"]) == 0: if len(chunk.choices) == 0:
continue continue
if "content" in chunk["choices"][0]["delta"]: if chunk.choices[0].delta.content:
if ( yield chunk.choices[0].delta.content
chunk["choices"][0]["delta"]["content"] != {}
): # streaming a content chunk
yield chunk["choices"][0]["delta"]["content"]
def run_llm(self, messages) -> str | None: def run_llm(self, messages) -> str | None:
local_messages = messages.copy() local_messages = messages.copy()
@@ -81,13 +81,8 @@ class AzureLLMService(LLMService):
self.logger.debug(f"Generating chat via azure: {messages_for_log}") self.logger.debug(f"Generating chat via azure: {messages_for_log}")
response = self.get_response(local_messages, stream=False) response = self.get_response(local_messages, stream=False)
if ( if response and len(response.choices) > 0:
response return response.choices[0].message.content
and len(response["choices"]) > 0
and "message" in response["choices"][0]
and "content" in response["choices"][0]["message"]
):
return response["choices"][0]["message"]["content"]
else: else:
return None return None
@@ -97,13 +92,13 @@ class AzureImageGenService(ImageGenService):
def run_image_gen(self, sentence) -> tuple[str, Image.Image]: def run_image_gen(self, sentence) -> tuple[str, Image.Image]:
self.logger.info("Generating azure image", sentence) self.logger.info("Generating azure image", sentence)
image = openai.Image.create( image = OpenAI().images.generate(
api_type = 'azure', api_type="azure",
api_version = '2023-06-01-preview', api_version="2023-06-01-preview",
api_key = os.getenv('AZURE_DALLE_KEY'), api_key=os.getenv("AZURE_DALLE_KEY"),
api_base = os.getenv('AZURE_DALLE_ENDPOINT'), api_base=os.getenv("AZURE_DALLE_ENDPOINT"),
deployment_id = os.getenv("AZURE_DALLE_DEPLOYMENT_ID"), deployment_id=os.getenv("AZURE_DALLE_DEPLOYMENT_ID"),
prompt=f'{sentence} in the style of {self.image_style}', prompt=f"{sentence} in the style of {self.image_style}",
n=1, n=1,
size=f"1024x1024", size=f"1024x1024",
) )

View File

@@ -2,7 +2,9 @@ from services.ai_service import AIService
import requests import requests
from PIL import Image from PIL import Image
import io import io
import openai from openai import OpenAI
client = OpenAI()
import os import os
import time import time
import json import json
@@ -21,15 +23,13 @@ class OpenAIService(AIService):
model = os.getenv("OPEN_AI_MODEL") model = os.getenv("OPEN_AI_MODEL")
if not model: if not model:
model = "gpt-4" model = "gpt-4"
response = openai.ChatCompletion.create( response = client.chat.completions.create(api_type = 'openai',
api_type = 'openai', api_version = '2020-11-07',
api_version = '2020-11-07', api_base = "https://api.openai.com/v1",
api_base = "https://api.openai.com/v1", api_key = os.getenv("OPEN_AI_KEY"),
api_key = os.getenv("OPEN_AI_KEY"), model=model,
model=model, stream=stream,
stream=stream, messages=local_messages)
messages=local_messages
)
return response return response
@@ -37,15 +37,13 @@ class OpenAIService(AIService):
self.logger.info("🖌️ generating openai image async for ", sentence) self.logger.info("🖌️ generating openai image async for ", sentence)
start = time.time() start = time.time()
image = openai.Image.create( image = client.images.generate(api_type = 'openai',
api_type = 'openai', api_version = '2020-11-07',
api_version = '2020-11-07', api_base = "https://api.openai.com/v1",
api_base = "https://api.openai.com/v1", api_key = os.getenv("OPEN_AI_KEY"),
api_key = os.getenv("OPEN_AI_KEY"), prompt=f'{sentence} in the style of {self.image_style}',
prompt=f'{sentence} in the style of {self.image_style}', n=1,
n=1, size=f"1024x1024")
size=f"1024x1024",
)
image_url = image["data"][0]["url"] image_url = image["data"][0]["url"]
self.logger.info("🖌️ generated image from url", image["data"][0]["url"]) self.logger.info("🖌️ generated image from url", image["data"][0]["url"])
response = requests.get(image_url) response = requests.get(image_url)