690603:2041 ADR-034-134 #01
CI / CD Pipeline / build (push) Failing after 4m28s
CI / CD Pipeline / deploy (push) Has been skipped

This commit is contained in:
2026-06-03 20:41:42 +07:00
parent 754d609399
commit 3274dede7a
197 changed files with 1575 additions and 42 deletions
@@ -0,0 +1,116 @@
// File: specs/100-Infrastructures/134-ai-model-change/data-model.md
// Change Log:
// - 2026-06-03: Data model for Thai-Optimized AI Model Stack
# Data Model: Thai-Optimized AI Model Stack
---
## Database Schema Changes
**ไม่มี new tables หรือ column changes** — ADR-009 compliant; ไม่มี TypeORM migration
### Optional: ai_available_models Seed Update
ตาราง `ai_available_models` (จาก ADR-027 Session 6) ควร update เพื่อความสอดคล้อง:
**Update existing main model record:**
```sql
UPDATE ai_available_models
SET model_name = 'typhoon2.5-np-dms:latest',
display_name = 'Typhoon 2.5 NP-DMS (Thai)',
updated_at = NOW()
WHERE model_type = 'main' AND is_active = 1;
```
**Insert OCR model record (if column model_type supports 'ocr'):**
```sql
INSERT INTO ai_available_models (model_name, display_name, model_type, is_active, created_at, updated_at)
VALUES ('typhoon-np-dms-ocr:latest', 'Typhoon OCR 3B (Thai)', 'ocr', 1, NOW(), NOW())
ON DUPLICATE KEY UPDATE display_name = VALUES(display_name), updated_at = NOW();
```
> **Note**: ตรวจสอบ schema จริงใน `lcbp3-v1.9.0-schema-02-tables.sql` ก่อน run delta — column names และ model_type ENUM อาจแตกต่าง
---
## Code Configuration Model
### AiSettingsService Constants
| Constant | เดิม | ใหม่ |
|----------|------|------|
| `DEFAULT_MODEL` | `'gemma4:e2b'` | `'typhoon2.5-np-dms:latest'` |
| `OCR_MODEL` (เพิ่มใหม่) | — | `'typhoon-np-dms-ocr:latest'` |
**File**: `backend/src/modules/ai/services/ai-settings.service.ts`
---
## Custom Ollama Model Configurations
### typhoon2.5-np-dms (Main Model)
| Property | Value |
|----------|-------|
| Custom Name | `typhoon2.5-np-dms:latest` |
| Base Model | `scb10x/typhoon2.5-qwen3-4b:latest` |
| Size | ~2.5GB VRAM |
| keep_alive | Indefinite (`-1`) — standby ตลอด |
| num_ctx | 8192 |
| num_predict | 2048 |
| temperature | 0.1 |
| top_p | 0.85 |
| repeat_penalty | 1.15 |
| Role | Extraction, RAG Q&A, AI Suggestion, OCR Post-processing |
| Modelfile Path | `specs/04-Infrastructure-OPS/04-00-docker-compose/Desk-5439/typhoon2.5-np-dms.model.md` |
### typhoon-np-dms-ocr (OCR Model)
| Property | Value |
|----------|-------|
| Custom Name | `typhoon-np-dms-ocr:latest` |
| Base Model | `scb10x/typhoon-ocr1.5-3b:latest` |
| Size | ~3.2GB VRAM |
| keep_alive | `0` — auto-unload immediately after job |
| num_ctx | 8192 |
| num_predict | 4096 |
| temperature | 0.1 |
| top_p | 0.1 |
| repeat_penalty | 1.1 |
| Role | Thai OCR extraction from PDF images |
| Modelfile Path | `specs/04-Infrastructure-OPS/04-00-docker-compose/Desk-5439/typhoon-np-dms-ocr.model.md` |
---
## VRAM Budget Analysis
| State | Models in VRAM | Estimated VRAM Usage |
|-------|---------------|---------------------|
| Idle | typhoon2.5-np-dms (standby) | ~2.5GB |
| Main AI job | typhoon2.5-np-dms (active) | ~3.54GB peak |
| OCR transition | unloading main → loading OCR | ~3.2GB (OCR only) |
| OCR processing | typhoon-np-dms-ocr (active) | ~45GB peak |
| Post-OCR reload | loading main back | ~2.5GB |
| **Max peak** | OCR model active | **~5GB** (safe under 8GB limit) |
---
## OllamaService New Methods Signatures
```typescript
/**
* unloadModel: Force unload model จาก VRAM
* @param modelName - ชื่อ Ollama model ที่ต้องการ unload
*/
async unloadModel(modelName: string): Promise<void>
/**
* loadModel: Load / warm model เข้า VRAM
* @param modelName - ชื่อ Ollama model ที่ต้องการ load
* @param keepAlive - -1 = indefinite (default สำหรับ main model); 0 = auto-unload
*/
async loadModel(modelName: string, keepAlive?: number | string): Promise<void>
```