Refactor parameter merging to async utility function

Replaces direct parameter rule fetching and merging logic with a new async utility function `fetchAndMergeValidCompletionParams` in both configuration and LLM panel components. This centralizes the logic for fetching model parameter rules and merging valid completion parameters, improving code reuse and maintainability.
pull/21247/head
Kalo Chin 11 months ago
parent aa31877a4f
commit 7ef8e904f0

@ -80,8 +80,7 @@ import {
import PluginDependency from '@/app/components/workflow/plugin-dependency'
import { supportFunctionCall } from '@/utils/tool-call'
import { MittProvider } from '@/context/mitt-context'
import { mergeValidCompletionParams } from '@/utils/completion-params'
import { fetchModelParameterRules } from '@/service/common'
import { fetchAndMergeValidCompletionParams } from '@/utils/completion-params'
import Toast from '@/app/components/base/toast'
type PublishConfig = {
@ -459,9 +458,11 @@ const Configuration: FC = () => {
// merge and keep only valid completion params for the new model
try {
const url = `/workspaces/current/model-providers/${provider}/models/parameter-rules?model=${modelId}`
const { data: parameterRules } = await fetchModelParameterRules(url)
const { params: filtered, removedDetails } = mergeValidCompletionParams(completionParams, parameterRules ?? [])
const { params: filtered, removedDetails } = await fetchAndMergeValidCompletionParams(
provider,
modelId,
completionParams,
)
if (Object.keys(removedDetails).length)
Toast.notify({ type: 'warning', message: `${t('common.modelProvider.parametersInvalidRemoved')}: ${Object.entries(removedDetails).map(([k, reason]) => `${k} (${reason})`).join(', ')}` })
setCompletionParams(filtered)

@ -23,8 +23,7 @@ import Editor from '@/app/components/workflow/nodes/_base/components/prompt/edit
import StructureOutput from './components/structure-output'
import Switch from '@/app/components/base/switch'
import { RiAlertFill, RiQuestionLine } from '@remixicon/react'
import { mergeValidCompletionParams } from '@/utils/completion-params'
import { fetchModelParameterRules } from '@/service/common'
import { fetchAndMergeValidCompletionParams } from '@/utils/completion-params'
import Toast from '@/app/components/base/toast'
const i18nPrefix = 'workflow.nodes.llm'
@ -142,14 +141,20 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
}) => {
(async () => {
try {
const url = `/workspaces/current/model-providers/${model.provider}/models/parameter-rules?model=${model.modelId}`
const { data: parameterRules } = await fetchModelParameterRules(url)
const { params: filtered, removedDetails } = mergeValidCompletionParams(inputs.model.completion_params, parameterRules ?? [])
const { params: filtered, removedDetails } = await fetchAndMergeValidCompletionParams(
model.provider,
model.modelId,
inputs.model.completion_params,
)
const keys = Object.keys(removedDetails)
if (keys.length)
Toast.notify({ type: 'warning', message: `${t('common.modelProvider.parametersInvalidRemoved')}: ${keys.map(k => `${k} (${removedDetails[k]})`).join(', ')}` })
handleCompletionParamsChange(filtered)
}
catch (e) {
Toast.notify({ type: 'error', message: t('common.error') })
handleCompletionParamsChange({})
}
finally {
handleModelChanged(model)
}

@ -1,7 +1,5 @@
import type { FormValue, ModelParameterRule } from '@/app/components/header/account-setting/model-provider-page/declarations'
// Returns a new object that contains only the keys accepted by `rules` and whose
// values conform to the rule's basic validation (range/options).
export const mergeValidCompletionParams = (
oldParams: FormValue | undefined,
rules: ModelParameterRule[],
@ -70,10 +68,22 @@ export const mergeValidCompletionParams = (
return
}
default: {
nextParams[key] = value
removedDetails[key] = `unsupported rule type: ${(rule as any)?.type ?? 'unknown'}`
return
}
}
})
return { params: nextParams, removedDetails }
}
export const fetchAndMergeValidCompletionParams = async (
provider: string,
modelId: string,
oldParams: FormValue | undefined,
): Promise<{ params: FormValue; removedDetails: Record<string, string> }> => {
const { fetchModelParameterRules } = await import('@/service/common')
const url = `/workspaces/current/model-providers/${provider}/models/parameter-rules?model=${modelId}`
const { data: parameterRules } = await fetchModelParameterRules(url)
return mergeValidCompletionParams(oldParams, parameterRules ?? [])
}

Loading…
Cancel
Save