This commit is contained in:
Timothy Jaeryang Baek 2026-10-30 07:15:50 +09:00
parent 7618df3f53
commit 5c4fb61d86
6 changed files with 33 additions and 10 deletions

View file

@ -996,8 +996,13 @@ ENABLE_RAG_HYBRID_SEARCH_ENRICHED_TEXTS = (
RAG_FULL_CONTEXT = os.getenv('RAG_FULL_CONTEXT', 'False').lower() == 'true'
RAG_FILE_MAX_COUNT = int(os.getenv('RAG_FILE_MAX_COUNT')) if os.getenv('RAG_FILE_MAX_COUNT') else None
KNOWLEDGE_MAX_UPLOAD_COUNT = (
int(os.getenv('KNOWLEDGE_MAX_UPLOAD_COUNT')) if os.getenv('KNOWLEDGE_MAX_UPLOAD_COUNT') else None
)
KNOWLEDGE_MAX_FILE_COUNT = int(os.getenv('KNOWLEDGE_MAX_FILE_COUNT')) if os.getenv('KNOWLEDGE_MAX_FILE_COUNT') else None
KNOWLEDGE_MAX_FILE_SIZE = int(os.getenv('KNOWLEDGE_MAX_FILE_SIZE')) if os.getenv('KNOWLEDGE_MAX_FILE_SIZE') else None
if KNOWLEDGE_MAX_UPLOAD_COUNT is not None and KNOWLEDGE_MAX_UPLOAD_COUNT <= 0:
raise ValueError('KNOWLEDGE_MAX_UPLOAD_COUNT must be a positive integer or unset')
if KNOWLEDGE_MAX_FILE_COUNT is not None and KNOWLEDGE_MAX_FILE_COUNT <= 0:
raise ValueError('KNOWLEDGE_MAX_FILE_COUNT must be a positive integer or unset')
if KNOWLEDGE_MAX_FILE_SIZE is not None and KNOWLEDGE_MAX_FILE_SIZE <= 0:
@ -3019,6 +3024,7 @@ DEFAULT_CONFIG = {
'rag.enable_hybrid_search_enriched_texts': ENABLE_RAG_HYBRID_SEARCH_ENRICHED_TEXTS,
'rag.full_context': RAG_FULL_CONTEXT,
'rag.file.max_count': RAG_FILE_MAX_COUNT,
'knowledge.max_upload_count': KNOWLEDGE_MAX_UPLOAD_COUNT,
'knowledge.max_file_count': KNOWLEDGE_MAX_FILE_COUNT,
'knowledge.max_file_size': KNOWLEDGE_MAX_FILE_SIZE,
'rag.file.max_size': RAG_FILE_MAX_SIZE,

View file

@ -1418,7 +1418,7 @@ async def check_knowledge_upload_limits(
db=None,
) -> None:
if batch:
batch_limit = await Config.get('rag.file.max_count')
batch_limit = await Config.get('knowledge.max_upload_count')
if batch_limit is not None and count > int(batch_limit):
raise HTTPException(400, f'You can only upload a maximum of {batch_limit} file(s) per batch.')
@ -2156,7 +2156,7 @@ async def add_files_to_knowledge_batch(
detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
)
batch_limit = await Config.get('rag.file.max_count')
batch_limit = await Config.get('knowledge.max_upload_count')
if batch_limit is not None and len(form_data) > int(batch_limit):
raise HTTPException(400, f'You can only upload a maximum of {batch_limit} file(s) per batch.')

View file

@ -305,6 +305,7 @@ RETRIEVAL_CONFIG_KEYS = {
'FILE_IMAGE_COMPRESSION_HEIGHT': 'file.image_compression_height',
'FILE_IMAGE_COMPRESSION_WIDTH': 'file.image_compression_width',
'FILE_MAX_COUNT': 'rag.file.max_count',
'KNOWLEDGE_MAX_UPLOAD_COUNT': 'knowledge.max_upload_count',
'KNOWLEDGE_MAX_FILE_COUNT': 'knowledge.max_file_count',
'KNOWLEDGE_MAX_FILE_SIZE': 'knowledge.max_file_size',
'FILE_MAX_SIZE': 'rag.file.max_size',
@ -686,6 +687,7 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
# File upload settings
'FILE_MAX_SIZE': config['rag.file.max_size'],
'FILE_MAX_COUNT': config['rag.file.max_count'],
'KNOWLEDGE_MAX_UPLOAD_COUNT': config['knowledge.max_upload_count'],
'KNOWLEDGE_MAX_FILE_COUNT': config['knowledge.max_file_count'],
'KNOWLEDGE_MAX_FILE_SIZE': config['knowledge.max_file_size'],
'FILE_IMAGE_COMPRESSION_WIDTH': config['file.image_compression_width'],
@ -939,6 +941,7 @@ class ConfigForm(BaseModel):
# File upload settings
FILE_MAX_SIZE: Union[int, str | None] = None
FILE_MAX_COUNT: Union[int, str | None] = None
KNOWLEDGE_MAX_UPLOAD_COUNT: Union[int, str | None] = None
KNOWLEDGE_MAX_FILE_COUNT: Union[int, str | None] = None
KNOWLEDGE_MAX_FILE_SIZE: Union[int, str | None] = None
FILE_IMAGE_COMPRESSION_WIDTH: Union[int, str | None] = None
@ -1007,6 +1010,7 @@ async def update_rag_config(request: Request, form_data: ConfigForm, user=Depend
for field in (
'FILE_MAX_SIZE',
'FILE_MAX_COUNT',
'KNOWLEDGE_MAX_UPLOAD_COUNT',
'KNOWLEDGE_MAX_FILE_COUNT',
'KNOWLEDGE_MAX_FILE_SIZE',
'FILE_IMAGE_COMPRESSION_WIDTH',
@ -1016,6 +1020,7 @@ async def update_rag_config(request: Request, form_data: ConfigForm, user=Depend
updates[RETRIEVAL_CONFIG_KEYS[field]] = None
for field, label in (
('KNOWLEDGE_MAX_UPLOAD_COUNT', 'Knowledge batch upload limit'),
('KNOWLEDGE_MAX_FILE_COUNT', 'Knowledge file count limit'),
('KNOWLEDGE_MAX_FILE_SIZE', 'Knowledge file size limit'),
):
@ -1145,6 +1150,7 @@ async def update_rag_config(request: Request, form_data: ConfigForm, user=Depend
# File upload settings
'FILE_MAX_SIZE': config['rag.file.max_size'],
'FILE_MAX_COUNT': config['rag.file.max_count'],
'KNOWLEDGE_MAX_UPLOAD_COUNT': config['knowledge.max_upload_count'],
'KNOWLEDGE_MAX_FILE_COUNT': config['knowledge.max_file_count'],
'KNOWLEDGE_MAX_FILE_SIZE': config['knowledge.max_file_size'],
'FILE_IMAGE_COMPRESSION_WIDTH': config['file.image_compression_width'],

View file

@ -282,6 +282,7 @@
// can distinguish "clear this field" from "don't change this field"
FILE_MAX_SIZE: RAGConfig.FILE_MAX_SIZE ?? '',
FILE_MAX_COUNT: RAGConfig.FILE_MAX_COUNT ?? '',
KNOWLEDGE_MAX_UPLOAD_COUNT: RAGConfig.KNOWLEDGE_MAX_UPLOAD_COUNT ?? '',
KNOWLEDGE_MAX_FILE_COUNT: RAGConfig.KNOWLEDGE_MAX_FILE_COUNT ?? '',
KNOWLEDGE_MAX_FILE_SIZE: RAGConfig.KNOWLEDGE_MAX_FILE_SIZE ?? '',
FILE_IMAGE_COMPRESSION_WIDTH: RAGConfig.FILE_IMAGE_COMPRESSION_WIDTH ?? '',
@ -1593,6 +1594,21 @@
</AdminSettingField>
</div>
<AdminSettingField
label={$i18n.t('settings.admin.documents.knowledgeMaxUploadCount.label')}
description={$i18n.t('settings.admin.documents.knowledgeMaxUploadCount.description')}
>
<input
class={inputClass}
type="number"
placeholder={$i18n.t('Leave empty for unlimited')}
bind:value={RAGConfig.KNOWLEDGE_MAX_UPLOAD_COUNT}
autocomplete="off"
min="1"
step="1"
/>
</AdminSettingField>
<div class="grid grid-cols-1 gap-x-3 gap-y-2.5 sm:grid-cols-2">
<AdminSettingField
label={$i18n.t('settings.admin.documents.knowledgeMaxSize.label')}

View file

@ -141,13 +141,6 @@
) => {
if (!knowledge) return false;
if (count === 0) return true;
const maxCount = $config?.file?.max_count;
if (maxCount != null && count > maxCount) {
toast.error(
$i18n.t('You can only upload a maximum of {{maxCount}} file(s) per batch.', { maxCount })
);
return false;
}
try {
await validateKnowledgeUpload(
localStorage.token,

View file

@ -2877,8 +2877,10 @@
"settings.admin.documents.imageCompressionWidth.label": "Image Compression Width",
"settings.admin.documents.markdownHeaderTextSplitter.description": "Split documents by markdown headers before character or token splitting.",
"settings.admin.documents.markdownHeaderTextSplitter.label": "Markdown Header Text Splitter",
"settings.admin.documents.maxUploadCount.description": "Maximum number of files that can be used at once in chat or uploaded in one knowledge base batch.",
"settings.admin.documents.maxUploadCount.description": "Maximum number of files that can be used at once in chat.",
"settings.admin.documents.maxUploadCount.label": "Max Upload Count",
"settings.admin.documents.knowledgeMaxUploadCount.label": "Knowledge Batch Upload Limit",
"settings.admin.documents.knowledgeMaxUploadCount.description": "Maximum files per upload batch. Leave empty for no limit.",
"settings.admin.documents.knowledgeMaxSize.label": "Knowledge File Size Limit",
"settings.admin.documents.knowledgeMaxSize.description": "Maximum file size in MB per knowledge base. Leave empty for no limit.",
"settings.admin.documents.knowledgeMaxCount.label": "Knowledge File Count Limit",