fix(zeroNotes): гейт от обрезанного ответа AI (пустой/оборванный текст улетал в паблик)
This commit is contained in:
@@ -171,6 +171,19 @@ async function generateDraft(channelId, opts = {}) {
|
|||||||
.replace(/\s*```\s*$/i, '')
|
.replace(/\s*```\s*$/i, '')
|
||||||
.trim();
|
.trim();
|
||||||
|
|
||||||
|
// 5b. Защита от обрезанного ответа AI-шлюза: гейт возвращал коротким текстом
|
||||||
|
// без ошибки (например "Когда-то я дума"), и это тихо улетало в паблик.
|
||||||
|
// Считаем валидной заметку не короче 120 символов и заканчивающуюся на
|
||||||
|
// знак препинания/эмодзи (не оборванную на полуслове).
|
||||||
|
const MIN_NOTE_LEN = 120;
|
||||||
|
const endsCleanly = /[.!?…"»)\p{Emoji_Presentation}]\s*$/u.test(content);
|
||||||
|
if (content.length < MIN_NOTE_LEN || !endsCleanly) {
|
||||||
|
throw new Error(
|
||||||
|
`AI вернул обрезанный/подозрительно короткий текст (${content.length} симв., ` +
|
||||||
|
`конец="${content.slice(-20)}"). Черновик НЕ сохранён, генерацию нужно перезапустить.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// 6. Подбираем позу Зеро по тексту
|
// 6. Подбираем позу Зеро по тексту
|
||||||
const pose = zeroChar.pickPose({
|
const pose = zeroChar.pickPose({
|
||||||
title: prompt.themeHint,
|
title: prompt.themeHint,
|
||||||
|
|||||||
Reference in New Issue
Block a user