68 lines
1.5 KiB
Python
68 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
from typing import Any, Dict, List, Optional, Tuple
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ActionType(str, Enum):
|
|
CLICK = "click"
|
|
DOUBLE_CLICK = "double_click"
|
|
DRAG = "drag"
|
|
TYPE = "type"
|
|
SCROLL = "scroll"
|
|
|
|
|
|
class GridInitRequest(BaseModel):
|
|
width: int
|
|
height: int
|
|
screenshot_base64: str
|
|
rows: Optional[int] = None
|
|
columns: Optional[int] = None
|
|
memo: Optional[str] = None
|
|
|
|
|
|
class GridCellModel(BaseModel):
|
|
cell_id: str
|
|
row: int
|
|
column: int
|
|
bounds: Tuple[int, int, int, int]
|
|
label: Optional[str] = None
|
|
|
|
|
|
class GridDescriptor(BaseModel):
|
|
grid_id: str
|
|
rows: int
|
|
columns: int
|
|
cells: List[GridCellModel]
|
|
metadata: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class ActionPayload(BaseModel):
|
|
grid_id: str
|
|
action: ActionType
|
|
target_cell: Optional[str] = None
|
|
text: Optional[str] = None
|
|
comment: Optional[str] = None
|
|
data: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class ActionResult(BaseModel):
|
|
success: bool
|
|
detail: str
|
|
coordinates: Optional[Tuple[int, int]] = None
|
|
payload: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class GridPlanRequest(BaseModel):
|
|
preferred_label: Optional[str] = None
|
|
action: ActionType = ActionType.CLICK
|
|
text: Optional[str] = None
|
|
comment: Optional[str] = None
|
|
|
|
|
|
class GridRefreshRequest(BaseModel):
|
|
screenshot_base64: str
|
|
memo: Optional[str] = None
|