Spaces:
Runtime error
Runtime error
claude - dead end - only can read images not generate
Browse files- README.md +4 -4
- app.py +31 -120
- requirements.txt +3 -1
README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
---
|
2 |
-
title: PDR
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
sdk_version: 4.18.0
|
8 |
app_file: app.py
|
|
|
1 |
---
|
2 |
+
title: PDR Claude
|
3 |
+
emoji: 🎩
|
4 |
+
colorFrom: indigo
|
5 |
+
colorTo: violet
|
6 |
sdk: gradio
|
7 |
sdk_version: 4.18.0
|
8 |
app_file: app.py
|
app.py
CHANGED
@@ -13,7 +13,7 @@ from PIL import Image
|
|
13 |
|
14 |
# gradio / hf / image gen stuff
|
15 |
import gradio as gr
|
16 |
-
import
|
17 |
from dotenv import load_dotenv
|
18 |
|
19 |
# stats stuff
|
@@ -21,13 +21,10 @@ from pymongo.mongo_client import MongoClient
|
|
21 |
from pymongo.server_api import ServerApi
|
22 |
import time
|
23 |
|
24 |
-
# countdown stuff
|
25 |
-
from datetime import datetime, timedelta
|
26 |
-
|
27 |
|
28 |
load_dotenv()
|
29 |
|
30 |
-
|
31 |
|
32 |
pw_key = os.getenv("PW")
|
33 |
|
@@ -37,9 +34,12 @@ if pw_key == "<YOUR_PW>":
|
|
37 |
if pw_key == "":
|
38 |
sys.exit("Please Provide A Password in the Environment Variables")
|
39 |
|
40 |
-
if
|
41 |
sys.exit("Please Provide Your API Key")
|
42 |
|
|
|
|
|
|
|
43 |
# Connect to MongoDB
|
44 |
uri = os.getenv("MONGO_URI")
|
45 |
mongo_client = MongoClient(uri, server_api=ServerApi('1'))
|
@@ -69,9 +69,9 @@ def update_labels(show_labels):
|
|
69 |
updated_gallery = [(path, label if show_labels else "") for path, label in zip(image_paths_global, image_labels_global)]
|
70 |
return updated_gallery
|
71 |
|
72 |
-
def generate_images_wrapper(prompts, pw,
|
73 |
global image_paths_global, image_labels_global
|
74 |
-
image_paths, image_labels = generate_images(prompts, pw
|
75 |
image_paths_global = image_paths
|
76 |
|
77 |
# store this as a global so we can handle toggle state
|
@@ -108,7 +108,7 @@ def download_all_images():
|
|
108 |
image_labels_global = [] # Reset the global variable
|
109 |
return zip_path
|
110 |
|
111 |
-
def generate_images(prompts, pw
|
112 |
# Check for a valid password
|
113 |
|
114 |
if pw != os.getenv("PW"):
|
@@ -121,6 +121,8 @@ def generate_images(prompts, pw, model,size,guidance,steps,scheduler):
|
|
121 |
# Split the prompts string into individual prompts based on semicolon separation
|
122 |
prompts_list = [prompt for prompt in prompts.split(';') if prompt]
|
123 |
|
|
|
|
|
124 |
for i, entry in enumerate(prompts_list):
|
125 |
entry_parts = entry.split('-', 1) # Split by the first dash found
|
126 |
if len(entry_parts) == 2:
|
@@ -132,85 +134,21 @@ def generate_images(prompts, pw, model,size,guidance,steps,scheduler):
|
|
132 |
|
133 |
users.append(user_initials) # Append user initials to the list
|
134 |
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
"stability-ai/stable-diffusion:ac732df83cea7fff18b8472768c88ad041fa750ff7682a21affe81863cbe77e4",
|
145 |
-
input={
|
146 |
-
"width": int(size), #must be multiples of 64
|
147 |
-
"height": int(size),
|
148 |
-
"prompt": prompt_w_challenge,
|
149 |
-
"scheduler": scheduler, #controlling the steps of the diffusion process to balance between image quality, generation speed, and resource consumption - DDIM, K_EULER, DPMSolverMultistep, K_EULER_ANCESTRAL, PNDM, KLMS
|
150 |
-
"num_outputs": 1, #images to generate
|
151 |
-
"guidance_scale": int(guidance), #0-20, higher the number, more it sticks to the prompt
|
152 |
-
"num_inference_steps": int(steps) #1-500 - higher the better, generally
|
153 |
}
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
#image_url = response.data[0].url
|
161 |
-
image_url = response[0]
|
162 |
-
|
163 |
-
# conditionally render the user to the label with the prompt
|
164 |
-
image_label = f"{i}: {text}" if user_initials == "" else f"{i}: {user_initials}-{text}, "
|
165 |
-
|
166 |
-
try:
|
167 |
-
# Save the prompt, model, image URL, generation time and creation timestamp to the database
|
168 |
-
mongo_collection.insert_one({"user": user_initials, "text": text, "model": model, "image_url": image_url, "gen_time": gen_time, "timestamp": time.time()})
|
169 |
-
except Exception as e:
|
170 |
-
print(e)
|
171 |
-
raise gr.Error("An error occurred while saving the prompt to the database.")
|
172 |
-
|
173 |
-
# Append the image URL and label to their respective lists
|
174 |
-
image_paths.append(image_url)
|
175 |
-
image_labels.append(image_label)
|
176 |
-
|
177 |
-
except Exception as e:
|
178 |
-
print(e)
|
179 |
-
raise gr.Error(f"An error occurred while generating the image for: {entry}")
|
180 |
-
|
181 |
-
return image_paths, image_labels # Return both image paths and labels
|
182 |
-
|
183 |
-
|
184 |
-
#timer stuff
|
185 |
-
timer_cancelled_global = False # when true, timer does not tick down
|
186 |
-
|
187 |
-
def countdown(seconds):
|
188 |
-
"""
|
189 |
-
This function takes the number of seconds as input and returns a string displaying the remaining time.
|
190 |
-
"""
|
191 |
-
target_time = datetime.now() + timedelta(seconds=int(seconds))
|
192 |
-
while target_time > datetime.now():
|
193 |
-
remaining_time = target_time - datetime.now()
|
194 |
-
remaining_seconds = int(remaining_time.total_seconds())
|
195 |
-
yield f"{remaining_seconds:02d}"
|
196 |
-
# Check if the countdown was cancelled
|
197 |
-
if timer_cancelled_global:
|
198 |
-
break
|
199 |
-
|
200 |
-
def stop_countdown():
|
201 |
-
"""
|
202 |
-
This function stops the countdown.
|
203 |
-
"""
|
204 |
-
global timer_cancelled_global
|
205 |
-
timer_cancelled_global = True
|
206 |
-
|
207 |
-
def reset_countdown(slider):
|
208 |
-
"""
|
209 |
-
This function resets the countdown.
|
210 |
-
"""
|
211 |
-
global timer_cancelled_global
|
212 |
-
timer_cancelled_global = False
|
213 |
-
return 60
|
214 |
|
215 |
|
216 |
#custom css
|
@@ -223,9 +161,9 @@ css = """
|
|
223 |
|
224 |
with gr.Blocks(css=css) as demo:
|
225 |
|
226 |
-
gr.Markdown("# <center>Prompt de Resistance
|
227 |
|
228 |
-
pw = gr.Textbox(label="Password", type="password", placeholder="Enter the password to unlock the service")
|
229 |
|
230 |
#instructions
|
231 |
with gr.Accordion("Instructions & Tips",label="instructions",open=False):
|
@@ -239,32 +177,10 @@ with gr.Blocks(css=css) as demo:
|
|
239 |
regenerate_btn = gr.Button("New Challenge")
|
240 |
|
241 |
|
242 |
-
#countdown
|
243 |
-
with gr.Accordion("Countdown",label="Countdown",open=False):
|
244 |
-
with gr.Row():
|
245 |
-
with gr.Column(scale=3):
|
246 |
-
slider = gr.Slider(minimum=1, maximum=120, value=60,label="Countdown",info="Select duration in seconds")
|
247 |
-
with gr.Column(scale=1):
|
248 |
-
countdown_button = gr.Button("Start")
|
249 |
-
stop_countdown_button = gr.Button("Stop")
|
250 |
-
reset_countdown_button = gr.Button("Reset")
|
251 |
-
|
252 |
-
|
253 |
#prompts
|
254 |
with gr.Accordion("Prompts",label="Prompts",open=True):
|
255 |
-
|
256 |
-
|
257 |
-
text = gr.Textbox(label="What do you want to create?", placeholder="Enter your text and then click on the \"Image Generate\" button")
|
258 |
-
with gr.Column(scale=1):
|
259 |
-
model = gr.Dropdown(choices=["stable-diffusion"], label="Model", value="stable-diffusion")
|
260 |
-
with gr.Row():
|
261 |
-
with gr.Column():
|
262 |
-
size = gr.Dropdown(choices=[512,768,1024], label="Size", value=768)
|
263 |
-
scheduler = gr.Dropdown(choices=["DDIM", "K_EULER", "DPMSolverMultistep", "K_EULER_ANCESTRAL", "PNDM", "KLMS"], label="Scheduler", value="K_EULER", info="attempt to balance between image quality, generation speed, and resource consumption")
|
264 |
-
with gr.Column():
|
265 |
-
guidance = gr.Slider(minimum=0, maximum=20, value=7, step=1,label="Guidance",info="0-20, higher the number, more it sticks to the prompt")
|
266 |
-
steps = gr.Slider(minimum=10, maximum=500, value=50, step=10,label="Steps",info="10-500 - higher = better quality, lower = faster")
|
267 |
-
with gr.Row():
|
268 |
btn = gr.Button("Generate Images")
|
269 |
|
270 |
#output
|
@@ -280,15 +196,10 @@ with gr.Blocks(css=css) as demo:
|
|
280 |
# generate new challenge
|
281 |
regenerate_btn.click(fn=get_challenge, inputs=[], outputs=[challenge_display])
|
282 |
|
283 |
-
#countdown
|
284 |
-
countdown_button.click(fn=countdown, inputs=[slider], outputs=[slider])
|
285 |
-
stop_countdown_button.click(fn=stop_countdown)
|
286 |
-
reset_countdown_button.click(fn=reset_countdown,inputs=[slider],outputs=[slider])
|
287 |
-
|
288 |
#submissions
|
289 |
#trigger generation either through hitting enter in the text field, or clicking the button.
|
290 |
-
btn.click(fn=generate_images_wrapper, inputs=[text, pw,
|
291 |
-
text.submit(fn=generate_images_wrapper, inputs=[text, pw,
|
292 |
show_labels.change(fn=update_labels, inputs=[show_labels], outputs=[output_images])
|
293 |
|
294 |
#downloads
|
|
|
13 |
|
14 |
# gradio / hf / image gen stuff
|
15 |
import gradio as gr
|
16 |
+
import anthropic
|
17 |
from dotenv import load_dotenv
|
18 |
|
19 |
# stats stuff
|
|
|
21 |
from pymongo.server_api import ServerApi
|
22 |
import time
|
23 |
|
|
|
|
|
|
|
24 |
|
25 |
load_dotenv()
|
26 |
|
27 |
+
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
|
28 |
|
29 |
pw_key = os.getenv("PW")
|
30 |
|
|
|
34 |
if pw_key == "":
|
35 |
sys.exit("Please Provide A Password in the Environment Variables")
|
36 |
|
37 |
+
if ANTHROPIC_API_KEY == "":
|
38 |
sys.exit("Please Provide Your API Key")
|
39 |
|
40 |
+
client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
|
41 |
+
print(client)
|
42 |
+
|
43 |
# Connect to MongoDB
|
44 |
uri = os.getenv("MONGO_URI")
|
45 |
mongo_client = MongoClient(uri, server_api=ServerApi('1'))
|
|
|
69 |
updated_gallery = [(path, label if show_labels else "") for path, label in zip(image_paths_global, image_labels_global)]
|
70 |
return updated_gallery
|
71 |
|
72 |
+
def generate_images_wrapper(prompts, pw, show_labels):
|
73 |
global image_paths_global, image_labels_global
|
74 |
+
image_paths, image_labels = generate_images(prompts, pw)
|
75 |
image_paths_global = image_paths
|
76 |
|
77 |
# store this as a global so we can handle toggle state
|
|
|
108 |
image_labels_global = [] # Reset the global variable
|
109 |
return zip_path
|
110 |
|
111 |
+
def generate_images(prompts, pw):
|
112 |
# Check for a valid password
|
113 |
|
114 |
if pw != os.getenv("PW"):
|
|
|
121 |
# Split the prompts string into individual prompts based on semicolon separation
|
122 |
prompts_list = [prompt for prompt in prompts.split(';') if prompt]
|
123 |
|
124 |
+
model = "claude-3-opus-20240229"
|
125 |
+
|
126 |
for i, entry in enumerate(prompts_list):
|
127 |
entry_parts = entry.split('-', 1) # Split by the first dash found
|
128 |
if len(entry_parts) == 2:
|
|
|
134 |
|
135 |
users.append(user_initials) # Append user initials to the list
|
136 |
|
137 |
+
prompt_w_challenge = f"{challenge}: {text}"
|
138 |
+
print(prompt_w_challenge)
|
139 |
+
|
140 |
+
response = client.messages.create(
|
141 |
+
max_tokens=1024,
|
142 |
+
messages=[
|
143 |
+
{
|
144 |
+
"role": "user",
|
145 |
+
"content": f"Generate an image that depicts the following prompt: {prompt_w_challenge}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
}
|
147 |
+
],
|
148 |
+
model=model,
|
149 |
+
)
|
150 |
+
print(response.content)
|
151 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
|
154 |
#custom css
|
|
|
161 |
|
162 |
with gr.Blocks(css=css) as demo:
|
163 |
|
164 |
+
gr.Markdown("# <center>Prompt de Resistance Claude 3</center>")
|
165 |
|
166 |
+
pw = gr.Textbox(label="Password", type="password", placeholder="Enter the password to unlock the service", value="REBEL.pier6moment")
|
167 |
|
168 |
#instructions
|
169 |
with gr.Accordion("Instructions & Tips",label="instructions",open=False):
|
|
|
177 |
regenerate_btn = gr.Button("New Challenge")
|
178 |
|
179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
#prompts
|
181 |
with gr.Accordion("Prompts",label="Prompts",open=True):
|
182 |
+
text = gr.Textbox(label="What do you want to create?", placeholder="Enter your text and then click on the \"Image Generate\" button")
|
183 |
+
with gr.Row():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
btn = gr.Button("Generate Images")
|
185 |
|
186 |
#output
|
|
|
196 |
# generate new challenge
|
197 |
regenerate_btn.click(fn=get_challenge, inputs=[], outputs=[challenge_display])
|
198 |
|
|
|
|
|
|
|
|
|
|
|
199 |
#submissions
|
200 |
#trigger generation either through hitting enter in the text field, or clicking the button.
|
201 |
+
btn.click(fn=generate_images_wrapper, inputs=[text, pw, show_labels ], outputs=output_images, api_name=False)
|
202 |
+
text.submit(fn=generate_images_wrapper, inputs=[text, pw, show_labels], outputs=output_images, api_name="generate_image") # Generate an api endpoint in Gradio / HF
|
203 |
show_labels.change(fn=update_labels, inputs=[show_labels], outputs=[output_images])
|
204 |
|
205 |
#downloads
|
requirements.txt
CHANGED
@@ -2,4 +2,6 @@ gradio==4.2.0
|
|
2 |
openai==1.2.3
|
3 |
python-dotenv==1.0.0
|
4 |
pymongo
|
5 |
-
replicate==0.24.0
|
|
|
|
|
|
2 |
openai==1.2.3
|
3 |
python-dotenv==1.0.0
|
4 |
pymongo
|
5 |
+
replicate==0.24.0
|
6 |
+
anthropic==0.18.1
|
7 |
+
tokenizers==0.15.2
|