File size: 5,292 Bytes
f5b302e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
import gradio as gr
from utils import SocialGraphManager, SuggestionGenerator
# Initialize the social graph manager and suggestion generator
social_graph = SocialGraphManager("social_graph.json")
suggestion_generator = SuggestionGenerator()
def format_person_display(person):
"""Format person information for display in the dropdown."""
return f"{person['name']} ({person['role']})"
def get_people_choices():
"""Get formatted choices for the people dropdown."""
people = social_graph.get_people_list()
return {format_person_display(person): person["id"] for person in people}
def get_suggestion_categories():
"""Get suggestion categories from the social graph."""
if "common_utterances" in social_graph.graph:
return list(social_graph.graph["common_utterances"].keys())
return []
def on_person_change(person_id):
"""Handle person selection change."""
if not person_id:
return "", []
person_context = social_graph.get_person_context(person_id)
context_info = f"**{person_context.get('name', '')}** - {person_context.get('role', '')}\n\n"
context_info += f"**Topics:** {', '.join(person_context.get('topics', []))}\n\n"
context_info += f"**Frequency:** {person_context.get('frequency', '')}\n\n"
context_info += f"**Context:** {person_context.get('context', '')}"
# Get common phrases for this person
phrases = person_context.get("common_phrases", [])
phrases_text = "\n\n".join(phrases)
return context_info, phrases_text
def generate_suggestions(person_id, user_input, suggestion_type):
"""Generate suggestions based on the selected person and user input."""
if not person_id:
return "Please select a person first."
person_context = social_graph.get_person_context(person_id)
# If suggestion type is "model", use the language model
if suggestion_type == "model":
suggestion = suggestion_generator.generate_suggestion(person_context, user_input)
return suggestion
# If suggestion type is "common_phrases", use the person's common phrases
elif suggestion_type == "common_phrases":
phrases = social_graph.get_relevant_phrases(person_id, user_input)
return "\n\n".join(phrases)
# If suggestion type is a category from common_utterances
elif suggestion_type in get_suggestion_categories():
utterances = social_graph.get_common_utterances(suggestion_type)
return "\n\n".join(utterances)
# Default fallback
return "No suggestions available."
def speak_text(text):
"""Function to 'speak' the selected text (placeholder for TTS integration)."""
return f"Speaking: {text}"
# Create the Gradio interface
with gr.Blocks(title="AAC Social Graph Assistant") as demo:
gr.Markdown("# AAC Social Graph Assistant")
gr.Markdown("Select who you're talking to, and get contextually relevant suggestions.")
with gr.Row():
with gr.Column(scale=1):
# Person selection
person_dropdown = gr.Dropdown(
choices=get_people_choices(),
label="Who are you talking to?"
)
# Context display
context_display = gr.Markdown(label="Context Information")
# User input
user_input = gr.Textbox(
label="Your current conversation (optional)",
placeholder="Type or paste current conversation context here...",
lines=3
)
# Suggestion type selection
suggestion_type = gr.Radio(
choices=["model", "common_phrases"] + get_suggestion_categories(),
value="model",
label="Suggestion Type"
)
# Generate button
generate_btn = gr.Button("Generate Suggestions", variant="primary")
with gr.Column(scale=1):
# Common phrases
common_phrases = gr.Textbox(
label="Common Phrases",
placeholder="Common phrases will appear here...",
lines=5
)
# Suggestions output
suggestions_output = gr.Textbox(
label="Suggested Phrases",
placeholder="Suggestions will appear here...",
lines=8
)
# Speak button
speak_btn = gr.Button("Speak Selected Text", variant="secondary")
# Speech output
speech_output = gr.Textbox(
label="Speech Output",
placeholder="Speech output will appear here...",
lines=2
)
# Set up event handlers
person_dropdown.change(
on_person_change,
inputs=[person_dropdown],
outputs=[context_display, common_phrases]
)
generate_btn.click(
generate_suggestions,
inputs=[person_dropdown, user_input, suggestion_type],
outputs=[suggestions_output]
)
speak_btn.click(
speak_text,
inputs=[suggestions_output],
outputs=[speech_output]
)
# Launch the app
if __name__ == "__main__":
demo.launch()
|