curemind / client /components /hf_loader.py
Alishba Siddique
feat: searchable knowledge base, centered layout, responsive CSS
ad0ad1a
Raw
History Blame Contribute Delete
2.43 kB
import streamlit as st
from utils.api import get_available_datasets, load_datasets
_LABEL_MAP = {
"pubmedqa": "PubMedQA",
"mental_health": "Mental Health Counseling",
"mediqa": "Medical MediQA",
"medqa_usmle": "MedQA-USMLE",
}
def render_dataset_panel() -> None:
st.markdown("### Knowledge Base")
try:
datasets = get_available_datasets()
except Exception:
st.caption("API offline — start the server to manage datasets.")
return
if not datasets:
st.caption("No datasets available.")
return
search = st.text_input(
"search_kb",
placeholder="Search datasets…",
label_visibility="collapsed",
key="kb_search",
)
filtered = [
ds for ds in datasets
if not search or search.lower() in ds["name"].lower() or search.lower() in ds["description"].lower()
]
if not filtered:
st.caption("No datasets match your search.")
return
st.caption("Select datasets to load into the knowledge base:")
selected = [
ds["name"]
for ds in filtered
if st.checkbox(
_LABEL_MAP.get(ds["name"], ds["name"]),
key=f"ds_{ds['name']}",
help=ds["description"],
)
]
max_samples = st.slider(
"Max samples per dataset",
min_value=100,
max_value=2000,
value=500,
step=100,
help="Higher values improve coverage but take longer to embed.",
)
if st.button("Load Selected", disabled=not selected, use_container_width=True):
with st.spinner(f"Embedding {len(selected)} dataset(s)… this may take a few minutes"):
try:
response = load_datasets(selected, max_samples)
for name, result in response.get("results", {}).items():
label = _LABEL_MAP.get(name, name)
if result["status"] == "success":
st.success(f"{label}: {result['records_upserted']} records indexed")
elif result["status"] == "skipped":
st.warning(f"{label}: skipped — {result.get('detail', '')}")
else:
st.error(f"{label}: {result.get('detail', 'failed')}")
except Exception as exc:
st.error(f"Failed to load datasets: {exc}")