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()