Spaces:
Build error
Build error
| /** | |
| * @license | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| /* tslint:disable */ | |
| import React, {useEffect, useState} from 'react'; | |
| interface ParametersPanelProps { | |
| currentLength: number; | |
| onUpdateHistoryLength: (newLength: number) => void; // Renamed for clarity | |
| onClosePanel: () => void; | |
| isStatefulnessEnabled: boolean; | |
| onSetStatefulness: (enabled: boolean) => void; // Changed to accept a boolean | |
| } | |
| export const ParametersPanel: React.FC<ParametersPanelProps> = ({ | |
| currentLength, | |
| onUpdateHistoryLength, | |
| onClosePanel, | |
| isStatefulnessEnabled, | |
| onSetStatefulness, | |
| }) => { | |
| // Local state for pending changes | |
| const [localHistoryLengthInput, setLocalHistoryLengthInput] = | |
| useState<string>(currentLength.toString()); | |
| const [localStatefulnessChecked, setLocalStatefulnessChecked] = | |
| useState<boolean>(isStatefulnessEnabled); | |
| // Update local state if props change (e.g., panel re-opened) | |
| useEffect(() => { | |
| setLocalHistoryLengthInput(currentLength.toString()); | |
| }, [currentLength]); | |
| useEffect(() => { | |
| setLocalStatefulnessChecked(isStatefulnessEnabled); | |
| }, [isStatefulnessEnabled]); | |
| const handleHistoryLengthInputChange = ( | |
| event: React.ChangeEvent<HTMLInputElement>, | |
| ) => { | |
| setLocalHistoryLengthInput(event.target.value); | |
| }; | |
| const handleStatefulnessCheckboxChange = ( | |
| event: React.ChangeEvent<HTMLInputElement>, | |
| ) => { | |
| setLocalStatefulnessChecked(event.target.checked); | |
| }; | |
| const handleApplyParameters = () => { | |
| // Apply history length | |
| const newLength = parseInt(localHistoryLengthInput, 10); | |
| if (!isNaN(newLength) && newLength >= 0 && newLength <= 10) { | |
| onUpdateHistoryLength(newLength); | |
| } else { | |
| alert('Please enter a number between 0 and 10 for history length.'); | |
| setLocalHistoryLengthInput(currentLength.toString()); // Revert local input to original prop on error | |
| return; // Do not proceed to close if there's an error | |
| } | |
| // Apply statefulness if it has changed | |
| if (localStatefulnessChecked !== isStatefulnessEnabled) { | |
| onSetStatefulness(localStatefulnessChecked); | |
| } | |
| onClosePanel(); // Close the panel after applying settings | |
| }; | |
| const handleClose = () => { | |
| // Reset local state to reflect original props before closing, ensuring no pending changes carry over visually if panel is quickly reopened | |
| setLocalHistoryLengthInput(currentLength.toString()); | |
| setLocalStatefulnessChecked(isStatefulnessEnabled); | |
| onClosePanel(); | |
| }; | |
| return ( | |
| <div className="p-6 bg-gray-50 h-full flex flex-col items-start pt-8"> | |
| {/* Interaction History Row */} | |
| <div className="w-full max-w-md mb-6"> | |
| <div className="llm-row items-center"> | |
| <label | |
| htmlFor="maxHistoryLengthInput" | |
| className="llm-label whitespace-nowrap mr-3 flex-shrink-0" | |
| style={{minWidth: '150px'}}> | |
| Max History Length: | |
| </label> | |
| <input | |
| type="number" | |
| id="maxHistoryLengthInput" | |
| value={localHistoryLengthInput} | |
| onChange={handleHistoryLengthInputChange} | |
| min="0" | |
| max="10" | |
| className="llm-input flex-grow" | |
| aria-describedby="historyLengthHelpText" | |
| /> | |
| </div> | |
| </div> | |
| {/* Statefulness Row */} | |
| <div className="w-full max-w-md mb-4"> | |
| <div className="llm-row items-center"> | |
| <label | |
| htmlFor="statefulnessCheckbox" | |
| className="llm-label whitespace-nowrap mr-3 flex-shrink-0" | |
| style={{minWidth: '150px'}}> | |
| Enable Statefulness: | |
| </label> | |
| <input | |
| type="checkbox" | |
| id="statefulnessCheckbox" | |
| checked={localStatefulnessChecked} | |
| onChange={handleStatefulnessCheckboxChange} | |
| className="h-5 w-5 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer" | |
| aria-describedby="statefulnessHelpText" | |
| /> | |
| </div> | |
| </div> | |
| {/* Action Buttons */} | |
| <div className="mt-6 w-full max-w-md flex justify-start gap-3"> | |
| {' '} | |
| {/* Changed pt-2 to mt-6, justify-end to justify-start */} | |
| <button | |
| onClick={handleApplyParameters} | |
| className="llm-button" | |
| aria-label="Apply all parameter settings and close"> | |
| Apply Parameters | |
| </button> | |
| <button | |
| onClick={handleClose} | |
| className="llm-button bg-gray-500 hover:bg-gray-600 active:bg-gray-700" | |
| aria-label="Close parameters panel without applying current changes"> | |
| Close Parameters | |
| </button> | |
| </div> | |
| </div> | |
| ); | |
| }; | |