pimcore-ytest / src /open_ai_connector.py
sergeipetrov's picture
Update src/open_ai_connector.py
16d11d9 verified
raw
history blame
No virus
2.07 kB
import pandas as pd
from openai import OpenAI
from io import StringIO
import json
import os
class OpenAIConnector:
OPENAI_ACCESS_TOKEN = os.getenv("OPENAI_ACCESS_TOKEN")
def generate_llm_system_message(self, prefiltered_names, prefiltered_descriptions):
#print(prefiltered_names)
# actions_list = pd.DataFrame({
# 'action': prefiltered_names,
# 'descriptions': prefiltered_descriptions
# })
# csv_buffer = StringIO()
# actions_list.to_csv(csv_buffer, index=False)
actions_list = "\n".join([f"action: {action}, description: {desc}" for action, desc in zip(prefiltered_names, prefiltered_descriptions)])
system_message = "following is a csv list of actions and their descriptions: \n"
system_message += actions_list
system_message += "\n\n"
system_message += "find me all best fitting actions for the user request and order them by match. please just consider these actions and nothing else, but there might be multiple fitting actions.\n"
system_message += 'return the actions just in form of a json with action name and short reasoning, no additional text around, no formatting, etc.: [{ "action": "Icon Library", "reason": "Shows you a list of icons you can use in Pimcore configurations." }].\n'
system_message += 'also state when there is no fitting action for the request with a json like [{"action": null, "reason": "no fitting action found"}].'
return system_message
def query_open_ai(self, query, prefiltered_names, prefiltered_descriptions):
client = OpenAI(api_key=self.OPENAI_ACCESS_TOKEN)
system_message = self.generate_llm_system_message(prefiltered_names, prefiltered_descriptions)
messages = [{"role": "system", "content": system_message},{"role": "user", "content": query}]
#print(messages)
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
)
response_message = response.choices[0].message
return json.loads(response_message.content)