mirror of https://github.com/langgenius/dify.git
Merge remote-tracking branch 'origin/main' into feat/trigger
This commit is contained in:
commit
f7853f3b27
10
README.md
10
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
|
||||
|
||||
</br>
|
||||
<br/>
|
||||
|
||||
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 </br>**
|
||||
- **Cloud <br/>**
|
||||
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</br>**
|
||||
- **Self-hosting Dify Community Edition<br/>**
|
||||
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</br>**
|
||||
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. </br>
|
||||
- **Dify for enterprise / organizations<br/>**
|
||||
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. <br/>
|
||||
|
||||
> 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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>`.
|
||||
# Example: redis://:difyai123456@redis:6379/1
|
||||
# If use Redis Sentinel, format as follows: `sentinel://<redis_username>:<redis_password>@<sentinel_host1>:<sentinel_port>/<redis_database>`
|
||||
|
|
|
|||
|
|
@ -135,8 +135,8 @@ const NormalForm = () => {
|
|||
{!systemFeatures.branding.enabled && <p className='body-md-regular mt-2 text-text-tertiary'>{t('login.joinTipStart')}{workspaceName}{t('login.joinTipEnd')}</p>}
|
||||
</div>
|
||||
: <div className="mx-auto w-full">
|
||||
<h2 className="title-4xl-semi-bold text-text-primary">{t('login.pageTitle')}</h2>
|
||||
{!systemFeatures.branding.enabled && <p className='body-md-regular mt-2 text-text-tertiary'>{t('login.welcome')}</p>}
|
||||
<h2 className="title-4xl-semi-bold text-text-primary">{systemFeatures.branding.enabled ? t('login.pageTitleForE') : t('login.pageTitle')}</h2>
|
||||
<p className='body-md-regular mt-2 text-text-tertiary'>{t('login.welcome')}</p>
|
||||
</div>}
|
||||
<div className="relative">
|
||||
<div className="mt-6 flex flex-col gap-3">
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ const translation = {
|
|||
noAccount: 'حساب کاربری ندارید؟',
|
||||
verifyMail: 'ادامه با کد تأیید',
|
||||
},
|
||||
pageTitleForE: 'هی، بیا شروع کنیم!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ const translation = {
|
|||
welcome: '👋 स्वागत है! कृपया शुरू करने के लिए विवरण भरें।',
|
||||
haveAccount: 'क्या आपका पहले से एक खाता है?',
|
||||
},
|
||||
pageTitleForE: 'अरे, चलो शुरू करें!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ const translation = {
|
|||
signUp: 'Iscriviti',
|
||||
welcome: '👋 Benvenuto! Per favore compila i dettagli per iniziare.',
|
||||
},
|
||||
pageTitleForE: 'Ehi, cominciamo!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const translation = {
|
||||
pageTitle: 'Dify にログイン',
|
||||
pageTitleForE: 'はじめましょう!',
|
||||
welcome: '👋 ようこそ!まずはログインしてご利用ください。',
|
||||
email: 'メールアドレス',
|
||||
emailPlaceholder: 'メールアドレスを入力してください',
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ const translation = {
|
|||
noAccount: '계정이 없으신가요?',
|
||||
welcome: '👋 환영합니다! 시작하려면 세부 정보를 입력해 주세요.',
|
||||
},
|
||||
pageTitleForE: '이봐, 시작하자!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ const translation = {
|
|||
verifyMail: 'Продолжите с кодом проверки',
|
||||
welcome: '👋 Добро пожаловать! Пожалуйста, заполните данные, чтобы начать.',
|
||||
},
|
||||
pageTitleForE: 'Привет, давай начнем!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ const translation = {
|
|||
verifyMail: 'โปรดดำเนินการต่อด้วยรหัสการตรวจสอบ',
|
||||
haveAccount: 'มีบัญชีอยู่แล้วใช่ไหม?',
|
||||
},
|
||||
pageTitleForE: 'เฮ้ เรามาเริ่มกันเถอะ!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ const translation = {
|
|||
noAccount: 'Не маєте облікового запису?',
|
||||
welcome: '👋 Ласкаво просимо! Будь ласка, заповніть деталі, щоб почати.',
|
||||
},
|
||||
pageTitleForE: 'Гей, давай почнемо!',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const translation = {
|
||||
pageTitle: '登录 Dify',
|
||||
pageTitleForE: '嗨,近来可好',
|
||||
welcome: '👋 欢迎!请登录以开始使用。',
|
||||
email: '邮箱',
|
||||
emailPlaceholder: '输入邮箱地址',
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const translation = {
|
||||
pageTitle: '嗨,近來可好',
|
||||
pageTitleForE: '嗨,近來可好',
|
||||
welcome: '👋 歡迎來到 Dify, 登入以繼續',
|
||||
email: '郵箱',
|
||||
emailPlaceholder: '輸入郵箱地址',
|
||||
|
|
|
|||
Loading…
Reference in New Issue