{"record":{"id":"652b1a1cbad0ac93","repo":"keras-team/keras","slug":"inputs-argument-cannot-be-empty-received-input","errorCode":null,"errorMessage":"`inputs` argument cannot be empty. Received:\ninputs={inputs}\noutputs={outputs}","messagePattern":"`inputs` argument cannot be empty\\. Received:\ninputs=(.+?)\noutputs=(.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/ops/function.py","lineNumber":63,"sourceCode":"\n    def __init__(self, inputs, outputs, name=None):\n        super().__init__(name=name)\n\n        if backend() == \"tensorflow\":\n            # Temporary work around for\n            # https://github.com/keras-team/keras/issues/931\n            # This stop tensorflow from wrapping tf.function output in a\n            # _DictWrapper object.\n            _self_setattr_tracking = getattr(\n                self, \"_self_setattr_tracking\", True\n            )\n            self._self_setattr_tracking = False\n        self._inputs_struct = tree.map_structure(lambda x: x, inputs)\n        self._outputs_struct = tree.map_structure(lambda x: x, outputs)\n        self._inputs = tree.flatten(inputs)\n        self._outputs = tree.flatten(outputs)\n        if not self._inputs:\n            raise ValueError(\n                \"`inputs` argument cannot be empty. Received:\\n\"\n                f\"inputs={inputs}\\n\"\n                f\"outputs={outputs}\"\n            )\n        if not self._outputs:\n            raise ValueError(\n                \"`outputs` argument cannot be empty. Received:\\n\"\n                f\"inputs={inputs}\\n\"\n                f\"outputs={outputs}\"\n            )\n\n        if backend() == \"tensorflow\":\n            self._self_setattr_tracking = _self_setattr_tracking\n\n        (nodes, nodes_by_depth, operations, operations_by_depth) = map_graph(\n            self._inputs, self._outputs\n        )\n        self._nodes = nodes","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/ops/function.py#L45-L81","documentation":"A Keras ops Function must be constructed from at least one input KerasTensor; an empty flattened input structure (empty list/tuple) cannot define a callable graph and is rejected.","triggerScenarios":"keras.ops.Function(inputs=[], outputs=t) or inputs=()","commonSituations":"Building keras.ops.Function programmatically where the input list ends up empty (e.g. a disconnected trace)","solutions":["Pass at least one real KerasTensor as inputs","Check that tree.flatten(inputs) is non-empty before constructing"],"exampleFix":"# before\nfn = keras.ops.Function([], out)\n\n# after\nfn = keras.ops.Function([x], out)","handlingStrategy":"validation","validationCode":"assert tree.flatten(inputs), 'inputs must be non-empty'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pass at least one KerasTensor as inputs when constructing a keras.ops.Function"],"tags":["keras","ops","function","inputs"],"backgroundTag":"invalid-function-construction","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}