| 
                        12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
                        - import type { FormValue, ModelParameterRule } from '@/app/components/header/account-setting/model-provider-page/declarations'
 - 
 - export const mergeValidCompletionParams = (
 -   oldParams: FormValue | undefined,
 -   rules: ModelParameterRule[],
 - ): { params: FormValue; removedDetails: Record<string, string> } => {
 -   if (!oldParams || Object.keys(oldParams).length === 0)
 -     return { params: {}, removedDetails: {} }
 - 
 -   const acceptedKeys = new Set(rules.map(r => r.name))
 -   const ruleMap: Record<string, ModelParameterRule> = {}
 -   rules.forEach((r) => {
 -     ruleMap[r.name] = r
 -   })
 - 
 -   const nextParams: FormValue = {}
 -   const removedDetails: Record<string, string> = {}
 - 
 -   Object.entries(oldParams).forEach(([key, value]) => {
 -     if (!acceptedKeys.has(key)) {
 -       removedDetails[key] = 'unsupported'
 -       return
 -     }
 - 
 -     const rule = ruleMap[key]
 -     if (!rule) {
 -       removedDetails[key] = 'unsupported'
 -       return
 -     }
 - 
 -     switch (rule.type) {
 -       case 'int':
 -       case 'float': {
 -         if (typeof value !== 'number') {
 -           removedDetails[key] = 'invalid type'
 -           return
 -         }
 -         const min = rule.min ?? Number.NEGATIVE_INFINITY
 -         const max = rule.max ?? Number.POSITIVE_INFINITY
 -         if (value < min || value > max) {
 -           removedDetails[key] = `out of range (${min}-${max})`
 -           return
 -         }
 -         nextParams[key] = value
 -         return
 -       }
 -       case 'boolean': {
 -         if (typeof value !== 'boolean') {
 -           removedDetails[key] = 'invalid type'
 -           return
 -         }
 -         nextParams[key] = value
 -         return
 -       }
 -       case 'string':
 -       case 'text': {
 -         if (typeof value !== 'string') {
 -           removedDetails[key] = 'invalid type'
 -           return
 -         }
 -         if (Array.isArray(rule.options) && rule.options.length) {
 -           if (!(rule.options as string[]).includes(value)) {
 -             removedDetails[key] = 'unsupported option'
 -             return
 -           }
 -         }
 -         nextParams[key] = value
 -         return
 -       }
 -       default: {
 -         removedDetails[key] = `unsupported rule type: ${(rule as any)?.type ?? 'unknown'}`
 -       }
 -     }
 -   })
 - 
 -   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 ?? [])
 - }
 
 
  |