From 9b35a759a99fe0ecbcbfc769f692d929c7e4d8ae Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Wed, 10 Jun 2026 09:26:44 +0900 Subject: [PATCH] Inject real 3-model predictions for remaining 5 Group A matches (local only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CURATED 맵: MEX-RSA, CZE-RSA, MEX-KOR, CZE-MEX, RSA-KOR 5경기 실제 예측 - GPT(gpt-5.5)·Gemini(gemini-3.5-flash) 실제 API + Claude(opus-4-8) 직접 - MEX-KOR은 GPT=멕시코 / Claude·Gemini=무승부로 갈림 - getPredictions가 CURATED 우선 사용, 없으면 결정론 생성 - ⚠️ 로컬+Vercel만 반영 (Gitea push 안 함) Co-Authored-By: Claude Opus 4.8 --- lib/mockData.ts | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/lib/mockData.ts b/lib/mockData.ts index 2650c06..61745ef 100644 --- a/lib/mockData.ts +++ b/lib/mockData.ts @@ -155,6 +155,50 @@ function generatePredictions(match: Match, lang: Lang): AIPrediction[] { }); } +// 나머지 5경기 — 실제 3모델 API 출력 (2026-06-10, gpt-5.5 / gemini-3.5-flash / claude-opus-4-8 직접) +// scoreA=teamA(앞 팀), scoreB=teamB(뒤 팀). outcome: TEAM_A_WIN / DRAW / TEAM_B_WIN. +type Curated = { + model: ModelName; + outcome: Outcome; + scoreA: number; + scoreB: number; + confidencePct: number; + ko: string; + en: string; +}; +const CURATED: Record = { + // 개막전 — 멕시코 vs 남아공 + A_MEX_RSA_20260612: [ + { model: "GPT", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 1, confidencePct: 62, ko: "멕시코 전력 우위, 남아공 수비 불안", en: "Mexico's edge vs a shaky South Africa defense" }, + { model: "Claude", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 0, confidencePct: 64, ko: "개최국 멕시코의 홈 압박과 측면 우위", en: "Host Mexico's home press and wing edge" }, + { model: "Gemini", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 0, confidencePct: 75, ko: "멕시코의 홈 이점과 객관적 전력 우세", en: "Mexico's home advantage and clear quality" }, + ], + // 체코 vs 남아공 + A_CZE_RSA_20260619: [ + { model: "GPT", outcome: "TEAM_A_WIN", scoreA: 1, scoreB: 0, confidencePct: 56, ko: "체코의 조직력·결정력이 근소 우위", en: "Czechia's structure & finishing just edge it" }, + { model: "Claude", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 0, confidencePct: 60, ko: "체코의 세트피스와 피지컬 우위", en: "Czechia's set pieces and physicality" }, + { model: "Gemini", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 1, confidencePct: 65, ko: "체코의 전력 우세와 골 결정력 차이", en: "Czechia's quality and finishing decide it" }, + ], + // 멕시코 vs 한국 — 모델 갈림 + A_MEX_KOR_20260619: [ + { model: "GPT", outcome: "TEAM_A_WIN", scoreA: 2, scoreB: 1, confidencePct: 55, ko: "홈 압박으로 멕시코가 한 골 차 우세", en: "Home press gives Mexico a one-goal edge" }, + { model: "Claude", outcome: "DRAW", scoreA: 1, scoreB: 1, confidencePct: 50, ko: "홈의 멕시코, 역습의 한국 — 균형", en: "Mexico's press vs Korea's counters — even" }, + { model: "Gemini", outcome: "DRAW", scoreA: 1, scoreB: 1, confidencePct: 65, ko: "홈 멕시코와 한국 유럽파의 접전 무승부", en: "Home Mexico vs Korea's Europe stars — a draw" }, + ], + // 체코 vs 멕시코 + A_CZE_MEX_20260625: [ + { model: "GPT", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 58, ko: "멕시코의 홈 이점과 공격력 우세", en: "Mexico's home edge and attack prevail" }, + { model: "Claude", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 57, ko: "멕시코의 템포와 개인기가 체코를 넘는다", en: "Mexico's tempo and flair edge Czechia" }, + { model: "Gemini", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 60, ko: "멕시코의 경험이 승리를 견인", en: "Mexico's experience drives the win" }, + ], + // 남아공 vs 한국 — 16강 길목 + A_RSA_KOR_20260625: [ + { model: "GPT", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 58, ko: "한국의 전방 결정력과 큰 무대 경험 우세", en: "Korea's finishing and big-stage edge" }, + { model: "Claude", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 62, ko: "16강 길목, 한국의 화력이 남아공을 압도", en: "With the last-16 on the line, Korea's firepower tells" }, + { model: "Gemini", outcome: "TEAM_B_WIN", scoreA: 1, scoreB: 2, confidencePct: 75, ko: "스쿼드 전력 우세한 한국이 경기 주도", en: "Korea's stronger squad dictates the game" }, + ], +}; + export function getPredictions(match: Match, lang: Lang = "ko"): AIPrediction[] { if (match.matchId === FEATURED.matchId) { return FEATURED_PREDICTIONS.map((p) => ({ @@ -162,6 +206,19 @@ export function getPredictions(match: Match, lang: Lang = "ko"): AIPrediction[] reasonShort: FEATURED_REASONS[lang][p.model], })); } + const cur = CURATED[match.matchId]; + if (cur) { + return cur.map((c) => ({ + matchId: match.matchId, + model: c.model, + outcome: c.outcome, + scoreA: c.scoreA, + scoreB: c.scoreB, + confidencePct: c.confidencePct, + reasonShort: lang === "en" ? c.en : c.ko, + generatedAt: "2026-06-10", + })); + } return generatePredictions(match, lang); }