fix(together): Gemini失敗時もJina成功ならarchive_status='done'にする

Gemini API 503 エラー時に全体を'failed'にしていたため、
Jina で本文取得済みの記事でもReaderボタンが表示されなかった。
Gemini だけ失敗した場合は summary=null/tags=[] で 'done' にし、
Readerは使える状態を保つ。既存の28件は DB で直接修正済み。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
posimai 2026-04-20 21:17:07 +09:00
parent 58ca9d2540
commit ef7fccb255
1 changed files with 18 additions and 14 deletions

View File

@ -2583,6 +2583,7 @@ ${excerpt}
let summary = null; let summary = null;
let tags = []; let tags = [];
if (genAI && fullContent) { if (genAI && fullContent) {
try {
// 最初の ## 見出し以降を本文とみなし 4000 字を Gemini に渡す // 最初の ## 見出し以降を本文とみなし 4000 字を Gemini に渡す
const bodyStart = fullContent.search(/^#{1,2}\s/m); const bodyStart = fullContent.search(/^#{1,2}\s/m);
const excerpt = (bodyStart >= 0 ? fullContent.slice(bodyStart) : fullContent).slice(0, 4000); const excerpt = (bodyStart >= 0 ? fullContent.slice(bodyStart) : fullContent).slice(0, 4000);
@ -2596,9 +2597,12 @@ ${excerpt}
summary = (parsed.summary || '').slice(0, 300); summary = (parsed.summary || '').slice(0, 300);
tags = Array.isArray(parsed.tags) ? parsed.tags.slice(0, 4).map(t => String(t).slice(0, 20)) : []; tags = Array.isArray(parsed.tags) ? parsed.tags.slice(0, 4).map(t => String(t).slice(0, 20)) : [];
} catch { } catch {
// JSON パース失敗時は全文を要約として扱う
summary = raw.slice(0, 300); summary = raw.slice(0, 300);
} }
} catch (aiErr) {
// Gemini 失敗503等: Jina 本文は保存済みなので Reader は使える状態で done にする
console.error('[together archive AI]', shareId, aiErr.message);
}
} }
await pool.query( await pool.query(