diff --git a/packages/api/src/routes/procurement.ts b/packages/api/src/routes/procurement.ts index 80f4dfe..12c250a 100644 --- a/packages/api/src/routes/procurement.ts +++ b/packages/api/src/routes/procurement.ts @@ -938,6 +938,7 @@ procurementRouter.get("/supply-squeeze", async (_req: Request, res: Response) => AND t.part_number NOT ILIKE '%AOC%' AND t.part_number NOT ILIKE '%-DAC-%' AND (t.standard_name IS NULL OR (t.standard_name NOT ILIKE '%Switch%' AND t.standard_name NOT ILIKE '%InfiniBand%')) + AND t.speed_gbps > 0 GROUP BY t.id, t.speed_gbps, t.form_factor ) SELECT @@ -955,21 +956,23 @@ procurementRouter.get("/supply-squeeze", async (_req: Request, res: Response) => GROUP BY speed_gbps, form_factor HAVING COUNT(*) >= 3 `), - // AI cluster demand by speed tier + // AI cluster demand by speed tier (speed_tier = 0 excluded — unclassified announcements) pool.query(` - SELECT - CASE - WHEN COALESCE(network_speed, title, summary, '') ILIKE '%800G%' THEN 800 - WHEN COALESCE(network_speed, title, summary, '') ILIKE '%400G%' THEN 400 - WHEN COALESCE(network_speed, title, summary, '') ILIKE '%100G%' THEN 100 - ELSE 0 - END AS speed_tier, - COALESCE(SUM(estimated_transceivers),0)::int AS total_tx, - COUNT(*)::int AS cluster_count - FROM ai_cluster_announcements - WHERE announced_date >= NOW() - INTERVAL '90 days' - GROUP BY 1 - HAVING COALESCE(SUM(estimated_transceivers),0) > 0 + SELECT speed_tier, total_tx, cluster_count FROM ( + SELECT + CASE + WHEN COALESCE(network_speed, title, summary, '') ILIKE '%800G%' THEN 800 + WHEN COALESCE(network_speed, title, summary, '') ILIKE '%400G%' THEN 400 + WHEN COALESCE(network_speed, title, summary, '') ILIKE '%100G%' THEN 100 + ELSE 0 + END AS speed_tier, + COALESCE(SUM(estimated_transceivers),0)::int AS total_tx, + COUNT(*)::int AS cluster_count + FROM ai_cluster_announcements + WHERE announced_date >= NOW() - INTERVAL '90 days' + GROUP BY 1 + HAVING COALESCE(SUM(estimated_transceivers),0) > 0 + ) t WHERE speed_tier > 0 `), // Hype phase per technology pool.query(` @@ -1047,7 +1050,7 @@ procurementRouter.get("/supply-squeeze", async (_req: Request, res: Response) => activeSignals, severity, reasons, }; }) - .filter((r) => r.activeSignals >= 1) + .filter((r) => r.activeSignals >= 1 && parseFloat(String(r.speed_gbps)) > 0) .sort((a, b) => b.activeSignals - a.activeSignals || b.price_momentum_pct - a.price_momentum_pct); res.json({ success: true, signals, criticalCount: signals.filter(s => s.severity === "critical").length }); diff --git a/packages/dashboard/index.html b/packages/dashboard/index.html index 8287f5c..22f5cc0 100644 --- a/packages/dashboard/index.html +++ b/packages/dashboard/index.html @@ -7990,7 +7990,7 @@ async function loadReorderTop() { + '