Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
AI financial data screener — natural language queries → MOEX/CBR/TASS data + interactive charts + audit log. FastAPI, React, PostgreSQL, Docker.
Translation pending
FinanceTypeScript · PythonGitHub @kaluginvitOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Live Demo: https://kaluginvit.github.io/Portfolio/finance-data-screener/ — preloaded public sample data (MOEX, CBR), no backend required. Приложение для сбора и анализа финансовых данных с помощью LLM. Пользователь вводит запрос на русском языке — система автоматически определяет источник, строит URL запроса и возвращает структурированные данные с графиком.Read the full README ↗
Live Demo: https://kaluginvit.github.io/Portfolio/finance-data-screener/ — preloaded public sample data (MOEX, CBR), no backend required.
Приложение для сбора и анализа финансовых данных с помощью LLM. Пользователь вводит запрос на русском языке — система автоматически определяет источник, строит URL запроса и возвращает структурированные данные с графиком.
audit_runs с duration и телом ответаBrowser (React SPA)
│
nginx :80
│
FastAPI :8000 ──── PostgreSQL :5432
│
├── POST /ai/plan_and_collect ──► ProxyAPI (gpt-4o-mini + instructor)
│
├── POST /datasets/{id}/collect ──► MoexCollector | CbrCollector | RbcCollector
│
└── AuditMiddleware → audit_runs
| Слой | Технологии |
|---|---|
| Backend | FastAPI 0.115, Python 3.12, SQLAlchemy 2.0 async, Alembic, PostgreSQL 16 |
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, Recharts, TanStack Table |
| LLM | gpt-4o-mini через ProxyAPI + instructor для строгого JSON |
| Инфра | Docker Compose — 3 сервиса |
# 1. Клонировать репозиторий
git clone <repo-url>
cd <repo-folder>
# 2. Создать файл .env
cp .env.example .env
# Открыть .env и вписать свой PROXYAPI_KEY
# 3. Поднять все сервисы
docker compose up --build
Примечание:
.env.exampleсодержитCOMPOSE_PROJECT_NAME=screener— это задаёт имя проекта Docker Compose и гарантирует корректную работу независимо от имени директории.
После запуска откройте http://localhost
Первый билд занимает ~5–8 минут (скачивание образов + npm install + pip install). Повторный запуск — ~30 секунд.
Скопируйте .env.example в .env и заполните:
POSTGRES_USER=screener
POSTGRES_PASSWORD=screener_pass
POSTGRES_DB=screener_db
PROXYAPI_KEY=your_key_here # обязательно
PROXYAPI_BASE_URL=https://api.proxyapi.ru/openai/v1
Перейдите в раздел «Наборы данных» → кнопка «Создать» → введите название.
Раздел «Сбор» → выберите набор → введите запрос на русском:
Все акции MOEX с объёмом торгов > 1 млрд рублей за сегодня
Курсы валют ЦБ РФ на сегодня
Последние финансовые новости
LLM покажет план (источник, URL, поля, фильтры). При needs_review=false — нажмите «Собрать».
Раздел «Витрина» → выберите набор → таблица + график + экспорт в JSON/CSV.
Раздел «Журнал» — timeline всех API-запросов с бейджами метода/статуса и длительностью.
Swagger UI: http://localhost:8000/docs
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /health | Проверка работоспособности |
| POST | /datasets | Создать набор данных |
| GET | /datasets | Список всех наборов |
| GET | /datasets/{id} | Один набор |
| POST | /datasets/{id}/collect | Запустить сбор данных |
| GET | /datasets/{id}/records | Записи набора |
| POST | /ai/plan_and_collect | Построить план через LLM |
| GET | /audit | Журнал всех запросов |
# Запустить тесты внутри контейнера
docker compose -p screener exec backend pytest tests/ -v
Покрытие: 18 тестов — /health, CRUD датасетов, аудит.
├── backend/
│ ├── app/
│ │ ├── api/ # FastAPI роутеры (datasets, ai, audit)
│ │ ├── collectors/ # MoexCollector, CbrCollector, RbcCollector
│ │ ├── middleware/ # AuditMiddleware
│ │ ├── models/ # SQLAlchemy модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # LLM-сервис (instructor + ProxyAPI)
│ │ └── main.py
│ ├── alembic/ # Миграции БД
│ ├── tests/ # pytest тесты
│ ├── entrypoint.sh # alembic upgrade head → uvicorn
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── api/ # axios клиент
│ │ ├── components/ # Badge, Layout, DatasetCard, PlanPreview, ReviewBanner
│ │ └── pages/ # Datasets, Collect, Showcase, Audit
│ └── nginx.conf # проксирует /api/ → backend:8000
├── docker-compose.yml
├── .env.example
└── README.md
PostgreSQL 16 работает в контейнере postgres (порт 5432, данные в Docker volume pgdata).
docker compose -p screener exec postgres psql -U screener -d screener_db
-- Наборы данных
SELECT id, name, source, created_at FROM datasets ORDER BY created_at DESC;
-- Записи датасета
SELECT id, source, collected_at, data FROM records
WHERE dataset_id = '<uuid>' ORDER BY collected_at DESC LIMIT 10;
-- Аудит последних 20 запросов
SELECT endpoint, method, status_code, duration_ms, created_at
FROM audit_runs ORDER BY created_at DESC LIMIT 20;
-- Запросы с ручной проверкой
SELECT query, needs_review, confidence, created_at
FROM agent_runs WHERE needs_review = true ORDER BY created_at DESC;
-- Ошибки (status >= 400)
SELECT endpoint, method, status_code, error, created_at
FROM audit_runs WHERE status_code >= 400 ORDER BY created_at DESC;
# Журнал аудита (последние 100 запросов)
curl http://localhost/api/audit
# Записи датасета
curl http://localhost/api/datasets/<id>/records
This is the beginning of the README. Read the rest at the original. Read the full README ↗