Spaces:
Running
Running
Update app.py
Browse filescounting image gens, logging, stats
app.py
CHANGED
@@ -49,6 +49,7 @@ def genUsageStats(do_reset=False):
|
|
49 |
ttotal4mini_out = 0
|
50 |
totalAudio = 0
|
51 |
totalSpeech = 0
|
|
|
52 |
for user in unames:
|
53 |
tokens4o_in = 0
|
54 |
tokens4o_out = 0
|
@@ -128,8 +129,29 @@ def genUsageStats(do_reset=False):
|
|
128 |
sleep(3)
|
129 |
if not accessOk:
|
130 |
return f'File access failed reading speech stats for user: {user}'
|
131 |
-
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
return result
|
134 |
|
135 |
def new_conversation(user):
|
@@ -204,6 +226,10 @@ def new_func(user):
|
|
204 |
dataFile = dataDir + user + '_log.txt'
|
205 |
return dataFile
|
206 |
|
|
|
|
|
|
|
|
|
207 |
def transcribe(user, pwd, fpath):
|
208 |
user = user.lower().strip()
|
209 |
pwd = pwd.lower().strip()
|
@@ -298,7 +324,7 @@ def make_image(prompt, user, pwd):
|
|
298 |
fpath = None
|
299 |
if user in unames and pwd == pwdList[unames.index(user)]:
|
300 |
if len(prompt.strip()) == 0:
|
301 |
-
return [None, 'You must provide a prompt']
|
302 |
try:
|
303 |
response = client.images.generate(model='dall-e-2', prompt=prompt,size='512x512',
|
304 |
quality='standard', response_format='b64_json')
|
@@ -306,6 +332,8 @@ def make_image(prompt, user, pwd):
|
|
306 |
image = Image.open(BytesIO(base64.b64decode(image_data)))
|
307 |
fpath = dataDir + user + '.png'
|
308 |
image.save(fpath)
|
|
|
|
|
309 |
msg = 'Image created!'
|
310 |
except:
|
311 |
return [None, msg]
|
@@ -314,6 +342,31 @@ def make_image(prompt, user, pwd):
|
|
314 |
return [None, msg]
|
315 |
return [fpath, msg]
|
316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
|
318 |
with gr.Blocks() as demo:
|
319 |
history = gr.State([])
|
@@ -419,15 +472,13 @@ with gr.Blocks() as demo:
|
|
419 |
|
420 |
|
421 |
gr.Markdown('# GPT Chat')
|
422 |
-
gr.Markdown('Enter user name & password
|
423 |
-
'You can enter prompts by voice. Tap "Record", speak, then tap "Stop". ' +
|
424 |
-
'Tap "Reset Voice Entry" to enter more voice. Tap "Speak Dialog" to hear dialog. ' +
|
425 |
-
'Note: first voice response may take a longer time.')
|
426 |
with gr.Row():
|
427 |
user_window = gr.Textbox(label = "User Name")
|
428 |
user_window.blur(fn=update_user, inputs=user_window, outputs=[user, user_window])
|
429 |
pwd_window = gr.Textbox(label = "Password")
|
430 |
pwd_window.blur(updatePassword, inputs = pwd_window, outputs = [password, pwd_window])
|
|
|
431 |
with gr.Row():
|
432 |
audio_widget = gr.Audio(type='filepath', format='wav',waveform_options=gr.WaveformOptions(
|
433 |
show_recording_waveform=True), sources=['microphone'], scale = 3, label="Prompt/Question Voice Entry", max_length=120)
|
@@ -455,5 +506,6 @@ with gr.Blocks() as demo:
|
|
455 |
output_window.change(fn=set_speak_button, inputs=output_window,outputs=speak_output)
|
456 |
button_do_image.click(fn=make_image, inputs=[prompt_window,user_window, password],outputs=[image_window, output_window])
|
457 |
image_window.change(fn=delete_image, inputs=[user])
|
|
|
458 |
# demo.unload(final_clean_up(user))
|
459 |
demo.launch(share=True)
|
|
|
49 |
ttotal4mini_out = 0
|
50 |
totalAudio = 0
|
51 |
totalSpeech = 0
|
52 |
+
totalImages = 0
|
53 |
for user in unames:
|
54 |
tokens4o_in = 0
|
55 |
tokens4o_out = 0
|
|
|
129 |
sleep(3)
|
130 |
if not accessOk:
|
131 |
return f'File access failed reading speech stats for user: {user}'
|
132 |
+
user_images = 0
|
133 |
+
fp = image_count_path(user)
|
134 |
+
if os.path.exists(fp):
|
135 |
+
accessOk = False
|
136 |
+
for i in range(3):
|
137 |
+
try:
|
138 |
+
with open(fp) as f:
|
139 |
+
dataList = f.readlines()
|
140 |
+
if do_reset:
|
141 |
+
os.remove(fp)
|
142 |
+
else:
|
143 |
+
for line in dataList:
|
144 |
+
cnt = line.strip()
|
145 |
+
user_images += int(cnt)
|
146 |
+
totalImages += int(user_images)
|
147 |
+
accessOk = True
|
148 |
+
break
|
149 |
+
except:
|
150 |
+
sleep(3)
|
151 |
+
if not accessOk:
|
152 |
+
return f'File access failed reading image gen stats for user: {user}'
|
153 |
+
result.append([user, f'{tokens4mini_in}/{tokens4mini_out}', f'{tokens4o_in}/{tokens4o_out}', f'audio:{userAudio}',f'speech:{userSpeech}', f'images:{user_images}'])
|
154 |
+
result.append(['totals', f'{ttotal4mini_in}/{ttotal4mini_out}', f'{ttotal4o_in}/{ttotal4o_out}', f'audio:{totalAudio}',f'speech:{totalSpeech}', f'images:{totalImages}'])
|
155 |
return result
|
156 |
|
157 |
def new_conversation(user):
|
|
|
226 |
dataFile = dataDir + user + '_log.txt'
|
227 |
return dataFile
|
228 |
|
229 |
+
def image_count_path(user):
|
230 |
+
fpath = dataDir + user + '_image_count.txt'
|
231 |
+
return fpath
|
232 |
+
|
233 |
def transcribe(user, pwd, fpath):
|
234 |
user = user.lower().strip()
|
235 |
pwd = pwd.lower().strip()
|
|
|
324 |
fpath = None
|
325 |
if user in unames and pwd == pwdList[unames.index(user)]:
|
326 |
if len(prompt.strip()) == 0:
|
327 |
+
return [None, 'You must provide a prompt describing image you desire']
|
328 |
try:
|
329 |
response = client.images.generate(model='dall-e-2', prompt=prompt,size='512x512',
|
330 |
quality='standard', response_format='b64_json')
|
|
|
332 |
image = Image.open(BytesIO(base64.b64decode(image_data)))
|
333 |
fpath = dataDir + user + '.png'
|
334 |
image.save(fpath)
|
335 |
+
with open(image_count_path(user), 'at') as fp:
|
336 |
+
fp.write('1\n')
|
337 |
msg = 'Image created!'
|
338 |
except:
|
339 |
return [None, msg]
|
|
|
342 |
return [None, msg]
|
343 |
return [fpath, msg]
|
344 |
|
345 |
+
def show_help():
|
346 |
+
return '''
|
347 |
+
1. Login with user name and password (not case-sensitive)
|
348 |
+
2. Type prompts (questions, instructions) into prompt window (OR) you can speak prompts by
|
349 |
+
tapping the audio "Record" button, saying your prompt, then tapping the "Stop" button.
|
350 |
+
Your prompt will appear in the Prompt window, and you can edit it there if needed.
|
351 |
+
3. Chat:
|
352 |
+
1.1 tap the "Submit Prompt/Question" button. The response will appear in the Dialog window.
|
353 |
+
1.2 To speak the response, tap the "Speak Dialog" button.
|
354 |
+
1.3 Enter follow-up questions in the Prompt window either by typing or speaking. Tap the voice
|
355 |
+
entry "Reset Voice Entry" button to enable additional voice entry. Then tap "Submit Prompt/Question".
|
356 |
+
1.4 If topic changes or when done chatting, tap the "Restart Conversation" button.
|
357 |
+
4. Make Image:
|
358 |
+
1.1 Enter description of desired image in prompt window via either typing or voice entry
|
359 |
+
1.2 Tap the "Make Image" button. This can take a few seconds.
|
360 |
+
1.3 There is a download button on the image display if your system supports file downloads.
|
361 |
+
1.4 When done viewing image, tap the "Restart Conversation" button
|
362 |
+
|
363 |
+
Hints:
|
364 |
+
1. Better chat and image results are obtained by including detailed descriptions and instructions
|
365 |
+
in the prompt.
|
366 |
+
2. Always tap "Restart Conversation" before requesting an image or changing chat topics.
|
367 |
+
3. Audio input and output functions depend on the hardware capability of your device.'''
|
368 |
+
|
369 |
+
|
370 |
|
371 |
with gr.Blocks() as demo:
|
372 |
history = gr.State([])
|
|
|
472 |
|
473 |
|
474 |
gr.Markdown('# GPT Chat')
|
475 |
+
gr.Markdown('Enter user name & password. Tap "Help & Hints" button for more instructions.')
|
|
|
|
|
|
|
476 |
with gr.Row():
|
477 |
user_window = gr.Textbox(label = "User Name")
|
478 |
user_window.blur(fn=update_user, inputs=user_window, outputs=[user, user_window])
|
479 |
pwd_window = gr.Textbox(label = "Password")
|
480 |
pwd_window.blur(updatePassword, inputs = pwd_window, outputs = [password, pwd_window])
|
481 |
+
help_button = gr.Button(value='Help & Hints')
|
482 |
with gr.Row():
|
483 |
audio_widget = gr.Audio(type='filepath', format='wav',waveform_options=gr.WaveformOptions(
|
484 |
show_recording_waveform=True), sources=['microphone'], scale = 3, label="Prompt/Question Voice Entry", max_length=120)
|
|
|
506 |
output_window.change(fn=set_speak_button, inputs=output_window,outputs=speak_output)
|
507 |
button_do_image.click(fn=make_image, inputs=[prompt_window,user_window, password],outputs=[image_window, output_window])
|
508 |
image_window.change(fn=delete_image, inputs=[user])
|
509 |
+
help_button.click(fn=show_help, outputs=output_window)
|
510 |
# demo.unload(final_clean_up(user))
|
511 |
demo.launch(share=True)
|