AI-ASSISTANT локально · MIT · VCF/BCF на входе

Из VCF — в данные

GenVario — быстрый слой между сырыми данными и анализом: собирает варианты из VCF, подтягивает внешние оценки патогенности (ClinVar, AlphaMissense) и позволяет за миллисекунды отобрать те, что помечены как патогенные или превышают заданный порог. Дальше работа идёт в обычных инструментах лаборатории. Данные не покидают вашу машину — ни байта в облако.

0
меньше данных на диске
0
быстрее htslib при конвертации
0
байт уходит наружу
AI-ASSISTANT

AI внутри. В основе — данные.

AI у нас — это слой, а не фундамент. Языковая модель переводит вопрос биолога в SQL, а отвечают всегда данные — DuckDB, а не фантазия модели: ни один ответ не может появиться без запроса к вашим данным, и это проверяется тестом, а не обещанием. И при этом AI можно вообще не включать — ядро продукта работает без него.

01

Локальная LLM

Модель работает на вашей машине и переводит вопрос на естественном языке в SQL. Облако не участвует.

02

Данные отвечают, не модель

Модель никогда не формулирует факт сама. Она предлагает запрос, вы его подтверждаете и видите результат из данных.

03

AI и ML — по желанию

Оба слоя — надстройки над ядром. Ядро работает и без них, а включаются они по отдельности — когда понадобятся.

0 точных ответов NL→SQL на 37 вопросах, модель 3B на CPU
0 ответов, полученных без обращения к данным

Мы публикуем точность как есть, вместе с оговорками: 78% — ниже нашей цели 85%, которая ставилась под набор из 50 вопросов.

Варианты продукта

Три уровня — включаете по одному

Ядро не зависит ни от AI, ни от аннотаций. Оба слоя — надстройки, которые можно включить позже или не включать вовсе.

01

Ядро

Конвертация и запросы. Больше ничего не нужно.
  • VCF/BCF → Parquet-слои B и C
  • SQL по 6.19 млн вариантов за миллисекунды
  • Полностью офлайн, из зависимостей — только Python
  • AI-модель не требуется
  • Аннотации не требуются
Требует: Python 3.9+
02

ML-слой

Аннотации и обучение модели.
  • ClinVar и AlphaMissense → признаки и метки
  • Соединение слоёв по ключу варианта
  • Обучение на обычном scikit-learn
  • AI-модель не требуется
  • Ядро не меняется
Требует: ядро
03

AI-слой

Вопрос словами вместо SQL.
  • Локальная LLM переводит вопрос в SQL
  • Вы подтверждаете запрос перед выполнением
  • Модель никогда не отвечает сама
  • Аннотации не требуются
  • Можно не включать — панель покажет инструкцию
Требует: ядро + локальная модель
Ядро одинаковое во всех трёх вариантах. Слои ничего не переписывают: те же файлы, тот же формат, тот же пайплайн — включаются по одному или не включаются совсем.
Задача

Когортный VCF — это десятки гигабайт,
с которыми нельзя работать

Секвенирование дешевеет, а инструменты вокруг файлов — нет. Данные есть, а ответов на простые вопросы нет.

Что не работает сегодня

  • VCF нельзя запросить. Ни WHERE, ни GROUP BY — только скрипты и перебор строк.
  • Один файл — 63.8 ГБ на хромосому. Копировать, передавать и хранить это дорого.
  • Кластеры ради запроса. Hail и Spark требуют инфраструктуры, которой у лаборатории нет.
  • Признаки для ML собирают вручную — недели работы на каждый датасет.
  • Облако означает выгрузку. Геномы пациентов уходят на чужой сервер — и это уже не отозвать.

Что делает GenVario

  • VCF → Parquet-слои B и C. 63.8 ГБ превращаются в 74.9 МБ аналитических данных.
  • Обычный SQL. DuckDB читает файлы напрямую — ни сервера, ни кластера, ни загрузки в базу.
  • Готово для ML. Признаки и метки уже разделены и соединены по ключу варианта.
  • Всё локально. Данные не покидают машину — по архитектуре, а не по обещанию.
  • Ничего не ломает. На входе стандартный VCF/BCF, на выходе стандартный Parquet.
Как это работает

Три шага от файла до модели

Без установки кластера, без загрузки в облако, без переписывания пайплайна.

01 — ЭКСПОРТ

Одна команда вместо суток ожидания

