mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 17:57:37 +02:00
Backend : - db.py : SQLite (sessions + messages), schéma et CRUD - routes/sessions.py : créer/lister/ouvrir/renommer/supprimer une session - routes/chat.py : POST /api/chat, relais token par token depuis Ollama (SSE), persistance des messages, titrage auto de la session au 1er message - main.py : lifespan -> init_db, montage des nouvelles routes Frontend : - api/client.ts : APIs sessions + streamChat (parsing SSE event/data) - store : sessions, messages, état de streaming, envoi optimiste - ChatPanel : fil de conversation réel, bulles user/agent, curseur de frappe - LeftPanel : historique réel (ouvrir/supprimer, horodatage relatif) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SVay7z3y7q2gEe54ByAE6N
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
"""Routes de gestion des sessions de conversation."""
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from .. import db
|
|
|
|
router = APIRouter(prefix="/api/sessions", tags=["sessions"])
|
|
|
|
|
|
class CreateSession(BaseModel):
|
|
title: str = "Nouvelle session"
|
|
model: str | None = None
|
|
|
|
|
|
class RenameSession(BaseModel):
|
|
title: str
|
|
|
|
|
|
@router.get("")
|
|
async def get_sessions() -> dict:
|
|
return {"sessions": db.list_sessions()}
|
|
|
|
|
|
@router.post("")
|
|
async def post_session(req: CreateSession) -> dict:
|
|
return db.create_session(req.title, req.model)
|
|
|
|
|
|
@router.get("/{sid}")
|
|
async def get_one(sid: str) -> dict:
|
|
session = db.get_session(sid)
|
|
if not session:
|
|
raise HTTPException(404, "session introuvable")
|
|
return {"session": session, "messages": db.list_messages(sid)}
|
|
|
|
|
|
@router.patch("/{sid}")
|
|
async def patch_session(sid: str, req: RenameSession) -> dict:
|
|
if not db.get_session(sid):
|
|
raise HTTPException(404, "session introuvable")
|
|
db.rename_session(sid, req.title)
|
|
return {"ok": True}
|
|
|
|
|
|
@router.delete("/{sid}")
|
|
async def remove_session(sid: str) -> dict:
|
|
db.delete_session(sid)
|
|
return {"ok": True}
|