Inject real 3-model predictions for remaining 5 Group A matches (local only)

- 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 <noreply@anthropic.com>
main
Haewon Kam 2026-06-10 09:26:44 +09:00
parent 2fe60ab0cd
commit 9b35a759a9
1 changed files with 57 additions and 0 deletions

View File

@ -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<string, Curated[]> = {
// 개막전 — 멕시코 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[] { export function getPredictions(match: Match, lang: Lang = "ko"): AIPrediction[] {
if (match.matchId === FEATURED.matchId) { if (match.matchId === FEATURED.matchId) {
return FEATURED_PREDICTIONS.map((p) => ({ return FEATURED_PREDICTIONS.map((p) => ({
@ -162,6 +206,19 @@ export function getPredictions(match: Match, lang: Lang = "ko"): AIPrediction[]
reasonShort: FEATURED_REASONS[lang][p.model], 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); return generatePredictions(match, lang);
} }