think
16px
820px

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)

flowchart TB users([Public users]):::actor staff([AHU staff]):::actor ocruser([Notary & Public user]):::actor subgraph pubz["DMZ / public"] pubbot["Public chatbot · 'Tanya'
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

flowchart LR subgraph cb["repo: ahu-ai-chatbot (monorepo)"] direction TB pw["public-web
+ 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-tidyup adalah git worktree/branch dari ahu-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.