Files
microdao-daarion/AGENT-CABINET-BACKEND-COMPLETE.md
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

7.5 KiB
Raw Permalink Blame History

Backend для кабінетів агентів - Завершено

Дата: 2025-11-23
Статус: Готово до використання


🎉 Що реалізовано

1. Створено Agent Cabinet Service

Розташування: services/agent-cabinet-service/

Структура:

services/agent-cabinet-service/
├── app/
│   └── main.py          # FastAPI додаток з усіма endpoints
├── Dockerfile           # Docker образ
├── requirements.txt     # Python залежності
└── README.md           # Документація

Технології:

  • FastAPI для REST API
  • Pydantic для валідації даних
  • In-memory storage (можна замінити на PostgreSQL)
  • Інтеграція з DAGI Router для чату

2. API Endpoints

2.1. Health Check

GET /health

2.2. Отримати метрики агента

GET /api/agent/{agent_id}/metrics

Response:

{
  "agent_id": "yaromir",
  "agent_name": "Яромир",
  "status": "active",
  "uptime_hours": 150.5,
  "total_requests": 2500,
  "successful_requests": 2400,
  "failed_requests": 100,
  "avg_response_time_ms": 450.5,
  "last_active": "2025-11-23T12:00:00Z",
  "model": "qwen3:8b",
  "model_backend": "ollama",
  "node": "node-1",
  "is_orchestrator": true,
  "team_size": 4,
  "sub_agents": [
    {
      "id": "vozhd",
      "name": "Вождь",
      "role": "Strategic Guardian"
    }
  ]
}

2.3. Отримати CrewAI команди

GET /api/agent/{agent_id}/crews

Response:

[
  {
    "id": "crew-yaromir-1",
    "name": "Yaromir Team",
    "agents": [
      {
        "id": "vozhd",
        "name": "Вождь",
        "role": "Strategic Guardian"
      }
    ],
    "tasks": [
      {
        "id": "task-1",
        "description": "Стратегічне планування",
        "status": "completed"
      }
    ],
    "status": "active",
    "created_at": "2025-11-23T10:00:00Z"
  }
]

2.4. Стати оркестратором

POST /api/agent/{agent_id}/become-orchestrator

Response:

{
  "status": "success",
  "agent_id": "yaromir",
  "is_orchestrator": true
}

2.5. Створити CrewAI команду

POST /api/agent/{agent_id}/crews/create
Content-Type: application/json

{
  "crew_name": "My Crew",
  "agents": [
    {
      "id": "vozhd",
      "name": "Вождь",
      "role": "Strategic Guardian"
    }
  ],
  "tasks": [
    {
      "id": "task-1",
      "description": "Стратегічне планування",
      "status": "pending"
    }
  ]
}

2.6. Додати агента до команди

POST /api/agent/{agent_id}/add-sub-agent
Content-Type: application/json

{
  "id": "vozhd",
  "name": "Вождь",
  "role": "Strategic Guardian"
}

2.7. Видалити агента з команди

POST /api/agent/{agent_id}/remove-sub-agent?sub_agent_id=vozhd

2.8. Чат з агентом

POST /api/agent/{agent_id}/chat
Content-Type: application/json

{
  "message": "Hello, how are you?"
}

Response:

{
  "status": "success",
  "reply": "Hello! I'm doing well...",
  "agent_id": "yaromir"
}

3. Інтеграція з Docker Compose

Додано до docker-compose.yml:

agent-cabinet:
  build:
    context: ./services/agent-cabinet-service
    dockerfile: Dockerfile
  container_name: dagi-agent-cabinet
  ports:
    - "8898:8898"
  environment:
    - ROUTER_URL=http://router:9102
  networks:
    - dagi-network
  restart: unless-stopped

4. Оновлено Frontend

Файл: src/pages/AgentCabinetPage.tsx

Зміни:

  • Оновлено API_BASE_URL для використання нового сервісу
  • Всі запити тепер йдуть до http://localhost:8898

🚀 Як запустити

Локальний запуск

cd services/agent-cabinet-service
pip install -r requirements.txt
python -m uvicorn app.main:app --host 0.0.0.0 --port 8898 --reload

Docker Compose

docker-compose up -d agent-cabinet

Перевірка

# Health check
curl http://localhost:8898/health

# Метрики агента
curl http://localhost:8898/api/agent/yaromir/metrics

# Стати оркестратором
curl -X POST http://localhost:8898/api/agent/yaromir/become-orchestrator

📊 Архітектура

Frontend (React)
    ↓
Agent Cabinet Service (FastAPI, порт 8898)
    ↓
DAGI Router (порт 9102) ──► LLM Providers
    ↓
Memory Service (порт 8000) ──► PostgreSQL

🔧 Налаштування

Environment Variables

  • ROUTER_URL - URL DAGI Router (default: http://localhost:9102)

Frontend Environment Variables

Додати до .env:

VITE_AGENT_CABINET_URL=http://localhost:8898

📝 Наступні кроки (опціонально)

1. Інтеграція з базою даних

Замінити in-memory storage на PostgreSQL:

# Додати до requirements.txt
sqlalchemy>=2.0.0
psycopg2-binary>=2.9.0

# Створити моделі
from sqlalchemy import Column, String, Integer, Float, Boolean, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class AgentMetricsModel(Base):
    __tablename__ = "agent_metrics"
    agent_id = Column(String, primary_key=True)
    # ... інші поля

2. Реальні метрики з Prometheus

from prometheus_client import Counter, Histogram

requests_total = Counter('agent_requests_total', 'Total requests', ['agent_id'])
response_time = Histogram('agent_response_time_ms', 'Response time', ['agent_id'])

3. CrewAI інтеграція

Підключити до реального CrewAI сервісу:

CREWAI_URL = os.getenv("CREWAI_URL", "http://localhost:9010")

async def create_crew_in_crewai(crew_config):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CREWAI_URL}/crews/create",
            json=crew_config
        )
        return response.json()

4. Автоматичне створення кабінету

Додати endpoint для реєстрації нового агента:

@app.post("/api/agent/register")
async def register_agent(agent_data: AgentRegistration):
    """Автоматично створює кабінет при реєстрації агента"""
    # Створити базові метрики
    # Зберегти в базу даних
    # Повернути підтвердження

Статус

Готово:

  • FastAPI сервіс створено
  • Всі endpoints реалізовано
  • Інтеграція з Docker Compose
  • Frontend оновлено
  • Документація створена

Потрібно реалізувати (опціонально):

  • Інтеграція з PostgreSQL
  • Реальні метрики з Prometheus
  • CrewAI інтеграція
  • Автоматичне створення кабінету

Backend для кабінетів агентів готовий до використання! 🎉

URL: http://localhost:8898
Health: http://localhost:8898/health
Docs: http://localhost:8898/docs (Swagger UI)