JavaScript is required

Model Invocation Relationship

AI Model Relationship Visualization

Visualizes AI model component relationships using fake lines to connect specific DOM elements within nodes.

AI Model Relationship Visualization

Functional Overview

This demo visualizes relationships between AI model components, showing how outputs from one model connect to inputs of another. It uses fixed positioning with fake lines to connect specific DOM elements within nodes.

Implementation of Key Features

1. Fixed Position Layout

Use saved positions for nodes:

const nodesPosition = [
    { id: 'm-a', x: -930.17, y: -357.63 },
    { id: 'm-b', x: -456.67, y: -468.67 },
    // ... more positions
];

myJsonData.nodes.forEach((model, index) => {
    const position = nodesPosition.find(n => n.id === model.id);
    if (position) {
        model.x = position.x;
        model.y = position.y;
    }
});

2. Fake Lines for Element Connections

Connect specific DOM elements within nodes:

myJsonData.fakeLines = modelRelations.map((relation, index) => {
    return {
        id: `line-${index}`,
        from: `O_${relation.output_model}-${relation.output_param_name}`,
        to: `I_${relation.input_model}-${relation.input_param_name}`,
        fromJunctionPoint: RGJunctionPoint.right,
        toJunctionPoint: RGJunctionPoint.left,
        lineShape: RGLineShape.StandardCurve,
        lineWidth: 3,
        color: dataTypeColorMap[outputParam.type],
        isFakeLine: true
    };
});

3. Custom Node Component

Render AI model nodes with input/output ports:

const MyAIModel = ({ node }: RGNodeSlotProps) => {
    return (
        <div className="ai-model-node">
            <div className="model-header">{node.text}</div>
            <div className="model-inputs">
                {node.data.input.map(param => (
                    <div id={`I_${node.id}-${param.name}`} className="port">
                        {param.name}
                    </div>
                ))}
            </div>
            <div className="model-outputs">
                {node.data.output.map(param => (
                    <div id={`O_${node.id}-${param.name}`} className="port">
                        {param.name}
                    </div>
                ))}
            </div>
        </div>
    );
};

4. Animated Line Highlighting

Highlight connections when clicking nodes:

const onNodeClick = (node: RGNode) => {
    const elLines = graphInstance.getFakeLines();
    elLines.forEach((line: any) => {
        const keywords = `_${node.id}-`;
        const refed = line.from.includes(keywords) || line.to.includes(keywords);
        line.animation = refed ? 2 : undefined;
    });
};

5. Data Type Color Coding

Use colors to indicate data types:

const dataTypeColorMap = {
    'tensor': '#ff6b6b',
    'float': '#4ecdc4',
    'int': '#45b7d1',
    'string': '#96ceb4'
};

Creative Use Cases

  • Machine Learning Pipelines: Visualize ML model pipelines
  • Data Flow Diagrams: Show data flow between components
  • System Architecture: Document system component relationships
  • API Integration Maps: Display API endpoint connections
  • Circuit Design: Visualize circuit component connections
  • Process Modeling: Model complex process interactions