AHU AI Platform — Serah Terima Teknis (Handoff)
Disusun: 2026-07-07 · Cakupan: chatbot, OCR (legacy + tidy), gateway, observatory, classifier
Kontrak kanonik: ahu-gpu-manager/docs/CONVENTIONS.md (v1.0) — jika ada konflik, file itu yang menang.
Model berpikir (baca ini dulu)
Platform ini terdiri dari beberapa engine (chatbot, OCR, classifier) yang semua trafik model/OCR-nya dilewatkan melalui satu Gateway. Gateway memegang kunci (API key) upstream, memaksakan kebijakan on-prem-only, dan menulis satu event audit untuk setiap panggilan ke sebuah Redis stream. Observatory membaca stream itu ke dalam database dan menampilkannya di dashboard untuk keperluan tata kelola (governance).
Satu titik kendali (Gateway) untuk semua panggilan AI → satu jejak audit (Observatory). Selebihnya adalah engine yang menancap ke titik itu.
Saat ini semuanya berjalan di satu mesin GPU ai-ahu (192.168.83.20). Target produksi memecahnya menjadi 5 zona kepercayaan (trust zone) — lihat ahu-gpu-manager/docs/deploy/2026-07-06-server-topology-and-specs.md.
Diagram 1 — Topologi deployment (zona kepercayaan)
public RAG Q&A"] end subgraph intz["Internal engines"] intbot["Internal chatbot · 'Tanya Data'
+ Admin console"] rag["RAG service
(ai-ahu-rag)"] pgv[("pgvector
knowledge vectors")] agents["Data agents (Agno)
data-agent · public_dash"] ocr["OCR · akta notaris"] ocrdb[("PostgreSQL
extraction + review")] reg[("Registry systems
SABH · PP · Apostille")] end subgraph ctrl["Control plane"] gw["GATEWAY
single AI egress + audit"] redis[("Redis
leases + ahu.ai.audit stream")] end subgraph gpuz["GPU host · 2x H100 (on-prem)"] llm["LLMs · vLLM
qwen-35b · cleanup-3b"] emb["Embeddings · TEI"] ocreng["OCR engines
PaddleOCR · Azure DI"] clf["Classifier · LayoutLMv3"] end subgraph govz["Governance"] ing["Observatory ingester"] tsdb[("TimescaleDB
audit store · hash-chain")] api["Query API"] dash["Dashboard"] end ext["Alibaba Cloud · DashScope
Qwen 397B big model
TEMPORARY — dev only, refused in prod"]:::ext users --> pubbot staff --> intbot ocruser -->|RBAC gated| ocr pubbot --> rag pubbot --> agents intbot --> agents intbot -. manage KB .-> rag rag --> pgv ocr --> ocrdb ocr --> reg pubbot --> gw rag --> gw agents --> gw ocr --> gw gw --> llm gw --> emb gw --> ocreng gw --> clf gw -. big-model synthesis (temporary) .-> ext gw ==>|audit event / call| redis redis ==> ing ing --> tsdb api --> tsdb dash --> api classDef ext fill:#fbeaea,stroke:#c0392b,color:#7b241c classDef actor fill:#eaf0fb,stroke:#334455
Panah solid = panggilan · panah putus-putus = admin/dormant/sementara · panah tebal ==> = jalur pipeline audit.
Panggilan model dari engine ke backend digambar melewati Gateway (kondisi yang dituju); beberapa "flip" engine masih dikunci oleh env var (lihat "Yang belum selesai"). Model besar untuk sintesis saat ini berjalan di luar on-prem, di Alibaba Cloud — pengaturan dev sementara yang akan ditolak di produksi; perlu rumah on-prem sebelum go-live.
Diagram 2 — Repo engine & cara mereka berkomunikasi
+ orchestrator (in-process)"] iw["internal-web
Tanya Data + Admin"] pa["public-agent (Agno)"] ia["internal-agent (Agno)"] end rag["repo: ai-ahu-rag
Doc-RAG service"] pgv[("pgvector")] subgraph ocrrepo["repo: ahu-ocr-akta-notaris — ONE codebase, 2 worktrees"] direction TB ocrlegacy["legacy branch
no gateway wiring"] ocrtidy["tidyup branch
gateway client (dormant)"] end clf["repo: ahu-doc-classifier"] gw["repo: ahu-gpu-manager
GATEWAY (single AI egress)"] pw -->|/search| rag pw -->|/runs| pa iw -->|/runs| ia iw -. manage KB .-> rag rag --> pgv pw --> gw pa --> gw ia --> gw rag -->|embeddings| gw ocrtidy -->|OCR + LLM jobs| gw ocrtidy -->|/classify| clf ocrlegacy -->|direct today| clf
Chatbot adalah monorepo berisi 4 app plus sebuah orchestrator yang berjalan in-process. OCR adalah satu repo dengan dua git worktree — branch legacy dan branch pengerasan "tidyup". RAG, classifier, dan Gateway masing-masing repo tersendiri.
Ringkasan repo
| Repo | Peran | Stack | Status | Gateway terpasang? |
|---|---|---|---|---|
| ahu-ai-chatbot | RAG publik "Tanya" + data-agent staf + konsol admin | Next.js 15 monorepo + Python/Agno + pgvector | Paling matang; baru staging | Terpasang, dormant (env flip) |
| ahu-ocr-akta-notaris (legacy) | OCR akta notaris → registry SABH | Bun/Hono/Prisma + PaddleOCR + Azure DI | PoC berjalan; tanpa auth, deploy db push |
Tidak |
| ahu-ocr-tidyup (tidy) | Produk sama, sudah dikeraskan | + lapisan contract, security, migrations, gateway client | Live di staging; security mode shadow | Terpasang, dormant (env flip) |
| ahu-gpu-manager (gateway) | Satu-satunya egress model + Job API + audit | Go 1.25, satu binary | Gateway selesai (P0–P2.7). Controller/node-agent belum dibuat | — (ini memang gateway-nya) |
| ahu-ai-observatory (API) | Audit stream → TimescaleDB → query API | Go 1.25 + TimescaleDB + hash-chain | Berjalan end-to-end | — |
| ahu-observatory-dashboard (UI) | Tampilan Exec / Operator / Auditor | React 19 + Vite + IBM Carbon | Live, tersambung ke API asli | — |
| ahu-doc-classifier | Mengklasifikasi ~20 tipe dokumen AHU | Python + LayoutLMv3-large (GPU) | Berjalan; belum ada audit/heartbeat | Lewat upstream classify Gateway |
"Gateway terpasang tapi dormant" berarti jalur kodenya sudah ada tetapi mati sampai sebuah env var di-set — dengan var tersebut kosong, perilakunya identik byte-per-byte dengan sekarang. Ini disengaja sesuai kontrak (§4).
Beberapa catatan yang tak muat di tabel
- Dua repo OCR itu satu codebase.
ahu-ocr-tidyupadalah git worktree/branch dariahu-ocr-akta-notaris, bukan penulisan ulang terpisah. "Tidy" adalah branch pengerasan (menambah auth, migrations, contract bersama, dan gateway client yang dormant) yang tetap menjalankan flow lama berdampingan sebagai pembanding kebenaran. - Orchestrator chatbot berjalan in-process. Logika plan/execute/compose berada di dalam
ahu-ai-chatbot(public-web). Dulunya berupa service Python terpisah (ahu-chatbot-orchestrator) yang kini diarsipkan dan tidak dipakai — abaikan repo itu. - "gpu-manager" sebenarnya baru Gateway saja hari ini. Nama repo menyiratkan gateway + controller + node-agent, tetapi baru Gateway yang dibangun. Controller (:8210) dan node-agent (:8220) sudah dirancang tetapi belum ada kodenya.
- Classifier adalah satu-satunya engine yang belum masuk jejak audit. Ia berjalan, tetapi belum mengirim event heartbeat/audit sebagaimana diharapkan kontrak. Pilihannya: tambahkan itu, atau arahkan sepenuhnya lewat Gateway (yang akan mengaudit-kannya untuk Anda).
Yang sudah jalan vs. yang belum selesai
Sudah jalan hari ini: chatbot (staging), OCR-tidy (staging), Gateway (semua fase sampai P2.7 sudah merge), dan pipeline Observatory penuh (Gateway → Redis → TimescaleDB → dashboard). Satu gateway flip yang sudah live (jalur gpu-server pada OCR).
Celah yang perlu diserahkan:
1. Model besar masih di luar on-prem (sementara). Sintesis chatbot memakai Alibaba Cloud DashScope Qwen-397B — dikelaskan external_dev, hanya diizinkan di dev dan ditolak di produksi. Perlu rumah on-prem (kluster B200 mendatang) sebelum go-live; box 2× H100 saat ini tak mampu menampung 397B.
2. Gateway P3 belum dibangun — belum ada controller/node-agent, jadi belum ada autoscaling atau telemetri GPU/antrean. Dashboard menampilkannya sebagai placeholder berlabel.
3. Classifier belum mengirim event audit/heartbeat — satu-satunya in-process GPU tenant yang belum masuk jejak audit.
4. Observatory: belum ada job retensi data (body audit tumbuh tanpa batas), belum ada pelacakan biaya, hanya latensi avg/max (belum ada p50/p95/p99).
5. Security OCR masih mode shadow — enforcement terhambat sampai PDF viewer / unduhan file memakai signed URL.
6. Sebagian besar gateway flip masih dormant — chatbot dan OCR-tidy sudah punya client-nya tetapi dikunci env.
7. Ketidakcocokan port: dashboard deploy di 8320, sedangkan kontrak menyebut 8310. Pilih satu sebelum produksi.
8. Semua di satu box GPU — produksi menghendaki 5 zona kepercayaan; urutan migrasi yang didokumentasikan: chatbot publik → DMZ dulu, lalu Observatory+DB → governance, lalu Gateway+Redis → control plane.
Referensi port
| Service | Port | Catatan |
|---|---|---|
| Gateway | 8200 | live |
| Controller | 8210 | direncanakan, belum dibuat |
| Node-agent | 8220 | direncanakan, belum dibuat |
| Observatory API | 8300 | live |
| Observatory dashboard | 8310 → 8320 | ⚠ deploy di 8320, kontrak menyebut 8310 |
| Public chatbot web | 3500 | host staging |
| Internal chatbot web | 3510 | host staging |
| Chatbot Agno agents | 8000 | container |
Doc-RAG (ai-ahu-rag) |
8110 | |
| TEI embeddings | 8100 | |
| OCR backend | 3520 | tidy, host staging |
| Doc classifier | 5004 | |
| DCGM exporter | 9400 | sudah ada di GPU host |
Sebelum menyentuh jalur panggilan model/OCR di repo mana pun, baca ahu-gpu-manager/docs/CONVENTIONS.md. Repo engine (ahu-ai-chatbot, ahu-ocr-*, ahu-doc-classifier) sedang aktif dan mungkin sedang diedit bersamaan — koordinasikan sebelum mengubah.