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

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

@ -1,7 +1,5 @@
import type { FormValue, ModelParameterRule } from '@/app/components/header/account-setting/model-provider-page/declarations' 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 = ( export const mergeValidCompletionParams = (
oldParams: FormValue | undefined, oldParams: FormValue | undefined,
rules: ModelParameterRule[], rules: ModelParameterRule[],
@ -70,10 +68,22 @@ export const mergeValidCompletionParams = (
return return
} }
default: { default: {
nextParams[key] = value removedDetails[key] = `unsupported rule type: ${(rule as any)?.type ?? 'unknown'}`
return
} }
} }
}) })
return { params: nextParams, removedDetails } 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