Spaces:
Sleeping
Sleeping
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 | |