Spaces:
Sleeping
Sleeping
File size: 4,428 Bytes
c5edfc1 a4de076 272f768 a4de076 295b198 c770626 a4de076 c770626 a4de076 abf5905 272f768 abf5905 272f768 abf5905 321cb55 |
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 |
import gradio as gr
import json
import os
from datetime import date
from transformers import pipeline
PROFILE_FILE = "about_me.json"
DAILY_FILE = "daily_status.json"
def load_json(path, default):
if os.path.exists(path):
with open(path) as f:
return json.load(f)
return default
def save_json(path, data):
with open(path, "w") as f:
json.dump(data, f, indent=2)
profile = load_json(PROFILE_FILE, {})
daily = load_json(DAILY_FILE, {})
def build_context(profile, daily):
recent_days = sorted(daily.keys(), reverse=True)[:7]
daily_lines = "\n".join([f"{d}: {daily[d].get('log','')}" for d in recent_days])
context = (
f"Profile:\n{json.dumps(profile, indent=2)}\n"
f"Recent daily logs:\n{daily_lines}\n"
"You are a helpful assistant. Answer only using the provided information. "
"If you don't know the answer, reply: 'Sheetal hasn't shared that yet!'"
)
return context
def get_llm():
return pipeline(
"text-generation",
model="gpt2",
max_new_tokens=128,
do_sample=True,
temperature=0.7,
)
llm = None
def chatbot_qa(user_q):
global llm
if llm is None:
llm = get_llm()
context = build_context(profile, daily)
prompt = f"System: {context}\nUser: {user_q}\nAssistant:"
outputs = llm(prompt, max_new_tokens=128)
answer = outputs[0]["generated_text"].split("Assistant:")[-1].strip()
return answer
def save_profile_and_log(name, city, job, about, freeform):
today = str(date.today())
profile.update({
"name": name,
"city": city,
"job": job,
"about": about
})
save_json(PROFILE_FILE, profile)
daily[today] = {"log": freeform}
save_json(DAILY_FILE, daily)
logs = ""
for d in sorted(daily.keys(), reverse=True)[:5]:
logs += f"**{d}**: {daily[d]['log']}\n"
return (
"β
Profile & log updated!",
logs
)
def recent_logs():
logs = ""
for d in sorted(daily.keys(), reverse=True)[:5]:
logs += f"**{d}**: {daily[d]['log']}\n"
return logs
ADMIN_PASSWORD = "YourSecret123" # CHANGE THIS!
def check_password(password):
if password == ADMIN_PASSWORD:
return gr.update(visible=True), gr.update(value="", visible=False)
else:
return gr.update(visible=False), gr.update(value="β Access denied. Try again.", visible=True)
with gr.Blocks(title="Sheetal's Chatbot") as demo:
gr.Markdown("# πΈ Sheetal's Personal Chatbot")
gr.Markdown("Ask anything about Sheetal!")
with gr.Tab("π Admin (Sheetal)"):
admin_password = gr.Textbox(label="Enter admin password", type="password", max_lines=1)
password_status = gr.Textbox(label="Password status", value="", interactive=False, visible=False)
unlock_panel = gr.Button("Unlock Admin Panel")
with gr.Column(visible=False) as admin_panel:
with gr.Row():
name = gr.Textbox(label="Name", value=profile.get("name", "Sheetal"), max_lines=1)
city = gr.Textbox(label="City", value=profile.get("city", ""), max_lines=1)
job = gr.Textbox(label="Profession", value=profile.get("job", ""), max_lines=1)
about = gr.Textbox(label="About You", value=profile.get("about", ""), lines=2, max_lines=3)
today_log = gr.Textbox(label="What do you want to remember about today?", value=daily.get(str(date.today()), {}).get("log", ""), lines=2, max_lines=3)
save_btn = gr.Button("πΎ Save Profile & Today's Log")
admin_status = gr.Markdown("")
logs_output = gr.Markdown(recent_logs())
save_btn.click(
fn=save_profile_and_log,
inputs=[name, city, job, about, today_log],
outputs=[admin_status, logs_output]
)
unlock_panel.click(
fn=check_password,
inputs=[admin_password],
outputs=[admin_panel, password_status]
)
with gr.Tab("π¬ Ask About Sheetal"):
user_q = gr.Textbox(label="Type your question here:")
ask_btn = gr.Button("Ask")
answer_box = gr.Textbox(label="Bot answer", interactive=False, lines=2, max_lines=4)
ask_btn.click(
fn=chatbot_qa,
inputs=user_q,
outputs=answer_box
)
if __name__ == "__main__":
demo.launch()
|