@openmle/omle.js 0.1.0-rc4

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.
Files changed (71) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +172 -0
  3. package/dist/engine/clustering.d.ts +8 -0
  4. package/dist/engine/clustering.d.ts.map +1 -0
  5. package/dist/engine/clustering.js +161 -0
  6. package/dist/engine/clustering.js.map +1 -0
  7. package/dist/engine/executor.d.ts +57 -0
  8. package/dist/engine/executor.d.ts.map +1 -0
  9. package/dist/engine/executor.js +1160 -0
  10. package/dist/engine/executor.js.map +1 -0
  11. package/dist/engine/explain.d.ts +68 -0
  12. package/dist/engine/explain.d.ts.map +1 -0
  13. package/dist/engine/explain.js +401 -0
  14. package/dist/engine/explain.js.map +1 -0
  15. package/dist/engine/linear.d.ts +5 -0
  16. package/dist/engine/linear.d.ts.map +1 -0
  17. package/dist/engine/linear.js +37 -0
  18. package/dist/engine/linear.js.map +1 -0
  19. package/dist/engine/naive_bayes.d.ts +5 -0
  20. package/dist/engine/naive_bayes.d.ts.map +1 -0
  21. package/dist/engine/naive_bayes.js +102 -0
  22. package/dist/engine/naive_bayes.js.map +1 -0
  23. package/dist/engine/nn.d.ts +5 -0
  24. package/dist/engine/nn.d.ts.map +1 -0
  25. package/dist/engine/nn.js +34 -0
  26. package/dist/engine/nn.js.map +1 -0
  27. package/dist/engine/ops.d.ts +14 -0
  28. package/dist/engine/ops.d.ts.map +1 -0
  29. package/dist/engine/ops.js +244 -0
  30. package/dist/engine/ops.js.map +1 -0
  31. package/dist/engine/predicates.d.ts +5 -0
  32. package/dist/engine/predicates.d.ts.map +1 -0
  33. package/dist/engine/predicates.js +105 -0
  34. package/dist/engine/predicates.js.map +1 -0
  35. package/dist/engine/preprocess.d.ts +31 -0
  36. package/dist/engine/preprocess.d.ts.map +1 -0
  37. package/dist/engine/preprocess.js +1112 -0
  38. package/dist/engine/preprocess.js.map +1 -0
  39. package/dist/engine/svm.d.ts +5 -0
  40. package/dist/engine/svm.d.ts.map +1 -0
  41. package/dist/engine/svm.js +241 -0
  42. package/dist/engine/svm.js.map +1 -0
  43. package/dist/engine/tree.d.ts +6 -0
  44. package/dist/engine/tree.d.ts.map +1 -0
  45. package/dist/engine/tree.js +274 -0
  46. package/dist/engine/tree.js.map +1 -0
  47. package/dist/engine/validate_inputs.d.ts +22 -0
  48. package/dist/engine/validate_inputs.d.ts.map +1 -0
  49. package/dist/engine/validate_inputs.js +225 -0
  50. package/dist/engine/validate_inputs.js.map +1 -0
  51. package/dist/index.d.ts +12 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/io.d.ts +9 -0
  56. package/dist/io.d.ts.map +1 -0
  57. package/dist/io.js +93 -0
  58. package/dist/io.js.map +1 -0
  59. package/dist/ir.d.ts +489 -0
  60. package/dist/ir.d.ts.map +1 -0
  61. package/dist/ir.js +41 -0
  62. package/dist/ir.js.map +1 -0
  63. package/dist/resolve.d.ts +20 -0
  64. package/dist/resolve.d.ts.map +1 -0
  65. package/dist/resolve.js +138 -0
  66. package/dist/resolve.js.map +1 -0
  67. package/dist/validate.d.ts +15 -0
  68. package/dist/validate.d.ts.map +1 -0
  69. package/dist/validate.js +332 -0
  70. package/dist/validate.js.map +1 -0
  71. package/package.json +51 -0
