From 896c338c8e19e40676c7209e8600d7150c1da48a Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Tue, 31 Mar 2026 09:41:20 +0200 Subject: [PATCH] fix(v0.2.3): dashboard polling for LLM blog pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: pollBlogLlm() checked for 'llm' in generated_by but pipeline sets 'fo-blog-engine-v3'. Dashboard showed template forever. Fixes: - Poll check: now detects any non-template generated_by - Poll timeout: 20s interval × 60 attempts = 20 min (pipeline takes ~10 min) - Status toast shows pipeline step progress (Step X/10) - Generation message tells user LLM runs ~10 min in background - Version bump to v0.2.3 --- packages/api/src/index.ts | 2 +- packages/api/src/routes/health.ts | 2 +- packages/dashboard/index.html | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index b334faf..66f86dc 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -67,7 +67,7 @@ app.get("/", (_req, res) => { app.get("/api", (_req, res) => { res.json({ name: "Transceiver Intelligence Platform", - version: "0.2.2", + version: "0.2.3", endpoints: [ "GET /api/transceivers?q=&form_factor=&speed=&category=&fiber_type=&wdm_type=&coherent=", "GET /api/transceivers/:id", diff --git a/packages/api/src/routes/health.ts b/packages/api/src/routes/health.ts index a679375..797c6d2 100644 --- a/packages/api/src/routes/health.ts +++ b/packages/api/src/routes/health.ts @@ -14,7 +14,7 @@ healthRouter.get("/", async (_req: Request, res: Response) => { res.json({ success: true, status: "healthy", - version: "0.2.2", + version: "0.2.3", uptime: process.uptime(), database: { connected: true, diff --git a/packages/dashboard/index.html b/packages/dashboard/index.html index ffec0d2..d2a2a92 100644 --- a/packages/dashboard/index.html +++ b/packages/dashboard/index.html @@ -2287,7 +2287,7 @@ function copyBlogContent(id) { // BLOG function generateBlog(topic, speed) { - el('blog-list').innerHTML = '
Generating article...
'; + el('blog-list').innerHTML = '
Generating template... LLM 10-step pipeline starts in background (~10 min)
'; var body = { topic: topic }; if (speed) body.speed = speed; fetch(API + '/api/blog/generate', { @@ -2308,17 +2308,17 @@ function generateBlog(topic, speed) { } function pollBlogLlm(id, attempt) { - if (attempt > 30) return; + if (attempt > 60) { showToast("Timeout", "LLM pipeline took too long. Check logs."); return; } setTimeout(function() { api('/api/blog/' + id).then(function(data) { - if (data.draft && data.draft.generated_by && data.draft.generated_by.includes('llm')) { + if (data.draft && data.draft.generated_by && data.draft.generated_by && data.draft.generated_by !== 'tip-blog-engine-template' && data.draft.generated_by !== null) { showToast('LLM Enhanced', data.draft.title + ' — ' + data.draft.word_count + ' words'); loadBlogDrafts(); } else { - pollBlogLlm(id, attempt + 1); + var steps = data.draft.pipeline_steps_completed || 0; showToast("LLM Step " + steps + "/10", "Pipeline running..."); pollBlogLlm(id, attempt + 1); } }).catch(function() {}); - }, 10000); + }, 20000); } el('gen-hype').addEventListener('click', function() { generateBlog('hype_cycle', '800G'); });