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
parent
2fe60ab0cd
commit
9b35a759a9
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue