Update app.py
Browse files
app.py
CHANGED
@@ -18,17 +18,17 @@ logger = logging.getLogger(__name__) #17
|
|
18 |
#18
|
19 |
# System prompt for the AI #19
|
20 |
SYSTEM_PROMPT = """ #20
|
21 |
-
You are LOSS DOG (Life, Occupation & Student Story Digital Output Generator), an engaging and
|
22 |
-
supportive information collector that focuses on understanding a person's complete educational
|
23 |
-
and professional journey. Your approach is flexible, allowing both structured metrics and personal narratives.
|
24 |
-
|
25 |
-
Core Traits:
|
26 |
-
- Conversational and natural in gathering information
|
27 |
-
- Equally values quantitative achievements and qualitative experiences
|
28 |
-
- Adapts to each person's unique story
|
29 |
-
- Encourages sharing of both metrics and personal growth
|
30 |
-
- Maintains context throughout the conversation
|
31 |
-
"""
|
32 |
#32
|
33 |
@dataclass #33
|
34 |
class ConversationState: #34
|
@@ -104,7 +104,7 @@ class EducationCareerCollector: #72
|
|
104 |
for attempt in range(max_retries): #104
|
105 |
try: #105
|
106 |
response = self.client.chat.completions.create( #106
|
107 |
-
model="gpt-
|
108 |
messages=[ #108
|
109 |
{"role": "system", "content": SYSTEM_PROMPT}, #109
|
110 |
*[{ #110
|
@@ -151,7 +151,8 @@ class EducationCareerCollector: #72
|
|
151 |
"completion_status": self.get_completion_status(), #151
|
152 |
"timestamp": datetime.now().isoformat() #152
|
153 |
} #153
|
154 |
-
|
|
|
155 |
"""Update the conversation state based on AI response.""" #155
|
156 |
try: #156
|
157 |
# Create analysis prompt #157
|
@@ -172,7 +173,7 @@ def _update_conversation_state(self, ai_message: str) -> None: #154
|
|
172 |
|
173 |
# Get analysis from AI #164
|
174 |
response = self.client.chat.completions.create( #165
|
175 |
-
model="gpt-
|
176 |
messages=[ #167
|
177 |
{"role": "system", "content": SYSTEM_PROMPT}, #168
|
178 |
*self.conversation_history, #169
|
@@ -274,9 +275,9 @@ def _update_conversation_state(self, ai_message: str) -> None: #154
|
|
274 |
|
275 |
Structure the JSON naturally around the topics they shared. #249
|
276 |
""" #250
|
277 |
-
# Get initial analysis of conversation content #251
|
278 |
analysis_response = self.client.chat.completions.create( #252
|
279 |
-
model="gpt-
|
280 |
messages=[ #254
|
281 |
{"role": "system", "content": SYSTEM_PROMPT}, #255
|
282 |
*self.conversation_history, #256
|
@@ -303,7 +304,7 @@ def _update_conversation_state(self, ai_message: str) -> None: #154
|
|
303 |
|
304 |
# Generate the profile JSON #274
|
305 |
profile_response = self.client.chat.completions.create( #275
|
306 |
-
model="gpt-
|
307 |
messages=[ #277
|
308 |
{"role": "system", "content": SYSTEM_PROMPT}, #278
|
309 |
*self.conversation_history, #279
|
@@ -434,7 +435,7 @@ def create_education_career_interface(): #327
|
|
434 |
with gr.Row(): #388
|
435 |
clear = gr.Button("ποΈ Clear Chat", scale=1) #389
|
436 |
generate = gr.Button("π Generate Profile", scale=2) #390
|
437 |
-
with gr.Column(scale=1): #391
|
438 |
# Progress Information #392
|
439 |
progress_info = gr.Markdown( #393
|
440 |
"### Profile Progress\nStart sharing your story!", #394
|
@@ -456,14 +457,14 @@ with gr.Column(scale=1): #391
|
|
456 |
|
457 |
# Tips and Guidelines #408
|
458 |
with gr.Accordion("π‘ Tips", open=False): #409
|
459 |
-
gr.Markdown("""
|
460 |
-
### Share Your Story Naturally
|
461 |
|
462 |
-
- Tell us about experiences that matter to you
|
463 |
-
- Include both achievements and challenges
|
464 |
-
- Share numbers when they're meaningful
|
465 |
-
- Describe your growth and learning
|
466 |
-
- Talk about what makes your journey unique
|
467 |
""") #417
|
468 |
|
469 |
def process_message(message: str, history: list, key: str) -> tuple: #418
|
@@ -565,38 +566,37 @@ with gr.Column(scale=1): #391
|
|
565 |
submit.click( #498
|
566 |
process_message, #499
|
567 |
[msg, chatbot, api_key], #500
|
568 |
-
[
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
) #511
|
579 |
|
580 |
-
generate.click( #
|
581 |
-
generate_profile, #
|
582 |
-
[api_key], #
|
583 |
-
[output_file, json_preview, status_msg] #
|
584 |
-
) #
|
585 |
|
586 |
-
clear.click( #
|
587 |
-
clear_interface, #
|
588 |
-
None, #
|
589 |
-
[chatbot, status_msg, progress_info, json_preview, output_file] #
|
590 |
-
) #
|
591 |
|
592 |
-
return demo #
|
593 |
|
594 |
-
if __name__ == "__main__": #
|
595 |
-
demo = create_education_career_interface() #
|
596 |
-
demo.launch( #
|
597 |
-
server_name="0.0.0.0", #
|
598 |
-
server_port=7860, #
|
599 |
-
share=True, #
|
600 |
-
enable_queue=True, #
|
601 |
-
show_error=True #
|
602 |
-
) #
|
|
|
18 |
#18
|
19 |
# System prompt for the AI #19
|
20 |
SYSTEM_PROMPT = """ #20
|
21 |
+
You are LOSS DOG (Life, Occupation & Student Story Digital Output Generator), an engaging and
|
22 |
+
supportive information collector that focuses on understanding a person's complete educational
|
23 |
+
and professional journey. Your approach is flexible, allowing both structured metrics and personal narratives.
|
24 |
+
|
25 |
+
Core Traits:
|
26 |
+
- Conversational and natural in gathering information
|
27 |
+
- Equally values quantitative achievements and qualitative experiences
|
28 |
+
- Adapts to each person's unique story
|
29 |
+
- Encourages sharing of both metrics and personal growth
|
30 |
+
- Maintains context throughout the conversation
|
31 |
+
"""
|
32 |
#32
|
33 |
@dataclass #33
|
34 |
class ConversationState: #34
|
|
|
104 |
for attempt in range(max_retries): #104
|
105 |
try: #105
|
106 |
response = self.client.chat.completions.create( #106
|
107 |
+
model="gpt-4o-mini", #107
|
108 |
messages=[ #108
|
109 |
{"role": "system", "content": SYSTEM_PROMPT}, #109
|
110 |
*[{ #110
|
|
|
151 |
"completion_status": self.get_completion_status(), #151
|
152 |
"timestamp": datetime.now().isoformat() #152
|
153 |
} #153
|
154 |
+
|
155 |
+
def _update_conversation_state(self, ai_message: str) -> None: #154
|
156 |
"""Update the conversation state based on AI response.""" #155
|
157 |
try: #156
|
158 |
# Create analysis prompt #157
|
|
|
173 |
|
174 |
# Get analysis from AI #164
|
175 |
response = self.client.chat.completions.create( #165
|
176 |
+
model="gpt-4o-mini", #166
|
177 |
messages=[ #167
|
178 |
{"role": "system", "content": SYSTEM_PROMPT}, #168
|
179 |
*self.conversation_history, #169
|
|
|
275 |
|
276 |
Structure the JSON naturally around the topics they shared. #249
|
277 |
""" #250
|
278 |
+
# Get initial analysis of conversation content #251
|
279 |
analysis_response = self.client.chat.completions.create( #252
|
280 |
+
model="gpt-4o-mini", #253
|
281 |
messages=[ #254
|
282 |
{"role": "system", "content": SYSTEM_PROMPT}, #255
|
283 |
*self.conversation_history, #256
|
|
|
304 |
|
305 |
# Generate the profile JSON #274
|
306 |
profile_response = self.client.chat.completions.create( #275
|
307 |
+
model="gpt-4o-mini", #276
|
308 |
messages=[ #277
|
309 |
{"role": "system", "content": SYSTEM_PROMPT}, #278
|
310 |
*self.conversation_history, #279
|
|
|
435 |
with gr.Row(): #388
|
436 |
clear = gr.Button("ποΈ Clear Chat", scale=1) #389
|
437 |
generate = gr.Button("π Generate Profile", scale=2) #390
|
438 |
+
with gr.Column(scale=1): #391
|
439 |
# Progress Information #392
|
440 |
progress_info = gr.Markdown( #393
|
441 |
"### Profile Progress\nStart sharing your story!", #394
|
|
|
457 |
|
458 |
# Tips and Guidelines #408
|
459 |
with gr.Accordion("π‘ Tips", open=False): #409
|
460 |
+
gr.Markdown("""
|
461 |
+
### Share Your Story Naturally
|
462 |
|
463 |
+
- Tell us about experiences that matter to you
|
464 |
+
- Include both achievements and challenges
|
465 |
+
- Share numbers when they're meaningful
|
466 |
+
- Describe your growth and learning
|
467 |
+
- Talk about what makes your journey unique
|
468 |
""") #417
|
469 |
|
470 |
def process_message(message: str, history: list, key: str) -> tuple: #418
|
|
|
566 |
submit.click( #498
|
567 |
process_message, #499
|
568 |
[msg, chatbot, api_key], #500
|
569 |
+
[chatbot, status_msg] #501
|
570 |
+
).then( #502
|
571 |
+
update_progress, #503
|
572 |
+
chatbot, #504
|
573 |
+
progress_info #505
|
574 |
+
).then( #506
|
575 |
+
lambda: "", #507
|
576 |
+
None, #508
|
577 |
+
msg #509
|
578 |
+
) #510
|
|
|
579 |
|
580 |
+
generate.click( #511
|
581 |
+
generate_profile, #512
|
582 |
+
[api_key], #513
|
583 |
+
[output_file, json_preview, status_msg] #514
|
584 |
+
) #515
|
585 |
|
586 |
+
clear.click( #516
|
587 |
+
clear_interface, #517
|
588 |
+
None, #518
|
589 |
+
[chatbot, status_msg, progress_info, json_preview, output_file] #519
|
590 |
+
) #520
|
591 |
|
592 |
+
return demo #521
|
593 |
|
594 |
+
if __name__ == "__main__": #522
|
595 |
+
demo = create_education_career_interface() #523
|
596 |
+
demo.launch( #524
|
597 |
+
server_name="0.0.0.0", #525
|
598 |
+
server_port=7860, #526
|
599 |
+
share=True, #527
|
600 |
+
enable_queue=True, #528
|
601 |
+
show_error=True #529
|
602 |
+
) #530
|