Skip to content

# Звіт про синхронізацію агентів та дашборд моніторингу

Дата: 2025-11-21
Дашборд: http://localhost:8889 (monitoring/local_monitor.py)

## 🔍 Знайдені інструменти пошуку

### ✅ Інструменти пошуку ВЖЕ встановлені

1. Web Search Tool (GREENFOOD) - Файл: `services/greenfood/crew/tools/crawl4ai_tool.py` - Інструменти: - `web_search_tool` - Пошук в інтернеті через Crawl4AI - `crawl_url_tool` - Обробка конкретного URL та витягування контенту - Використання: Parser Service (Crawl4AI) на порту 9400 - Статус: ✅ Налаштовано для GREENFOOD агентів

2. Parser Service (Crawl4AI) - Порт: 9400 - Endpoint: `/crawl` - Можливості: - Пошук через Google - Crawl конкретних URL - Витягування markdown контенту - Підтримка Playwright для JavaScript сайтів

## 🤖 Агенти в системі

### Агенти в router-config.yml (8 агентів)

1. devtools - DevTools Agent (з інструментами: fs_read, fs_write, run_tests, git_diff, git_commit)
2. microdao_orchestrator - Multi-agent orchestrator
3. greenfood - GREENFOOD Assistant (ERP для крафтових виробників)
4. helion - Helion (Energy Union platform)
5. cto - CTO Agent (оркеструє команду розробки)
6. parser - Document parsing agent
7. monitor - Monitor Agent (Architect-inspector)
8. crewai - CrewAI orchestrator

### Агенти в config/agents.yaml (1 агент)

1. tokenomics-advisor - TokenomicsAdvisor (спеціалізований агент)

### Агенти в AGENT_REGISTRY на сервері (2 агенти) ⚠️

1. daarwizz - DAARWIZZ Bot
2. helion - Helion Bot

### Проблема синхронізації

❌ Розбіжність між конфігураціями:

Джерело | Кількість агентів | Агенти
--- | --- | ---
`router-config.yml` | 8 | devtools, microdao_orchestrator, greenfood, helion, cto, parser, monitor, crewai
`config/agents.yaml` | 1 | tokenomics-advisor
`AGENT_REGISTRY` (gateway-bot) | 2 | daarwizz, helion
ВСЬОГО унікальних | 11 | devtools, microdao_orchestrator, greenfood, helion, cto, parser, monitor, crewai, tokenomics-advisor, daarwizz

Проблема: AGENT_REGISTRY містить тільки агенти з Telegram ботами, але не всі агенти з router-config.yml.

## 📊 Дашборд моніторингу (порт 8889)

### Поточний стан

Файл: `monitoring/local_monitor.py` (5978 рядків)

Що вже відображено: - ✅ Ноди (Node Registry) - ✅ Агенти (з router-config.yml та gateway-bot) - ✅ Провайдери (LLM, Orchestrator) - ✅ Сервіси та їх статус - ✅ Swapper Service метрики - ✅ Метрики нод (CPU, RAM, GPU) - ✅ Telegram боти інформація - ✅ DAO інформація

API Endpoints: - `/api/nodes` - Список нод - `/api/agents` - Список агентів - `/api/providers` - Список провайдерів - `/api/services` - Статус сервісів - `/api/swapper/status` - Статус Swapper Service - `/api/dagi/nodes/{node_id}/metrics` - Метрики ноди - `/api/dagi/nodes/{node_id}/events` - Події ноди - `/api/dagi/stack/nodes/overview` - Огляд стеку нод - `/api/dagi/stack/agents/overview` - Огляд стеку агентів

Що відсутнє: - ❌ Інтеграція з Prometheus (метрики в реальному часі) - ❌ Інтеграція з Grafana (дашборди) - ❌ Відображення інструментів пошуку - ❌ Відображення мультимодальних можливостей

## 🔧 Рекомендації

### 1. Додати інтеграцію з Prometheus

