import { SAIGA_PROMPT_WEB_SEARCH_GENERATE_QUERY, SAIGA_BYPASS_WEBSEARCH_QUERY } from "$env/static/private"; import type { Message } from "$lib/types/Message"; import { format } from "date-fns"; import { modelEndpoint } from "../modelEndpoint"; import { defaultModel } from "$lib/server/models"; export async function generateQuery(messages: Message[]) { const currentDate = format(new Date(), "yyyy.mm.dd"); const userMessages = messages.filter(({ from }) => from === "user"); const previousUserMessages = userMessages.slice(0, -1); const lastMessage = userMessages[userMessages.length - 1]; // const promptSearchQuery = defaultModel.webSearchQueryPromptRender({ // message: lastMessage, // previousMessages: previousUserMessages.map(({ content }) => content).join(" "), // currentDate, // }); const prepromt = "" console.log('SAIGA_BYPASS_WEBSEARCH_QUERY', SAIGA_BYPASS_WEBSEARCH_QUERY) if (SAIGA_BYPASS_WEBSEARCH_QUERY === 'true'){ return lastMessage.content; }else{ return await generateSearchQuery(lastMessage.content, {}); } // const regex = /"([^"]+)"/; // const matches = searchQuery.match(regex); // if (matches && matches.length > 1) { // searchQuery = matches[1]; // } // console.log('searchQuery', searchQuery) // return searchQuery; } async function generateSearchQuery(prompt: string, parameters?: Partial, maxRetries: number = 3 ): Promise { const newParameters = { ...defaultModel.parameters, ...parameters, return_full_text: false, }; const randomEndpoint = modelEndpoint(defaultModel); const apiUrl = randomEndpoint.url; const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ messages: [{ from: 'user', content: SAIGA_PROMPT_WEB_SEARCH_GENERATE_QUERY.replace('{{query}}', prompt) }], parameters: { temperature: '0.01', top_p: 0.95, top_k: 25 } }), }; let retries = 0; while (retries < maxRetries) { try { const response = await fetch(apiUrl, requestOptions); if (!response.ok) { console.error(`HTTP ${response.status} - ${response.statusText}`); throw new Error(`HTTP ${response.status} - ${response.statusText}`); } // Check if the response has a body if (!response.body) { console.error(response); throw new Error('Response has no body'); } const textDecoder = new TextDecoder(); const reader = response.body.getReader(); let fullText = ''; while (true) { const { done, value } = await reader.read(); if (done) { reader.releaseLock(); break; } // Process the chunk of text (value) here const chunk = textDecoder.decode(value); fullText += chunk } return fullText; } catch (error) { console.error('Error:', error); retries++; console.log(`Retrying request (${retries}/${maxRetries})...`); continue; // Retry the loop } } throw new Error(`Max retries (${maxRetries}) exceeded.`); }