show error for invalid schema in extraction, text prompt, pdf parser (#1696)

This commit is contained in:
Shuchang Zheng
2025-02-01 16:31:17 +08:00
committed by GitHub
parent 0da1e387f1
commit fc7cc209f5
3 changed files with 41 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
import type { Node } from "@xyflow/react";
import { NodeBaseData } from "../types";
import { AppNode } from "..";
export type PDFParserNodeData = NodeBaseData & {
fileUrl: string;
@@ -15,3 +16,7 @@ export const pdfParserNodeDefaultData: PDFParserNodeData = {
continueOnFailure: false,
jsonSchema: "null",
} as const;
export function isPdfParserNode(node: AppNode): node is PDFParserNode {
return node.type === "pdfParser";
}

View File

@@ -1,5 +1,6 @@
import type { Node } from "@xyflow/react";
import { NodeBaseData } from "../types";
import { AppNode } from "..";
export type TextPromptNodeData = NodeBaseData & {
prompt: string;
@@ -17,3 +18,7 @@ export const textPromptNodeDefaultData: TextPromptNodeData = {
continueOnFailure: false,
parameterKeys: [],
} as const;
export function isTextPromptNode(node: AppNode): node is TextPromptNode {
return node.type === "textPrompt";
}

View File

@@ -67,7 +67,10 @@ import {
StartNodeData,
} from "./nodes/StartNode/types";
import { isTaskNode, taskNodeDefaultData } from "./nodes/TaskNode/types";
import { textPromptNodeDefaultData } from "./nodes/TextPromptNode/types";
import {
isTextPromptNode,
textPromptNodeDefaultData,
} from "./nodes/TextPromptNode/types";
import { NodeBaseData } from "./nodes/types";
import { uploadNodeDefaultData } from "./nodes/UploadNode/types";
import {
@@ -87,7 +90,10 @@ import { loginNodeDefaultData } from "./nodes/LoginNode/types";
import { isWaitNode, waitNodeDefaultData } from "./nodes/WaitNode/types";
import { fileDownloadNodeDefaultData } from "./nodes/FileDownloadNode/types";
import { ProxyLocation } from "@/api/types";
import { pdfParserNodeDefaultData } from "./nodes/PDFParserNode/types";
import {
isPdfParserNode,
pdfParserNodeDefaultData,
} from "./nodes/PDFParserNode/types";
import { taskv2NodeDefaultData } from "./nodes/Taskv2Node/types";
import { urlNodeDefaultData } from "./nodes/URLNode/types";
@@ -1898,6 +1904,29 @@ function getWorkflowErrors(nodes: Array<AppNode>): Array<string> {
if (node.data.dataExtractionGoal.length === 0) {
errors.push(`${node.data.label}: Data extraction goal is required.`);
}
try {
JSON.parse(node.data.dataSchema);
} catch {
errors.push(`${node.data.label}: Data schema is not valid JSON.`);
}
});
const textPromptNodes = nodes.filter(isTextPromptNode);
textPromptNodes.forEach((node) => {
try {
JSON.parse(node.data.jsonSchema);
} catch {
errors.push(`${node.data.label}: Data schema is not valid JSON.`);
}
});
const pdfParserNodes = nodes.filter(isPdfParserNode);
pdfParserNodes.forEach((node) => {
try {
JSON.parse(node.data.jsonSchema);
} catch {
errors.push(`${node.data.label}: Data schema is not valid JSON.`);
}
});
const waitNodes = nodes.filter(isWaitNode);