diff --git a/README.md b/README.md index 7c194e065a..110d74b63d 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Dify is an open-source platform for developing LLM applications. Its intuitive i > - CPU >= 2 Core > - RAM >= 4 GiB -
+
The easiest way to start the Dify server is through [Docker Compose](docker/docker-compose.yaml). Before running Dify with the following commands, make sure that [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) are installed on your machine: @@ -109,15 +109,15 @@ All of Dify's offerings come with corresponding APIs, so you could effortlessly ## Using Dify -- **Cloud
** +- **Cloud
** We host a [Dify Cloud](https://dify.ai) service for anyone to try with zero setup. It provides all the capabilities of the self-deployed version, and includes 200 free GPT-4 calls in the sandbox plan. -- **Self-hosting Dify Community Edition
** +- **Self-hosting Dify Community Edition
** Quickly get Dify running in your environment with this [starter guide](#quick-start). Use our [documentation](https://docs.dify.ai) for further references and more in-depth instructions. -- **Dify for enterprise / organizations
** - We provide additional enterprise-centric features. [Log your questions for us through this chatbot](https://udify.app/chat/22L1zSxg6yW1cWQg) or [send us an email](mailto:business@dify.ai?subject=%5BGitHub%5DBusiness%20License%20Inquiry) to discuss enterprise needs.
+- **Dify for enterprise / organizations
** + We provide additional enterprise-centric features. [Log your questions for us through this chatbot](https://udify.app/chat/22L1zSxg6yW1cWQg) or [send us an email](mailto:business@dify.ai?subject=%5BGitHub%5DBusiness%20License%20Inquiry) to discuss enterprise needs.
> For startups and small businesses using AWS, check out [Dify Premium on AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6) and deploy it to your own AWS VPC with one click. It's an affordable AMI offering with the option to create apps with custom logo and branding. diff --git a/api/README.md b/api/README.md index e75ea3d354..ea6f547a0a 100644 --- a/api/README.md +++ b/api/README.md @@ -80,7 +80,7 @@ 1. If you need to handle and debug the async tasks (e.g. dataset importing and documents indexing), please start the worker service. ```bash -uv run celery -A app.celery worker -P gevent -c 2 --loglevel INFO -Q dataset,generation,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation +uv run celery -A app.celery worker -P gevent -c 2 --loglevel INFO -Q dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation ``` Additionally, if you want to debug the celery scheduled tasks, you can run the following command in another terminal to start the beat service: diff --git a/api/core/tools/workflow_as_tool/provider.py b/api/core/tools/workflow_as_tool/provider.py index d7afbc7389..c8e91413cd 100644 --- a/api/core/tools/workflow_as_tool/provider.py +++ b/api/core/tools/workflow_as_tool/provider.py @@ -31,6 +31,7 @@ VARIABLE_TO_PARAMETER_TYPE_MAPPING = { VariableEntityType.PARAGRAPH: ToolParameter.ToolParameterType.STRING, VariableEntityType.SELECT: ToolParameter.ToolParameterType.SELECT, VariableEntityType.NUMBER: ToolParameter.ToolParameterType.NUMBER, + VariableEntityType.CHECKBOX: ToolParameter.ToolParameterType.BOOLEAN, VariableEntityType.FILE: ToolParameter.ToolParameterType.FILE, VariableEntityType.FILE_LIST: ToolParameter.ToolParameterType.FILES, } diff --git a/api/core/workflow/graph_engine/event_management/event_handlers.py b/api/core/workflow/graph_engine/event_management/event_handlers.py index fe99d3ad50..b054ebd7ad 100644 --- a/api/core/workflow/graph_engine/event_management/event_handlers.py +++ b/api/core/workflow/graph_engine/event_management/event_handlers.py @@ -24,6 +24,7 @@ from core.workflow.graph_events import ( NodeRunLoopStartedEvent, NodeRunLoopSucceededEvent, NodeRunPauseRequestedEvent, + NodeRunRetrieverResourceEvent, NodeRunRetryEvent, NodeRunStartedEvent, NodeRunStreamChunkEvent, @@ -112,6 +113,7 @@ class EventHandler: @_dispatch.register(NodeRunLoopSucceededEvent) @_dispatch.register(NodeRunLoopFailedEvent) @_dispatch.register(NodeRunAgentLogEvent) + @_dispatch.register(NodeRunRetrieverResourceEvent) def _(self, event: GraphNodeEventBase) -> None: self._event_collector.collect(event) diff --git a/api/docker/entrypoint.sh b/api/docker/entrypoint.sh index 9f5a135a16..dfaaf712a5 100755 --- a/api/docker/entrypoint.sh +++ b/api/docker/entrypoint.sh @@ -62,7 +62,7 @@ if [[ "${MODE}" == "worker" ]]; then WORKER_POOL="${CELERY_WORKER_POOL:-${CELERY_WORKER_CLASS:-gevent}}" echo "Starting Celery worker with queues: ${DEFAULT_QUEUES}" - exec celery -A app.celery worker -P ${WORKER_POOL} $CONCURRENCY_OPTION \ + exec celery -A celery_entrypoint.celery worker -P ${WORKER_POOL} $CONCURRENCY_OPTION \ --max-tasks-per-child ${MAX_TASKS_PER_CHILD:-50} --loglevel ${LOG_LEVEL:-INFO} \ -Q ${DEFAULT_QUEUES} \ --prefetch-multiplier=${CELERY_PREFETCH_MULTIPLIER:-1} diff --git a/docker/.env.example b/docker/.env.example index 8d53cf9e22..82acda4bdf 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -316,7 +316,7 @@ REDIS_CLUSTERS_PASSWORD= # Celery Configuration # ------------------------------ -# Use standalone redis as the broker, and redis db 1 for celery broker. (redis_username is usually set by defualt as empty) +# Use standalone redis as the broker, and redis db 1 for celery broker. (redis_username is usually set by default as empty) # Format as follows: `redis://:@:/`. # Example: redis://:difyai123456@redis:6379/1 # If use Redis Sentinel, format as follows: `sentinel://:@:/` diff --git a/web/app/signin/normal-form.tsx b/web/app/signin/normal-form.tsx index 920a992b4f..29e21b8ba2 100644 --- a/web/app/signin/normal-form.tsx +++ b/web/app/signin/normal-form.tsx @@ -135,8 +135,8 @@ const NormalForm = () => { {!systemFeatures.branding.enabled &&

{t('login.joinTipStart')}{workspaceName}{t('login.joinTipEnd')}

} :
-

{t('login.pageTitle')}

- {!systemFeatures.branding.enabled &&

{t('login.welcome')}

} +

{systemFeatures.branding.enabled ? t('login.pageTitleForE') : t('login.pageTitle')}

+

{t('login.welcome')}

}
diff --git a/web/i18n/de-DE/login.ts b/web/i18n/de-DE/login.ts index a4c9165e23..4705a73087 100644 --- a/web/i18n/de-DE/login.ts +++ b/web/i18n/de-DE/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: 'Haben Sie kein Konto?', verifyMail: 'Fahren Sie mit dem Bestätigungscode fort', }, + pageTitleForE: 'Hey, lass uns anfangen!', } export default translation diff --git a/web/i18n/en-US/login.ts b/web/i18n/en-US/login.ts index 6015098022..dd923db217 100644 --- a/web/i18n/en-US/login.ts +++ b/web/i18n/en-US/login.ts @@ -1,5 +1,6 @@ const translation = { pageTitle: 'Log in to Dify', + pageTitleForE: 'Hey, let\'s get started!', welcome: '👋 Welcome! Please log in to get started.', email: 'Email address', emailPlaceholder: 'Your email', diff --git a/web/i18n/es-ES/login.ts b/web/i18n/es-ES/login.ts index ba8ad292cc..cbc223e7da 100644 --- a/web/i18n/es-ES/login.ts +++ b/web/i18n/es-ES/login.ts @@ -120,6 +120,7 @@ const translation = { welcome: '👋 ¡Bienvenido! Por favor, completa los detalles para comenzar.', verifyMail: 'Continuar con el código de verificación', }, + pageTitleForE: '¡Hola, vamos a empezar!', } export default translation diff --git a/web/i18n/fa-IR/login.ts b/web/i18n/fa-IR/login.ts index b57687cf5d..83382f3c9d 100644 --- a/web/i18n/fa-IR/login.ts +++ b/web/i18n/fa-IR/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: 'حساب کاربری ندارید؟', verifyMail: 'ادامه با کد تأیید', }, + pageTitleForE: 'هی، بیا شروع کنیم!', } export default translation diff --git a/web/i18n/fr-FR/login.ts b/web/i18n/fr-FR/login.ts index deae8e3ff4..3abb6fba2a 100644 --- a/web/i18n/fr-FR/login.ts +++ b/web/i18n/fr-FR/login.ts @@ -120,6 +120,7 @@ const translation = { verifyMail: 'Continuez avec le code de vérification', createAccount: 'Créez votre compte', }, + pageTitleForE: 'Hé, commençons !', } export default translation diff --git a/web/i18n/hi-IN/login.ts b/web/i18n/hi-IN/login.ts index fee51208c7..27b7df9849 100644 --- a/web/i18n/hi-IN/login.ts +++ b/web/i18n/hi-IN/login.ts @@ -125,6 +125,7 @@ const translation = { welcome: '👋 स्वागत है! कृपया शुरू करने के लिए विवरण भरें।', haveAccount: 'क्या आपका पहले से एक खाता है?', }, + pageTitleForE: 'अरे, चलो शुरू करें!', } export default translation diff --git a/web/i18n/id-ID/login.ts b/web/i18n/id-ID/login.ts index 41c7e04ec4..1590aa81a2 100644 --- a/web/i18n/id-ID/login.ts +++ b/web/i18n/id-ID/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: 'Tidak punya akun?', welcome: '👋 Selamat datang! Silakan isi detail untuk memulai.', }, + pageTitleForE: 'Hei, ayo kita mulai!', } export default translation diff --git a/web/i18n/it-IT/login.ts b/web/i18n/it-IT/login.ts index 5d6b040daf..e19baca6a3 100644 --- a/web/i18n/it-IT/login.ts +++ b/web/i18n/it-IT/login.ts @@ -130,6 +130,7 @@ const translation = { signUp: 'Iscriviti', welcome: '👋 Benvenuto! Per favore compila i dettagli per iniziare.', }, + pageTitleForE: 'Ehi, cominciamo!', } export default translation diff --git a/web/i18n/ja-JP/login.ts b/web/i18n/ja-JP/login.ts index d1e9a9e0e2..7069315c9d 100644 --- a/web/i18n/ja-JP/login.ts +++ b/web/i18n/ja-JP/login.ts @@ -1,5 +1,6 @@ const translation = { pageTitle: 'Dify にログイン', + pageTitleForE: 'はじめましょう!', welcome: '👋 ようこそ!まずはログインしてご利用ください。', email: 'メールアドレス', emailPlaceholder: 'メールアドレスを入力してください', diff --git a/web/i18n/ko-KR/login.ts b/web/i18n/ko-KR/login.ts index 8cde21472c..6d3d47a602 100644 --- a/web/i18n/ko-KR/login.ts +++ b/web/i18n/ko-KR/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: '계정이 없으신가요?', welcome: '👋 환영합니다! 시작하려면 세부 정보를 입력해 주세요.', }, + pageTitleForE: '이봐, 시작하자!', } export default translation diff --git a/web/i18n/pl-PL/login.ts b/web/i18n/pl-PL/login.ts index 394fe6c402..34519cd2b3 100644 --- a/web/i18n/pl-PL/login.ts +++ b/web/i18n/pl-PL/login.ts @@ -125,6 +125,7 @@ const translation = { haveAccount: 'Masz już konto?', welcome: '👋 Witaj! Proszę wypełnić szczegóły, aby rozpocząć.', }, + pageTitleForE: 'Hej, zaczynajmy!', } export default translation diff --git a/web/i18n/pt-BR/login.ts b/web/i18n/pt-BR/login.ts index 200e7bf30c..4fa9f36146 100644 --- a/web/i18n/pt-BR/login.ts +++ b/web/i18n/pt-BR/login.ts @@ -120,6 +120,7 @@ const translation = { signUp: 'Inscreva-se', welcome: '👋 Bem-vindo! Por favor, preencha os detalhes para começar.', }, + pageTitleForE: 'Ei, vamos começar!', } export default translation diff --git a/web/i18n/ro-RO/login.ts b/web/i18n/ro-RO/login.ts index 34cd4a5ffd..f676b812cb 100644 --- a/web/i18n/ro-RO/login.ts +++ b/web/i18n/ro-RO/login.ts @@ -120,6 +120,7 @@ const translation = { createAccount: 'Creează-ți contul', welcome: '👋 Buna! Te rugăm să completezi detaliile pentru a începe.', }, + pageTitleForE: 'Hei, hai să începem!', } export default translation diff --git a/web/i18n/ru-RU/login.ts b/web/i18n/ru-RU/login.ts index bfb2860b57..f864bdb845 100644 --- a/web/i18n/ru-RU/login.ts +++ b/web/i18n/ru-RU/login.ts @@ -120,6 +120,7 @@ const translation = { verifyMail: 'Продолжите с кодом проверки', welcome: '👋 Добро пожаловать! Пожалуйста, заполните данные, чтобы начать.', }, + pageTitleForE: 'Привет, давай начнем!', } export default translation diff --git a/web/i18n/sl-SI/login.ts b/web/i18n/sl-SI/login.ts index 4e5b12689d..81f280666b 100644 --- a/web/i18n/sl-SI/login.ts +++ b/web/i18n/sl-SI/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: 'Nimate računa?', welcome: '👋 Dobrodošli! Prosimo, izpolnite podatke, da začnete.', }, + pageTitleForE: 'Hej, začnimo!', } export default translation diff --git a/web/i18n/th-TH/login.ts b/web/i18n/th-TH/login.ts index 732af8a875..517eee95a2 100644 --- a/web/i18n/th-TH/login.ts +++ b/web/i18n/th-TH/login.ts @@ -120,6 +120,7 @@ const translation = { verifyMail: 'โปรดดำเนินการต่อด้วยรหัสการตรวจสอบ', haveAccount: 'มีบัญชีอยู่แล้วใช่ไหม?', }, + pageTitleForE: 'เฮ้ เรามาเริ่มกันเถอะ!', } export default translation diff --git a/web/i18n/tr-TR/login.ts b/web/i18n/tr-TR/login.ts index b8bd6d74af..d6ada5f950 100644 --- a/web/i18n/tr-TR/login.ts +++ b/web/i18n/tr-TR/login.ts @@ -120,6 +120,7 @@ const translation = { haveAccount: 'Zaten bir hesabınız var mı?', welcome: '👋 Hoş geldiniz! Başlamak için lütfen detayları doldurun.', }, + pageTitleForE: 'Hey, haydi başlayalım!', } export default translation diff --git a/web/i18n/uk-UA/login.ts b/web/i18n/uk-UA/login.ts index 1fa4d414f7..1a1a6d7068 100644 --- a/web/i18n/uk-UA/login.ts +++ b/web/i18n/uk-UA/login.ts @@ -120,6 +120,7 @@ const translation = { noAccount: 'Не маєте облікового запису?', welcome: '👋 Ласкаво просимо! Будь ласка, заповніть деталі, щоб почати.', }, + pageTitleForE: 'Гей, давай почнемо!', } export default translation diff --git a/web/i18n/vi-VN/login.ts b/web/i18n/vi-VN/login.ts index 6d877fffef..dec7eddee2 100644 --- a/web/i18n/vi-VN/login.ts +++ b/web/i18n/vi-VN/login.ts @@ -120,6 +120,7 @@ const translation = { verifyMail: 'Tiếp tục với mã xác minh', welcome: '👋 Chào mừng! Vui lòng điền vào các chi tiết để bắt đầu.', }, + pageTitleForE: 'Này, hãy bắt đầu nào!', } export default translation diff --git a/web/i18n/zh-Hans/login.ts b/web/i18n/zh-Hans/login.ts index 82c6b355f9..13a75eaaaa 100644 --- a/web/i18n/zh-Hans/login.ts +++ b/web/i18n/zh-Hans/login.ts @@ -1,5 +1,6 @@ const translation = { pageTitle: '登录 Dify', + pageTitleForE: '嗨,近来可好', welcome: '👋 欢迎!请登录以开始使用。', email: '邮箱', emailPlaceholder: '输入邮箱地址', diff --git a/web/i18n/zh-Hant/login.ts b/web/i18n/zh-Hant/login.ts index 0e7608140f..56150a0ed3 100644 --- a/web/i18n/zh-Hant/login.ts +++ b/web/i18n/zh-Hant/login.ts @@ -1,5 +1,6 @@ const translation = { pageTitle: '嗨,近來可好', + pageTitleForE: '嗨,近來可好', welcome: '👋 歡迎來到 Dify, 登入以繼續', email: '郵箱', emailPlaceholder: '輸入郵箱地址',