GenVario читает VCF или BCF и раскладывает его в два слоя: B — признаки варианта, C — контекст и метки. Запись идёт батчами, память не растёт вместе с файлом.

genvario export
$ genvario export cohort.vcf.gz --out ds
parsing cohort.vcf.gz …
chr1 · 6 191 833 вариантов3 796 rec/s
merging batches …
done B.parquet 46.6 MB · C.parquet 28.4 MB
27 мин · сжатие 852×
02 — ЗАПРОС

SQL, а не скрипты на Python

Слои регистрируются как обычные таблицы. Региональный запрос — миллисекунды, агрегат по всем 6 миллионам вариантов — меньше секунды.

queries.sql
SELECT gene, COUNT(*) AS n
FROM C
WHERE clinvar_label = 'pathogenic'
GROUP BY gene ORDER BY n DESC;
genenметка
OBSCN912pathogenic
USH2A837pathogenic
HSPG2790pathogenic
RYR2769pathogenic
03 — AI И МОДЕЛИ

Спросите словами — ответят данные

Локальная LLM переводит вопрос на русском в SQL, вы подтверждаете запрос и видите результат. Модель никогда не отвечает сама — она только пишет запрос.

ассистент · локальная модель
топ-5 генов по числу патогенных вариантовСпросить
SELECT gene, COUNT(*) AS n FROM C
WHERE clinvar_label = 'pathogenic'
GROUP BY gene ORDER BY n DESC LIMIT 5;
ВыполнитьОткрыть в SQL-панели
модель qwen2.5-coder:3b · 5 строк за 37 мс
Процесс

От поданного VCF — до управления в панели

Пять шагов, и ни один не требует кластера, облака или ручных скриптов. Ниже — как это выглядит и чем это запускается.

VCF / BCF
63.8 ГБ · 2548 сэмплов
Экспорт
genvario export
Слои B и C
74.9 МБ · Parquet
Запрос
DuckDB · SQL
Панель и AI
SQL · ассистент · ML
genvario web · 127.0.0.1:3939 данные не покидают эту машину
корень: bench/out_full локальный доступ 6 191 833 варианта

Задача конвертации

chr1.vcf.gz3 796 rec/s
B.parquet 46.6 MB · C.parquet 28.4 MB
27 мин · сжатие 852×

SQL и ассистент

genenметка
OBSCN912pathogenic
USH2A837pathogenic
HSPG2790pathogenic
SELECT gene, COUNT(*) AS n FROM C
WHERE clinvar_label = 'pathogenic' GROUP BY gene;
Выполнить Спросить у AI

Публичного релиза пока нет: пакет и образ готовятся к публикации. Команды ниже показывают, как это будет запускаться.

Docker

Один контейнер: сервис и htslib/bcftools внутри. Работает офлайн, в систему ничего не ставится — удобно для лабораторного сервера и для air-gap.

docker run --rm -p 3939:3939 -v "$PWD:/data" genvario web --data-root /data
офлайн htslib внутри без прав root после публикации
Python / pip

Обычный пакет: установка одной командой, без Docker и без прав администратора. Тот же движок, та же панель — на ноутбуке.

pip install genvario && genvario web --data-root .
Python 3.9+ uvx без установки после публикации Windows / Linux / macOS
Возможности

Всё, что нужно, — и ничего лишнего

Мы не строим свою модель предсказания и не изобретаем новый формат. Мы убираем трение между файлом и результатом.

AI, который не выдумывает

Вопрос на естественном языке превращается в SQL локальной моделью. Ответ всегда приходит из данных, а не из «воображения» модели. Если данных для ответа нет — ассистент говорит об этом прямо, вместо запроса, который заведомо упадёт.

Данные не уходят

Локальный сервер, локальная модель, файлы на вашем диске. Нет ни одной строки кода, которая куда-то отправляет геномы.

Быстрее инкумбентов

2.3× быстрее htslib на конвертации, 7.2× на региональном запросе, 40.6× на агрегате — на тех же данных и тех же вопросах.

SQL вместо скриптов

DuckDB читает Parquet напрямую. Ни загрузки в базу, ни кластера — запрос выполняется за миллисекунды на 6 млн вариантов.

Готово для ML

Слои B и C соединяются по ключу варианта. Аннотации ClinVar и AlphaMissense подключаются одной командой и становятся признаками.

Открытый код

MIT-лицензия, никакой привязки к вендору. Стандартный вход и выход: ничего не ломается в существующих пайплайнах.

