diff --git a/server.js b/server.js index 956e32c3..c8c44ca5 100644 --- a/server.js +++ b/server.js @@ -2703,10 +2703,10 @@ ${excerpt} const bodyStart = fullContent.search(/^#{1,2}\s/m); const excerpt = (bodyStart >= 0 ? fullContent.slice(bodyStart) : fullContent).slice(0, 4000); const prompt = `以下の記事を分析して、JSONのみを返してください(コードブロック不要)。\n\n{"summary":"1〜2文の日本語要約","tags":["タグ1","タグ2","タグ3"]}\n\n- summary: 読者が読む価値があるかを判断できる1〜2文\n- tags: 内容を表す具体的な日本語タグを2〜4個。「その他」は絶対に使わないこと。内容が不明な場合でも最も近いカテゴリを選ぶ(例: AI, テクノロジー, ビジネス, 健康, 旅行, 料理, スポーツ, 政治, 経済, エンタメ, ゲーム, 科学, デザイン, ライフスタイル, 教育, 環境, 医療, 法律, 文化, 歴史)\n\n記事:\n${excerpt}`; - const modelsToTry = ['gemini-2.5-flash', 'gemini-2.0-flash']; - for (const modelName of modelsToTry) { + // gemini-2.0-flash は posimai-together プロジェクトで limit:0 のため除外 + for (let attempt = 0; attempt < 2; attempt++) { try { - const model = togetherGenAI.getGenerativeModel({ model: modelName }); + const model = togetherGenAI.getGenerativeModel({ model: 'gemini-2.5-flash' }); const timeoutP = new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 30000)); const result = await Promise.race([model.generateContent(prompt), timeoutP]); const raw = result.response.text().trim(); @@ -2719,7 +2719,13 @@ ${excerpt} } break; } catch (aiErr) { - console.error(`[together archive AI] ${modelName} share=${shareId}`, aiErr.message); + console.error(`[together archive AI] attempt=${attempt + 1} share=${shareId}`, aiErr.message); + // 503(一時高負荷)は5秒待って1回だけリトライ + if (attempt === 0 && aiErr.status === 503) { + await new Promise(r => setTimeout(r, 5000)); + } else { + break; + } } } } @@ -2762,9 +2768,9 @@ ${excerpt} const excerpt = (bodyStart >= 0 ? share.full_content.slice(bodyStart) : share.full_content).slice(0, 4000); const prompt = `以下の記事を分析して、JSONのみを返してください(コードブロック不要)。\n\n{"summary":"1〜2文の日本語要約","tags":["タグ1","タグ2","タグ3"]}\n\n- summary: 読者が読む価値があるかを判断できる1〜2文\n- tags: 内容を表す具体的な日本語タグを2〜4個。「その他」は絶対に使わないこと\n\n記事:\n${excerpt}`; let rearchiveDone = false; - for (const modelName of ['gemini-2.5-flash', 'gemini-2.0-flash']) { + for (let attempt = 0; attempt < 2; attempt++) { try { - const model = togetherGenAI.getGenerativeModel({ model: modelName }); + const model = togetherGenAI.getGenerativeModel({ model: 'gemini-2.5-flash' }); const timeoutP = new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 30000)); const result = await Promise.race([model.generateContent(prompt), timeoutP]); const raw = result.response.text().trim(); @@ -2775,7 +2781,12 @@ ${excerpt} rearchiveDone = true; break; } catch (e) { - console.error(`[rearchive ${modelName}]`, shareId, e.message); + console.error(`[rearchive attempt=${attempt + 1}]`, shareId, e.message); + if (attempt === 0 && e.status === 503) { + await new Promise(r => setTimeout(r, 5000)); + } else { + break; + } } } if (!rearchiveDone) {