37 lines
916 B
Python
37 lines
916 B
Python
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field, PositiveInt
|
|
|
|
|
|
class PictureAsset(BaseModel):
|
|
id: str = Field(min_length=1)
|
|
name: str = Field(min_length=1)
|
|
image_path: str = Field(min_length=1)
|
|
|
|
|
|
class ItemGroup(BaseModel):
|
|
side: Literal["left", "right"]
|
|
picture: PictureAsset
|
|
quantity: PositiveInt
|
|
|
|
|
|
class MoreItemsComparison(BaseModel):
|
|
position: PositiveInt
|
|
left_group: ItemGroup
|
|
right_group: ItemGroup
|
|
answer_side: Literal["left", "right"]
|
|
has_answer_box: bool = True
|
|
|
|
|
|
class WhereAreMoreItemsProblem(BaseModel):
|
|
instructions: str = "Marca dónde hay más."
|
|
comparisons: list[MoreItemsComparison]
|
|
|
|
|
|
class WhereAreMoreItemsRequest(BaseModel):
|
|
available_pictures: list[PictureAsset] = Field(min_length=1)
|
|
comparison_count: PositiveInt = 3
|
|
min_quantity: PositiveInt = 1
|
|
max_quantity: PositiveInt = 10
|
|
seed: int | None = None
|