Аннотации под контролем

Продукт сообщает, у какой доли вариантов нашлась клиническая метка, и объясняет, почему покрытие именно такое. Тихий ноль совпадений при сопоставлении справочников — известная проблема отрасли; здесь он виден числом, а не остаётся незамеченным.

Воспроизводимо до байта

Один и тот же вход даёт побайтово одинаковый выход — на разных движках разбора и на разных дисках. Это проверено, а не заявлено: хеши файлов совпадают.

Замеры

Цифры на реальных данных

1000 Genomes, сборка GRCh38, хромосома 1: 63.84 ГБ, 2548 сэмплов, 6 191 833 варианта. Все замеры воспроизводимы скриптами из bench/.

0
сжатие: 63.84 ГБ → 74.9 МБ
B.parquet + C.parquet
0
быстрее htslib на конвертации 200k
43.6 с против 101.8 с
0
быстрее bcftools на регионе
0.74 с против 5.32 с
0
быстрее на агрегате AF < 0.01
0.71 с против 28.76 с
0
конвертация файла 63.84 ГБ на SSD
27–30 мин на HDD · 6 191 833 варианта
Честная оговорка. Мы сравниваем не «в среднем», а на одинаковых данных и одинаковых вопросах, с контролем дискового кэша. Ответы обоих инструментов сверены построчно: 35 463 и 155 461 совпадение. Там, где мы проигрываем, это тоже написано в BENCHMARK.md.
Ранний доступ

Как это запускается

Публичного релиза пока нет: доступ выдаётся по запросу. При этом ни Docker, ни кластера, ни аккаунта не требуется — Python 3.9+ и один файл на входе.

bash
# 1. access by request — there is no public release yet
# 2. VCF → analytical layers
$ genvario export cohort.vcf.gz --out ds
# 3. ask the data
$ genvario query ds "SELECT gene, COUNT(*) n FROM C
WHERE clinvar_label='pathogenic' GROUP BY gene ORDER BY n DESC LIMIT 5"
# 4. browser panel + AI assistant
$ genvario web --data-root . --llm-url http://127.0.0.1:11434/v1
→ панель на http://127.0.0.1:3939
  1. Получите доступ

    Публичного релиза пока нет. Напишите в Telegram @AlexMeAntipov или на 92.antipov@gmail.com — пришлём пакет, команды установки и примеры.

  2. Скормите свой VCF или BCF

    Движок определится сам: для BCF подключится htslib, для текстового VCF — встроенный парсер. Результат побайтово одинаковый.

  3. Запросите данные

    Из командной строки, из Python или из браузерной панели — везде одни и те же слои.

  4. Добавьте аннотации и модель

    ClinVar и AlphaMissense подключаются одной командой, дальше обычный scikit-learn.

Локальная LLM не обязательна. Без неё панель показывает инструкцию, а всё остальное — экспорт, SQL, аннотации, ML — работает как обычно.
Без маркетинга

Где мы сильны, а где ещё нет

Мы публикуем не только то, что получилось. Так честнее и для вас, и для нас.

Работает и проверено

  • Конвертация реального VCF на 63.84 ГБ — за 27 минут, сжатие 852×.
  • Совпадение результатов с htslib-движком — построчно, включая float32.
  • SQL-панель: агрегат по 6.19 млн вариантов за 533 мс.
  • 81 автотест, включая защиту от опасного SQL и проверку утечки путей.
  • AI-ассистент: 78% точных ответов на 37 вопросах и ноль ответов без обращения к данным.

Знаем и говорим прямо

  • Генотипы мы не поддерживаем — это осознанный выбор, мы про признаки, а не про матрицу.
  • Точность ассистента 78% — ниже нашей цели 85%. Цель ставилась под набор из 50 вопросов.
  • Локальная модель на CPU отвечает медленно: на слабой машине первый вопрос занимает минуты.
  • Клинических выводов инструмент не делает: это research use only, а не медизделие.
  • AlphaMissense распространяется под некоммерческой лицензией — аннотации подключаете вы.

Ранний доступ

Публичного релиза пока нет — доступ выдаётся по запросу. Локально, без регистрации и без выгрузки: один файл VCF, и видно, сколько времени и диска это экономит. Напишите, и пришлём ссылку на пакет, команды установки и примеры.

Telegram: @AlexMeAntipov · почта: 92.antipov@gmail.com