Jevper: типобезопасная классификация LLM без привязки к проприетарным API
Hacker News · оригинал
Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Библиотека jevper позволяет получать вероятностные оценки и уверенность модели вместо текстовых ответов, используя любой OpenAI-совместимый клиент. Инструмент поддерживает локальные серверы llama.cpp и независим от официальных SDK TypeSafe AI.
Jevper решает проблему нестабильности промптов, предлагая структурированный вывод с вероятностями для любых моделей, включая локальные, что критично для надежных production-систем.
В экосистеме больших языковых моделей разработчики часто сталкиваются с проблемой «галлюцинаций» формата: модель может выдать ответ в свободной форме, который сложно парсить программно. Библиотека jevper предлагает решение этой задачи, выступая как обёртка для классификации, ориентированная на получение вероятностей и метрик уверенности вместо обычного текста. Проект реализует документированный протокол System One, но делает это независимо от официальных инструментов TypeSafe AI, что позволяет использовать его с любым клиентом, поддерживающим стандартный интерфейс OpenAI.
Ключевой особенностью jevper является принцип «duck typing»: библиотека не требует установки специфических зависимостей вроде typesafe-sdk или openai в рантайме. Достаточно любого объекта, который предоставляет методы responses.create или chat.completions.create. Это означает, что код, написанный для jevper, будет работать без изменений как с облачными моделями GPT, так и с локальными инстансами llama.cpp. Единственной обязательной зависимостью в Python 3.10+ является pydantic версии 2.7 или выше.
Архитектура инструмента построена на четырёх методах извлечения решений: logprobs, grammar, structured и discrete. По умолчанию используется режим auto, который автоматически выбирает оптимальный способ взаимодействия с моделью. Это важно, поскольку не все провайдеры поддерживают лог-вероятности (например, модели рассуждения от OpenAI или совместимые эндпоинты Anthropic). В таких случаях jevper переключается на строгие JSON-схемы, гарантируя получение распределения вероятностей даже когда модель не предоставляет их нативно.
Библиотека поддерживает три типа вопросов: Noul (да/нет), Choice (выбор из вариантов) и Score (оценка по шкале). Для типа Choice доступно до 255 опций, однако методы logprobs и grammar ограничены 26 вариантами из-за особенностей кодирования токенов. При превышении этого лимита система автоматически предлагает использовать JSON-методы, поддерживающие двухбуквенные метки. Каждый вопрос обрабатывается как отдельный вызов к провайдеру, что позволяет выполнять их конкурентно с настраиваемым уровнем параллелизма.
Для повышения точности классификации jevper поддерживает few-shot примеры, которые можно задавать на уровне конкретного вопроса, всего запроса или конструктора клиента. Приоритет отдается наиболее специфичному уровню. Также доступна функция reasoning, позволяющая модели «размышлять» перед выдачей ответа. В зависимости от поверхности API это реализуется либо через нативные механизмы рассуждения, либо через двухэтапный процесс, где анализ текста воспроизводится как ход ассистента перед финальным ответом.
Обработка ошибок в библиотеке отличается от стандартных клиентов: локальные ошибки валидации возникают до отправки запроса, а временные сбои сети (HTTP 429/500 и др.) обрабатываются через политику повторных попыток с экспоненциальным backoff. Нечитаемые ответы модели получают одну корректирующую попытку с добавлением ошибки в контекст диалога. Тестирование проекта выполняется против локального HTTP-сервера, что исключает необходимость в API-ключе для проверки логики.
Jevper предоставляет разработчикам надежный способ интеграции LLM в бизнес-логику, где важна не только семантика ответа, но и количественная оценка уверенности модели. Благодаря независимости от конкретных вендоров и поддержке локальных моделей, инструмент становится универсальным слоем абстракции для задач классификации.