File size: 7,488 Bytes
28635a8
0edb63c
b9a026e
0edb63c
171089e
 
 
 
 
0edb63c
 
b9a026e
0edb63c
 
 
 
8a05c43
0edb63c
b9a026e
0edb63c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28635a8
 
 
 
401487d
28635a8
171089e
28635a8
 
7918fa4
28635a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401487d
28635a8
 
401487d
28635a8
 
 
 
 
 
def9f6b
171089e
28635a8
 
 
 
 
401487d
28635a8
d98e15a
28635a8
 
 
 
 
 
 
 
 
 
 
 
8557c27
28635a8
 
a0371ce
28635a8
 
 
 
1da4237
28635a8
 
 
3fe198b
b7aaa32
8557c27
 
 
 
171089e
8557c27
3dcdff5
28635a8
743a64b
52ce9fa
4d3f91e
52ce9fa
 
171089e
 
 
52ce9fa
 
171089e
52ce9fa
 
 
b9a026e
52ce9fa
 
ba60745
 
 
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import gradio as gr

# Define the theme with custom colors and styles, including larger text sizes
theme = gr.themes.Default(
    primary_hue=gr.themes.Color(
        c100="#ffedd5", c200="#fed7aa", c300="#ffe09e", c400="#c2814c",
        c50="#fff8f0", c500="#f97316", c600="#ea580c", c700="#c2410c",
        c800="#9a3412", c900="#7c2d12", c950="#611f00"
    ),
    secondary_hue="red",
    neutral_hue="slate",
    font=[gr.themes.GoogleFont('jack armstrong'), 'ui-sans-serif', 'system-ui', 'sans-serif'],
    font_mono=[gr.themes.GoogleFont('xkcd'), 'ui-monospace', 'Consolas', 'monospace'],
).set(
    body_text_color='*primary_950',
    body_text_color_dark='*secondary_50',
    body_text_size='26px',  # Increase body text size
    body_text_color_subdued='*primary_400',
    body_text_weight='500',
    background_fill_primary='*primary_300',
    background_fill_primary_dark='*primary_800',
    background_fill_secondary='*primary_50',
    background_fill_secondary_dark='*primary_600',
    border_color_accent='*secondary_950',
    border_color_accent_dark='*body_text_color',
    border_color_accent_subdued='*border_color_accent',
    link_text_color='*secondary_800',
    code_background_fill='*neutral_200',
    code_background_fill_dark='*neutral_100',
    block_shadow='none',
    block_shadow_dark='none',
    form_gap_width='0px',
    checkbox_label_background_fill='*button_secondary_background_fill',
    checkbox_label_background_fill_dark='*button_secondary_background_fill',
    checkbox_label_background_fill_hover='*button_secondary_background_fill_hover',
    checkbox_label_background_fill_hover_dark='*button_secondary_background_fill_hover',
    checkbox_label_shadow='none',
    error_background_fill_dark='*background_fill_primary',
    input_background_fill='*neutral_100',
    input_background_fill_dark='*neutral_700',
    input_border_width='0px',
    input_border_width_dark='0px',
    input_shadow='none',
    input_shadow_dark='none',
    input_shadow_focus='*input_shadow',
    input_shadow_focus_dark='*input_shadow',
    stat_background_fill='*primary_300',
    stat_background_fill_dark='*primary_500',
    button_shadow='none',
    button_shadow_active='none',
    button_shadow_hover='none',
    button_transition='background-color 0.2s ease',
    button_primary_background_fill='*primary_200',
    button_primary_background_fill_dark='*primary_700',
    button_primary_background_fill_hover='*button_primary_background_fill',
    button_primary_background_fill_hover_dark='*button_primary_background_fill',
    button_primary_border_color_dark='*primary_600',
    button_secondary_background_fill='*neutral_200',
    button_secondary_background_fill_dark='*neutral_600',
    button_secondary_background_fill_hover='*button_secondary_background_fill',
    button_secondary_background_fill_hover_dark='*button_secondary_background_fill',
    button_cancel_background_fill='*button_secondary_background_fill',
    button_cancel_background_fill_dark='*button_secondary_background_fill',
    button_cancel_background_fill_hover='*button_cancel_background_fill',
    button_cancel_background_fill_hover_dark='*button_cancel_background_fill',
    button_cancel_border_color='*button_secondary_border_color',
    button_cancel_border_color_dark='*button_secondary_border_color',
    button_cancel_text_color='*button_secondary_text_color',
    button_cancel_text_color_dark='*button_secondary_text_color'
)

