From 50b1295601ca59d650d7ae1f4c8c28ed270b06d9 Mon Sep 17 00:00:00 2001 From: Theodore Li Date: Wed, 1 Jul 2026 18:21:17 -0700 Subject: [PATCH] fix(knowledge): surface KB description validation errors and raise limit to 10k --- .../create-base-modal/create-base-modal.tsx | 27 +++++++++++++++---- .../edit-knowledge-base-modal.tsx | 25 ++++++++++------- apps/sim/lib/api/contracts/knowledge/base.ts | 9 ++++++- .../lib/api/contracts/v1/knowledge/index.ts | 17 ++++++++++-- apps/sim/lib/knowledge/constants.ts | 3 +++ 5 files changed, 64 insertions(+), 17 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx index 915b2b69e38..25b37a670b9 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx @@ -17,14 +17,16 @@ import { type ComboboxOption, cn, Loader, + toast, } from '@sim/emcn' import { createLogger } from '@sim/logger' import { getErrorMessage } from '@sim/utils/errors' import { X } from 'lucide-react' import { useParams } from 'next/navigation' -import { useForm } from 'react-hook-form' +import { type FieldErrors, useForm } from 'react-hook-form' import { z } from 'zod' import type { StrategyOptions } from '@/lib/chunkers/types' +import { KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH } from '@/lib/knowledge/constants' import { formatFileSize, validateKnowledgeBaseFile } from '@/lib/uploads/utils/file-utils' import { ACCEPT_ATTRIBUTE } from '@/lib/uploads/utils/validation' import { useKnowledgeUpload } from '@/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload' @@ -58,7 +60,13 @@ const FormSchema = z .min(1, 'Name is required') .max(100, 'Name must be less than 100 characters') .refine((value) => value.trim().length > 0, 'Name cannot be empty'), - description: z.string().max(500, 'Description must be less than 500 characters').optional(), + description: z + .string() + .max( + KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH, + `Description must be ${KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH} characters or less` + ) + .optional(), minChunkSize: z .number() .min(1, 'Min chunk size must be at least 1 character') @@ -223,6 +231,15 @@ export const CreateBaseModal = memo(function CreateBaseModal({ const isSubmitting = createKnowledgeBaseMutation.isPending || deleteKnowledgeBaseMutation.isPending || isUploading + const onInvalid = (formErrors: FieldErrors) => { + const firstMessage = Object.values(formErrors).find( + (fieldError) => typeof fieldError?.message === 'string' + )?.message + toast.error( + typeof firstMessage === 'string' ? firstMessage : 'Please fix the highlighted fields' + ) + } + const onSubmit = async (data: FormValues) => { setSubmitStatus(null) @@ -292,7 +309,7 @@ export const CreateBaseModal = memo(function CreateBaseModal({ handleClose(false)}>Create Knowledge Base -
+