MoodCamera / gpt.py
Anustup's picture
Update gpt.py
e7b1cac verified
raw
history blame
6.22 kB
from openai import OpenAI
import os
import base64
import requests
from prompts import prompts
from constants import JSON_SCHEMA_FOR_GPT
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=OPENAI_API_KEY)
model = "gpt-4o"
title = "Caimera Mood board Expert"
def createAssistant(instruction_prompt):
instructions = instruction_prompt
assistant = client.beta.assistants.create(
name=title,
instructions=instructions,
model=model
)
return assistant.id
def saveFileOpenAI(location):
with open(location, "rb") as f:
file = client.files.create(file=f, purpose="vision")
os.remove(location)
return file.id
def startAssistantThread(file_id_enum, prompt_n, image_needed, json_mode_needed_or_not):
if json_mode_needed_or_not == "yes":
if image_needed == "yes":
messages = [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt_n
}
],
}
]
for file_id in file_id_enum:
messages[0]["content"].append({
"type": "image_file",
"image_file": {"file_id": file_id}
})
else:
messages = [
{
"role": "user",
"content": prompt_n}]
thread = client.beta.threads.create(messages=messages)
else:
if image_needed == "yes":
messages = [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt_n
}
],
}
]
for file_id in file_id_enum:
messages[0]["content"].append({
"type": "image_file",
"image_file": {"file_id": file_id}
})
else:
messages = [
{
"role": "user",
"content": prompt_n}]
thread = client.beta.threads.create(messages=messages)
return thread.id
def runAssistant(thread_id, assistant_id):
run = client.beta.threads.runs.create(thread_id=thread_id, assistant_id=assistant_id)
return run.id
def checkRunStatus(thread_id, run_id):
run = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run_id)
return run.status
def retrieveThread(thread_id):
thread_messages = client.beta.threads.messages.list(thread_id)
list_messages = thread_messages.data
thread_messages = []
for message in list_messages:
obj = {}
obj['content'] = message.content[0].text.value
obj['role'] = message.role
thread_messages.append(obj)
return thread_messages[::-1]
def addMessageToThread(thread_id, prompt_n):
thread_message = client.beta.threads.messages.create(thread_id, role="user", content=prompt_n)
def create_chat_completion_request_open_ai_for_summary(prompt, json_mode, schema_name="",
json_schema="",
system_message="You are expert in Fashion "
"Shoots"):
import requests
if json_mode == "No":
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
data = {
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": system_message
},
{
"role": "user",
"content": prompt
}
]
}
response = requests.post(url, headers=headers, json=data)
json_response = response.json()
else:
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
data = {
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are expert in creating prompts for Fashion Shoots."
},
{
"role": "user",
"content": prompt
}
],
"response_format": {"type": "json_schema", "json_schema": {"name": schema_name, "strict": True, "schema":
json_schema}}
}
response = requests.post(url, headers=headers, json=data)
json_response = response.json()
print(json_response)
return json_response["choices"][0]["message"]["content"]
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def create_image_completion_request_gpt(image_path, prompt):
base64_image = encode_image(image_path)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
payload = {
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
}
response = requests.post("https://api.openai.com/v1/chat/completions",
headers=headers, json=payload)
json_resp = response.json()
return json_resp["choices"][0]["message"]["content"]