- Router Core with rule-based routing (1530 lines) - DevTools Backend (file ops, test execution) (393 lines) - CrewAI Orchestrator (4 workflows, 12 agents) (358 lines) - Bot Gateway (Telegram/Discord) (321 lines) - RBAC Service (role resolution) (272 lines) - Structured logging (utils/logger.py) - Docker deployment (docker-compose.yml) - Comprehensive documentation (57KB) - Test suites (41 tests, 95% coverage) - Phase 4 roadmap & ecosystem integration plans Production-ready infrastructure for DAARION microDAOs.
8.5 KiB
DAGI Router + DevTools Agent - План Дій
✅ Що вже є (станом на 15.11.2025)
-
DAGI Router - працює на
http://127.0.0.1:9101- Підтримує multi-provider routing
- Інтеграція з Ollama (local_slm)
- Інтеграція з DeepSeek (cloud)
- Базова маршрутизація через metadata
-
Ollama + qwen3:8b - локальна модель
- Модель:
qwen3:8b(5.2 GB) - Endpoint:
http://localhost:11434 - Статус: ✅ працює
- Модель:
-
Конфігурація
.env- environment variablesrouter-config.yml- повна конфігурація роутера- Підтримка DevTools Agent профілю
🎯 Наступні кроки
Крок 1: Інтеграція router-config.yml
Пріоритет: HIGH
Зараз DAGI Router використовує hardcoded логіку. Потрібно:
# main.py - додати на початок
import yaml
# Завантажити конфігурацію
with open("router-config.yml", "r") as f:
config = yaml.safe_load(f)
# Використовувати config["llm_profiles"], config["agents"], config["routing"]
Завдання:
- Додати
pyyamlв requirements.txt - Створити функцію
load_config()в main.py - Переписати
simple_routing_strategy()для використання rules з YAML - Додати підтримку
agent_idвRoutingContext - Тестування: запустити
./test-devtools.sh
Крок 2: Імплементація DevTools Agent
Пріоритет: HIGH
DevTools Agent потребує інструментів (tools):
agents:
devtools:
tools:
- fs_read # читання файлів
- fs_write # запис файлів
- run_tests # запуск pytest/jest
- git_diff # git diff
- git_commit # git commit
Варіанти реалізації:
Варіант A: Вбудовані tools в Router
# main.py
def execute_tool(tool_id: str, params: dict) -> dict:
if tool_id == "fs_read":
return {"content": Path(params["path"]).read_text()}
elif tool_id == "fs_write":
Path(params["path"]).write_text(params["content"])
return {"status": "ok"}
# ... інші tools
Варіант B: Окремий DevTools Service (рекомендується)
# Створити окремий FastAPI сервіс
mkdir -p /opt/devtools-agent
cd /opt/devtools-agent
# main.py з endpoints:
# POST /tools/fs/read
# POST /tools/fs/write
# POST /tools/tests/run
# POST /tools/git/diff
# POST /tools/git/commit
Завдання:
- Вибрати варіант реалізації (A або B)
- Імплементувати базові tools (fs_read, fs_write)
- Додати безпеку (sandboxing, path validation)
- Інтегрувати tools в LLM prompts
Крок 3: Золоті сценарії (Golden Path)
Пріоритет: MEDIUM
Протестувати 3 основні use cases:
Сценарій 1: Bugfix
# Запит до DevTools Agent
curl -X POST http://127.0.0.1:9101/route \
-d '{
"context": {"agent_id": "devtools"},
"message": "Знайди баг в файлі src/utils.py",
"metadata": {"task_type": "bugfix"}
}'
# Очікувана поведінка:
# 1. Router → local_qwen3_8b (згідно з routing rules)
# 2. LLM використовує tool "fs_read" для читання файлу
# 3. Аналізує код
# 4. Повертає опис бага + fix
Сценарій 2: Рефакторинг
# Простий рефакторинг
curl -X POST http://127.0.0.1:9101/route \
-d '{
"context": {"agent_id": "devtools"},
"message": "Рефактор функції calculate() в module.py",
"metadata": {"task_type": "refactor_simple"}
}'
# → local_qwen3_8b
Сценарій 3: Архітектурний ревʼю (складний)
# Складна задача
curl -X POST http://127.0.0.1:9101/route \
-d '{
"context": {"agent_id": "devtools"},
"message": "Проаналізуй архітектуру проекту та запропонуй покращення",
"metadata": {"task_type": "architecture_review"}
}'
# → cloud_deepseek (більш потужна модель)
Завдання:
- Запустити сценарій 1 (bugfix)
- Запустити сценарій 2 (refactor)
- Перевірити роутинг для сценарію 3 (має йти на DeepSeek якщо є API key)
- Задокументувати результати
Крок 4: Моніторинг і телеметрія
Пріоритет: LOW
Згідно з router-config.yml → telemetry enabled:
telemetry:
metrics:
- request_count
- response_time
- token_usage
- error_rate
Завдання:
- Додати middleware для збору метрик
- Логувати всі routing decisions
- Створити endpoint
/metricsдля Prometheus - Dashboard в Grafana (опціонально)
📝 Поточна архітектура
┌─────────────────┐
│ User/Client │
└────────┬────────┘
│
▼
┌─────────────────────────────┐
│ DAGI Router :9101 │
│ │
│ ┌─────────────────────┐ │
│ │ Routing Strategy │ │
│ │ (config-based) │ │
│ └──────────┬──────────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ LLM Profile Select │ │
│ │ - local_qwen3_8b │ │
│ │ - cloud_deepseek │ │
│ └──────────┬──────────┘ │
└─────────────┼───────────────┘
│
┌───────┴────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ Ollama │ │ DeepSeek │
│ qwen3:8b │ │ API │
└──────────┘ └──────────────┘
🔧 Швидкі команди
# Перевірити статус Router
curl -s http://127.0.0.1:9101/health | jq
# Перевірити Ollama моделі
ollama list
# Запустити тестування
./test-devtools.sh
# Переглянути логи Router
tail -f /tmp/dagi-router.log
# Перезапустити Router
pkill -f "uvicorn main:app.*9101"
cd /opt/dagi-router && nohup .venv/bin/uvicorn main:app --host 127.0.0.1 --port 9101 > /tmp/dagi-router.log 2>&1 &
# Перевірити конфігурацію
cat /opt/dagi-router/router-config.yml
cat /opt/dagi-router/.env
❓ Відповіді на питання
1. Що далі за планом?
Крок 1 → Інтеграція router-config.yml в код Крок 2 → Реалізація DevTools Agent з інструментами Крок 3 → Тестування золотих сценаріїв
2. DevTools Agent може працювати на qwen3:8b?
Так! Саме для цього створено профіль local_qwen3_8b з routing rule:
devtools_default_local:
when: {agent: devtools}
use_llm: local_qwen3_8b
Для складних задач (architecture_review, security_audit) можна використати DeepSeek.
3. Як підключити інші агенти?
Додати в router-config.yml:
agents:
marketing:
default_llm: cloud_deepseek
tools: [...]
routing:
- when: {agent: marketing}
use_llm: cloud_deepseek
📚 Документація
- Конфіг:
/opt/dagi-router/router-config.yml - Env:
/opt/dagi-router/.env - Тести:
/opt/dagi-router/test-devtools.sh - Код:
/opt/dagi-router/main.py - Логи:
/tmp/dagi-router.log