-
-
-
- {ArrowIcon}
-
+
+
{t('billing.plansCommon.yearlyTip')}
+
+ {t('billing.plansCommon.annualBilling')}
+ {
+ onChange(v ? PlanRange.yearly : PlanRange.monthly)
+ }} />
+
+
+ {ArrowIcon}
)
diff --git a/web/app/components/billing/type.ts b/web/app/components/billing/type.ts
index d78eab2ae3..b70c88da43 100644
--- a/web/app/components/billing/type.ts
+++ b/web/app/components/billing/type.ts
@@ -14,17 +14,15 @@ export type PlanInfo = {
level: number
price: number
modelProviders: string
+ teamWorkspace: number
teamMembers: number
buildApps: number
- vectorSpace: number
- documentsUploadQuota: number
+ documents: number
+ vectorSpace: string
+ documentsRequestQuota: number
documentProcessingPriority: Priority
logHistory: number
- customTools: string | number
- messageRequest: {
- en: string | number
- zh: string | number
- }
+ messageRequest: number
annotatedResponse: number
}
diff --git a/web/i18n/en-US/billing.ts b/web/i18n/en-US/billing.ts
index 68982108cf..5bdb49bae9 100644
--- a/web/i18n/en-US/billing.ts
+++ b/web/i18n/en-US/billing.ts
@@ -8,8 +8,11 @@ const translation = {
viewBilling: 'Manage billing and subscriptions',
buyPermissionDeniedTip: 'Please contact your enterprise administrator to subscribe',
plansCommon: {
- title: 'Choose a plan that’s right for you',
- yearlyTip: 'Get 2 months for free by subscribing yearly!',
+ title: 'Pricing that powers your AI journey',
+ freeTrialTipPrefix: 'Sign up and get a ',
+ freeTrialTip: 'free trial of 200 OpenAI calls. ',
+ freeTrialTipSuffix: 'No credit card required',
+ yearlyTip: 'Pay for 10 months, enjoy 1 Year!',
mostPopular: 'Most Popular',
planRange: {
monthly: 'Monthly',
@@ -19,33 +22,38 @@ const translation = {
year: 'year',
save: 'Save ',
free: 'Free',
+ annualBilling: 'Annual Billing',
+ priceTip: 'per workspace/',
currentPlan: 'Current Plan',
contractSales: 'Contact sales',
contractOwner: 'Contact team manager',
startForFree: 'Start for free',
- getStartedWith: 'Get started with ',
+ getStarted: 'Get started',
contactSales: 'Contact Sales',
talkToSales: 'Talk to Sales',
- modelProviders: 'Model Providers',
- teamMembers: 'Team Members',
+ modelProviders: 'Support OpenAI/Anthropic/Llama2/Azure OpenAI/Hugging Face/Replicate',
+ teamWorkspace: '{{count}} Team Workspace',
+ teamMember_one: '{{count}} Team Member',
+ teamMember_other: '{{count}} Team Members',
annotationQuota: 'Annotation Quota',
- buildApps: 'Build Apps',
- vectorSpace: 'Vector Space',
+ buildApps: '{{count}} Apps',
+ documents: '{{count}} Knowledge Documents',
+ documentsTooltip: 'Quota on the number of documents imported from the Knowledge Data Source.',
+ vectorSpace: '{{size}} Knowledge Data Storage',
vectorSpaceBillingTooltip: 'Each 1MB can store about 1.2million characters of vectorized data(estimated using OpenAI Embeddings, varies across models).',
- vectorSpaceTooltip: 'Vector Space is the long-term memory system required for LLMs to comprehend your data.',
- documentsUploadQuota: 'Documents Upload Quota',
- documentProcessingPriority: 'Document Processing Priority',
- documentProcessingPriorityTip: 'For higher document processing priority, please upgrade your plan.',
- documentProcessingPriorityUpgrade: 'Process more data with higher accuracy at faster speeds.',
+ vectorSpaceTooltip: 'Documents with the High Quality indexing mode will consume Knowledge Data Storage resources. When Knowledge Data Storage reaches the limit, new documents will not be uploaded.',
+ documentsRequestQuota: '{{count}}/min Knowledge Request Rate limit',
+ documentsRequestQuotaTooltip: 'Indicates the number of queries per minute the system can handle with knowledge base support, used to measure query capacity and performance.',
+ documentProcessingPriority: 'Document Processing',
priority: {
'standard': 'Standard',
'priority': 'Priority',
'top-priority': 'Top Priority',
},
- logsHistory: 'Logs history',
+ logsHistory: '{{days}} Log history',
customTools: 'Custom Tools',
unavailable: 'Unavailable',
- days: 'days',
+ days: 'Days',
unlimited: 'Unlimited',
support: 'Support',
supportItems: {
@@ -68,12 +76,13 @@ const translation = {
member: 'Member',
memberAfter: 'Member',
messageRequest: {
- title: 'Message Credits',
- tooltip: 'Message invocation quotas for various plans using OpenAI models (except gpt4).Messages over the limit will use your OpenAI API Key.',
+ title: '{{count}} Messages',
+ titlePerMonth: '{{count}} Messages/month',
+ tooltip: 'Message invocation quotas for various plans using OpenAl models. Messages over the limit will use your OpenAI API Key.',
},
annotatedResponse: {
- title: 'Annotation Quota Limits',
- tooltip: 'Manual editing and annotation of responses provides customizable high-quality question-answering abilities for apps. (Applicable only in chat apps)',
+ title: '{{count}} Annotation Quota Limits',
+ tooltip: 'Manual editing and annotation of responses provides customizable high-quality question-answering abilities for apps. (Applicable only in Chat apps)',
},
ragAPIRequestTooltip: 'Refers to the number of API calls invoking only the knowledge base processing capabilities of Dify.',
receiptInfo: 'Only team owner and team admin can subscribe and view billing information',
@@ -81,17 +90,16 @@ const translation = {
plans: {
sandbox: {
name: 'Sandbox',
- description: '200 times GPT free trial',
- includesTitle: 'Includes:',
+ description: 'Free Trial of Core Capabilities',
},
professional: {
name: 'Professional',
- description: 'For individuals and small teams to unlock more power affordably.',
+ description: 'For Independent Developers/Small Teams',
includesTitle: 'Everything in free plan, plus:',
},
team: {
name: 'Team',
- description: 'Collaborate without limits and enjoy top-tier performance.',
+ description: 'For Medium-sized Teams',
includesTitle: 'Everything in Professional plan, plus:',
},
enterprise: {
diff --git a/web/tailwind.config.js b/web/tailwind.config.js
index 0da4968a7f..b03b91ff02 100644
--- a/web/tailwind.config.js
+++ b/web/tailwind.config.js
@@ -107,6 +107,9 @@ const config = {
'dataset-option-card-purple-gradient': 'var(--color-dataset-option-card-purple-gradient)',
'dataset-option-card-orange-gradient': 'var(--color-dataset-option-card-orange-gradient)',
'dataset-chunk-list-mask-bg': 'var(--color-dataset-chunk-list-mask-bg)',
+ 'price-premium-badge-background': 'var(--color-premium-badge-background)',
+ 'premium-yearly-tip-text-background': 'var(--color-premium-yearly-tip-text-background)',
+ 'price-premium-text-background': 'var(--color-premium-text-background)',
},
lineClamp: {
'20': '20',
diff --git a/web/themes/manual-dark.css b/web/themes/manual-dark.css
index 6d4c5f3908..aa539eb29f 100644
--- a/web/themes/manual-dark.css
+++ b/web/themes/manual-dark.css
@@ -1,35 +1,28 @@
html[data-theme="dark"] {
- --color-chatbot-bg: linear-gradient(
- 180deg,
- rgba(34, 34, 37, 0.9) 0%,
- rgba(29, 29, 32, 0.9) 90.48%
- );
- --color-chat-bubble-bg: linear-gradient(
- 180deg,
- rgba(200, 206, 218, 0.08) 0%,
- rgba(200, 206, 218, 0.02) 100%
- );
- --color-workflow-process-bg: linear-gradient(
- 90deg,
- rgba(24, 24, 27, 0.25) 0%,
- rgba(24, 24, 27, 0.04) 100%
- );
- --color-account-teams-bg: linear-gradient(
- 271deg,
- rgba(34, 34, 37, 0.9) -0.1%,
- rgba(29, 29, 32, 0.9) 98.26%
- );
- --color-dataset-chunk-process-success-bg: linear-gradient(92deg, rgba(23, 178, 106, 0.30) 0%, rgba(0, 0, 0, 0.00) 100%);
- --color-dataset-chunk-process-error-bg: linear-gradient(92deg, rgba(240, 68, 56, 0.30) 0%, rgba(0, 0, 0, 0.00) 100%);
- --color-dataset-chunk-detail-card-hover-bg: linear-gradient(180deg, #1D1D20 0%, #222225 100%);
- --color-dataset-child-chunk-expand-btn-bg: linear-gradient(90deg, rgba(24, 24, 27, 0.25) 0%, rgba(24, 24, 27, 0.04) 100%);
- --color-dataset-option-card-blue-gradient: linear-gradient(90deg, #24252E 0%, #1E1E21 100%);
- --color-dataset-option-card-purple-gradient: linear-gradient(90deg, #25242E 0%, #1E1E21 100%);
- --color-dataset-option-card-orange-gradient: linear-gradient(90deg, #2B2322 0%, #1E1E21 100%);
- --color-dataset-chunk-list-mask-bg: linear-gradient(180deg, rgba(34, 34, 37, 0.00) 0%, #222225 100%);
- --mask-top2bottom-gray-50-to-transparent: linear-gradient(
- 180deg,
- rgba(24, 24, 27, 0.08) 0%,
- rgba(0, 0, 0, 0) 100%
- );
-}
+ --color-chatbot-bg: linear-gradient(180deg,
+ rgba(34, 34, 37, 0.9) 0%,
+ rgba(29, 29, 32, 0.9) 90.48%);
+ --color-chat-bubble-bg: linear-gradient(180deg,
+ rgba(200, 206, 218, 0.08) 0%,
+ rgba(200, 206, 218, 0.02) 100%);
+ --color-workflow-process-bg: linear-gradient(90deg,
+ rgba(24, 24, 27, 0.25) 0%,
+ rgba(24, 24, 27, 0.04) 100%);
+ --color-account-teams-bg: linear-gradient(271deg,
+ rgba(34, 34, 37, 0.9) -0.1%,
+ rgba(29, 29, 32, 0.9) 98.26%);
+ --color-dataset-chunk-process-success-bg: linear-gradient(92deg, rgba(23, 178, 106, 0.30) 0%, rgba(0, 0, 0, 0.00) 100%);
+ --color-dataset-chunk-process-error-bg: linear-gradient(92deg, rgba(240, 68, 56, 0.30) 0%, rgba(0, 0, 0, 0.00) 100%);
+ --color-dataset-chunk-detail-card-hover-bg: linear-gradient(180deg, #1D1D20 0%, #222225 100%);
+ --color-dataset-child-chunk-expand-btn-bg: linear-gradient(90deg, rgba(24, 24, 27, 0.25) 0%, rgba(24, 24, 27, 0.04) 100%);
+ --color-dataset-option-card-blue-gradient: linear-gradient(90deg, #24252E 0%, #1E1E21 100%);
+ --color-dataset-option-card-purple-gradient: linear-gradient(90deg, #25242E 0%, #1E1E21 100%);
+ --color-dataset-option-card-orange-gradient: linear-gradient(90deg, #2B2322 0%, #1E1E21 100%);
+ --color-dataset-chunk-list-mask-bg: linear-gradient(180deg, rgba(34, 34, 37, 0.00) 0%, #222225 100%);
+ --mask-top2bottom-gray-50-to-transparent: linear-gradient(180deg,
+ rgba(24, 24, 27, 0.08) 0%,
+ rgba(0, 0, 0, 0) 100%);
+ --color-premium-yearly-tip-text-background: linear-gradient(91deg, #FDB022 2.18%, #F79009 108.79%);
+ --color-premium-badge-background: linear-gradient(95deg, rgba(103, 111, 131, 0.90) 0%, rgba(73, 84, 100, 0.90) 105.58%), var(--util-colors-gray-gray-200, #18222F);
+ --color-premium-text-background: linear-gradient(92deg, rgba(249, 250, 251, 0.95) 0%, rgba(233, 235, 240, 0.95) 97.78%);
+}
\ No newline at end of file
diff --git a/web/themes/manual-light.css b/web/themes/manual-light.css
index 501f9f1d1f..893b607189 100644
--- a/web/themes/manual-light.css
+++ b/web/themes/manual-light.css
@@ -1,35 +1,28 @@
html[data-theme="light"] {
- --color-chatbot-bg: linear-gradient(
- 180deg,
- rgba(249, 250, 251, 0.9) 0%,
- rgba(242, 244, 247, 0.9) 90.48%
- );
- --color-chat-bubble-bg: linear-gradient(
- 180deg,
- #fff 0%,
- rgba(255, 255, 255, 0.6) 100%
- );
- --color-workflow-process-bg: linear-gradient(
- 90deg,
- rgba(200, 206, 218, 0.2) 0%,
- rgba(200, 206, 218, 0.04) 100%
- );
- --color-account-teams-bg: linear-gradient(
- 271deg,
- rgba(249, 250, 251, 0.9) -0.1%,
- rgba(242, 244, 247, 0.9) 98.26%
- );
- --color-dataset-chunk-process-success-bg: linear-gradient(92deg, rgba(23, 178, 106, 0.25) 0%, rgba(255, 255, 255, 0.00) 100%);
- --color-dataset-chunk-process-error-bg: linear-gradient(92deg, rgba(240, 68, 56, 0.25) 0%, rgba(255, 255, 255, 0.00) 100%);
- --color-dataset-chunk-detail-card-hover-bg: linear-gradient(180deg, #F2F4F7 0%, #F9FAFB 100%);
- --color-dataset-child-chunk-expand-btn-bg: linear-gradient(90deg, rgba(200, 206, 218, 0.20) 0%, rgba(200, 206, 218, 0.04) 100%);
- --color-dataset-option-card-blue-gradient: linear-gradient(90deg, #F2F4F7 0%, #F9FAFB 100%);
- --color-dataset-option-card-purple-gradient: linear-gradient(90deg, #F0EEFA 0%, #F9FAFB 100%);
- --color-dataset-option-card-orange-gradient: linear-gradient(90deg, #F8F2EE 0%, #F9FAFB 100%);
- --color-dataset-chunk-list-mask-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, #FCFCFD 100%);
- --mask-top2bottom-gray-50-to-transparent: linear-gradient(
- 180deg,
- rgba(200, 206, 218, 0.2) 0%,
- rgba(255, 255, 255, 0) 100%
- );
-}
+ --color-chatbot-bg: linear-gradient(180deg,
+ rgba(249, 250, 251, 0.9) 0%,
+ rgba(242, 244, 247, 0.9) 90.48%);
+ --color-chat-bubble-bg: linear-gradient(180deg,
+ #fff 0%,
+ rgba(255, 255, 255, 0.6) 100%);
+ --color-workflow-process-bg: linear-gradient(90deg,
+ rgba(200, 206, 218, 0.2) 0%,
+ rgba(200, 206, 218, 0.04) 100%);
+ --color-account-teams-bg: linear-gradient(271deg,
+ rgba(249, 250, 251, 0.9) -0.1%,
+ rgba(242, 244, 247, 0.9) 98.26%);
+ --color-dataset-chunk-process-success-bg: linear-gradient(92deg, rgba(23, 178, 106, 0.25) 0%, rgba(255, 255, 255, 0.00) 100%);
+ --color-dataset-chunk-process-error-bg: linear-gradient(92deg, rgba(240, 68, 56, 0.25) 0%, rgba(255, 255, 255, 0.00) 100%);
+ --color-dataset-chunk-detail-card-hover-bg: linear-gradient(180deg, #F2F4F7 0%, #F9FAFB 100%);
+ --color-dataset-child-chunk-expand-btn-bg: linear-gradient(90deg, rgba(200, 206, 218, 0.20) 0%, rgba(200, 206, 218, 0.04) 100%);
+ --color-dataset-option-card-blue-gradient: linear-gradient(90deg, #F2F4F7 0%, #F9FAFB 100%);
+ --color-dataset-option-card-purple-gradient: linear-gradient(90deg, #F0EEFA 0%, #F9FAFB 100%);
+ --color-dataset-option-card-orange-gradient: linear-gradient(90deg, #F8F2EE 0%, #F9FAFB 100%);
+ --color-dataset-chunk-list-mask-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.00) 0%, #FCFCFD 100%);
+ --mask-top2bottom-gray-50-to-transparent: linear-gradient(180deg,
+ rgba(200, 206, 218, 0.2) 0%,
+ rgba(255, 255, 255, 0) 100%);
+ --color-premium-yearly-tip-text-background: linear-gradient(91deg, #F79009 2.18%, #DC6803 108.79%);
+ --color-premium-badge-background: linear-gradient(95deg, rgba(152, 162, 178, 0.90) 0%, rgba(103, 111, 131, 0.90) 105.58%);
+ --color-premium-text-background: linear-gradient(92deg, rgba(252, 252, 253, 0.95) 0%, rgba(242, 244, 247, 0.95) 97.78%);
+}
\ No newline at end of file