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 |
+
|