Update mcp/workspace.py
Browse files- mcp/workspace.py +48 -8
mcp/workspace.py
CHANGED
@@ -1,15 +1,55 @@
|
|
1 |
# mcp/workspace.py
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
import streamlit as st
|
|
|
|
|
|
|
|
|
4 |
|
5 |
-
def get_workspace():
|
6 |
-
# Use Streamlit session state for per-user saved searches
|
7 |
-
if "saved_queries" not in st.session_state:
|
8 |
-
st.session_state["saved_queries"] = []
|
9 |
-
return st.session_state["saved_queries"]
|
10 |
|
11 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
ws = get_workspace()
|
13 |
-
|
|
|
|
|
|
|
14 |
ws.insert(0, {"query": query, "result": result})
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
# mcp/workspace.py
|
2 |
|
3 |
+
#!/usr/bin/env python3
|
4 |
+
"""MedGenesis – lightweight per‑user workspace helper
|
5 |
+
|
6 |
+
Persists the user’s most recent queries/results in **Streamlit `session_state`**.
|
7 |
+
Keeps only the last *N* (default = 10) items to avoid bloat.
|
8 |
+
Provides three public helpers:
|
9 |
+
• `get_workspace()` → returns the list (for sidebar rendering)
|
10 |
+
• `save_query(q,res)` → prepends new item & trims to max_len
|
11 |
+
• `clear_workspace()` → wipe slate (user button use‑case)
|
12 |
+
"""
|
13 |
+
|
14 |
+
from __future__ import annotations
|
15 |
+
|
16 |
import streamlit as st
|
17 |
+
from typing import List, Dict
|
18 |
+
|
19 |
+
_KEY = "saved_queries"
|
20 |
+
_MAX = 10 # adjust if you want deeper history
|
21 |
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
+
def get_workspace() -> List[Dict]:
|
24 |
+
"""Return the current saved‑query list (initialises if absent)."""
|
25 |
+
if _KEY not in st.session_state:
|
26 |
+
st.session_state[_KEY] = []
|
27 |
+
return st.session_state[_KEY]
|
28 |
+
|
29 |
+
|
30 |
+
def save_query(query: str, result: Dict, *, max_len: int = _MAX) -> None:
|
31 |
+
"""Prepend a (query, result) record, trim list to *max_len*."""
|
32 |
ws = get_workspace()
|
33 |
+
|
34 |
+
# Deduplicate identical query strings (keep newest on top)
|
35 |
+
ws[:] = [item for item in ws if item["query"] != query]
|
36 |
+
|
37 |
ws.insert(0, {"query": query, "result": result})
|
38 |
+
del ws[max_len:] # in‑place trim
|
39 |
+
|
40 |
+
|
41 |
+
def clear_workspace() -> None:
|
42 |
+
"""Remove all saved queries for current user session."""
|
43 |
+
st.session_state[_KEY] = []
|
44 |
+
|
45 |
+
|
46 |
+
# ------------------------------------------------------------------
|
47 |
+
# 👟 Quick manual test (run: python -m mcp.workspace)
|
48 |
+
# ------------------------------------------------------------------
|
49 |
+
if __name__ == "__main__":
|
50 |
+
print("Before:", get_workspace())
|
51 |
+
save_query("demo", {"answer": 42})
|
52 |
+
print("After :", get_workspace())
|
53 |
+
clear_workspace()
|
54 |
+
print("Cleared:", get_workspace())
|
55 |
+
|