The types an inference backend shares, so calling code names a backend once rather than at every call site. `API.Onnx` runs a model in-process; `API.Inference` sends it to a server. They answer the same question and neither is right for every deployment: ONNX needs a model file and a runtime for the architecture, a server is the only GPU path today, and a model that will not convert to ONNX reaches Objeck no other way (docs/INFERENCE_ENGINES_PLAN.md). This bundle exists because both previously defined their own `Tensor`. That was deliberate and temporary -- the generic ONNX run shipped before a shared library existed -- and two near-identical classes drift. They are one class now. Compile with -lib models.
EndPoint
Why the last call returned Nil. Every backend here reports failure the same way -- Nil, with the reason available afterwards -- because the alternatives are worse: an exception the caller must know to guard, or a message on stderr the caller cannot act on.