Spaces:
Running
Running
| from __future__ import annotations | |
| from typing import List, Optional | |
| from datetime import datetime, timezone | |
| from pydantic import BaseModel, Field | |
| # ====== Chat history ====== | |
| class Message(BaseModel): | |
| role: str = "user" | |
| content: str = "" | |
| ts: Optional[str] = None | |
| class ChatRequest(BaseModel): | |
| message: str = "" # 🚀 Beri default string kosong agar tidak 422 saat di-ping payload kosong | |
| history: List[Message] = Field(default_factory=list) | |
| username: Optional[str] = "Baka" | |
| # ====== Device register ====== | |
| class RegisterRequest(BaseModel): | |
| fcm_token: str | |
| # ====== Scheduler ====== | |
| class ScheduleRequest(BaseModel): | |
| task: str | |
| scheduled_time: str | |
| user_id: str | |
| def remind_at_utc(self) -> datetime: | |
| try: | |
| clean_ts = self.scheduled_time.replace("Z", "+00:00") | |
| dt = datetime.fromisoformat(clean_ts) | |
| if dt.tzinfo is None: | |
| return dt.replace(tzinfo=timezone.utc) | |
| return dt.astimezone(timezone.utc) | |
| except ValueError as e: | |
| raise ValueError( | |
| f"Format scheduled_time tidak valid: {self.scheduled_time}" | |
| ) from e |