Metadata-Version: 2.5
Name: aicliniq
Version: 0.1.0-alpha
Summary: Open-source AI agent framework for healthcare and life sciences
Project-URL: Homepage, https://aicliniq.org
Project-URL: Documentation, https://docs.aicliniq.org
Project-URL: Repository, https://github.com/kolasatheesh/aicliniq
Project-URL: Changelog, https://github.com/kolasatheesh/aicliniq/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/kolasatheesh/aicliniq/issues
Author: Satheesh Kola
Maintainer: Satheesh Kola
License: Apache-2.0
License-File: LICENSE
License-File: NOTICE
Keywords: agents,ai,clinical,drug-discovery,fhir,healthcare,hipaa,llm
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Requires-Python: >=3.11
Requires-Dist: anyio<5,>=4.3
Requires-Dist: httpx<1,>=0.27
Requires-Dist: pydantic-settings<3,>=2.2
Requires-Dist: pydantic<3,>=2.5
Requires-Dist: typing-extensions>=4.10
Provides-Extra: all
Requires-Dist: accelerate>=0.33; extra == 'all'
Requires-Dist: alembic<2,>=1.13; extra == 'all'
Requires-Dist: anthropic>=0.50; extra == 'all'
Requires-Dist: asyncpg>=0.29; extra == 'all'
Requires-Dist: bitsandbytes>=0.43; extra == 'all'
Requires-Dist: cookiecutter>=2.5; extra == 'all'
Requires-Dist: cryptography>=42.0; extra == 'all'
Requires-Dist: datasets>=2.18; extra == 'all'
Requires-Dist: fair-esm>=0.4; extra == 'all'
Requires-Dist: fastapi<1,>=0.111; extra == 'all'
Requires-Dist: faster-whisper>=1.0; extra == 'all'
Requires-Dist: google-genai>=1.0; extra == 'all'
Requires-Dist: groq>=0.9; extra == 'all'
Requires-Dist: langfuse>=2.0; extra == 'all'
Requires-Dist: lxml>=5.0; extra == 'all'
Requires-Dist: matplotlib>=3.8; extra == 'all'
Requires-Dist: nltk>=3.8; extra == 'all'
Requires-Dist: open-clip-torch>=2.23; extra == 'all'
Requires-Dist: openai>=1.35; extra == 'all'
Requires-Dist: opentelemetry-api>=1.20; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'all'
Requires-Dist: passlib[bcrypt]>=1.7; extra == 'all'
Requires-Dist: peft>=0.12; extra == 'all'
Requires-Dist: pgvector>=0.3; extra == 'all'
Requires-Dist: pillow>=10.0; extra == 'all'
Requires-Dist: python-jose[cryptography]>=3.3; extra == 'all'
Requires-Dist: python-multipart>=0.0.9; extra == 'all'
Requires-Dist: rdkit-pypi; extra == 'all'
Requires-Dist: rich>=13.0; extra == 'all'
Requires-Dist: rouge-score>=0.1.2; extra == 'all'
Requires-Dist: sentence-transformers>=3.0; extra == 'all'
Requires-Dist: shap>=0.45; extra == 'all'
Requires-Dist: slowapi>=0.1.9; extra == 'all'
Requires-Dist: spacy>=3.7; extra == 'all'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'all'
Requires-Dist: torch>=2.2; extra == 'all'
Requires-Dist: torch>=2.3; extra == 'all'
Requires-Dist: transformers>=4.35; extra == 'all'
Requires-Dist: transformers>=4.44; extra == 'all'
Requires-Dist: typer>=0.9; extra == 'all'
Requires-Dist: uvicorn[standard]>=0.30; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.50; extra == 'anthropic'
Provides-Extra: bench
Requires-Dist: docker>=7.0; extra == 'bench'
Provides-Extra: biogpt
Requires-Dist: torch>=2.2; extra == 'biogpt'
Requires-Dist: transformers>=4.35; extra == 'biogpt'
Provides-Extra: biomedclip
Requires-Dist: open-clip-torch>=2.23; extra == 'biomedclip'
Provides-Extra: chem
Requires-Dist: rdkit-pypi; extra == 'chem'
Provides-Extra: cli
Requires-Dist: cookiecutter>=2.5; extra == 'cli'
Requires-Dist: rich>=13.0; extra == 'cli'
Requires-Dist: typer>=0.9; extra == 'cli'
Provides-Extra: clinical
Requires-Dist: cryptography>=42.0; extra == 'clinical'
Requires-Dist: groq>=0.9; extra == 'clinical'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical'
Requires-Dist: spacy>=3.7; extra == 'clinical'
Provides-Extra: clinical-cardiology
Requires-Dist: cryptography>=42.0; extra == 'clinical-cardiology'
Requires-Dist: groq>=0.9; extra == 'clinical-cardiology'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-cardiology'
Requires-Dist: spacy>=3.7; extra == 'clinical-cardiology'
Provides-Extra: clinical-emergency-icu
Requires-Dist: cryptography>=42.0; extra == 'clinical-emergency-icu'
Requires-Dist: groq>=0.9; extra == 'clinical-emergency-icu'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-emergency-icu'
Requires-Dist: spacy>=3.7; extra == 'clinical-emergency-icu'
Provides-Extra: clinical-genomics
Requires-Dist: cryptography>=42.0; extra == 'clinical-genomics'
Requires-Dist: fair-esm>=0.4; extra == 'clinical-genomics'
Requires-Dist: groq>=0.9; extra == 'clinical-genomics'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-genomics'
Requires-Dist: spacy>=3.7; extra == 'clinical-genomics'
Requires-Dist: torch>=2.2; extra == 'clinical-genomics'
Provides-Extra: clinical-oncology
Requires-Dist: cryptography>=42.0; extra == 'clinical-oncology'
Requires-Dist: fair-esm>=0.4; extra == 'clinical-oncology'
Requires-Dist: groq>=0.9; extra == 'clinical-oncology'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-oncology'
Requires-Dist: spacy>=3.7; extra == 'clinical-oncology'
Requires-Dist: torch>=2.2; extra == 'clinical-oncology'
Provides-Extra: clinical-pathology
Requires-Dist: accelerate>=0.33; extra == 'clinical-pathology'
Requires-Dist: cryptography>=42.0; extra == 'clinical-pathology'
Requires-Dist: groq>=0.9; extra == 'clinical-pathology'
Requires-Dist: pillow>=10.0; extra == 'clinical-pathology'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-pathology'
Requires-Dist: spacy>=3.7; extra == 'clinical-pathology'
Requires-Dist: timm>=1.0; extra == 'clinical-pathology'
Requires-Dist: torch>=2.3; extra == 'clinical-pathology'
Requires-Dist: transformers>=4.44; extra == 'clinical-pathology'
Provides-Extra: clinical-primary-care
Requires-Dist: cryptography>=42.0; extra == 'clinical-primary-care'
Requires-Dist: groq>=0.9; extra == 'clinical-primary-care'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-primary-care'
Requires-Dist: spacy>=3.7; extra == 'clinical-primary-care'
Provides-Extra: clinical-radiology
Requires-Dist: accelerate>=0.33; extra == 'clinical-radiology'
Requires-Dist: cryptography>=42.0; extra == 'clinical-radiology'
Requires-Dist: groq>=0.9; extra == 'clinical-radiology'
Requires-Dist: pillow>=10.0; extra == 'clinical-radiology'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-radiology'
Requires-Dist: spacy>=3.7; extra == 'clinical-radiology'
Requires-Dist: torch>=2.3; extra == 'clinical-radiology'
Requires-Dist: transformers>=4.44; extra == 'clinical-radiology'
Provides-Extra: clinical-surgery
Requires-Dist: cryptography>=42.0; extra == 'clinical-surgery'
Requires-Dist: groq>=0.9; extra == 'clinical-surgery'
Requires-Dist: sentence-transformers>=3.0; extra == 'clinical-surgery'
Requires-Dist: spacy>=3.7; extra == 'clinical-surgery'
Provides-Extra: education
Requires-Dist: groq>=0.9; extra == 'education'
Requires-Dist: sentence-transformers>=3.0; extra == 'education'
Provides-Extra: embedding
Requires-Dist: sentence-transformers>=3.0; extra == 'embedding'
Provides-Extra: eval
Requires-Dist: nltk>=3.8; extra == 'eval'
Requires-Dist: rouge-score>=0.1.2; extra == 'eval'
Provides-Extra: explain
Requires-Dist: matplotlib>=3.8; extra == 'explain'
Requires-Dist: shap>=0.45; extra == 'explain'
Provides-Extra: federated
Requires-Dist: flwr[simulation]>=1.8; extra == 'federated'
Requires-Dist: opacus>=1.4; extra == 'federated'
Provides-Extra: finetune
Requires-Dist: bitsandbytes>=0.43; extra == 'finetune'
Requires-Dist: datasets>=2.18; extra == 'finetune'
Requires-Dist: peft>=0.12; extra == 'finetune'
Provides-Extra: gemini
Requires-Dist: google-genai>=1.0; extra == 'gemini'
Provides-Extra: genomics
Requires-Dist: fair-esm>=0.4; extra == 'genomics'
Requires-Dist: torch>=2.2; extra == 'genomics'
Provides-Extra: groq
Requires-Dist: groq>=0.9; extra == 'groq'
Provides-Extra: health-systems
Requires-Dist: asyncpg>=0.29; extra == 'health-systems'
Requires-Dist: cryptography>=42.0; extra == 'health-systems'
Requires-Dist: groq>=0.9; extra == 'health-systems'
Requires-Dist: lxml>=5.0; extra == 'health-systems'
Requires-Dist: pgvector>=0.3; extra == 'health-systems'
Requires-Dist: sentence-transformers>=3.0; extra == 'health-systems'
Requires-Dist: spacy>=3.7; extra == 'health-systems'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'health-systems'
Provides-Extra: health-systems-compliance
Requires-Dist: asyncpg>=0.29; extra == 'health-systems-compliance'
Requires-Dist: cryptography>=42.0; extra == 'health-systems-compliance'
Requires-Dist: groq>=0.9; extra == 'health-systems-compliance'
Requires-Dist: lxml>=5.0; extra == 'health-systems-compliance'
Requires-Dist: pgvector>=0.3; extra == 'health-systems-compliance'
Requires-Dist: sentence-transformers>=3.0; extra == 'health-systems-compliance'
Requires-Dist: spacy>=3.7; extra == 'health-systems-compliance'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'health-systems-compliance'
Provides-Extra: health-systems-digital-health
Requires-Dist: asyncpg>=0.29; extra == 'health-systems-digital-health'
Requires-Dist: cryptography>=42.0; extra == 'health-systems-digital-health'
Requires-Dist: faster-whisper>=1.0; extra == 'health-systems-digital-health'
Requires-Dist: groq>=0.9; extra == 'health-systems-digital-health'
Requires-Dist: lxml>=5.0; extra == 'health-systems-digital-health'
Requires-Dist: noisereduce>=3.0; extra == 'health-systems-digital-health'
Requires-Dist: pgvector>=0.3; extra == 'health-systems-digital-health'
Requires-Dist: sentence-transformers>=3.0; extra == 'health-systems-digital-health'
Requires-Dist: sounddevice>=0.4; extra == 'health-systems-digital-health'
Requires-Dist: spacy>=3.7; extra == 'health-systems-digital-health'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'health-systems-digital-health'
Provides-Extra: health-systems-ops-admin
Requires-Dist: asyncpg>=0.29; extra == 'health-systems-ops-admin'
Requires-Dist: cryptography>=42.0; extra == 'health-systems-ops-admin'
Requires-Dist: groq>=0.9; extra == 'health-systems-ops-admin'
Requires-Dist: lxml>=5.0; extra == 'health-systems-ops-admin'
Requires-Dist: pgvector>=0.3; extra == 'health-systems-ops-admin'
Requires-Dist: sentence-transformers>=3.0; extra == 'health-systems-ops-admin'
Requires-Dist: spacy>=3.7; extra == 'health-systems-ops-admin'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'health-systems-ops-admin'
Provides-Extra: health-systems-population-health
Requires-Dist: asyncpg>=0.29; extra == 'health-systems-population-health'
Requires-Dist: cryptography>=42.0; extra == 'health-systems-population-health'
Requires-Dist: groq>=0.9; extra == 'health-systems-population-health'
Requires-Dist: lxml>=5.0; extra == 'health-systems-population-health'
Requires-Dist: pgvector>=0.3; extra == 'health-systems-population-health'
Requires-Dist: sentence-transformers>=3.0; extra == 'health-systems-population-health'
Requires-Dist: spacy>=3.7; extra == 'health-systems-population-health'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'health-systems-population-health'
Provides-Extra: interop
Requires-Dist: lxml>=5.0; extra == 'interop'
Provides-Extra: medgemma
Requires-Dist: accelerate>=0.33; extra == 'medgemma'
Requires-Dist: pillow>=10.0; extra == 'medgemma'
Requires-Dist: torch>=2.3; extra == 'medgemma'
Requires-Dist: transformers>=4.44; extra == 'medgemma'
Provides-Extra: observability
Requires-Dist: langfuse>=2.0; extra == 'observability'
Requires-Dist: opentelemetry-api>=1.20; extra == 'observability'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'observability'
Provides-Extra: ollama
Provides-Extra: openai
Requires-Dist: openai>=1.35; extra == 'openai'
Provides-Extra: pathchat
Requires-Dist: accelerate>=0.33; extra == 'pathchat'
Requires-Dist: pillow>=10.0; extra == 'pathchat'
Requires-Dist: timm>=1.0; extra == 'pathchat'
Requires-Dist: torch>=2.3; extra == 'pathchat'
Requires-Dist: transformers>=4.44; extra == 'pathchat'
Provides-Extra: pharma
Requires-Dist: cryptography>=42.0; extra == 'pharma'
Requires-Dist: groq>=0.9; extra == 'pharma'
Requires-Dist: rdkit-pypi; extra == 'pharma'
Requires-Dist: sentence-transformers>=3.0; extra == 'pharma'
Requires-Dist: spacy>=3.7; extra == 'pharma'
Provides-Extra: pharma-clinical-trials
Requires-Dist: cryptography>=42.0; extra == 'pharma-clinical-trials'
Requires-Dist: groq>=0.9; extra == 'pharma-clinical-trials'
Requires-Dist: lxml>=5.0; extra == 'pharma-clinical-trials'
Requires-Dist: rdkit-pypi; extra == 'pharma-clinical-trials'
Requires-Dist: sentence-transformers>=3.0; extra == 'pharma-clinical-trials'
Requires-Dist: spacy>=3.7; extra == 'pharma-clinical-trials'
Provides-Extra: pharma-drug-discovery
Requires-Dist: cryptography>=42.0; extra == 'pharma-drug-discovery'
Requires-Dist: fair-esm>=0.4; extra == 'pharma-drug-discovery'
Requires-Dist: groq>=0.9; extra == 'pharma-drug-discovery'
Requires-Dist: rdkit-pypi; extra == 'pharma-drug-discovery'
Requires-Dist: sentence-transformers>=3.0; extra == 'pharma-drug-discovery'
Requires-Dist: spacy>=3.7; extra == 'pharma-drug-discovery'
Requires-Dist: torch>=2.2; extra == 'pharma-drug-discovery'
Provides-Extra: pharma-med-rep-training
Requires-Dist: cryptography>=42.0; extra == 'pharma-med-rep-training'
Requires-Dist: groq>=0.9; extra == 'pharma-med-rep-training'
Requires-Dist: rdkit-pypi; extra == 'pharma-med-rep-training'
Requires-Dist: sentence-transformers>=3.0; extra == 'pharma-med-rep-training'
Requires-Dist: spacy>=3.7; extra == 'pharma-med-rep-training'
Provides-Extra: pharma-ops
Requires-Dist: cryptography>=42.0; extra == 'pharma-ops'
Requires-Dist: groq>=0.9; extra == 'pharma-ops'
Requires-Dist: rdkit-pypi; extra == 'pharma-ops'
Requires-Dist: sentence-transformers>=3.0; extra == 'pharma-ops'
Requires-Dist: spacy>=3.7; extra == 'pharma-ops'
Provides-Extra: safety
Requires-Dist: cryptography>=42.0; extra == 'safety'
Requires-Dist: spacy>=3.7; extra == 'safety'
Provides-Extra: server
Requires-Dist: alembic<2,>=1.13; extra == 'server'
Requires-Dist: asyncpg>=0.29; extra == 'server'
Requires-Dist: fastapi<1,>=0.111; extra == 'server'
Requires-Dist: passlib[bcrypt]>=1.7; extra == 'server'
Requires-Dist: pgvector>=0.3; extra == 'server'
Requires-Dist: python-jose[cryptography]>=3.3; extra == 'server'
Requires-Dist: python-multipart>=0.0.9; extra == 'server'
Requires-Dist: slowapi>=0.1.9; extra == 'server'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'server'
Requires-Dist: uvicorn[standard]>=0.30; extra == 'server'
Provides-Extra: speech
Requires-Dist: faster-whisper>=1.0; extra == 'speech'
Provides-Extra: sql
Requires-Dist: asyncpg>=0.29; extra == 'sql'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'sql'
Provides-Extra: vector
Requires-Dist: pgvector>=0.3; extra == 'vector'
Requires-Dist: sentence-transformers>=3.0; extra == 'vector'
Provides-Extra: vlm
Requires-Dist: accelerate>=0.33; extra == 'vlm'
Requires-Dist: pillow>=10.0; extra == 'vlm'
Requires-Dist: torch>=2.3; extra == 'vlm'
Requires-Dist: transformers>=4.44; extra == 'vlm'
Provides-Extra: voice
Requires-Dist: faster-whisper>=1.0; extra == 'voice'
Requires-Dist: noisereduce>=3.0; extra == 'voice'
Requires-Dist: sounddevice>=0.4; extra == 'voice'
Provides-Extra: voice-all
Requires-Dist: daily-python>=0.11; extra == 'voice-all'
Requires-Dist: deepfilternet>=0.5; extra == 'voice-all'
Requires-Dist: faster-whisper>=1.0; extra == 'voice-all'
Requires-Dist: livekit-agents>=1.0; extra == 'voice-all'
Requires-Dist: livekit-api>=0.7; extra == 'voice-all'
Requires-Dist: livekit>=0.17; extra == 'voice-all'
Requires-Dist: noisereduce>=3.0; extra == 'voice-all'
Requires-Dist: pipecat-ai>=0.0.40; extra == 'voice-all'
Requires-Dist: pyannote-audio>=3.1; extra == 'voice-all'
Requires-Dist: sounddevice>=0.4; extra == 'voice-all'
Requires-Dist: torch>=2.3; extra == 'voice-all'
Provides-Extra: voice-daily
Requires-Dist: daily-python>=0.11; extra == 'voice-daily'
Provides-Extra: voice-diarize
Requires-Dist: pyannote-audio>=3.1; extra == 'voice-diarize'
Requires-Dist: torch>=2.3; extra == 'voice-diarize'
Provides-Extra: voice-livekit
Requires-Dist: livekit-agents>=1.0; extra == 'voice-livekit'
Requires-Dist: livekit-api>=0.7; extra == 'voice-livekit'
Requires-Dist: livekit>=0.17; extra == 'voice-livekit'
Provides-Extra: voice-livekit-full
Requires-Dist: livekit-agents>=1.0; extra == 'voice-livekit-full'
Requires-Dist: livekit-api>=0.7; extra == 'voice-livekit-full'
Requires-Dist: livekit-plugins-cartesia>=0.4; extra == 'voice-livekit-full'
Requires-Dist: livekit-plugins-deepgram>=0.7; extra == 'voice-livekit-full'
Requires-Dist: livekit-plugins-elevenlabs>=0.4; extra == 'voice-livekit-full'
Requires-Dist: livekit-plugins-openai>=0.7; extra == 'voice-livekit-full'
Requires-Dist: livekit-plugins-silero>=0.7; extra == 'voice-livekit-full'
Requires-Dist: livekit>=0.17; extra == 'voice-livekit-full'
Provides-Extra: voice-noise
Requires-Dist: deepfilternet>=0.5; extra == 'voice-noise'
Requires-Dist: noisereduce>=3.0; extra == 'voice-noise'
Provides-Extra: voice-pipecat
Requires-Dist: pipecat-ai>=0.0.40; extra == 'voice-pipecat'
Provides-Extra: voice-pipecat-full
Requires-Dist: pipecat-ai>=0.0.40; extra == 'voice-pipecat-full'
Requires-Dist: pipecat-ai[cartesia,daily,deepgram,openai,silero]>=0.0.40; extra == 'voice-pipecat-full'
Provides-Extra: voice-videosdk
Requires-Dist: videosdk>=0.1; extra == 'voice-videosdk'
Description-Content-Type: text/markdown

