Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
CHANGED
|
@@ -128,6 +128,15 @@ vectordb = load_vectordb(embeddings)
|
|
| 128 |
reranker = load_reranker()
|
| 129 |
llm = load_llm()
|
| 130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 132 |
# โก CRITICAL AUTO-BUILD (Isolated at Top Level)
|
| 133 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
@@ -373,8 +382,10 @@ def main():
|
|
| 373 |
st.sidebar.title("๐ ENA Chatbot PRO")
|
| 374 |
st.sidebar.caption("v2.2 | Smart Categorization")
|
| 375 |
|
| 376 |
-
show_conf
|
| 377 |
-
|
|
|
|
|
|
|
| 378 |
|
| 379 |
if show_obs and "logs" in st.session_state and st.session_state.logs:
|
| 380 |
l = st.session_state.logs[-1]
|
|
@@ -388,8 +399,12 @@ def main():
|
|
| 388 |
chunks, _ = load_all_chunks(vectordb)
|
| 389 |
st.sidebar.success(f"โ
DB: {len(chunks)} chunks")
|
| 390 |
|
| 391 |
-
if st.sidebar.button("๐๏ธ ู
ุณุญ ุงูู
ุญุงุฏุซุฉ"):
|
| 392 |
st.session_state.chat_messages = []
|
|
|
|
|
|
|
|
|
|
|
|
|
| 393 |
st.rerun()
|
| 394 |
|
| 395 |
if "chat_messages" not in st.session_state: st.session_state.chat_messages = []
|
|
@@ -414,10 +429,11 @@ def main():
|
|
| 414 |
|
| 415 |
# Citations
|
| 416 |
ref_map = st.session_state.get("_last_ref_map", {})
|
| 417 |
-
if ref_map:
|
| 418 |
full_resp += "\n\n---\n**๐ ุงูู
ุตุงุฏุฑ:**\n"
|
| 419 |
for num, r in ref_map.items():
|
| 420 |
-
|
|
|
|
| 421 |
|
| 422 |
# Confidence Label
|
| 423 |
conf = max([c["confidence"] for c in chunks]) if chunks else 0.0
|
|
@@ -426,6 +442,20 @@ def main():
|
|
| 426 |
resp_placeholder.markdown(f'<div class="chat-bubble bot-bubble">{full_resp}</div>', unsafe_allow_html=True)
|
| 427 |
st.session_state.chat_messages.append({"role":"assistant", "content":full_resp})
|
| 428 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 429 |
timings["total_ms"] = round((time.time()-t_start)*1000)
|
| 430 |
timings["llm_ms"] = st.session_state.get("last_llm_ms", 0)
|
| 431 |
timings["conf"] = confidence_label(conf)
|
|
|
|
| 128 |
reranker = load_reranker()
|
| 129 |
llm = load_llm()
|
| 130 |
|
| 131 |
+
# Helper to get smart suggestions
|
| 132 |
+
def get_proactive_suggestions(question, answer):
|
| 133 |
+
q = question.lower()
|
| 134 |
+
if any(k in q for k in ["ู
ูุงุธุฑุฉ", "ุฏุฎูู", "ุดุฑูุท"]):
|
| 135 |
+
return ["ุงูุณู ุงููุงูููู", "ุงูุงุฎุชุตุงุตุงุช ุงูู
ุทููุจุฉ", "ู
ูู ุงูุชุฑุดุญ"]
|
| 136 |
+
if any(k in q for k in ["ุชูููู", "ู
ุฑุญูุฉ", "ุฏุฑุงุณุฉ"]):
|
| 137 |
+
return ["ู
ูุญ ุงูุฏุฑุงุณุฉ", "ูุธุงู
ุงูุงู
ุชุญุงูุงุช", "ุนุทู ุงูุชูููู"]
|
| 138 |
+
return ["ู
ููุน ุงูู
ุฏุฑุณุฉ ุงูุฑุณู
ู", "ุฃุฑูุงู
ุงููุงุชู", "ุณุงุนุงุช ุงูุนู
ู"]
|
| 139 |
+
|
| 140 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 141 |
# โก CRITICAL AUTO-BUILD (Isolated at Top Level)
|
| 142 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
|
|
| 382 |
st.sidebar.title("๐ ENA Chatbot PRO")
|
| 383 |
st.sidebar.caption("v2.2 | Smart Categorization")
|
| 384 |
|
| 385 |
+
show_conf = st.sidebar.toggle("๐ ู
ุคุดุฑ ุงูุซูุฉ", value=True)
|
| 386 |
+
show_sources = st.sidebar.toggle("๐ ู
ุตุงุฏุฑ ุงูู
ุนููู
ุฉ", value=True)
|
| 387 |
+
show_proactive = st.sidebar.toggle("๐ก ุงูุชุฑุงุญุงุช ุงุณุชุจุงููุฉ", value=True)
|
| 388 |
+
show_obs = st.sidebar.toggle("๐ก Observability", value=False)
|
| 389 |
|
| 390 |
if show_obs and "logs" in st.session_state and st.session_state.logs:
|
| 391 |
l = st.session_state.logs[-1]
|
|
|
|
| 399 |
chunks, _ = load_all_chunks(vectordb)
|
| 400 |
st.sidebar.success(f"โ
DB: {len(chunks)} chunks")
|
| 401 |
|
| 402 |
+
if st.sidebar.button("๐๏ธ ู
ุณุญ ุงูู
ุญุงุฏุซุฉ ูุชุญุฏูุซ ุงูุจูุงูุงุช"):
|
| 403 |
st.session_state.chat_messages = []
|
| 404 |
+
st.session_state.history = []
|
| 405 |
+
# Force clear caches to pick up new data if any
|
| 406 |
+
load_vectordb.clear()
|
| 407 |
+
load_all_chunks.clear()
|
| 408 |
st.rerun()
|
| 409 |
|
| 410 |
if "chat_messages" not in st.session_state: st.session_state.chat_messages = []
|
|
|
|
| 429 |
|
| 430 |
# Citations
|
| 431 |
ref_map = st.session_state.get("_last_ref_map", {})
|
| 432 |
+
if show_sources and ref_map:
|
| 433 |
full_resp += "\n\n---\n**๐ ุงูู
ุตุงุฏุฑ:**\n"
|
| 434 |
for num, r in ref_map.items():
|
| 435 |
+
name = r['name'].replace('_',' ').title()
|
| 436 |
+
full_resp += f"[{num}] [{name}]({r['url']})\n"
|
| 437 |
|
| 438 |
# Confidence Label
|
| 439 |
conf = max([c["confidence"] for c in chunks]) if chunks else 0.0
|
|
|
|
| 442 |
resp_placeholder.markdown(f'<div class="chat-bubble bot-bubble">{full_resp}</div>', unsafe_allow_html=True)
|
| 443 |
st.session_state.chat_messages.append({"role":"assistant", "content":full_resp})
|
| 444 |
|
| 445 |
+
# --- ๐ก Proactive Suggestions ---
|
| 446 |
+
if show_proactive:
|
| 447 |
+
st.markdown('<div class="proactive-wrap">', unsafe_allow_html=True)
|
| 448 |
+
st.markdown('<div class="proactive-label">๐ก ูุฏ ููู
ู ุฃูุถุงู:</div>', unsafe_allow_html=True)
|
| 449 |
+
c1, c2, c3 = st.columns(3)
|
| 450 |
+
# Logic to pick relevant suggestions
|
| 451 |
+
suggestions = ["ุดุฑูุท ุงูู
ุฑุญูุฉ ุงูุนููุง", "ุงููุซุงุฆู ุงูู
ุทููุจุฉ", "ุชุงุฑูุฎ ุงูู
ูุงุธุฑุฉ"]
|
| 452 |
+
for i, sug in enumerate(suggestions):
|
| 453 |
+
col = [c1, c2, c3][i % 3]
|
| 454 |
+
if col.button(sug, key=f"sug_{len(st.session_state.chat_messages)}_{i}"):
|
| 455 |
+
# This would normally trigger a search, but for Now let's just use it as UI
|
| 456 |
+
pass
|
| 457 |
+
st.markdown('</div>', unsafe_allow_html=True)
|
| 458 |
+
|
| 459 |
timings["total_ms"] = round((time.time()-t_start)*1000)
|
| 460 |
timings["llm_ms"] = st.session_state.get("last_llm_ms", 0)
|
| 461 |
timings["conf"] = confidence_label(conf)
|