whosouravsharma's picture
Update README: system overview, models, data, API, limitations
9c876ac verified
|
Raw History Blame Contribute Delete
5.15 kB
metadata
title: Medical Assistant UI
emoji: 🩺
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 8501
short_description: RAG-grounded medical Q&A chat over the MedQuAD dataset
tags:
  - streamlit
  - rag
  - medical
  - healthcare
  - question-answering
  - faiss
  - sentence-transformers
models:
  - sentence-transformers/all-MiniLM-L6-v2
pinned: false

Medical Assistant

Ask a medical question and get an answer grounded in retrieved source passages from the MedQuAD dataset, with the sources cited under every response. The answer comes from retrieved text, not from the model's own memory.

Not a substitute for professional medical advice, diagnosis, or treatment.

This Space is the frontend of a two-Space system. Retrieval and generation run in the medical-assistant-ai-backend Space.

How it works

  1. You type a question into the chat.
  2. This Space sends it to the backend's POST /ask endpoint.
  3. The backend embeds the question and retrieves the top 5 most similar passages from a FAISS index built over MedQuAD.
  4. Those passages go into a prompt that tells the model to answer only from the retrieved context, to avoid diagnosis and prescriptions, and to say so when the context isn't enough to answer.
  5. A hosted LLM generates the answer, and the backend returns it along with its sources.
  6. This Space shows the answer with the cited sources underneath.
User ──▢ Streamlit UI (this Space) ──POST /ask──▢ FastAPI backend
                                                    β”‚
                                   embed (MiniLM) ───
                                   FAISS top-k ──────  (MedQuAD index)
                                   grounded prompt ──
                                   hosted LLM β”€β”€β”€β”€β”€β”€β”˜
         ◀──────────── answer + sources ────────────

Components

Component Role
This Space (Medical-Assistant-ChatBot) Streamlit chat UI. Its only dependencies are streamlit and requests, and it holds no model logic
medical-assistant-ai-backend FastAPI service exposing GET /health and POST /ask
whosouravsharma/medical-assistant-data (private) Prebuilt FAISS index and chunk metadata, pulled by the backend at startup
MedQuAD Source corpus of medical question–answer pairs

Models

No model in this project is trained or fine-tuned. The system is built from off-the-shelf components:

Stage Model / method Notes
Embedding sentence-transformers/all-MiniLM-L6-v2 Small (~90 MB), CPU-friendly, used unmodified. Loaded once per backend process
Retrieval FAISS IndexFlatIP on L2-normalized vectors Exact cosine-similarity search, top-k = 5
Generation gpt-5.6-luna via the OpenAI API Hosted remotely. No generation model runs inside either Space

Data

The index is built offline from MedQuAD:

  • Remove exact duplicates and records with no answer
  • Join each question and answer into one text field
  • Split the text into 500-word chunks with a 50-word overlap
  • Store each chunk with its source, focus area, and original question so every answer can cite where it came from

Intended use

Use it for general, informational questions about conditions, symptoms, and treatments that MedQuAD covers.

Don't use it for diagnosis, treatment or medication decisions, emergencies, or questions about a specific patient.

API

The backend can also be called directly:

curl -X POST https://whosouravsharma-medical-assistant-ai-backend.hf.space/ask \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"question": "What are the symptoms of glaucoma?"}'

The response contains query, answer, and sources. Each source has its rank, similarity score, source name, focus area, original question, and the chunk text.

Setup (for forks / redeploys)

Set these as Space secrets or variables:

Name Purpose
BACKEND_URL Backend Space URL: https://whosouravsharma-medical-assistant-ai-backend.hf.space
HF_TOKEN Sent as a bearer token to the backend. Authentication is token-based and there is no user login

Limitations

  • Answers are limited to what MedQuAD covers. For questions outside it, the model is told to say the retrieved information is insufficient rather than guess.
  • The grounding prompt reduces hallucination risk but doesn't remove it, and it hasn't been formally evaluated.
  • Generation depends on a third-party hosted model. Its behaviour can only be shaped through the prompt.
  • No latency, cost, or accuracy benchmarks have been published yet.
  • The embedding model is general-purpose and hasn't been tuned for medical text.