Унифицировать ответ /api/runs и добавить статусы шагов workflow.

Введен единый JSON-контракт для success/failed с общими полями, добавлен трекинг step status (queued/running/success/failed) и output_summary, а сборка run-ответа централизована через общий helper.
This commit is contained in:
Barabashka
2026-04-22 12:28:08 +03:00
parent 9068b7fe07
commit 93ee7aea1c
4 changed files with 271 additions and 36 deletions
+67 -2
View File
@@ -26,7 +26,6 @@ prisma_platform/
├── api_routes.py
├── agent_os.py
├── agent_runner.py
├── main.py
├── observability.py
├── scenario_store.py
├── schemas.py
@@ -87,7 +86,73 @@ curl -X POST "http://127.0.0.1:7777/api/runs" \
}'
```
Endpoint возвращает структурированный ответ со статусом `success` или `failed`.
Endpoint возвращает единый JSON-контракт. Поля одинаковые для `success` и `failed`,
а в неактуальных полях приходит `null`.
Пример успешного ответа:
```json
{
"scenario_id": "news_source_discovery_v1",
"status": "success",
"input": {
"url": "https://example.com/news"
},
"steps": [
{
"node_id": "search_news_sources",
"status": "success",
"started_at": "2026-04-22T10:00:00+00:00",
"finished_at": "2026-04-22T10:00:00+00:00",
"error": null
}
],
"output_summary": "По заглушечным данным самым ранним источником считается https://news-a.example/article-1",
"workflow_name": "news_source_discovery_v1",
"scenario_name": "News Source Discovery V1",
"result": {
"tool_name": "generate_summary",
"ok": true,
"payload": {
"input_count": 3,
"summary": "По заглушечным данным самым ранним источником считается https://news-a.example/article-1"
},
"received_at": "2026-04-22T10:00:00+00:00"
},
"error": null,
"run_id": "run_xxx",
"session_id": "session_xxx"
}
```
Пример ответа с ошибкой валидации:
```json
{
"scenario_id": "news_source_discovery_v1",
"status": "failed",
"input": {},
"steps": [
{
"node_id": "search_news_sources",
"status": "queued",
"started_at": null,
"finished_at": null,
"error": null
}
],
"output_summary": null,
"workflow_name": null,
"scenario_name": "News Source Discovery V1",
"result": null,
"error": {
"code": "invalid_input",
"message": "Input does not match scenario input_schema: ..."
},
"run_id": null,
"session_id": null
}
```
Проверка, что сервер поднят: