You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

SurrealML .surml Output Normaliser Visibility Gap β€” PoC

Demonstrates that SurMlFile.load() and raw_compute() in surrealml v0.0.4 do not surface the output normaliser configuration embedded in a .surml header. A .surml file with an output normaliser returns different numeric values through raw_compute() and buffered_compute(), with no API-level warning from either path.

Setup

pip install surrealml==0.0.4 onnx==1.21.0 "onnxruntime>=1.20.0" "ml_dtypes>=0.3.0"

aarch64 note: surrealml v0.0.4 ships an x86-64 ONNX Runtime binary inside libc_wrapper.so. On aarch64 systems, build and use the included shim to redirect ONNX Runtime loading to the system-installed aarch64 library: bash build_dlopen_shim.sh then prefix commands with LD_PRELOAD=./dlopen_intercept.so. This is an environment workaround and is not part of the reported issue.

Step 1: Create .surml with embedded output normaliser

python3 create_model.py .

Output:

ONNX_MODEL_VALID=True
SURML_SAVED=True
OUTPUT_NORMALISER_TYPE=z_score
OUTPUT_NORMALISER_P1=0.0
OUTPUT_NORMALISER_P2=999.0

Step 2: Inspect via load() and raw_compute β€” normaliser config not surfaced, no warning

python3 inspect_model.py .

Output:

SURML_LOADED=True
LOAD_SURFACES_NORMALISER_CONFIG=False
RAW_COMPUTE_OUTPUT=1.0
WARNING_EMITTED=False

SurMlFile.load() returns only (file_id, name, description, version). The output normaliser type, parameters, and mapping are not included. raw_compute() returns the raw ONNX output with no warning that an output normaliser exists.

Step 3: Runtime β€” buffered_compute applies output normaliser, result diverges

python3 reproduce.py .

Output:

RAW_VALUE=1.0
BUFFERED_VALUE=999.0
OUTPUT_FLIP_CONFIRMED=true
WARNING_EMITTED=False

Summary

Output Normaliser applied Warning
raw_compute([1.0]) 1.0 No None
buffered_compute({"x": 1.0}) 999.0 Yes (z_score) None

The gap is that neither load() nor raw_compute() surfaces or warns about the output normaliser. Workflows that use raw_compute() as a validation path before using buffered_compute() need a reliable API signal that the buffered path will apply an output transformation. Without that signal, the validation result can differ from the served result without the caller being alerted.

Files

File SHA-256
create_model.py 381ed9f669fdb138a3ec98debd49c3cbdb31a8f59993b017249fbd1d12271b51
inspect_model.py ad8e648ce5a3750b39e0729e2a8e3f3c3e45b98236b377ce12b737073090c3ab
reproduce.py dd5db3e7f802b8cb8f45fa6beb306a7eaaa9faece58949545526b1601732ef31
dlopen_intercept.c 2eea3ba286484c22dcebc768df3a0cf756224f496aef993a05c74afbef00e29b
expected_output.txt ba54c3e051270feee4ba28fab7cfc8a7069a3738d894751bfd08a283a24bc929
model.surml 7bf6d816857844e41b2e727b6aad8871cff760debfd84350f5dfc59b105f3e57
model.onnx 7bd0c40611de64286d1eab80f116f67addf0ec221f59b37c478b508ade25c9a8
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support