Procházet zdrojové kódy

Sync INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH between API and Web (#11230)

Hiroshi Fujita před 4 měsíci
rodič
revize
1d8385f7ac

+ 2 - 2
api/.env.example

@@ -383,7 +383,7 @@ LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S
 LOG_TZ=UTC
 LOG_TZ=UTC
 
 
 # Indexing configuration
 # Indexing configuration
-INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=1000
+INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000
 
 
 # Workflow runtime configuration
 # Workflow runtime configuration
 WORKFLOW_MAX_EXECUTION_STEPS=500
 WORKFLOW_MAX_EXECUTION_STEPS=500
@@ -413,4 +413,4 @@ RESET_PASSWORD_TOKEN_EXPIRY_MINUTES=5
 
 
 CREATE_TIDB_SERVICE_JOB_ENABLED=false
 CREATE_TIDB_SERVICE_JOB_ENABLED=false
 
 
-RETRIEVAL_TOP_N=0
+RETRIEVAL_TOP_N=0

+ 1 - 1
api/configs/feature/__init__.py

@@ -647,7 +647,7 @@ class IndexingConfig(BaseSettings):
 
 
     INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: PositiveInt = Field(
     INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: PositiveInt = Field(
         description="Maximum token length for text segmentation during indexing",
         description="Maximum token length for text segmentation during indexing",
-        default=1000,
+        default=4000,
     )
     )
 
 
 
 

+ 2 - 1
api/controllers/console/datasets/datasets_document.py

@@ -106,6 +106,7 @@ class GetProcessRuleApi(Resource):
         # get default rules
         # get default rules
         mode = DocumentService.DEFAULT_RULES["mode"]
         mode = DocumentService.DEFAULT_RULES["mode"]
         rules = DocumentService.DEFAULT_RULES["rules"]
         rules = DocumentService.DEFAULT_RULES["rules"]
+        limits = DocumentService.DEFAULT_RULES["limits"]
         if document_id:
         if document_id:
             # get the latest process rule
             # get the latest process rule
             document = Document.query.get_or_404(document_id)
             document = Document.query.get_or_404(document_id)
@@ -132,7 +133,7 @@ class GetProcessRuleApi(Resource):
                 mode = dataset_process_rule.mode
                 mode = dataset_process_rule.mode
                 rules = dataset_process_rule.rules_dict
                 rules = dataset_process_rule.rules_dict
 
 
-        return {"mode": mode, "rules": rules}
+        return {"mode": mode, "rules": rules, "limits": limits}
 
 
 
 
 class DatasetDocumentListApi(Resource):
 class DatasetDocumentListApi(Resource):

+ 3 - 0
api/services/dataset_service.py

@@ -406,6 +406,9 @@ class DocumentService:
             ],
             ],
             "segmentation": {"delimiter": "\n", "max_tokens": 500, "chunk_overlap": 50},
             "segmentation": {"delimiter": "\n", "max_tokens": 500, "chunk_overlap": 50},
         },
         },
+        "limits": {
+            "indexing_max_segmentation_tokens_length": dify_config.INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
+        },
     }
     }
 
 
     DOCUMENT_METADATA_SCHEMA = {
     DOCUMENT_METADATA_SCHEMA = {

+ 1 - 1
docker-legacy/docker-compose.yaml

@@ -210,7 +210,7 @@ services:
       SSRF_PROXY_HTTP_URL: 'http://ssrf_proxy:3128'
       SSRF_PROXY_HTTP_URL: 'http://ssrf_proxy:3128'
       SSRF_PROXY_HTTPS_URL: 'http://ssrf_proxy:3128'
       SSRF_PROXY_HTTPS_URL: 'http://ssrf_proxy:3128'
       # Indexing configuration
       # Indexing configuration
-      INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: 1000
+      INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: 4000
     depends_on:
     depends_on:
       - db
       - db
       - redis
       - redis

+ 1 - 1
docker/.env.example

@@ -683,7 +683,7 @@ SMTP_OPPORTUNISTIC_TLS=false
 # ------------------------------
 # ------------------------------
 
 
 # Maximum length of segmentation tokens for indexing
 # Maximum length of segmentation tokens for indexing
-INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=1000
+INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000
 
 
 # Member invitation link valid time (hours),
 # Member invitation link valid time (hours),
 # Default: 72.
 # Default: 72.

+ 1 - 1
docker/docker-compose.yaml

@@ -247,7 +247,7 @@ x-shared-env: &shared-api-worker-env
   SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
   SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
   RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key}
   RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key}
   RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com}
   RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com}
-  INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-1000}
+  INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000}
   INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72}
   INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72}
   RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5}
   RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5}
   CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194}
   CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194}

+ 15 - 13
web/app/components/datasets/create/step-two/index.tsx

