|
|
|
|
|
|
|
"""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 |
|
|
|
|
|
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() |
|
|
|
|
|
ws[:] = [item for item in ws if item["query"] != query] |
|
|
|
ws.insert(0, {"query": query, "result": result}) |
|
del ws[max_len:] |
|
|
|
|
|
def clear_workspace() -> None: |
|
"""Remove all saved queries for current user session.""" |
|
st.session_state[_KEY] = [] |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
print("Before:", get_workspace()) |
|
save_query("demo", {"answer": 42}) |
|
print("After :", get_workspace()) |
|
clear_workspace() |
|
print("Cleared:", get_workspace()) |
|
|
|
|