2a81f5f58f
POST /api/runs теперь планирует исполнение в фоновой asyncio.Task и
возвращает run_id (202 Accepted) — UI больше не блокируется на время
всего workflow.
Новый модуль src/run_registry.py держит in-memory LRU (лимит
RUN_REGISTRY_MAX_SIZE, default 200) с RunRecord на каждый запуск:
append-only буфер событий для replay + список подписчиков-очередей
для live tail. EventEmitter пишет в буфер и фан-аутит по очередям.
Новые endpoints:
- GET /api/runs/{run_id} снапшот состояния (частичный для running)
- GET /api/runs/{run_id}/events SSE: run_started, step_started,
step_finished, run_finished
- GET /api/scenarios список сценариев с метаданными
- GET /api/scenarios/{id} полное определение для UI-графа
- GET /api/tools проксирование MCP list_tools
mcp_workflow_runner дополнен хуком emitter'а в session_state и
обёрткой run_scenario_async, которая управляет лайфсайклом RunRecord:
queued → running → success/failed + terminal sentinel в очереди
подписчиков. На shutdown lifespan отменяет активные таски.
Все модели в schemas.py и dict-endpoints получили реалистичные
examples для /docs вместо дефолтного additionalProp1.
5.5 KiB
5.5 KiB
Prisma Platform MVP
MVP-реализация сценарного раннера на Agno AgentOS.
Текущая схема исполнения:
- сценарий хранится в
scenarios/*.json; - исполнение идет через
src/mcp_workflow_runner.py; - каждый шаг вызывает MCP инструмент через
src/mcp_client.py; - для подготовки аргументов шага используется planner-агент с моделью через
polza.ai.
Требования
- Python 3.10+
- MCP endpoint (по умолчанию
http://127.0.0.1:8081/mcp) - доступ к модели через
polza.ai(POLZA_API_KEY)
Текущая структура
prisma_platform/
├── .env
├── .env.example
├── requirements.txt
├── scenarios/
│ ├── index.json
│ └── news_source_discovery/
│ ├── v1.json
│ └── v1_planner_repair.json
└── src/
├── __init__.py
├── api_routes.py
├── agent_os.py
├── agent_runner.py
├── mcp_client.py
├── mcp_workflow_runner.py
├── observability.py
├── scenario_store.py
├── step_planner.py
├── template.py
└── schemas.py
Установка
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
Запуск
- Поднимите MCP stub (из соседнего репозитория):
cd /home/worker/projects/docker-service/mcp-stub
docker compose up --build -d
- Запустите сервер AgentOS:
cd /home/worker/projects/prisma_platform
.venv/bin/python -m src.agent_os
По умолчанию приложение доступно на http://127.0.0.1:7777.
Документация API:
http://127.0.0.1:7777/docshttp://127.0.0.1:7777/redoc
HTTP API
Запуск сценария (async)
POST /api/runs — планирует выполнение сценария и сразу возвращает run_id. Само выполнение идёт в фоне.
curl -s -X POST "http://127.0.0.1:7777/api/runs" \
-H "Content-Type: application/json" \
-d '{
"scenario_id": "news_source_discovery_v1",
"input": { "url": "https://example.com/news" }
}'
Ответ (202 Accepted):
{
"run_id": "f3d9…",
"scenario_id": "news_source_discovery_v1",
"status": "queued",
"input": { "url": "..." },
"started_at": "2026-04-24T..."
}
Снапшот состояния
GET /api/runs/{run_id} — текущее состояние: status (queued|running|success|failed), список steps со статусами (success|failed|skipped|queued), result и output_summary при завершении.
Live-прогресс (SSE)
GET /api/runs/{run_id}/events — Server-Sent Events. Поздние подписчики получают replay уже накопленных событий, затем tail до завершения.
curl -N http://127.0.0.1:7777/api/runs/$RUN_ID/events
Типы событий:
run_started—{run_id, scenario_id, started_at}step_started—{run_id, step_name, index, started_at}step_finished—{run_id, step_name, index, status, started_at, finished_at, message}run_finished—{run_id, status, finished_at, message}(терминальное, поток закрывается)
Каталоги
GET /api/scenarios— список сценариев с метаданными (scenario_id,name,description,input_schema).GET /api/scenarios/{scenario_id}— полное определение сценария (для визуализации графа в UI).GET /api/tools— MCP tool catalog:[{name, description, input_schema}](проксируется наMCP_BASE_URL).
Переменные окружения
Agent:
AGENT_ID(default:prisma-agent)AGENT_MARKDOWN(default:false)AGENT_DEBUG_MODE(default:true)AGENT_INSTRUCTIONSOLLAMA_MODEL_ID(default:gemma4:31b)OLLAMA_HOST(default:http://localhost:11435)OLLAMA_TEMPERATURE(default:0)
API runtime:
AGENT_OS_HOST(default:127.0.0.1)AGENT_OS_PORT(default:7777)
Planner:
PLANNER_ENABLED(default:false)PLANNER_REPAIR_ATTEMPTS(default:3)
Planner model (polza.ai):
POLZA_BASE_URL(default:https://api.polza.ai/v1)POLZA_MODEL_ID(default:google/gemma-4-31b-it)POLZA_API_KEY(required)POLZA_TEMPERATURE(default:0)
MCP:
MCP_BASE_URL(default:http://127.0.0.1:8081/mcp)MCP_TIMEOUT_SECONDS(default:10)
Runtime caches:
WORKFLOW_CACHE_MAX_SIZE(default:64) — лимит LRU кэша построенных workflow.RUN_REGISTRY_MAX_SIZE(default:200) — лимит LRU истории run'ов в памяти.
Phoenix tracing:
PHOENIX_TRACING_ENABLED(default:false)PHOENIX_COLLECTOR_ENDPOINT(default:http://localhost:6006)PHOENIX_PROJECT_NAME(default:prisma-platform)
Phoenix трассировка (локально)
- Включите трассировку в
.env:
PHOENIX_TRACING_ENABLED=true
PHOENIX_COLLECTOR_ENDPOINT=http://localhost:6006
PHOENIX_PROJECT_NAME=prisma-platform
- Запустите приложение:
.venv/bin/python -m src.agent_os