Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion tensormap-backend/app/services/model_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,20 @@ def model_generation(model_params: dict) -> dict:
node = nodes_by_id[target_id]
keras_tensors[target_id] = _build_layer(node, input_tensor)

# Identify input and output tensors
unvisited_non_input = {
nid for nid in nodes_by_id if nid not in visited and nodes_by_id[nid]["type"] != "custominput"
}
if unvisited_non_input:
raise ValueError(
f"Disconnected nodes detected: {unvisited_non_input}. "
"Please connect all layers before generating the model."
)

inputs = [keras_tensors[n["id"]] for n in model_params["nodes"] if n["type"] == "custominput"]
output_ids = [n["id"] for n in model_params["nodes"] if n["id"] not in source_to_targets]
output_ids = [
n["id"] for n in model_params["nodes"] if n["id"] not in source_to_targets and n["type"] != "custominput"
]
outputs = [keras_tensors[oid] for oid in output_ids]

model = tf.keras.Model(inputs=inputs, outputs=outputs)
Expand Down
13 changes: 13 additions & 0 deletions tensormap-backend/tests/test_model_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,19 @@ def test_multi_dim_input_shape(self):
model = tf.keras.models.model_from_json(json.dumps(result))
assert model.input_shape == (None, 28, 28, 1)

def test_disconnected_node_raises_value_error(self):
"""A node not reachable from any input must raise ValueError."""
params = {
"nodes": [
_input_node("in", [10]),
_dense_node("out", 1),
_dense_node("isolated", 1),
],
"edges": [_edge("in", "out")],
}
with pytest.raises(ValueError, match="Disconnected nodes detected"):
model_generation(params)


# ===================================================================
# Helper Builders for New Layer Types
Expand Down
Loading