TL;DR

  • jev-serveMLX 모델 또는 OpenAI 호환 API에서 구조화된 판단을 텍스트 생성 없이 수행하고, 첫 토큰 로짓을 읽어 선택지별 확률을 제공함.
  • 구조화된 JSON 생성 방식보다 결정당 34배 빠르며 평균 지연 시간은 0.23초7.80초임.
  • 질문 유형은 선택지 하나를 고르는 choice, 0~1 확률을 출력하는 noul, 순서형 점수를 내는 score임.
  • 각 질문에 대해 한 번의 순전파로 전체 확률 분포를 산출하며, 생성 토큰·JSON 파싱·환각 필드가 없음.
  • 기본 백엔드는 Apple Silicon에서 실행되는 MLX이며, --api 옵션으로 Ollama·LM Studio·OpenAI 등과 호환되는 API를 사용할 수 있고 라이선스는 Apache 2.0임.

개요

  • jev-serve는 텍스트를 생성하지 않고 임의의 대형 언어 모델(LLM)에서 유형이 지정된 확률적 판단을 제공함.
  • /v1/systemone 엔드포인트는 첫 토큰 로짓을 읽어 구조화된 결정을 점수화함. 이는 openjev.com이 브라우저에서 사용하는 방식과 같으며, 서버에서 모든 MLX 모델 또는 OpenAI 호환 API를 대상으로 실행됨.
  • 구조화된 JSON 생성보다 결정당 34배 빠름(0.23초 대 7.80초).
  • 점 추정치가 아닌 선택지별 보정 확률을 포함한 전체 확률 분포를 제공함.
  • 세 가지 질문 유형을 제공함: 선택지 하나를 고르는 choice, 0~1 확률인 noul, 순서형 수준인 score.
  • 기본 설정은 Apple Silicon에서 직접 추론하는 MLX이며, --api 옵션으로 OpenAI 호환 API로 전환 가능함.
  • Apache 2.0 라이선스이며 Jared Palmer의 kev에서 파생됨.

설치

  • 기본 MLX 백엔드는 Apple Silicon에서 사용하며, uv pip install -e "."로 설치함.
  • OpenAI 호환 API 백엔드를 함께 사용하려면 uv pip install -e ".[api]"로 설치함.

실행

  • 기본 백엔드인 MLX에서는 jev-serve lmstudio-community/Qwen3.8-27B-MLX-6bit 명령으로 로컬 모델을 직접 추론함.
  • Ollama, LM Studio, OpenAI 등의 API를 사용하려면 jev-serve qwen/qwen3.8-27b --api http://localhost:11434/v1로 실행함.

사용 예시

  • POST http://localhost:8008/v1/systemone 요청은 state에 차량과 소유자 정보를, questions에 판단할 질문을 전달함.
  • 예시의 top_mod 질문은 배기·흡기·휠·오디오 중 가장 인기 있는 업그레이드 범주를 선택하는 choice 유형이며, wants_power 질문은 소유자가 출력 향상에 주로 관심이 있는지 판단하는 noul 유형임.
  • 응답 예시에서 top_mod의 선택은 exhaust, 신뢰도는 0.51, 선택지별 확률은 배기 0.64, 흡기 0.03, 오디오 0.05, 휠 0.28임.
  • wants_powernoul 값은 0.87이며, 전체 지연 시간은 190ms임.

질문 유형

  • choice: choice와 각 키의 확률을 출력하며, N개 선택지 중 하나를 고르는 데 사용함.
  • noul: [0, 1] 범위의 noul 값을 출력하며, 예·아니요 확률에 사용함.
  • score: 기대 수준인 score와 확률을 출력하며, 순서형 평가에 사용함.

벤치마크 — Qwen3.8-27B · MLX · Apple M 시리즈

  • 동일한 선택지 4개짜리 질문을 제품 20개에 순차적으로 적용했으며, 배치 처리는 사용하지 않음.
  • 제품당 평균 시간은 jev-serve 스크래치 모드가 0.23초, 구조화된 출력을 사용하는 디코더가 7.80초임.
  • 95백분위 지연 시간은 각각 약 0.31초와 약 11.2초임.
  • 생성 출력 토큰은 스크래치 모드가 0개, 디코더가 약 23개임.
  • 속도 향상은 34배이며, 기준선은 디코더임.
  • 제품 1만 개 처리 시 벽시계 시간은 스크래치 모드가 0.6시간, 디코더가 21.7시간임.
  • 확률 출력은 스크래치 모드가 선택지별 전체 확률이며, 디코더는 점 추정치만 제공함.
  • 스크래치 모드는 스키마에 고정되어 환각 필드가 없으며, 디코더에서는 환각 필드가 관찰됨.
  • 스크래치 모드는 순전파 한 번을 실행하고 로짓 위치 하나를 읽음. 디코더는 EOS가 나올 때까지 토큰을 하나씩 생성한 다음 JSON을 파싱함.
  • 선택지 수와 출력 길이가 늘어날수록 성능 차이가 커짐.

작동 방식

  • 텍스트를 생성하는 대신 프롬프트 다음 경계 위치에서 모델의 다음 토큰 로짓 분포를 읽고, 각 선택지의 첫 토큰을 추출한 뒤 소프트맥스로 정규화함.
  • 질문마다 순전파 한 번을 수행하며, 샘플링·JSON 파싱·환각 필드가 없음.
  • 브라우저에서 wllama를 사용하는 openjev.com의 방식과 동일함.

출처 및 라이선스

  • openjev.com
  • kev, 저작권 2026 Jared Palmer, Apache 2.0 라이선스임.