Spaces:
Running
Running
File size: 8,568 Bytes
907b200 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | # AILIXIR Architecture & Component Documentation
Last updated: 2026-05-29
This document provides detailed diagrams and per-component explanations for the AILIXIR BackEnd. It is intended for developers and SREs onboarding onto the project and for inclusion in production runbooks.
Contents
--------
- System-level architecture (diagram + explanation)
- Data flow and request lifecycle
- Per-service component diagrams and responsibilities
- Laravel (orchestration)
- ADMET inference (FastAPI)
- Drug Repurposing (FastAPI)
- Chemical RAG (FAISS + RAG)
- Environment variables & configuration locations
- Deployment notes and scaling considerations
- Troubleshooting checkpoints
System-level architecture (Mermaid)
----------------------------------
```mermaid
flowchart LR
subgraph CLIENTS [Clients]
A[Web UI / Frontend]
B[External Integrations / APIs]
end
subgraph DOCKER_NET [Docker network: ailixir]
direction TB
LAR(Laravel API)
Q(Queue Worker)
MYSQL[(MariaDB)]
ADMET(ADMET Inference)
DRUG(Drug Repurposing)
CRAG(Chemical RAG)
end
A -->|HTTP| LAR
B -->|HTTP| LAR
LAR -->|DB| MYSQL
LAR -->|enqueue| Q
LAR -->|AI calls| ADMET
LAR -->|AI calls| DRUG
LAR -->|AI calls| CRAG
ADMET -->|models stored on disk| ADMET
CRAG -->|FAISS index on volume| CRAG
DRUG -->|model artifacts| DRUG
```
Explanation
-----------
- Clients (web, CLI, external services) interact with the `laravel` orchestration API. The Laravel layer handles authentication, request validation, and orchestration of multi-step workflows.
- Long-running tasks are delegated to the `queue` worker via Laravel's queue system. The queue worker communicates with the same Laravel codebase and uses the internal database for job bookkeeping.
- AI microservices are independent FastAPI services: `admet`, `drug-repurposing`, and `chemical-rag`. Laravel calls these services over the internal Docker network by service name.
- Persistent storage: `mysql` holds application state, users, and job metadata; AI services use container volumes for model artifacts and FAISS indexes.
Request lifecycle — typical screening flow
---------------------------------------
1. Client POSTs request to Laravel endpoint (e.g., run screening).
2. Laravel validates and creates a job record in MySQL and either performs synchronous work or enqueues a background job.
3. Background job triggers calls to AI services in parallel or sequence depending on pipeline stage:
- `drug-repurposing` to run virtual screening
- `admet` to score ADMET properties
- `chemical-rag` to fetch similar compounds or augment results
4. AI services return raw predictions to Laravel which aggregates results, persists summary, and notifies the client.
Per-service diagrams & responsibilities
--------------------------------------
1) Laravel (orchestration)
```mermaid
flowchart TD
In[HTTP Request]
Auth[Auth Layer]
Validate[Validation]
Controller[Controller]
DB[(MySQL)]
Queue[Queue Worker]
AIcalls[AI Service Calls]
Response[Response to Client]
In --> Auth --> Validate --> Controller --> DB
Controller -->|enqueue| Queue
Controller -->|direct call| AIcalls
AIcalls --> Response
```
Responsibilities:
- Authentication and authorization (API tokens, OAuth, or guards configured in `config/auth.php`).
- Centralized error handling and logging.
- Exposes REST endpoints used by UI and third-party clients; routes live under `routes/`.
- Job dispatching and scheduling; queue worker executes heavy pipelines.
Where to look in repository:
- `app/Http/Controllers/` — controllers and endpoints
- `routes/api.php` — API routes and versioning
- `jobs/` and `app/Jobs` — background job implementations
- `docker/laravel.env` — example env values
2) ADMET inference (FastAPI)
```mermaid
flowchart TD
Req[POST /predict]
Validate[SMILES Validation (RDKit)]
Feat[Featurization / Graph builder]
Models[MPNN Models (5 tasks)]
Aggregate[Aggregate predictions]
Return[JSON response]
Req --> Validate --> Feat --> Models --> Aggregate --> Return
```
Responsibilities:
- Load pre-trained MPNN models on startup (check `models/` inside service).
- Validate SMILES strings with RDKit and sanitize input.
- Support single and batch prediction endpoints; expose `/health` and `/docs`.
- CPU-optimized inference (no GPU assumed by default) and async handling via Uvicorn.
Where to look:
- `ai_apps/ADMIT/admet_inference/` — service code, `README.md`, `Dockerfile`, `requirements.txt`.
- Health and docs endpoints available at `http://<host>:<port>/health` and `/docs`.
3) Drug Repurposing (FastAPI)
```mermaid
flowchart TD
Req[POST /api/v1/screen]
Targets[OpenTargets integration]
Sequences[UniProt fetch]
Drugs[Drug library (TDC / fallback)]
Model[DeepPurpose MPNN-CNN]
Results[Rank & postprocess]
Return[JSON summary]
Req --> Targets --> Sequences --> Drugs --> Model --> Results --> Return
```
Responsibilities:
- Full screening pipeline: disease→targets→proteins→screening→results.
- Integrates external APIs (OpenTargets, UniProt) and TDC for drug libraries.
- Provides mock modes for offline testing (use env `USE_MOCK_MODEL` and `USE_MOCK_DRUGS`).
Where to look:
- `ai_apps/Drug Reporposing/` — service implementation, `docker/` folder, `requirements.txt`, `README.md` and helper scripts (`start.sh`, `start.bat`).
4) Chemical RAG (FAISS + LLM)
```mermaid
flowchart TD
Req[/search/full-rag]
Validate[SMILES validation]
FP[Morgan fingerprint / embedding]
FAISS[FAISS-IVF index lookup]
LLM[LLM explanation (optional)]
Format[Result formatting]
Return[JSON results]
Req --> Validate --> FP --> FAISS --> LLM --> Format --> Return
```
Responsibilities:
- High-performance similarity search for large compound libraries (1M+).
- Persistent FAISS index stored on volume (`chemical-rag-data`).
- Two endpoints: retrieval-only and full RAG (with LLM explanations); auto-detects and ingests compounds on first run.
Where to look:
- `ai_apps/chemical-rag-system/chemical-rag-system/` — engine, ingestion scripts, FAISS index code, `run_server.py`, and `README.md`.
Environment variables & configuration locations
---------------------------------------------
- Root compose: `docker-compose.yml` — service names, build contexts, ports, and env files.
- Laravel env template: `docker/laravel.env` — application and DB defaults.
- Each AI service: check `ai_apps/<service>/` for `requirements.txt`, `Dockerfile`, and service-specific config (e.g., `app/config.py`).
Production deployment notes
-------------------------
- Resource limits: `docker-compose.yml` contains `deploy.resources.limits` for AI services; tune these for production (memory, CPU).
- Secrets: move sensitive env values into secret managers (Kubernetes Secrets, Vault) in production.
- HTTPS: terminate TLS at a reverse proxy in front of `laravel` (Nginx/Load Balancer) and restrict internal-only exposure for AI services.
Scaling considerations
---------------------
- Horizontal scaling of AI services: deploy multiple replicas behind a load balancer. Ensure models are loaded on container start and center model size is within available RAM.
- FAISS index: store on a shared volume or use a dedicated retrieval service with replicated indices.
- Database: use managed RDS/MariaDB clusters or replicas for HA.
Troubleshooting checkpoints
--------------------------
- Service not healthy: `docker compose logs -f <service>` and `docker compose ps` to check ports and status.
- Model load errors: inspect service logs, confirm model files under `models/` or configured model path.
- FAISS ingestion slow: watch `chemical-rag` logs on first-run ingestion; ensure sufficient CPU and disk I/O.
Appendix — quick visual references
---------------------------------
- Root system diagram: see top of this file (Mermaid block).
- Per-service diagrams: each service section above contains its own Mermaid block.
Next steps I can implement for you
----------------------------------
1. Generate PNG/SVG exports of these Mermaid diagrams and add them to the repo docs folder.
2. Standardize and replace `ai_apps/*/README.md` with a consistent template including: purpose, architecture diagram, setup (Docker + local), env vars, run commands, API endpoints, troubleshooting.
3. Create `docs/` folder and add `QUICK_START.md`, per-service `.env.example`, and the generated diagrams.
Tell me which of the next steps you'd like me to do now (1, 2, 3), or if you want all of them performed.
|