from sentence_transformers import SentenceTransformer, util
import openai
import os

os.environ["TOKENIZERS_PARALLELISM"] = "false"

filename = "output_chess_details.txt"
retrieval_model_name = 'output/sentence-transformer-finetuned/'

openai.api_key = os.environ["OPENAI_API_KEY"]

try:
    retrieval_model = SentenceTransformer(retrieval_model_name)
    print("Models loaded successfully.")
except Exception as e:
    print(f"Failed to load models: {e}")

def load_and_preprocess_text(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            segments = [line.strip() for line in file if line.strip()]
        print("Text loaded and preprocessed successfully.")
        return segments
    except Exception as e:
        print(f"Failed to load or preprocess text: {e}")
        return []

segments = load_and_preprocess_text(filename)

def find_relevant_segment(user_query, segments):
    try:
        lower_query = user_query.lower()
        query_embedding = retrieval_model.encode(lower_query)
        segment_embeddings = retrieval_model.encode(segments)
        similarities = util.pytorch_cos_sim(query_embedding, segment_embeddings)[0]
        best_idx = similarities.argmax()
        return segments[best_idx]
    except Exception as e:
        print(f"Error in finding relevant segment: {e}")
        return ""

def generate_response(user_query, relevant_segment):
    try:
        system_message = "You are a chatbot specialized in providing information on local events, pro-Palestine movements, and community outreach, pride movements/events and community resources."
        user_message = f"Here's the information on St. Louis local events, outreach programs, community resources and local activism and movements: {relevant_segment}"
        messages = [
            {"role": "system", "content": system_message},
            {"role": "user", "content": user_message}
        ]
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=messages,
            max_tokens=500,
            temperature=0.2,
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0
        )
        return response['choices'][0]['message']['content'].strip()
    except Exception as e:
        print(f"Error in generating response: {e}")
        return f"Error in generating response: {e}"

def query_model(question):
    if question == "":
        return "Welcome to GloBot! Ask me anything about the St. Louis Community!"
    relevant_segment = find_relevant_segment(question, segments)
    if not relevant_segment:
        return "Could not find specific information. Please refine your question."
    response = generate_response(question, relevant_segment)
    return response

welcome_message = """
## Your AI-driven assistant for STL community outreach queries. Created by Honna, Davonne, and Maryam of the 2024 Kode With Klossy St.Louis Camp! 
"""

topics = """
### Feel free to ask me anything from the topics below!
-  Pro-Palestine Events
-  Pride Events
-  Social Justice Workshops
-  Cultural Festivals
-  Community Outreach Programs
-  Environmental Activism
-  Health & Wellness Events
- How to Support Local Businesses
"""

def display_image():
    return "Globot_Logo3.jpg"

# Setup the Gradio Blocks interface with custom layout components
with gr.Blocks(theme=theme) as demo:
    gr.Image(display_image(), width=2000, height=600)
    gr.Markdown(welcome_message)
    with gr.Row():
        with gr.Column():
            gr.Markdown(topics)
    with gr.Row():
        with gr.Column():
            question = gr.Textbox(label="Your question", placeholder="What do you want to ask about?")
            answer = gr.Textbox(label="GloBot Response", placeholder="GloBot will respond here...", interactive=False, lines=10)
            submit_button = gr.Button("Submit")
            submit_button.click(fn=query_model, inputs=question, outputs=answer)

# Launch the Gradio app to allow user interaction
demo.launch(share=True)