Fix: table parser metadata (#15127)

### What problem does this PR solve?

This PR improves the table upload flow for CSV/Excel files by allowing
table column role configuration at upload time.

Previously, users had to:
1. Upload and parse a table file.
2. Open parser settings and manually set table column roles.
3. Re-parse the file for the roles to take effect.

This was inefficient and required an unnecessary second parse.

With this change:
1. When the knowledge base uses table parsing, the upload dialog
extracts CSV/Excel headers client-side.
2. Users can choose Auto mode or Manual mode.
3. In Manual mode, users can assign per-column roles before upload.
4. The selected parser config is sent with the upload request and
applied server-side during document creation.

Result: configured table column roles are applied from the first parse.

### Type of change

- [x] New Feature (non-breaking change which adds functionality)

Co-authored-by: Ahmad Intisar <ahmadintisar@Ahmads-MacBook-M4-Pro.local>
This commit is contained in:
Ahmad Intisar
2026-05-25 13:05:38 +05:00
committed by GitHub
parent e7d45dd645
commit e6068a7f7e
7 changed files with 316 additions and 26 deletions

View File

@@ -242,6 +242,7 @@ export default function Dataset() {
onOk={onDocumentUploadOk}
loading={documentUploadLoading}
showParseOnCreation
isTableParser={knowledgeBase?.chunk_method === 'table'}
></FileUploadDialog>
)}
{createVisible && (

View File

@@ -17,9 +17,27 @@ export const useHandleUploadDocument = () => {
const { runDocumentByIds } = useRunDocument();
const onDocumentUploadOk = useCallback(
async ({ fileList, parseOnCreation }: UploadFormSchemaType) => {
async ({
fileList,
parseOnCreation,
tableColumnMode,
tableColumnRoles,
}: UploadFormSchemaType) => {
if (fileList.length > 0) {
const ret = await uploadDocument(fileList);
// Build parser_config if column roles are configured
let parserConfig: Record<string, any> | undefined;
if (
tableColumnMode === 'manual' &&
tableColumnRoles &&
Object.keys(tableColumnRoles).length > 0
) {
parserConfig = {
table_column_mode: 'manual',
table_column_roles: tableColumnRoles,
};
}
const ret = await uploadDocument(fileList as File[], parserConfig);
// Check for success (code === 0) or partial success (code === 500 with some files)
const isSuccess = ret?.code === 0;