Files
Apple ef3473db21 snapshot: NODE1 production state 2026-02-09
Complete snapshot of /opt/microdao-daarion/ from NODE1 (144.76.224.179).
This represents the actual running production code that has diverged
significantly from the previous main branch.

Key changes from old main:
- Gateway (http_api.py): expanded from ~40KB to 164KB with full agent support
- Router: new /v1/agents/{id}/infer endpoint with vision + DeepSeek routing
- Behavior Policy: SOWA v2.2 (3-level: FULL/ACK/SILENT)
- Agent Registry: config/agent_registry.yml as single source of truth
- 13 agents configured (was 3)
- Memory service integration
- CrewAI teams and roles

Excluded from snapshot: venv/, .env, data/, backups, .tgz archives

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 08:46:46 -08:00

1362 lines
41 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://IvanTytar.github.io/microdao-daarion/agents_checklist/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.18">
<title>Чеклист для повноцінної роботи агентів DAARION - DAARION Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.66ac8b77.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#daarion" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="DAARION Documentation" class="md-header__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
DAARION Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Чеклист для повноцінної роботи агентів DAARION
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="DAARION Documentation" class="md-nav__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
DAARION Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../public/" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../public/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../public/architecture-overview/" class="md-nav__link">
<span class="md-ellipsis">
Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../public/daiS_daos_overview/" class="md-nav__link">
<span class="md-ellipsis">
DAIS & DAOS
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<span class="md-ellipsis">
Internal
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Internal
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_1" >
<label class="md-nav__link" for="__nav_5_1" id="__nav_5_1_label" tabindex="0">
<span class="md-ellipsis">
Infra
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1">
<span class="md-nav__icon md-icon"></span>
Infra
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../internal/infra/INFRA_AUTOMATION_PACK_V1/" class="md-nav__link">
<span class="md-ellipsis">
Infra Automation Pack v1
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internal/infra/monitoring_overview/" class="md-nav__link">
<span class="md-ellipsis">
Monitoring Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internal/infra/nodes_registry_v0/" class="md-nav__link">
<span class="md-ellipsis">
Nodes Registry v0
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-ellipsis">
Specs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
Specs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../internal/specs/matrix_presence_aggregator/" class="md-nav__link">
<span class="md-ellipsis">
Matrix Presence Aggregator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internal/specs/city_map_spec/" class="md-nav__link">
<span class="md-ellipsis">
City Map Spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internal/specs/node_join_protocol_draft/" class="md-nav__link">
<span class="md-ellipsis">
Node Join Protocol (Draft)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
<span class="md-ellipsis">
✅ Що вже працює
</span>
</a>
<nav class="md-nav" aria-label="✅ Що вже працює">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
<span class="md-ellipsis">
1. Інфраструктура
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-llm-infrastructure" class="md-nav__link">
<span class="md-ellipsis">
2. LLM Infrastructure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-telegram" class="md-nav__link">
<span class="md-ellipsis">
3. Агенти (Telegram боти)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-aiml" class="md-nav__link">
<span class="md-ellipsis">
4. Сервіси AI/ML
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5" class="md-nav__link">
<span class="md-ellipsis">
5. Інтеграції
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
<span class="md-ellipsis">
🔧 Що потрібно доопрацювати
</span>
</a>
<nav class="md-nav" aria-label="🔧 Що потрібно доопрацювати">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-voice-processing-stttts" class="md-nav__link">
<span class="md-ellipsis">
1. Voice Processing (STT/TTS)
</span>
</a>
<nav class="md-nav" aria-label="1. Voice Processing (STT/TTS)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#stt-speech-to-text" class="md-nav__link">
<span class="md-ellipsis">
STT (Speech-to-Text)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tts-text-to-speech" class="md-nav__link">
<span class="md-ellipsis">
TTS (Text-to-Speech)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#2-document-processing-parser-rag" class="md-nav__link">
<span class="md-ellipsis">
2. Document Processing (Parser + RAG)
</span>
</a>
<nav class="md-nav" aria-label="2. Document Processing (Parser + RAG)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#parser-service" class="md-nav__link">
<span class="md-ellipsis">
Parser Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rag-service" class="md-nav__link">
<span class="md-ellipsis">
RAG Service
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#3-crewai-workflows" class="md-nav__link">
<span class="md-ellipsis">
3. CrewAI Workflows
</span>
</a>
<nav class="md-nav" aria-label="3. CrewAI Workflows">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#greenfood-crew-13-agents" class="md-nav__link">
<span class="md-ellipsis">
GREENFOOD Crew (13 agents)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#crews" class="md-nav__link">
<span class="md-ellipsis">
Інші Crews
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#4-memory-context-management" class="md-nav__link">
<span class="md-ellipsis">
4. Memory &amp; Context Management
</span>
</a>
<nav class="md-nav" aria-label="4. Memory & Context Management">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#memory-service" class="md-nav__link">
<span class="md-ellipsis">
Memory Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#session-management" class="md-nav__link">
<span class="md-ellipsis">
Session Management
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#5-monitoring-observability" class="md-nav__link">
<span class="md-ellipsis">
5. Monitoring &amp; Observability
</span>
</a>
<nav class="md-nav" aria-label="5. Monitoring & Observability">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prometheus-metrics" class="md-nav__link">
<span class="md-ellipsis">
Prometheus Metrics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#grafana-dashboards" class="md-nav__link">
<span class="md-ellipsis">
Grafana Dashboards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#logging" class="md-nav__link">
<span class="md-ellipsis">
Logging
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#6-rbac" class="md-nav__link">
<span class="md-ellipsis">
6. Безпека та RBAC
</span>
</a>
<nav class="md-nav" aria-label="6. Безпека та RBAC">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#authentication" class="md-nav__link">
<span class="md-ellipsis">
Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#rbac" class="md-nav__link">
<span class="md-ellipsis">
RBAC
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#7-performance-scalability" class="md-nav__link">
<span class="md-ellipsis">
7. Performance &amp; Scalability
</span>
</a>
<nav class="md-nav" aria-label="7. Performance & Scalability">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#llm-optimization" class="md-nav__link">
<span class="md-ellipsis">
LLM Optimization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#message-queue" class="md-nav__link">
<span class="md-ellipsis">
Message Queue
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#8" class="md-nav__link">
<span class="md-ellipsis">
8. Тестування
</span>
</a>
<nav class="md-nav" aria-label="8. Тестування">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#unit-tests" class="md-nav__link">
<span class="md-ellipsis">
Unit Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#integration-tests" class="md-nav__link">
<span class="md-ellipsis">
Integration Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#load-testing" class="md-nav__link">
<span class="md-ellipsis">
Load Testing
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
<span class="md-ellipsis">
🎯 Пріоритизація (що робити далі)
</span>
</a>
<nav class="md-nav" aria-label="🎯 Пріоритизація (що робити далі)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-2" class="md-nav__link">
<span class="md-ellipsis">
🔴 Критично (наступні 1-2 дні)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#1-2_1" class="md-nav__link">
<span class="md-ellipsis">
🟡 Важливо (наступні 1-2 тижні)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#1-2_2" class="md-nav__link">
<span class="md-ellipsis">
🟢 Потім (1-2 місяці)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
<span class="md-ellipsis">
📊 Поточний статус
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="daarion">Чеклист для повноцінної роботи агентів DAARION<a class="headerlink" href="#daarion" title="Permanent link">&para;</a></h1>
<p><strong>Дата створення</strong>: 2025-11-18<br />
<strong>Статус</strong>: У розробці</p>
<hr />
<h2 id="_1">✅ Що вже працює<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<h3 id="1">1. Інфраструктура<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>DAGI Router</strong> (9102) - маршрутизація до агентів та провайдерів</li>
<li><strong>NATS</strong> (4222) - event streaming</li>
<li><strong>PostgreSQL</strong> (5432) - основна БД</li>
<li><strong>Telegram Gateway</strong> (8000) - Long Polling для 3 ботів</li>
<li><strong>Local Telegram Bot API</strong> (8081) - зменшення латентності</li>
<li><strong>Prometheus</strong> (9090) - збір метрик</li>
<li><strong>Grafana</strong> (3000) - візуалізація</li>
</ul>
<h3 id="2-llm-infrastructure">2. LLM Infrastructure<a class="headerlink" href="#2-llm-infrastructure" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>Ollama</strong> - локальна генерація (Qwen3:8b, Qwen2.5:14b)</li>
<li><strong>OpenRouter</strong> - fallback (DeepSeek-Chat)</li>
<li><strong>LLM Provider</strong> в Router - вибір оптимального провайдера</li>
</ul>
<h3 id="3-telegram">3. Агенти (Telegram боти)<a class="headerlink" href="#3-telegram" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>DAARWIZZ</strong> (<code>@DAARWIZZBot</code>) - microDAO оркестратор</li>
<li><strong>Helion</strong> (<code>@energyunionBot</code>) - Energy Union</li>
<li><strong>GREENFOOD</strong> (<code>@greenfoodliveBot</code>) - ERP для виробників (13 sub-agents)</li>
</ul>
<h3 id="4-aiml">4. Сервіси AI/ML<a class="headerlink" href="#4-aiml" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>CrewAI</strong> (9010) - multi-agent workflows</li>
<li><strong>Vision Encoder</strong> (8001) - розпізнавання зображень</li>
<li><strong>DevTools</strong> (8008) - інструменти розробника</li>
<li>⚠️ <strong>Parser</strong> (9400) - OCR/PDF (працює, unhealthy через curl)</li>
<li>⚠️ <strong>STT</strong> (9000) - Speech-to-Text (працює, unhealthy)</li>
<li>⚠️ <strong>TTS</strong> (9101) - Text-to-Speech (працює, unhealthy)</li>
<li>⚠️ <strong>Qdrant</strong> (6333) - Vector DB (працює, unhealthy)</li>
<li>⏸️ <strong>RAG Service</strong> - зупинено (потрібен рефакторинг Haystack 2.x)</li>
</ul>
<h3 id="5">5. Інтеграції<a class="headerlink" href="#5" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>Memory Service</strong> - зберігання контексту діалогів</li>
<li><strong>RBAC Service</strong> (9200) - управління правами</li>
<li><strong>Gateway Service</strong> (9300) - HTTP API</li>
</ul>
<hr />
<h2 id="_2">🔧 Що потрібно доопрацювати<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<h3 id="1-voice-processing-stttts">1. Voice Processing (STT/TTS)<a class="headerlink" href="#1-voice-processing-stttts" title="Permanent link">&para;</a></h3>
<h4 id="stt-speech-to-text">STT (Speech-to-Text)<a class="headerlink" href="#stt-speech-to-text" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: Сервіс працює, але потрібна інтеграція</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Перевірити чи <code>telegram-gateway</code> викликає STT для голосових повідомлень</li>
<li>[ ] Додати логування STT викликів</li>
<li>[ ] Протестувати українською та англійською</li>
<li>[ ] Оптимізувати модель Whisper (tiny/base для швидкості)</li>
<li><strong>Пріоритет</strong>: 🔴 Високий (для голосової взаємодії)</li>
</ul>
<h4 id="tts-text-to-speech">TTS (Text-to-Speech)<a class="headerlink" href="#tts-text-to-speech" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: Сервіс працює, але не інтегровано</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Додати TTS endpoint в <code>telegram-gateway</code></li>
<li>[ ] Опція для користувачів: отримувати відповіді голосом</li>
<li>[ ] Підтримка української/англійської мов</li>
<li><strong>Пріоритет</strong>: 🟡 Середній (nice-to-have)</li>
</ul>
<hr />
<h3 id="2-document-processing-parser-rag">2. Document Processing (Parser + RAG)<a class="headerlink" href="#2-document-processing-parser-rag" title="Permanent link">&para;</a></h3>
<h4 id="parser-service">Parser Service<a class="headerlink" href="#parser-service" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ Працює (але unhealthy через відсутність <code>curl</code>)</li>
<li><strong>Що зробити</strong>:</li>
<li>[x] Додати curl в Dockerfile</li>
<li>[ ] Rebuild контейнера</li>
<li>[ ] Перевірити парсинг PDF через Telegram</li>
<li><strong>Пріоритет</strong>: 🟢 Низький (технічна проблема, не функціональна)</li>
</ul>
<h4 id="rag-service">RAG Service<a class="headerlink" href="#rag-service" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ⏸️ Зупинено (проблеми з Haystack 2.x API)</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Рефакторинг <code>ingest_pipeline.py</code> для Haystack 2.x</li>
<li>[ ] Виправити <code>async/await</code> синтаксис</li>
<li>[ ] Додати тести</li>
<li>[ ] Перезапустити сервіс</li>
<li><strong>Пріоритет</strong>: 🔴 Високий (для RAG queries по документах)</li>
</ul>
<hr />
<h3 id="3-crewai-workflows">3. CrewAI Workflows<a class="headerlink" href="#3-crewai-workflows" title="Permanent link">&para;</a></h3>
<h4 id="greenfood-crew-13-agents">GREENFOOD Crew (13 agents)<a class="headerlink" href="#greenfood-crew-13-agents" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ Агенти створені, але не підключені до Router</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Додати tools для агентів (API виклики, БД queries)</li>
<li>[ ] Створити Tasks для кожного Crew</li>
<li>[ ] Інтеграція з Router (<code>mode: "crew"</code>, <code>scenario: "onboard_vendor"</code>)</li>
<li>[ ] Тестування всіх 4 Crews</li>
<li><strong>Пріоритет</strong>: 🟡 Середній (GREENFOOD assistant працює через LLM, Crew - для складних сценаріїв)</li>
</ul>
<h4 id="crews">Інші Crews<a class="headerlink" href="#crews" title="Permanent link">&para;</a></h4>
<ul>
<li>[ ] DAARWIZZ Crew (microDAO workflows)</li>
<li>[ ] Helion Crew (Energy Union workflows)</li>
<li><strong>Пріоритет</strong>: 🟢 Низький (поки LLM достатньо)</li>
</ul>
<hr />
<h3 id="4-memory-context-management">4. Memory &amp; Context Management<a class="headerlink" href="#4-memory-context-management" title="Permanent link">&para;</a></h3>
<h4 id="memory-service">Memory Service<a class="headerlink" href="#memory-service" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ Працює (контекст діалогів, user facts)</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Додати довгострокову пам'ять (summaries старих діалогів)</li>
<li>[ ] Інтеграція з RAG для semantic memory</li>
<li>[ ] User preferences storage</li>
<li><strong>Пріоритет</strong>: 🟡 Середній</li>
</ul>
<h4 id="session-management">Session Management<a class="headerlink" href="#session-management" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ Базова імплементація (<code>session_id = telegram:{chat_id}</code>)</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Підтримка multi-device (один user, кілька чатів)</li>
<li>[ ] Session expiry та cleanup</li>
<li>[ ] Cross-channel sessions (Telegram + Web)</li>
<li><strong>Пріоритет</strong>: 🟢 Низький</li>
</ul>
<hr />
<h3 id="5-monitoring-observability">5. Monitoring &amp; Observability<a class="headerlink" href="#5-monitoring-observability" title="Permanent link">&para;</a></h3>
<h4 id="prometheus-metrics">Prometheus Metrics<a class="headerlink" href="#prometheus-metrics" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ DAGI Router та Telegram Gateway</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Додати <code>/metrics</code> в інші сервіси (Parser, STT, TTS, CrewAI)</li>
<li>[ ] Створити custom metrics (LLM tokens, agent requests, STT duration)</li>
<li>[ ] Налаштувати alerting (Slack/Telegram notifications)</li>
<li><strong>Пріоритет</strong>: 🟡 Середній</li>
</ul>
<h4 id="grafana-dashboards">Grafana Dashboards<a class="headerlink" href="#grafana-dashboards" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ⏳ Grafana встановлено, дашбордів немає</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] DAGI Router Dashboard (requests, latency, errors)</li>
<li>[ ] Telegram Gateway Dashboard (messages, active chats)</li>
<li>[ ] LLM Performance Dashboard (tokens, providers usage)</li>
<li>[ ] System Dashboard (CPU, RAM, disk)</li>
<li><strong>Пріоритет</strong>: 🟡 Середній</li>
</ul>
<h4 id="logging">Logging<a class="headerlink" href="#logging" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ⚠️ Логи є, але не централізовані</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Додати Loki для централізованих логів</li>
<li>[ ] Інтеграція Grafana + Loki</li>
<li>[ ] Structured logging (JSON format)</li>
<li><strong>Пріоритет</strong>: 🟢 Низький</li>
</ul>
<hr />
<h3 id="6-rbac">6. Безпека та RBAC<a class="headerlink" href="#6-rbac" title="Permanent link">&para;</a></h3>
<h4 id="authentication">Authentication<a class="headerlink" href="#authentication" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ⚠️ Telegram auth через bot token, немає JWT для HTTP API</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] JWT authentication для <code>/api/*</code> endpoints</li>
<li>[ ] OAuth2 для frontend</li>
<li>[ ] API keys для external integrations</li>
<li><strong>Пріоритет</strong>: 🔴 Високий (для production)</li>
</ul>
<h4 id="rbac">RBAC<a class="headerlink" href="#rbac" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ RBAC Service працює (9200)</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Інтеграція RBAC з усіма агентами</li>
<li>[ ] Перевірка прав доступу до MicroDAO actions</li>
<li>[ ] Audit log для всіх RBAC операцій</li>
<li><strong>Пріоритет</strong>: 🔴 Високий (для multi-user microDAO)</li>
</ul>
<hr />
<h3 id="7-performance-scalability">7. Performance &amp; Scalability<a class="headerlink" href="#7-performance-scalability" title="Permanent link">&para;</a></h3>
<h4 id="llm-optimization">LLM Optimization<a class="headerlink" href="#llm-optimization" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ⚠️ Одна Ollama інстанція, no rate limiting</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] LLM Load Balancer (кілька Ollama nodes)</li>
<li>[ ] Rate limiting (запобігання abuse)</li>
<li>[ ] LLM response caching (Redis)</li>
<li>[ ] Smart routing (urgent queries → fast model)</li>
<li><strong>Пріоритет</strong>: 🟡 Середній (для масштабування до 100+ користувачів)</li>
</ul>
<h4 id="message-queue">Message Queue<a class="headerlink" href="#message-queue" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ✅ NATS працює, але синхронна обробка</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Async processing через NATS JetStream</li>
<li>[ ] Retry mechanism для failed requests</li>
<li>[ ] Dead letter queue</li>
<li><strong>Пріоритет</strong>: 🟢 Низький (поточний throughput достатній)</li>
</ul>
<hr />
<h3 id="8">8. Тестування<a class="headerlink" href="#8" title="Permanent link">&para;</a></h3>
<h4 id="unit-tests">Unit Tests<a class="headerlink" href="#unit-tests" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ❌ Відсутні</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Тести для Router (<code>routing_engine.py</code>)</li>
<li>[ ] Тести для LLM Provider</li>
<li>[ ] Тести для Memory Service</li>
<li><strong>Пріоритет</strong>: 🟡 Середній</li>
</ul>
<h4 id="integration-tests">Integration Tests<a class="headerlink" href="#integration-tests" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ❌ Відсутні</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] End-to-end тест (Telegram → Router → LLM → Response)</li>
<li>[ ] STT pipeline test</li>
<li>[ ] Document processing test (PDF → Parser → RAG → Query)</li>
<li><strong>Пріоритет</strong>: 🟡 Середній</li>
</ul>
<h4 id="load-testing">Load Testing<a class="headerlink" href="#load-testing" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>Статус</strong>: ❌ Не проводилось</li>
<li><strong>Що зробити</strong>:</li>
<li>[ ] Simulate 100 одночасних діалогів</li>
<li>[ ] Тест STT під навантаженням</li>
<li>[ ] LLM throughput benchmark</li>
<li><strong>Пріоритет</strong>: 🟢 Низький (для pre-production)</li>
</ul>
<hr />
<h2 id="_3">🎯 Пріоритизація (що робити далі)<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<h3 id="1-2">🔴 Критично (наступні 1-2 дні)<a class="headerlink" href="#1-2" title="Permanent link">&para;</a></h3>
<ol>
<li>✅ Додати <code>/metrics</code> в Router та Gateway</li>
<li>🔄 Перевірити голосовий чат (STT)</li>
<li>🔄 Виправити RAG Service (Haystack 2.x)</li>
<li>⏳ Додати JWT authentication для HTTP API</li>
</ol>
<h3 id="1-2_1">🟡 Важливо (наступні 1-2 тижні)<a class="headerlink" href="#1-2_1" title="Permanent link">&para;</a></h3>
<ol>
<li>Завершити GREENFOOD Crew (додати tools та tasks)</li>
<li>Створити Grafana дашборди</li>
<li>Додати TTS інтеграцію</li>
<li>RBAC інтеграція з агентами</li>
<li>Memory Service improvements</li>
</ol>
<h3 id="1-2_2">🟢 Потім (1-2 місяці)<a class="headerlink" href="#1-2_2" title="Permanent link">&para;</a></h3>
<ol>
<li>LLM Load Balancer</li>
<li>Centralized Logging (Loki)</li>
<li>Unit &amp; Integration Tests</li>
<li>Load Testing</li>
<li>Масштабування до 1000+ агентів</li>
</ol>
<hr />
<h2 id="_4">📊 Поточний статус<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Статус</th>
<th>Готовність</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Core Router</strong></td>
<td>✅ Працює</td>
<td>95%</td>
</tr>
<tr>
<td><strong>Telegram Bots</strong></td>
<td>✅ 3 боти</td>
<td>90%</td>
</tr>
<tr>
<td><strong>LLM (Ollama)</strong></td>
<td>✅ Працює</td>
<td>85%</td>
</tr>
<tr>
<td><strong>STT (Whisper)</strong></td>
<td>⚠️ Потребує тестування</td>
<td>70%</td>
</tr>
<tr>
<td><strong>TTS</strong></td>
<td>⚠️ Не інтегровано</td>
<td>50%</td>
</tr>
<tr>
<td><strong>Parser/OCR</strong></td>
<td>✅ Працює</td>
<td>80%</td>
</tr>
<tr>
<td><strong>RAG</strong></td>
<td>⏸️ Зупинено</td>
<td>40%</td>
</tr>
<tr>
<td><strong>CrewAI</strong></td>
<td>⚠️ Базова імплементація</td>
<td>60%</td>
</tr>
<tr>
<td><strong>Monitoring</strong></td>
<td>✅ Prometheus + Grafana</td>
<td>75%</td>
</tr>
<tr>
<td><strong>RBAC</strong></td>
<td>✅ Працює</td>
<td>80%</td>
</tr>
<tr>
<td><strong>Memory</strong></td>
<td>✅ Працює</td>
<td>75%</td>
</tr>
<tr>
<td><strong>Security</strong></td>
<td>⚠️ Базова (Telegram)</td>
<td>50%</td>
</tr>
<tr>
<td><strong>Tests</strong></td>
<td>❌ Відсутні</td>
<td>10%</td>
</tr>
</tbody>
</table>
<p><strong>Загальна готовність</strong>: <strong>~70%</strong> для MVP<br />
<strong>Для production</strong>: <strong>~50%</strong></p>
<hr />
<p><em>Документ оновлюється: 2025-11-18</em></p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.sections", "navigation.instant", "content.code.copy"], "search": "../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.3220b9d7.min.js"></script>
</body>
</html>