| provider, | provider, | ||||
| modelId, | modelId, | ||||
| completionParams, | completionParams, | ||||
| isAdvancedMode, | |||||
| ) | ) | ||||
| 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(', ')}` }) |
| import { fetchModelParameterRules } from '@/service/common' | import { fetchModelParameterRules } from '@/service/common' | ||||
| import Loading from '@/app/components/base/loading' | import Loading from '@/app/components/base/loading' | ||||
| import { useProviderContext } from '@/context/provider-context' | import { useProviderContext } from '@/context/provider-context' | ||||
| import { TONE_LIST } from '@/config' | |||||
| import { PROVIDER_WITH_PRESET_TONE, STOP_PARAMETER_RULE, TONE_LIST } from '@/config' | |||||
| import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows' | import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows' | ||||
| export type ModelParameterModalProps = { | export type ModelParameterModalProps = { | ||||
| isInWorkflow?: boolean | isInWorkflow?: boolean | ||||
| scope?: string | scope?: string | ||||
| } | } | ||||
| const stopParameterRule: ModelParameterRule = { | |||||
| default: [], | |||||
| help: { | |||||
| en_US: 'Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.', | |||||
| zh_Hans: '最多四个序列,API 将停止生成更多的 token。返回的文本将不包含停止序列。', | |||||
| }, | |||||
| label: { | |||||
| en_US: 'Stop sequences', | |||||
| zh_Hans: '停止序列', | |||||
| }, | |||||
| name: 'stop', | |||||
| required: false, | |||||
| type: 'tag', | |||||
| tagPlaceholder: { | |||||
| en_US: 'Enter sequence and press Tab', | |||||
| zh_Hans: '输入序列并按 Tab 键', | |||||
| }, | |||||
| } | |||||
| const PROVIDER_WITH_PRESET_TONE = ['langgenius/openai/openai', 'langgenius/azure_openai/azure_openai'] | |||||
| const ModelParameterModal: FC<ModelParameterModalProps> = ({ | const ModelParameterModal: FC<ModelParameterModalProps> = ({ | ||||
| popupClassName, | popupClassName, | ||||
| portalToFollowElemContentClassName, | portalToFollowElemContentClassName, | ||||
| !isLoading && !!parameterRules.length && ( | !isLoading && !!parameterRules.length && ( | ||||
| [ | [ | ||||
| ...parameterRules, | ...parameterRules, | ||||
| ...(isAdvancedMode ? [stopParameterRule] : []), | |||||
| ...(isAdvancedMode ? [STOP_PARAMETER_RULE] : []), | |||||
| ].map(parameter => ( | ].map(parameter => ( | ||||
| <ParameterItem | <ParameterItem | ||||
| key={`${modelId}-${parameter.name}`} | key={`${modelId}-${parameter.name}`} |
| provider, | provider, | ||||
| model, | model, | ||||
| value?.completion_params, | value?.completion_params, | ||||
| isAdvancedMode, | |||||
| ) | ) | ||||
| nextCompletionParams = filtered | nextCompletionParams = filtered | ||||
| } from '@/app/components/header/account-setting/model-provider-page/declarations' | } from '@/app/components/header/account-setting/model-provider-page/declarations' | ||||
| import type { ParameterValue } from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item' | import type { ParameterValue } from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item' | ||||
| import { fetchModelParameterRules } from '@/service/common' | import { fetchModelParameterRules } from '@/service/common' | ||||
| import { TONE_LIST } from '@/config' | |||||
| import { PROVIDER_WITH_PRESET_TONE, STOP_PARAMETER_RULE, TONE_LIST } from '@/config' | |||||
| import cn from '@/utils/classnames' | import cn from '@/utils/classnames' | ||||
| const PROVIDER_WITH_PRESET_TONE = ['langgenius/openai/openai', 'langgenius/azure_openai/azure_openai'] | |||||
| const stopParameterRule: ModelParameterRule = { | |||||
| default: [], | |||||
| help: { | |||||
| en_US: 'Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.', | |||||
| zh_Hans: '最多四个序列,API 将停止生成更多的 token。返回的文本将不包含停止序列。', | |||||
| }, | |||||
| label: { | |||||
| en_US: 'Stop sequences', | |||||
| zh_Hans: '停止序列', | |||||
| }, | |||||
| name: 'stop', | |||||
| required: false, | |||||
| type: 'tag', | |||||
| tagPlaceholder: { | |||||
| en_US: 'Enter sequence and press Tab', | |||||
| zh_Hans: '输入序列并按 Tab 键', | |||||
| }, | |||||
| } | |||||
| type Props = { | type Props = { | ||||
| isAdvancedMode: boolean | isAdvancedMode: boolean | ||||
| provider: string | provider: string | ||||
| {!!parameterRules.length && ( | {!!parameterRules.length && ( | ||||
| [ | [ | ||||
| ...parameterRules, | ...parameterRules, | ||||
| ...(isAdvancedMode ? [stopParameterRule] : []), | |||||
| ...(isAdvancedMode ? [STOP_PARAMETER_RULE] : []), | |||||
| ].map(parameter => ( | ].map(parameter => ( | ||||
| <ParameterItem | <ParameterItem | ||||
| key={`${modelId}-${parameter.name}`} | key={`${modelId}-${parameter.name}`} |
| model.provider, | model.provider, | ||||
| model.modelId, | model.modelId, | ||||
| inputs.model.completion_params, | inputs.model.completion_params, | ||||
| true, | |||||
| ) | ) | ||||
| const keys = Object.keys(removedDetails) | const keys = Object.keys(removedDetails) | ||||
| if (keys.length) | if (keys.length) |
| import { PipelineInputVarType } from '@/models/pipeline' | import { PipelineInputVarType } from '@/models/pipeline' | ||||
| import { DatasetAttr } from '@/types/feature' | import { DatasetAttr } from '@/types/feature' | ||||
| import pkg from '../package.json' | import pkg from '../package.json' | ||||
| import type { ModelParameterRule } from '@/app/components/header/account-setting/model-provider-page/declarations' | |||||
| const getBooleanConfig = ( | const getBooleanConfig = ( | ||||
| envVar: string | undefined, | envVar: string | undefined, | ||||
| export const APP_VERSION = pkg.version | export const APP_VERSION = pkg.version | ||||
| export const RAG_PIPELINE_PREVIEW_CHUNK_NUM = 20 | export const RAG_PIPELINE_PREVIEW_CHUNK_NUM = 20 | ||||
| export const PROVIDER_WITH_PRESET_TONE = ['langgenius/openai/openai', 'langgenius/azure_openai/azure_openai'] | |||||
| export const STOP_PARAMETER_RULE: ModelParameterRule = { | |||||
| default: [], | |||||
| help: { | |||||
| en_US: 'Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.', | |||||
| zh_Hans: '最多四个序列,API 将停止生成更多的 token。返回的文本将不包含停止序列。', | |||||
| }, | |||||
| label: { | |||||
| en_US: 'Stop sequences', | |||||
| zh_Hans: '停止序列', | |||||
| }, | |||||
| name: 'stop', | |||||
| required: false, | |||||
| type: 'tag', | |||||
| tagPlaceholder: { | |||||
| en_US: 'Enter sequence and press Tab', | |||||
| zh_Hans: '输入序列并按 Tab 键', | |||||
| }, | |||||
| } |
| selectModelCredential: 'Select a model credential', | selectModelCredential: 'Select a model credential', | ||||
| customModelCredentialsDeleteTip: 'Credential is in use and cannot be deleted', | customModelCredentialsDeleteTip: 'Credential is in use and cannot be deleted', | ||||
| }, | }, | ||||
| parametersInvalidRemoved: 'Some parameters are invalid and have been removed', | |||||
| }, | }, | ||||
| dataSource: { | dataSource: { | ||||
| add: 'Add a data source', | add: 'Add a data source', |
| selectModelCredential: '选择模型凭据', | selectModelCredential: '选择模型凭据', | ||||
| customModelCredentialsDeleteTip: '模型凭据正在使用中,无法删除', | customModelCredentialsDeleteTip: '模型凭据正在使用中,无法删除', | ||||
| }, | }, | ||||
| parametersInvalidRemoved: '部分参数无效,已移除', | |||||
| }, | }, | ||||
| dataSource: { | dataSource: { | ||||
| add: '添加数据源', | add: '添加数据源', |
| export const mergeValidCompletionParams = ( | export const mergeValidCompletionParams = ( | ||||
| oldParams: FormValue | undefined, | oldParams: FormValue | undefined, | ||||
| rules: ModelParameterRule[], | rules: ModelParameterRule[], | ||||
| isAdvancedMode: boolean = false, | |||||
| ): { params: FormValue; removedDetails: Record<string, string> } => { | ): { params: FormValue; removedDetails: Record<string, string> } => { | ||||
| if (!oldParams || Object.keys(oldParams).length === 0) | if (!oldParams || Object.keys(oldParams).length === 0) | ||||
| return { params: {}, removedDetails: {} } | return { params: {}, removedDetails: {} } | ||||
| const removedDetails: Record<string, string> = {} | const removedDetails: Record<string, string> = {} | ||||
| Object.entries(oldParams).forEach(([key, value]) => { | Object.entries(oldParams).forEach(([key, value]) => { | ||||
| if (key === 'stop' && isAdvancedMode) { | |||||
| // keep stop in advanced mode | |||||
| nextParams[key] = value | |||||
| return | |||||
| } | |||||
| const rule = ruleMap[key] | const rule = ruleMap[key] | ||||
| if (!rule) { | if (!rule) { | ||||
| removedDetails[key] = 'unsupported' | removedDetails[key] = 'unsupported' | ||||
| provider: string, | provider: string, | ||||
| modelId: string, | modelId: string, | ||||
| oldParams: FormValue | undefined, | oldParams: FormValue | undefined, | ||||
| isAdvancedMode: boolean = false, | |||||
| ): Promise<{ params: FormValue; removedDetails: Record<string, string> }> => { | ): Promise<{ params: FormValue; removedDetails: Record<string, string> }> => { | ||||
| const { fetchModelParameterRules } = await import('@/service/common') | const { fetchModelParameterRules } = await import('@/service/common') | ||||
| const url = `/workspaces/current/model-providers/${provider}/models/parameter-rules?model=${modelId}` | const url = `/workspaces/current/model-providers/${provider}/models/parameter-rules?model=${modelId}` | ||||
| const { data: parameterRules } = await fetchModelParameterRules(url) | const { data: parameterRules } = await fetchModelParameterRules(url) | ||||
| return mergeValidCompletionParams(oldParams, parameterRules ?? []) | |||||
| return mergeValidCompletionParams(oldParams, parameterRules ?? [], isAdvancedMode) | |||||
| } | } |