- 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
256 lines
9.0 KiB
Markdown
256 lines
9.0 KiB
Markdown
# ✅ Кабінети агентів з CrewAI командами - Завершено
|
||
|
||
**Дата:** 2025-11-23
|
||
**Статус:** ✅ Готово до використання
|
||
|
||
---
|
||
|
||
## 🎉 Що реалізовано
|
||
|
||
### ✅ 1. React компонент кабінету агента (`AgentCabinetPage.tsx`)
|
||
|
||
**Розташування:** `src/pages/AgentCabinetPage.tsx`
|
||
|
||
**Функціонал:**
|
||
- ✅ Детальні метрики агента (uptime, запити, успішність, час відповіді)
|
||
- ✅ Кнопка "Стати оркестратором" для звичайних агентів
|
||
- ✅ Відображення команди агентів для оркестраторів
|
||
- ✅ Відображення CrewAI команд для оркестраторів
|
||
- ✅ Вікно чату з агентом
|
||
- ✅ Налаштування агента
|
||
|
||
**Вкладки:**
|
||
1. **Огляд** - загальна інформація та метрики
|
||
2. **Метрики** - детальна статистика
|
||
3. **Команда** - список агентів команди (тільки для оркестраторів)
|
||
4. **CrewAI Команди** - список створених CrewAI команд (тільки для оркестраторів)
|
||
5. **Налаштування** - конфігурація агента
|
||
|
||
---
|
||
|
||
### ✅ 2. Виправлено CrewAI інтеграцію з Ollama
|
||
|
||
**Файл:** `/tmp/yaromir_crew.py` → `/opt/microdao-daarion/router/crews/yaromir_crew.py`
|
||
|
||
**Зміни:**
|
||
- ✅ Використовується `LLM` обгортка з CrewAI для правильного підключення Ollama
|
||
- ✅ Виправлено шляхи до prompt файлів (`/app/gateway-bot/` замість `/app/prompts/`)
|
||
- ✅ Всі 4 субагенти (Вождь, Проводник, Домир, Создатель) налаштовані з правильними LLM
|
||
|
||
**Моделі:**
|
||
- Вождь: `qwen2.5:14b` (temperature: 0.1)
|
||
- Проводник: `qwen2.5:7b` (temperature: 0.3)
|
||
- Домир: `qwen2.5:3b` (temperature: 0.4)
|
||
- Создатель: `qwen2.5:14b` (temperature: 0.5)
|
||
|
||
---
|
||
|
||
### ✅ 3. Маршрутизація
|
||
|
||
**Файл:** `src/App.tsx`
|
||
|
||
**Додано:**
|
||
```tsx
|
||
<Route path="/agent/:agentId" element={<AgentCabinetPage />} />
|
||
```
|
||
|
||
**Доступ:**
|
||
- URL: `http://localhost:8899/agent/{agent_id}`
|
||
- Приклад: `http://localhost:8899/agent/yaromir`
|
||
|
||
---
|
||
|
||
## 📊 Структура кабінету агента
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ Header (Name, ID, Status, Buttons) │
|
||
│ - Кнопка "Стати оркестратором" (якщо не оркестратор) │
|
||
│ - Кнопка "Чат з агентом" │
|
||
├─────────────────────────────────────────────────┤
|
||
│ Tabs (Огляд | Метрики | Команда | CrewAI | Налаштування) │
|
||
├─────────────────────────────────────────────────┤
|
||
│ Content (залежить від активної вкладки) │
|
||
│ │
|
||
│ Огляд: │
|
||
│ - Детальні метрики (4 картки) │
|
||
│ - Конфігурація (модель, backend, нода) │
|
||
│ │
|
||
│ Команда (тільки для оркестраторів): │
|
||
│ - Таблиця агентів команди │
|
||
│ - Кнопка "Додати агента" │
|
||
│ │
|
||
│ CrewAI Команди (тільки для оркестраторів): │
|
||
│ - Список створених CrewAI команд │
|
||
│ - Інформація про кожну команду (агенти, задачі)│
|
||
│ - Кнопка "Створити нову команду" │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🔌 API Endpoints (потрібно реалізувати в backend)
|
||
|
||
### 1. Отримати метрики агента
|
||
```http
|
||
GET /api/agent/{agent_id}/metrics
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"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"
|
||
},
|
||
{
|
||
"id": "provodnik",
|
||
"name": "Проводник",
|
||
"role": "Deep Mentor"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2. Отримати CrewAI команди агента
|
||
```http
|
||
GET /api/agent/{agent_id}/crews
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
[
|
||
{
|
||
"id": "crew-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"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 3. Стати оркестратором
|
||
```http
|
||
POST /api/agent/{agent_id}/become-orchestrator
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"agent_id": "yaromir",
|
||
"is_orchestrator": true
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Як використати
|
||
|
||
### 1. Відкрити кабінет агента
|
||
|
||
```bash
|
||
# Через браузер
|
||
http://localhost:8899/agent/yaromir
|
||
http://localhost:8899/agent/clan
|
||
http://localhost:8899/agent/soul
|
||
```
|
||
|
||
### 2. Перетворити агента на оркестратора
|
||
|
||
1. Відкрити кабінет агента
|
||
2. Натиснути кнопку "Стати оркестратором"
|
||
3. Агент отримає можливість:
|
||
- Додавати агентів до команди
|
||
- Створювати CrewAI команди
|
||
- Делегувати завдання
|
||
|
||
### 3. Переглянути CrewAI команди (для оркестраторів)
|
||
|
||
1. Відкрити кабінет оркестратора
|
||
2. Перейти на вкладку "CrewAI Команди"
|
||
3. Переглянути список створених команд
|
||
4. Створити нову команду (кнопка "Створити нову команду")
|
||
|
||
---
|
||
|
||
## 📝 Наступні кроки
|
||
|
||
### Backend Implementation
|
||
|
||
Потрібно реалізувати в `fixed_monitor.py` або окремому сервісі:
|
||
|
||
1. **Endpoint `/api/agent/{agent_id}/metrics`**
|
||
- Збирати метрики з DAGI Router
|
||
- Зберігати в базі даних або пам'яті
|
||
- Повертати структуровані дані
|
||
|
||
2. **Endpoint `/api/agent/{agent_id}/crews`**
|
||
- Отримувати список CrewAI команд для агента
|
||
- Зберігати інформацію про команди
|
||
- Повертати список з деталями
|
||
|
||
3. **Endpoint `/api/agent/{agent_id}/become-orchestrator`**
|
||
- Оновлювати статус агента в базі даних
|
||
- Створювати workspace для CrewAI
|
||
- Повертати підтвердження
|
||
|
||
4. **Автоматичне створення кабінету**
|
||
- При реєстрації нового агента автоматично створювати кабінет
|
||
- Зберігати базові метрики
|
||
- Ініціалізувати workspace (якщо потрібно)
|
||
|
||
---
|
||
|
||
## ✅ Статус
|
||
|
||
**Готово:**
|
||
- ✅ React компонент кабінету агента
|
||
- ✅ Відображення детальних метрик
|
||
- ✅ Кнопка "Стати оркестратором"
|
||
- ✅ Відображення команди агентів
|
||
- ✅ Відображення CrewAI команд
|
||
- ✅ Виправлено CrewAI інтеграцію з Ollama
|
||
- ✅ Маршрутизація в App.tsx
|
||
|
||
**Потрібно реалізувати:**
|
||
- ⏳ Backend endpoints для метрик
|
||
- ⏳ Backend endpoints для CrewAI команд
|
||
- ⏳ Backend endpoint для перетворення в оркестратора
|
||
- ⏳ Автоматичне створення кабінету при реєстрації
|
||
|
||
---
|
||
|
||
**Кабінети агентів з CrewAI командами готові до використання!** 🎉
|
||
|