A safety-first, agentic health-screening research system built with open models,
reproducible specialist ML, local voice inference, and a scale-to-zero AWS architecture.
Important
HealthAI is an educational engineering and research demonstration—not a medical device. It does not diagnose, prescribe treatment, or replace a qualified clinician. Its deterministic safety gate can identify configured emergency phrases, but it cannot guarantee that every urgent condition will be recognized.
HealthAI explores a practical question: how can an agentic health-research system remain private, auditable, inexpensive, and useful without outsourcing its intelligence to a hosted AI API?
The project uses open-weight models because the inference boundary matters. Model weights run on infrastructure controlled by the project, prompts and transcripts are not sent to a third-party AI provider, model versions can be pinned, and behavior can be evaluated against a stable release. This creates an inspectable engineering system rather than a thin interface around an external API.
It also avoids asking one general-purpose LLM to solve every problem. Different parts of the workflow have different evidence and reliability requirements:
| Layer | Model or mechanism | Why it owns this responsibility |
|---|---|---|
| Conversation | HealthAI Reasoner 1.0 · powered by Qwen3-0.6B Q8 | A small open-weight LLM is sufficient for natural language, follow-up selection, and constrained JSON proposals while remaining CPU-deployable. |
| Voice | HealthAI Voice 1.0 · powered by Moonshine Tiny Streaming English 34M | A focused open speech model provides private transcription without the cost or data boundary of a hosted voice API. |
| Research screening | Compact ONNX specialist models | Structured health measurements benefit from reproducible, versioned estimators with explicit features, thresholds, and evaluation metadata. |
| Safety and authorization | Deterministic policy | Emergency precedence, tool permissions, schema validation, and fail-closed behavior must not depend on generated prose. |
| Anonymous continuity | Browser-held state | A useful session can survive refresh without requiring an account or creating a server-side clinical chat database. |
This is why the system combines a small LLM with smaller research models instead of choosing between them. Qwen interprets language; specialist models estimate only the narrow outcomes they were trained for; deterministic code decides what is allowed to run. Each model is replaceable behind a typed boundary and must earn promotion through evaluation.
- No external AI API keys: conversational, speech, and specialist inference run locally or inside the project’s AWS account.
- Version control over behavior: exact model families, quantization, tool contracts, prompts, thresholds, and evaluation cases are visible in the repository.
- Cost proportional to usage: compact CPU-oriented models fit scale-to-zero Lambda functions instead of requiring an always-on GPU endpoint.
- Research flexibility: LoRA experiments, alternative specialist estimators, quantization, and routing policies can be tested without waiting for a hosted provider to expose them.
- Reduced vendor coupling: Qwen, Moonshine, and ONNX tools communicate through project-owned interfaces and can be independently upgraded or replaced.
- Stronger privacy boundary: health-related text and audio do not need to leave the controlled runtime for model inference.
Open weights do not automatically make a model safe, clinically valid, or unbiased. HealthAI pairs them with provenance, bounded tool access, reproducible evaluation, explicit limitations, and deterministic safety controls. That combination—not model ownership alone—is the project’s core engineering thesis.
Every model follows one durable public naming system: HealthAI <Capability> <major.minor>. The friendly name is used throughout the UI and reports; a machine-readable release ID such as healthai-cardio-v2.0.0 travels in API responses and provenance. Stable API slugs such as heart and heart_risk do not change when a model is upgraded.
| Public model | Technical release | Powered by / trained on | Current gate |
|---|---|---|---|
| HealthAI Cardio 2.0 | healthai-cardio-v2.0.0 |
UCI Statlog Heart · selected ONNX pipeline | Research |
| HealthAI Glyco 2.0 | healthai-glyco-v2.0.0 |
UCI Early Stage Diabetes · selected ONNX pipeline | Research |
| HealthAI Renal 2.0 | healthai-renal-v2.0.0 |
UCI Chronic Kidney Disease · selected ONNX pipeline | Research |
| HealthAI Hepatic 2.0 | healthai-hepatic-v2.0.0 |
UCI Indian Liver Patient · selected ONNX pipeline | Research |
| HealthAI PulmoVision 1.0 | healthai-pulmovision-v1.0.0 |
PneumoniaMNIST · logistic ONNX baseline | Experimental research |
| HealthAI Reasoner 1.0 | healthai-reasoner-v1.0.0 |
Qwen3-0.6B Q8 · llama.cpp | Hybrid runtime; LoRA 1.1 remains a candidate |
| HealthAI Voice 1.0 | healthai-voice-v1.0.0 |
Moonshine Tiny Streaming English 34M | English ASR |
| HealthAI Neuro 0.1 | healthai-neuro-v0.1.0 |
Retired legacy artifact | Blocked; provenance only |
Release increments have explicit meaning:
- Major — an incompatible dataset, feature schema, model family, or input/output contract change.
- Minor — compatible retraining, recalibration, threshold change, or promoted adapter with new measured behavior.
- Patch — packaging, metadata, conversion, or runtime correction expected to preserve predictions.
Research status is not encoded into the model name. research, experimental, candidate, and blocked are independent registry gates, so a polished version label can never be mistaken for clinical validation. Open-model attribution is also mandatory: HealthAI owns the orchestration and release contract, while Qwen and Moonshine remain visibly credited as the underlying open-weight models.
| Capability | What the user experiences | Implementation |
|---|---|---|
| Natural-language intake | Text or voice conversation in English/Hindi | HealthAI Reasoner 1.0 · Qwen3-0.6B proposal layer + deterministic fallback |
| Immediate specialist routing | Explicit heart, diabetes, kidney, or liver requests open the relevant assessment without a long interview | Allowlisted intent router and typed tool registry |
| General symptom intake | Bounded follow-up questions for concerns such as fever, cough, or reflux | Stateful symptom protocol with repetition protection |
| Medical voice AI | Animated recorder, editable transcript, explicit confirmation | HealthAI Voice 1.0 · Moonshine Tiny Streaming English, 34M parameters |
| Research screening | Validated schema, ONNX inference, calibrated threshold, provenance | HealthAI Cardio 2.0, Glyco 2.0, Renal 2.0, and Hepatic 2.0 |
| Image research | Chest X-ray upload and experimental pneumonia score | HealthAI PulmoVision 1.0 · PneumoniaMNIST pediatric benchmark |
| Exportable result | Branded health-style report in PDF or XLSX | Server-generated report bound to a short-lived token |
| Anonymous memory | Chat survives refresh; Clear history removes it | Browser localStorage, no account required |
| Abuse controls | Friendly rate-limit response and retry window | Opaque cookie + DynamoDB TTL counters |
| Safety | Emergency phrases bypass the LLM and all prediction models | Deterministic pre-routing safety gate |
flowchart LR
U[Browser\nReact-free TypeScript UI] -->|HTTPS| G[API Gateway\nHTTP API]
G --> A[FastAPI + Mangum\nAPI Lambda]
G --> V[HealthAI Voice 1.0\nMoonshine 34M · Voice Lambda]
A --> S[Deterministic\nSafety Gate]
S --> R[Hybrid Router]
R --> Q[HealthAI Reasoner 1.0\nQwen3-0.6B Q8 · Private Lambda]
R --> P[Policy Validator]
P --> T[Typed Tool Registry]
T --> O[Versioned HealthAI\nONNX Research Models]
A --> D[(DynamoDB\nquota counters only)]
A -. reserved async audio path .-> B[(Encrypted S3)]
B -.-> X[SQS + DLQ]
A --> C[PDF / XLSX Reports]
U --> L[(Browser localStorage\nanonymous chat history)]
| Component | Technology | Operational posture |
|---|---|---|
| Web application | TypeScript 5.7, Vite 6 | Compiled and served by the API Lambda |
| API | Python 3.12, FastAPI, Mangum | x86_64 Lambda, 2 GB, 30-second timeout |
| HealthAI Reasoner 1.0 | Qwen3-0.6B GGUF Q8, llama.cpp | Private x86_64 Lambda, 3,008 MB, scale-to-zero |
| HealthAI Voice 1.0 | Moonshine Tiny Streaming English 34M | Private x86_64 Lambda, 3,008 MB, scale-to-zero |
| HealthAI research models 2.0 | Versioned ONNX pipelines | Run inside the API Lambda on CPU |
| Quotas | DynamoDB on-demand + TTL | Stores opaque counters, never chat or clinical text |
| Temporary audio foundation | S3 + SQS + DLQ | Encrypted, one-day lifecycle; reserved for async ASR work |
| Observability | JSON CloudWatch logs + X-Ray | API logs 14 days; Qwen/voice logs 7 days |
| Infrastructure | AWS SAM / CloudFormation | Reproducible templates in infrastructure/ |
1. Text conversation and orchestration
- The browser restores the anonymous conversation from local storage.
- The deterministic safety gate checks the new message before any model call.
- A clear registered-model request is routed directly to its specialist form.
- Greetings, reviewed wellness answers, and clear non-health boundary probes use immediate deterministic responses.
- For remaining language ambiguity, Qwen proposes evidence fields or selects an allowlisted follow-up question.
- The policy layer rejects unknown tools, invented fields, incomplete calls, and invalid state transitions.
- A 12-second private-model client deadline returns control to the deterministic router before the public API can time out.
- The browser persists the sanitized conversation and encrypted state token.
The animated “thinking” state exposes operational stages such as safety review and tool routing. It does not expose hidden chain-of-thought.
2. Specialist prediction
- The UI obtains the model schema from the registry.
- The user supplies the required measurements.
- Pydantic and tool-specific validation reject missing, unknown, or implausible fields.
- The corresponding versioned ONNX pipeline performs CPU inference.
- The API applies the validation-selected threshold and returns a research risk signal with provenance and limitations.
- A 30-minute signed report token authorizes PDF/XLSX export without storing the assessment server-side.
3. Medical voice intake
- The browser captures audio and sends a bounded 16 kHz mono WAV file.
- Moonshine transcribes it on the project’s own compute.
- The transcript is placed in the composer for user review.
- Only the confirmed text enters the triage workflow.
The current endpoint is synchronous. The encrypted S3/SQS resources provide a future path for long or asynchronous jobs; the application does not claim that path is active today.
4. Anonymous memory and rate limiting
- The UI stores at most 60 messages, locale, current workflow state, and the latest triage result under
healthai.chat.v1. - “Clear history” removes that browser record.
- Server conversation state is AES-GCM encrypted and returned to the browser; production tokens expire after seven days.
- An opaque HttpOnly, Secure, SameSite=Lax cookie identifies a quota bucket. A privacy-preserving fallback is derived from network/user-agent signals with an application secret.
- DynamoDB keys are hashed and expire automatically. The table never contains the message body or medical inputs.
Small LLMs are valuable for language ambiguity and inexpensive CPU inference, but numerical screening and safety enforcement need reproducibility. Letting Qwen calculate every result would make outputs harder to audit and easier to prompt-inject. HealthAI therefore uses a hybrid controller:
flowchart TD
M[User message] --> E{Emergency phrase?}
E -->|yes| Z[Urgent safety response\nNo LLM or model call]
E -->|no| I{Explicit registered intent?}
I -->|yes| F[Open validated specialist form]
I -->|no| Q[Qwen constrained proposal]
Q --> V{Schema + policy valid?}
V -->|no| R[Deterministic fallback]
V -->|yes| N[Conversation / allowlisted follow-up]
F --> D{Required measurements complete?}
D -->|no| W[Request missing evidence]
D -->|yes| O[ONNX specialist inference]
The orchestration contract permits only known modes and registered tools. The system reconciles Qwen output against exact evidence and never treats free-form generated prose as a model invocation.
- HealthAI Cardio 2.0 ·
heart_risk·healthai-cardio-v2.0.0— 13 structured inputs - HealthAI Glyco 2.0 ·
diabetes_risk·healthai-glyco-v2.0.0— 16 structured inputs - HealthAI Renal 2.0 ·
kidney_risk·healthai-renal-v2.0.0— 24 structured inputs - HealthAI Hepatic 2.0 ·
liver_risk·healthai-hepatic-v2.0.0— 10 structured inputs symptom_interview— bounded general-intake protocolwellness_guidance— non-diagnostic general information- HealthAI PulmoVision 1.0 ·
pneumonia_xray·healthai-pulmovision-v1.0.0— experimental pediatric benchmark route skin_image_triage— planned and deliberately unavailable until a suitable evaluated artifact exists
The registry returns capability status at runtime, so an unavailable artifact cannot silently become an active tool.
All shipped specialist artifacts are compact ONNX pipelines committed with machine-readable metadata. Training code lives in backend/training/, downloads the documented public datasets, and rebuilds each runtime artifact from source rather than relying on opaque serialized models.
| Research model | Dataset | Samples | Source/license |
|---|---|---|---|
| HealthAI Cardio 2.0 | UCI Heart Disease | 270 | DOI 10.24432/C57303, CC BY 4.0 |
| HealthAI Glyco 2.0 | UCI Early Stage Diabetes Risk Prediction | 520 | DOI 10.24432/C5VG8H, CC BY 4.0 |
| HealthAI Renal 2.0 | UCI Chronic Kidney Disease | 400 | DOI 10.24432/C5G020, CC BY 4.0 |
| HealthAI Hepatic 2.0 | UCI ILPD | 583 | DOI 10.24432/C5D02C, CC BY 4.0 |
| HealthAI PulmoVision 1.0 | MedMNIST PneumoniaMNIST | 5,856 | DOI 10.5281/zenodo.10519652, CC BY 4.0 |
The pneumonia downloader verifies the published MD5 checksum and preserves the official split. Review backend/training/README.md for complete feature mappings and commands.
flowchart LR
D[UCI source] --> C[Schema cleaning]
C --> S[Stratified split\n60% train · 20% validation · 20% test]
S --> P[Median imputation\n+ standard scaling]
P --> L[Regularized logistic regression]
P --> R[RBF SVM]
L --> K[Validation ranking]
R --> K
K --> T[Threshold selection\ntarget sensitivity ≥ 0.90 when feasible]
T --> H[One frozen test evaluation]
H --> O[ONNX + metadata]
- Fixed seed:
44 - Candidate ranking: higher AUROC and AUPRC, then lower Brier score
- Threshold selection: validation set only
- Final metrics: frozen test split only
- Runtime artifact: preprocessing and estimator exported together to ONNX
Train everything with:
make train| Research model and release | Test n | AUROC | AUPRC | Sensitivity | Specificity | Brier |
|---|---|---|---|---|---|---|
HealthAI Glyco 2.0healthai-glyco-v2.0.0 |
104 | 0.9965 | 0.9978 | 0.9375 | 0.9750 | 0.0272 |
HealthAI Cardio 2.0healthai-cardio-v2.0.0 |
54 | 0.8792 | 0.8376 | 1.0000 | 0.3667 | 0.1408 |
HealthAI Renal 2.0healthai-renal-v2.0.0 |
80 | 1.0000 | 1.0000 | 0.9000 | 1.0000 | 0.0118 |
HealthAI Hepatic 2.0healthai-hepatic-v2.0.0 |
117 | 0.7548 | 0.8880 | 0.8675 | 0.3824 | 0.2022 |
HealthAI PulmoVision 1.0healthai-pulmovision-v1.0.0 |
624 | 0.9267 | 0.9264 | 0.9359 | 0.7949 | 0.1029 |
Caution
These are small public benchmark results, not prospective or external clinical validation. Heart and liver specificity is currently weak. The perfect kidney discrimination may reflect dataset/source structure and must not be generalized. PneumoniaMNIST is a pediatric 28×28 benchmark and is not a production radiology model.
HealthAI Reasoner 1.0 is powered by Qwen3-0.6B Q8. The repository contains an MLX LoRA experiment for the next compatible Reasoner release. Fine-tuning is intentionally isolated from API dependencies and is treated as a promotion candidate, never an automatic replacement.
Teach the Qwen3-0.6B base model to emit evidence-bound JSON for a future HealthAI Reasoner 1.1 candidate:
- conversation responses;
- registered tool selection;
- exact field extraction;
- allowlisted symptom questions;
- safe fallback modes.
It is not trained to diagnose disease or replace the specialist ONNX models.
| Setting | Value |
|---|---|
| Base model | Qwen/Qwen3-0.6B |
| Method | LoRA on query/value projections |
| Rank / scale / dropout | 8 / 16 / 0.05 |
| Layers | 12 |
| Sequence length | 1,024 |
| Batch / gradient accumulation | 1 / 4 |
| Learning rate | 1e-5 |
| Iterations | 250 |
| Prompt loss | Masked |
| Seed | 44 |
make install-qwen-training
make build-qwen-data
make finetune-qwen
make eval-qwen-adapterCurrent versioned data contains 84 training, 3 validation, and 2 test conversations derived from 17 authored examples. That scale is suitable for demonstrating a controlled experiment, not for claiming broad medical reasoning.
- Untuned Qwen direct routing: 30% on the focused regression set.
- Hybrid system: 100% on the same 10 scenarios, with a 100% policy pass rate.
- First 55-example adapter: 60%, but failed contract/evidence checks—rejected.
- Second 75-example adapter: 50% direct, with 100% contract/evidence compliance—still not promoted.
The adapters remain ignored because they are generated experiments. The production design keeps the deterministic hybrid until a candidate improves task accuracy without regressing safety, evidence fidelity, or latency. See backend/finetuning/README.md for the experiment log.
AI-disease-prediction/
├── backend/
│ ├── app/ # API, safety, routing, tools, reports, voice
│ ├── artifacts/ # Versioned ONNX models + metadata
│ ├── evaluation/ # Agent and Qwen regression scenarios
│ ├── finetuning/ # MLX LoRA data, config, evaluation
│ ├── tests/ # API, safety, routing, reports, security
│ └── training/ # Reproducible dataset-to-ONNX pipelines
├── frontend/
│ ├── public/ # Brand assets
│ └── src/ # TypeScript application and design system
├── infrastructure/
│ ├── template.yaml # Serverless application
│ └── budget.template.yaml
├── Makefile
└── pyproject.toml
The repository contains one coherent architecture and one AWS deployment path. Generated caches, local environments, experimental adapters, compiled frontend assets, and user-provided media are excluded from version control. CI is intentionally not configured; the documented quality gates run locally before a reviewed push.
- Python 3.12
- Node.js 20.19 or newer
- Docker Desktop (only for local Qwen)
- AWS SAM CLI (only for infrastructure validation/deployment)
make install
make test
make evalRun the API and frontend in separate terminals:
make dev-api
make dev-web- UI:
http://127.0.0.1:5173/#assessment - API:
http://127.0.0.1:8000 - Interactive API docs:
http://127.0.0.1:8000/docs
make install-voice
make dev-api-voiceThe model cache is stored in ignored .moonshine-cache/ and audio stays on the machine running the API.
make install-qwen
make dev-api-agentic
make eval-qwenDocker Model Runner exposes the private local inference endpoint. If it is unavailable, the hybrid router fails over to deterministic rules.
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/health |
Service, voice, and orchestrator status |
GET |
/api/v1/models |
Versioned specialist-model catalog |
GET |
/api/v1/tools |
Full tool registry and safety posture |
POST |
/api/v1/triage/start |
Start encrypted conversational state |
POST |
/api/v1/triage/message |
Continue a bounded intake session |
POST |
/api/v1/assessments/{condition}/predict |
Validated ONNX inference |
POST |
/api/v1/images/pneumonia/predict |
Experimental image baseline |
POST |
/api/v1/voice/transcribe |
HealthAI Voice 1.0 private transcription |
POST |
/api/v1/reports/pdf |
Generate a branded PDF |
POST |
/api/v1/reports/xlsx |
Generate a structured workbook |
All settings use the HEALTHAI_ prefix.
| Variable | Default | Purpose |
|---|---|---|
HEALTHAI_ENVIRONMENT |
development |
Controls secure production behavior |
HEALTHAI_STATE_SECRET |
development-only value | AES-GCM state and quota derivation secret; use 32+ random characters in production |
HEALTHAI_ALLOWED_ORIGINS |
local origins | Comma-separated CORS allowlist |
HEALTHAI_ORCHESTRATOR_BACKEND |
auto |
auto, qwen, or rules routing posture |
HEALTHAI_QWEN_LAMBDA_FUNCTION |
empty | Private Qwen Lambda name in AWS |
HEALTHAI_QWEN_BASE_URL |
local model runner | Local OpenAI-compatible model endpoint |
HEALTHAI_VOICE_ENABLED |
false |
Enables the voice route/runtime |
HEALTHAI_MOONSHINE_CACHE_DIR |
local cache | Moonshine model directory |
HEALTHAI_QUOTA_TABLE |
empty | DynamoDB rate-limit table in AWS |
Never commit a production state secret. Reuse the same secret across deployments if existing encrypted browser sessions should remain valid.
- No OpenAI, Anthropic, hosted speech, or other third-party AI key is required.
- Browser chat history is local and user-clearable.
- Server-side conversation context is encrypted, authenticated, short-lived, and held by the browser.
- DynamoDB receives hashed quota keys and counters only.
- Uploaded audio and images are size/type bounded.
- Assessment payloads reject unknown fields.
- Model calls are constrained by a typed registry and policy validator.
- Emergency routing runs before Qwen or ONNX inference.
- Production cookies are HttpOnly, Secure, and SameSite=Lax.
Anonymous requests are protected at three application scopes. The signed browser cookie gives a useful visitor a generous allowance, a separate hashed source-IP counter prevents cookie deletion or user-agent rotation from resetting the quota, and a global daily ceiling bounds total research-infrastructure consumption. API Gateway additionally applies a 3 requests/second steady-state limit with a burst of 10 on the Lambda proxy route, and a 1 request/second limit with a burst of 2 on voice transcription. Gateway throttling is best-effort and happens before Lambda invocation.
Default visitor quotas:
| Route group | Short window | Daily visitor limit | Daily IP limit | Global daily capacity |
|---|---|---|---|---|
| Content-free reasoner warm-up | — | 6 | 60 | 300 |
| Chat / triage | 20/minute | 200 | 500 | 1,000 |
| Voice transcription | 4/10 minutes | 20 | 60 | 100 |
| Pneumonia image | 10/10 minutes | 50 | 150 | 300 |
| Specialist prediction | 20/5 minutes | 200 | 600 | 2,000 |
| PDF/XLSX reports | 10/10 minutes | 50 | 150 | 500 |
Only HMAC-derived identifiers, window counters and TTL values enter DynamoDB; raw IP addresses, user-agent strings and clinical content do not. This is intentionally an anonymous research-demo policy, not an authentication or authorization system. A public product with materially higher traffic should place CloudFront and AWS WAF in front of the HTTP API or migrate to an API type that supports direct WAF association.
Production currently runs in eu-north-1 at:
https://healthai.sauravmukherjee.in/
The design uses on-demand and scale-to-zero resources for a low-traffic portfolio workload. It avoids an always-on GPU and targets a USD 20/month guardrail, although a Budget alert is not a hard spending cap.
make test
make validate-infra
make build-web
sam build --template-file infrastructure/template.yamlOn Apple Silicon, build Lambda container images for linux/amd64 because the functions are x86_64.
export HEALTHAI_STATE_SECRET="$(openssl rand -hex 32)"
sam deploy \
--template-file .aws-sam/build/template.yaml \
--stack-name healthai-production \
--region eu-north-1 \
--profile healthai-eu-north-1 \
--capabilities CAPABILITY_IAM \
--resolve-image-repos \
--resolve-s3 \
--parameter-overrides \
Environment=production \
StateSecret="$HEALTHAI_STATE_SECRET" \
AllowedOrigin='*'AWS Budgets is deployed from us-east-1:
sam deploy \
--template-file infrastructure/budget.template.yaml \
--stack-name healthai-production-budget \
--region us-east-1 \
--profile healthai-eu-north-1 \
--parameter-overrides \
MonthlyBudgetUsd=20 \
BudgetEmail=you@example.comThe template sends a forecast alert at 60% and an actual-spend alert at 90%. Use a real monitored address when deploying.
curl -fsS https://healthai.sauravmukherjee.in/health
curl -fsS https://healthai.sauravmukherjee.in/api/v1/toolsmake test # Ruff + Pytest + production frontend build
make eval # deterministic/hybrid agent scenarios
make eval-qwen # live Qwen contract and routing scenarios
make eval-qwen-adapter # candidate LoRA promotion evaluation
make validate-infra # SAM/CloudFormation lintingBackend tests cover API contracts, safety precedence, routing, repetition prevention, model validation, reports, token security, and rate limiting. Evaluation scenarios are deliberately separate from unit tests so model behavior can be measured rather than asserted through mocked prose.
The primary cost strategy is no idle compute:
- API, HealthAI Voice 1.0, and HealthAI Reasoner 1.0 Lambdas scale to zero.
- Their underlying Qwen3-0.6B Q8 and Moonshine 34M models fit CPU-oriented functions; no continuously running GPU is required.
- DynamoDB is on-demand.
- Temporary S3 objects expire after one day.
- CloudWatch retention is bounded.
- A monthly AWS Budget provides early warning.
Cold starts are the trade-off. Qwen can spend roughly 25 seconds loading its GGUF on a cold invocation, while warm requests are faster. The landing page therefore requests a content-free asynchronous initialization shortly after first paint and retries a failed mobile request when the page becomes visible again. It creates no conversation state, consumes no chat quota, is deduplicated only after AWS accepts it, and has separate visitor/IP/global abuse limits. Immediate deterministic paths keep greetings, wellness answers, registered tools, and clear scope probes responsive even while Qwen is loading; ambiguous requests fall back after a bounded 12-second wait. A real user-facing service would benchmark provisioned concurrency, quantization, streaming, and stricter latency SLOs.
- Expand HealthAI Reasoner fine-tuning data and maintain a genuinely held-out adversarial set.
- Add external, subgroup, calibration, and drift validation before any clinical claim.
- Improve heart/liver specificity and investigate kidney dataset leakage/source effects.
- Replace the PneumoniaMNIST demonstration with an appropriately governed imaging pipeline—or remove it from a clinical-facing product.
- Extend HealthAI Voice beyond the current English Moonshine base model.
- Add authenticated longitudinal records only with explicit consent, encryption, retention policy, and regulatory review.
- Add WAF/API Gateway usage plans if public traffic grows.
- Validate accessibility with automated and assistive-technology testing.
- Add a reviewed CI workflow only when repository secrets and branch protections are intentionally configured.
Do not use this software to make a diagnosis, determine treatment, assess an emergency, or process identifiable patient data. Dataset licenses permit research reuse, but deployment in a healthcare context requires independent clinical validation, privacy/security review, bias analysis, monitoring, incident response, and compliance work appropriate to the jurisdiction.
HealthAI Agent Lab is designed, developed, and maintained by Saurav Mukherjee. Project questions, responsible-disclosure reports, and collaboration enquiries can be sent to SauravMukherjee928@gmail.com.
Copyright © 2026 Saurav Mukherjee. All rights reserved.
This repository does not currently grant an open-source software license. Its public availability is intended for portfolio review, research transparency, and technical evaluation; it does not by itself grant permission to copy, modify, redistribute, sublicense, or commercially use the project. Contact the owner if you need permission beyond viewing or evaluating the repository.
Third-party model weights, datasets, libraries, icons, and other dependencies remain governed by their respective licenses and terms. Their inclusion or attribution does not change the licensing status of the original HealthAI Agent Lab source code.
HealthAI Agent Lab
Open-model orchestration · deterministic safety · reproducible ML · cost-aware AWS
