- Rust 98.9%
- Nix 0.7%
- Python 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
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
|
||
| benchmark | ||
| docs | ||
| plugins/books | ||
| scripts | ||
| sdk | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| BENCHMARK.md | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| config.example.yaml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| ECOSYSTEM.md | ||
| flake.lock | ||
| flake.nix | ||
| MCP-SERVERS.md | ||
| README.md | ||
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.