From c01871367689f7a55e62ce6383a774152d5164aa Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 20 Aug 2025 12:42:54 +0700 Subject: [PATCH 1/3] feat: allow user to set max_attempt for MCP to avoid looping --- .../containers/dialogs/AddEditAssistant.tsx | 28 +++++++++++++++++++ web-app/src/hooks/useChat.ts | 11 ++++++-- web-app/src/locales/de-DE/assistants.json | 3 +- web-app/src/locales/en/assistants.json | 3 +- web-app/src/locales/id/assistants.json | 3 +- web-app/src/locales/vn/assistants.json | 3 +- web-app/src/locales/zh-CN/assistants.json | 3 +- web-app/src/locales/zh-TW/assistants.json | 3 +- web-app/src/types/threads.d.ts | 1 + 9 files changed, 49 insertions(+), 9 deletions(-) diff --git a/web-app/src/containers/dialogs/AddEditAssistant.tsx b/web-app/src/containers/dialogs/AddEditAssistant.tsx index aa7a215ba..e3d835200 100644 --- a/web-app/src/containers/dialogs/AddEditAssistant.tsx +++ b/web-app/src/containers/dialogs/AddEditAssistant.tsx @@ -62,6 +62,7 @@ export default function AddEditAssistant({ const [showEmojiPicker, setShowEmojiPicker] = useState(false) const emojiPickerRef = useRef(null) const [nameError, setNameError] = useState(null) + const [toolSteps, setToolSteps] = useState(20) // Handle click outside emoji picker useEffect(() => { @@ -90,6 +91,7 @@ export default function AddEditAssistant({ setName(initialData.name) setDescription(initialData.description) setInstructions(initialData.instructions) + setToolSteps(initialData.tool_steps ?? 20) // Convert parameters object to arrays of keys and values const keys = Object.keys(initialData.parameters || {}) const values = Object.values(initialData.parameters || {}) @@ -120,6 +122,7 @@ export default function AddEditAssistant({ setParamsValues(['']) setParamsTypes(['string']) setNameError(null) + setToolSteps(20) } const handleParameterChange = ( @@ -216,6 +219,7 @@ export default function AddEditAssistant({ description, instructions, parameters: parameters || {}, + tool_steps: toolSteps, } onSave(assistant) onOpenChange(false) @@ -323,6 +327,30 @@ export default function AddEditAssistant({ /> +
+
+ +
+
+
+
+ {t('assistants:maxToolSteps')} + { + const newSteps = e.target.value + const stepNumber = Number(newSteps) + setToolSteps(isNaN(stepNumber) ? 20 : stepNumber) + }} + placeholder="20" + className="w-full sm:w-24" + /> +
+
+
+
+
-
+
-
-
-
- {t('assistants:maxToolSteps')} - { - const newSteps = e.target.value - const stepNumber = Number(newSteps) - setToolSteps(isNaN(stepNumber) ? 20 : stepNumber) - }} - placeholder="20" - className="w-full sm:w-24" - /> -
+
+
+

{t('assistants:maxToolSteps')}

+ { + const newSteps = e.target.value + const stepNumber = Number(newSteps) + setToolSteps(isNaN(stepNumber) ? 20 : stepNumber) + }} + placeholder="20" + className="w-18 text-right" + />