chat-v3 / chat-ui /src /lib /server /websearch /generateQuery.ts
muryshev's picture
Added parameters
dd6cddb
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<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}`);
}
// 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.`);
}