diff --git a/src/components/NodeConfiguration.tsx b/src/components/NodeConfiguration.tsx index 84378fc..715e234 100644 --- a/src/components/NodeConfiguration.tsx +++ b/src/components/NodeConfiguration.tsx @@ -403,6 +403,12 @@ export const NodeConfiguration: React.FC = ({ const config = nodeTypeConfigs[data.type]; const [isOptimizing, setIsOptimizing] = useState(false); const [optimizationResult, setOptimizationResult] = useState(""); + const [isPreviewingOptimization, setIsPreviewingOptimization] = + useState(false); + const [originalPrompt, setOriginalPrompt] = useState( + (currentData.config && currentData.config.prompt) || "" + ); + const [promptHistory, setPromptHistory] = useState([]); // State for label change dialog const [showLabelDialog, setShowLabelDialog] = useState(false); @@ -489,6 +495,7 @@ export const NodeConfiguration: React.FC = ({ setIsOptimizing(true); setOptimizationResult(""); + setOriginalPrompt(currentData.config.prompt); try { // Extract intent from the prompt itself @@ -594,6 +601,7 @@ Return only the optimized prompt:`, } setOptimizationResult(cleanedResult); + setIsPreviewingOptimization(true); } catch (error) { console.error("Error optimizing prompt:", error); setOptimizationResult("Error optimizing prompt. Please try again."); @@ -604,11 +612,26 @@ Return only the optimized prompt:`, const applyOptimizedPrompt = () => { if (optimizationResult) { + // Save to history for undo + setPromptHistory((prev) => [originalPrompt, ...prev].slice(0, 20)); handleConfigChange("prompt", optimizationResult); setOptimizationResult(""); + setIsPreviewingOptimization(false); } }; + const cancelOptimizationPreview = () => { + setOptimizationResult(""); + setIsPreviewingOptimization(false); + }; + + const undoLastPromptChange = () => { + if (promptHistory.length === 0) return; + const [last, ...rest] = promptHistory; + handleConfigChange("prompt", last); + setPromptHistory(rest); + }; + const renderField = (field: FieldConfig) => { const value = currentData.config[field.key] || field.defaultValue || ""; @@ -628,16 +651,57 @@ Return only the optimized prompt:`, nodeType={data.type} /> {data.type === "llmTask" && field.key === "prompt" && ( -
- +
+
+ + +
+ {isPreviewingOptimization && optimizationResult && ( +
+
+ Optimized Preview +
+
+ {optimizationResult} +
+
+ + +
+
+ )}
)}