- Move models.py, schemas.py, crud.py, main.py to app/ - Update imports to use app.* prefix - Update README with new structure - Fix uvicorn run command for new structure
145 lines
4.7 KiB
Markdown
145 lines
4.7 KiB
Markdown
# Memory Service
|
||
|
||
FastAPI сервіс для управління пам'яттю в MicroDAO:
|
||
- **user_facts** - довгострокова пам'ять користувачів
|
||
- **dialog_summaries** - підсумки діалогів для масштабування
|
||
- **agent_memory_events** - події пам'яті агентів
|
||
- **token-gate інтеграція** - перевірка доступу через RBAC
|
||
|
||
## Встановлення
|
||
|
||
```bash
|
||
# Створити віртуальне середовище
|
||
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 з вашими налаштуваннями
|
||
```
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
# 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` - Перевірка токен-гейту
|
||
|
||
## Приклади використання
|
||
|
||
### Створити/оновити факт користувача
|
||
|
||
```bash
|
||
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"}
|
||
}'
|
||
```
|
||
|
||
### Створити токен-гейт факт
|
||
|
||
```bash
|
||
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
|
||
}
|
||
}'
|
||
```
|
||
|
||
### Створити підсумок діалогу
|
||
|
||
```bash
|
||
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 для перевірки балансів
|
||
- [ ] Додати кешування для часто використовуваних фактів
|
||
- [ ] Додати метрики та моніторинг
|
||
- [ ] Додати тести
|
||
|