feat: 新增 compute_gateway、compute_poller、agent 模块,重构前端 dist

- 新增 backend/app/modules/compute_gateway(client/sync)计算网关模块
- 新增 backend/app/workers/compute_poller 计算轮询 worker
- 新增 compute/agent/process_manager 进程管理器
- 新增 scripts/ 脚本目录
- 更新 Docker 部署配置(app/compute/nginx)
- 更新后端平台 API、数据库 SQL、core 配置
- 更新前端多个视图组件及 API 模块
- 重构 frontend/dist 构建产物(新 hash)
- 更新多项文档

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
wuyongtao
2026-07-22 17:32:59 +08:00
parent 1e438164c1
commit 836343b29e
180 changed files with 3352 additions and 263 deletions

View File

@@ -8,7 +8,7 @@ import TrainingTaskOverview from './training-log/TrainingTaskOverview.vue'
import { usePolling } from '@/composables/usePolling'
import '@/plugins/echarts-training-log'
import { useModelsStore } from '@/stores/models'
import { getFineTune } from '@/api/modules/fineTune'
import { getFineTune, getFineTuneLogs } from '@/api/modules/fineTune'
import { getTrainingLogFiles, getTrainingLogContent } from '@/api/modules/log'
import { getDataset } from '@/api/modules/dataset'
import { getSystemInfo } from '@/api/modules/system'
@@ -223,6 +223,16 @@ function applyLogContent(content: string) {
}
async function loadLog(currentTask: FineTuneTask) {
try {
const runtime = await getFineTuneLogs(currentTask.id, { tail_lines: 800 })
if (runtime?.content || currentTask.failure_reason) {
applyLogContent(runtime?.content || currentTask.failure_reason || '')
return
}
} catch {
// Fall back to platform-side archived/generated logs for compatibility.
}
try {
const files = (await getTrainingLogFiles()) || []
const matched = resolveTrainingLogFile(files, currentTask)
@@ -263,7 +273,7 @@ const isTerminalTask = () => ['completed', 'failed', 'stopped', 'cancelled'].inc
const { start: startPolling, stop: stopPolling } = usePolling(async () => {
await refreshAll()
if (isTerminalTask()) stopPolling()
}, 5000, { immediate: false })
}, 3000, { immediate: false })
onMounted(async () => {
void modelsStore.load()