| | import { isURLLocal } from "../isURLLocal"; |
| | import { config } from "$lib/server/config"; |
| | import { collections } from "$lib/server/database"; |
| | import type { Assistant } from "$lib/types/Assistant"; |
| | import type { ObjectId } from "mongodb"; |
| |
|
| | export async function processPreprompt(preprompt: string, user_message: string | undefined) { |
| | |
| | const today = new Intl.DateTimeFormat("en-US", { |
| | weekday: "long", |
| | day: "numeric", |
| | month: "long", |
| | year: "numeric", |
| | }).format(new Date()); |
| | preprompt = preprompt.replaceAll("{{today}}", today); |
| | const requestRegex = /{{\s?(get|post|url)=(.*?)\s?}}/g; |
| |
|
| | for (const match of preprompt.matchAll(requestRegex)) { |
| | const method = match[1].toUpperCase(); |
| | const urlString = match[2]; |
| | try { |
| | const url = new URL(urlString); |
| | if ((await isURLLocal(url)) && config.ENABLE_LOCAL_FETCH !== "true") { |
| | throw new Error("URL couldn't be fetched, it resolved to a local address."); |
| | } |
| |
|
| | let res; |
| | if (method == "POST") { |
| | res = await fetch(url.href, { |
| | method: "POST", |
| | body: user_message, |
| | headers: { |
| | "Content-Type": "text/plain", |
| | }, |
| | }); |
| | } else if (method == "GET" || method == "URL") { |
| | res = await fetch(url.href); |
| | } else { |
| | throw new Error("Invalid method " + method); |
| | } |
| |
|
| | if (!res.ok) { |
| | throw new Error("URL couldn't be fetched, error " + res.status); |
| | } |
| | const text = await res.text(); |
| | preprompt = preprompt.replaceAll(match[0], text); |
| | } catch (e) { |
| | preprompt = preprompt.replaceAll(match[0], (e as Error).message); |
| | } |
| | } |
| |
|
| | return preprompt; |
| | } |
| |
|
| | export async function getAssistantById(id?: ObjectId) { |
| | return collections.assistants |
| | .findOne< |
| | Pick<Assistant, "rag" | "dynamicPrompt" | "generateSettings" | "tools"> |
| | >({ _id: id }, { projection: { rag: 1, dynamicPrompt: 1, generateSettings: 1, tools: 1 } }) |
| | .then((a) => a ?? undefined); |
| | } |
| |
|
| | export function assistantHasWebSearch(assistant?: Pick<Assistant, "rag"> | null) { |
| | return ( |
| | config.ENABLE_ASSISTANTS_RAG === "true" && |
| | !!assistant?.rag && |
| | (assistant.rag.allowedLinks.length > 0 || |
| | assistant.rag.allowedDomains.length > 0 || |
| | assistant.rag.allowAllDomains) |
| | ); |
| | } |
| |
|
| | export function assistantHasDynamicPrompt(assistant?: Pick<Assistant, "dynamicPrompt">) { |
| | return config.ENABLE_ASSISTANTS_RAG === "true" && Boolean(assistant?.dynamicPrompt); |
| | } |
| |
|