Merge branch 'db' of github.com:logspace-ai/langflow into db
This commit is contained in:
commit
d72f24a859
2 changed files with 36 additions and 42 deletions
|
|
@ -25,7 +25,6 @@ export default function BuildTrigger({
|
||||||
const { updateSSEData } = useSSE();
|
const { updateSSEData } = useSSE();
|
||||||
const { reactFlowInstance } = useContext(typesContext);
|
const { reactFlowInstance } = useContext(typesContext);
|
||||||
const { setErrorData } = useContext(alertContext);
|
const { setErrorData } = useContext(alertContext);
|
||||||
const [valid, setValid] = useState(true);
|
|
||||||
|
|
||||||
async function handleBuild(flow: FlowType) {
|
async function handleBuild(flow: FlowType) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -44,10 +43,7 @@ export default function BuildTrigger({
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
setIsBuilding(true);
|
setIsBuilding(true);
|
||||||
|
|
||||||
try {
|
const allNodesValid = await streamNodeData(flow);
|
||||||
const allNodesValid = await streamNodeData(flow, (isAllNodesValid) => {
|
|
||||||
setIsBuilt(isAllNodesValid);
|
|
||||||
});
|
|
||||||
await enforceMinimumLoadingTime(startTime, minimumLoadingTime);
|
await enforceMinimumLoadingTime(startTime, minimumLoadingTime);
|
||||||
setIsBuilt(allNodesValid);
|
setIsBuilt(allNodesValid);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -55,22 +51,19 @@ export default function BuildTrigger({
|
||||||
} finally {
|
} finally {
|
||||||
setIsBuilding(false);
|
setIsBuilding(false);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
|
||||||
console.error("Error:", error);
|
|
||||||
} finally {
|
|
||||||
setIsBuilding(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function streamNodeData(flow: FlowType, onStreamComplete) {
|
async function streamNodeData(flow: FlowType) {
|
||||||
// Make a POST request to send the flow data and receive a unique session ID
|
// Step 1: Make a POST request to send the flow data and receive a unique session ID
|
||||||
const response = await postBuildInit(flow);
|
const response = await postBuildInit(flow);
|
||||||
const { flowId } = response.data;
|
const { flowId } = response.data;
|
||||||
// Use the session ID to establish an SSE connection using EventSource
|
|
||||||
|
// Step 2: Use the session ID to establish an SSE connection using EventSource
|
||||||
|
let validationResults = [];
|
||||||
|
let finished = false;
|
||||||
const apiUrl = `/api/v1/build/stream/${flowId}`;
|
const apiUrl = `/api/v1/build/stream/${flowId}`;
|
||||||
const eventSource = new EventSource(apiUrl);
|
const eventSource = new EventSource(apiUrl);
|
||||||
|
|
||||||
try {
|
|
||||||
eventSource.onmessage = (event) => {
|
eventSource.onmessage = (event) => {
|
||||||
// If the event is parseable, return
|
// If the event is parseable, return
|
||||||
if (!event.data) {
|
if (!event.data) {
|
||||||
|
|
@ -80,22 +73,25 @@ export default function BuildTrigger({
|
||||||
// if the event is the end of the stream, close the connection
|
// if the event is the end of the stream, close the connection
|
||||||
if (parsedData.end_of_stream) {
|
if (parsedData.end_of_stream) {
|
||||||
eventSource.close();
|
eventSource.close();
|
||||||
onStreamComplete(valid);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Otherwise, process the data
|
// Otherwise, process the data
|
||||||
processStreamResult(parsedData);
|
const isValid = processStreamResult(parsedData);
|
||||||
|
validationResults.push(isValid);
|
||||||
};
|
};
|
||||||
|
|
||||||
eventSource.onerror = (error) => {
|
eventSource.onerror = (error) => {
|
||||||
console.error("EventSource failed:", error);
|
console.error("EventSource failed:", error);
|
||||||
eventSource.close();
|
eventSource.close();
|
||||||
onStreamComplete(valid);
|
|
||||||
};
|
};
|
||||||
} catch (e) {
|
// Step 3: Wait for the stream to finish
|
||||||
console.log(e);
|
while (!finished) {
|
||||||
eventSource.close();
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||||
|
finished = validationResults.length === flow.data.nodes.length;
|
||||||
}
|
}
|
||||||
|
// Step 4: Return true if all nodes are valid, false otherwise
|
||||||
|
return validationResults.every((result) => result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function processStreamResult(parsedData) {
|
function processStreamResult(parsedData) {
|
||||||
|
|
@ -106,9 +102,7 @@ export default function BuildTrigger({
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("Error parsing stream data: ", err);
|
console.log("Error parsing stream data: ", err);
|
||||||
}
|
}
|
||||||
if (!parsedData.valid) {
|
return parsedData.valid;
|
||||||
setValid(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function enforceMinimumLoadingTime(
|
async function enforceMinimumLoadingTime(
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ export default function ExtraSidebar() {
|
||||||
>
|
>
|
||||||
<Save
|
<Save
|
||||||
className={
|
className={
|
||||||
"w-5 h-5" + (isPending ? " text-muted-foreground" : " ")
|
"w-5 h-5" + (isPending ? " " : " text-muted-foreground")
|
||||||
}
|
}
|
||||||
></Save>
|
></Save>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue