inference-playground / src /lib /helpers /map-nodes-export.ts
enzostvs's picture
enzostvs HF Staff
export flow button
d0595f7
import type { Node, Edge } from '@xyflow/svelte';
import type { ChatMessage } from './types';
export function mapNodesExport(
nodes: Node[],
edges: Edge[]
): Record<string, ChatMessage[]> {
const outgoing = new Map<string, number>();
for (const node of nodes) {
outgoing.set(node.id, 0);
}
for (const edge of edges) {
outgoing.set(edge.source, (outgoing.get(edge.source) ?? 0) + 1);
}
// Each leaf user node (no outgoing edges) = one exported flow.
// This covers both fully disconnected flows and edit branches within the same tree.
const leafUserNodes = nodes.filter(
(n) =>
(n.type === 'user' || n.type === 'user-follow-up') && (outgoing.get(n.id) ?? 0) === 0
);
const result: Record<string, ChatMessage[]> = {};
leafUserNodes.forEach((node, index) => {
result[String(index + 1)] = (node.data.messages as ChatMessage[]) ?? [];
});
return result;
}