diff --git a/handlers/complexity-analysis.js b/handlers/complexity-analysis.js index 8fd0fc5..e30e3f8 100644 --- a/handlers/complexity-analysis.js +++ b/handlers/complexity-analysis.js @@ -255,14 +255,14 @@ export async function callComplexityAnalysis(fileEntries, apiKey) { "Content-Type": "application/json", }, body: JSON.stringify({ - model: "gpt-4.1-nano", + model: "gpt-5-nano", messages: [ { role: "system", content: SYSTEM_PROMPT }, { role: "user", content: userPrompt }, ], response_format: { type: "json_object" }, - max_tokens: 4000, - temperature: 0.2, + max_completion_tokens: 5000, + reasoning_effort: "minimal", }), }); diff --git a/tests/learningComment.test.js b/tests/learningComment.test.js index 3e9c328..581eef3 100644 --- a/tests/learningComment.test.js +++ b/tests/learningComment.test.js @@ -49,7 +49,7 @@ describe("upsertLearningStatusComment β€” usage history accumulation", () => { expect(post).toBeDefined(); const body = parseBody(post); - expect(body).toContain("πŸ”’ API μ‚¬μš©λŸ‰ (gpt-4.1-nano)"); + expect(body).toContain("πŸ”’ API μ‚¬μš©λŸ‰ (gpt-5-nano)"); expect(body).toContain("| 1 | 100 | 50 | 150 |"); // single-row history => no totals row expect(body).not.toContain("**합계**"); diff --git a/tests/tag-patterns.test.js b/tests/tag-patterns.test.js index b6579e5..30b4c49 100644 --- a/tests/tag-patterns.test.js +++ b/tests/tag-patterns.test.js @@ -65,7 +65,7 @@ function makePrData(overrides = {}) { /** * 두 OpenAI μ—”λ“œν¬μΈνŠΈ(νŒ¨ν„΄ 뢄석 N콜 + λ³΅μž‘λ„ 뢄석 1콜)λ₯Ό λΆ„κΈ°ν•œλ‹€. - * λ³΅μž‘λ„ ν˜ΈμΆœμ€ system_prompt 에 "λ³΅μž‘λ„" κ°€ ν¬ν•¨λ˜κ±°λ‚˜ max_tokens >= 1000 으둜 식별. + * λ³΅μž‘λ„ ν˜ΈμΆœμ€ system_prompt 에 "μ‹œκ°„/곡간 λ³΅μž‘λ„λ₯Ό 뢄석" 이 ν¬ν•¨λ˜λŠ”μ§€λ‘œ 식별. */ function makeFetchMock({ solutionFiles, diff --git a/utils/learningComment.js b/utils/learningComment.js index ed7ac0d..8cf409b 100644 --- a/utils/learningComment.js +++ b/utils/learningComment.js @@ -20,8 +20,8 @@ const COMMENT_MARKER = ""; */ const USAGE_DATA_RE = //; -/** gpt-4.1-nano pricing (USD per token) */ -const INPUT_COST_PER_TOKEN = 0.10 / 1_000_000; +/** gpt-5-nano pricing (USD per token) */ +const INPUT_COST_PER_TOKEN = 0.05 / 1_000_000; const OUTPUT_COST_PER_TOKEN = 0.40 / 1_000_000; /** @@ -72,7 +72,7 @@ function parseUsageFromComment(body) { function formatUsageSection(history) { const lines = []; lines.push("
"); - lines.push("πŸ”’ API μ‚¬μš©λŸ‰ (gpt-4.1-nano)"); + lines.push("πŸ”’ API μ‚¬μš©λŸ‰ (gpt-5-nano)"); lines.push(""); lines.push("| μš”μ²­ | μž…λ ₯ 토큰 | 좜λ ₯ 토큰 | 합계 | λΉ„μš© |"); lines.push("|---:|---:|---:|---:|---:|"); diff --git a/utils/openai.js b/utils/openai.js index bc8f7ee..99cda69 100644 --- a/utils/openai.js +++ b/utils/openai.js @@ -37,7 +37,11 @@ PR의 μ½”λ“œ λ³€κ²½ 사항을 μ°Έκ³ ν•˜μ—¬ μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ— λͺ…ν™•ν•˜κ³  λ‹¨μˆœνžˆ μ§€μ λ§Œ ν•˜μ§€ 말고, 격렀와 ν•™μŠ΅μ΄ λ˜λŠ” ν”Όλ“œλ°±μ„ ν•¨κ»˜ μ£Όμ„Έμš”. ν•΄λ‹Ή μ‚¬ν•­μ—†λŠ” ν•­λͺ©μ€ μƒλž΅ν•˜κ³  μžμ—°μŠ€λŸ½κ²Œ μž‘μ„±ν•˜μ„Έμš”. -500 κΈ€μžλ₯Ό μ΄ˆκ³Όν•˜μ§€ λ§μ•„μ£Όμ„Έμš”. + +[μž‘μ„± κ·œμΉ™ β€” λ°˜λ“œμ‹œ 지킬 것] +- 전체 응닡은 ν•œκ΅­μ–΄ κΈ°μ€€ 500자 이내. μ ˆλŒ€ μ΄ˆκ³Όν•˜μ§€ λ§ˆμ„Έμš”. λΆ„λŸ‰μ΄ λ„˜μΉ  것 κ°™μœΌλ©΄ κ°€μž₯ μ€‘μš”ν•œ ν”Όλ“œλ°±λ§Œ 남기고 λ‚˜λ¨Έμ§€λŠ” μƒλž΅ν•˜μ„Έμš”. +- ν•œκ΅­μ–΄λ‘œλ§Œ μž‘μ„±ν•˜μ„Έμš”. 쀑ꡭ어·일본어 ν•œμžλ‚˜ λ‹€λ₯Έ μ–Έμ–΄λ₯Ό μ„žμ§€ λ§ˆμ„Έμš”(예: "一致" κΈˆμ§€, "일치" μ‚¬μš©). +- ν•­λͺ©μ€ 3개 μ΄λ‚΄λ‘œ μ••μΆ•ν•˜κ³ , μž₯ν™©ν•œ μ„€λͺ… 없이 ν•΅μ‹¬λ§Œ κ°„κ²°ν•˜κ²Œ μ“°μ„Έμš”. `; let userPrompt = `# PR Title @@ -65,13 +69,13 @@ ${prDiff} "Content-Type": "application/json", }, body: JSON.stringify({ - model: "gpt-4.1-nano", + model: "gpt-5-nano", messages: [ { role: "system", content: systemPrompt }, { role: "user", content: userPrompt }, ], - max_tokens: 2000, - temperature: 0.7, + max_completion_tokens: 3000, + reasoning_effort: "minimal", }), }); @@ -143,14 +147,14 @@ ${fileContent} "Content-Type": "application/json", }, body: JSON.stringify({ - model: "gpt-4.1-nano", + model: "gpt-5-nano", messages: [ { role: "system", content: systemPrompt }, { role: "user", content: userPrompt }, ], response_format: { type: "json_object" }, - max_tokens: 500, - temperature: 0.3, + max_completion_tokens: 2000, + reasoning_effort: "minimal", }), }); @@ -221,14 +225,14 @@ ${truncatedContent} "Content-Type": "application/json", }, body: JSON.stringify({ - model: "gpt-4.1-nano", + model: "gpt-5-nano", messages: [ { role: "system", content: systemPrompt }, { role: "user", content: userPrompt }, ], response_format: { type: "json_object" }, - max_tokens: 200, - temperature: 0.2, + max_completion_tokens: 1500, + reasoning_effort: "minimal", }), });