Skip to content

Commit

Permalink
refactor(pm4py): changing API interfacing for OpenAI
Browse files Browse the repository at this point in the history
  • Loading branch information
fit-alessandro-berti committed Dec 12, 2023
1 parent 8f494f5 commit 691aa7d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 14 deletions.
54 changes: 42 additions & 12 deletions pm4py/algo/querying/llm/connectors/openai.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,57 @@
from enum import Enum
from pm4py.util import exec_utils
from typing import Optional, Dict, Any
import base64
import requests
from pm4py.util import constants


class Parameters(Enum):
API_KEY = "api_key"
OPENAI_MODEL = "openai_model"
IMAGE_PATH = "image_path"


def apply(query: str, parameters: Optional[Dict[Any, Any]] = None) -> str:
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')


def apply(prompt: str, parameters: Optional[Dict[Any, Any]] = None) -> str:
if parameters is None:
parameters = {}

api_key = exec_utils.get_param_value(Parameters.API_KEY, parameters, constants.OPENAI_API_KEY)
model = exec_utils.get_param_value(Parameters.OPENAI_MODEL, parameters, constants.OPENAI_DEFAULT_MODEL)

import openai

client = openai.OpenAI(api_key=api_key)

message = {"role": "user", "content": query}

response = client.chat.completions.create(model=model, messages=[message])

return response.choices[0].message.content
image_path = exec_utils.get_param_value(Parameters.IMAGE_PATH, parameters, None)
model = exec_utils.get_param_value(Parameters.OPENAI_MODEL, parameters,
constants.OPENAI_DEFAULT_MODEL if image_path is None else constants.OPENAI_DEFAULT_VISION_MODEL)

headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}

payload = {
"model": model,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
]
}

if image_path is not None:
base64_image = encode_image(image_path)
payload["messages"][0]["content"].append(
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image} "}})
payload["max_tokens"] = 4096

response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload).json()

return response["choices"][0]["message"]["content"]
4 changes: 2 additions & 2 deletions pm4py/llm.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import duckdb
import pandas as pd
from pm4py.objects.log.obj import EventLog, EventStream, Trace
from typing import Union, Optional, Dict, Tuple, Any
from pm4py.utils import get_properties, constants
from pm4py.utils import __event_log_deprecation_warning
from pm4py.objects.ocel.obj import OCEL
from sqlite3 import Connection as SQ3_Connection
from copy import copy
from pm4py.objects.petri_net.obj import PetriNet, Marking


Expand All @@ -25,7 +25,7 @@ def openai_query(prompt: str, api_key: Optional[str] = None, openai_model: Optio
resp = pm4py.llm.openai_query('what is the result of 3+3?', api_key="sk-382393", openai_model="gpt-3.5-turbo")
print(resp)
"""
parameters = {}
parameters = copy(kwargs) if kwargs is not None else {}
if api_key is not None:
parameters["api_key"] = api_key
if openai_model is not None:
Expand Down

0 comments on commit 691aa7d

Please sign in to comment.