kin: KIN-OBS-030 Добавить инструментацию PM-шага в pipeline_log

This commit is contained in:
Gros Frumos 2026-03-17 18:35:47 +02:00
parent 16cd672fc4
commit b1461292ae

View file

@ -2310,3 +2310,32 @@ def test_get_pipeline_logs_not_found(client):
r = client.get("/api/pipelines/9999/logs")
assert r.status_code == 200
assert r.json() == []
def test_get_pipeline_logs_since_id_returns_pm_entries(client):
"""KIN-OBS-025: poll since_id возвращает PM-записи с role='pm' в extra_json."""
import json as _json
from core.db import init_db
from core import models
pid = _seed_pipeline(api_module.DB_PATH, task_id="PM-001")
conn = init_db(api_module.DB_PATH)
# Вставляем не-PM запись, которая будет отфильтрована
e0 = models.write_log(conn, pid, "Pipeline start")
# Вставляем PM-записи с ретроспективными ts
models.write_log(conn, pid, "PM start: task planning",
ts="2026-03-17T10:00:00", extra={"role": "pm"})
models.write_log(conn, pid, "PM done: 2 steps planned, success=True, cost=$0.0100, tokens=1000",
ts="2026-03-17T10:00:05",
extra={"role": "pm", "steps_count": 2, "tokens_used": 1000, "cost_usd": 0.01})
conn.close()
r = client.get(f"/api/pipelines/{pid}/logs?since_id={e0['id']}")
assert r.status_code == 200
logs = r.json()
assert len(logs) == 2
pm_roles = [log["extra_json"]["role"] for log in logs if log.get("extra_json")]
assert all(role == "pm" for role in pm_roles)
# Убеждаемся что PM done содержит метрики
done_log = next(log for log in logs if "PM done" in log["message"])
assert done_log["extra_json"]["steps_count"] == 2
assert done_log["extra_json"]["tokens_used"] == 1000