Skip to content

Commit e0487ce

Browse files
authored
Merge pull request #147 from mlcommons/source-node-in-exception
node info in exception
2 parents 23e7ea7 + a0425dd commit e0487ce

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

‎src/modelplane/evaluator/dag.py‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ class FailedDAGOutput(_DAGOutput):
4545
error: Exception
4646

4747

48+
class NodeExecutionError(Exception):
49+
def __init__(self, node_name: str, original_error: Exception):
50+
self.node_name = node_name
51+
self.original_error = original_error
52+
super().__init__(
53+
f"Error while executing node '{node_name}': {original_error}"
54+
)
55+
56+
4857
class Composer:
4958
"""DAG of ComposerNodes.
5059
@@ -225,9 +234,10 @@ def _run_traced(
225234
try:
226235
output = self._run_node(node, ctx)
227236
except Exception as e:
237+
wrapped_error = NodeExecutionError(node.name, e)
228238
return (
229239
FailedDAGOutput(
230-
node_outputs=node_outputs, total_cost=total_cost, error=e
240+
node_outputs=node_outputs, total_cost=total_cost, error=wrapped_error
231241
),
232242
traversed_edges,
233243
)

‎tests/unit/evaluator/test_safety.py‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from modelgauge.prompt import TextPrompt
55
from modelgauge.sut import SUTResponse
66

7-
from modelplane.evaluator.dag import Composer, FailedDAGOutput
7+
from modelplane.evaluator.dag import Composer, FailedDAGOutput, NodeExecutionError
88
from modelplane.evaluator.safety import AnnotatorArbiter, Safety, SafetyDAGAnnotator
99
from modelplane.evaluator.verdict import Verdict
1010

@@ -50,13 +50,14 @@ def test_safety_dag_with_bad_node(sample_ctx, threshold_arbiter):
5050
)
5151
dag_output = dag.run(sample_ctx)
5252
assert isinstance(dag_output, FailedDAGOutput)
53-
assert str(dag_output.error) == "I'm afraid I can't do that, Dave."
53+
assert str(dag_output.error.original_error) == "I'm afraid I can't do that, Dave."
5454

5555
dag_annotator = SafetyDAGAnnotator("safety_annotator", dag)
5656
with pytest.raises(
57-
type(dag_output.error), match="I'm afraid I can't do that, Dave."
58-
):
57+
NodeExecutionError, match="Error while executing node 'failing_node': I'm afraid I can't do that, Dave."
58+
) as e:
5959
dag_annotator.process(
6060
prompt=TextPrompt(text=sample_ctx.prompt),
6161
response=SUTResponse(text=sample_ctx.response),
6262
)
63+
assert type(e.value.original_error) == type(dag_output.error)

0 commit comments

Comments
 (0)