{"openapi":"3.1.0","info":{"title":"LoL 10분 시점 승패 예측 API","description":"10분 시점 경기 상태(블루−레드 차이 피처 13개)를 받아 블루팀 승리 확률·예측·승리요인을 돌려준다. 같은 입력으로 이상탐지(학습 데이터에서 보기 드문 경기 상태)도 함께 판정한다. 연계 방법은 docs/api_guide.md.","version":"lolwin-1.0"},"paths":{"/schema":{"get":{"summary":"입력 피처 13개의 뜻·형·학습 범위","operationId":"api_schema_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/examples":{"get":{"summary":"예시 입력 3건","operationId":"api_examples_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Example"},"type":"array","title":"Response Api Examples Examples Get"}}}}}}},"/coach":{"post":{"summary":"감독 — 무엇을 했다면 승률이 얼마나 올랐나","operationId":"api_coach_coach_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoachRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoachResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"서비스가 판단할 준비가 되었는지 알려준다","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/predict":{"post":{"summary":"한 건을 판단한다","operationId":"api_predict_predict_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/predict/batch":{"post":{"summary":"여러 건을 한 번에 판단한다","operationId":"api_predict_batch_predict_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metrics":{"get":{"summary":"운영에서 보는 다섯 숫자","operationId":"get_metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Anomaly":{"properties":{"is_anomaly":{"type":"boolean","title":"Is Anomaly"},"score":{"type":"number","title":"Score"},"percentile":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Percentile","description":"학습 데이터 기준 백분위. 98 이상이 이상"},"label":{"type":"string","title":"Label"},"unusual_features":{"items":{"type":"string"},"type":"array","title":"Unusual Features"}},"type":"object","required":["is_anomaly","score","percentile","label","unusual_features"],"title":"Anomaly"},"BatchRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PredictRequest"},"type":"array","maxItems":32,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"BatchRequest"},"BatchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/PredictResponse"},"type":"array","title":"Results"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["results","count"],"title":"BatchResponse"},"CoachAction":{"properties":{"feature":{"type":"string","title":"Feature"},"name":{"type":"string","title":"Name"},"action":{"type":"string","title":"Action"},"win_prob_after":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Win Prob After"},"gain":{"type":"number","title":"Gain"}},"type":"object","required":["feature","name","action","win_prob_after","gain"],"title":"CoachAction"},"CoachRequest":{"properties":{"FirstBlood":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Firstblood","description":"블루가 첫 킬을 냈으면 1"},"KillsDiff":{"type":"integer","maximum":50.0,"minimum":-50.0,"title":"Killsdiff"},"GoldDiff":{"type":"integer","maximum":30000.0,"minimum":-30000.0,"title":"Golddiff","description":"골드 차이"},"ExpDiff":{"type":"integer","maximum":30000.0,"minimum":-30000.0,"title":"Expdiff","description":"경험치 차이"},"WardsPlacedDiff":{"type":"integer","maximum":500.0,"minimum":-500.0,"title":"Wardsplaceddiff"},"WardsDestroyedDiff":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Wardsdestroyeddiff"},"AssistsDiff":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Assistsdiff"},"DragonsDiff":{"type":"integer","maximum":1.0,"minimum":-1.0,"title":"Dragonsdiff"},"HeraldsDiff":{"type":"integer","maximum":1.0,"minimum":-1.0,"title":"Heraldsdiff"},"TowersDestroyedDiff":{"type":"integer","maximum":11.0,"minimum":-11.0,"title":"Towersdestroyeddiff"},"AvgLevelDiff":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Avgleveldiff"},"TotalMinionsKilledDiff":{"type":"integer","maximum":500.0,"minimum":-500.0,"title":"Totalminionskilleddiff"},"TotalJungleMinionsKilledDiff":{"type":"integer","maximum":300.0,"minimum":-300.0,"title":"Totaljungleminionskilleddiff"},"verdict":{"anyOf":[{"type":"string","enum":["역전패","열세패","역전승","우세승"]},{"type":"null"}],"title":"Verdict"}},"additionalProperties":false,"type":"object","required":["FirstBlood","KillsDiff","GoldDiff","ExpDiff","WardsPlacedDiff","WardsDestroyedDiff","AssistsDiff","DragonsDiff","HeraldsDiff","TowersDestroyedDiff","AvgLevelDiff","TotalMinionsKilledDiff","TotalJungleMinionsKilledDiff"],"title":"CoachRequest","description":"13개 피처 + 선택 verdict(역전패·열세패·역전승·우세승) — verdict 가 있으면 판정별 처방을 함께 준다."},"CoachResponse":{"properties":{"win_prob":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Win Prob"},"actions":{"items":{"$ref":"#/components/schemas/CoachAction"},"type":"array","maxItems":5,"title":"Actions"},"how_to_read":{"type":"string","title":"How To Read"},"verdict_advice":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Verdict Advice"},"model_version":{"type":"string","title":"Model Version"}},"type":"object","required":["win_prob","actions","how_to_read","model_version"],"title":"CoachResponse"},"Example":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"payload":{"$ref":"#/components/schemas/PredictRequest"}},"type":"object","required":["id","label","payload"],"title":"Example"},"Factor":{"properties":{"feature":{"type":"string","title":"Feature"},"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"contribution":{"type":"number","title":"Contribution"},"direction":{"type":"string","enum":["블루에 유리","레드에 유리"],"title":"Direction"}},"type":"object","required":["feature","name","value","contribution","direction"],"title":"Factor"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","enum":["ok","loading","error"],"title":"Status"},"model_name":{"type":"string","title":"Model Name"},"model_version":{"type":"string","title":"Model Version"},"load_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Seconds"}},"type":"object","required":["status","model_name","model_version"],"title":"HealthResponse"},"PredictRequest":{"properties":{"FirstBlood":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Firstblood","description":"블루가 첫 킬을 냈으면 1"},"KillsDiff":{"type":"integer","maximum":50.0,"minimum":-50.0,"title":"Killsdiff"},"GoldDiff":{"type":"integer","maximum":30000.0,"minimum":-30000.0,"title":"Golddiff","description":"골드 차이"},"ExpDiff":{"type":"integer","maximum":30000.0,"minimum":-30000.0,"title":"Expdiff","description":"경험치 차이"},"WardsPlacedDiff":{"type":"integer","maximum":500.0,"minimum":-500.0,"title":"Wardsplaceddiff"},"WardsDestroyedDiff":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Wardsdestroyeddiff"},"AssistsDiff":{"type":"integer","maximum":100.0,"minimum":-100.0,"title":"Assistsdiff"},"DragonsDiff":{"type":"integer","maximum":1.0,"minimum":-1.0,"title":"Dragonsdiff"},"HeraldsDiff":{"type":"integer","maximum":1.0,"minimum":-1.0,"title":"Heraldsdiff"},"TowersDestroyedDiff":{"type":"integer","maximum":11.0,"minimum":-11.0,"title":"Towersdestroyeddiff"},"AvgLevelDiff":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Avgleveldiff"},"TotalMinionsKilledDiff":{"type":"integer","maximum":500.0,"minimum":-500.0,"title":"Totalminionskilleddiff"},"TotalJungleMinionsKilledDiff":{"type":"integer","maximum":300.0,"minimum":-300.0,"title":"Totaljungleminionskilleddiff"}},"additionalProperties":false,"type":"object","required":["FirstBlood","KillsDiff","GoldDiff","ExpDiff","WardsPlacedDiff","WardsDestroyedDiff","AssistsDiff","DragonsDiff","HeraldsDiff","TowersDestroyedDiff","AvgLevelDiff","TotalMinionsKilledDiff","TotalJungleMinionsKilledDiff"],"title":"PredictRequest","description":"블루 − 레드 차이 13개. 양수 = 블루 우세."},"PredictResponse":{"properties":{"label":{"type":"string","enum":["블루 승리 예측","레드 승리 예측","판단보류"],"title":"Label"},"win_prob_blue":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Win Prob Blue"},"pred":{"type":"integer","enum":[0,1],"title":"Pred"},"top_factors":{"items":{"$ref":"#/components/schemas/Factor"},"type":"array","maxItems":5,"title":"Top Factors"},"anomaly":{"anyOf":[{"$ref":"#/components/schemas/Anomaly"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"model_version":{"type":"string","title":"Model Version"}},"type":"object","required":["label","win_prob_blue","pred","top_factors","anomaly","warnings","model_version"],"title":"PredictResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"servers":[{"url":"/model-api"}]}