Додати до `monitoring/local_monitor.py`:

    PROMETHEUS_URL = os.getenv("PROMETHEUS_URL", "http://localhost:9090")

    async def fetch_prometheus_metrics(query: str) -> Dict:
        """Отримати метрики з Prometheus"""
        try:
            async with httpx.AsyncClient(timeout=10.0) as client:
                response = await client.get(
                    f"{PROMETHEUS_URL}/api/v1/query",
                    params={"query": query}
                )
                if response.status_code == 200:
                    return response.json()
        except Exception as e:
            logger.error(f"Prometheus query error: {e}")
        return {}

    @app.get("/api/prometheus/metrics")
    async def get_prometheus_metrics():
        """Отримати метрики з Prometheus"""
        metrics = {
            "router_requests": await fetch_prometheus_metrics("dagi_router_requests_total"),
            "gateway_requests": await fetch_prometheus_metrics("dagi_gateway_requests_total"),
            "agent_requests": await fetch_prometheus_metrics("dagi_agent_requests_total"),
            "service_health": await fetch_prometheus_metrics("up"),
        }
        return metrics

### 2. Додати інтеграцію з Grafana

Додати посилання на Grafana дашборди та embedded iframes:

    GRAFANA_URL = os.getenv("GRAFANA_URL", "http://localhost:3000")

    @app.get("/api/grafana/dashboards")
    async def get_grafana_dashboards():
        """Отримати список Grafana дашбордів"""
        # Можна використати Grafana API для отримання дашбордів
        return {
            "url": f"{GRAFANA_URL}",
            "dashboards": [
                {"id": "router", "name": "Router Metrics", "url": f"{GRAFANA_URL}/d/router"},
                {"id": "gateway", "name": "Gateway Metrics", "url": f"{GRAFANA_URL}/d/gateway"},
            ]
        }

### 3. Синхронізувати всіх агентів

Проблема: AGENT_REGISTRY містить тільки агенти з Telegram ботами.

Рішення: Додати всіх агентів з router-config.yml до AGENT_REGISTRY (навіть якщо вони не мають Telegram ботів):

    # Додати до gateway-bot/http_api.py
    # Завантажити всіх агентів з router-config.yml
    if ROUTER_CONFIG_PATH.exists():
        with open(ROUTER_CONFIG_PATH, "r") as f:
            router_config = yaml.safe_load(f)
            for agent_id, agent_config in router_config.get("agents", {}).items():
                if agent_id not in AGENT_REGISTRY:
                    # Створити конфігурацію для агентів без Telegram
                    config = AgentConfig(
                        agent_id=agent_id,
                        name=agent_config.get("description", agent_id),
                        prompt_path="",  # Немає окремого файлу
                        telegram_token_env="",  # Немає Telegram бота
                        default_prompt=agent_config.get("system_prompt", ""),
                        system_prompt=agent_config.get("system_prompt", "")
                    )
                    AGENT_REGISTRY[agent_id] = config

### 4. Відобразити інструменти пошуку на дашборді

Додати секцію про інструменти:

    @app.get("/api/tools")
    async def get_tools():
        """Отримати список інструментів"""
        tools = []

        # Інструменти пошуку
        tools.append({
            "id": "web_search_tool",
            "name": "Web Search via Crawl4AI",
            "agent": "greenfood",
            "type": "search",
            "description": "Пошук в інтернеті через Crawl4AI"
        })

        # Інструменти DevTools
        for tool_id in ["fs_read", "fs_write", "run_tests", "git_diff", "git_commit"]:
            tools.append({
                "id": tool_id,
                "name": tool_id,
                "agent": "devtools",
                "type": "builtin",
                "description": f"DevTools tool: {tool_id}"
            })

        return {"tools": tools}

## 📝 Підсумок

### ✅ Що працює

- Дашборд на порту 8889 працює
- Інструменти пошуку встановлені (web_search_tool для greenfood)
- Мультимодальність працює (фото, голос, документи)
- Дашборд відображає ноди, агенти, сервіси

### ⚠️ Що потрібно виправити

- Синхронізувати всіх агентів між router-config.yml та AGENT_REGISTRY
- Додати інтеграцію з Prometheus до дашборду
- Додати інтеграцію з Grafana до дашборду
- Відобразити інструменти пошуку на дашборді
- Додати інструменти пошуку для інших агентів (не тільки greenfood)

### 🔧 Наступні кроки

1. Додати Prometheus/Grafana інтеграцію до дашборду
2. Синхронізувати всіх агентів
3. Додати інструменти пошуку для daarwizz та helion
4. Оновити документацію

Останнє оновлення: 2025-11-21
Статус: ⚠️ Потребує синхронізації та інтеграції