lutzroeder/netron · error · Error
Value type '${val.constructor.name}' not implemented.
Error message
Value type '${val.constructor.name}' not implemented. What it means
While materializing ExecutionPlan program values, executorch encountered a value class in plan.values that isn't one of the handled flatbuffer types (Tensor, OptionalTensor, TensorList, OptionalTensorList). The loader only implements a fixed set, so any new/other value type is rejected.
Source
Thrown at source/executorch.js:111
const items = [val];
values.set(index, { type: null, value: values.tensors(index, items) });
} else if (val instanceof executorch_flatbuffer.String) {
values.set(index, { type: 'string', value: val.string_val });
} else if (val instanceof executorch_flatbuffer.IntList) {
const list = val.items.map((index) => plan.values[index].val.int_val);
values.set(index, { type: 'int64[]', value: list });
} else if (val instanceof executorch_flatbuffer.DoubleList) {
values.set(index, { type: 'float64[]', value: Array.from(val.items) });
} else if (val instanceof executorch_flatbuffer.BoolList) {
throw new executorch.Error('executorch_flatbuffer.BoolList not implemented.');
} else if (val instanceof executorch_flatbuffer.TensorList) {
const items = Array.from(val.items).map((arg) => arg === -1 ? null : plan.values[arg].val);
values.set(index, { type: null, value: values.tensors(index, items) });
} else if (val instanceof executorch_flatbuffer.OptionalTensorList) {
const items = Array.from(val.items).map((arg) => arg === -1 ? null : plan.values[arg].val);
values.set(index, { type: null, value: values.tensors(index, items) });
} else {
throw new Error(`Value type '${val.constructor.name}' not implemented.`);
}
}
return values.get(index);
};
for (let i = 0; i < plan.inputs.length; i++) {
const input = plan.inputs[i];
const value = values.map(input);
const name = plan.inputs.length === 1 ? 'input' : `input.${i}`;
const argument = new executorch.Argument(name, value.value, value.type);
this.inputs.push(argument);
}
for (let i = 0; i < plan.outputs.length; i++) {
const output = plan.outputs[i];
const value = values.map(output);
const name = plan.outputs.length === 1 ? 'output' : `output.${i}`;
const argument = new executorch.Argument(name, value.value, value.type);
this.outputs.push(argument);
}View on GitHub (pinned to d8a543f5f8)
Solutions
- Update netron to the latest release (executorch support tracks PyTorch closely)
- Re-export the program with an older/stable executorch version
- Check the erroring class name in the message to identify the unsupported value type and report it upstream
Defensive patterns
Strategy: type-guard
Type guard
const supported = (v) => v instanceof executorch_flatbuffer.Tensor || v instanceof executorch_flatbuffer.OptionalTensor || v instanceof executorch_flatbuffer.TensorList || v instanceof executorch_flatbuffer.OptionalTensorList;
Try / catch
try { openModel(f); } catch (e) { if (/Value type '.*' not implemented/.test(e.message)) { /* unsupported executorch value type — update netron */ } } Prevention
- Match netron and executorch/PyTorch versions
- Prefer un-lowered (.ptq) exports when you only need to inspect the graph
When it happens
Trigger: Opening an .ptq/.pte ExecutionTorch program whose values table contains a flatbuffer type outside the implemented if-chain (e.g. a new future type added in a newer executorch schema).
Common situations: Program exported by a newer PyTorch/executorch release than the netron version supports.
AI-assisted analysis of lutzroeder/netron@d8a543f5f8 (2026-08-27).
Data as JSON: /api/errors/993ef799e3975755.
Report an issue: GitHub.