From 961ee7bb0b74997667e992e319af78c426e13715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= =?UTF-8?q?=D0=B0=20=D0=9F=D1=80=D0=BE=D0=BD=D0=B8=D0=BD=D0=B0?= Date: Fri, 15 May 2026 10:37:12 +0300 Subject: [PATCH] chore(max): add docker-compose.max and example MAX/agent config --- .env.example | 2 +- config/max-agents.yaml | 7 ++++- docker-compose.max.yml | 59 +++++++++++++++++++++++++++++++++++------- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index ebc56e4..27fe5dd 100644 --- a/.env.example +++ b/.env.example @@ -33,5 +33,5 @@ SURFACES_BOT_STATE_VOLUME=surfaces-bot-state # MAX Surface MAX_BOT_TOKEN=real_max_token -MAX_API_URL=https://api.max.ru/v1 +MAX_API_URL=https://platform-api.max.ru MAX_AGENT_REGISTRY_PATH=/app/config/max-agents.yaml \ No newline at end of file diff --git a/config/max-agents.yaml b/config/max-agents.yaml index 8713355..5dfc4dd 100644 --- a/config/max-agents.yaml +++ b/config/max-agents.yaml @@ -1,5 +1,10 @@ +# Пример реестра агентов для MAX (формат совпадает с matrix-agents). +# +# user_agents: +# "123456789": agent-0 +# agents: - id: agent-0 label: "Agent 0" base_url: "http://agent-proxy:7000/agent_0/" - workspace_path: "/agents/0" \ No newline at end of file + workspace_path: "/agents/0" diff --git a/docker-compose.max.yml b/docker-compose.max.yml index cd75da1..266a44e 100644 --- a/docker-compose.max.yml +++ b/docker-compose.max.yml @@ -1,24 +1,63 @@ +# Локальный MAX + platform-agent из исходников (аналог docker-compose.fullstack.yml для Matrix). +# Продакшен: только max-bot из docker-compose.prod.yml; AGENT_BASE_URL — URL агента, который поднимает команда платформы. services: max-bot: build: context: . target: development + env_file: .env environment: - - MAX_BOT_TOKEN=${MAX_BOT_TOKEN} - - MAX_API_URL=${MAX_API_URL:-https://api.max.ru/v1} - - MAX_AGENT_REGISTRY_PATH=/app/config/max-agents.yaml - - AGENT_BASE_URL=http://platform-agent:8000 - - SURFACES_WORKSPACE_DIR=/agents + MAX_BOT_TOKEN: ${MAX_BOT_TOKEN:?set MAX_BOT_TOKEN in .env} + MAX_API_URL: ${MAX_API_URL:-https://platform-api.max.ru} + MAX_AGENT_REGISTRY_PATH: ${MAX_AGENT_REGISTRY_PATH:-/app/config/max-agents.yaml} + AGENT_BASE_URL: http://platform-agent:8000 + SURFACES_WORKSPACE_DIR: ${SURFACES_WORKSPACE_DIR:-/agents} + PYTHONUNBUFFERED: "1" + depends_on: + platform-agent: + condition: service_healthy volumes: - - surfaces-agents:/agents + - agents:/agents + - ./config:/app/config:ro command: python -m adapter.max.bot + restart: unless-stopped platform-agent: - image: platform-agent:latest + build: + context: ./external/platform-agent + target: development + additional_contexts: + agent_api: ./external/platform-agent_api + env_file: .env environment: - - WORKSPACE_DIR=/workspace + PYTHONUNBUFFERED: "1" + AGENT_ID: ${AGENT_ID:-max-dev} + PROVIDER_MODEL: ${PROVIDER_MODEL:-openai/gpt-4o-mini} + PROVIDER_URL: ${PROVIDER_URL:-} + PROVIDER_API_KEY: ${PROVIDER_API_KEY:-} + COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-} volumes: - - surfaces-agents:/workspace + - ./external/platform-agent/src:/app/src + - ./external/platform-agent_api:/agent_api + - agents:/workspace + command: > + sh -lc " + mkdir -p /workspace && + chown -R agent:agent /workspace && + exec /app/.venv/bin/uvicorn src.main:app --host 0.0.0.0 --port 8000 --no-access-log + " + ports: + - "8000:8000" + healthcheck: + test: + - CMD-SHELL + - python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/openapi.json', timeout=2).read()" + interval: 60s + timeout: 5s + retries: 5 + start_period: 15s + restart: unless-stopped volumes: - surfaces-agents: \ No newline at end of file + agents: + name: ${SURFACES_SHARED_VOLUME:-surfaces-agents}