NATS wildcards (node.*.capabilities.get) only work for subscriptions, not for publish. Switch to a dedicated broadcast subject (fabric.capabilities.discover) that all NCS instances subscribe to, enabling proper scatter-gather discovery across nodes. Made-with: Cursor
Memory Service
FastAPI сервіс для управління пам'яттю в MicroDAO:
- user_facts - довгострокова пам'ять користувачів
- dialog_summaries - підсумки діалогів для масштабування
- agent_memory_events - події пам'яті агентів
- token-gate інтеграція - перевірка доступу через RBAC
Встановлення
# Створити віртуальне середовище
python -m venv venv
source venv/bin/activate # Linux/Mac
# або
venv\Scripts\activate # Windows
# Встановити залежності
pip install -r requirements.txt
# Налаштувати .env файл
cp .env.example .env
# Відредагуйте .env з вашими налаштуваннями
Запуск
# Development (з кореня services/memory-service/)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Production
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
API Endpoints
User Facts
POST /facts/upsert- Створити або оновити факт (основний ендпоінт)GET /facts- Список фактів користувачаGET /facts/{fact_key}- Отримати факт за ключемPOST /facts- Створити новий фактPATCH /facts/{fact_id}- Оновити фактDELETE /facts/{fact_id}- Видалити фактGET /facts/token-gated- Токен-гейт факти
Dialog Summaries
POST /summaries- Створити підсумок діалогуGET /summaries- Список підсумків (з cursor pagination)GET /summaries/{summary_id}- Отримати підсумокDELETE /summaries/{summary_id}- Видалити підсумок
Agent Memory Events
POST /agents/{agent_id}/memory- Створити подію пам'ятіGET /agents/{agent_id}/memory- Список подій (з cursor pagination)DELETE /agents/{agent_id}/memory/{event_id}- Видалити подію
Token Gate
POST /token-gate/check- Перевірка токен-гейту
Приклади використання
Створити/оновити факт користувача
curl -X POST "http://localhost:8000/facts/upsert" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_id": "u_123",
"fact_key": "language",
"fact_value": "uk-UA",
"metadata": {"source": "onboarding"}
}'
Створити токен-гейт факт
curl -X POST "http://localhost:8000/facts/upsert" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_id": "u_123",
"fact_key": "is_donor",
"fact_value": "true",
"token_gated": true,
"token_requirements": {
"token": "DAAR",
"min_balance": 1
}
}'
Створити підсумок діалогу
curl -X POST "http://localhost:8000/summaries" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"team_id": "t_123",
"channel_id": "c_456",
"period_start": "2025-01-01T00:00:00Z",
"period_end": "2025-01-01T23:59:59Z",
"summary_text": "Обговорювали новий проєкт, вирішили використати React",
"message_count": 42,
"participant_count": 5,
"topics": ["project-planning", "tech-stack"]
}'
Структура бази даних
Сервіс використовує такі таблиці:
user_facts- факти користувачівdialog_summaries- підсумки діалогівagent_memory_events- події пам'яті агентівagent_memory_facts_vector- векторні представлення фактів (для RAG)
Інтеграція з іншими сервісами
PDP Service
Для перевірки токен-гейту використовується PDP Service (Policy Decision Point).
Wallet Service
Для перевірки балансів токенів використовується Wallet Service.
Auth Service
Для авторизації використовується JWT токени з Auth Service.
TODO
- Реалізувати реальну перевірку JWT токенів
- Інтегрувати з PDP Service для token-gate
- Інтегрувати з Wallet Service для перевірки балансів
- Додати кешування для часто використовуваних фактів
- Додати метрики та моніторинг
- Додати тести