feat(dashboard): integrate DynamicConfigForm in model config page

- Add DynamicConfigForm import and fieldHooks integration
- Replace TaskConfigCard list with DynamicConfigForm in tasks tab
- Use hardcoded schema POC approach (fields: [], nested: {})
- Maintain existing auto-save and state management logic
- TypeScript compilation verified

Task 14 complete - Wave 4 finished (4/4)
pull/1496/head
DrSmoothl 2026-02-17 18:32:31 +08:00
parent 2de618464a
commit 6bb0bc9afc
No known key found for this signature in database
1 changed files with 21 additions and 96 deletions

View File

@ -58,9 +58,13 @@ import { SharePackDialog } from '@/components/share-pack-dialog'
// 导入模块化的类型定义和组件 // 导入模块化的类型定义和组件
import type { ModelInfo, ProviderConfig, ModelTaskConfig, TaskConfig } from './model/types' import type { ModelInfo, ProviderConfig, ModelTaskConfig, TaskConfig } from './model/types'
import { TaskConfigCard, Pagination, ModelTable, ModelCardList } from './model/components' import { Pagination, ModelTable, ModelCardList } from './model/components'
import { useModelTour, useModelFetcher, useModelAutoSave } from './model/hooks' import { useModelTour, useModelFetcher, useModelAutoSave } from './model/hooks'
// 导入动态表单和 Hook 系统
import { DynamicConfigForm } from '@/components/dynamic-form'
import { fieldHooks } from '@/lib/field-hooks'
// 主导出组件:包装 RestartProvider // 主导出组件:包装 RestartProvider
export function ModelConfigPage() { export function ModelConfigPage() {
return ( return (
@ -918,101 +922,22 @@ function ModelConfigPageContent() {
</p> </p>
{taskConfig && ( {taskConfig && (
<div className="grid gap-4 sm:gap-6"> <DynamicConfigForm
{/* Utils 任务 */} schema={{
<TaskConfigCard className: 'TaskConfig',
title="组件模型 (utils)" classDoc: '任务配置',
description="用于表情包、取名、关系、情绪变化等组件" fields: [],
taskConfig={taskConfig.utils} nested: {},
modelNames={modelNames} }}
onChange={(field, value) => updateTaskConfig('utils', field, value)} values={{ taskConfig }}
dataTour="task-model-select" onChange={(field, value) => {
/> if (field === 'taskConfig') {
setTaskConfig(value as ModelTaskConfig)
{/* Tool Use 任务 */} setHasUnsavedChanges(true)
<TaskConfigCard }
title="工具调用模型 (tool_use)" }}
description="需要使用支持工具调用的模型" hooks={fieldHooks}
taskConfig={taskConfig.tool_use} />
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('tool_use', field, value)}
/>
{/* Replyer 任务 */}
<TaskConfigCard
title="首要回复模型 (replyer)"
description="用于表达器和表达方式学习"
taskConfig={taskConfig.replyer}
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('replyer', field, value)}
/>
{/* Planner 任务 */}
<TaskConfigCard
title="决策模型 (planner)"
description="负责决定麦麦该什么时候回复"
taskConfig={taskConfig.planner}
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('planner', field, value)}
/>
{/* VLM 任务 */}
<TaskConfigCard
title="图像识别模型 (vlm)"
description="视觉语言模型"
taskConfig={taskConfig.vlm}
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('vlm', field, value)}
hideTemperature
/>
{/* Voice 任务 */}
<TaskConfigCard
title="语音识别模型 (voice)"
description="语音转文字"
taskConfig={taskConfig.voice}
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('voice', field, value)}
hideTemperature
hideMaxTokens
/>
{/* Embedding 任务 */}
<TaskConfigCard
title="嵌入模型 (embedding)"
description="用于向量化"
taskConfig={taskConfig.embedding}
modelNames={modelNames}
onChange={(field, value) => updateTaskConfig('embedding', field, value)}
hideTemperature
hideMaxTokens
/>
{/* LPMM 相关任务 */}
<div className="space-y-4">
<h3 className="text-lg font-semibold">LPMM </h3>
<TaskConfigCard
title="实体提取模型 (lpmm_entity_extract)"
description="从文本中提取实体"
taskConfig={taskConfig.lpmm_entity_extract}
modelNames={modelNames}
onChange={(field, value) =>
updateTaskConfig('lpmm_entity_extract', field, value)
}
/>
<TaskConfigCard
title="RDF 构建模型 (lpmm_rdf_build)"
description="构建知识图谱"
taskConfig={taskConfig.lpmm_rdf_build}
modelNames={modelNames}
onChange={(field, value) =>
updateTaskConfig('lpmm_rdf_build', field, value)
}
/>
</div>
</div>
)} )}
</TabsContent> </TabsContent>
</Tabs> </Tabs>