visualiser2 / src /schema /nn3d.schema.json
Vishalpainjane's picture
added files
8a01471
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://nn3d.dev/schema/nn3d.schema.json",
"title": "NN3D Neural Network Schema",
"description": "Schema for defining neural network architectures for 3D visualization",
"type": "object",
"required": ["version", "metadata", "graph"],
"properties": {
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"description": "Schema version (semver format)"
},
"metadata": {
"$ref": "#/definitions/Metadata"
},
"graph": {
"$ref": "#/definitions/Graph"
},
"visualization": {
"$ref": "#/definitions/VisualizationConfig"
},
"activations": {
"$ref": "#/definitions/ActivationData"
}
},
"definitions": {
"Metadata": {
"type": "object",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"description": "Model name"
},
"description": {
"type": "string",
"description": "Model description"
},
"framework": {
"type": "string",
"enum": ["pytorch", "tensorflow", "keras", "onnx", "jax", "custom"],
"description": "Source framework"
},
"author": {
"type": "string"
},
"created": {
"type": "string",
"format": "date-time"
},
"tags": {
"type": "array",
"items": { "type": "string" }
},
"inputShape": {
"$ref": "#/definitions/TensorShape"
},
"outputShape": {
"$ref": "#/definitions/TensorShape"
},
"totalParams": {
"type": "integer",
"minimum": 0
},
"trainableParams": {
"type": "integer",
"minimum": 0
}
}
},
"Graph": {
"type": "object",
"required": ["nodes", "edges"],
"properties": {
"nodes": {
"type": "array",
"items": { "$ref": "#/definitions/Node" },
"description": "List of layer nodes"
},
"edges": {
"type": "array",
"items": { "$ref": "#/definitions/Edge" },
"description": "Connections between nodes"
},
"subgraphs": {
"type": "array",
"items": { "$ref": "#/definitions/Subgraph" },
"description": "Nested subgraphs (for modules/blocks)"
}
}
},
"Node": {
"type": "object",
"required": ["id", "type", "name"],
"properties": {
"id": {
"type": "string",
"description": "Unique node identifier"
},
"type": {
"$ref": "#/definitions/LayerType"
},
"name": {
"type": "string",
"description": "Human-readable layer name"
},
"params": {
"$ref": "#/definitions/LayerParams"
},
"inputShape": {
"$ref": "#/definitions/TensorShape"
},
"outputShape": {
"$ref": "#/definitions/TensorShape"
},
"position": {
"$ref": "#/definitions/Position3D"
},
"weights": {
"$ref": "#/definitions/WeightRef"
},
"attributes": {
"type": "object",
"additionalProperties": true,
"description": "Additional layer-specific attributes"
},
"group": {
"type": "string",
"description": "Group/block this node belongs to"
},
"depth": {
"type": "integer",
"minimum": 0,
"description": "Depth level in the network"
}
}
},
"LayerType": {
"type": "string",
"enum": [
"input",
"output",
"conv1d",
"conv2d",
"conv3d",
"convTranspose2d",
"depthwiseConv2d",
"separableConv2d",
"linear",
"dense",
"embedding",
"batchNorm1d",
"batchNorm2d",
"layerNorm",
"groupNorm",
"instanceNorm",
"dropout",
"relu",
"leakyRelu",
"gelu",
"silu",
"sigmoid",
"tanh",
"softmax",
"maxPool1d",
"maxPool2d",
"avgPool2d",
"globalAvgPool",
"adaptiveAvgPool",
"flatten",
"reshape",
"concat",
"add",
"multiply",
"split",
"attention",
"multiHeadAttention",
"selfAttention",
"crossAttention",
"lstm",
"gru",
"rnn",
"transformer",
"encoderBlock",
"decoderBlock",
"residualBlock",
"upsample",
"interpolate",
"pad",
"custom"
]
},
"LayerParams": {
"type": "object",
"properties": {
"inChannels": { "type": "integer" },
"outChannels": { "type": "integer" },
"inFeatures": { "type": "integer" },
"outFeatures": { "type": "integer" },
"kernelSize": {
"oneOf": [
{ "type": "integer" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"stride": {
"oneOf": [
{ "type": "integer" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"padding": {
"oneOf": [
{ "type": "integer" },
{ "type": "string" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"dilation": {
"oneOf": [
{ "type": "integer" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"groups": { "type": "integer" },
"bias": { "type": "boolean" },
"numHeads": { "type": "integer" },
"hiddenSize": { "type": "integer" },
"dropoutRate": { "type": "number", "minimum": 0, "maximum": 1 },
"eps": { "type": "number" },
"momentum": { "type": "number" },
"affine": { "type": "boolean" },
"numEmbeddings": { "type": "integer" },
"embeddingDim": { "type": "integer" },
"axis": { "type": "integer" },
"scaleFactor": { "type": "number" },
"mode": { "type": "string" }
},
"additionalProperties": true
},
"Edge": {
"type": "object",
"required": ["source", "target"],
"properties": {
"id": {
"type": "string",
"description": "Unique edge identifier"
},
"source": {
"type": "string",
"description": "Source node ID"
},
"target": {
"type": "string",
"description": "Target node ID"
},
"sourcePort": {
"type": "integer",
"description": "Output port index on source node"
},
"targetPort": {
"type": "integer",
"description": "Input port index on target node"
},
"tensorShape": {
"$ref": "#/definitions/TensorShape"
},
"dtype": {
"type": "string",
"enum": ["float16", "float32", "float64", "int32", "int64", "bool"]
},
"label": {
"type": "string"
}
}
},
"Subgraph": {
"type": "object",
"required": ["id", "name", "nodes"],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["sequential", "residual", "parallel", "attention", "custom"]
},
"nodes": {
"type": "array",
"items": { "type": "string" },
"description": "Node IDs belonging to this subgraph"
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"collapsed": {
"type": "boolean",
"default": false
}
}
},
"TensorShape": {
"type": "array",
"items": {
"oneOf": [
{ "type": "integer", "minimum": -1 },
{ "type": "string" }
]
},
"description": "Tensor dimensions (-1 or string for dynamic)"
},
"Position3D": {
"type": "object",
"properties": {
"x": { "type": "number" },
"y": { "type": "number" },
"z": { "type": "number" }
},
"required": ["x", "y", "z"]
},
"WeightRef": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL to weight blob"
},
"offset": {
"type": "integer",
"description": "Byte offset in weight file"
},
"size": {
"type": "integer",
"description": "Size in bytes"
},
"dtype": {
"type": "string"
},
"shape": {
"$ref": "#/definitions/TensorShape"
}
}
},
"VisualizationConfig": {
"type": "object",
"properties": {
"layout": {
"type": "string",
"enum": ["layered", "force", "circular", "hierarchical", "custom"],
"default": "layered"
},
"theme": {
"type": "string",
"enum": ["light", "dark", "blueprint"],
"default": "dark"
},
"layerSpacing": {
"type": "number",
"default": 2.0
},
"nodeScale": {
"type": "number",
"default": 1.0
},
"colorScheme": {
"type": "object",
"additionalProperties": { "type": "string" }
},
"camera": {
"type": "object",
"properties": {
"position": { "$ref": "#/definitions/Position3D" },
"target": { "$ref": "#/definitions/Position3D" },
"fov": { "type": "number", "default": 60 }
}
},
"showLabels": { "type": "boolean", "default": true },
"showEdges": { "type": "boolean", "default": true },
"edgeStyle": {
"type": "string",
"enum": ["line", "tube", "arrow", "bezier"],
"default": "tube"
}
}
},
"ActivationData": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": ["file", "live", "embedded"]
},
"url": {
"type": "string",
"format": "uri"
},
"nodeActivations": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"min": { "type": "number" },
"max": { "type": "number" },
"mean": { "type": "number" },
"std": { "type": "number" },
"histogram": {
"type": "array",
"items": { "type": "number" }
}
}
}
}
}
}
}
}