raviix46 commited on
Commit
e7d525e
·
verified ·
1 Parent(s): 0f3574e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -0
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import gradio as gr
3
+
4
+ from rag_data import THREAD_OPTIONS
5
+ from rag_sessions import start_session, reset_session, get_session
6
+ from rag_retrieval import rewrite_query, retrieve_chunks, build_answer, log_trace
7
+
8
+
9
+ def init_session_ui(thread_id: str):
10
+ if not thread_id:
11
+ return None, "Please select a thread to start."
12
+ sid = start_session(thread_id)
13
+ return sid, f"Started session for thread: {thread_id}"
14
+
15
+
16
+ def chat_ui(user_text: str, session_id: str, search_outside_thread: bool):
17
+ if not session_id:
18
+ return "Please start a session by selecting a thread.", "", ""
19
+
20
+ session = get_session(session_id)
21
+ if session is None:
22
+ return "Session not found. Please start again.", "", ""
23
+
24
+ rewrite = rewrite_query(user_text, session)
25
+ retrieved = retrieve_chunks(rewrite, session, search_outside_thread)
26
+ answer, citations = build_answer(user_text, rewrite, retrieved)
27
+
28
+ # Update simple memory
29
+ session["recent_turns"].append({"user": user_text, "answer": answer})
30
+ if len(session["recent_turns"]) > 5:
31
+ session["recent_turns"] = session["recent_turns"][-5:]
32
+
33
+ log_trace(session_id, user_text, rewrite, retrieved, answer, citations)
34
+
35
+ debug_retrieved = "\n".join(
36
+ [
37
+ f"{r['chunk_id']} (msg={r['message_id']}, "
38
+ f"bm25={r['score_bm25']:.3f}, sem={r['score_sem']:.3f}, "
39
+ f"combined={r['score_combined']:.3f})"
40
+ for r in retrieved
41
+ ]
42
+ )
43
+
44
+ return answer, rewrite, debug_retrieved
45
+
46
+
47
+ def reset_session_ui(session_id: str):
48
+ if session_id:
49
+ reset_session(session_id)
50
+ return "", "Session reset."
51
+
52
+
53
+ with gr.Blocks() as demo:
54
+ gr.Markdown("# 📧 Email Thread RAG Assistant\nAsk questions about a selected Enron email thread.")
55
+
56
+ with gr.Row():
57
+ thread_dd = gr.Dropdown(
58
+ choices=THREAD_OPTIONS,
59
+ label="Select Thread ID",
60
+ value=THREAD_OPTIONS[0] if THREAD_OPTIONS else None,
61
+ interactive=True,
62
+ )
63
+ start_btn = gr.Button("Start Session")
64
+ session_state = gr.State(value=None)
65
+ status_box = gr.Markdown("")
66
+
67
+ start_btn.click(
68
+ fn=init_session_ui,
69
+ inputs=[thread_dd],
70
+ outputs=[session_state, status_box],
71
+ )
72
+
73
+ with gr.Row():
74
+ user_box = gr.Textbox(label="Your question", lines=2)
75
+
76
+ with gr.Row():
77
+ search_toggle = gr.Checkbox(label="Search outside selected thread", value=False)
78
+ ask_btn = gr.Button("Ask")
79
+ reset_btn = gr.Button("Reset Session")
80
+
81
+ answer_box = gr.Markdown(label="Answer")
82
+ with gr.Accordion("Debug info", open=False):
83
+ rewrite_box = gr.Textbox(label="Rewritten query", interactive=False)
84
+ retrieved_box = gr.Textbox(label="Retrieved chunks", interactive=False)
85
+
86
+ ask_btn.click(
87
+ fn=chat_ui,
88
+ inputs=[user_box, session_state, search_toggle],
89
+ outputs=[answer_box, rewrite_box, retrieved_box],
90
+ )
91
+
92
+ reset_btn.click(
93
+ fn=reset_session_ui,
94
+ inputs=[session_state],
95
+ outputs=[session_state, status_box],
96
+ )
97
+
98
+ if __name__ == "__main__":
99
+ demo.launch()