Add offline analysis and client event tracking to Assistent API

- Introduced `/assistent/analyze-reply` endpoint for offline extraction of patches and client predictions without VRAM.
- Added `/assistent/client-event` and `/assistent/client-events` endpoints for tracking UI interactions and retrieving event history.
- Updated Debug API documentation to reflect new endpoints and their functionalities.
- Enhanced Assistent session handling with improved client prediction logic and diagnostics.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-23 15:18:39 +03:00
co-authored by Cursor
parent 1d431e3a05
commit 322577cf9f
8 changed files with 529 additions and 34 deletions
+51 -1
View File
@@ -4,7 +4,12 @@ from __future__ import annotations
import time
from gpu_rent.debug_assistent import extract_assistent_patch
from gpu_rent.debug_assistent import (
analyze_assistent_reply,
extract_assistent_patch,
predict_client_turn,
user_asks_generate,
)
from gpu_rent import debug_assistent_session as das
@@ -33,6 +38,51 @@ def test_extract_assistent_patch_ignores_non_patch_json():
assert out["patch"] is None
def test_predict_client_turn_civitai_question_no_patch():
pred = predict_client_turn("а ты знаешь какие то промпты с civitai", None)
assert pred["user_asks_generate"] is False
assert pred["would_generate"] is False
assert pred["http_starts_generate"] is False
assert pred["generate_reason"] == "none"
def test_predict_client_turn_model_flag_without_user_phrase():
pred = predict_client_turn(
"а ты знаешь какие то промпты с civitai",
{"prompt": "a redhead", "generate": True},
persona="neutral",
)
assert pred["user_asks_generate"] is False
assert pred["model_generate"] is True
assert pred["would_generate"] is False
assert pred["generate_reason"] == "model_flag_ignored"
assert pred["persona_chip"] == "Нормальный"
def test_predict_client_turn_narisuy_with_prompt():
pred = predict_client_turn("нарисуй лису", {"prompt": "a fox"})
assert pred["user_asks_generate"] is True
assert pred["would_generate"] is True
assert pred["generate_reason"] == "user_phrase"
assert user_asks_generate("нарисуй лису") is True
assert user_asks_generate("Давай сделаем изображение рыжей") is True
assert user_asks_generate("что ты умеешь") is False
def test_analyze_assistent_reply_offline():
out = analyze_assistent_reply(
message="сгенерируй",
reply='ok\n```json\n{"prompt":"a cat","generate":true}\n```\n',
persona="leonid",
pack="ordinary",
)
assert out["ok"] is True
assert out["offline"] is True
assert out["patch"]["generate"] is True
assert out["client"]["would_generate"] is True
assert out["client"]["generate_reason"] == "user_phrase"
def test_analyze_exact_merge_fills_omitted_params():
patch = {"actions": ["generate"], "prompt": "x"}
exact = {