2023-06-01 23:19:36 +08:00
/* eslint-disable import/no-mutable-exports */
2024-04-08 18:51:46 +08:00
import { InputVarType } from '@/app/components/workflow/types'
2024-01-31 12:32:13 +08:00
import { AgentStrategy } from '@/types/app'
2024-04-08 21:36:27 +08:00
import { PromptRole } from '@/models/debug'
2023-05-15 08:51:32 +08:00
2023-06-01 23:19:36 +08:00
export let apiPrefix = ''
export let publicApiPrefix = ''
2023-05-15 08:51:32 +08:00
// NEXT_PUBLIC_API_PREFIX=/console/api NEXT_PUBLIC_PUBLIC_API_PREFIX=/api npm run start
if ( process . env . NEXT_PUBLIC_API_PREFIX && process . env . NEXT_PUBLIC_PUBLIC_API_PREFIX ) {
2023-06-01 23:19:36 +08:00
apiPrefix = process . env . NEXT_PUBLIC_API_PREFIX
publicApiPrefix = process . env . NEXT_PUBLIC_PUBLIC_API_PREFIX
}
else if (
globalThis . document ? . body ? . getAttribute ( 'data-api-prefix' )
&& globalThis . document ? . body ? . getAttribute ( 'data-pubic-api-prefix' )
2023-05-15 08:51:32 +08:00
) {
2024-05-09 13:49:19 +08:00
// Not build can not get env from process.env.NEXT_PUBLIC_ in browser https://nextjs.org/docs/basic-features/environment-variables#exposing-environment-variables-to-the-browser
2023-05-15 08:51:32 +08:00
apiPrefix = globalThis . document . body . getAttribute ( 'data-api-prefix' ) as string
publicApiPrefix = globalThis . document . body . getAttribute ( 'data-pubic-api-prefix' ) as string
2023-06-01 23:19:36 +08:00
}
else {
2024-01-31 12:32:13 +08:00
// const domainParts = globalThis.location?.host?.split('.');
// in production env, the host is dify.app . In other env, the host is [dev].dify.app
// const env = domainParts.length === 2 ? 'ai' : domainParts?.[0];
apiPrefix = 'http://localhost:5001/console/api'
publicApiPrefix = 'http://localhost:5001/api' // avoid browser private mode api cross origin
2023-05-15 08:51:32 +08:00
}
2023-06-01 23:19:36 +08:00
export const API_PREFIX : string = apiPrefix
export const PUBLIC_API_PREFIX : string = publicApiPrefix
2023-05-15 08:51:32 +08:00
2024-01-31 12:32:13 +08:00
const EDITION = process . env . NEXT_PUBLIC_EDITION || globalThis . document ? . body ? . getAttribute ( 'data-public-edition' ) || 'SELF_HOSTED'
2023-05-15 08:51:32 +08:00
export const IS_CE_EDITION = EDITION === 'SELF_HOSTED'
2024-06-06 15:01:58 +08:00
export const SUPPORT_MAIL_LOGIN = ! ! ( process . env . NEXT_PUBLIC_SUPPORT_MAIL_LOGIN || globalThis . document ? . body ? . getAttribute ( 'data-public-support-mail-login' ) )
2023-05-15 08:51:32 +08:00
export const TONE_LIST = [
{
id : 1 ,
name : 'Creative' ,
config : {
temperature : 0.8 ,
top_p : 0.9 ,
presence_penalty : 0.1 ,
frequency_penalty : 0.1 ,
} ,
} ,
{
id : 2 ,
name : 'Balanced' ,
config : {
temperature : 0.5 ,
top_p : 0.85 ,
presence_penalty : 0.2 ,
frequency_penalty : 0.3 ,
} ,
} ,
{
id : 3 ,
name : 'Precise' ,
config : {
temperature : 0.2 ,
top_p : 0.75 ,
presence_penalty : 0.5 ,
frequency_penalty : 0.5 ,
} ,
} ,
{
id : 4 ,
name : 'Custom' ,
} ,
]
2023-10-12 23:14:28 +08:00
export const DEFAULT_CHAT_PROMPT_CONFIG = {
2024-04-08 21:36:27 +08:00
prompt : [
{
role : PromptRole.system ,
text : '' ,
} ,
] ,
2023-10-12 23:14:28 +08:00
}
export const DEFAULT_COMPLETION_PROMPT_CONFIG = {
prompt : {
text : '' ,
} ,
conversation_histories_role : {
user_prefix : '' ,
assistant_prefix : '' ,
} ,
}
2023-09-10 00:12:34 +08:00
export const getMaxToken = ( modelId : string ) = > {
return ( modelId === 'gpt-4' || modelId === 'gpt-3.5-turbo-16k' ) ? 8000 : 4000
}
2023-05-15 08:51:32 +08:00
export const LOCALE_COOKIE_NAME = 'locale'
export const DEFAULT_VALUE_MAX_LEN = 48
2023-09-10 00:12:34 +08:00
export const DEFAULT_PARAGRAPH_VALUE_MAX_LEN = 1000
2023-05-15 08:51:32 +08:00
2023-06-01 23:19:36 +08:00
export const zhRegex = /^[\u4E00-\u9FA5]$/m
2023-05-22 10:39:51 +08:00
export const emojiRegex = /^[\uD800-\uDBFF][\uDC00-\uDFFF]$/m
export const emailRegex = /^[\w\.-]+@([\w-]+\.)+[\w-]{2,}$/m
2023-05-15 08:51:32 +08:00
const MAX_ZN_VAR_NAME_LENGHT = 8
2023-10-12 23:14:28 +08:00
const MAX_EN_VAR_VALUE_LENGHT = 30
2023-05-15 08:51:32 +08:00
export const getMaxVarNameLength = ( value : string ) = > {
2023-06-01 23:19:36 +08:00
if ( zhRegex . test ( value ) )
2023-05-15 08:51:32 +08:00
return MAX_ZN_VAR_NAME_LENGHT
2023-06-01 23:19:36 +08:00
2023-05-15 08:51:32 +08:00
return MAX_EN_VAR_VALUE_LENGHT
}
2023-10-12 23:14:28 +08:00
export const MAX_VAR_KEY_LENGHT = 30
export const MAX_PROMPT_MESSAGE_LENGTH = 10
2023-05-15 08:51:32 +08:00
export const VAR_ITEM_TEMPLATE = {
key : '' ,
name : '' ,
type : 'string' ,
max_length : DEFAULT_VALUE_MAX_LEN ,
2023-06-01 23:19:36 +08:00
required : true ,
2023-05-15 08:51:32 +08:00
}
2024-04-08 18:51:46 +08:00
export const VAR_ITEM_TEMPLATE_IN_WORKFLOW = {
variable : '' ,
label : '' ,
type : InputVarType . textInput ,
max_length : DEFAULT_VALUE_MAX_LEN ,
required : true ,
options : [ ] ,
}
2023-05-25 16:59:47 +08:00
export const appDefaultIconBackground = '#D5F5F6'
export const NEED_REFRESH_APP_LIST_KEY = 'needRefreshAppList'
2023-11-18 11:53:35 +08:00
export const DATASET_DEFAULT = {
top_k : 2 ,
score_threshold : 0.5 ,
}
2023-12-18 15:41:24 +08:00
export const APP_PAGE_LIMIT = 10
export const ANNOTATION_DEFAULT = {
score_threshold : 0.9 ,
}
2024-01-23 19:31:56 +08:00
2024-02-20 19:03:10 +08:00
export const MAX_TOOLS_NUM = 10
2024-01-23 19:31:56 +08:00
export const DEFAULT_AGENT_SETTING = {
enabled : false ,
max_iteration : 5 ,
strategy : AgentStrategy.functionCall ,
tools : [ ] ,
}
export const DEFAULT_AGENT_PROMPT = {
chat : ` Respond to the human as helpfully and accurately as possible.
{ { instruction } }
You have access to the following tools :
{ { tools } }
Use a json blob to specify a tool by providing an { { TOOL_NAME_KEY } } key ( tool name ) and an { { ACTION_INPUT_KEY } } key ( tool input ) .
Valid "{{TOOL_NAME_KEY}}" values : "Final Answer" or { { tool_names } }
Provide only ONE action per $JSON_BLOB , as shown :
\ ` \` \`
{
"{{TOOL_NAME_KEY}}" : $TOOL_NAME ,
"{{ACTION_INPUT_KEY}}" : $ACTION_INPUT
}
\ ` \` \`
Follow this format :
Question : input question to answer
Thought : consider previous and subsequent steps
Action :
\ ` \` \`
$JSON_BLOB
\ ` \` \`
Observation : action result
. . . ( repeat Thought / Action / Observation N times )
Thought : I know what to respond
Action :
\ ` \` \`
{
"{{TOOL_NAME_KEY}}" : "Final Answer" ,
"{{ACTION_INPUT_KEY}}" : "Final response to human"
}
\ ` \` \`
Begin ! Reminder to ALWAYS respond with a valid json blob of a single action . Use tools if necessary . Respond directly if appropriate . Format is Action : \ ` \` \` $ JSON_BLOB \` \` \` then Observation:. ` ,
completion : `
Respond to the human as helpfully and accurately as possible .
{ { instruction } }
You have access to the following tools :
{ { tools } }
Use a json blob to specify a tool by providing an { { TOOL_NAME_KEY } } key ( tool name ) and an { { ACTION_INPUT_KEY } } key ( tool input ) .
Valid "{{TOOL_NAME_KEY}}" values : "Final Answer" or { { tool_names } }
Provide only ONE action per $JSON_BLOB , as shown :
\ ` \` \`
{ { { {
"{{TOOL_NAME_KEY}}" : $TOOL_NAME ,
"{{ACTION_INPUT_KEY}}" : $ACTION_INPUT
} } } }
\ ` \` \`
Follow this format :
Question : input question to answer
Thought : consider previous and subsequent steps
Action :
\ ` \` \`
$JSON_BLOB
\ ` \` \`
Observation : action result
. . . ( repeat Thought / Action / Observation N times )
Thought : I know what to respond
Action :
\ ` \` \`
{ { { {
"{{TOOL_NAME_KEY}}" : "Final Answer" ,
"{{ACTION_INPUT_KEY}}" : "Final response to human"
} } } }
\ ` \` \`
Begin ! Reminder to ALWAYS respond with a valid json blob of a single action . Use tools if necessary . Respond directly if appropriate . Format is Action : \ ` \` \` $ JSON_BLOB \` \` \` then Observation:.
Question : { { query } }
Thought : { { agent_scratchpad } }
` ,
}
2024-04-08 18:51:46 +08:00
2024-04-24 11:41:12 +08:00
export const VAR_REGEX = /\{\{(#[a-zA-Z0-9_-]{1,50}(\.[a-zA-Z_][a-zA-Z0-9_]{0,29}){1,10}#)\}\}/gi