diff --git a/src/lib/components/AssistantSettings.svelte b/src/lib/components/AssistantSettings.svelte index e0f22d98fb5..4e86bc45bfc 100644 --- a/src/lib/components/AssistantSettings.svelte +++ b/src/lib/components/AssistantSettings.svelte @@ -74,12 +74,14 @@ let loading = false; - let ragMode: false | "links" | "domains" | "all" = assistant?.rag?.allowAllDomains + let ragMode: false | "links" | "domains" | "all" | "preprompt" = assistant?.rag?.allowAllDomains ? "all" : assistant?.rag?.allowedLinks?.length ?? 0 > 0 ? "links" : (assistant?.rag?.allowedDomains?.length ?? 0) > 0 ? "domains" + : (assistant?.rag?.prepromptUrl ?? "").length > 0 + ? "preprompt" : false; @@ -119,18 +121,29 @@ formData.set("ragAllowAll", "false"); formData.set("ragLinkList", ""); formData.set("ragDomainList", ""); + formData.set("ragPrepromptUrl", ""); } else if (ragMode === "all") { formData.set("ragAllowAll", "true"); formData.set("ragLinkList", ""); formData.set("ragDomainList", ""); + formData.set("ragPrepromptUrl", ""); } else if (ragMode === "links") { formData.set("ragAllowAll", "false"); formData.set("ragDomainList", ""); + formData.set("ragPrepromptUrl", ""); } else if (ragMode === "domains") { formData.set("ragAllowAll", "false"); formData.set("ragLinkList", ""); + formData.set("ragPrepromptUrl", ""); + } else if (ragMode === "preprompt") { + formData.set("ragAllowAll", "false"); + formData.set("ragLinkList", ""); + formData.set("ragDomainList", ""); + formData.set( + "preprompt", + "The system prompt input is disabled when using a system prompt URL." + ); } - return async ({ result }) => { loading = false; await applyAction(result); @@ -384,17 +397,50 @@ />

{getError("ragLinkList", form)}

{/if} + + {#if ragMode === "preprompt"} + + Specify a single URL which returns a plain-text response that will be passed directly + as the system prompt. + + +

{getError("ragPrepromptUrl", form)}

+ {/if} {/if}
Instructions (system prompt) + +

+ System Instructions + {#if assistant?.rag?.prepromptUrl} + + + + {/if} +

+ {#if assistant?.rag?.prepromptUrl} +

+ This assistant loads system instructions from the following URL: +

+ {assistant?.rag?.prepromptUrl} + {:else} + + {/if} - {#if hasRag} + {#if hasRag && !assistant?.rag?.prepromptUrl}

Internet Access

{#if assistant?.rag?.allowAllDomains} diff --git a/src/routes/settings/(nav)/assistants/[assistantId]/edit/+page.server.ts b/src/routes/settings/(nav)/assistants/[assistantId]/edit/+page.server.ts index 1fc21deebb8..72cb68a1fe7 100644 --- a/src/routes/settings/(nav)/assistants/[assistantId]/edit/+page.server.ts +++ b/src/routes/settings/(nav)/assistants/[assistantId]/edit/+page.server.ts @@ -24,6 +24,7 @@ const newAsssistantSchema = z.object({ ragLinkList: z.preprocess(parseStringToList, z.string().url().array().max(10)), ragDomainList: z.preprocess(parseStringToList, z.string().array()), ragAllowAll: z.preprocess((v) => v === "true", z.boolean()), + ragPrepromptUrl: z.union([z.literal(""), z.string().trim().url()]), }); const uploadAvatar = async (avatar: File, assistantId: ObjectId): Promise => { @@ -139,6 +140,7 @@ export const actions: Actions = { allowedLinks: parse.data.ragLinkList, allowedDomains: parse.data.ragDomainList, allowAllDomains: parse.data.ragAllowAll, + prepromptUrl: parse.data.ragPrepromptUrl, }, searchTokens: generateSearchTokens(parse.data.name), }, diff --git a/src/routes/settings/(nav)/assistants/new/+page.server.ts b/src/routes/settings/(nav)/assistants/new/+page.server.ts index 21427ec4277..dd8a95c893c 100644 --- a/src/routes/settings/(nav)/assistants/new/+page.server.ts +++ b/src/routes/settings/(nav)/assistants/new/+page.server.ts @@ -24,6 +24,7 @@ const newAsssistantSchema = z.object({ ragLinkList: z.preprocess(parseStringToList, z.string().url().array().max(10)), ragDomainList: z.preprocess(parseStringToList, z.string().array()), ragAllowAll: z.preprocess((v) => v === "true", z.boolean()), + ragPrepromptUrl: z.union([z.literal(""), z.string().trim().url()]), }); const uploadAvatar = async (avatar: File, assistantId: ObjectId): Promise => { @@ -121,6 +122,7 @@ export const actions: Actions = { allowedLinks: parse.data.ragLinkList, allowedDomains: parse.data.ragDomainList, allowAllDomains: parse.data.ragAllowAll, + prepromptUrl: parse.data.ragPrepromptUrl, }, searchTokens: generateSearchTokens(parse.data.name), });