import time import openai import os from colorama import Fore from config import Config cfg = Config() openai.api_key = cfg.openai_api_key assert openai.api_key is not None, "OpenAI API key not found" # Overly simple abstraction until we create something better # simple retry mechanism when getting a rate error or a bad gateway def create_chat_completion(messages, model="gpt-3.5-turbo", temperature=0, max_tokens=256)->str: """Create a chat completion using the OpenAI API""" response = None num_retries = 5 for attempt in range(num_retries): try: response = openai.ChatCompletion.create( model=model, messages=messages, temperature=temperature, max_tokens=max_tokens ) break except openai.error.RateLimitError: print(Fore.RED + "Error: ", "API Rate Limit Reached. Waiting 20 seconds..." + Fore.RESET) time.sleep(20) except openai.error.APIError as e: if e.http_status == 502: print(Fore.RED + "Error: ", "API Bad gateway. Waiting 20 seconds..." + Fore.RESET) time.sleep(20) else: raise if attempt == num_retries - 1: raise if response is None: raise RuntimeError("Failed to get response after 5 retries") return response.choices[0].message["content"]