fix(filemode): лимит тела 8 КБ (файл параметров, запас на комменты) + понятное сообщение при превышении
This commit is contained in:
+8
-3
@@ -20,8 +20,13 @@ const { llmChat, jsonError } = require('./assist.js');
|
|||||||
const { search, stripHtml } = require('./search.js');
|
const { search, stripHtml } = require('./search.js');
|
||||||
const { fetchIndex, clientIp } = require('./orchestrator.js');
|
const { fetchIndex, clientIp } = require('./orchestrator.js');
|
||||||
|
|
||||||
const MAX_BODY = intEnv('FILE_MAX_BODY', 65536); // макс. размер файла юзера, байт
|
// Лимит на тело запроса (JSON {content, instruction}). terraform.tfvars — файл
|
||||||
|
// ПАРАМЕТРОВ: в примерах он ≤ ~2.5 КБ; 8 КБ даёт запас на комментарии. Больше —
|
||||||
|
// это «запихнул весь проект», такое отклоняем понятным сообщением.
|
||||||
|
const MAX_BODY = intEnv('FILE_MAX_BODY', 8192);
|
||||||
const MAX_TOKENS = intEnv('FILE_MAX_TOKENS', 4096); // бюджет ответа LLM (полный файл)
|
const MAX_TOKENS = intEnv('FILE_MAX_TOKENS', 4096); // бюджет ответа LLM (полный файл)
|
||||||
|
const TOO_BIG_MSG = 'слишком много данных: это файл параметров (terraform.tfvars), ' +
|
||||||
|
'а не весь проект. Лимит ' + MAX_BODY + ' байт.';
|
||||||
|
|
||||||
function intEnv(name, fallback) {
|
function intEnv(name, fallback) {
|
||||||
const raw = process.env[name];
|
const raw = process.env[name];
|
||||||
@@ -113,14 +118,14 @@ async function handleFile(req, res, config) {
|
|||||||
// и клиент получает обрыв соединения вместо чистого 413. См. assist.js.
|
// и клиент получает обрыв соединения вместо чистого 413. См. assist.js.
|
||||||
const declaredLen = Number.parseInt(req.headers['content-length'], 10);
|
const declaredLen = Number.parseInt(req.headers['content-length'], 10);
|
||||||
if (Number.isFinite(declaredLen) && declaredLen > MAX_BODY) {
|
if (Number.isFinite(declaredLen) && declaredLen > MAX_BODY) {
|
||||||
jsonError(res, 413, 413, 'body too large');
|
jsonError(res, 413, 413, TOO_BIG_MSG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) Тело с лимитом + разбор {content, instruction}.
|
// 2) Тело с лимитом + разбор {content, instruction}.
|
||||||
const read = await readBody(req);
|
const read = await readBody(req);
|
||||||
if (!read.ok) {
|
if (!read.ok) {
|
||||||
jsonError(res, read.code, read.code, 'body too large');
|
jsonError(res, read.code, read.code, read.code === 413 ? TOO_BIG_MSG : 'bad request body');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let parsed;
|
let parsed;
|
||||||
|
|||||||
Reference in New Issue
Block a user