diff --git a/src/backend/models/api.py b/src/backend/models/api.py new file mode 100644 index 0000000..cdca9c9 --- /dev/null +++ b/src/backend/models/api.py @@ -0,0 +1,59 @@ +from pydantic import BaseModel, field_validator +from typing import Any + + +class ApiError(BaseModel): + code: str + message: str + + +class ApiResponse(BaseModel): + success: bool + data: Any | None = None + error: ApiError | None = None + + +def ok(data: Any) -> dict: + return {"success": True, "data": data, "error": None} + + +def fail(code: str, message: str) -> dict: + return { + "success": False, + "data": None, + "error": {"code": code, "message": message}, + } + + +def _validate_model(v: str | None) -> str | None: + if v is not None and not v.startswith("claude-"): + raise ValueError("Model must start with 'claude-' or be null") + return v + + +class TopicCreate(BaseModel): + name: str + system_prompt: str + summary: str = "" + model: str | None = None + + validate_model = field_validator("model")(_validate_model) + + +class TopicUpdate(BaseModel): + name: str | None = None + system_prompt: str | None = None + summary: str | None = None + model: str | None = None + + validate_model = field_validator("model")(_validate_model) + + +class RequestCreate(BaseModel): + prompt: str + topic_id: str + session_id: str | None = None + model: str | None = None + summarize: bool = False + + validate_model = field_validator("model")(_validate_model)