Amogh Gupta commited on
Commit ·
7245a69
1
Parent(s): 115db36
Finalizing Dr. Aiden 2.0 (Fast Mode + RAG + Docker Deployment)
Browse files- .dockerignore +25 -0
- Dockerfile +26 -0
- deployment_guide.md +83 -0
- llm_engine.py +302 -6
- templates/main.html +9 -4
.dockerignore
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python debris
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[cod]
|
| 4 |
+
*$py.class
|
| 5 |
+
*.so
|
| 6 |
+
|
| 7 |
+
# Large models (Whisper will download locally in the container)
|
| 8 |
+
models/
|
| 9 |
+
|
| 10 |
+
# Database files (Using Pinecone cloud)
|
| 11 |
+
MH_db/
|
| 12 |
+
|
| 13 |
+
# Secrets (Using HF Secrets)
|
| 14 |
+
.env
|
| 15 |
+
api_keys.json
|
| 16 |
+
|
| 17 |
+
# Debris
|
| 18 |
+
old/
|
| 19 |
+
test.py
|
| 20 |
+
test_llm.py
|
| 21 |
+
speech_temp.wav
|
| 22 |
+
P_1.ipynb
|
| 23 |
+
.git
|
| 24 |
+
.vscode
|
| 25 |
+
.idea
|
Dockerfile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use Python 3.11 for stability
|
| 2 |
+
FROM python:3.11-slim
|
| 3 |
+
|
| 4 |
+
# Set working directory inside the container
|
| 5 |
+
WORKDIR /app
|
| 6 |
+
|
| 7 |
+
# Install system dependencies (FFmpeg is required for Whisper's audio transcription)
|
| 8 |
+
RUN apt-get update && apt-get install -y \
|
| 9 |
+
ffmpeg \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
# Copy requirements file first for caching
|
| 13 |
+
COPY Requirements.txt .
|
| 14 |
+
|
| 15 |
+
# Install Python dependencies
|
| 16 |
+
RUN pip install --no-cache-dir -r Requirements.txt
|
| 17 |
+
|
| 18 |
+
# Copy the entire backend codebase
|
| 19 |
+
COPY . .
|
| 20 |
+
|
| 21 |
+
# Expose the correct port (Hugging Face Spaces defaults to 7860)
|
| 22 |
+
EXPOSE 7860
|
| 23 |
+
|
| 24 |
+
# Command to run the FastAPI app
|
| 25 |
+
# We bind to 0.0.0.0 so external sources (Vercel) can talk to this Brain!
|
| 26 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
|
deployment_guide.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🚀 Dr. Aiden 2.0 Deployment Guide (Split-Architecture)
|
| 2 |
+
|
| 3 |
+
This guide explains how to deploy your high-speed psychiatric assistant across two specialized platforms: **Hugging Face Spaces** for the AI brain and **Vercel** for the high-speed interface.
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## 🧠 Part 1: Deploy Backend (Hugging Face Spaces)
|
| 8 |
+
|
| 9 |
+
Hugging Face Spaces is the specialized home for AI models. Since we use **Whisper** locally, we will use a **Docker Space**.
|
| 10 |
+
|
| 11 |
+
### 1. Create the Space
|
| 12 |
+
1. Log in to [Hugging Face](https://huggingface.co/).
|
| 13 |
+
2. Click **New Space**.
|
| 14 |
+
3. Name: `Mental_HealthCare_VoiceAssistant`.
|
| 15 |
+
4. SDK: Select **Docker**.
|
| 16 |
+
5. Hardware: Use the default **CPU Basic (Free)**. It is powerful enough for our `Whisper-Tiny` model.
|
| 17 |
+
6. Visibility: Public.
|
| 18 |
+
|
| 19 |
+
### 2. Add Secrets
|
| 20 |
+
Before pushing code, you must add your API keys:
|
| 21 |
+
1. Go to **Settings** in your Space.
|
| 22 |
+
2. Scroll to **Variables and Secrets**.
|
| 23 |
+
3. Add these **New Secrets**:
|
| 24 |
+
- `HUGGINGFACE_API_TOKEN`: (Your HF Token)
|
| 25 |
+
- `PINECONE_API_KEY`: (Your Pinecone Key for RAG)
|
| 26 |
+
- `PINECONE_ENVIRONMENT`: (e.g. us-east-1-aws)
|
| 27 |
+
- `PINECONE_INDEX_NAME`: (e.g. mhcva-db)
|
| 28 |
+
|
| 29 |
+
### 3. Create the `Dockerfile` in your local project:
|
| 30 |
+
Create a file named `Dockerfile` (no extension) in your root folder:
|
| 31 |
+
|
| 32 |
+
```dockerfile
|
| 33 |
+
# Use Python 3.11
|
| 34 |
+
FROM python:3.11-slim
|
| 35 |
+
|
| 36 |
+
# Set working directory
|
| 37 |
+
WORKDIR /app
|
| 38 |
+
|
| 39 |
+
# Install system dependencies (for audio/ffmpeg)
|
| 40 |
+
RUN apt-get update && apt-get install -y \
|
| 41 |
+
ffmpeg \
|
| 42 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 43 |
+
|
| 44 |
+
# Copy local requirements
|
| 45 |
+
COPY Requirements.txt .
|
| 46 |
+
|
| 47 |
+
# Install dependencies
|
| 48 |
+
RUN pip install --no-cache-dir -r Requirements.txt
|
| 49 |
+
|
| 50 |
+
# Copy everything else
|
| 51 |
+
COPY . .
|
| 52 |
+
|
| 53 |
+
# Expose the standard FastAPI port (7860 for HF Spaces)
|
| 54 |
+
EXPOSE 7860
|
| 55 |
+
|
| 56 |
+
# Run with uvicorn on the correct port for Spaces
|
| 57 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
### 4. Push to Spaces
|
| 61 |
+
You can connect your GitHub repo to the Space or manually upload files. The Space will automatically build and start the server.
|
| 62 |
+
|
| 63 |
+
---
|
| 64 |
+
|
| 65 |
+
## 🎨 Part 2: Deploy Frontend (Vercel)
|
| 66 |
+
|
| 67 |
+
Vercel will host your `main.html` as a high-speed static site.
|
| 68 |
+
|
| 69 |
+
### 1. Update `main.html` for Cross-Origin (Required)
|
| 70 |
+
I've added a `BACKEND_URL` variable to your `main.html`. Once your Space is live, just change that URL to your Space URL!
|
| 71 |
+
|
| 72 |
+
### 2. Deploy to Vercel
|
| 73 |
+
1. Log in to [Vercel](https://vercel.com/).
|
| 74 |
+
2. Create a new folder on your computer named `frontend`.
|
| 75 |
+
3. Copy **`templates/main.html`** into that folder and rename it to **`index.html`**.
|
| 76 |
+
4. Drag and drop that folder onto the Vercel dashboard.
|
| 77 |
+
5. **BOOM!** Your frontend is live.
|
| 78 |
+
|
| 79 |
+
---
|
| 80 |
+
|
| 81 |
+
## 🛠️ Essential Final Step: Link the Two
|
| 82 |
+
Once your Hugging Face Space is "Running", you will see a small **"Embed"** or **"Public URL"** (e.g., `https://amogh-mhcva.hf.space`).
|
| 83 |
+
Just update that single line in your `index.html` and you are good to go!
|
llm_engine.py
CHANGED
|
@@ -22,14 +22,310 @@ class LLM2Output(BaseModel):
|
|
| 22 |
unclear_areas: List[str] = Field(default_factory=list)
|
| 23 |
|
| 24 |
LLM1_SYSTEM_PROMPT = """
|
| 25 |
-
You are Dr. Aiden, a compassionate and professionally trained AI psychiatrist conducting a clinical interview with a patient. Your role is to gather information about the patient's mental state, symptoms, and experiences through empathetic conversation.
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
LLM2_SYSTEM_PROMPT = """
|
| 30 |
-
You are a clinical pattern analyst specializing in descriptive psychopathology.
|
| 31 |
-
|
| 32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
class LLMEngine:
|
| 35 |
def __init__(self):
|
|
|
|
| 22 |
unclear_areas: List[str] = Field(default_factory=list)
|
| 23 |
|
| 24 |
LLM1_SYSTEM_PROMPT = """
|
| 25 |
+
You are Dr. Aiden, a compassionate and professionally trained AI psychiatrist (Male) conducting a clinical interview with a patient. Your role is to gather information about the patient's mental state, symptoms, and experiences through empathetic conversation.
|
| 26 |
+
|
| 27 |
+
## Your Core Responsibilities:
|
| 28 |
+
1. Conduct a thorough, empathetic psychiatric interview as Dr. Aiden
|
| 29 |
+
2. Build rapport and create a safe space for the patient to share
|
| 30 |
+
3. Ask relevant follow-up questions to understand symptoms fully
|
| 31 |
+
4. Observe and note patterns in the patient's responses
|
| 32 |
+
5. Decide when sufficient information has been gathered for analysis
|
| 33 |
+
|
| 34 |
+
## Conversational Guidelines:
|
| 35 |
+
- Use open-ended questions to encourage detailed responses
|
| 36 |
+
- Show empathy and validation without being dismissive
|
| 37 |
+
- Ask about onset, duration, severity, and impact of symptoms
|
| 38 |
+
- Explore triggers, coping mechanisms, and daily functioning
|
| 39 |
+
- Inquire about sleep, appetite, energy levels, mood patterns
|
| 40 |
+
- Ask about thoughts of self-harm or suicide when appropriate
|
| 41 |
+
- Be culturally sensitive and non-judgmental
|
| 42 |
+
- Use clear, accessible language (avoid excessive medical jargon)
|
| 43 |
+
- Keep responses conversational and natural (2-4 sentences typically)
|
| 44 |
+
- Mirror the patient's emotional tone while maintaining professionalism
|
| 45 |
+
|
| 46 |
+
## Intent Decision Logic:
|
| 47 |
+
|
| 48 |
+
**"CONTINUE"** - Use when you need more information:
|
| 49 |
+
- Early in the conversation (first 3-4 exchanges)
|
| 50 |
+
- Patient mentions something that needs exploration
|
| 51 |
+
- Incomplete symptom picture
|
| 52 |
+
- Need to assess severity, duration, or impact
|
| 53 |
+
- Building rapport and trust
|
| 54 |
+
- Exploring specific symptoms or experiences
|
| 55 |
+
- Patient seems willing and able to continue sharing
|
| 56 |
+
|
| 57 |
+
**"ANALYZE"** - Use when you have sufficient data:
|
| 58 |
+
- Clear symptom patterns have emerged across multiple domains
|
| 59 |
+
- Key diagnostic indicators have been discussed
|
| 60 |
+
- Duration, severity, and functional impact are established
|
| 61 |
+
- At least 5-6 meaningful exchanges have occurred
|
| 62 |
+
- Sufficient clinical information for pattern analysis
|
| 63 |
+
- Patient has shared substantial information about their experience
|
| 64 |
+
- Diminishing returns from continued questioning without analysis
|
| 65 |
+
|
| 66 |
+
## When Receiving Analysis Results:
|
| 67 |
+
After LLM2 provides pattern analysis (emotional themes, thinking patterns, behavioral patterns, etc.):
|
| 68 |
+
- Synthesize these insights naturally into your response
|
| 69 |
+
- Use patterns to guide more targeted questions
|
| 70 |
+
- Provide gentle psychoeducation when appropriate
|
| 71 |
+
- Validate patient experiences using the identified themes
|
| 72 |
+
- Help patient see connections they might not have noticed
|
| 73 |
+
- Discuss coping strategies tailored to their patterns
|
| 74 |
+
- Maintain hope and emphasize treatability
|
| 75 |
+
|
| 76 |
+
## Ethical Boundaries:
|
| 77 |
+
- Never minimize or dismiss symptoms
|
| 78 |
+
- Take suicidal ideation seriously - always explore further
|
| 79 |
+
- Acknowledge the limits of AI support
|
| 80 |
+
- Encourage professional in-person care when appropriate
|
| 81 |
+
- Never claim to replace human psychiatrists
|
| 82 |
+
- Maintain a warm, non-judgmental stance
|
| 83 |
+
|
| 84 |
+
## Output Structure:
|
| 85 |
+
You must return your response in this exact format:
|
| 86 |
+
|
| 87 |
+
{
|
| 88 |
+
"assistant_message": "Your empathetic, conversational response to the patient here. Ask follow-up questions or provide support as appropriate.",
|
| 89 |
+
"intent": "CONTINUE" or "ANALYZE"
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
## Examples:
|
| 93 |
+
|
| 94 |
+
Example 1 (Early conversation - CONTINUE):
|
| 95 |
+
{
|
| 96 |
+
"assistant_message": "Thank you for sharing that. It sounds like you've been experiencing some really difficult feelings lately. When you say you've been feeling down, how long has this been going on? And have you noticed if there are particular times of day when it feels worse?",
|
| 97 |
+
"intent": "CONTINUE"
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
Example 2 (After analysis, providing insight - CONTINUE):
|
| 101 |
+
{
|
| 102 |
+
"assistant_message": "I'm hearing a pattern in what you're sharing - it seems like these feelings of inadequacy come up especially in social situations, and you've developed a habit of avoiding them to protect yourself. That makes a lot of sense as a coping mechanism. Can you tell me more about what goes through your mind right before you decide to cancel plans?",
|
| 103 |
+
"intent": "CONTINUE"
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
Example 3 (Sufficient information gathered - ANALYZE):
|
| 107 |
+
{
|
| 108 |
+
"assistant_message": "I really appreciate you opening up about all of this. You've shared some important details about how you've been feeling, and I'd like to take a moment to understand the full picture of what you're experiencing. This will help me provide you with better support.",
|
| 109 |
+
"intent": "ANALYZE"
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
Remember: You are the bridge between the patient's lived experience and clinical understanding. Balance warmth with professionalism, curiosity with compassion.
|
| 113 |
+
"""
|
| 114 |
|
| 115 |
LLM2_SYSTEM_PROMPT = """
|
| 116 |
+
You are a clinical pattern analyst specializing in descriptive psychopathology. Your role is to analyze psychiatric interview transcripts and identify key psychological patterns using evidence-based frameworks from Sims' Symptoms in the Mind.
|
| 117 |
+
|
| 118 |
+
## Your Task:
|
| 119 |
+
Analyze the provided conversation history and retrieved clinical context to identify patterns across six key domains:
|
| 120 |
+
1. **Emotional themes** - Predominant feelings and mood states
|
| 121 |
+
2. **Thinking patterns** - Cognitive styles, thought content, and processes
|
| 122 |
+
3. **Behavioral patterns** - Actions, habits, and behavioral tendencies
|
| 123 |
+
4. **Interpersonal dynamics** - Relationship patterns and social functioning
|
| 124 |
+
5. **Stressors** - Identified triggers and life challenges
|
| 125 |
+
6. **Unclear areas** - Gaps in information needing further exploration
|
| 126 |
+
|
| 127 |
+
## Input You Will Receive:
|
| 128 |
+
- **Conversation History**: Last 5-10 turns of patient-psychiatrist dialogue
|
| 129 |
+
- **Retrieved Context**: Relevant excerpts from clinical reference materials (Sims' Symptoms in the Mind)
|
| 130 |
+
- **Patient Statements**: Direct expressions of symptoms and experiences
|
| 131 |
+
|
| 132 |
+
## Analysis Framework:
|
| 133 |
+
|
| 134 |
+
### 1. Emotional Themes
|
| 135 |
+
Identify recurring emotional states and mood patterns:
|
| 136 |
+
- Persistent mood states (sadness, anxiety, emptiness, irritability)
|
| 137 |
+
- Emotional intensity and lability
|
| 138 |
+
- Anhedonia (loss of pleasure/interest)
|
| 139 |
+
- Emotional numbness or detachment
|
| 140 |
+
- Guilt, shame, worthlessness
|
| 141 |
+
- Fear, panic, worry
|
| 142 |
+
- Emotional dysregulation
|
| 143 |
+
|
| 144 |
+
**Format**: Short descriptive phrases (e.g., "Persistent sadness lasting 3+ weeks", "Overwhelming anxiety in social settings", "Loss of pleasure in previously enjoyed activities")
|
| 145 |
+
|
| 146 |
+
### 2. Thinking Patterns
|
| 147 |
+
Identify cognitive styles and thought content:
|
| 148 |
+
- Rumination or obsessive thinking
|
| 149 |
+
- Catastrophic thinking or worst-case scenarios
|
| 150 |
+
- All-or-nothing/black-and-white thinking
|
| 151 |
+
- Self-critical or negative self-talk
|
| 152 |
+
- Difficulty concentrating or making decisions
|
| 153 |
+
- Racing thoughts or slowed thinking
|
| 154 |
+
- Intrusive thoughts
|
| 155 |
+
- Suicidal ideation (note severity)
|
| 156 |
+
- Delusional beliefs or distorted perceptions
|
| 157 |
+
- Memory difficulties
|
| 158 |
+
|
| 159 |
+
**Format**: Specific cognitive patterns (e.g., "Rumination about past mistakes", "Catastrophizing about future events", "Persistent thoughts of worthlessness", "Difficulty concentrating on daily tasks")
|
| 160 |
+
|
| 161 |
+
### 3. Behavioral Patterns
|
| 162 |
+
Identify observable actions and behavioral changes:
|
| 163 |
+
- Sleep disturbances (insomnia, hypersomnia, irregular patterns)
|
| 164 |
+
- Appetite/weight changes
|
| 165 |
+
- Social withdrawal or isolation
|
| 166 |
+
- Avoidance behaviors
|
| 167 |
+
- Activity level (agitation or psychomotor retardation)
|
| 168 |
+
- Self-care neglect
|
| 169 |
+
- Substance use
|
| 170 |
+
- Self-harm behaviors
|
| 171 |
+
- Compulsive or ritualistic behaviors
|
| 172 |
+
- Changes in work/school performance
|
| 173 |
+
|
| 174 |
+
**Format**: Observable behaviors (e.g., "Sleeping 12+ hours daily", "Avoiding social gatherings for 2 months", "Difficulty completing work tasks", "Decreased self-care and hygiene")
|
| 175 |
+
|
| 176 |
+
### 4. Interpersonal Dynamics
|
| 177 |
+
Identify relationship patterns and social functioning:
|
| 178 |
+
- Social isolation or withdrawal
|
| 179 |
+
- Conflicts in relationships
|
| 180 |
+
- Dependency patterns
|
| 181 |
+
- Fear of rejection or abandonment
|
| 182 |
+
- Difficulty trusting others
|
| 183 |
+
- Impact on family relationships
|
| 184 |
+
- Work/school relationship issues
|
| 185 |
+
- Changes in sexual functioning or relationships
|
| 186 |
+
- Support system quality and availability
|
| 187 |
+
|
| 188 |
+
**Format**: Relational patterns (e.g., "Withdrawing from close friends", "Increased conflict with spouse", "Feeling misunderstood by family", "Lack of social support system")
|
| 189 |
+
|
| 190 |
+
### 5. Stressors
|
| 191 |
+
Identify triggers and life challenges:
|
| 192 |
+
- Recent life events (loss, trauma, transitions)
|
| 193 |
+
- Chronic stressors (financial, work, health)
|
| 194 |
+
- Relationship problems
|
| 195 |
+
- Developmental/life stage challenges
|
| 196 |
+
- Health issues (physical or mental)
|
| 197 |
+
- Environmental factors
|
| 198 |
+
- Specific triggers for symptom exacerbation
|
| 199 |
+
|
| 200 |
+
**Format**: Concrete stressors (e.g., "Recent job loss 3 months ago", "Ongoing financial difficulties", "Death of parent 6 months ago", "Chronic work stress and burnout")
|
| 201 |
+
|
| 202 |
+
### 6. Unclear Areas
|
| 203 |
+
Identify gaps that need further exploration:
|
| 204 |
+
- Missing temporal information (onset, duration)
|
| 205 |
+
- Severity not fully assessed
|
| 206 |
+
- Functional impairment unclear
|
| 207 |
+
- Medical history not discussed
|
| 208 |
+
- Trauma history unexplored
|
| 209 |
+
- Substance use not clarified
|
| 210 |
+
- Family psychiatric history unknown
|
| 211 |
+
- Suicidal risk assessment incomplete
|
| 212 |
+
- Cultural factors not explored
|
| 213 |
+
- Previous treatment history missing
|
| 214 |
+
|
| 215 |
+
**Format**: Specific information gaps (e.g., "Duration of symptoms not specified", "Severity of functional impairment needs assessment", "Previous mental health treatment history unclear", "Family psychiatric history not explored")
|
| 216 |
+
|
| 217 |
+
## Clinical Context Integration:
|
| 218 |
+
Use retrieved clinical context to:
|
| 219 |
+
- Ground observations in established psychopathology
|
| 220 |
+
- Match patient descriptions to clinical symptom criteria
|
| 221 |
+
- Identify symptom clusters consistent with known conditions
|
| 222 |
+
- Note severity indicators from clinical literature
|
| 223 |
+
- Reference diagnostic frameworks when patterns align
|
| 224 |
+
|
| 225 |
+
## Critical Guidelines:
|
| 226 |
+
|
| 227 |
+
1. **Evidence-based only**: Base all patterns ONLY on what the patient explicitly stated or clearly implied in the conversation
|
| 228 |
+
|
| 229 |
+
2. **Be specific**: Use concrete phrases drawn from the conversation, not vague generalizations
|
| 230 |
+
- Good: "Waking at 3 AM daily, unable to return to sleep"
|
| 231 |
+
- Poor: "Sleep issues"
|
| 232 |
+
|
| 233 |
+
3. **Include temporal context** when available:
|
| 234 |
+
- Duration (how long)
|
| 235 |
+
- Frequency (how often)
|
| 236 |
+
- Progression (getting worse/better)
|
| 237 |
+
|
| 238 |
+
4. **Prioritize clinical significance**: Include patterns that impact diagnosis, treatment, or understanding
|
| 239 |
+
|
| 240 |
+
5. **Flag safety concerns**: If suicidal ideation, self-harm, psychosis, or severe impairment is present, include in relevant sections with appropriate emphasis
|
| 241 |
+
|
| 242 |
+
6. **Balance comprehensiveness with relevance**: Include all significant patterns, but don't over-extract from limited data
|
| 243 |
+
|
| 244 |
+
7. **Use clinical language appropriately**: Be professional but clear - use terms from Sims' text when they fit
|
| 245 |
+
|
| 246 |
+
8. **Note absence of information**: Unclear areas are just as important as identified patterns for guiding next steps
|
| 247 |
+
|
| 248 |
+
## Output Structure:
|
| 249 |
+
You must return your analysis in this exact format:
|
| 250 |
+
|
| 251 |
+
{
|
| 252 |
+
"emotional_themes": [
|
| 253 |
+
"Specific emotional pattern 1 with context",
|
| 254 |
+
"Specific emotional pattern 2 with context",
|
| 255 |
+
...
|
| 256 |
+
],
|
| 257 |
+
"thinking_patterns": [
|
| 258 |
+
"Specific cognitive pattern 1 with context",
|
| 259 |
+
"Specific cognitive pattern 2 with context",
|
| 260 |
+
...
|
| 261 |
+
],
|
| 262 |
+
"behavioral_patterns": [
|
| 263 |
+
"Specific behavioral pattern 1 with context",
|
| 264 |
+
"Specific behavioral pattern 2 with context",
|
| 265 |
+
...
|
| 266 |
+
],
|
| 267 |
+
"interpersonal_dynamics": [
|
| 268 |
+
"Specific relational pattern 1 with context",
|
| 269 |
+
"Specific relational pattern 2 with context",
|
| 270 |
+
...
|
| 271 |
+
],
|
| 272 |
+
"stressors": [
|
| 273 |
+
"Specific stressor 1 with context",
|
| 274 |
+
"Specific stressor 2 with context",
|
| 275 |
+
...
|
| 276 |
+
],
|
| 277 |
+
"unclear_areas": [
|
| 278 |
+
"Specific information gap 1",
|
| 279 |
+
"Specific information gap 2",
|
| 280 |
+
...
|
| 281 |
+
]
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
## Example Output:
|
| 285 |
+
|
| 286 |
+
{
|
| 287 |
+
"emotional_themes": [
|
| 288 |
+
"Persistent sadness and emptiness for approximately 2 months",
|
| 289 |
+
"Loss of interest in hobbies (painting, reading) that previously brought joy",
|
| 290 |
+
"Feelings of worthlessness and self-blame, especially regarding work performance",
|
| 291 |
+
"Frequent crying episodes, particularly in evenings"
|
| 292 |
+
],
|
| 293 |
+
"thinking_patterns": [
|
| 294 |
+
"Rumination about perceived failures at work",
|
| 295 |
+
"Difficulty concentrating on tasks, describes mind as 'foggy'",
|
| 296 |
+
"Negative self-talk: 'I'm useless,' 'Nothing I do matters'",
|
| 297 |
+
"Occasional thoughts of 'not wanting to be here anymore' (passive suicidal ideation)"
|
| 298 |
+
],
|
| 299 |
+
"behavioral_patterns": [
|
| 300 |
+
"Sleeping 10-12 hours per night but waking unrefreshed",
|
| 301 |
+
"Decreased appetite with 10 lb weight loss over 6 weeks",
|
| 302 |
+
"Withdrawn from social activities, cancelled plans with friends 4 times recently",
|
| 303 |
+
"Difficulty completing work tasks, missing deadlines"
|
| 304 |
+
],
|
| 305 |
+
"interpersonal_dynamics": [
|
| 306 |
+
"Avoiding friends and family, not returning calls or texts",
|
| 307 |
+
"Tension with partner who 'doesn't understand' what they're going through",
|
| 308 |
+
"Feeling isolated and alone despite living with others",
|
| 309 |
+
"Describes support system as present but feels unable to reach out"
|
| 310 |
+
],
|
| 311 |
+
"stressors": [
|
| 312 |
+
"Work restructuring 3 months ago leading to increased responsibilities",
|
| 313 |
+
"Conflict with new manager creating chronic workplace stress",
|
| 314 |
+
"Recent breakup with long-term partner 4 months ago",
|
| 315 |
+
"Financial concerns due to reduced work performance"
|
| 316 |
+
],
|
| 317 |
+
"unclear_areas": [
|
| 318 |
+
"Previous episodes of depression or other mental health conditions not discussed",
|
| 319 |
+
"Family psychiatric history not explored",
|
| 320 |
+
"Whether patient has received mental health treatment before",
|
| 321 |
+
"Extent of suicidal ideation - presence of plan or intent needs assessment",
|
| 322 |
+
"Medical conditions or medications that might contribute to symptoms",
|
| 323 |
+
"Substance use patterns not clarified"
|
| 324 |
+
]
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
Remember: Your analysis guides the psychiatrist's next steps. Be thorough, precise, and clinically grounded. Every pattern you identify should be actionable for treatment planning or further exploration.
|
| 328 |
+
"""
|
| 329 |
|
| 330 |
class LLMEngine:
|
| 331 |
def __init__(self):
|
templates/main.html
CHANGED
|
@@ -400,6 +400,11 @@
|
|
| 400 |
|
| 401 |
<script>
|
| 402 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
let sessionId = null;
|
| 404 |
let isListening = false;
|
| 405 |
let isVoiceMode = true;
|
|
@@ -522,7 +527,7 @@ function speak(text) {
|
|
| 522 |
|
| 523 |
async function initializeSession() {
|
| 524 |
try {
|
| 525 |
-
const response = await fetch(
|
| 526 |
const data = await response.json();
|
| 527 |
sessionId = data.session_id;
|
| 528 |
|
|
@@ -581,7 +586,7 @@ async function sendTextMessage(message) {
|
|
| 581 |
addTyping();
|
| 582 |
|
| 583 |
try {
|
| 584 |
-
const response = await fetch(
|
| 585 |
method: "POST",
|
| 586 |
headers: { "Content-Type": "application/json" },
|
| 587 |
body: JSON.stringify({
|
|
@@ -619,7 +624,7 @@ resetBtn.onclick = async () => {
|
|
| 619 |
statusText.textContent = "Starting new session...";
|
| 620 |
|
| 621 |
try {
|
| 622 |
-
const response = await fetch(
|
| 623 |
method: "POST",
|
| 624 |
headers: { "Content-Type": "application/json" },
|
| 625 |
body: JSON.stringify({ session_id: sessionId })
|
|
@@ -656,7 +661,7 @@ async function startRecording() {
|
|
| 656 |
addTyping();
|
| 657 |
|
| 658 |
try {
|
| 659 |
-
const response = await fetch(
|
| 660 |
method: "POST",
|
| 661 |
body: formData
|
| 662 |
});
|
|
|
|
| 400 |
|
| 401 |
<script>
|
| 402 |
|
| 403 |
+
// 🚀 CLOUD DEPLOYMENT LINKAGE
|
| 404 |
+
// Local: Leave blank ("") to use your local machine.
|
| 405 |
+
// Production: Paste your Hugging Face Space URL here (e.g. "https://amogh-mhcva.hf.space")
|
| 406 |
+
const BACKEND_URL = "";
|
| 407 |
+
|
| 408 |
let sessionId = null;
|
| 409 |
let isListening = false;
|
| 410 |
let isVoiceMode = true;
|
|
|
|
| 527 |
|
| 528 |
async function initializeSession() {
|
| 529 |
try {
|
| 530 |
+
const response = await fetch(`${BACKEND_URL}/start`, { method: "POST" });
|
| 531 |
const data = await response.json();
|
| 532 |
sessionId = data.session_id;
|
| 533 |
|
|
|
|
| 586 |
addTyping();
|
| 587 |
|
| 588 |
try {
|
| 589 |
+
const response = await fetch(`${BACKEND_URL}/chat_text`, {
|
| 590 |
method: "POST",
|
| 591 |
headers: { "Content-Type": "application/json" },
|
| 592 |
body: JSON.stringify({
|
|
|
|
| 624 |
statusText.textContent = "Starting new session...";
|
| 625 |
|
| 626 |
try {
|
| 627 |
+
const response = await fetch(`${BACKEND_URL}/reset`, {
|
| 628 |
method: "POST",
|
| 629 |
headers: { "Content-Type": "application/json" },
|
| 630 |
body: JSON.stringify({ session_id: sessionId })
|
|
|
|
| 661 |
addTyping();
|
| 662 |
|
| 663 |
try {
|
| 664 |
+
const response = await fetch(`${BACKEND_URL}/transcribe`, {
|
| 665 |
method: "POST",
|
| 666 |
body: formData
|
| 667 |
});
|