MCP_Res / mcp /workspace.py
mgbam's picture
Update mcp/workspace.py
f30f44c verified
# mcp/workspace.py
#!/usr/bin/env python3
"""MedGenesis – lightweight per‑user workspace helper
Persists the user’s most recent queries/results in **Streamlit `session_state`**.
Keeps only the last *N* (default = 10) items to avoid bloat.
Provides three public helpers:
• `get_workspace()` → returns the list (for sidebar rendering)
• `save_query(q,res)` → prepends new item & trims to max_len
• `clear_workspace()` → wipe slate (user button use‑case)
"""
from __future__ import annotations
import streamlit as st
from typing import List, Dict
_KEY = "saved_queries"
_MAX = 10 # adjust if you want deeper history
def get_workspace() -> List[Dict]:
"""Return the current saved‑query list (initialises if absent)."""
if _KEY not in st.session_state:
st.session_state[_KEY] = []
return st.session_state[_KEY]
def save_query(query: str, result: Dict, *, max_len: int = _MAX) -> None:
"""Prepend a (query, result) record, trim list to *max_len*."""
ws = get_workspace()
# Deduplicate identical query strings (keep newest on top)
ws[:] = [item for item in ws if item["query"] != query]
ws.insert(0, {"query": query, "result": result})
del ws[max_len:] # in‑place trim
def clear_workspace() -> None:
"""Remove all saved queries for current user session."""
st.session_state[_KEY] = []
# ------------------------------------------------------------------
# 👟 Quick manual test (run: python -m mcp.workspace)
# ------------------------------------------------------------------
if __name__ == "__main__":
print("Before:", get_workspace())
save_query("demo", {"answer": 42})
print("After :", get_workspace())
clear_workspace()
print("Cleared:", get_workspace())