diff --git a/frontend/src/pages/settings/settings-provider.tsx b/frontend/src/pages/settings/settings-provider.tsx index d956817..3109af8 100644 --- a/frontend/src/pages/settings/settings-provider.tsx +++ b/frontend/src/pages/settings/settings-provider.tsx @@ -21,6 +21,7 @@ import { type FieldValues, useController, useForm, + type UseFormSetValue, useFormState, useWatch, } from 'react-hook-form'; @@ -459,6 +460,7 @@ function FormModelComboboxItem({ className="mt-2" onClick={() => { field.onChange(search); + onOptionSelect?.({ name: search }); setIsOpen(false); setSearch(''); }} @@ -553,6 +555,14 @@ const agentConfigSchema = z topK: optionalNumber, topP: optionalNumber, }) + .refine((data) => data.minLength == null || data.maxLength == null || data.minLength <= data.maxLength, { + message: 'Min length must not exceed max length', + path: ['minLength'], + }) + .refine((data) => data.reasoning?.maxTokens == null || data.reasoning.maxTokens <= 32000, { + message: 'Maximum 32000 tokens', + path: ['reasoning', 'maxTokens'], + }) .optional(); const formSchema = z.object({ @@ -635,11 +645,13 @@ function ReasoningFields({ control, isLoading, models, + setValue, }: { agentKey: string; control: Control; isLoading: boolean; models: ModelOption[]; + setValue: UseFormSetValue; }) { const selectedModel = useWatch({ control, name: `agents.${agentKey}.model` }); const capability = models.find((model) => model.name === selectedModel)?.reasoning ?? null; @@ -697,7 +709,22 @@ function ReasoningFields({ Reasoning Effort