Merge pull request 'feat: SFR-20 LLM 운영 관리 페이지 신규 추가' (#22) from feat/llm-ops-page into main
All checks were successful
Build and Deploy KCG AI Monitoring (Frontend) / build-and-deploy (push) Successful in 15s

This commit is contained in:
htlee 2026-04-09 09:59:18 +09:00
커밋 6c7a2a9a9d
9개의 변경된 파일1284개의 추가작업 그리고 0개의 파일을 삭제

파일 보기

@ -21,6 +21,7 @@ import { LoginPage } from '@features/auth';
/* SFR-17 */ import { AIAlert } from '@features/field-ops'; /* SFR-17 */ import { AIAlert } from '@features/field-ops';
/* SFR-18+19 */ import { MLOpsPage } from '@features/ai-operations'; /* SFR-18+19 */ import { MLOpsPage } from '@features/ai-operations';
/* SFR-20 */ import { AIAssistant } from '@features/ai-operations'; /* SFR-20 */ import { AIAssistant } from '@features/ai-operations';
/* SFR-20 LLM운영 */ import { LLMOpsPage } from '@features/ai-operations';
/* 기존 */ import { Dashboard } from '@features/dashboard'; /* 기존 */ import { Dashboard } from '@features/dashboard';
import { LiveMapView, MapControl } from '@features/surveillance'; import { LiveMapView, MapControl } from '@features/surveillance';
import { EventList } from '@features/enforcement'; import { EventList } from '@features/enforcement';
@ -104,6 +105,7 @@ export default function App() {
<Route path="ai-model" element={<ProtectedRoute resource="ai-operations:ai-model"><AIModelManagement /></ProtectedRoute>} /> <Route path="ai-model" element={<ProtectedRoute resource="ai-operations:ai-model"><AIModelManagement /></ProtectedRoute>} />
{/* SFR-18~20 AI 운영 */} {/* SFR-18~20 AI 운영 */}
<Route path="mlops" element={<ProtectedRoute resource="ai-operations:mlops"><MLOpsPage /></ProtectedRoute>} /> <Route path="mlops" element={<ProtectedRoute resource="ai-operations:mlops"><MLOpsPage /></ProtectedRoute>} />
<Route path="llm-ops" element={<ProtectedRoute resource="ai-operations:llm-ops"><LLMOpsPage /></ProtectedRoute>} />
<Route path="ai-assistant" element={<ProtectedRoute resource="ai-operations:ai-assistant"><AIAssistant /></ProtectedRoute>} /> <Route path="ai-assistant" element={<ProtectedRoute resource="ai-operations:ai-assistant"><AIAssistant /></ProtectedRoute>} />
{/* SFR-03 데이터허브 */} {/* SFR-03 데이터허브 */}
<Route path="data-hub" element={<ProtectedRoute resource="admin:system-config"><DataHub /></ProtectedRoute>} /> <Route path="data-hub" element={<ProtectedRoute resource="admin:system-config"><DataHub /></ProtectedRoute>} />

파일 보기

@ -55,6 +55,7 @@ const PATH_TO_RESOURCE: Record<string, string> = {
'/ai-assistant': 'ai-operations:ai-assistant', '/ai-assistant': 'ai-operations:ai-assistant',
'/ai-model': 'ai-operations:ai-model', '/ai-model': 'ai-operations:ai-model',
'/mlops': 'ai-operations:mlops', '/mlops': 'ai-operations:mlops',
'/llm-ops': 'ai-operations:llm-ops',
'/statistics': 'statistics:statistics', '/statistics': 'statistics:statistics',
'/external-service': 'statistics:external-service', '/external-service': 'statistics:external-service',
'/admin/audit-logs': 'admin:audit-logs', '/admin/audit-logs': 'admin:audit-logs',

파일 보기

@ -84,6 +84,7 @@ const NAV_ENTRIES: NavEntry[] = [
items: [ items: [
{ to: '/ai-model', icon: Brain, labelKey: 'nav.aiModel' }, { to: '/ai-model', icon: Brain, labelKey: 'nav.aiModel' },
{ to: '/mlops', icon: Cpu, labelKey: 'nav.mlops' }, { to: '/mlops', icon: Cpu, labelKey: 'nav.mlops' },
{ to: '/llm-ops', icon: Brain, labelKey: 'nav.llmOps' },
{ to: '/ai-assistant', icon: MessageSquare, labelKey: 'nav.aiAssistant' }, { to: '/ai-assistant', icon: MessageSquare, labelKey: 'nav.aiAssistant' },
{ to: '/external-service', icon: Globe, labelKey: 'nav.externalService' }, { to: '/external-service', icon: Globe, labelKey: 'nav.externalService' },
{ to: '/data-hub', icon: Wifi, labelKey: 'nav.dataHub' }, { to: '/data-hub', icon: Wifi, labelKey: 'nav.dataHub' },

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다. Load Diff

파일 보기

@ -1,3 +1,4 @@
export { AIModelManagement } from './AIModelManagement'; export { AIModelManagement } from './AIModelManagement';
export { MLOpsPage } from './MLOpsPage'; export { MLOpsPage } from './MLOpsPage';
export { AIAssistant } from './AIAssistant'; export { AIAssistant } from './AIAssistant';
export { LLMOpsPage } from './LLMOpsPage';

파일 보기

@ -7,6 +7,10 @@
"title": "MLOps / LLMOps", "title": "MLOps / LLMOps",
"desc": "SFR-18/19 | ML & LLM experiment, deployment, monitoring" "desc": "SFR-18/19 | ML & LLM experiment, deployment, monitoring"
}, },
"llmOps": {
"title": "LLM Operations",
"desc": "SFR-20 | Qwen3-8B model management, prompts, inference, RAG, evaluation, security & monitoring"
},
"assistant": { "assistant": {
"title": "AI Decision Support (Q&A)", "title": "AI Decision Support (Q&A)",
"desc": "SFR-20 | Natural language query with RAG-based law, case & prediction answers" "desc": "SFR-20 | Natural language query with RAG-based law, case & prediction answers"

파일 보기

@ -20,6 +20,7 @@
"reports": "Reports", "reports": "Reports",
"aiModel": "AI Model", "aiModel": "AI Model",
"mlops": "MLOps", "mlops": "MLOps",
"llmOps": "LLM Ops",
"aiAssistant": "AI Q&A", "aiAssistant": "AI Q&A",
"dataHub": "Data Hub", "dataHub": "Data Hub",
"systemConfig": "Settings", "systemConfig": "Settings",

파일 보기

@ -7,6 +7,10 @@
"title": "MLOps/LLMOps", "title": "MLOps/LLMOps",
"desc": "SFR-18/19 | 기계학습·대규모 언어모델 실험·배포·모니터링 통합" "desc": "SFR-18/19 | 기계학습·대규모 언어모델 실험·배포·모니터링 통합"
}, },
"llmOps": {
"title": "LLM 운영 관리",
"desc": "SFR-20 | Qwen3-8B 모델 관리·프롬프트·추론·RAG·평가·보안·모니터링 통합 운영"
},
"assistant": { "assistant": {
"title": "AI 의사결정 지원 (Q&A)", "title": "AI 의사결정 지원 (Q&A)",
"desc": "SFR-20 | 자연어 질의 → 법령·지침·유사사례·예측결과 통합 답변 · RAG 기반" "desc": "SFR-20 | 자연어 질의 → 법령·지침·유사사례·예측결과 통합 답변 · RAG 기반"

파일 보기

@ -20,6 +20,7 @@
"reports": "보고서 관리", "reports": "보고서 관리",
"aiModel": "AI 모델관리", "aiModel": "AI 모델관리",
"mlops": "MLOps", "mlops": "MLOps",
"llmOps": "LLM 운영",
"aiAssistant": "AI 의사결정 지원", "aiAssistant": "AI 의사결정 지원",
"dataHub": "데이터 허브", "dataHub": "데이터 허브",
"systemConfig": "환경설정", "systemConfig": "환경설정",