# AICliniq

> **The open-source Python framework for building healthcare AI applications.**  
> Like Django is to web apps, like HuggingFace is to ML models, AICliniq is to clinical AI.

Created and maintained by [Satheesh Kola](https://github.com/kolasatheesh).

[![CI](https://github.com/kolasatheesh/aicliniq/actions/workflows/ci.yml/badge.svg)](https://github.com/kolasatheesh/aicliniq/actions/workflows/ci.yml)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://python.org)
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)

**Install the framework. Use pre-built clinical agents. Build your healthcare AI product in days.**

---

## What is AICliniq?

AICliniq is a **5-layer framework** for healthcare AI:

```
Layer 1: Core Framework      → pip install aicliniq
Layer 2: Domain Packs         → pip install aicliniq[clinical]
Layer 3: Server               → aicliniq serve
Layer 4: Dashboard            → aicliniq ui
Layer 5: CLI Scaffolding      → aicliniq new my-app
```

**17 clinical domains** · **39 model providers** · **LLM Council** (multi-model consensus) · **MCP Server** · **HIPAA audit trail** · **FHIR R4** · **4 memory types** · **6 reasoning patterns** · **7 safety layers**

> **New to AICliniq?** Read **[ARCHITECTURE.md](ARCHITECTURE.md)** to understand the 5-layer framework model.

## Quick Start — 5 Levels

### Level 1: Beginner (3 lines, 5 minutes)

```bash
pip install aicliniq[groq]
export GROQ_API_KEY=gsk_...
```

```python
from aicliniq import quick
import asyncio

# Clinical scribe — transcript to SOAP note
note = asyncio.run(quick.scribe("Patient is a 45yo male with chest pain..."))
print(note.soap)

# Triage — symptoms to urgency classification
result = asyncio.run(quick.triage("chest pain, diaphoresis", age=62))
print(f"{result.urgency} ({result.score}/10)")

# Clinical Q&A — evidence-based answers
answer = asyncio.run(quick.ask("First-line treatment for HFrEF?"))
print(answer.answer)
```

### Level 2: Builder (use pre-built domain agents)

```bash
pip install aicliniq[clinical-radiology]
```

```python
from aicliniq.domains.clinical.radiology import RadiologyReportAgent
from aicliniq.providers.vlm.medgemma import MedGemmaProvider

agent = RadiologyReportAgent(vlm=MedGemmaProvider())
report = await agent.run(input=dicom_image)
print(report.findings)
```

### Level 3: Customizer (extend for your hospital)

```python
from aicliniq.domains.clinical.radiology import RadiologyReportAgent

class CityGeneralRadiologyAgent(RadiologyReportAgent):
    """Customized for City General Hospital"""
    REPORT_TEMPLATE = CITY_GENERAL_TEMPLATE
    
    async def on_critical_finding(self, finding):
        await notify_slack(finding)
```

### Level 4: Product Builder (scaffold full app)

```bash
aicliniq new my-radiology-saas --template radiology
cd my-radiology-saas
docker compose up -d
# Full FastAPI + React + Postgres app running
```

### Level 5: Enterprise (self-hosted platform)

```bash
git clone https://github.com/kolasatheesh/aicliniq
cd aicliniq
docker compose up -d
# Postgres (pgvector) + FastAPI server + React console, all on your own infrastructure
```

---

## I Want To...

| Goal | Start Here | Time |
|------|-----------|------|
| Try it in 3 lines | `quick.py` | 5 min |
| Build a radiology tool | `RadiologyReportAgent` | 1 hour |
| Build a pharma trainer | `MedRepTrainingAgent` | 2 hours |
| Build a patient portal | `PatientJourneyOrchestrator` | 1 day |
| Build something custom | `BaseAgent` + `AgentGraph` | 2 days |
| Deploy for a hospital | Docker + Server Layer | 1 week |

---

## What's Inside

### 17 Clinical Domains (34+ Agents)

| Domain | Agents |
|--------|--------|
| Cardiology | ECG Interpreter, Cardiac Risk, Zodiac Pipeline |
| Emergency/ICU | ED Triage, ICU Supervisor, Sepsis Management Graph |
| Surgery | Surgical Scribe, Pre-Op Assessment |
| Oncology | Tumor Board, Trial Matching |
| Radiology | Radiology Scribe, Imaging Triage |
| Primary Care | Intake, Follow-Up, Screening |
| Drug Discovery | Target ID, Molecule Design, ADMET, Repurposing |
| Pathology | Pathology Scribe, Biopsy Triage |
| Genomics | Variant Interpretation, Pharmacogenomics |
| + 8 more | Pharmacovigilance, Digital Health, Clinical Trials, Operations, Population Health, Med Education, Compliance, Pharma Ops |

### 39 Model Providers

**LLM (24)**: Groq, OpenAI, Anthropic, Gemini, DeepSeek, xAI/Grok, Cohere, Mistral, Fireworks, Together, HuggingFace, LiteLLM, Ollama, + 11 more
**VLM (3)**: MedGemma 1.5, PathChat+, BiomedCLIP
**Genomics (2)**: ESM-2 (proteins), Enformer (gene expression)
**Chemistry (2)**: ChemBERTa, RDKit
**Speech (6)**: Whisper, AssemblyAI, ElevenLabs, Google STT, Azure Speech, Kokoro

### Production Platform

| Layer | What it does |
|-------|-------------|
| **LLM Council** | Multi-model consensus with 4 modes, PHI-aware routing, confidence scoring |
| **Observability** | Langfuse + OpenTelemetry tracing, cost tracking, drift detection |
| **Safety (7 layers)** | PHI masking, AES-256 encryption, sandboxed execution, HITL, scope constraints, hallucination guard, audit trail |
| **Explainability** | SHAP, narrative explanations, attention visualization |
| **Memory (4 types)** | Working, episodic (learns from feedback), semantic (pgvector), procedural (clinical playbooks) |
| **Reasoning (6 patterns)** | ReAct, CoT, Plan-and-Execute, ReWOO, Swarm, Council |
| **Protocols** | MCP Server (plug into Claude/Cursor), A2A (cross-framework agents) |
| **Federated Learning** | Train across hospitals without sharing data (Flower + Opacus) |
| **Voice AI** | Ambient scribe, conversational voice agent |
| **Fine-Tuning** | LoRA/QLoRA trainer, data curator, model registry |
| **Interoperability** | SMART on FHIR, HL7 v2, CDA, SNOMED/LOINC/ICD-10 terminology |
| **Benchmarks** | MedAgentBench (Stanford), AgentDS Healthcare |

### Full-Stack Application

- **FastAPI server** — 11 API routers (50+ endpoints), JWT auth, multi-tenant, SSE streaming
- **React console** — 28 pages covering every clinical domain + LLM Council
- **PostgreSQL + pgvector** — semantic search and long-term memory
- **Docker Compose** — one-command deployment

## CLI

```bash
aicliniq serve          # Start API server
aicliniq ui             # Start React console
aicliniq agents         # List all 34+ agents
aicliniq domains        # List all 17 domains
aicliniq init           # Generate starter project
aicliniq sandbox        # Explore synthetic clinical data
aicliniq learn          # Interactive tutorials
aicliniq run scribe -i '{"transcript": "..."}'  # Run agent from CLI
aicliniq validate       # Check configuration
```

## v0.1.0-alpha Status

### Covered by Tests (1,800+ automated tests, LLM calls mocked)
- All template agents (Scribe, Triage, RAG-QA, Diagnostic Dialogue)
- LLM Council (25 tests: consensus, PHI routing, agreement scoring)
- Groq and OpenAI LLM providers
- PHI Masker, AES-256 encryption, sandbox, hallucination guard
- FHIR R4 resources (all 11 types), HL7 v2 parser, terminology service
- Observability (tracing, cost tracking, drift detection)
- Full server test suite (auth, agents, audit, compliance, multitenancy, FHIR)

### Scaffolded (Contributions Welcome)
- 22 of 39 providers (stubs with clear error messages — see [PROVIDERS.md](PROVIDERS.md))
- Federated learning, voice AI, fine-tuning (architecture ready)

## Documentation

Full documentation at [docs.aicliniq.org](https://docs.aicliniq.org): concepts, platform layers, guides, deployment, and persona-specific onboarding.

For the complete usage guide including how to run, build, package, and deploy: **[HOW_TO_USE.md](HOW_TO_USE.md)**

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). We especially welcome:
- New clinical domain packs
- Provider implementations
- Evaluation benchmarks
- Translations (10 languages supported)

## License

Copyright 2026 Satheesh Kola. Licensed under the [Apache License 2.0](LICENSE); see [NOTICE](NOTICE).
