From 45c3f2b562d28893975bbbf392c0a7ec67d963c9 Mon Sep 17 00:00:00 2001 From: Aleksei Pavlov Date: Sun, 21 Jun 2026 20:57:28 +0300 Subject: [PATCH] =?UTF-8?q?fix(blog-topics):=20ai.chat=20returns=20object?= =?UTF-8?q?=20not=20string=20=E2=80=94=20extract=20.text=20before=20.repla?= =?UTF-8?q?ce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit После обновления ai.js модуль возвращает { text, usage } вместо строки. result.replace() падало с 'not a function'. Теперь берём .text если объект. --- src/routes/admin.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/routes/admin.js b/src/routes/admin.js index 3ea59f8..3e88796 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -628,12 +628,14 @@ router.post('/blog-topics/generate', async (req, res) => { const userMsg = `Придумай ${count} уникальных тем.${existingTopics ? `\n\nИзбегай повторений:\n${existingTopics.slice(0,800)}` : ''}`; - const result = await ai.chat( + const aiResult = await ai.chat( config.ai.models.topics || 'claude-haiku-4-5-20251001', system, userMsg, 0.9, 600 ); + // ai.chat возвращает { text, usage } или строку (backward compat) + const rawText = typeof aiResult === 'string' ? aiResult : aiResult.text; - const topics = JSON.parse(result.replace(/```json|```/g, '').trim()); + const topics = JSON.parse(rawText.replace(/```json|```/g, '').trim()); let added = 0; for (const topic of topics.slice(0, count)) { if (!topic?.trim()) continue;