50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
"""
|
|
===============================================================================
|
|
FILE: modules/web_api/routers/context.py
|
|
ROLE: REST API мониторинга состояния сессии и очистки памяти диалога.
|
|
===============================================================================
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
from typing import Optional
|
|
|
|
from routers.auth import get_current_user
|
|
from modules.web_api.llm.db.db_prompts import db_get_session_state, db_clear_session_state
|
|
from modules.web_api.llm.db.db_chat import db_get_chat_history, db_purge_ephemeral_messages, db_clear_chat_history
|
|
|
|
router = APIRouter(prefix="/api/v1/context", tags=["Context"])
|
|
|
|
|
|
class SessionActionRequest(BaseModel):
|
|
session_id: Optional[str] = "web_session_main"
|
|
|
|
|
|
@router.get("/state")
|
|
def api_get_context_state(session_id: str = "web_session_main", current_user = Depends(get_current_user)):
|
|
state = db_get_session_state(session_id) or {}
|
|
history = db_get_chat_history(session_id, limit=50)
|
|
|
|
ephemeral_count = sum(1 for m in history if dict(m).get("is_ephemeral") == 1)
|
|
total_messages = len(history)
|
|
|
|
return {
|
|
"session_id": session_id,
|
|
"active_state": state.get("state_type", "IDLE"),
|
|
"state_data": state.get("data_json", {}),
|
|
"total_messages": total_messages,
|
|
"ephemeral_messages": ephemeral_count
|
|
}
|
|
|
|
|
|
@router.post("/purge-ephemeral")
|
|
def api_purge_ephemeral(req: SessionActionRequest, current_user = Depends(get_current_user)):
|
|
purged = db_purge_ephemeral_messages(req.session_id)
|
|
return {"status": "success", "purged_count": purged}
|
|
|
|
|
|
@router.post("/clear-all")
|
|
def api_clear_all_context(req: SessionActionRequest, current_user = Depends(get_current_user)):
|
|
db_clear_session_state(req.session_id)
|
|
db_clear_chat_history(req.session_id)
|
|
return {"status": "success", "message": "Контекст сессии полностью очищен"} |