@@ -0,0 +1,20 @@
1
+ import type { OMLEModel, TensorEntry, TensorRef, Tensor, SparseTensor, TensorValue, NameRange, Feature, NodeInput, Node } from './ir.js';
2
+ export interface ResolvedModel {
3
+ model: OMLEModel;
4
+ /** TensorEntry lookup by id */
5
+ tensorIndex: Map<string, TensorEntry>;
6
+ /** Topological execution order for top-level nodes */
7
+ executionOrder: Node[];
8
+ /** Names visible after ModelSchema preprocessing (inputs + schema features) */
9
+ schemaNames: Set<string>;
10
+ }
11
+ export declare function resolve(model: OMLEModel): ResolvedModel;
12
+ export declare function resolveRef(ref: TensorRef, index: Map<string, TensorEntry>): TensorEntry;
13
+ export declare function resolveRefDense(ref: TensorRef, index: Map<string, TensorEntry>): Tensor;
14
+ export declare function resolveRefSparse(ref: TensorRef, index: Map<string, TensorEntry>): SparseTensor;
15
+ export declare function resolveTensorValue(tv: TensorValue | null | undefined, index: Map<string, TensorEntry>): Tensor | null;
16
+ export declare function resolveTensorValueSparse(tv: TensorValue | null | undefined, index: Map<string, TensorEntry>): SparseTensor | null;
17
+ export declare function expandNameRange(range: NameRange): string[];
18
+ export declare function expandNodeInputs(inputs: NodeInput[]): string[];
19
+ export declare function expandFeatures(features: Feature[]): Feature[];
20
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EACpE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EACpC,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,+BAA+B;IAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,sDAAsD;IACtD,cAAc,EAAE,IAAI,EAAE,CAAC;IACvB,+EAA+E;IAC/E,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAID,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAKvD;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,WAAW,CAIvF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,CAIvF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,YAAY,CAI9F;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAC9B,MAAM,GAAG,IAAI,CAKf;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAC9B,YAAY,GAAG,IAAI,CAQrB;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAQ1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAU9D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAkB7D"}
@@ -0,0 +1,138 @@
1
+ // Reference resolution for OMLE models.
2
+ //
3
+ // Builds lookup structures and expands NameRange patterns so the engine and
4
+ // inspector never have to deal with indirection or inline expansion logic.
5
+ // ── Main entry point ──────────────────────────────────────────────────────────
6
+ export function resolve(model) {
7
+ const tensorIndex = buildTensorIndex(model);
8
+ const schemaNames = buildSchemaNames(model);
9
+ const executionOrder = topoSort(model.nodes ?? [], schemaNames);
10
+ return { model, tensorIndex, executionOrder, schemaNames };
11
+ }
12
+ // ── TensorRef resolution ──────────────────────────────────────────────────────
13
+ export function resolveRef(ref, index) {
14
+ const entry = index.get(ref.id);
15
+ if (!entry)
16
+ throw new Error(`TensorRef not found: ${ref.id}`);
17
+ return entry;
18
+ }
19
+ export function resolveRefDense(ref, index) {
20
+ const entry = resolveRef(ref, index);
21
+ if (!entry.dense)
22
+ throw new Error(`TensorEntry "${ref.id}" is not a dense tensor`);
23
+ return entry.dense;
24
+ }
25
+ export function resolveRefSparse(ref, index) {
26
+ const entry = resolveRef(ref, index);
27
+ if (!entry.sparse)
28
+ throw new Error(`TensorEntry "${ref.id}" is not a sparse tensor`);
29
+ return entry.sparse;
30
+ }
31
+ export function resolveTensorValue(tv, index) {
32
+ if (!tv)
33
+ return null;
34
+ if (tv.tensor)
35
+ return tv.tensor;
36
+ if (tv.tensor_ref)
37
+ return resolveRefDense(tv.tensor_ref, index);
38
+ return null;
39
+ }
40
+ export function resolveTensorValueSparse(tv, index) {
41
+ if (!tv)
42
+ return null;
43
+ if (tv.sparse)
44
+ return tv.sparse;
45
+ if (tv.tensor_ref) {
46
+ const entry = index.get(tv.tensor_ref.id);
47
+ if (entry?.sparse)
48
+ return entry.sparse;
49
+ }
50
+ return null;
51
+ }
52
+ // ── NameRange expansion ───────────────────────────────────────────────────────
53
+ export function expandNameRange(range) {
54
+ const names = [];
55
+ const width = range.width ?? 0;
56
+ for (let i = range.start; i < range.end; i++) {
57
+ const suffix = width > 0 ? String(i).padStart(width, '0') : String(i);
58
+ names.push(`${range.prefix}${suffix}`);
59
+ }
60
+ return names;
61
+ }
62
+ export function expandNodeInputs(inputs) {
63
+ const names = [];
64
+ for (const inp of inputs) {
65
+ if (inp.name !== undefined) {
66
+ names.push(inp.name.value);
67
+ }
68
+ else if (inp.range !== undefined) {
69
+ names.push(...expandNameRange(inp.range));
70
+ }
71
+ }
72
+ return names;
73
+ }
74
+ export function expandFeatures(features) {
75
+ const expanded = [];
76
+ for (const f of features) {
77
+ if (f.name !== undefined) {
78
+ expanded.push(f);
79
+ }
80
+ else if (f.range !== undefined) {
81
+ const names = expandNameRange(f.range);
82
+ names.forEach((name, i) => {
83
+ expanded.push({
84
+ ...f,
85
+ range: undefined,
86
+ name,
87
+ index: f.index !== undefined ? f.index + i : i,
88
+ });
89
+ });
90
+ }
91
+ }
92
+ return expanded;
93
+ }
94
+ // ── Internal helpers ──────────────────────────────────────────────────────────
95
+ function buildTensorIndex(model) {
96
+ const idx = new Map();
97
+ for (const entry of model.tensor_entries ?? []) {
98
+ idx.set(entry.id, entry);
99
+ }
100
+ return idx;
101
+ }
102
+ function buildSchemaNames(model) {
103
+ const names = new Set();
104
+ for (const inp of model.inputs ?? [])
105
+ names.add(inp.name);
106
+ const schema = model.model_schema;
107
+ if (schema?.features) {
108
+ for (const f of expandFeatures(schema.features)) {
109
+ if (f.name)
110
+ names.add(f.name);
111
+ }
112
+ }
113
+ return names;
114
+ }
115
+ function topoSort(nodes, initialNames) {
116
+ const available = new Set(initialNames);
117
+ const remaining = [...nodes];
118
+ const ordered = [];
119
+ let changed = true;
120
+ while (changed && remaining.length > 0) {
121
+ changed = false;
122
+ for (let i = remaining.length - 1; i >= 0; i--) {
123
+ const node = remaining[i];
124
+ const inputNames = expandNodeInputs(node.inputs ?? []);
125
+ if (inputNames.every(n => available.has(n))) {
126
+ ordered.push(node);
127
+ for (const out of node.outputs ?? [])
128
+ available.add(out.name);
129
+ remaining.splice(i, 1);
130
+ changed = true;
131
+ }
132
+ }
133
+ }
134
+ // Any remaining nodes have unresolved inputs — append in original order
135
+ ordered.push(...remaining);
136
+ return ordered;
137
+ }
138
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { OMLEModel } from './ir.js';
2
+ export interface ValidationIssue {
3
+ severity: 'error' | 'warning';
4
+ path: string;
5
+ message: string;
6
+ }
7
+ export interface ValidationResult {
8
+ valid: boolean;
9
+ issues: ValidationIssue[];
10
+ errors: ValidationIssue[];
11
+ warnings: ValidationIssue[];
12
+ }
13
+ export declare function validate(model: OMLEModel): ValidationResult;
14
+ export declare function assertValid(model: OMLEModel): void;
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAgD,MAAM,SAAS,CAAC;AAKvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAID,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAc3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAMlD"}
@@ -0,0 +1,332 @@
1
+ // Validation for OMLE models.
2
+ //
3
+ // Produces a ValidationResult with errors and warnings.
4
+ // Does not throw — callers can decide how to handle issues.
5
+ import { expandNodeInputs, expandFeatures } from './resolve.js';
6
+ // ── Main entry point ──────────────────────────────────────────────────────────
7
+ export function validate(model) {
8
+ const issues = [];
9
+ checkMetadata(model, issues);
10
+ checkInputsOutputs(model, issues);
11
+ checkTensorEntries(model, issues);
12
+ checkModelSchema(model, issues);
13
+ checkNodes(model, issues);
14
+ checkFunctions(model, issues);
15
+ checkOutputResolution(model, issues);
16
+ const errors = issues.filter(i => i.severity === 'error');
17
+ const warnings = issues.filter(i => i.severity === 'warning');
18
+ return { valid: errors.length === 0, issues, errors, warnings };
19
+ }
20
+ export function assertValid(model) {
21
+ const result = validate(model);
22
+ if (!result.valid) {
23
+ const msgs = result.errors.map(e => ` [${e.path}] ${e.message}`).join('\n');
24
+ throw new Error(`OMLE model is invalid:\n${msgs}`);
25
+ }
26
+ }
27
+ // ── Checker helpers ───────────────────────────────────────────────────────────
28
+ function err(issues, path, message) {
29
+ issues.push({ severity: 'error', path, message });
30
+ }
31
+ function warn(issues, path, message) {
32
+ issues.push({ severity: 'warning', path, message });
33
+ }
34
+ function checkMetadata(model, issues) {
35
+ const ver = model.metadata?.format_version;
36
+ if (!ver) {
37
+ warn(issues, 'metadata.format_version', 'format_version is missing');
38
+ return;
39
+ }
40
+ const [major] = ver.split('.').map(Number);
41
+ if (major !== 1) {
42
+ err(issues, 'metadata.format_version', `Unsupported major version: ${major} (expected 1)`);
43
+ }
44
+ }
45
+ function checkInputsOutputs(model, issues) {
46
+ const inputNames = new Set();
47
+ for (const [i, inp] of (model.inputs ?? []).entries()) {
48
+ if (!inp.name) {
49
+ err(issues, `inputs[${i}].name`, 'Input name is required');
50
+ }
51
+ else if (inputNames.has(inp.name)) {
52
+ err(issues, `inputs[${i}].name`, `Duplicate input name: ${inp.name}`);
53
+ }
54
+ else {
55
+ inputNames.add(inp.name);
56
+ }
57
+ }
58
+ const outputNames = new Set();
59
+ for (const [i, out] of (model.outputs ?? []).entries()) {
60
+ if (!out.name) {
61
+ err(issues, `outputs[${i}].name`, 'Output name is required');
62
+ }
63
+ else if (outputNames.has(out.name)) {
64
+ err(issues, `outputs[${i}].name`, `Duplicate output name: ${out.name}`);
65
+ }
66
+ else {
67
+ outputNames.add(out.name);
68
+ }
69
+ }
70
+ }
71
+ function checkTensorEntries(model, issues) {
72
+ const ids = new Set();
73
+ for (const [i, entry] of (model.tensor_entries ?? []).entries()) {
74
+ if (!entry.id) {
75
+ err(issues, `tensor_entries[${i}].id`, 'TensorEntry id is required');
76
+ }
77
+ else if (ids.has(entry.id)) {
78
+ err(issues, `tensor_entries[${i}].id`, `Duplicate tensor entry id: ${entry.id}`);
79
+ }
80
+ else {
81
+ ids.add(entry.id);
82
+ }
83
+ if (!entry.dense && !entry.sparse) {
84
+ warn(issues, `tensor_entries[${i}]`, 'TensorEntry has neither dense nor sparse value');
85
+ }
86
+ }
87
+ }
88
+ function checkModelSchema(model, issues) {
89
+ const schema = model.model_schema;
90
+ if (!schema)
91
+ return;
92
+ const inputNames = new Set((model.inputs ?? []).map(i => i.name));
93
+ const expanded = expandFeatures(schema.features ?? []);
94
+ const featureNames = new Set();
95
+ for (const [i, f] of expanded.entries()) {
96
+ const name = f.name ?? `features[${i}]`;
97
+ if (!f.name) {
98
+ err(issues, `model_schema.features[${i}]`, 'Feature must have a name or range');
99
+ }
100
+ else if (featureNames.has(f.name)) {
101
+ err(issues, `model_schema.features[${i}].name`, `Duplicate feature name: ${f.name}`);
102
+ }
103
+ else {
104
+ featureNames.add(f.name);
105
+ }
106
+ const source = f.source ?? f.name;
107
+ if (source && !inputNames.has(source)) {
108
+ warn(issues, `model_schema.features[${i}].source`, `Feature "${name}" source "${source}" does not match any InputSpec`);
109
+ }
110
+ }
111
+ const targetNames = new Set();
112
+ for (const [i, t] of (schema.targets ?? []).entries()) {
113
+ if (!t.name) {
114
+ err(issues, `model_schema.targets[${i}].name`, 'Target name is required');
115
+ }
116
+ else if (targetNames.has(t.name)) {
117
+ err(issues, `model_schema.targets[${i}].name`, `Duplicate target name: ${t.name}`);
118
+ }
119
+ else {
120
+ targetNames.add(t.name);
121
+ }
122
+ }
123
+ }
124
+ function checkNodes(model, issues) {
125
+ const tensorIds = new Set((model.tensor_entries ?? []).map(e => e.id));
126
+ const available = new Set((model.inputs ?? []).map(i => i.name));
127
+ // Add schema feature names
128
+ const schema = model.model_schema;
129
+ if (schema?.features) {
130
+ for (const f of expandFeatures(schema.features)) {
131
+ if (f.name)
132
+ available.add(f.name);
133
+ }
134
+ }
135
+ const nodeNames = new Set();
136
+ for (const [i, node] of (model.nodes ?? []).entries()) {
137
+ const path = `nodes[${i}]`;
138
+ if (!node.name) {
139
+ err(issues, `${path}.name`, 'Node name is required');
140
+ }
141
+ else if (nodeNames.has(node.name)) {
142
+ err(issues, `${path}.name`, `Duplicate node name: ${node.name}`);
143
+ }
144
+ else {
145
+ nodeNames.add(node.name);
146
+ }
147
+ // Check inputs resolve
148
+ const inputNames = expandNodeInputs(node.inputs ?? []);
149
+ for (const name of inputNames) {
150
+ if (!available.has(name)) {
151
+ err(issues, `${path}.inputs`, `Input "${name}" is not available in scope`);
152
+ }
153
+ }
154
+ // Check output name uniqueness
155
+ const outNames = new Set();
156
+ for (const out of node.outputs ?? []) {
157
+ if (!out.name) {
158
+ err(issues, `${path}.outputs`, 'NodeOutput.name is required');
159
+ }
160
+ else if (outNames.has(out.name)) {
161
+ err(issues, `${path}.outputs`, `Duplicate output name: ${out.name}`);
162
+ }
163
+ else {
164
+ outNames.add(out.name);
165
+ available.add(out.name);
166
+ }
167
+ }
168
+ // Check TensorRefs in body
169
+ checkNodeBodyRefs(node, path, tensorIds, issues);
170
+ }
171
+ }
172
+ function checkNodeBodyRefs(node, path, tensorIds, issues) {
173
+ function checkRef(tv, refPath) {
174
+ if (!tv)
175
+ return;
176
+ // TensorValue: check tensor_ref if present; inline tensor needs no lookup
177
+ if ('tensor_ref' in tv || 'tensor' in tv || 'sparse' in tv) {
178
+ const ref = tv.tensor_ref;
179
+ if (ref && !tensorIds.has(ref.id)) {
180
+ err(issues, refPath, `TensorRef "${ref.id}" not found in tensor_entries`);
181
+ }
182
+ }
183
+ else {
184
+ // Legacy TensorRef
185
+ const ref = tv;
186
+ if (!tensorIds.has(ref.id)) {
187
+ err(issues, refPath, `TensorRef "${ref.id}" not found in tensor_entries`);
188
+ }
189
+ }
190
+ }
191
+ const b = node;
192
+ if (b.linear) {
193
+ checkRef(b.linear.coefficients, `${path}.linear.coefficients`);
194
+ }
195
+ if (b.tree_ensemble) {
196
+ // no direct refs in tree ensemble body (trees are embedded)
197
+ }
198
+ if (b.neural_network) {
199
+ for (const [i, layer] of (b.neural_network.layers ?? []).entries()) {
200
+ checkRef(layer.weights, `${path}.neural_network.layers[${i}].weights`);
201
+ // layer.bias is an inline Tensor, not a TensorRef — no ref check needed
202
+ }
203
+ }
204
+ if (b.naive_bayes) {
205
+ checkRef(b.naive_bayes.class_log_priors, `${path}.naive_bayes.class_log_priors`);
206
+ const nb = b.naive_bayes;
207
+ if (nb.gaussian) {
208
+ checkRef(nb.gaussian.means, `${path}.naive_bayes.gaussian.means`);
209
+ checkRef(nb.gaussian.variances, `${path}.naive_bayes.gaussian.variances`);
210
+ }
211
+ if (nb.multinomial)
212
+ checkRef(nb.multinomial.feature_log_prob, `${path}.naive_bayes.multinomial.feature_log_prob`);
213
+ if (nb.bernoulli)
214
+ checkRef(nb.bernoulli.feature_log_prob, `${path}.naive_bayes.bernoulli.feature_log_prob`);
215
+ if (nb.categorical)
216
+ checkRef(nb.categorical.category_log_prob, `${path}.naive_bayes.categorical.category_log_prob`);
217
+ }
218
+ if (b.clustering) {
219
+ if (b.clustering.prototype)
220
+ checkRef(b.clustering.prototype.centers, `${path}.clustering.prototype.centers`);
221
+ if (b.clustering.gaussian_mixture) {
222
+ const gm = b.clustering.gaussian_mixture;
223
+ checkRef(gm.weights, `${path}.clustering.gaussian_mixture.weights`);
224
+ checkRef(gm.means, `${path}.clustering.gaussian_mixture.means`);
225
+ checkRef(gm.covariances, `${path}.clustering.gaussian_mixture.covariances`);
226
+ }
227
+ }
228
+ if (b.svm) {
229
+ if (b.svm.linear) {
230
+ checkRef(b.svm.linear.coefficients, `${path}.svm.linear.coefficients`);
231
+ }
232
+ if (b.svm.kernel) {
233
+ checkRef(b.svm.kernel.support_vectors, `${path}.svm.kernel.support_vectors`);
234
+ checkRef(b.svm.kernel.dual_coefficients, `${path}.svm.kernel.dual_coefficients`);
235
+ }
236
+ }
237
+ }
238
+ function checkFunctions(model, issues) {
239
+ const names = new Set();
240
+ for (const [i, fn] of (model.functions ?? []).entries()) {
241
+ if (!fn.name) {
242
+ err(issues, `functions[${i}].name`, 'DefineFunction name is required');
243
+ }
244
+ else if (names.has(fn.name)) {
245
+ err(issues, `functions[${i}].name`, `Duplicate function name: ${fn.name}`);
246
+ }
247
+ else {
248
+ names.add(fn.name);
249
+ }
250
+ // Check for duplicate param names
251
+ const paramNames = new Set();
252
+ for (const [j, p] of (fn.parameters ?? []).entries()) {
253
+ if (paramNames.has(p.name)) {
254
+ err(issues, `functions[${i}].parameters[${j}].name`, `Duplicate parameter name: ${p.name}`);
255
+ }
256
+ paramNames.add(p.name);
257
+ }
258
+ }
259
+ // Detect function call cycles (simple DFS)
260
+ checkFunctionCycles(model.functions ?? [], issues);
261
+ }
262
+ function checkFunctionCycles(fns, issues) {
263
+ const fnNames = new Set(fns.map(f => f.name));
264
+ const callGraph = new Map();
265
+ function collectCalls(expr, callee) {
266
+ if (!expr || typeof expr !== 'object')
267
+ return;
268
+ const e = expr;
269
+ if (e['apply'] && typeof e['apply'] === 'object') {
270
+ const apply = e['apply'];
271
+ if (typeof apply['function'] === 'string' && fnNames.has(apply['function'])) {
272
+ const calls = callGraph.get(callee) ?? new Set();
273
+ calls.add(apply['function']);
274
+ callGraph.set(callee, calls);
275
+ }
276
+ if (Array.isArray(apply['arguments'])) {
277
+ for (const arg of apply['arguments'])
278
+ collectCalls(arg, callee);
279
+ }
280
+ }
281
+ }
282
+ for (const fn of fns) {
283
+ if (!fn.name)
284
+ continue;
285
+ callGraph.set(fn.name, new Set());
286
+ collectCalls(fn.body, fn.name);
287
+ }
288
+ // DFS cycle detection
289
+ const visiting = new Set();
290
+ const visited = new Set();
291
+ function dfs(name) {
292
+ if (visiting.has(name))
293
+ return true;
294
+ if (visited.has(name))
295
+ return false;
296
+ visiting.add(name);
297
+ for (const callee of callGraph.get(name) ?? []) {
298
+ if (dfs(callee))
299
+ return true;
300
+ }
301
+ visiting.delete(name);
302
+ visited.add(name);
303
+ return false;
304
+ }
305
+ for (const fn of fns) {
306
+ if (fn.name && dfs(fn.name)) {
307
+ err(issues, `functions[${fn.name}]`, `Recursive function call detected in: ${fn.name}`);
308
+ }
309
+ }
310
+ }
311
+ function checkOutputResolution(model, issues) {
312
+ const available = new Set((model.inputs ?? []).map(i => i.name));
313
+ const schema = model.model_schema;
314
+ if (schema?.features) {
315
+ for (const f of expandFeatures(schema.features)) {
316
+ if (f.name)
317
+ available.add(f.name);
318
+ }
319
+ }
320
+ for (const node of model.nodes ?? []) {
321
+ for (const out of node.outputs ?? []) {
322
+ if (out.name)
323
+ available.add(out.name);
324
+ }
325
+ }
326
+ for (const [i, out] of (model.outputs ?? []).entries()) {
327
+ if (out.name && !available.has(out.name)) {
328
+ err(issues, `outputs[${i}].name`, `Output "${out.name}" does not resolve to any InputSpec or NodeOutput`);
329
+ }
330
+ }
331
+ }
332
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@openmle/omle.js",
3
+ "version": "0.1.0-rc4",
4
+ "description": "TypeScript library for loading, parsing, validating, and executing OMLE models",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "typecheck": "tsc --noEmit",
17
+ "dev": "tsc --watch",
18
+ "test": "vitest run",
19
+ "verify": "npx tsx tools/verify_engine.ts",
20
+ "lint": "eslint .",
21
+ "lint:fix": "eslint . --fix",
22
+ "gen:ir": "python3 scripts/gen_ir_ts.py src/ir.ts",
23
+ "gen:ir:local": "OMLE_PROTO_PATH=../omle/protobuf/omle.proto python3 scripts/gen_ir_ts.py src/ir.ts"
24
+ },
25
+ "files": [
26
+ "dist/"
27
+ ],
28
+ "keywords": [
29
+ "omle",
30
+ "machine-learning",
31
+ "model-exchange"
32
+ ],
33
+ "license": "Apache-2.0",
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "devDependencies": {
38
+ "@eslint/js": "^10.0.1",
39
+ "@types/node": "^25.6.0",
40
+ "eslint": "^10.10.0",
41
+ "protobufjs": "^8.2.0",
42
+ "tsx": "^4.21.0",
43
+ "typescript": "^5.4.0",
44
+ "typescript-eslint": "^8.70.0",
45
+ "vitest": "^4.1.5"
46
+ },
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/openmle/omle.js.git"
50
+ }
51
+ }