Files
YG_FT/frontend/src/api/modules/compute.ts
wuyongtao 5cc306eb0a fix: 推理/评测结果同步、数据集统计与算力节点管理增强
后端:
- 抽取 fetch_eval_result_content 复用函数,model_eval_detail 直接应用评测任务结果
- health 接口移除数据库依赖,返回静态指标
- 数据集: count_dataset_records JSON 感知计数; 文件统计改为从 dataset_files 聚合重算; 在线编辑记录 size/record_count/version_no; 上传同步批处理
- 算力节点: 调度支持 requested GPU 子集校验与容量计算; 新增 delete_compute_node(含活动任务保护)及 DELETE 接口; 连接池 connect_timeout
- 评测任务落库 basic_metrics/score/completed_time, failed/stopped 记录 error

评测引擎:
- _load_dataset 支持 JSON/JSONL 文件
- 新增 exact match 与文本相似度指标, 余弦相似度去掉 2 样本限制

前端:
- 算力节点列表「维护」改为「删除」(带确认弹窗), compute.ts 新增 deleteComputeNode
- 数据集上传超时调整为 120s; FineTuneTask 增加 compute_node_id; GpuInfo 状态增加 reserved
2026-08-03 15:49:21 +08:00

126 lines
3.4 KiB
TypeScript

import { del, get, post, put } from '../request'
export interface ComputeNode {
id: string
code: string
name: string
api_base_url: string
file_gateway_url: string
enabled: boolean
scheduler_status: string
scheduler_weight: number
tags: string[]
gpu_count: number
current_running_jobs: number
max_parallel_jobs: number
data_root: string
model_root: string
log_root: string
api_version?: string
capabilities?: string[]
description?: string
last_health_check_at?: string
health_detail?: Record<string, unknown>
}
export type ComputeNodePayload = Partial<ComputeNode> & {
code?: string
api_base_url?: string
}
export interface ComputeGpu {
id: number
node_id: string
node_code: string
node_name: string
name: string
uuid: string
status: string
gpu_percent: number
memory_used_gb: number
memory_total_gb: number
memory_percent: number
temperature: number
power_w: number
power_limit_w: number
processes?: Array<{
pid: number
name: string
memory_used_gb: number
task_name?: string
user?: string
}>
}
export interface ComputeQueueItem {
id: string
name: string
status: string
progress: number
compute_node_id?: string
gpus: number[]
create_time?: string
}
export interface ResourceReplica {
id: string
node_id: string
resource_type: string
resource_id: string
local_path: string
status: string
sync_status: string
checksum_sha256?: string
byte_size?: number
last_checked_at?: string
last_error?: string
create_time: string
}
export interface ResourceSyncJob {
id: string
target_node_id: string
resources?: unknown
status: string
progress: number
create_time?: string
completed_at?: string
}
export const getComputeNodes = () => get<ComputeNode[]>('/compute/nodes')
export const createComputeNode = (data: ComputeNodePayload) =>
post<ComputeNode>('/compute/nodes', data)
export const updateComputeNode = (id: string, data: Partial<ComputeNode>) =>
put<ComputeNode>(`/compute/nodes/${id}`, data)
export const deleteComputeNode = (id: string) =>
del<{ deleted: string }>(`/compute/nodes/${id}`)
export const testComputeNode = (id: string) =>
post<{ node_id: string; success: boolean; latency_ms: number; gpu_count: number; error?: string }>(`/compute/nodes/${id}/test-connection`)
export const enableComputeNode = (id: string) => post<ComputeNode>(`/compute/nodes/${id}/enable`)
export const disableComputeNode = (id: string) => post<ComputeNode>(`/compute/nodes/${id}/disable`)
export const drainComputeNode = (id: string) => post<ComputeNode>(`/compute/nodes/${id}/drain`)
export const getComputeGpus = () => get<ComputeGpu[]>('/compute/gpus')
export const getComputeQueue = () => get<ComputeQueueItem[]>('/compute/queue')
export const getNodeReplicas = (id: string) => get<ResourceReplica[]>(`/compute/nodes/${id}/replicas`)
export const checkNodeReplicaDrift = (id: string) =>
get<{ node_id: string; items: ResourceReplica[]; drifted: number }>(`/compute/nodes/${id}/replicas/drift`)
export const repairNodeReplicas = (id: string, replicaIds?: string[]) =>
post<{ sync: ResourceSyncJob; replicas: ResourceReplica[]; failed: Array<{ replica_id: string; error: string }>; async?: boolean }>(
`/compute/nodes/${id}/replicas/repair`,
replicaIds?.length ? { replica_ids: replicaIds } : {},
)
export const getComputeSyncJob = (id: string) => get<ResourceSyncJob>(`/compute/sync-jobs/${id}`)