mirror of
https://github.com/langgenius/dify.git
synced 2025-11-11 17:04:48 +00:00
fix: enhance model parameter handling with advanced mode support and localization updates (#25963)
This commit is contained in:
parent
bad59c95bc
commit
87394d2512
@ -464,6 +464,7 @@ const Configuration: FC = () => {
|
|||||||
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(', ')}` })
|
||||||
|
|||||||
@ -29,7 +29,7 @@ import {
|
|||||||
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 = {
|
||||||
@ -50,26 +50,7 @@ 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,
|
||||||
@ -230,7 +211,7 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
!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}`}
|
||||||
|
|||||||
@ -136,6 +136,7 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
provider,
|
provider,
|
||||||
model,
|
model,
|
||||||
value?.completion_params,
|
value?.completion_params,
|
||||||
|
isAdvancedMode,
|
||||||
)
|
)
|
||||||
nextCompletionParams = filtered
|
nextCompletionParams = filtered
|
||||||
|
|
||||||
|
|||||||
@ -10,29 +10,9 @@ import type {
|
|||||||
} 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
|
||||||
@ -108,7 +88,7 @@ const LLMParamsPanel = ({
|
|||||||
{!!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}`}
|
||||||
|
|||||||
@ -78,6 +78,7 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
|
|||||||
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)
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { PromptRole } from '@/models/debug'
|
|||||||
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,
|
||||||
@ -403,3 +404,24 @@ export const ZENDESK_FIELD_IDS = {
|
|||||||
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 键',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|||||||
@ -527,6 +527,7 @@ const translation = {
|
|||||||
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',
|
||||||
|
|||||||
@ -521,6 +521,7 @@ const translation = {
|
|||||||
selectModelCredential: '选择模型凭据',
|
selectModelCredential: '选择模型凭据',
|
||||||
customModelCredentialsDeleteTip: '模型凭据正在使用中,无法删除',
|
customModelCredentialsDeleteTip: '模型凭据正在使用中,无法删除',
|
||||||
},
|
},
|
||||||
|
parametersInvalidRemoved: '部分参数无效,已移除',
|
||||||
},
|
},
|
||||||
dataSource: {
|
dataSource: {
|
||||||
add: '添加数据源',
|
add: '添加数据源',
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import type { FormValue, ModelParameterRule } from '@/app/components/header/acco
|
|||||||
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: {} }
|
||||||
@ -16,6 +17,11 @@ export const mergeValidCompletionParams = (
|
|||||||
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'
|
||||||
@ -74,9 +80,10 @@ export const fetchAndMergeValidCompletionParams = async (
|
|||||||
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)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user