diff --git a/src/dailyai/services/azure_ai_services.py b/src/dailyai/services/azure_ai_services.py index 03d7e574b..968e8d3b1 100644 --- a/src/dailyai/services/azure_ai_services.py +++ b/src/dailyai/services/azure_ai_services.py @@ -66,11 +66,10 @@ class AzureLLMService(LLMService): ) def run_llm_async(self, messages) -> Generator[str, None, None]: - local_messages = messages.copy() - messages_for_log = json.dumps(local_messages) + messages_for_log = json.dumps(messages) self.logger.debug(f"Generating chat via azure: {messages_for_log}") - response = self.get_response(local_messages, stream=True) + response = self.get_response(messages, stream=True) for chunk in response: if len(chunk.choices) == 0: @@ -80,11 +79,10 @@ class AzureLLMService(LLMService): yield chunk.choices[0].delta.content def run_llm(self, messages) -> str | None: - local_messages = messages.copy() - messages_for_log = json.dumps(local_messages) + messages_for_log = json.dumps(messages) self.logger.debug(f"Generating chat via azure: {messages_for_log}") - response = self.get_response(local_messages, stream=False) + response = self.get_response(messages, stream=False) if response and len(response.choices) > 0: return response.choices[0].message.content else: diff --git a/src/dailyai/services/open_ai_service.py b/src/dailyai/services/open_ai_service.py new file mode 100644 index 000000000..64f650de7 --- /dev/null +++ b/src/dailyai/services/open_ai_service.py @@ -0,0 +1,67 @@ +from dailyai.services.ai_services import AIService, TTSService, LLMService, ImageGenService +from typing import Generator + +import requests +from PIL import Image +import io +from openai import OpenAI + +import os +import json + +class OpenAILLMService(LLMService): + def __init__(self, api_key=None, model=None): + super().__init__() + api_key = api_key or os.getenv("OPEN_AI_KEY") + self.model = model or os.getenv("OPEN_AI_MODEL") + self.client = OpenAI(api_key=api_key) + + def get_response(self, messages, stream): + return self.client.chat.completions.create( + stream=stream, + messages=messages, + model=self.model + ) + + def run_llm_async(self, messages) -> Generator[str, None, None]: + messages_for_log = json.dumps(messages) + self.logger.debug(f"Generating chat via openai: {messages_for_log}") + + response = self.get_response(messages, stream=True) + + for chunk in response: + if len(chunk.choices) == 0: + continue + + if chunk.choices[0].delta.content: + yield chunk.choices[0].delta.content + + def run_llm(self, messages) -> str | None: + messages_for_log = json.dumps(messages) + self.logger.debug(f"Generating chat via azure: {messages_for_log}") + + response = self.get_response(messages, stream=False) + if response and len(response.choices) > 0: + return response.choices[0].message.content + else: + return None + +class OpenAIImageGenService(ImageGenService): + def __init__(self, api_key=None, model=None): + super().__init__() + api_key = api_key or os.getenv("OPEN_AI_KEY") + self.model = model or os.getenv("OPEN_AI_MODEL") + self.client = OpenAI(api_key=api_key) + + def run_image_gen(self, sentence) -> tuple[str, Image.Image]: + image = self.client.images.generate( + prompt=sentence, + n=1, + size=f"1024x1024" + ) + image_url = image.data[0].url + response = requests.get(image_url) + dalle_stream = io.BytesIO(response.content) + dalle_im = Image.open(dalle_stream) + + return (image_url, dalle_im) diff --git a/src/dailyai/services/to_be_updated/open_ai_service.py b/src/dailyai/services/to_be_updated/open_ai_service.py deleted file mode 100644 index 273b697e2..000000000 --- a/src/dailyai/services/to_be_updated/open_ai_service.py +++ /dev/null @@ -1,55 +0,0 @@ -from services.ai_service import AIService -import requests -from PIL import Image -import io -from openai import OpenAI - -client = OpenAI() -import os -import time -import json - -class OpenAIService(AIService): - def __init__(self, **kwargs): - super().__init__(**kwargs) - - def run_llm(self, messages, latest_user_message=None, stream = True): - local_messages = messages.copy() - if latest_user_message: - local_messages.append({"role": "user", "content": latest_user_message}) - messages_for_log = json.dumps(local_messages, indent=2) - self.logger.info(f"==== generating chat via openai: {messages_for_log}") - - model = os.getenv("OPEN_AI_MODEL") - if not model: - model = "gpt-4" - 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 - - def run_image_gen(self, sentence): - self.logger.info("🖌️ generating openai image async for ", sentence) - start = time.time() - - 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) - self.logger.info("🖌️ got image from url", response) - dalle_stream = io.BytesIO(response.content) - dalle_im = Image.open(dalle_stream) - self.logger.info("🖌️ total time", time.time() - start) - - return (image_url, dalle_im)