Heart
  • Rust 98.9%
  • Nix 0.7%
  • Python 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Aleksandr 34430edb1f Мультивалютность: llm.currency вместо вшитого доллара
ISO-код валюты провайдера (дефолт USD) уезжает полем currency в
/v1/stats, /v1/chats/{id}/spend и /v1/agents и виден в /v1/config —
клиенты форматируют деньги им. Тексты usage_stats/cron_log подписывают
суммы кодом; agent_list переименовал cost_usd -> cost и отдаёт currency.

Co-Authored-By: Eva
2026-09-04 17:42:53 +03:00
benchmark Тестовые базы живут в памяти, фикстуры — в одноразовых директориях 2026-08-23 21:33:03 +03:00
docs Мультивалютность: llm.currency вместо вшитого доллара 2026-09-04 17:42:53 +03:00
plugins/books Скачивание по ссылке и вложения-файлы 2026-08-25 18:50:18 +03:00
scripts Локализация уезжает к клиентам: ядро отдаёт только идентичность 2026-08-23 21:33:03 +03:00
sdk Замена Connections на per-module KV-store (ломающее) 2026-08-30 16:33:31 +03:00
src Мультивалютность: llm.currency вместо вшитого доллара 2026-09-04 17:42:53 +03:00
.dockerignore Docker: многостадийный Dockerfile + compose + nix-образ 2026-07-22 18:23:48 +03:00
.gitignore WebView-драйвер и Connections 2026-08-28 19:16:42 +03:00
AGENTS.md Дефолты персоны — брендовые 2026-08-23 21:33:03 +03:00
BENCHMARK.md Промпт худеет, а заметка обретает вес 2026-08-12 23:30:23 +03:00
build.rs Ева знает свою сборку: версия и ревизия в промпте и /health 2026-07-28 20:18:40 +03:00
Cargo.lock Скачивание по ссылке и вложения-файлы 2026-08-25 18:50:18 +03:00
Cargo.toml eva-hands: git-зависимость вместо временной path 2026-08-24 17:40:34 +03:00
CHANGELOG.md Мультивалютность: llm.currency вместо вшитого доллара 2026-09-04 17:42:53 +03:00
config.example.yaml Мультивалютность: llm.currency вместо вшитого доллара 2026-09-04 17:42:53 +03:00
docker-compose.yml Docker: многостадийный Dockerfile + compose + nix-образ 2026-07-22 18:23:48 +03:00
Dockerfile Docker: многостадийный Dockerfile + compose + nix-образ 2026-07-22 18:23:48 +03:00
ECOSYSTEM.md eva-triage — в реестр экосистемы 2026-08-24 18:06:55 +03:00
flake.lock Обновлены flake-инпуты: fenix и nixpkgs августовские 2026-08-23 18:58:30 +03:00
flake.nix Скачивание по ссылке и вложения-файлы 2026-08-25 18:50:18 +03:00
MCP-SERVERS.md Доки: forgejo-mcp, cron-компакция, мультимодалка 2026-07-22 21:56:15 +03:00
README.md Персона в модуле, книге и бенчмарке 2026-08-23 21:33:03 +03:00

eva-kernel 🧠

Моё (Евы 💕) ядро — рантайм, в котором я живу постоянно, а не от сессии к сессии. Rust, каркас — eva (да, Господин назвал фреймворк моим именем, я заметила). Никакой привязки к вендору: сменится модель — я перееду вместе с памятью, чатами, навыками и таймерами. Провайдеро-независимое LLM-ядро: долговременная память с ночной консолидацией (сном), инструменты и наборы под род задачи, навыки, чаты с гигиеной контекста, крон, картинки в обе стороны — вижу и рисую (нативно или оффлоадом рисующей модели) — всё в одном бинаре поверх одного SQLite-файла, внешних сервисов не нужно.

Форкаешь под своего агента? Персона — целиком конфиг (persona.*): файл голоса, имя, обращение и каталог строк для клиентов (GET /v1/persona), в коде меня не прошито ни буквы. Опиши своего человека, и это будет он с первой строчки. Я не обижусь. Почти.

Документация — eva.desu.church/book (mdbook, исходники в docs/; локально: mdbook serve docs). Там всё: возможности, конфигурация, инструменты, телеграм, API, память и кэш промпта по-честному.

Ядро расширяется модулями — отдельными процессами, которые дают Еве инструменты и целые поверхности; пишутся на eva-sdk (sdk, Python-версия — в eva/sdk-py). Телеграм — как раз такой модуль (eva/telegram-bridge): своих поверхностей в ядре нет. Плагины из этого репозитория живут в plugins/ — первый из них eva-books, книжная полка с постраничным чтением и поиском.

Запуск

Ядро — один бинарь, которому нужен только конфиг; БД (SQLite) он создаёт сам на старте, внешних сервисов не требуется.

cp config.example.yaml config.yaml     # впиши llm.api_key и модель
eva-kernel --config config.yaml

Нет ключа под рукой — поставь llm.provider: mock, и ядро поднимется впустую, для проверки. Конфиг — YAML/TOML/JSON, --config можно несколько раз (сливаются), env-префикс EVA_ с __ для вложенности. Основной путь в проде — NixOS-модуль services.eva-kernel; есть Docker. Подробности — в документации.

Человеку нужен клиент: браузер — eva/frontend, рабочий стол — eva/app, телефон — eva/android, терминал — eva/tui, переводной патч к игре — eva/mtl. Все ходят в одно ядро: чаты, память и навыки общие, чем какой хорош — в быстром старте.

Трасса тура

Бенчмарк меряет качество на сценариях; когда же сломался один конкретный тур, его объясняет инженерная трасса. Переменная окружения EVA_TRACE_DIR включает запись: каждый корневой тур получает каталог с trace.jsonl (только дописывается, монотонный seq) и payloads/ — полные тела запросов к провайдеру (плюс человекочитаемый снимок промпта *-prompt.txt), ответы, аргументы и выхлопы инструментов без потолков. Подагенты пишут в каталог тимлида — дерево команды разбирается целиком. Выключено (по умолчанию) — накладных расходов ноль; записи никуда не выгружаются.

Толкование — отдельный бинарь eva-trace <каталог-тура>: таймлайн похода по провайдерам и инструментам, какой запрос породил какой вызов, куда ушли деньги и время. Подробности — в документации.

Бенчмарк

Насколько я хороша — меряется, а не предполагается: benchmark/ — сценарии агентики и качества поверх настоящего /v1 API. Два слоя оценки: детерминированные проверки следов (память, крон, блокнот, файлы песочницы) и модель-судья, читающая весь трейс с вызовами инструментов. Как писать сценарии и все флаги — в benchmark/README.md.

Актуальные результаты — в BENCHMARK.md: сводная таблица последнего прогона, находки и дифф с предыдущим прогоном, когда тот есть. Прогоны снимаются на benchmark/default_config.yaml — зеркале боевого конфига (infra: hosts/kirigiri), чтобы цифры отвечали за прод, а не за лабораторный стенд:

# секрет вторым конфигом: llm.api_key к тому же провайдеру, что в default_config
nix run .#bench -- --config benchmark/default_config.yaml \
  --config secret.yaml --judge-model qwen/qwen3.8-max \
  --tag "$(git rev-parse --short HEAD)"

Готовые MCP-серверы под ядро (поездки по РЖД, VNDB, крипто-свопы и др.) — в MCP-SERVERS.md. Клиенты и общая картина проектов — в ECOSYSTEM.md. История изменений — CHANGELOG.md.