2023-06-01 23:19:36 +08:00
/* eslint-disable import/no-mutable-exports */
2024-01-23 19:31:56 +08:00
import { AgentStrategy , AppType , ProviderType } from '@/types/app'
2023-07-27 13:27:34 +08:00
2023-06-01 23:19:36 +08:00
const isDevelopment = process . env . NODE_ENV === 'development'
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
) {
// Not bulild 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
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 {
2023-05-15 08:51:32 +08:00
if ( isDevelopment ) {
2023-06-01 23:19:36 +08:00
apiPrefix = 'https://cloud.dify.dev/console/api'
publicApiPrefix = 'https://dev.udify.app/api'
}
else {
2023-05-15 08:51:32 +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];
2023-06-01 23:19:36 +08:00
apiPrefix = '/console/api'
publicApiPrefix = '/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
const EDITION = process . env . NEXT_PUBLIC_EDITION || globalThis . document ? . body ? . getAttribute ( 'data-public-edition' )
export const IS_CE_EDITION = EDITION === 'SELF_HOSTED'
2023-07-27 13:27:34 +08:00
export const MODEL_LIST = [
{ id : 'gpt-3.5-turbo' , name : 'gpt-3.5-turbo' , type : AppType . chat } ,
{ id : 'gpt-3.5-turbo-16k' , name : 'gpt-3.5-turbo-16k' , type : AppType . chat } ,
{ id : 'gpt-4' , name : 'gpt-4' , type : AppType . chat } , // 8k version
{ id : 'claude-instant-1' , name : 'claude-instant-1' , type : AppType . chat , provider : ProviderType.anthropic } , // set 30k
{ id : 'claude-2' , name : 'claude-2' , type : AppType . chat , provider : ProviderType.anthropic } , // set 30k
{ id : 'gpt-3.5-turbo' , name : 'gpt-3.5-turbo' , type : AppType . completion } ,
{ id : 'gpt-3.5-turbo-16k' , name : 'gpt-3.5-turbo-16k' , type : AppType . completion } ,
{ id : 'text-davinci-003' , name : 'text-davinci-003' , type : AppType . completion } ,
{ id : 'gpt-4' , name : 'gpt-4' , type : AppType . completion } , // 8k version
{ id : 'claude-instant-1' , name : 'claude-instant-1' , type : AppType . completion , provider : ProviderType.anthropic } , // set 30k
{ id : 'claude-2' , name : 'claude-2' , type : AppType . completion , provider : ProviderType.anthropic } , // set 30k
]
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 = {
prompt : [ ] ,
}
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
}
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
export const MAX_TOOLS_NUM = 5
export const DEFAULT_AGENT_SETTING = {
enabled : false ,
max_iteration : 5 ,
strategy : AgentStrategy.functionCall ,
tools : [ ] ,
}
2024-01-25 16:29:35 +08:00
export const supportFunctionCallModels = [ 'glm-3-turbo' , 'glm-4' ]
2024-01-23 19:31:56 +08:00
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 } }
` ,
}