| | --- |
| | title: DocVis |
| | emoji: ๐ |
| | colorFrom: yellow |
| | colorTo: green |
| | sdk: streamlit |
| | sdk_version: 1.44.1 |
| | app_file: app.py |
| | pinned: false |
| | --- |
| | # ๐ฉบ SynapseAI: Interactive Clinical Decision Support Assistant (v2 - UMLS/FDA Integrated) |
| |
|
| | **SynapseAI** is an enhanced prototype demonstrating an AI-powered clinical decision support system. Built with a modular structure (`app.py` for UI, `agent.py` for logic), it uses Streamlit, Langchain, LangGraph, Groq (running Llama 3), Tavily Search, **UMLS/RxNorm API**, and **OpenFDA API**. |
| |
|
| | It simulates an interactive consultation where an AI assistant helps analyze patient data, suggests differential diagnoses, proposes management plans, performs **realistic drug interaction and allergy checks**, flags risks, incorporates clinical guideline information, and includes a **self-correction loop** based on interaction warnings. |
| |
|
| | **โ ๏ธ Disclaimer: This is a proof-of-concept application intended for demonstration and educational purposes only. It is NOT a certified medical device and should NEVER be used for actual clinical decision-making.** |
| |
|
| | ## โจ Key Features (v2 Enhancements in Bold) |
| |
|
| | * **Interactive Conversational Interface:** Uses LangGraph for multi-turn interactions, sequential processing, and dynamic responses. |
| | * **Structured Clinical Data Input:** Comprehensive sidebar form for patient intake. |
| | * **Advanced AI Analysis:** Leverages Llama 3 via Groq for clinical reasoning. |
| | * **Structured AI Output:** Provides analysis in JSON (Assessment, DDx, Risk, Plan, Rationale, Interaction Summary). |
| | * **Intelligent Tool Use:** Employs Langchain tools: |
| | * `order_lab_test`: Simulates ordering labs. |
| | * `prescribe_medication`: Simulates preparing prescriptions (requires prior interaction check). |
| | * **`check_drug_interactions` (Enhanced):** Performs **realistic drug-drug and drug-allergy checks** using **UMLS/RxNorm API** for drug normalization and **OpenFDA API** for retrieving contraindications, warnings, and interaction data from drug labels. |
| | * `flag_risk`: Allows AI to highlight critical risks. |
| | * `tavily_search_results`: Searches for external info, prompted for **current clinical guidelines**. |
| | * **Enhanced Safety Protocols:** |
| | * **Mandatory & Realistic Interaction Checks:** Enforces interaction checks before prescription; checks now use real-world APIs. |
| | * **Self-Correction Loop:** Includes a dedicated step (`reflection_node`) in the LangGraph workflow where the agent specifically reviews significant interaction/allergy warnings and revises its therapeutic plan *before* presenting the final output. |
| | * Red Flagging: Client-side initial checks and AI-driven risk flagging. |
| | * **Guideline Awareness:** AI prompted to search for and reference clinical guidelines. |
| | * **Modular Code Structure:** Separated UI (`app.py`) from core agent logic (`agent.py`) for better organization and maintainability. |
| | * **Robust Error Handling:** Implemented within LangGraph nodes and API helpers. |
| |
|
| | ## ๐ Technology Stack |
| |
|
| | * **Python:** Core programming language. |
| | * **Streamlit:** Web application framework for the UI. |
| | * **Langchain & LangGraph:** Framework for building LLM applications, managing conversation state, and orchestrating tool use. |
| | * **Groq API:** Fast inference for Llama 3 LLM. |
| | * **Tavily Search API:** Web search for guidelines. |
| | * **UMLS API (via RxNav/RxNorm):** Drug name normalization (finding RxCUIs). Requires UMLS Metathesaurus License and API Key. |
| | * **OpenFDA API:** Retrieving drug label information (interactions, warnings, contraindications). |
| | * **Requests:** For making HTTP calls to external APIs. |
| | * **Pydantic:** Data validation in tool inputs. |
| |
|
| | ## โ๏ธ Setup and Installation |
| |
|
| | ### Prerequisites |
| |
|
| | * Python 3.8+ |
| | * `pip` (Python package installer) |
| | * Git (for cloning the repository) |
| | * **UMLS Metathesaurus License:** You **must** obtain a free license from the [NLM UMLS Website](https://uts.nlm.nih.gov/uts/signup-login) to get a UMLS API Key. |
| |
|
| | ### Installation Steps |
| |
|
| | 1. **Clone the Repository:** |
| | ```bash |
| | git clone <your-repository-url> # Replace with your repo URL |
| | cd <your-repository-directory> |
| | ``` |
| | |
| | 2. **Create and Activate a Virtual Environment (Recommended):** |
| | ```bash |
| | # macOS / Linux |
| | python3 -m venv venv |
| | source venv/bin/activate |
| | # Windows |
| | # python -m venv venv |
| | # .\venv\Scripts\activate |
| | ``` |
| | |
| | 3. **Create `requirements.txt`:** |
| | ```txt |
| | streamlit |
| | langchain |
| | langchain-groq |
| | langchain-community |
| | langgraph |
| | langchain-core |
| | pydantic>=1,<2 # Check compatibility |
| | groq |
| | tavily-python |
| | requests |
| | python-dotenv |
| | ``` |
| | |
| | 4. **Install Dependencies:** |
| | ```bash |
| | pip install -r requirements.txt |
| | ``` |
| | |
| | ### API Keys |
| |
|
| | This application requires API keys for Groq, Tavily Search, and UMLS. |
| |
|
| | 1. **Groq API Key:** Obtain from [GroqCloud](https://console.groq.com/keys). |
| | 2. **Tavily API Key:** Obtain from [Tavily AI](https://tavily.com/). |
| | 3. **UMLS API Key:** Obtain after registering for a UMLS License via the [UTS NLM Website](https://uts.nlm.nih.gov/uts/profile). |
| |
|
| | **Set these keys as environment variables.** |
| |
|
| | * **Using a `.env` file (Recommended for Local):** Create a `.env` file in the project root: |
| | ``` |
| | GROQ_API_KEY="your_groq_api_key" |
| | TAVILY_API_KEY="your_tavily_api_key" |
| | UMLS_API_KEY="your_umls_api_key" |
| | ``` |
| | *(Ensure `.env` is in your `.gitignore`)* |
| | |
| | * **Using System Environment Variables:** (Commands vary by OS) |
| | ```bash |
| | # Example for Linux/macOS |
| | export GROQ_API_KEY="your_groq_api_key" |
| | export TAVILY_API_KEY="your_tavily_api_key" |
| | export UMLS_API_KEY="your_umls_api_key" |
| | ``` |
| | |
| | * **Using Hugging Face Space Secrets (if deploying there):** |
| | Go to your Space -> Settings -> Secrets and add secrets named `GROQ_API_KEY`, `TAVILY_API_KEY`, and `UMLS_API_KEY` with their respective values. |
| | |
| | ## โถ๏ธ Running the Application |
| |
|
| | Ensure your virtual environment is activated and API keys are accessible (either via `.env` or system environment). Then run: |
| |
|
| | ```bash |
| | streamlit run app.py |
| | Use code with caution. |
| | Markdown |
| | The application should open in your web browser. |
| | |
| | ๐ How to Use |
| | Patient Intake: Fill out the patient information form in the sidebar. |
| | |
| | Start Consultation: Click "Start/Update Consultation". Initial red flags (if any) will appear in the sidebar. |
| | |
| | Interact with AI: Use the chat input. Start by asking the AI to analyze the patient (e.g., "Analyze this patient", "Proceed with assessment"). |
| | |
| | Review Responses: Observe the chat: |
| | |
| | AI questions or conversational text. |
| | |
| | Tool execution messages (๐ ๏ธ). |
| | |
| | Interaction Warnings/Alerts: Pay close attention to outputs from the check_drug_interactions tool. |
| | |
| | Reflection Output: Notice when the AI explicitly mentions reviewing warnings and potentially revising its plan. |
| | |
| | Final Structured JSON output with the comprehensive assessment. |
| | |
| | Flagged risks shown as prominent errors (๐จ). |
| | |
| | โ ๏ธ Important Disclaimer |
| | SynapseAI is an experimental AI assistant demonstration. |
| | |
| | NOT FOR CLINICAL USE: It is NOT a substitute for professional medical advice, diagnosis, or treatment. |
| | |
| | VERIFY ALL OUTPUT: All information, suggestions, diagnoses, medication recommendations, dosages, interaction checks, and guideline interpretations MUST be independently verified using standard medical resources and clinical judgment. |
| | |
| | API LIMITATIONS: Relies on external APIs (RxNorm, OpenFDA, Tavily) which have their own limitations, potential downtimes, and data coverage gaps. Interaction checking is complex and may not catch everything. |
| | |
| | AI LIMITATIONS: LLMs can hallucinate, make errors, and may misinterpret API results or guidelines. |
| | |
| | NO LIABILITY: The creators assume no responsibility for any decisions made based on this application's output. |
| | |
| | Always rely on your professional training and judgment. |
| | |
| | ๐ฎ Future Enhancements |
| | Full Memory Implementation: Add LLM-based summarization to manage long conversation context. |
| | |
| | Deeper EMR/FHIR Simulation: Allow parsing more complex FHIR resources and generating draft resources based on the plan. |
| | |
| | Refined Guideline Extraction: Improve the extraction and application of specific recommendations from searched guidelines. |
| | |
| | User Feedback Integration: Allow explicit clinician overrides/edits to the plan. |
| | |
| | More Granular Tools: Add calculators (clinical scores, dosages), tools for specific disease pathways, etc. |
| | |
| | Asynchronous Operations: Improve UI responsiveness during long API calls (more complex in Streamlit). |
| | |
| | ๐ License |
| | (Optional: Specify a license, e.g., MIT, Apache 2.0, or state if it's proprietary) |
| | |
| | **Key Updates in this README:** |
| | |
| | * Reflects the **v2** status and highlights the integration of **UMLS/RxNorm and OpenFDA APIs** for realistic interaction checks. |
| | * Explicitly mentions the **self-correction loop (`reflection_node`)** as a key feature. |
| | * Includes instructions for obtaining a **UMLS License/API Key**. |
| | * Updates the **Technology Stack** list. |
| | * Emphasizes the reliance on **external APIs** and their limitations in the disclaimer. |
| | * Reflects the **modular file structure** (`app.py`, `agent.py`). |
| | Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference |