aboutsummaryrefslogtreecommitdiff
path: root/autogpts/forge/forge/llm.py
diff options
context:
space:
mode:
Diffstat (limited to 'autogpts/forge/forge/llm.py')
-rw-r--r--autogpts/forge/forge/llm.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/autogpts/forge/forge/llm.py b/autogpts/forge/forge/llm.py
new file mode 100644
index 000000000..4fe850052
--- /dev/null
+++ b/autogpts/forge/forge/llm.py
@@ -0,0 +1,61 @@
+from pathlib import Path
+
+from litellm import AuthenticationError, InvalidRequestError, ModelResponse, acompletion
+from openai import OpenAI
+from openai.types import CreateEmbeddingResponse
+from openai.types.audio import Transcription
+from tenacity import retry, stop_after_attempt, wait_random_exponential
+
+from .sdk.forge_log import ForgeLogger
+
+LOG = ForgeLogger(__name__)
+
+
+@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3))
+async def chat_completion_request(model, messages, **kwargs) -> ModelResponse:
+ """Generate a response to a list of messages using OpenAI's API"""
+ try:
+ kwargs["model"] = model
+ kwargs["messages"] = messages
+
+ resp = await acompletion(**kwargs)
+ return resp
+ except AuthenticationError as e:
+ LOG.exception("Authentication Error")
+ raise
+ except InvalidRequestError as e:
+ LOG.exception("Invalid Request Error")
+ raise
+ except Exception as e:
+ LOG.error("Unable to generate ChatCompletion response")
+ LOG.error(f"Exception: {e}")
+ raise
+
+
+@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3))
+async def create_embedding_request(
+ messages, model="text-embedding-ada-002"
+) -> CreateEmbeddingResponse:
+ """Generate an embedding for a list of messages using OpenAI's API"""
+ try:
+ return OpenAI().embeddings.create(
+ input=[f"{m['role']}: {m['content']}" for m in messages],
+ model=model,
+ )
+ except Exception as e:
+ LOG.error("Unable to generate ChatCompletion response")
+ LOG.error(f"Exception: {e}")
+ raise
+
+
+@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3))
+async def transcribe_audio(audio_file: Path) -> Transcription:
+ """Transcribe an audio file using OpenAI's API"""
+ try:
+ return OpenAI().audio.transcriptions.create(
+ model="whisper-1", file=audio_file.open(mode="rb")
+ )
+ except Exception as e:
+ LOG.error("Unable to generate ChatCompletion response")
+ LOG.error(f"Exception: {e}")
+ raise