{"record":{"id":"08c53b75d370da28","repo":"docling-project/docling","slug":"onnx-model-exposes-no-inputs","errorCode":null,"errorMessage":"ONNX model exposes no inputs","messagePattern":"ONNX model exposes no inputs","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"docling/models/inference_engines/image_classification/onnxruntime_engine.py","lineNumber":88,"sourceCode":"            raise FileNotFoundError(\n                f\"ONNX model file '{model_filename}' not found: {model_path}\"\n            )\n\n        return model_folder, model_path\n\n    def _resolve_model_filename(self) -> str:\n        \"\"\"Determine which ONNX filename to load.\"\"\"\n        filename = self.options.model_filename\n        extra_filename = self._model_config.extra_config.get(\"model_filename\")\n        if extra_filename and isinstance(extra_filename, str):\n            filename = extra_filename\n        return filename\n\n    def _resolve_input_name(self, session: ort.InferenceSession) -> str:\n        \"\"\"Resolve ONNX input name from the loaded model graph.\"\"\"\n        input_nodes = session.get_inputs()\n        if not input_nodes:\n            raise RuntimeError(\"ONNX model exposes no inputs\")\n        return input_nodes[0].name\n\n    def _resolve_output_name(self, session: ort.InferenceSession) -> str:\n        \"\"\"Resolve ONNX output name from the loaded model graph.\"\"\"\n        output_nodes = session.get_outputs()\n        if not output_nodes:\n            raise RuntimeError(\"ONNX model exposes no outputs\")\n        return output_nodes[0].name\n\n    def initialize(self) -> None:\n        \"\"\"Initialize ONNX session and preprocessor.\"\"\"\n        import onnxruntime as ort\n\n        _log.info(\"Initializing ONNX Runtime image-classification engine\")\n\n        model_folder, self._model_path = self._resolve_model_artifacts()\n        _log.debug(\"Using ONNX model at %s\", self._model_path)\n","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/docling-project/docling/blob/61d76f1ff3f8428065465889f7b4577da7df704c/docling/models/inference_engines/image_classification/onnxruntime_engine.py#L70-L106","documentation":"After loading an ONNX InferenceSession, the engine found the model graph declares zero inputs. An input name is required to feed the pixel_values tensor, so a graph with no inputs is unusable — this points to a broken/placeholder .onnx file rather than a docling configuration issue.","triggerScenarios":"OnnxRuntimeImageClassificationEngine.initialize() -> _resolve_input_name(session) when session.get_inputs() returns an empty list.","commonSituations":"Loading a corrupt, truncated, or empty ONNX file (interrupted download); a stub/test ONNX graph; an ONNX file that is actually an external-data container whose graph failed to parse inputs; incompatible onnxruntime version misreading the graph.","solutions":["Validate the file outside docling: python -c \"import onnx; m = onnx.load(path); print(m.graph.input)\" — reload/re-export if empty or load fails.","Re-download or re-export the ONNX model from a known-good source and retry initialization.","Check onnxruntime version compatibility with the model's opset/IR version; upgrade onnxruntime if the graph is modern."],"exampleFix":"# before\nmodel_path = possibly_corrupt_onnx_path\n\n# after: validate the graph before handing it to the engine\nimport onnx\nm = onnx.load(str(model_path))\nassert m.graph.input, \"ONNX graph has no inputs — re-export the model\"","handlingStrategy":"validation","validationCode":"import onnx\n\nm = onnx.load(str(model_path))\nif not m.graph.input:\n    raise ValueError(f\"{model_path} declares no graph inputs — corrupt or invalid export\")","typeGuard":null,"tryCatchPattern":"try:\n    engine.initialize()\nexcept RuntimeError as e:\n    if \"exposes no inputs\" in str(e):\n        # artifact defect: re-download or re-export; retrying the same file is futile\n        raise RuntimeError(f\"invalid ONNX artifact {engine._model_path}: {e}\") from e\n    raise","preventionTips":["Checksum-validate downloaded ONNX artifacts before use.","Add an onnx.load() sanity check to model provisioning scripts.","Keep known-good copies of model exports for quick replacement."],"tags":["onnx","model-graph","corrupt-model","onnxruntime"],"backgroundTag":null,"analyzedSha":"61d76f1ff3f8428065465889f7b4577da7df704c","analyzedAt":"2026-08-14T23:53:18.727Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}