@@ -122,7 +122,8 @@ const StepTwo = ({
   const setSegmentIdentifier = useCallback((value: string) => {
   const setSegmentIdentifier = useCallback((value: string) => {
     doSetSegmentIdentifier(value ? escape(value) : DEFAULT_SEGMENT_IDENTIFIER)
     doSetSegmentIdentifier(value ? escape(value) : DEFAULT_SEGMENT_IDENTIFIER)
   }, [])
   }, [])
-  const [max, setMax] = useState(4000) // default chunk length
+  const [maxChunkLength, setMaxChunkLength] = useState(4000) // default chunk length
+  const [limitMaxChunkLength, setLimitMaxChunkLength] = useState(4000)
   const [overlap, setOverlap] = useState(50)
   const [overlap, setOverlap] = useState(50)
   const [rules, setRules] = useState<PreProcessingRule[]>([])
   const [rules, setRules] = useState<PreProcessingRule[]>([])
   const [defaultConfig, setDefaultConfig] = useState<Rules>()
   const [defaultConfig, setDefaultConfig] = useState<Rules>()
@@ -196,7 +197,7 @@ const StepTwo = ({
   const resetRules = () => {
   const resetRules = () => {
     if (defaultConfig) {
     if (defaultConfig) {
       setSegmentIdentifier(defaultConfig.segmentation.separator)
       setSegmentIdentifier(defaultConfig.segmentation.separator)
-      setMax(defaultConfig.segmentation.max_tokens)
+      setMaxChunkLength(defaultConfig.segmentation.max_tokens)
       setOverlap(defaultConfig.segmentation.chunk_overlap)
       setOverlap(defaultConfig.segmentation.chunk_overlap)
       setRules(defaultConfig.pre_processing_rules)
       setRules(defaultConfig.pre_processing_rules)
     }
     }
@@ -212,8 +213,8 @@ const StepTwo = ({
   }
   }
 
 
   const confirmChangeCustomConfig = () => {
   const confirmChangeCustomConfig = () => {
-    if (segmentationType === SegmentType.CUSTOM && max > 4000) {
-      Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.maxLengthCheck') })
+    if (segmentationType === SegmentType.CUSTOM && maxChunkLength > limitMaxChunkLength) {
+      Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.maxLengthCheck', { limit: limitMaxChunkLength }) })
       return
       return
     }
     }
     setCustomFileIndexingEstimate(null)
     setCustomFileIndexingEstimate(null)
@@ -234,7 +235,7 @@ const StepTwo = ({
         pre_processing_rules: rules,
         pre_processing_rules: rules,
         segmentation: {
         segmentation: {
           separator: unescape(segmentIdentifier),
           separator: unescape(segmentIdentifier),
-          max_tokens: max,
+          max_tokens: maxChunkLength,
           chunk_overlap: overlap,
           chunk_overlap: overlap,
         },
         },
       }
       }
@@ -339,12 +340,12 @@ const StepTwo = ({
   )
   )
   const getCreationParams = () => {
   const getCreationParams = () => {
     let params
     let params
-    if (segmentationType === SegmentType.CUSTOM && overlap > max) {
+    if (segmentationType === SegmentType.CUSTOM && overlap > maxChunkLength) {
       Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.overlapCheck') })
       Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.overlapCheck') })
       return
       return
     }
     }
-    if (segmentationType === SegmentType.CUSTOM && max > 4000) {
-      Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.maxLengthCheck') })
+    if (segmentationType === SegmentType.CUSTOM && maxChunkLength > limitMaxChunkLength) {
+      Toast.notify({ type: 'error', message: t('datasetCreation.stepTwo.maxLengthCheck', { limit: limitMaxChunkLength }) })
       return
       return
     }
     }
     if (isSetting) {
     if (isSetting) {
@@ -415,7 +416,8 @@ const StepTwo = ({
       const res = await fetchDefaultProcessRule({ url: '/datasets/process-rule' })
       const res = await fetchDefaultProcessRule({ url: '/datasets/process-rule' })
       const separator = res.rules.segmentation.separator
       const separator = res.rules.segmentation.separator
       setSegmentIdentifier(separator)
       setSegmentIdentifier(separator)
-      setMax(res.rules.segmentation.max_tokens)
+      setMaxChunkLength(res.rules.segmentation.max_tokens)
+      setLimitMaxChunkLength(res.limits.indexing_max_segmentation_tokens_length)
       setOverlap(res.rules.segmentation.chunk_overlap)
       setOverlap(res.rules.segmentation.chunk_overlap)
       setRules(res.rules.pre_processing_rules)
       setRules(res.rules.pre_processing_rules)
       setDefaultConfig(res.rules)
       setDefaultConfig(res.rules)
@@ -432,7 +434,7 @@ const StepTwo = ({
       const max = rules.segmentation.max_tokens
       const max = rules.segmentation.max_tokens
       const overlap = rules.segmentation.chunk_overlap
       const overlap = rules.segmentation.chunk_overlap
       setSegmentIdentifier(separator)
       setSegmentIdentifier(separator)
-      setMax(max)
+      setMaxChunkLength(max)
       setOverlap(overlap)
       setOverlap(overlap)
       setRules(rules.pre_processing_rules)
       setRules(rules.pre_processing_rules)
       setDefaultConfig(rules)
       setDefaultConfig(rules)
@@ -670,10 +672,10 @@ const StepTwo = ({
                         type="number"
                         type="number"
                         className='h-9'
                         className='h-9'
                         placeholder={t('datasetCreation.stepTwo.maxLength') || ''}
                         placeholder={t('datasetCreation.stepTwo.maxLength') || ''}
-                        value={max}
-                        max={4000}
+                        value={maxChunkLength}
+                        max={limitMaxChunkLength}
                         min={1}
                         min={1}
-                        onChange={e => setMax(parseInt(e.target.value.replace(/^0+/, ''), 10))}
+                        onChange={e => setMaxChunkLength(parseInt(e.target.value.replace(/^0+/, ''), 10))}
                       />
                       />
                     </div>
                     </div>
                   </div>
                   </div>

+ 1 - 1
web/i18n/de-DE/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     websiteSource: 'Preprocess-Website',
     websiteSource: 'Preprocess-Website',
     webpageUnit: 'Seiten',
     webpageUnit: 'Seiten',
     separatorTip: 'Ein Trennzeichen ist das Zeichen, das zum Trennen von Text verwendet wird. \\n\\n und \\n sind häufig verwendete Trennzeichen zum Trennen von Absätzen und Zeilen. In Kombination mit Kommas (\\n\\n,\\n) werden Absätze nach Zeilen segmentiert, wenn die maximale Blocklänge überschritten wird. Sie können auch spezielle, von Ihnen selbst definierte Trennzeichen verwenden (z. B. ***).',
     separatorTip: 'Ein Trennzeichen ist das Zeichen, das zum Trennen von Text verwendet wird. \\n\\n und \\n sind häufig verwendete Trennzeichen zum Trennen von Absätzen und Zeilen. In Kombination mit Kommas (\\n\\n,\\n) werden Absätze nach Zeilen segmentiert, wenn die maximale Blocklänge überschritten wird. Sie können auch spezielle, von Ihnen selbst definierte Trennzeichen verwenden (z. B. ***).',
-    maxLengthCheck: 'Die maximale Stücklänge sollte weniger als 4000 betragen',
+    maxLengthCheck: 'Die maximale Stücklänge sollte weniger als {{limit}} betragen',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Wissen erstellt',
     creationTitle: '🎉 Wissen erstellt',

+ 1 - 1
web/i18n/en-US/dataset-creation.ts

@@ -103,7 +103,7 @@ const translation = {
     separatorTip: 'A delimiter is the character used to separate text. \\n\\n and \\n are commonly used delimiters for separating paragraphs and lines. Combined with commas (\\n\\n,\\n), paragraphs will be segmented by lines when exceeding the maximum chunk length. You can also use special delimiters defined by yourself (e.g. ***).',
     separatorTip: 'A delimiter is the character used to separate text. \\n\\n and \\n are commonly used delimiters for separating paragraphs and lines. Combined with commas (\\n\\n,\\n), paragraphs will be segmented by lines when exceeding the maximum chunk length. You can also use special delimiters defined by yourself (e.g. ***).',
     separatorPlaceholder: '\\n\\n for separating paragraphs; \\n for separating lines',
     separatorPlaceholder: '\\n\\n for separating paragraphs; \\n for separating lines',
     maxLength: 'Maximum chunk length',
     maxLength: 'Maximum chunk length',
-    maxLengthCheck: 'Maximum chunk length should be less than 4000',
+    maxLengthCheck: 'Maximum chunk length should be less than {{limit}}',
     overlap: 'Chunk overlap',
     overlap: 'Chunk overlap',
     overlapTip: 'Setting the chunk overlap can maintain the semantic relevance between them, enhancing the retrieve effect. It is recommended to set 10%-25% of the maximum chunk size.',
     overlapTip: 'Setting the chunk overlap can maintain the semantic relevance between them, enhancing the retrieve effect. It is recommended to set 10%-25% of the maximum chunk size.',
     overlapCheck: 'chunk overlap should not bigger than maximum chunk length',
     overlapCheck: 'chunk overlap should not bigger than maximum chunk length',

+ 1 - 1
web/i18n/es-ES/dataset-creation.ts

@@ -147,7 +147,7 @@ const translation = {
     retrievalSettingTip: 'Para cambiar el método de índice, por favor ve a la ',
     retrievalSettingTip: 'Para cambiar el método de índice, por favor ve a la ',
     datasetSettingLink: 'configuración del conocimiento.',
     datasetSettingLink: 'configuración del conocimiento.',
     separatorTip: 'Un delimitador es el carácter que se utiliza para separar el texto. \\n\\n y \\n son delimitadores comúnmente utilizados para separar párrafos y líneas. Combinado con comas (\\n\\n,\\n), los párrafos se segmentarán por líneas cuando excedan la longitud máxima del fragmento. También puede utilizar delimitadores especiales definidos por usted mismo (por ejemplo, ***).',
     separatorTip: 'Un delimitador es el carácter que se utiliza para separar el texto. \\n\\n y \\n son delimitadores comúnmente utilizados para separar párrafos y líneas. Combinado con comas (\\n\\n,\\n), los párrafos se segmentarán por líneas cuando excedan la longitud máxima del fragmento. También puede utilizar delimitadores especiales definidos por usted mismo (por ejemplo, ***).',
-    maxLengthCheck: 'La longitud máxima del fragmento debe ser inferior a 4000',
+    maxLengthCheck: 'La longitud máxima del fragmento debe ser inferior a {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Conocimiento creado',
     creationTitle: '🎉 Conocimiento creado',

+ 1 - 1
web/i18n/fa-IR/dataset-creation.ts

@@ -147,7 +147,7 @@ const translation = {
     retrievalSettingTip: 'برای تغییر روش شاخص، لطفاً به',
     retrievalSettingTip: 'برای تغییر روش شاخص، لطفاً به',
     datasetSettingLink: 'تنظیمات دانش بروید.',
     datasetSettingLink: 'تنظیمات دانش بروید.',
     separatorTip: 'جداکننده نویسه ای است که برای جداسازی متن استفاده می شود. \\n\\n و \\n معمولا برای جداسازی پاراگراف ها و خطوط استفاده می شوند. همراه با کاما (\\n\\n,\\n)، پاراگراف ها زمانی که از حداکثر طول تکه فراتر می روند، با خطوط تقسیم بندی می شوند. همچنین می توانید از جداکننده های خاصی که توسط خودتان تعریف شده اند استفاده کنید (مثلا ***).',
     separatorTip: 'جداکننده نویسه ای است که برای جداسازی متن استفاده می شود. \\n\\n و \\n معمولا برای جداسازی پاراگراف ها و خطوط استفاده می شوند. همراه با کاما (\\n\\n,\\n)، پاراگراف ها زمانی که از حداکثر طول تکه فراتر می روند، با خطوط تقسیم بندی می شوند. همچنین می توانید از جداکننده های خاصی که توسط خودتان تعریف شده اند استفاده کنید (مثلا ***).',
-    maxLengthCheck: 'حداکثر طول تکه باید کمتر از 4000 باشد',
+    maxLengthCheck: 'حداکثر طول تکه باید کمتر از {{limit}} باشد',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: ' دانش ایجاد شد',
     creationTitle: ' دانش ایجاد شد',

+ 1 - 1
web/i18n/fr-FR/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     webpageUnit: 'Pages',
     webpageUnit: 'Pages',
     websiteSource: 'Site web de prétraitement',
     websiteSource: 'Site web de prétraitement',
     separatorTip: 'Un délimiteur est le caractère utilisé pour séparer le texte. \\n\\n et \\n sont des délimiteurs couramment utilisés pour séparer les paragraphes et les lignes. Combiné à des virgules (\\n\\n,\\n), les paragraphes seront segmentés par des lignes lorsqu’ils dépasseront la longueur maximale des morceaux. Vous pouvez également utiliser des délimiteurs spéciaux définis par vous-même (par exemple ***).',
     separatorTip: 'Un délimiteur est le caractère utilisé pour séparer le texte. \\n\\n et \\n sont des délimiteurs couramment utilisés pour séparer les paragraphes et les lignes. Combiné à des virgules (\\n\\n,\\n), les paragraphes seront segmentés par des lignes lorsqu’ils dépasseront la longueur maximale des morceaux. Vous pouvez également utiliser des délimiteurs spéciaux définis par vous-même (par exemple ***).',
-    maxLengthCheck: 'La longueur maximale des morceaux doit être inférieure à 4000',
+    maxLengthCheck: 'La longueur maximale des morceaux doit être inférieure à {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Connaissance créée',
     creationTitle: '🎉 Connaissance créée',

+ 1 - 1
web/i18n/hi-IN/dataset-creation.ts

@@ -164,7 +164,7 @@ const translation = {
     retrievalSettingTip: 'इंडेक्स विधि बदलने के लिए, कृपया जाएं ',
     retrievalSettingTip: 'इंडेक्स विधि बदलने के लिए, कृपया जाएं ',
     datasetSettingLink: 'ज्ञान सेटिंग्स।',
     datasetSettingLink: 'ज्ञान सेटिंग्स।',
     separatorTip: 'एक सीमांकक पाठ को अलग करने के लिए उपयोग किया जाने वाला वर्ण है। \\n\\n और \\n आमतौर पर पैराग्राफ और लाइनों को अलग करने के लिए उपयोग किए जाने वाले सीमांकक हैं। अल्पविराम (\\n\\n,\\n) के साथ संयुक्त, अधिकतम खंड लंबाई से अधिक होने पर अनुच्छेदों को पंक्तियों द्वारा खंडित किया जाएगा। आप स्वयं द्वारा परिभाषित विशेष सीमांकक का भी उपयोग कर सकते हैं (उदा. ***).',
     separatorTip: 'एक सीमांकक पाठ को अलग करने के लिए उपयोग किया जाने वाला वर्ण है। \\n\\n और \\n आमतौर पर पैराग्राफ और लाइनों को अलग करने के लिए उपयोग किए जाने वाले सीमांकक हैं। अल्पविराम (\\n\\n,\\n) के साथ संयुक्त, अधिकतम खंड लंबाई से अधिक होने पर अनुच्छेदों को पंक्तियों द्वारा खंडित किया जाएगा। आप स्वयं द्वारा परिभाषित विशेष सीमांकक का भी उपयोग कर सकते हैं (उदा. ***).',
-    maxLengthCheck: 'अधिकतम चंक लंबाई 4000 से कम होनी चाहिए',
+    maxLengthCheck: 'अधिकतम चंक लंबाई {{limit}} से कम होनी चाहिए',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 ज्ञान बनाया गया',
     creationTitle: '🎉 ज्ञान बनाया गया',

+ 1 - 1
web/i18n/it-IT/dataset-creation.ts

@@ -167,7 +167,7 @@ const translation = {
     retrievalSettingTip: 'Per cambiare il metodo di indicizzazione, vai alle ',
     retrievalSettingTip: 'Per cambiare il metodo di indicizzazione, vai alle ',
     datasetSettingLink: 'impostazioni della Conoscenza.',
     datasetSettingLink: 'impostazioni della Conoscenza.',
     separatorTip: 'Un delimitatore è il carattere utilizzato per separare il testo. \\n\\n e \\n sono delimitatori comunemente usati per separare paragrafi e righe. In combinazione con le virgole (\\n\\n,\\n), i paragrafi verranno segmentati per righe quando superano la lunghezza massima del blocco. È inoltre possibile utilizzare delimitatori speciali definiti dall\'utente (ad es. ***).',
     separatorTip: 'Un delimitatore è il carattere utilizzato per separare il testo. \\n\\n e \\n sono delimitatori comunemente usati per separare paragrafi e righe. In combinazione con le virgole (\\n\\n,\\n), i paragrafi verranno segmentati per righe quando superano la lunghezza massima del blocco. È inoltre possibile utilizzare delimitatori speciali definiti dall\'utente (ad es. ***).',
-    maxLengthCheck: 'La lunghezza massima del blocco deve essere inferiore a 4000',
+    maxLengthCheck: 'La lunghezza massima del blocco deve essere inferiore a {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Conoscenza creata',
     creationTitle: '🎉 Conoscenza creata',

+ 1 - 1
web/i18n/ja-JP/dataset-creation.ts

@@ -147,7 +147,7 @@ const translation = {
     retrievalSettingTip: '検索方法を変更するには、',
     retrievalSettingTip: '検索方法を変更するには、',
     datasetSettingLink: 'ナレッジ設定',
     datasetSettingLink: 'ナレッジ設定',
     separatorTip: '区切り文字は、テキストを区切るために使用される文字です。\\n\\n と \\n は、段落と行を区切るために一般的に使用される区切り記号です。カンマ (\\n\\n,\\n) と組み合わせると、最大チャンク長を超えると、段落は行で区切られます。自分で定義した特別な区切り文字を使用することもできます(例:***)。',
     separatorTip: '区切り文字は、テキストを区切るために使用される文字です。\\n\\n と \\n は、段落と行を区切るために一般的に使用される区切り記号です。カンマ (\\n\\n,\\n) と組み合わせると、最大チャンク長を超えると、段落は行で区切られます。自分で定義した特別な区切り文字を使用することもできます(例:***)。',
-    maxLengthCheck: 'チャンクの最大長は 4000 未満にする必要があります',
+    maxLengthCheck: 'チャンクの最大長は {{limit}} 未満にする必要があります',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 ナレッジが作成されました',
     creationTitle: '🎉 ナレッジが作成されました',

+ 1 - 1
web/i18n/ko-KR/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     webpageUnit: '페이지',
     webpageUnit: '페이지',
     websiteSource: '웹 사이트 전처리',
     websiteSource: '웹 사이트 전처리',
     separatorTip: '구분 기호는 텍스트를 구분하는 데 사용되는 문자입니다. \\n\\n 및 \\n은 단락과 줄을 구분하는 데 일반적으로 사용되는 구분 기호입니다. 쉼표(\\n\\n,\\n)와 함께 사용하면 최대 청크 길이를 초과할 경우 단락이 줄로 분할됩니다. 직접 정의한 특수 구분 기호(예: ***)를 사용할 수도 있습니다.',
     separatorTip: '구분 기호는 텍스트를 구분하는 데 사용되는 문자입니다. \\n\\n 및 \\n은 단락과 줄을 구분하는 데 일반적으로 사용되는 구분 기호입니다. 쉼표(\\n\\n,\\n)와 함께 사용하면 최대 청크 길이를 초과할 경우 단락이 줄로 분할됩니다. 직접 정의한 특수 구분 기호(예: ***)를 사용할 수도 있습니다.',
-    maxLengthCheck: '최대 청크 길이는 4000 미만이어야 합니다.',
+    maxLengthCheck: '최대 청크 길이는 {{limit}} 미만이어야 합니다.',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 지식이 생성되었습니다',
     creationTitle: '🎉 지식이 생성되었습니다',

+ 1 - 1
web/i18n/pl-PL/dataset-creation.ts

@@ -155,7 +155,7 @@ const translation = {
     webpageUnit: 'Stron',
     webpageUnit: 'Stron',
     websiteSource: 'Witryna internetowa przetwarzania wstępnego',
     websiteSource: 'Witryna internetowa przetwarzania wstępnego',
     separatorTip: 'Ogranicznik to znak używany do oddzielania tekstu. \\n\\n i \\n są powszechnie używanymi ogranicznikami do oddzielania akapitów i wierszy. W połączeniu z przecinkami (\\n\\n,\\n), akapity będą segmentowane wierszami po przekroczeniu maksymalnej długości fragmentu. Możesz również skorzystać ze zdefiniowanych przez siebie specjalnych ograniczników (np. ***).',
     separatorTip: 'Ogranicznik to znak używany do oddzielania tekstu. \\n\\n i \\n są powszechnie używanymi ogranicznikami do oddzielania akapitów i wierszy. W połączeniu z przecinkami (\\n\\n,\\n), akapity będą segmentowane wierszami po przekroczeniu maksymalnej długości fragmentu. Możesz również skorzystać ze zdefiniowanych przez siebie specjalnych ograniczników (np. ***).',
-    maxLengthCheck: 'Maksymalna długość porcji powinna być mniejsza niż 4000',
+    maxLengthCheck: 'Maksymalna długość porcji powinna być mniejsza niż {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Utworzono Wiedzę',
     creationTitle: '🎉 Utworzono Wiedzę',

+ 1 - 1
web/i18n/pt-BR/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     websiteSource: 'Site de pré-processamento',
     websiteSource: 'Site de pré-processamento',
     webpageUnit: 'Páginas',
     webpageUnit: 'Páginas',
     separatorTip: 'Um delimitador é o caractere usado para separar o texto. \\n\\n e \\n são delimitadores comumente usados para separar parágrafos e linhas. Combinado com vírgulas (\\n\\n,\\n), os parágrafos serão segmentados por linhas ao exceder o comprimento máximo do bloco. Você também pode usar delimitadores especiais definidos por você (por exemplo, ***).',
     separatorTip: 'Um delimitador é o caractere usado para separar o texto. \\n\\n e \\n são delimitadores comumente usados para separar parágrafos e linhas. Combinado com vírgulas (\\n\\n,\\n), os parágrafos serão segmentados por linhas ao exceder o comprimento máximo do bloco. Você também pode usar delimitadores especiais definidos por você (por exemplo, ***).',
-    maxLengthCheck: 'O comprimento máximo do chunk deve ser inferior a 4000',
+    maxLengthCheck: 'O comprimento máximo do chunk deve ser inferior a {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Conhecimento criado',
     creationTitle: '🎉 Conhecimento criado',

+ 1 - 1
web/i18n/ro-RO/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     webpageUnit: 'Pagini',
     webpageUnit: 'Pagini',
     websiteSource: 'Site-ul web de preprocesare',
     websiteSource: 'Site-ul web de preprocesare',
     separatorTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n\\n și \\n sunt delimitatori utilizați în mod obișnuit pentru separarea paragrafelor și liniilor. Combinate cu virgule (\\n\\n,\\n), paragrafele vor fi segmentate pe linii atunci când depășesc lungimea maximă a bucății. De asemenea, puteți utiliza delimitatori speciali definiți de dumneavoastră (de exemplu, ***).',
     separatorTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n\\n și \\n sunt delimitatori utilizați în mod obișnuit pentru separarea paragrafelor și liniilor. Combinate cu virgule (\\n\\n,\\n), paragrafele vor fi segmentate pe linii atunci când depășesc lungimea maximă a bucății. De asemenea, puteți utiliza delimitatori speciali definiți de dumneavoastră (de exemplu, ***).',
-    maxLengthCheck: 'Lungimea maximă a bucății trebuie să fie mai mică de 4000',
+    maxLengthCheck: 'Lungimea maximă a bucății trebuie să fie mai mică de {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Cunoștință creată',
     creationTitle: '🎉 Cunoștință creată',

+ 1 - 1
web/i18n/ru-RU/dataset-creation.ts

@@ -147,7 +147,7 @@ const translation = {
     retrievalSettingTip: 'Чтобы изменить метод индексации, пожалуйста, перейдите в ',
     retrievalSettingTip: 'Чтобы изменить метод индексации, пожалуйста, перейдите в ',
     datasetSettingLink: 'настройки базы знаний.',
     datasetSettingLink: 'настройки базы знаний.',
     separatorTip: 'Разделитель — это символ, используемый для разделения текста. \\n\\n и \\n — это часто используемые разделители для разделения абзацев и строк. В сочетании с запятыми (\\n\\n,\\n) абзацы будут сегментированы по строкам, если максимальная длина блока превышает их. Вы также можете использовать специальные разделители, определенные вами (например, ***).',
     separatorTip: 'Разделитель — это символ, используемый для разделения текста. \\n\\n и \\n — это часто используемые разделители для разделения абзацев и строк. В сочетании с запятыми (\\n\\n,\\n) абзацы будут сегментированы по строкам, если максимальная длина блока превышает их. Вы также можете использовать специальные разделители, определенные вами (например, ***).',
-    maxLengthCheck: 'Максимальная длина блока должна быть меньше 4000',
+    maxLengthCheck: 'Максимальная длина блока должна быть меньше {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 База знаний создана',
     creationTitle: '🎉 База знаний создана',

+ 1 - 1
web/i18n/sl-SI/dataset-creation.ts

@@ -152,7 +152,7 @@ const translation = {
     indexSettingTip: 'Če želite spremeniti način indeksiranja in model vdelave, pojdite na ',
     indexSettingTip: 'Če želite spremeniti način indeksiranja in model vdelave, pojdite na ',
     retrievalSettingTip: 'Če želite spremeniti nastavitve iskanja, pojdite na ',
     retrievalSettingTip: 'Če želite spremeniti nastavitve iskanja, pojdite na ',
     datasetSettingLink: 'nastavitve Znanja.',
     datasetSettingLink: 'nastavitve Znanja.',
-    maxLengthCheck: 'Največja dolžina kosa mora biti manjša od 4000',
+    maxLengthCheck: 'Največja dolžina kosa mora biti manjša od {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Znanje ustvarjeno',
     creationTitle: '🎉 Znanje ustvarjeno',

+ 1 - 1
web/i18n/th-TH/dataset-creation.ts

@@ -103,7 +103,7 @@ const translation = {
     separatorTip: 'ตัวคั่นคืออักขระที่ใช้ในการแยกข้อความ \\n\\n และ \\n เป็นตัวคั่นที่ใช้กันทั่วไปสําหรับการแยกย่อหน้าและบรรทัด เมื่อรวมกับเครื่องหมายจุลภาค (\\n\\n,\\n) ย่อหน้าจะถูกแบ่งตามบรรทัดเมื่อเกินความยาวของก้อนสูงสุด คุณยังสามารถใช้ตัวคั่นพิเศษที่กําหนดโดยตัวคุณเอง (เช่น ***)',
     separatorTip: 'ตัวคั่นคืออักขระที่ใช้ในการแยกข้อความ \\n\\n และ \\n เป็นตัวคั่นที่ใช้กันทั่วไปสําหรับการแยกย่อหน้าและบรรทัด เมื่อรวมกับเครื่องหมายจุลภาค (\\n\\n,\\n) ย่อหน้าจะถูกแบ่งตามบรรทัดเมื่อเกินความยาวของก้อนสูงสุด คุณยังสามารถใช้ตัวคั่นพิเศษที่กําหนดโดยตัวคุณเอง (เช่น ***)',
     separatorPlaceholder: '\\n\\n สําหรับแยกย่อหน้า \\n สําหรับแยกเส้น',
     separatorPlaceholder: '\\n\\n สําหรับแยกย่อหน้า \\n สําหรับแยกเส้น',
     maxLength: 'ความยาวก้อนสูงสุด',
     maxLength: 'ความยาวก้อนสูงสุด',
-    maxLengthCheck: 'ความยาวก้อนสูงสุดควรน้อยกว่า 4000',
+    maxLengthCheck: 'ความยาวก้อนสูงสุดควรน้อยกว่า {{limit}}',
     overlap: 'การทับซ้อนกันของก้อน',
     overlap: 'การทับซ้อนกันของก้อน',
     overlapTip: 'การตั้งค่าการทับซ้อนกันของกลุ่มสามารถรักษาความเกี่ยวข้องทางความหมายระหว่างกันได้ ขอแนะนําให้ตั้งค่า 10%-25% ของขนาดก้อนสูงสุด',
     overlapTip: 'การตั้งค่าการทับซ้อนกันของกลุ่มสามารถรักษาความเกี่ยวข้องทางความหมายระหว่างกันได้ ขอแนะนําให้ตั้งค่า 10%-25% ของขนาดก้อนสูงสุด',
     overlapCheck: 'การทับซ้อนกันของก้อนไม่ควรใหญ่กว่าความยาวของก้อนสูงสุด',
     overlapCheck: 'การทับซ้อนกันของก้อนไม่ควรใหญ่กว่าความยาวของก้อนสูงสุด',

+ 1 - 1
web/i18n/tr-TR/dataset-creation.ts

@@ -147,7 +147,7 @@ const translation = {
     retrievalSettingTip: 'Dizin yöntemini değiştirmek için, lütfen',
     retrievalSettingTip: 'Dizin yöntemini değiştirmek için, lütfen',
     datasetSettingLink: 'Bilgi ayarlarına gidin.',
     datasetSettingLink: 'Bilgi ayarlarına gidin.',
     separatorTip: 'Sınırlayıcı, metni ayırmak için kullanılan karakterdir. \\n\\n ve \\n, paragrafları ve satırları ayırmak için yaygın olarak kullanılan sınırlayıcılardır. Virgüllerle (\\n\\n,\\n) birleştirildiğinde, paragraflar maksimum öbek uzunluğunu aştığında satırlarla bölünür. Kendiniz tarafından tanımlanan özel sınırlayıcıları da kullanabilirsiniz (örn.',
     separatorTip: 'Sınırlayıcı, metni ayırmak için kullanılan karakterdir. \\n\\n ve \\n, paragrafları ve satırları ayırmak için yaygın olarak kullanılan sınırlayıcılardır. Virgüllerle (\\n\\n,\\n) birleştirildiğinde, paragraflar maksimum öbek uzunluğunu aştığında satırlarla bölünür. Kendiniz tarafından tanımlanan özel sınırlayıcıları da kullanabilirsiniz (örn.',
-    maxLengthCheck: 'Maksimum yığın uzunluğu 4000\'den az olmalıdır',
+    maxLengthCheck: 'Maksimum yığın uzunluğu {{limit}}\'den az olmalıdır',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Bilgi oluşturuldu',
     creationTitle: '🎉 Bilgi oluşturuldu',

+ 1 - 1
web/i18n/uk-UA/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     webpageUnit: 'Сторінок',
     webpageUnit: 'Сторінок',
     websiteSource: 'Веб-сайт попередньої обробки',
     websiteSource: 'Веб-сайт попередньої обробки',
     separatorTip: 'Роздільник – це символ, який використовується для поділу тексту. \\n\\n та \\n є часто використовуваними роздільниками для відокремлення абзаців та рядків. У поєднанні з комами (\\n\\n,\\n) абзаци будуть розділені лініями, якщо вони перевищують максимальну довжину фрагмента. Ви також можете використовувати спеціальні роздільники, визначені вами (наприклад, ***).',
     separatorTip: 'Роздільник – це символ, який використовується для поділу тексту. \\n\\n та \\n є часто використовуваними роздільниками для відокремлення абзаців та рядків. У поєднанні з комами (\\n\\n,\\n) абзаци будуть розділені лініями, якщо вони перевищують максимальну довжину фрагмента. Ви також можете використовувати спеціальні роздільники, визначені вами (наприклад, ***).',
-    maxLengthCheck: 'Максимальна довжина шматка має бути меншою за 4000',
+    maxLengthCheck: 'Максимальна довжина шматка має бути меншою за {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Знання створено',
     creationTitle: '🎉 Знання створено',

+ 1 - 1
web/i18n/vi-VN/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     websiteSource: 'Trang web tiền xử lý',
     websiteSource: 'Trang web tiền xử lý',
     webpageUnit: 'Trang',
     webpageUnit: 'Trang',
     separatorTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n và \\n là dấu phân cách thường được sử dụng để tách các đoạn văn và dòng. Kết hợp với dấu phẩy (\\n\\n,\\n), các đoạn văn sẽ được phân đoạn theo các dòng khi vượt quá độ dài đoạn tối đa. Bạn cũng có thể sử dụng dấu phân cách đặc biệt do chính bạn xác định (ví dụ: ***).',
     separatorTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n và \\n là dấu phân cách thường được sử dụng để tách các đoạn văn và dòng. Kết hợp với dấu phẩy (\\n\\n,\\n), các đoạn văn sẽ được phân đoạn theo các dòng khi vượt quá độ dài đoạn tối đa. Bạn cũng có thể sử dụng dấu phân cách đặc biệt do chính bạn xác định (ví dụ: ***).',
-    maxLengthCheck: 'Chiều dài đoạn tối đa phải nhỏ hơn 4000',
+    maxLengthCheck: 'Chiều dài đoạn tối đa phải nhỏ hơn {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 Kiến thức đã được tạo',
     creationTitle: '🎉 Kiến thức đã được tạo',

+ 1 - 1
web/i18n/zh-Hans/dataset-creation.ts

@@ -103,7 +103,7 @@ const translation = {
     separatorTip: '分隔符是用于分隔文本的字符。\\n\\n 和 \\n 是常用于分隔段落和行的分隔符。用逗号连接分隔符(\\n\\n,\\n),当段落超过最大块长度时,会按行进行分割。你也可以使用自定义的特殊分隔符(例如 ***)。',
     separatorTip: '分隔符是用于分隔文本的字符。\\n\\n 和 \\n 是常用于分隔段落和行的分隔符。用逗号连接分隔符(\\n\\n,\\n),当段落超过最大块长度时,会按行进行分割。你也可以使用自定义的特殊分隔符(例如 ***)。',
     separatorPlaceholder: '\\n\\n 用于分段;\\n 用于分行',
     separatorPlaceholder: '\\n\\n 用于分段;\\n 用于分行',
     maxLength: '分段最大长度',
     maxLength: '分段最大长度',
-    maxLengthCheck: '分段最大长度不能大于 4000',
+    maxLengthCheck: '分段最大长度不能大于 {{limit}}',
     overlap: '分段重叠长度',
     overlap: '分段重叠长度',
     overlapTip: '设置分段之间的重叠长度可以保留分段之间的语义关系,提升召回效果。建议设置为最大分段长度的10%-25%',
     overlapTip: '设置分段之间的重叠长度可以保留分段之间的语义关系,提升召回效果。建议设置为最大分段长度的10%-25%',
     overlapCheck: '分段重叠长度不能大于分段最大长度',
     overlapCheck: '分段重叠长度不能大于分段最大长度',

+ 1 - 1
web/i18n/zh-Hant/dataset-creation.ts

@@ -142,7 +142,7 @@ const translation = {
     websiteSource: '預處理網站',
     websiteSource: '預處理網站',
     webpageUnit: '頁面',
     webpageUnit: '頁面',
     separatorTip: '分隔符是用於分隔文字的字元。\\n\\n 和 \\n 是分隔段落和行的常用分隔符。與逗號 (\\n\\n,\\n) 組合使用時,當超過最大區塊長度時,段落將按行分段。您也可以使用自定義的特殊分隔符(例如 ***)。',
     separatorTip: '分隔符是用於分隔文字的字元。\\n\\n 和 \\n 是分隔段落和行的常用分隔符。與逗號 (\\n\\n,\\n) 組合使用時,當超過最大區塊長度時,段落將按行分段。您也可以使用自定義的特殊分隔符(例如 ***)。',
-    maxLengthCheck: '塊最大長度應小於 4000',
+    maxLengthCheck: '塊最大長度應小於 {{limit}}',
   },
   },
   stepThree: {
   stepThree: {
     creationTitle: '🎉 知識庫已建立',
     creationTitle: '🎉 知識庫已建立',

+ 5 - 0
web/models/datasets.ts

@@ -175,6 +175,7 @@ export type ProcessMode = 'automatic' | 'custom'
 export type ProcessRuleResponse = {
 export type ProcessRuleResponse = {
   mode: ProcessMode
   mode: ProcessMode
   rules: Rules
   rules: Rules
+  limits: Limits
 }
 }
 
 
 export type Rules = {
 export type Rules = {
@@ -182,6 +183,10 @@ export type Rules = {
   segmentation: Segmentation
   segmentation: Segmentation
 }
 }
 
 
+export type Limits = {
+  indexing_max_segmentation_tokens_length: number
+}
+
 export type PreProcessingRule = {
 export type PreProcessingRule = {
   id: string
   id: string
   enabled: boolean
   enabled: boolean