File size: 2,984 Bytes
dd6cddb 39a2f10 dd6cddb 39a2f10 dd6cddb 39a2f10 dd6cddb 39a2f10 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 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.`);
}
|