diff --git a/src/renderer/components/Experiment/Widgets/CustomEvaluationWidget.tsx b/src/renderer/components/Experiment/Widgets/CustomEvaluationWidget.tsx
index 80561250c75db8739d623638299f86fef1b27274..f6e2b9fb541835750f9b0bb80cbc1850c573fa68 100644
--- a/src/renderer/components/Experiment/Widgets/CustomEvaluationWidget.tsx
+++ b/src/renderer/components/Experiment/Widgets/CustomEvaluationWidget.tsx
@@ -6,6 +6,7 @@ import {
   Select,
   Option,
 } from '@mui/joy';
+import { on } from 'node:events';
 
 type EvaluationField = {
   name: string;
@@ -14,7 +15,6 @@ type EvaluationField = {
 };
 
 
-
 const CustomEvaluationWidget = (props: WidgetProps<any>) => {
   const { id, value, onChange, disabled, readonly } = props;
 
@@ -57,18 +57,13 @@ const CustomEvaluationWidget = (props: WidgetProps<any>) => {
     }
   }, [value]);
 
-
-
-  // Propagate state changes upstream.
-  React.useEffect(() => {
-    onChange(evalMetrics);
-  }, [evalMetrics]);
-
   const handleAddField = () => {
-    setEvalMetrics([
+    const updatedMetrics = [
       ...evalMetrics,
       { name: '', expression: '', return_type: 'boolean' }
-    ]);
+    ];
+    setEvalMetrics(updatedMetrics);
+    onChange(updatedMetrics);
   };
 
   const handleFieldChange = (
@@ -80,11 +75,13 @@ const CustomEvaluationWidget = (props: WidgetProps<any>) => {
       i === index ? { ...evaluation, [field]: newValue } : evaluation
     );
     setEvalMetrics(updated);
+    onChange(updated);
   };
 
   const handleRemoveField = (index: number) => {
     const updated = evalMetrics.filter((_, i) => i !== index);
     setEvalMetrics(updated);
+    onChange(updated);
   };
 
   return (