| 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 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, {}); |
| } |
|
|
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| } |
|
|
|
|
| async function generateSearchQuery(prompt: string, |
| parameters?: Partial<Parameters>, |
| maxRetries: number = 3 |
| ): Promise<string> { |
|
|
| 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}`); |
| } |
|
|
| |
| 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; |
| } |
|
|
| |
| const chunk = textDecoder.decode(value); |
| fullText += chunk |
| } |
|
|
| return fullText; |
|
|
| } catch (error) { |
| console.error('Error:', error); |
| retries++; |
| console.log(`Retrying request (${retries}/${maxRetries})...`); |
| continue; |
|
|
| } |
| } |
|
|
| throw new Error(`Max retries (${maxRetries}) exceeded.`); |
| } |
|
|