File size: 2,680 Bytes
8a395d5
 
4ab3884
8a395d5
 
 
 
 
 
 
 
 
 
 
 
 
 
4ab3884
 
8a395d5
 
 
 
 
e047873
8a395d5
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from typing import Literal, Optional, List
from pydantic import BaseModel, Field
from src.enums import PlayHand


class ModelInput(BaseModel):
    p1_rank: int = Field(gt=0, default=1, description="The rank of the 1st player")
    p2_rank: int = Field(gt=0, default=100, description="The rank of the 2nd player")
    court: Literal['Outdoor', 'Indoor'] = Field(default='Outdoor', description="The type of court")
    surface: Literal['Grass', 'Carpet', 'Clay', 'Hard'] = Field(default='Clay', description="The type of surface")
    series: Literal['Grand Slam', 'Masters 1000', 'Masters', 'Masters Cup', 'ATP500', 'ATP250', 'International Gold', 'International'] = Field(default='Grand Slam', description="The series of the tournament")
    p1_height: Optional[int] = Field(gt=0, default=180, description="The height of the 1st player in centimeters")
    p2_height: Optional[int] = Field(gt=0, default=180, description="The height of the 2nd player in centimeters")
    p1_weight: Optional[int] = Field(gt=0, default=80, description="The weight of the 1st player in kilograms")
    p2_weight: Optional[int] = Field(gt=0, default=80, description="The weight of the 2nd player in kilograms")
    p1_year_of_birth: Optional[int] = Field(gt=1950, default=1980, description="The year of birth of the 1st player")
    p2_year_of_birth: Optional[int] = Field(gt=1950, default=1980, description="The year of birth of the 2nd player")
    p1_play_hand: PlayHand = Field(default=PlayHand.RIGHT, description="The play hand of the 1st player")
    p2_play_hand: PlayHand = Field(default=PlayHand.RIGHT, description="The play hand of the 2nd player")
    p1_back_hand: int = Field(default=1, ge=1, le=2, description="The back hand of the 1st player. 1 for one-handed, 2 for two-handed")
    p2_back_hand: int = Field(default=1, ge=1, le=2, description="The back hand of the 2nd player. 1 for one-handed, 2 for two-handed")
    p1_pro_year: Optional[int] = Field(gt=1970, default=2000, description="The year the 1st player turned pro")
    p2_pro_year: Optional[int] = Field(gt=1970, default=2000, description="The year the 2nd player turned pro")
    model: Optional[str] = Field(default='LogisticRegression', description="The name of the model to use for prediction")
    alias: Optional[str] = Field(default='prod', description="The alias of the model to use for prediction")

class ModelOutput(BaseModel):
    result: int = Field(description="The prediction result. 1 if player 1 is expected to win, 0 otherwise.", json_schema_extra={"example": "1"})
    prob: List[float] = Field(description="Probability of [defeat, victory] of player 1.", json_schema_extra={"example": "[0.15, 0.85]"})