Enhance model response generation to support conversation initiation
Browse files
app.py
CHANGED
|
@@ -364,7 +364,7 @@ with gr.Blocks(title="Will's AAC Communication Aid") as demo:
|
|
| 364 |
topic_dropdown = gr.Dropdown(
|
| 365 |
choices=[], # Will be populated when a person is selected
|
| 366 |
label="Topic (optional):",
|
| 367 |
-
info="Select a topic
|
| 368 |
allow_custom_value=True,
|
| 369 |
)
|
| 370 |
|
|
@@ -374,7 +374,7 @@ with gr.Blocks(title="Will's AAC Communication Aid") as demo:
|
|
| 374 |
# User input section
|
| 375 |
with gr.Row():
|
| 376 |
user_input = gr.Textbox(
|
| 377 |
-
label="What they said to me:",
|
| 378 |
placeholder='Examples:\n"How was your physio session today?"\n"The kids are asking if you want to watch a movie tonight"\n"I\'ve been looking at that new AAC software you mentioned"',
|
| 379 |
lines=3,
|
| 380 |
)
|
|
@@ -391,14 +391,14 @@ with gr.Blocks(title="Will's AAC Communication Aid") as demo:
|
|
| 391 |
# Suggestion type selection
|
| 392 |
suggestion_type = gr.Radio(
|
| 393 |
choices=[
|
| 394 |
-
"auto_detect",
|
| 395 |
"model",
|
|
|
|
| 396 |
"common_phrases",
|
| 397 |
]
|
| 398 |
+ get_suggestion_categories(),
|
| 399 |
value="model", # Default to model for better results
|
| 400 |
label="How should I respond?",
|
| 401 |
-
info="Choose
|
| 402 |
)
|
| 403 |
|
| 404 |
# Model selection
|
|
@@ -420,7 +420,9 @@ with gr.Blocks(title="Will's AAC Communication Aid") as demo:
|
|
| 420 |
)
|
| 421 |
|
| 422 |
# Generate button
|
| 423 |
-
generate_btn = gr.Button(
|
|
|
|
|
|
|
| 424 |
|
| 425 |
# Model status
|
| 426 |
model_status = gr.Markdown(
|
|
|
|
| 364 |
topic_dropdown = gr.Dropdown(
|
| 365 |
choices=[], # Will be populated when a person is selected
|
| 366 |
label="Topic (optional):",
|
| 367 |
+
info="Select a topic to discuss or respond about",
|
| 368 |
allow_custom_value=True,
|
| 369 |
)
|
| 370 |
|
|
|
|
| 374 |
# User input section
|
| 375 |
with gr.Row():
|
| 376 |
user_input = gr.Textbox(
|
| 377 |
+
label="What they said to me: (leave empty to start a conversation)",
|
| 378 |
placeholder='Examples:\n"How was your physio session today?"\n"The kids are asking if you want to watch a movie tonight"\n"I\'ve been looking at that new AAC software you mentioned"',
|
| 379 |
lines=3,
|
| 380 |
)
|
|
|
|
| 391 |
# Suggestion type selection
|
| 392 |
suggestion_type = gr.Radio(
|
| 393 |
choices=[
|
|
|
|
| 394 |
"model",
|
| 395 |
+
"auto_detect",
|
| 396 |
"common_phrases",
|
| 397 |
]
|
| 398 |
+ get_suggestion_categories(),
|
| 399 |
value="model", # Default to model for better results
|
| 400 |
label="How should I respond?",
|
| 401 |
+
info="Choose response type (model = AI-generated, auto_detect = automatic category detection)",
|
| 402 |
)
|
| 403 |
|
| 404 |
# Model selection
|
|
|
|
| 420 |
)
|
| 421 |
|
| 422 |
# Generate button
|
| 423 |
+
generate_btn = gr.Button(
|
| 424 |
+
"Generate My Responses/Conversation Starters", variant="primary"
|
| 425 |
+
)
|
| 426 |
|
| 427 |
# Model status
|
| 428 |
model_status = gr.Markdown(
|
utils.py
CHANGED
|
@@ -372,13 +372,52 @@ We communicate {frequency}.
|
|
| 372 |
elif selected_topic == "cycling" and "cycling" in context:
|
| 373 |
prompt += "I miss being able to cycle but enjoy talking about past cycling adventures.\n"
|
| 374 |
|
| 375 |
-
# Add the user's message if provided
|
| 376 |
if user_input:
|
|
|
|
| 377 |
prompt += f'\n{name} just said to me: "{user_input}"\n'
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 382 |
|
| 383 |
# Add the response prompt with specific guidance
|
| 384 |
# Check if this is an instruction-tuned model
|
|
@@ -389,19 +428,39 @@ We communicate {frequency}.
|
|
| 389 |
|
| 390 |
if is_instruction_model:
|
| 391 |
# Use instruction format for instruction-tuned models
|
| 392 |
-
|
|
|
|
|
|
|
| 393 |
<instruction>
|
| 394 |
Respond to {name} in a way that is natural, brief (1-2 sentences), and directly relevant to what they just said.
|
| 395 |
Use language appropriate for our relationship.
|
| 396 |
</instruction>
|
| 397 |
|
| 398 |
My response to {name}:"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 399 |
else:
|
| 400 |
# Use standard format for non-instruction models
|
| 401 |
-
|
|
|
|
|
|
|
| 402 |
I want to respond to {name} in a way that is natural, brief (1-2 sentences), and directly relevant to what they just said. I'll use language appropriate for our relationship.
|
| 403 |
|
| 404 |
My response to {name}:"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 405 |
|
| 406 |
# Generate suggestion
|
| 407 |
try:
|
|
|
|
| 372 |
elif selected_topic == "cycling" and "cycling" in context:
|
| 373 |
prompt += "I miss being able to cycle but enjoy talking about past cycling adventures.\n"
|
| 374 |
|
| 375 |
+
# Add the user's message if provided, or set up for conversation initiation
|
| 376 |
if user_input:
|
| 377 |
+
# If user input is provided, we're responding to something
|
| 378 |
prompt += f'\n{name} just said to me: "{user_input}"\n'
|
| 379 |
+
prompt += f"I want to respond directly to what {name} just said.\n"
|
| 380 |
+
else:
|
| 381 |
+
# No user input means we're initiating a conversation
|
| 382 |
+
if selected_topic:
|
| 383 |
+
# If a topic is selected, initiate conversation about that topic
|
| 384 |
+
prompt += f"\nI'm about to start a conversation with {name} about {selected_topic}.\n"
|
| 385 |
+
|
| 386 |
+
# Add specific context about initiating this topic with this person
|
| 387 |
+
if selected_topic == "football" and "Manchester United" in context:
|
| 388 |
+
prompt += (
|
| 389 |
+
"We both support Manchester United and often discuss matches.\n"
|
| 390 |
+
)
|
| 391 |
+
elif selected_topic == "family" and role in [
|
| 392 |
+
"wife",
|
| 393 |
+
"husband",
|
| 394 |
+
"son",
|
| 395 |
+
"daughter",
|
| 396 |
+
]:
|
| 397 |
+
prompt += (
|
| 398 |
+
"I want to check in about our family plans or activities.\n"
|
| 399 |
+
)
|
| 400 |
+
elif selected_topic == "health" and role in [
|
| 401 |
+
"doctor",
|
| 402 |
+
"nurse",
|
| 403 |
+
"therapist",
|
| 404 |
+
]:
|
| 405 |
+
prompt += "I want to discuss my health condition or symptoms.\n"
|
| 406 |
+
elif selected_topic == "work" and role in ["work colleague", "boss"]:
|
| 407 |
+
prompt += "I want to discuss a work-related matter.\n"
|
| 408 |
+
|
| 409 |
+
prompt += f"I want to initiate a conversation about {selected_topic} in a natural way.\n"
|
| 410 |
+
elif common_phrases:
|
| 411 |
+
# Use context about our typical conversations if no specific topic
|
| 412 |
+
prompt += f"\nI'm about to start a conversation with {name}.\n"
|
| 413 |
+
default_message = common_phrases[0]
|
| 414 |
+
prompt += f'{name} typically says things like: "{default_message}"\n'
|
| 415 |
+
prompt += f"We typically talk about: {', '.join(topics)}\n"
|
| 416 |
+
prompt += "I want to initiate a conversation in a natural way based on our relationship.\n"
|
| 417 |
+
else:
|
| 418 |
+
# Generic conversation starter
|
| 419 |
+
prompt += f"\nI'm about to start a conversation with {name}.\n"
|
| 420 |
+
prompt += "I want to initiate a conversation in a natural way based on our relationship.\n"
|
| 421 |
|
| 422 |
# Add the response prompt with specific guidance
|
| 423 |
# Check if this is an instruction-tuned model
|
|
|
|
| 428 |
|
| 429 |
if is_instruction_model:
|
| 430 |
# Use instruction format for instruction-tuned models
|
| 431 |
+
if user_input:
|
| 432 |
+
# Responding to something
|
| 433 |
+
prompt += f"""
|
| 434 |
<instruction>
|
| 435 |
Respond to {name} in a way that is natural, brief (1-2 sentences), and directly relevant to what they just said.
|
| 436 |
Use language appropriate for our relationship.
|
| 437 |
</instruction>
|
| 438 |
|
| 439 |
My response to {name}:"""
|
| 440 |
+
else:
|
| 441 |
+
# Initiating a conversation
|
| 442 |
+
prompt += f"""
|
| 443 |
+
<instruction>
|
| 444 |
+
Start a conversation with {name} in a natural, brief (1-2 sentences) way.
|
| 445 |
+
Use language appropriate for our relationship.
|
| 446 |
+
If a topic was selected, focus on that topic.
|
| 447 |
+
</instruction>
|
| 448 |
+
|
| 449 |
+
My conversation starter to {name}:"""
|
| 450 |
else:
|
| 451 |
# Use standard format for non-instruction models
|
| 452 |
+
if user_input:
|
| 453 |
+
# Responding to something
|
| 454 |
+
prompt += f"""
|
| 455 |
I want to respond to {name} in a way that is natural, brief (1-2 sentences), and directly relevant to what they just said. I'll use language appropriate for our relationship.
|
| 456 |
|
| 457 |
My response to {name}:"""
|
| 458 |
+
else:
|
| 459 |
+
# Initiating a conversation
|
| 460 |
+
prompt += f"""
|
| 461 |
+
I want to start a conversation with {name} in a natural, brief (1-2 sentences) way. I'll use language appropriate for our relationship.
|
| 462 |
+
|
| 463 |
+
My conversation starter to {name}:"""
|
| 464 |
|
| 465 |
# Generate suggestion
|
| 466 |
try:
|