@dxo/graph 0.0.0 β†’ 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,6 @@
1
- # @dxo/graph
1
+ # πŸ•ΈοΈ @dxo/graph
2
2
 
3
- Placeholder package (0.0.0). Reserved for the DXO project.
3
+ **Placeholder β€” developer preview, API unstable.**
4
+
5
+ Serializable model-graph IR for Studio, CLI, and exporters. Distinguishes **module** / **execution** / **kernel** views.
6
+ Not a Netron replacement yet; no full format parsers in this stub.
@@ -0,0 +1,14 @@
1
+ import type { Module } from '@dxo/nn';
2
+ import { Linear, Sequential } from '@dxo/nn';
3
+ import { type ModelGraphV0 } from './index.js';
4
+ /** Structured unavailable execution view (no invented ops). */
5
+ export declare function executionGraphUnavailable(reason: string): ModelGraphV0;
6
+ /**
7
+ * Execution view for Linear: one matmul+bias op with concrete input/output shapes.
8
+ * This is an *execution* sketch for a given input shape β€” not the module hierarchy.
9
+ */
10
+ export declare function executionGraphFromLinear(linear: Linear, inputShape: number[], path?: string): ModelGraphV0;
11
+ /** Execution view for Sequential: one op node per layer along the actual control path. */
12
+ export declare function executionGraphFromSequential(seq: Sequential, inputShape: number[], path?: string): ModelGraphV0;
13
+ export declare function executionGraphFromModule(mod: Module, inputShape: number[], path?: string): ModelGraphV0;
14
+ //# sourceMappingURL=execution-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-graph.d.ts","sourceRoot":"","sources":["../src/execution-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAQ,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAA2E,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAUxH,+DAA+D;AAC/D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAUtE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,SAAW,GAAG,YAAY,CA4B5G;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,SAAe,GAAG,YAAY,CA4CrH;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,SAAU,GAAG,YAAY,CAIxG"}
@@ -0,0 +1,105 @@
1
+ import { Linear, Relu, Sequential } from '@dxo/nn';
2
+ import { MODEL_GRAPH_FORMAT, MODEL_GRAPH_VERSION } from './index.js';
3
+ function node(id, kind, label, modulePath, attrs) {
4
+ return { id, kind, label, modulePath, attrs };
5
+ }
6
+ function edge(id, source, target, tensor) {
7
+ return { id, source, target, tensor };
8
+ }
9
+ /** Structured unavailable execution view (no invented ops). */
10
+ export function executionGraphUnavailable(reason) {
11
+ return {
12
+ format: MODEL_GRAPH_FORMAT,
13
+ version: MODEL_GRAPH_VERSION,
14
+ view: 'execution',
15
+ availability: 'unavailable',
16
+ unavailableReason: reason,
17
+ nodes: [],
18
+ edges: [],
19
+ };
20
+ }
21
+ /**
22
+ * Execution view for Linear: one matmul+bias op with concrete input/output shapes.
23
+ * This is an *execution* sketch for a given input shape β€” not the module hierarchy.
24
+ */
25
+ export function executionGraphFromLinear(linear, inputShape, path = 'linear') {
26
+ if (inputShape.length < 1)
27
+ throw new Error('executionGraphFromLinear: empty inputShape');
28
+ const last = inputShape[inputShape.length - 1];
29
+ if (last !== linear.inFeatures) {
30
+ throw new Error(`executionGraphFromLinear: last dim ${last} != inFeatures ${linear.inFeatures}`);
31
+ }
32
+ const outShape = [...inputShape.slice(0, -1), linear.outFeatures];
33
+ const nodes = [
34
+ node('in', 'tensor', 'input', undefined, { shape: inputShape, dtype: 'f32', device: 'cpu' }),
35
+ node('op_linear', 'op', 'linear', path, {
36
+ op: 'addmm',
37
+ inFeatures: linear.inFeatures,
38
+ outFeatures: linear.outFeatures,
39
+ }),
40
+ node('out', 'tensor', 'output', undefined, { shape: outShape, dtype: 'f32', device: 'cpu' }),
41
+ ];
42
+ const edges = [
43
+ edge('e-in-op', 'in', 'op_linear', { shape: inputShape, dtype: 'f32', device: 'cpu' }),
44
+ edge('e-op-out', 'op_linear', 'out', { shape: outShape, dtype: 'f32', device: 'cpu' }),
45
+ ];
46
+ return {
47
+ format: MODEL_GRAPH_FORMAT,
48
+ version: MODEL_GRAPH_VERSION,
49
+ view: 'execution',
50
+ availability: 'ready',
51
+ nodes,
52
+ edges,
53
+ };
54
+ }
55
+ /** Execution view for Sequential: one op node per layer along the actual control path. */
56
+ export function executionGraphFromSequential(seq, inputShape, path = 'sequential') {
57
+ const nodes = [node('in', 'tensor', 'input', undefined, { shape: [...inputShape], dtype: 'f32', device: 'cpu' })];
58
+ const edges = [];
59
+ let prev = 'in';
60
+ let shape = [...inputShape];
61
+ seq.layers.forEach((layer, i) => {
62
+ const id = `op_${i}`;
63
+ if (layer instanceof Linear) {
64
+ const last = shape[shape.length - 1];
65
+ if (last !== layer.inFeatures) {
66
+ throw new Error(`executionGraphFromSequential: layer ${i} expects ${layer.inFeatures}, got ${last}`);
67
+ }
68
+ const outShape = [...shape.slice(0, -1), layer.outFeatures];
69
+ nodes.push(node(id, 'op', `linear`, `${path}/layer_${i}`, {
70
+ op: 'addmm',
71
+ inFeatures: layer.inFeatures,
72
+ outFeatures: layer.outFeatures,
73
+ }));
74
+ edges.push(edge(`e-${prev}-${id}`, prev, id, { shape: [...shape], dtype: 'f32', device: 'cpu' }));
75
+ shape = outShape;
76
+ }
77
+ else if (layer instanceof Relu) {
78
+ nodes.push(node(id, 'op', 'relu', `${path}/layer_${i}`, { op: 'relu' }));
79
+ edges.push(edge(`e-${prev}-${id}`, prev, id, { shape: [...shape], dtype: 'f32', device: 'cpu' }));
80
+ }
81
+ else {
82
+ nodes.push(node(id, 'op', layer.constructor.name, `${path}/layer_${i}`, { op: layer.constructor.name }));
83
+ edges.push(edge(`e-${prev}-${id}`, prev, id, { shape: [...shape], dtype: 'f32', device: 'cpu' }));
84
+ }
85
+ prev = id;
86
+ });
87
+ nodes.push(node('out', 'tensor', 'output', undefined, { shape: [...shape], dtype: 'f32', device: 'cpu' }));
88
+ edges.push(edge(`e-${prev}-out`, prev, 'out', { shape: [...shape], dtype: 'f32', device: 'cpu' }));
89
+ return {
90
+ format: MODEL_GRAPH_FORMAT,
91
+ version: MODEL_GRAPH_VERSION,
92
+ view: 'execution',
93
+ availability: 'ready',
94
+ nodes,
95
+ edges,
96
+ };
97
+ }
98
+ export function executionGraphFromModule(mod, inputShape, path = 'model') {
99
+ if (mod instanceof Sequential)
100
+ return executionGraphFromSequential(mod, inputShape, path);
101
+ if (mod instanceof Linear)
102
+ return executionGraphFromLinear(mod, inputShape, path);
103
+ return executionGraphUnavailable(`no execution lowering for ${mod.constructor.name}`);
104
+ }
105
+ //# sourceMappingURL=execution-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-graph.js","sourceRoot":"","sources":["../src/execution-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Model graph IR β€” module β‰  execution β‰  kernel (never collapse into one diagram).
3
+ */
4
+ export declare const MODEL_GRAPH_FORMAT: "dxo-model-graph";
5
+ export declare const MODEL_GRAPH_VERSION: 0;
6
+ export declare const MODEL_GRAPH_BUNDLE_FORMAT: "dxo-model-graph-bundle";
7
+ export type GraphViewKind = 'module' | 'execution' | 'kernel';
8
+ export type GraphAvailability = 'ready' | 'unavailable';
9
+ export type GraphNode = {
10
+ id: string;
11
+ kind: string;
12
+ label?: string;
13
+ modulePath?: string;
14
+ attrs?: Record<string, unknown>;
15
+ };
16
+ export type GraphEdge = {
17
+ id: string;
18
+ source: string;
19
+ target: string;
20
+ tensor?: {
21
+ shape?: number[];
22
+ dtype?: string;
23
+ device?: string;
24
+ };
25
+ };
26
+ export type ModelGraphV0 = {
27
+ format: typeof MODEL_GRAPH_FORMAT;
28
+ version: typeof MODEL_GRAPH_VERSION;
29
+ view: GraphViewKind;
30
+ /** Kernel (and optionally execution) may be unavailable without a profile trace / real forward. */
31
+ availability?: GraphAvailability;
32
+ unavailableReason?: string;
33
+ nodes: GraphNode[];
34
+ edges: GraphEdge[];
35
+ };
36
+ /** Three strictly separated views for Studio Models tabs. */
37
+ export type ModelGraphBundleV0 = {
38
+ format: typeof MODEL_GRAPH_BUNDLE_FORMAT;
39
+ version: 0;
40
+ module: ModelGraphV0;
41
+ execution: ModelGraphV0;
42
+ kernel: ModelGraphV0;
43
+ };
44
+ export declare function graphVersion(): string;
45
+ export { executionGraphFromLinear, executionGraphFromModule, executionGraphFromSequential, executionGraphUnavailable, } from './execution-graph.js';
46
+ export { bundleModelGraphs, kernelGraphFromProfile, kernelGraphUnavailable, parseModelGraphArtifact, } from './kernel-graph.js';
47
+ export { emptyModelGraph, moduleGraphFromLinear, moduleGraphFromModule, moduleGraphFromSequential, serializeModelGraph, } from './module-graph.js';
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,kBAAkB,EAAG,iBAA0B,CAAC;AAC7D,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAC9C,eAAO,MAAM,yBAAyB,EAAG,wBAAiC,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,aAAa,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,mGAAmG;IACnG,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,MAAM,EAAE,OAAO,yBAAyB,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACtB,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Model graph IR β€” module β‰  execution β‰  kernel (never collapse into one diagram).
3
+ */
4
+ export const MODEL_GRAPH_FORMAT = 'dxo-model-graph';
5
+ export const MODEL_GRAPH_VERSION = 0;
6
+ export const MODEL_GRAPH_BUNDLE_FORMAT = 'dxo-model-graph-bundle';
7
+ export function graphVersion() {
8
+ return `${MODEL_GRAPH_FORMAT}@${MODEL_GRAPH_VERSION}`;
9
+ }
10
+ export { executionGraphFromLinear, executionGraphFromModule, executionGraphFromSequential, executionGraphUnavailable, } from './execution-graph.js';
11
+ export { bundleModelGraphs, kernelGraphFromProfile, kernelGraphUnavailable, parseModelGraphArtifact, } from './kernel-graph.js';
12
+ export { emptyModelGraph, moduleGraphFromLinear, moduleGraphFromModule, moduleGraphFromSequential, serializeModelGraph, } from './module-graph.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAA0B,CAAC;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAU,CAAC;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAiC,CAAC;AAyC3E,MAAM,UAAU,YAAY;IACxB,OAAO,GAAG,kBAAkB,IAAI,mBAAmB,EAAE,CAAC;AAC1D,CAAC;AAED,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ProfileTraceV0 } from '@dxo/inspect';
2
+ import { type ModelGraphBundleV0, type ModelGraphV0 } from './index.js';
3
+ /** Empty kernel view with structured unavailable (never invent spans). */
4
+ export declare function kernelGraphUnavailable(reason: string): ModelGraphV0;
5
+ /**
6
+ * Build kernel view **only** from real ProfileTrace spans.
7
+ * Categories other than kernel/transfer/readback are ignored for this view.
8
+ * If none exist, returns unavailable β€” does not fabricate timing.
9
+ */
10
+ export declare function kernelGraphFromProfile(trace: ProfileTraceV0 | null | undefined): ModelGraphV0;
11
+ export declare function bundleModelGraphs(parts: {
12
+ module: ModelGraphV0;
13
+ execution: ModelGraphV0;
14
+ kernel: ModelGraphV0;
15
+ }): ModelGraphBundleV0;
16
+ /** Accept legacy single ModelGraph or a three-view bundle. */
17
+ export declare function parseModelGraphArtifact(raw: unknown): ModelGraphBundleV0;
18
+ //# sourceMappingURL=kernel-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-graph.d.ts","sourceRoot":"","sources":["../src/kernel-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAMH,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACpB,MAAM,YAAY,CAAC;AAWpB,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAUnE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CA0C7F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,kBAAkB,CAWpI;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAoDxE"}
@@ -0,0 +1,130 @@
1
+ import { MODEL_GRAPH_BUNDLE_FORMAT, MODEL_GRAPH_FORMAT, MODEL_GRAPH_VERSION, } from './index.js';
2
+ import { emptyModelGraph } from './module-graph.js';
3
+ function node(id, kind, label, attrs) {
4
+ return { id, kind, label, attrs };
5
+ }
6
+ function edge(id, source, target, tensor) {
7
+ return { id, source, target, tensor };
8
+ }
9
+ /** Empty kernel view with structured unavailable (never invent spans). */
10
+ export function kernelGraphUnavailable(reason) {
11
+ return {
12
+ format: MODEL_GRAPH_FORMAT,
13
+ version: MODEL_GRAPH_VERSION,
14
+ view: 'kernel',
15
+ availability: 'unavailable',
16
+ unavailableReason: reason,
17
+ nodes: [],
18
+ edges: [],
19
+ };
20
+ }
21
+ /**
22
+ * Build kernel view **only** from real ProfileTrace spans.
23
+ * Categories other than kernel/transfer/readback are ignored for this view.
24
+ * If none exist, returns unavailable β€” does not fabricate timing.
25
+ */
26
+ export function kernelGraphFromProfile(trace) {
27
+ if (!trace || trace.format !== 'dxo-profile') {
28
+ return kernelGraphUnavailable('no ProfileTraceV0 from runtime / inspect');
29
+ }
30
+ const spans = (trace.spans ?? []).filter((s) => !!s &&
31
+ (s.category === 'kernel' || s.category === 'transfer' || s.category === 'readback') &&
32
+ typeof s.startMs === 'number' &&
33
+ typeof s.endMs === 'number');
34
+ if (spans.length === 0) {
35
+ return kernelGraphUnavailable('ProfileTrace has no kernel/transfer/readback spans');
36
+ }
37
+ const nodes = [];
38
+ const edges = [];
39
+ let prev = null;
40
+ spans.forEach((span, i) => {
41
+ const id = `k${i}`;
42
+ nodes.push(node(id, span.category, span.name, {
43
+ startMs: span.startMs,
44
+ endMs: span.endMs,
45
+ durationMs: span.endMs - span.startMs,
46
+ ...(span.meta ?? {}),
47
+ }));
48
+ if (prev) {
49
+ edges.push(edge(`e-${prev}-${id}`, prev, id));
50
+ }
51
+ prev = id;
52
+ });
53
+ return {
54
+ format: MODEL_GRAPH_FORMAT,
55
+ version: MODEL_GRAPH_VERSION,
56
+ view: 'kernel',
57
+ availability: 'ready',
58
+ nodes,
59
+ edges,
60
+ };
61
+ }
62
+ export function bundleModelGraphs(parts) {
63
+ if (parts.module.view !== 'module')
64
+ throw new Error('bundle: module.view must be module');
65
+ if (parts.execution.view !== 'execution')
66
+ throw new Error('bundle: execution.view must be execution');
67
+ if (parts.kernel.view !== 'kernel')
68
+ throw new Error('bundle: kernel.view must be kernel');
69
+ return {
70
+ format: MODEL_GRAPH_BUNDLE_FORMAT,
71
+ version: 0,
72
+ module: parts.module,
73
+ execution: parts.execution,
74
+ kernel: parts.kernel,
75
+ };
76
+ }
77
+ /** Accept legacy single ModelGraph or a three-view bundle. */
78
+ export function parseModelGraphArtifact(raw) {
79
+ if (!raw || typeof raw !== 'object') {
80
+ const empty = emptyModelGraph('module');
81
+ return bundleModelGraphs({
82
+ module: empty,
83
+ execution: {
84
+ ...emptyModelGraph('execution'),
85
+ availability: 'unavailable',
86
+ unavailableReason: 'empty artifact',
87
+ },
88
+ kernel: kernelGraphUnavailable('empty artifact'),
89
+ });
90
+ }
91
+ const obj = raw;
92
+ if (obj.format === MODEL_GRAPH_BUNDLE_FORMAT) {
93
+ return obj;
94
+ }
95
+ if (obj.format === MODEL_GRAPH_FORMAT && obj.view === 'module') {
96
+ return bundleModelGraphs({
97
+ module: obj,
98
+ execution: {
99
+ ...emptyModelGraph('execution'),
100
+ availability: 'unavailable',
101
+ unavailableReason: 'legacy artifact had module view only',
102
+ },
103
+ kernel: kernelGraphUnavailable('legacy artifact had module view only'),
104
+ });
105
+ }
106
+ if (obj.format === MODEL_GRAPH_FORMAT) {
107
+ const g = obj;
108
+ return bundleModelGraphs({
109
+ module: g.view === 'module' ? g : emptyModelGraph('module'),
110
+ execution: g.view === 'execution'
111
+ ? g
112
+ : {
113
+ ...emptyModelGraph('execution'),
114
+ availability: 'unavailable',
115
+ unavailableReason: 'single-view artifact was not execution',
116
+ },
117
+ kernel: g.view === 'kernel' ? g : kernelGraphUnavailable('single-view artifact was not kernel'),
118
+ });
119
+ }
120
+ return bundleModelGraphs({
121
+ module: emptyModelGraph('module'),
122
+ execution: {
123
+ ...emptyModelGraph('execution'),
124
+ availability: 'unavailable',
125
+ unavailableReason: 'unrecognized model-graph artifact',
126
+ },
127
+ kernel: kernelGraphUnavailable('unrecognized model-graph artifact'),
128
+ });
129
+ }
130
+ //# sourceMappingURL=kernel-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-graph.js","sourceRoot":"","sources":["../src/kernel-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Module } from '@dxo/nn';
2
+ import { Linear, Sequential } from '@dxo/nn';
3
+ import { type GraphViewKind, type ModelGraphV0 } from './index.js';
4
+ export declare function emptyModelGraph(view?: GraphViewKind): ModelGraphV0;
5
+ export declare function serializeModelGraph(graph: ModelGraphV0): string;
6
+ export declare function moduleGraphFromLinear(linear: Linear, path?: string): ModelGraphV0;
7
+ export declare function moduleGraphFromSequential(seq: Sequential, path?: string): ModelGraphV0;
8
+ /** Build a module graph from any @dxo/nn Module (Linear or Sequential supported). */
9
+ export declare function moduleGraphFromModule(mod: Module, path?: string): ModelGraphV0;
10
+ //# sourceMappingURL=module-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-graph.d.ts","sourceRoot":"","sources":["../src/module-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAQ,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAkC,KAAK,aAAa,EAA2C,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5I,wBAAgB,eAAe,CAAC,IAAI,GAAE,aAAwB,GAAG,YAAY,CAS5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE/D;AAUD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,YAAY,CAenF;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,SAAe,GAAG,YAAY,CA2B5F;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAU,GAAG,YAAY,CAI/E"}
@@ -0,0 +1,71 @@
1
+ import { Linear, Relu, Sequential } from '@dxo/nn';
2
+ import { MODEL_GRAPH_FORMAT, MODEL_GRAPH_VERSION } from './index.js';
3
+ export function emptyModelGraph(view = 'module') {
4
+ return {
5
+ format: MODEL_GRAPH_FORMAT,
6
+ version: MODEL_GRAPH_VERSION,
7
+ view,
8
+ availability: 'ready',
9
+ nodes: [],
10
+ edges: [],
11
+ };
12
+ }
13
+ export function serializeModelGraph(graph) {
14
+ return JSON.stringify(graph);
15
+ }
16
+ function node(id, kind, label, modulePath, attrs) {
17
+ return { id, kind, label, modulePath, attrs };
18
+ }
19
+ function edge(id, source, target, tensor) {
20
+ return { id, source, target, tensor };
21
+ }
22
+ export function moduleGraphFromLinear(linear, path = 'linear') {
23
+ const nodes = [
24
+ node('input', 'tensor', 'input'),
25
+ node('linear', 'Linear', 'Linear', path, {
26
+ inFeatures: linear.inFeatures,
27
+ outFeatures: linear.outFeatures,
28
+ params: ['weight', 'bias'],
29
+ }),
30
+ node('output', 'tensor', 'output'),
31
+ ];
32
+ const edges = [
33
+ edge('e-in-linear', 'input', 'linear', { dtype: 'f32' }),
34
+ edge('e-linear-out', 'linear', 'output', { dtype: 'f32' }),
35
+ ];
36
+ return { format: MODEL_GRAPH_FORMAT, version: MODEL_GRAPH_VERSION, view: 'module', nodes, edges };
37
+ }
38
+ export function moduleGraphFromSequential(seq, path = 'sequential') {
39
+ const nodes = [node('input', 'tensor', 'input')];
40
+ const edges = [];
41
+ let prev = 'input';
42
+ seq.layers.forEach((layer, i) => {
43
+ const id = `layer_${i}`;
44
+ if (layer instanceof Linear) {
45
+ nodes.push(node(id, 'Linear', `Linear(${layer.inFeatures}->${layer.outFeatures})`, `${path}/${id}`, {
46
+ inFeatures: layer.inFeatures,
47
+ outFeatures: layer.outFeatures,
48
+ }));
49
+ }
50
+ else if (layer instanceof Relu) {
51
+ nodes.push(node(id, 'Relu', 'Relu', `${path}/${id}`));
52
+ }
53
+ else {
54
+ nodes.push(node(id, layer.constructor.name, layer.constructor.name, `${path}/${id}`));
55
+ }
56
+ edges.push(edge(`e-${prev}-${id}`, prev, id, { dtype: 'f32' }));
57
+ prev = id;
58
+ });
59
+ nodes.push(node('output', 'tensor', 'output'));
60
+ edges.push(edge(`e-${prev}-output`, prev, 'output', { dtype: 'f32' }));
61
+ return { format: MODEL_GRAPH_FORMAT, version: MODEL_GRAPH_VERSION, view: 'module', nodes, edges };
62
+ }
63
+ /** Build a module graph from any @dxo/nn Module (Linear or Sequential supported). */
64
+ export function moduleGraphFromModule(mod, path = 'model') {
65
+ if (mod instanceof Sequential)
66
+ return moduleGraphFromSequential(mod, path);
67
+ if (mod instanceof Linear)
68
+ return moduleGraphFromLinear(mod, path);
69
+ throw new Error(`moduleGraphFromModule: unsupported module ${mod.constructor.name}`);
70
+ }
71
+ //# sourceMappingURL=module-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-graph.js","sourceRoot":"","sources":["../src/module-graph.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,46 @@
1
1
  {
2
- "name": "@dxo/graph",
3
- "version": "0.0.0",
4
- "description": "DXO placeholder β€” not for production use.",
5
- "license": "MIT",
6
- "private": false,
7
- "files": [
8
- "README.md"
9
- ]
2
+ "name": "@dxo/graph",
3
+ "version": "0.0.10",
4
+ "type": "module",
5
+ "description": "DXO model graph IR: module / execution / kernel views (placeholder, API unstable)",
6
+ "license": "Apache-2.0",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json"
21
+ },
22
+ "dependencies": {
23
+ "@dxo/inspect": "0.0.10",
24
+ "@dxo/nn": "0.0.10"
25
+ },
26
+ "keywords": [
27
+ "dxo",
28
+ "graph",
29
+ "model",
30
+ "netron",
31
+ "typescript",
32
+ "deep-learning"
33
+ ],
34
+ "homepage": "https://github.com/ai4waifu/dxo-framework#readme",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/ai4waifu/dxo-framework.git",
38
+ "directory": "projects/runtimes/dxo-graph"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/ai4waifu/dxo-framework/issues"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ }
10
46
  }