51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from __future__ import annotations
|
|
from pathlib import Path
|
|
from fastapi import APIRouter, Depends, Form, HTTPException, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
from chat.eventlog.log import append_event
|
|
from chat.eventlog.projector import project
|
|
from chat.state.entities import get_you
|
|
from chat.web.bots import get_conn
|
|
|
|
TEMPLATES = Jinja2Templates(directory=str(Path(__file__).resolve().parent.parent / "templates"))
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/settings", response_class=HTMLResponse)
|
|
async def settings_get(request: Request, conn=Depends(get_conn)):
|
|
you = get_you(conn) or {"name": "", "pronouns": "", "persona": ""}
|
|
return TEMPLATES.TemplateResponse(
|
|
request,
|
|
"settings.html",
|
|
{"values": you, "saved": False, "active_nav": "settings"},
|
|
)
|
|
|
|
|
|
@router.post("/settings", response_class=HTMLResponse)
|
|
async def settings_post(
|
|
request: Request,
|
|
name: str = Form(""),
|
|
pronouns: str = Form(""),
|
|
persona: str = Form(""),
|
|
conn=Depends(get_conn),
|
|
):
|
|
if not name.strip():
|
|
raise HTTPException(status_code=400, detail="name is required")
|
|
|
|
payload = {
|
|
"name": name.strip(),
|
|
"pronouns": pronouns.strip(),
|
|
"persona": persona.strip(),
|
|
}
|
|
append_event(conn, kind="you_authored", payload=payload)
|
|
project(conn)
|
|
|
|
return TEMPLATES.TemplateResponse(
|
|
request,
|
|
"settings.html",
|
|
{"values": payload, "saved": True, "active_nav": "settings"},
|
|
)
|