Spaces:
Sleeping
Sleeping
File size: 4,140 Bytes
c5edfc1 a4de076 |
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 |
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="HuggingFaceH4/zephyr-7b-beta",
max_new_tokens=256,
do_sample=True,
temperature=0.7,
trust_remote_code=True,
)
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=256)
answer = outputs[0]["generated_text"].split("Assistant:")[-1].strip()
return answer
def update_profile(name, city, job, about):
profile.update({
"name": name,
"city": city,
"job": job,
"about": about
})
save_json(PROFILE_FILE, profile)
return "Profile updated!"
def update_daily_log(freeform):
today = str(date.today())
daily[today] = {"log": freeform}
save_json(DAILY_FILE, daily)
return f"Today's log saved! ({today})"
def get_profile_defaults():
return (
profile.get("name", "Sheetal"),
profile.get("city", ""),
profile.get("job", ""),
profile.get("about", "")
)
def get_today_log():
today = str(date.today())
return daily.get(today, {}).get("log", "")
def recent_logs():
logs = ""
for d in sorted(daily.keys(), reverse=True)[:5]:
logs += f"**{d}**: {daily[d]['log']}\n"
return logs
with gr.Blocks(title="Sheetal's Personal Chatbot") as demo:
gr.Markdown("# πΈ Sheetal's Personal Chatbot")
with gr.Tab("π Admin (Sheetal)"):
gr.Markdown("### Edit Your Profile")
with gr.Row():
name = gr.Textbox(label="Name", value=profile.get("name", "Sheetal"))
city = gr.Textbox(label="City", value=profile.get("city", ""))
job = gr.Textbox(label="Profession", value=profile.get("job", ""))
about = gr.Textbox(label="A few lines about you", value=profile.get("about", ""))
save_profile_btn = gr.Button("Save Profile")
profile_output = gr.Textbox(label="", interactive=False)
save_profile_btn.click(
fn=update_profile,
inputs=[name, city, job, about],
outputs=profile_output
)
gr.Markdown("---")
gr.Markdown("### π± Add Your Daily Status (free text!)")
today_log = gr.Textbox(label="What do you want to remember about today?", value=get_today_log())
save_log_btn = gr.Button("Save Today's Log")
log_output = gr.Textbox(label="", interactive=False)
save_log_btn.click(
fn=update_daily_log,
inputs=today_log,
outputs=log_output
)
gr.Markdown("#### π
Recent Logs")
recent_logs_box = gr.Markdown(recent_logs())
with gr.Tab("π¬ Ask About Sheetal"):
gr.Markdown("### π¬ Ask Anything 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)
ask_btn.click(
fn=chatbot_qa,
inputs=user_q,
outputs=answer_box
)
demo.launch()
|