// File: frontend/components/admin/ai/OcrEngineSelector.tsx // Change Log // - 2026-05-30: สร้าง OcrEngineSelector สำหรับดึงและสลับ OCR Engine แบบไดนามิก (T019, T020, US1) 'use client'; import React, { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import { ScanText, Server, AlertCircle, CheckCircle2, Cpu } from 'lucide-react'; import { adminAiService, OcrEngineResponse } from '@/lib/services/admin-ai.service'; /** Component สำหรับเลือกและจัดการ OCR Engine ในระบบ */ export default function OcrEngineSelector() { const [engines, setEngines] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isUpdating, setIsUpdating] = useState(null); const fetchEngines = async () => { try { setIsLoading(true); const data = await adminAiService.getOcrEngines(); setEngines(Array.isArray(data) ? data : []); } catch (_err: unknown) { toast.error('ไม่สามารถดึงข้อมูล OCR Engines ได้'); } finally { setIsLoading(false); } }; useEffect(() => { fetchEngines(); }, []); const handleSelectEngine = async (engineId: string, engineName: string) => { try { setIsUpdating(engineId); await adminAiService.selectOcrEngine(engineId); toast.success(`เปลี่ยนเอนจิน OCR หลักเป็น ${engineName} สำเร็จ`); await fetchEngines(); } catch (_err: unknown) { toast.error('ไม่สามารถเปลี่ยนเอนจิน OCR ได้'); } finally { setIsUpdating(null); } }; if (isLoading) { return (
); } return ( ระบบจัดการ OCR Engine เลือกเอนจินประมวลผลหลักสำหรับระบบสกัดเอกสารและการรัน Sandbox {engines.map((engine) => { const isTyphoon = engine.engineType === 'typhoon_ocr'; return (
{engine.engineName} {engine.isCurrentActive && ( กำลังใช้งาน )} {isTyphoon && ( AI Powered )}

{isTyphoon ? 'สกัดภาษาไทยความแม่นยำสูง (95%+) เหมาะสำหรับภาษาไทยผสมอังกฤษ' : 'เอนจินมาตรฐานเบสไลน์ ประมวลผลรวดเร็วและใช้ทรัพยากรต่ำ'}

จำกัดพร้อมกัน: {engine.concurrentLimit} งาน {isTyphoon && ( <> ต้องการ VRAM: {(engine.vramRequirementMB / 1024).toFixed(1)} GB เอนจินสำรอง: Tesseract OCR )}
); })}
); }