Update app.py
Browse files
app.py
CHANGED
|
@@ -7,7 +7,6 @@ import numpy as np
|
|
| 7 |
import os
|
| 8 |
from huggingface_hub import upload_file, hf_hub_download
|
| 9 |
|
| 10 |
-
# === Custom PUP-themed CSS ===
|
| 11 |
PUP_Themed_css = """
|
| 12 |
html, body, .gradio-container, .gr-app {
|
| 13 |
height: 100% !important;
|
|
@@ -19,7 +18,6 @@ html, body, .gradio-container, .gr-app {
|
|
| 19 |
}
|
| 20 |
"""
|
| 21 |
|
| 22 |
-
# === Load Models and Data ===
|
| 23 |
embedding_model = SentenceTransformer('paraphrase-mpnet-base-v2')
|
| 24 |
llm = pipeline("text2text-generation", model="google/flan-t5-small")
|
| 25 |
|
|
@@ -39,7 +37,6 @@ feedback_embeddings = None
|
|
| 39 |
feedback_path = "outputs/feedback.json"
|
| 40 |
os.makedirs("outputs", exist_ok=True)
|
| 41 |
|
| 42 |
-
# === Load feedback from Hugging Face if available ===
|
| 43 |
try:
|
| 44 |
hf_token = os.getenv("PUP_AI_Chatbot_Token")
|
| 45 |
downloaded_path = hf_hub_download(
|
|
@@ -55,7 +52,6 @@ try:
|
|
| 55 |
if feedback_questions:
|
| 56 |
feedback_embeddings = embedding_model.encode(feedback_questions, convert_to_tensor=True)
|
| 57 |
|
| 58 |
-
# Save to local copy for later editing during runtime
|
| 59 |
with open(feedback_path, "w") as f_local:
|
| 60 |
json.dump(feedback_data, f_local, indent=4)
|
| 61 |
|
|
@@ -63,7 +59,6 @@ except Exception as e:
|
|
| 63 |
print(f"[Startup] No feedback loaded from HF: {e}")
|
| 64 |
feedback_data = []
|
| 65 |
|
| 66 |
-
# === Hugging Face Upload ===
|
| 67 |
def upload_feedback_to_hf():
|
| 68 |
hf_token = os.getenv("PUP_AI_Chatbot_Token")
|
| 69 |
if not hf_token:
|
|
@@ -81,11 +76,9 @@ def upload_feedback_to_hf():
|
|
| 81 |
except Exception as e:
|
| 82 |
print(f"Error uploading feedback to HF: {e}")
|
| 83 |
|
| 84 |
-
# === Chatbot Response Function ===
|
| 85 |
def chatbot_response(query, chat_history):
|
| 86 |
query_embedding = embedding_model.encode([query], convert_to_tensor=True)
|
| 87 |
|
| 88 |
-
# === Feedback Matching ===
|
| 89 |
if feedback_embeddings is not None:
|
| 90 |
feedback_scores = cosine_similarity(query_embedding.cpu().numpy(), feedback_embeddings.cpu().numpy())[0]
|
| 91 |
best_idx = int(np.argmax(feedback_scores))
|
|
@@ -103,7 +96,6 @@ def chatbot_response(query, chat_history):
|
|
| 103 |
chat_history.append((query, response))
|
| 104 |
return "", chat_history, gr.update(visible=True)
|
| 105 |
|
| 106 |
-
# === Main Handbook Matching ===
|
| 107 |
similarity_scores = cosine_similarity(query_embedding.cpu().numpy(), question_embeddings.cpu().numpy())[0]
|
| 108 |
best_idx = int(np.argmax(similarity_scores))
|
| 109 |
best_score = similarity_scores[best_idx]
|
|
@@ -137,7 +129,6 @@ def chatbot_response(query, chat_history):
|
|
| 137 |
chat_history.append((query, final_response))
|
| 138 |
return "", chat_history, gr.update(visible=True)
|
| 139 |
|
| 140 |
-
# === Feedback Save & Upvote/Downvote Tracking ===
|
| 141 |
def record_feedback(feedback, chat_history):
|
| 142 |
global feedback_embeddings
|
| 143 |
if chat_history:
|
|
@@ -175,7 +166,6 @@ def record_feedback(feedback, chat_history):
|
|
| 175 |
|
| 176 |
return gr.update(visible=False)
|
| 177 |
|
| 178 |
-
# === Gradio UI ===
|
| 179 |
with gr.Blocks(css=PUP_Themed_css, title="University Handbook AI Chatbot") as demo:
|
| 180 |
gr.Markdown(
|
| 181 |
"<div style='"
|
|
@@ -213,6 +203,5 @@ with gr.Blocks(css=PUP_Themed_css, title="University Handbook AI Chatbot") as de
|
|
| 213 |
thumbs_up.click(lambda state: record_feedback("positive", state), inputs=[state], outputs=[feedback_row])
|
| 214 |
thumbs_down.click(lambda state: record_feedback("negative", state), inputs=[state], outputs=[feedback_row])
|
| 215 |
|
| 216 |
-
# === Launch App ===
|
| 217 |
if __name__ == "__main__":
|
| 218 |
demo.launch()
|
|
|
|
| 7 |
import os
|
| 8 |
from huggingface_hub import upload_file, hf_hub_download
|
| 9 |
|
|
|
|
| 10 |
PUP_Themed_css = """
|
| 11 |
html, body, .gradio-container, .gr-app {
|
| 12 |
height: 100% !important;
|
|
|
|
| 18 |
}
|
| 19 |
"""
|
| 20 |
|
|
|
|
| 21 |
embedding_model = SentenceTransformer('paraphrase-mpnet-base-v2')
|
| 22 |
llm = pipeline("text2text-generation", model="google/flan-t5-small")
|
| 23 |
|
|
|
|
| 37 |
feedback_path = "outputs/feedback.json"
|
| 38 |
os.makedirs("outputs", exist_ok=True)
|
| 39 |
|
|
|
|
| 40 |
try:
|
| 41 |
hf_token = os.getenv("PUP_AI_Chatbot_Token")
|
| 42 |
downloaded_path = hf_hub_download(
|
|
|
|
| 52 |
if feedback_questions:
|
| 53 |
feedback_embeddings = embedding_model.encode(feedback_questions, convert_to_tensor=True)
|
| 54 |
|
|
|
|
| 55 |
with open(feedback_path, "w") as f_local:
|
| 56 |
json.dump(feedback_data, f_local, indent=4)
|
| 57 |
|
|
|
|
| 59 |
print(f"[Startup] No feedback loaded from HF: {e}")
|
| 60 |
feedback_data = []
|
| 61 |
|
|
|
|
| 62 |
def upload_feedback_to_hf():
|
| 63 |
hf_token = os.getenv("PUP_AI_Chatbot_Token")
|
| 64 |
if not hf_token:
|
|
|
|
| 76 |
except Exception as e:
|
| 77 |
print(f"Error uploading feedback to HF: {e}")
|
| 78 |
|
|
|
|
| 79 |
def chatbot_response(query, chat_history):
|
| 80 |
query_embedding = embedding_model.encode([query], convert_to_tensor=True)
|
| 81 |
|
|
|
|
| 82 |
if feedback_embeddings is not None:
|
| 83 |
feedback_scores = cosine_similarity(query_embedding.cpu().numpy(), feedback_embeddings.cpu().numpy())[0]
|
| 84 |
best_idx = int(np.argmax(feedback_scores))
|
|
|
|
| 96 |
chat_history.append((query, response))
|
| 97 |
return "", chat_history, gr.update(visible=True)
|
| 98 |
|
|
|
|
| 99 |
similarity_scores = cosine_similarity(query_embedding.cpu().numpy(), question_embeddings.cpu().numpy())[0]
|
| 100 |
best_idx = int(np.argmax(similarity_scores))
|
| 101 |
best_score = similarity_scores[best_idx]
|
|
|
|
| 129 |
chat_history.append((query, final_response))
|
| 130 |
return "", chat_history, gr.update(visible=True)
|
| 131 |
|
|
|
|
| 132 |
def record_feedback(feedback, chat_history):
|
| 133 |
global feedback_embeddings
|
| 134 |
if chat_history:
|
|
|
|
| 166 |
|
| 167 |
return gr.update(visible=False)
|
| 168 |
|
|
|
|
| 169 |
with gr.Blocks(css=PUP_Themed_css, title="University Handbook AI Chatbot") as demo:
|
| 170 |
gr.Markdown(
|
| 171 |
"<div style='"
|
|
|
|
| 203 |
thumbs_up.click(lambda state: record_feedback("positive", state), inputs=[state], outputs=[feedback_row])
|
| 204 |
thumbs_down.click(lambda state: record_feedback("negative", state), inputs=[state], outputs=[feedback_row])
|
| 205 |
|
|
|
|
| 206 |
if __name__ == "__main__":
|
| 207 |
demo.launch()
|