feat: add Pydantic API models with envelope helpers
This commit is contained in:
@@ -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)
|
||||||
Reference in New Issue
Block a user