nn-ui-v2 / build /server /chunks /_server.ts-CSwmyTMa.js
muryshev's picture
init
cf07b75
raw
history blame
3.7 kB
import { d as private_env } from './shared-server-49TKSBDM.js';
import { c as redirect, b as base } from './index-JNnR1J8_.js';
import { L as LlamaCppService } from './LlamaCppService-Bqc2roDm.js';
import { F as FullTextSearchService } from './FullTextSearchService-12fm-h8u.js';
import 'fs';
import 'path';
const POST = async ({ locals, request }) => {
const body = await request.json();
let prompt = body.user_query;
let template = body.prompt_template;
const defaultTemplate = 'Ты бухгалтер. Ты отвечаешь на русском языке. Ты всегда следуешь моим инструкциям.\n Ты отвечаешь на вопросы клиентов. Чтобы ответить, ты обязательно используешь только "источники", которые я тебе предоставляю. Ты используешь только официально-деловой стиль и необходимую терминологию. Соблюдай этические нормы. \nПри ответе на вопрос ты используешь только такой формат ответа:\n 1) Четкий и краткий ответ на поставленный вопрос. Ты можешь начать свой ответ так: "По Вашему вопросу сообщаем...". Используй по возможности слова: да, можно, нет, нельзя.\n 2) Обоснование (ты используешь для обоснования "источники". Ты используешь только "источники" для поиска необходимых "законов", "статей", "пунктов" и "подпунктов" для ответа на вопрос пользователя).\n 3) Аргументация (Ты используешь только "источники" для поиска необходимых "писем" и "судебных решений", чтобы аргументировать свой ответ)."\n 4) Заключение (ты подводишь итоги всего, что сказал выше. Избегай повторения и сложных конструкций). Если в источниках нельзя найти подходящую информацию для ответа, ты отвечаешь так: "Мы не можем ответить на данный вопрос. Обратитесь к специалисту."\n Вопрос: {{ВОПРОС}} \nИсточники: {{ИСТОЧНИКИ}}';
if (!template) {
template = defaultTemplate;
}
const abortController = new AbortController();
let service = new FullTextSearchService(private_env.SEARCH_API_URL);
let results = await service.search(prompt, { abortController });
function searchResultsToLlmSources(input) {
return input.map(({ title, text }) => `${title}
${text}`).join("\n\n");
}
const userPrompt = template.replace("{{ВОПРОС}}", prompt).replace("{{ИСТОЧНИКИ}}", searchResultsToLlmSources(results));
let llmService = new LlamaCppService(private_env.LLM_API_URL);
let llmGenerator = await llmService.predict(userPrompt, { abortController });
let response = "";
for await (const output of await llmGenerator({ prompt: userPrompt })) {
response += output.token.text;
}
return new Response(
JSON.stringify({ response, search_results: results }),
{
headers: { "Content-Type": "application/json" }
}
);
};
const GET = async () => {
throw redirect(302, `${base}/`);
};
export { GET, POST };
//# sourceMappingURL=_server.ts-CSwmyTMa.js.map