Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dify
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tech
dify
Commits
a07a6d8c
Unverified
Commit
a07a6d8c
authored
Oct 13, 2023
by
Joel
Committed by
GitHub
Oct 13, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: switch to generation model set default stop word (#1341)
parent
695841a3
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
83 additions
and
17 deletions
+83
-17
index.tsx
web/app/components/app/configuration/config-model/index.tsx
+2
-0
use-advanced-prompt-config.ts
...nts/app/configuration/hooks/use-advanced-prompt-config.ts
+20
-3
prompt.svg
web/app/components/app/configuration/images/prompt.svg
+19
-0
index.tsx
web/app/components/app/configuration/index.tsx
+30
-9
style.module.css
web/app/components/app/configuration/style.module.css
+7
-0
app-debug.en.ts
web/i18n/lang/app-debug.en.ts
+2
-2
app-debug.zh.ts
web/i18n/lang/app-debug.zh.ts
+2
-2
debug.ts
web/service/debug.ts
+1
-1
No files found.
web/app/components/app/configuration/config-model/index.tsx
View file @
a07a6d8c
...
@@ -224,6 +224,8 @@ const ConfigModel: FC<IConfigModelProps> = ({
...
@@ -224,6 +224,8 @@ const ConfigModel: FC<IConfigModelProps> = ({
const
handleParamChange
=
(
key
:
string
,
value
:
number
|
string
[])
=>
{
const
handleParamChange
=
(
key
:
string
,
value
:
number
|
string
[])
=>
{
if
(
value
===
undefined
)
if
(
value
===
undefined
)
return
return
if
((
completionParams
as
any
)[
key
]
===
value
)
return
if
(
key
===
'stop'
)
{
if
(
key
===
'stop'
)
{
onCompletionParamsChange
({
onCompletionParamsChange
({
...
...
web/app/components/app/configuration/hooks/use-advanced-prompt-config.ts
View file @
a07a6d8c
import
{
useState
}
from
'react'
import
{
useState
}
from
'react'
import
{
clone
}
from
'lodash-es'
import
{
clone
}
from
'lodash-es'
import
produce
from
'immer'
import
produce
from
'immer'
import
type
{
ChatPromptConfig
,
CompletionPromptConfig
,
ConversationHistoriesRole
,
PromptItem
}
from
'@/models/debug'
import
type
{
ChatPromptConfig
,
CompletionP
arams
,
CompletionP
romptConfig
,
ConversationHistoriesRole
,
PromptItem
}
from
'@/models/debug'
import
{
PromptMode
}
from
'@/models/debug'
import
{
PromptMode
}
from
'@/models/debug'
import
{
AppType
,
ModelModeType
}
from
'@/types/app'
import
{
AppType
,
ModelModeType
}
from
'@/types/app'
import
{
DEFAULT_CHAT_PROMPT_CONFIG
,
DEFAULT_COMPLETION_PROMPT_CONFIG
}
from
'@/config'
import
{
DEFAULT_CHAT_PROMPT_CONFIG
,
DEFAULT_COMPLETION_PROMPT_CONFIG
}
from
'@/config'
...
@@ -16,6 +16,9 @@ type Param = {
...
@@ -16,6 +16,9 @@ type Param = {
prePrompt
:
string
prePrompt
:
string
onUserChangedPrompt
:
()
=>
void
onUserChangedPrompt
:
()
=>
void
hasSetDataSet
:
boolean
hasSetDataSet
:
boolean
completionParams
:
CompletionParams
setCompletionParams
:
(
params
:
CompletionParams
)
=>
void
setStop
:
(
stop
:
string
[])
=>
void
}
}
const
useAdvancedPromptConfig
=
({
const
useAdvancedPromptConfig
=
({
...
@@ -26,6 +29,9 @@ const useAdvancedPromptConfig = ({
...
@@ -26,6 +29,9 @@ const useAdvancedPromptConfig = ({
prePrompt
,
prePrompt
,
onUserChangedPrompt
,
onUserChangedPrompt
,
hasSetDataSet
,
hasSetDataSet
,
completionParams
,
setCompletionParams
,
setStop
,
}:
Param
)
=>
{
}:
Param
)
=>
{
const
isAdvancedPrompt
=
promptMode
===
PromptMode
.
advanced
const
isAdvancedPrompt
=
promptMode
===
PromptMode
.
advanced
const
[
chatPromptConfig
,
setChatPromptConfig
]
=
useState
<
ChatPromptConfig
>
(
clone
(
DEFAULT_CHAT_PROMPT_CONFIG
))
const
[
chatPromptConfig
,
setChatPromptConfig
]
=
useState
<
ChatPromptConfig
>
(
clone
(
DEFAULT_CHAT_PROMPT_CONFIG
))
...
@@ -98,7 +104,7 @@ const useAdvancedPromptConfig = ({
...
@@ -98,7 +104,7 @@ const useAdvancedPromptConfig = ({
const
mode
=
modelModeType
const
mode
=
modelModeType
const
toReplacePrePrompt
=
prePrompt
||
''
const
toReplacePrePrompt
=
prePrompt
||
''
if
(
!
isAdvancedPrompt
)
{
if
(
!
isAdvancedPrompt
)
{
const
{
chat_prompt_config
,
completion_prompt_config
}
=
await
fetchPromptTemplate
({
const
{
chat_prompt_config
,
completion_prompt_config
,
stop
}
=
await
fetchPromptTemplate
({
appMode
,
appMode
,
mode
,
mode
,
modelName
,
modelName
,
...
@@ -121,12 +127,16 @@ const useAdvancedPromptConfig = ({
...
@@ -121,12 +127,16 @@ const useAdvancedPromptConfig = ({
draft
.
prompt
.
text
=
draft
.
prompt
.
text
.
replace
(
PRE_PROMPT_PLACEHOLDER_TEXT
,
toReplacePrePrompt
)
draft
.
prompt
.
text
=
draft
.
prompt
.
text
.
replace
(
PRE_PROMPT_PLACEHOLDER_TEXT
,
toReplacePrePrompt
)
})
})
setCompletionPromptConfig
(
newPromptConfig
)
setCompletionPromptConfig
(
newPromptConfig
)
setCompletionParams
({
...
completionParams
,
stop
,
})
}
}
return
return
}
}
if
(
isMigrateToCompetition
)
{
if
(
isMigrateToCompetition
)
{
const
{
completion_prompt_config
,
chat_prompt_config
}
=
await
fetchPromptTemplate
({
const
{
completion_prompt_config
,
chat_prompt_config
,
stop
}
=
await
fetchPromptTemplate
({
appMode
,
appMode
,
mode
:
toModelModeType
as
ModelModeType
,
mode
:
toModelModeType
as
ModelModeType
,
modelName
,
modelName
,
...
@@ -145,6 +155,13 @@ const useAdvancedPromptConfig = ({
...
@@ -145,6 +155,13 @@ const useAdvancedPromptConfig = ({
draft
.
conversation_histories_role
=
completionPromptConfig
.
conversation_histories_role
draft
.
conversation_histories_role
=
completionPromptConfig
.
conversation_histories_role
})
})
setCompletionPromptConfig
(
newPromptConfig
)
setCompletionPromptConfig
(
newPromptConfig
)
if
(
!
completionParams
.
stop
||
completionParams
.
stop
.
length
===
0
)
{
setCompletionParams
({
...
completionParams
,
stop
,
})
}
setStop
(
stop
)
// switch mode's params is async. It may override the stop value.
}
}
else
{
else
{
const
newPromptConfig
=
produce
(
chat_prompt_config
,
(
draft
)
=>
{
const
newPromptConfig
=
produce
(
chat_prompt_config
,
(
draft
)
=>
{
...
...
web/app/components/app/configuration/images/prompt.svg
0 → 100644
View file @
a07a6d8c
This diff is collapsed.
Click to expand it.
web/app/components/app/configuration/index.tsx
View file @
a07a6d8c
'use client'
'use client'
import
type
{
FC
}
from
'react'
import
type
{
FC
}
from
'react'
import
React
,
{
useEffect
,
useState
}
from
'react'
import
React
,
{
useEffect
,
use
Ref
,
use
State
}
from
'react'
import
{
useTranslation
}
from
'react-i18next'
import
{
useTranslation
}
from
'react-i18next'
import
{
useContext
}
from
'use-context-selector'
import
{
useContext
}
from
'use-context-selector'
import
{
usePathname
}
from
'next/navigation'
import
{
usePathname
}
from
'next/navigation'
import
produce
from
'immer'
import
produce
from
'immer'
import
{
useBoolean
}
from
'ahooks'
import
{
useBoolean
,
useGetState
}
from
'ahooks'
import
cn
from
'classnames'
import
cn
from
'classnames'
import
{
clone
,
isEqual
}
from
'lodash-es'
import
{
clone
,
isEqual
}
from
'lodash-es'
import
Button
from
'../../base/button'
import
Button
from
'../../base/button'
...
@@ -33,6 +33,7 @@ import { FlipBackward } from '@/app/components/base/icons/src/vender/line/arrows
...
@@ -33,6 +33,7 @@ import { FlipBackward } from '@/app/components/base/icons/src/vender/line/arrows
import
{
PromptMode
}
from
'@/models/debug'
import
{
PromptMode
}
from
'@/models/debug'
import
{
DEFAULT_CHAT_PROMPT_CONFIG
,
DEFAULT_COMPLETION_PROMPT_CONFIG
}
from
'@/config'
import
{
DEFAULT_CHAT_PROMPT_CONFIG
,
DEFAULT_COMPLETION_PROMPT_CONFIG
}
from
'@/config'
import
SelectDataSet
from
'@/app/components/app/configuration/dataset-config/select-dataset'
import
SelectDataSet
from
'@/app/components/app/configuration/dataset-config/select-dataset'
import
I18n
from
'@/context/i18n'
type
PublichConfig
=
{
type
PublichConfig
=
{
modelConfig
:
ModelConfig
modelConfig
:
ModelConfig
...
@@ -74,13 +75,26 @@ const Configuration: FC = () => {
...
@@ -74,13 +75,26 @@ const Configuration: FC = () => {
const
[
formattingChanged
,
setFormattingChanged
]
=
useState
(
false
)
const
[
formattingChanged
,
setFormattingChanged
]
=
useState
(
false
)
const
[
inputs
,
setInputs
]
=
useState
<
Inputs
>
({})
const
[
inputs
,
setInputs
]
=
useState
<
Inputs
>
({})
const
[
query
,
setQuery
]
=
useState
(
''
)
const
[
query
,
setQuery
]
=
useState
(
''
)
const
[
completionParams
,
s
etCompletionParams
]
=
useState
<
CompletionParams
>
({
const
[
completionParams
,
doS
etCompletionParams
]
=
useState
<
CompletionParams
>
({
max_tokens
:
16
,
max_tokens
:
16
,
temperature
:
1
,
// 0-2
temperature
:
1
,
// 0-2
top_p
:
1
,
top_p
:
1
,
presence_penalty
:
1
,
// -2-2
presence_penalty
:
1
,
// -2-2
frequency_penalty
:
1
,
// -2-2
frequency_penalty
:
1
,
// -2-2
stop
:
[],
})
})
const
[
tempStop
,
setTempStop
,
getTempStop
]
=
useGetState
<
string
[]
>
([])
const
setCompletionParams
=
(
value
:
CompletionParams
)
=>
{
const
params
=
{
...
value
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
if
((
!
params
.
stop
||
params
.
stop
.
length
===
0
)
&&
(
modeModeTypeRef
.
current
===
ModelModeType
.
completion
))
{
params
.
stop
=
getTempStop
()
setTempStop
([])
}
doSetCompletionParams
(
params
)
}
const
[
modelConfig
,
doSetModelConfig
]
=
useState
<
ModelConfig
>
({
const
[
modelConfig
,
doSetModelConfig
]
=
useState
<
ModelConfig
>
({
provider
:
ProviderEnum
.
openai
,
provider
:
ProviderEnum
.
openai
,
model_id
:
'gpt-3.5-turbo'
,
model_id
:
'gpt-3.5-turbo'
,
...
@@ -110,6 +124,10 @@ const Configuration: FC = () => {
...
@@ -110,6 +124,10 @@ const Configuration: FC = () => {
}
}
const
modelModeType
=
modelConfig
.
mode
const
modelModeType
=
modelConfig
.
mode
const
modeModeTypeRef
=
useRef
(
modelModeType
)
useEffect
(()
=>
{
modeModeTypeRef
.
current
=
modelModeType
},
[
modelModeType
])
const
[
dataSets
,
setDataSets
]
=
useState
<
DataSet
[]
>
([])
const
[
dataSets
,
setDataSets
]
=
useState
<
DataSet
[]
>
([])
const
contextVar
=
modelConfig
.
configs
.
prompt_variables
.
find
(
item
=>
item
.
is_context_var
)?.
key
const
contextVar
=
modelConfig
.
configs
.
prompt_variables
.
find
(
item
=>
item
.
is_context_var
)?.
key
...
@@ -197,7 +215,7 @@ const Configuration: FC = () => {
...
@@ -197,7 +215,7 @@ const Configuration: FC = () => {
const
hasSetAPIKEY
=
hasSetCustomAPIKEY
||
!
isTrailFinished
const
hasSetAPIKEY
=
hasSetCustomAPIKEY
||
!
isTrailFinished
const
[
isShowSetAPIKey
,
{
setTrue
:
showSetAPIKey
,
setFalse
:
hideSetAPIkey
}]
=
useBoolean
()
const
[
isShowSetAPIKey
,
{
setTrue
:
showSetAPIKey
,
setFalse
:
hideSetAPIkey
}]
=
useBoolean
()
const
[
promptMode
,
doSetPromptMode
]
=
useState
(
PromptMode
.
advanced
)
const
[
promptMode
,
doSetPromptMode
]
=
useState
(
PromptMode
.
simple
)
const
isAdvancedMode
=
promptMode
===
PromptMode
.
advanced
const
isAdvancedMode
=
promptMode
===
PromptMode
.
advanced
const
[
canReturnToSimpleMode
,
setCanReturnToSimpleMode
]
=
useState
(
true
)
const
[
canReturnToSimpleMode
,
setCanReturnToSimpleMode
]
=
useState
(
true
)
const
setPromptMode
=
async
(
mode
:
PromptMode
)
=>
{
const
setPromptMode
=
async
(
mode
:
PromptMode
)
=>
{
...
@@ -230,6 +248,9 @@ const Configuration: FC = () => {
...
@@ -230,6 +248,9 @@ const Configuration: FC = () => {
onUserChangedPrompt
:
()
=>
{
onUserChangedPrompt
:
()
=>
{
setCanReturnToSimpleMode
(
false
)
setCanReturnToSimpleMode
(
false
)
},
},
completionParams
,
setCompletionParams
,
setStop
:
setTempStop
,
})
})
const
setModel
=
async
({
const
setModel
=
async
({
...
@@ -449,6 +470,7 @@ const Configuration: FC = () => {
...
@@ -449,6 +470,7 @@ const Configuration: FC = () => {
const
[
showUseGPT4Confirm
,
setShowUseGPT4Confirm
]
=
useState
(
false
)
const
[
showUseGPT4Confirm
,
setShowUseGPT4Confirm
]
=
useState
(
false
)
const
[
showSetAPIKeyModal
,
setShowSetAPIKeyModal
]
=
useState
(
false
)
const
[
showSetAPIKeyModal
,
setShowSetAPIKeyModal
]
=
useState
(
false
)
const
{
locale
}
=
useContext
(
I18n
)
if
(
isLoading
)
{
if
(
isLoading
)
{
return
<
div
className=
'flex h-full items-center justify-center'
>
return
<
div
className=
'flex h-full items-center justify-center'
>
...
@@ -513,10 +535,9 @@ const Configuration: FC = () => {
...
@@ -513,10 +535,9 @@ const Configuration: FC = () => {
<>
<>
<
div
className=
"flex flex-col h-full"
>
<
div
className=
"flex flex-col h-full"
>
<
div
className=
'flex items-center justify-between px-6 shrink-0 h-14'
>
<
div
className=
'flex items-center justify-between px-6 shrink-0 h-14'
>
<
div
>
<
div
className=
'flex items-end'
>
<
div
className=
'italic text-base font-bold text-gray-900 leading-[18px]'
>
{
t
(
'appDebug.pageTitle.line1'
)
}
</
div
>
<
div
className=
{
s
.
promptTitle
}
></
div
>
<
div
className=
'flex items-center h-6 space-x-1 text-xs'
>
<
div
className=
'flex items-center h-[14px] space-x-1 text-xs'
>
<
div
className=
'text-gray-500 font-medium italic'
>
{
t
(
'appDebug.pageTitle.line2'
)
}
</
div
>
{
/* modelModeType missing can not load template */
}
{
/* modelModeType missing can not load template */
}
{
(
!
isAdvancedMode
&&
modelModeType
)
&&
(
{
(
!
isAdvancedMode
&&
modelModeType
)
&&
(
<
div
<
div
...
@@ -528,7 +549,7 @@ const Configuration: FC = () => {
...
@@ -528,7 +549,7 @@ const Configuration: FC = () => {
)
}
)
}
{
isAdvancedMode
&&
(
{
isAdvancedMode
&&
(
<
div
className=
'flex items-center space-x-2'
>
<
div
className=
'flex items-center space-x-2'
>
<
div
className=
{
`${s.advancedPromptMode} italic text-indigo-600`
}
>
{
t
(
'appDebug.promptMode.advanced'
)
}
</
div
>
<
div
className=
{
cn
(
locale
===
'en'
&&
'italic'
,
`${s.advancedPromptMode} text-indigo-600`
)
}
>
{
t
(
'appDebug.promptMode.advanced'
)
}
</
div
>
{
canReturnToSimpleMode
&&
(
{
canReturnToSimpleMode
&&
(
<
div
<
div
onClick=
{
()
=>
setPromptMode
(
PromptMode
.
simple
)
}
onClick=
{
()
=>
setPromptMode
(
PromptMode
.
simple
)
}
...
...
web/app/components/app/configuration/style.module.css
View file @
a07a6d8c
.promptTitle
{
width
:
72px
;
height
:
31px
;
background
:
url(./images/prompt.svg)
no-repeat
0
0
;
background-size
:
contain
;
}
.advancedPromptMode
{
.advancedPromptMode
{
position
:
relative
;
position
:
relative
;
}
}
...
...
web/i18n/lang/app-debug.en.ts
View file @
a07a6d8c
...
@@ -4,12 +4,12 @@ const translation = {
...
@@ -4,12 +4,12 @@ const translation = {
line2
:
'Engineering'
,
line2
:
'Engineering'
,
},
},
promptMode
:
{
promptMode
:
{
simple
:
'Switch to Advanced Mode to edit the
built-in
PROMPT'
,
simple
:
'Switch to Advanced Mode to edit the
whole
PROMPT'
,
advanced
:
'Advanced Mode'
,
advanced
:
'Advanced Mode'
,
switchBack
:
'Switch back'
,
switchBack
:
'Switch back'
,
advancedWarning
:
{
advancedWarning
:
{
title
:
'You have switched to Advanced Mode, and once you modify the PROMPT, you CANNOT return to the simple mode.'
,
title
:
'You have switched to Advanced Mode, and once you modify the PROMPT, you CANNOT return to the simple mode.'
,
description
:
'In Advanced Mode, you can edit
built-in
PROMPT.'
,
description
:
'In Advanced Mode, you can edit
whole
PROMPT.'
,
learnMore
:
'Learn more'
,
learnMore
:
'Learn more'
,
ok
:
'OK'
,
ok
:
'OK'
,
},
},
...
...
web/i18n/lang/app-debug.zh.ts
View file @
a07a6d8c
...
@@ -4,12 +4,12 @@ const translation = {
...
@@ -4,12 +4,12 @@ const translation = {
line2
:
'编排'
,
line2
:
'编排'
,
},
},
promptMode
:
{
promptMode
:
{
simple
:
'切换到高级模式以编辑
内置
的提示词'
,
simple
:
'切换到高级模式以编辑
完整
的提示词'
,
advanced
:
'高级模式'
,
advanced
:
'高级模式'
,
switchBack
:
'返回简单模式'
,
switchBack
:
'返回简单模式'
,
advancedWarning
:
{
advancedWarning
:
{
title
:
'您已切换到高级模式,一旦修改提示词,将无法返回简单模式。'
,
title
:
'您已切换到高级模式,一旦修改提示词,将无法返回简单模式。'
,
description
:
'在高级模式下,您可以编辑
内置
的提示词。'
,
description
:
'在高级模式下,您可以编辑
完整
的提示词。'
,
learnMore
:
'了解更多'
,
learnMore
:
'了解更多'
,
ok
:
'确定'
,
ok
:
'确定'
,
},
},
...
...
web/service/debug.ts
View file @
a07a6d8c
...
@@ -73,7 +73,7 @@ export const fetchPromptTemplate = ({
...
@@ -73,7 +73,7 @@ export const fetchPromptTemplate = ({
modelName
,
modelName
,
hasSetDataSet
,
hasSetDataSet
,
}:
{
appMode
:
string
;
mode
:
ModelModeType
;
modelName
:
string
;
hasSetDataSet
:
boolean
})
=>
{
}:
{
appMode
:
string
;
mode
:
ModelModeType
;
modelName
:
string
;
hasSetDataSet
:
boolean
})
=>
{
return
get
<
Promise
<
{
chat_prompt_config
:
ChatPromptConfig
;
completion_prompt_config
:
CompletionPromptConfig
}
>>
(
'/app/prompt-templates'
,
{
return
get
<
Promise
<
{
chat_prompt_config
:
ChatPromptConfig
;
completion_prompt_config
:
CompletionPromptConfig
;
stop
:
[]
}
>>
(
'/app/prompt-templates'
,
{
params
:
{
params
:
{
app_mode
:
appMode
,
app_mode
:
appMode
,
model_mode
:
mode
,
model_mode
:
mode
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment