Fixed SD Promt
This commit is contained in:
+39
-2
@@ -3,6 +3,7 @@ from services.memory import (
|
||||
get_all_sessions,
|
||||
get_session,
|
||||
get_or_create_session,
|
||||
get_history,
|
||||
delete_session,
|
||||
update_session_title,
|
||||
update_session_persona,
|
||||
@@ -17,7 +18,10 @@ from services.memory import (
|
||||
get_last_message_preview,
|
||||
fork_session,
|
||||
)
|
||||
from models.schemas import ForkSessionRequest
|
||||
from models.schemas import ForkSessionRequest, RebindPersonaRequest
|
||||
from services.chat_prompt import get_system_prompt
|
||||
from services.memory import rebind_session_persona
|
||||
from services.personas import get_persona
|
||||
|
||||
router = APIRouter(prefix="/sessions", tags=["sessions"])
|
||||
|
||||
@@ -46,9 +50,42 @@ async def get_session_route(session_id: str):
|
||||
return s
|
||||
|
||||
|
||||
@router.post("/{session_id}/rebind-persona")
|
||||
async def rebind_persona(session_id: str, body: RebindPersonaRequest):
|
||||
session = await get_session(session_id)
|
||||
if not session:
|
||||
raise HTTPException(status_code=404, detail="Сессия не найдена")
|
||||
persona = await get_persona(body.persona_id)
|
||||
if not persona:
|
||||
raise HTTPException(status_code=400, detail="Персонаж не найден")
|
||||
|
||||
hist = [] if body.clear_history else await get_history(session_id)
|
||||
static = await get_system_prompt(body.persona_id, hist, "")
|
||||
first_mes = (persona.get("first_mes") or "").strip() if body.clear_history else None
|
||||
|
||||
try:
|
||||
await rebind_session_persona(
|
||||
session_id,
|
||||
body.persona_id,
|
||||
clear_history=body.clear_history,
|
||||
static_prompt=static,
|
||||
first_mes=first_mes or None,
|
||||
)
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=404, detail=str(e))
|
||||
|
||||
return {
|
||||
"persona_id": body.persona_id,
|
||||
"persona_name": persona.get("name", body.persona_id),
|
||||
"system_prompt_preview": static[:500],
|
||||
"clear_history": body.clear_history,
|
||||
}
|
||||
|
||||
|
||||
@router.patch("/{session_id}")
|
||||
async def patch_session(session_id: str, data: dict):
|
||||
await get_or_create_session(session_id, data.get("persona_id", "default"))
|
||||
create_pid = data.get("persona_id") if "persona_id" in data else None
|
||||
await get_or_create_session(session_id, create_pid)
|
||||
if "title" in data:
|
||||
await update_session_title(session_id, data["title"])
|
||||
if "persona_id" in data:
|
||||
|
||||
Reference in New Issue
Block a user