| from typing import Optional | |
| from pydantic import BaseModel, model_validator | |
| # Action Input Models | |
| class SearchGoogleAction(BaseModel): | |
| query: str | |
| class GoToUrlAction(BaseModel): | |
| url: str | |
| class ClickElementAction(BaseModel): | |
| index: int | |
| xpath: Optional[str] = None | |
| class InputTextAction(BaseModel): | |
| index: int | |
| text: str | |
| xpath: Optional[str] = None | |
| class DoneAction(BaseModel): | |
| text: str | |
| success: bool | |
| class SwitchTabAction(BaseModel): | |
| page_id: int | |
| class OpenTabAction(BaseModel): | |
| url: str | |
| class ScrollAction(BaseModel): | |
| amount: Optional[int] = None # The number of pixels to scroll. If None, scroll down/up one page | |
| class SendKeysAction(BaseModel): | |
| keys: str | |
| class ExtractPageContentAction(BaseModel): | |
| value: str | |
| class NoParamsAction(BaseModel): | |
| """ | |
| Accepts absolutely anything in the incoming data | |
| and discards it, so the final parsed model is empty. | |
| """ | |
| def ignore_all_inputs(cls, values): | |
| # No matter what the user sends, discard it and return empty. | |
| return {} | |
| class Config: | |
| # If you want to silently allow unknown fields at top-level, | |
| # set extra = 'allow' as well: | |
| extra = 'allow' | |