boreavo's picture
update
cc25ca7
Raw
History Blame Contribute Delete
4.51 kB
import gradio as gr
from openai import OpenAI
import os
import requests
import time
from utils import uploadImages
import json
os.environ["OPENAI_API_KEY"] = "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"
placidAPIKey = "placid-vwkiebbjlxl9dnhl-t6c89f8b5c0q8b25"
client = OpenAI()
def createCampaign(template_uuid, title, details, file_url):
try:
response = requests.post(
url="https://api.placid.app/api/rest/images",
headers={
"Authorization": f"Bearer {placidAPIKey}",
"Content-Type": "application/json",
},
json = {
"template_uuid": template_uuid,
"layers": {
"title": {
"text": title
},
"description": {
"text": details
},
"screenshot": {
"image": file_url
}
}
}
)
response_data = response.json()
print(response_data)
polling_url = response_data['polling_url']
while True:
# Make a GET request to the polling URL
headers={
"Authorization": f"Bearer {placidAPIKey}",
"Content-Type": "application/json",
}
response = requests.get(polling_url, headers=headers)
# Check if the request was successful
if response.status_code == 200:
data = response.json()
# Check the status of the image processing
if data['status'] == 'finished':
print("Processing finished!")
return data["image_url"]
elif data['status'] == 'failed':
print("Processing failed.")
# Handle failure (you may also check data['errors'] for more details)
break
else:
print("Still processing... Status:", data['status'])
time.sleep(2) # Wait for 5 seconds before polling again
else:
print("Failed to poll status. HTTP status code:", response.status_code)
break
except requests.exceptions.RequestException:
print('HTTP Request failed')
def predict(productInfo, screenshots):
# Step 1: Get campaign copy from openAI
system_ins = "You are a professional marketer, \
if user enter a link then extract the information and use it as production context, \
then create a campaign with 6 campaign items based on user input, each with a title and description.\
Output the campaigns in json, it should only contain an array of the campaign items, no root key needed.\
Don't add other info"
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_ins},
{"role": "user", "content": productInfo}
]
)
campaignCopy = response.choices[0].message.content
print(campaignCopy)
campaign_json = json.loads(campaignCopy)
print(campaign_json)
print(type(campaign_json))
campaignItems = campaign_json
print("Step 1: Complete")
# Step 2: Upload all the images
file_urls = uploadImages(screenshots)
print("Step 2: Complete")
print(file_urls)
# Step 3: Create the campain
results = []
templates = ["zzpwonwvxudb9", "qpoihnji5reqn", "jasfxwdgopiz5", "tsvhpyqygoq0b", "jinkqm8vixdpi"]
for index, file_url in enumerate(file_urls):
copy_title = campaignItems[index]['title']
copy_des = campaignItems[index]['description']
url = createCampaign(template_uuid=templates[index], title=copy_title, details=copy_des, file_url=file_url)
results.append(url)
print("Loading image from")
print(results)
return results
with gr.Blocks() as demo:
with gr.Row():
textBox = gr.Text(label="Enter your product info")
imageBox = gr.Gallery(label="Upload Screenshots")
with gr.Row():
outputGallery = gr.Gallery(label="AppStore Screenshots")
# Assuming a button is used to trigger the processing
btn_process = gr.Button("Submit")
# Function binding
btn_process.click(predict, inputs=[textBox, imageBox], outputs=[outputGallery])
demo.launch()