Lev

Última atualização:

Aberto69–654ms$0/M input

Notas do quadrante

Ver o quadrante completo

Pontuação pela rubrica pública do quadrante (maturidade × capability; bolha = adoção). Revisamos conforme a evidência.

  • Maturidade5.2/10

    Pesos abertos no HF + GitHub com docs detalhados e servidor local TypeSafe-compatível; sem SLA hospedado mantém maturidade média.

  • Capability6.8/10

    S1Bench 68.9% macro (13 subsets), ECE 0.115, três tipos de decisão. Mais fraco que Jev em pares de edição mínima e summeval-consistency.

  • Adoção12/100

    Lançamento D+1 com YC; tração modesta (6.6k views, 96 likes); nenhum uso em produção reportado ainda.

Vendor claims

Lev é um adapter LoRA em Qwen3.5-4B da Interfaze (YC P26), sob licença Apache-2.0. Fala o protocolo /v1/systemone da TypeSafe: código escrito para o SDK TypeSafe funciona trocando só o base_url.

Lê um estado (texto, ticket, email ou JSON) e um conjunto de perguntas tipadas em uma única passada — sem decode autoregressivo, zero tokens de saída. Tipos de pergunta: noul (sim/não → boolean no catálogo), choice e score. Saída: probabilidades calibradas sobre exatamente as opções que você fornece.

O que é

  • Pesos abertos: interfaze-ai/lev (adapter Apache-2.0; base Qwen sob licença própria)
  • Repo + servidor local: github.com/Abhinavexists/lev
  • API: POST /v1/systemone — compatível com TypeSafe; SDK oficial funciona com base_url local
  • Instalação: pip install "lev[serve] @ git+https://github.com/Abhinavexists/lev#subdirectory=packages/lev"

Quickstart:

import lev

model = lev.load("interfaze-ai/lev")
state = "Oi, fui cobrado duas vezes no pedido #4471 e quero reembolso."
questions = {
    "intent": {
        "type": "choice",
        "instructions": "O que o cliente quer?",
        "criteria": {"refund": "quer dinheiro de volta", "cancel": "quer cancelar", "track": "quer saber onde está o pedido", "other": "qualquer outra coisa"},
    },
    "urgent": {"type": "noul", "instructions": "Precisa de humano em até uma hora?"},
}
result = model.system_one(state, questions)
print(result.answers["intent"].choice)  # refund
print(result.answers["intent"].probabilities)  # {'refund': 0.84, ...}
print(result.usage.output_tokens)  # 0

Resultados S1Bench

UnverifiedClaim (fonte: huggingface.co/interfaze-ai/lev):

Subset Tarefa Lev Jev Δ
vitaminc-dev verificação de claim 0.668 0.801 −13.3
massive-en-US roteamento de intent (18 cenários) 0.857 0.874 −1.7
massive-de-DE roteamento de intent (alemão) 0.823 0.871 −4.8
boolq compreensão sim/não 0.827 0.893 −6.6
squad2 answerability 0.813 0.836 −2.3
paws paráfrase adversarial 0.776 0.900 −12.4
multinli inferência de linguagem natural 0.890 0.836 +5.4
civil_comments toxicidade 0.760 0.803 −4.3
aegis2 moderação de segurança 0.800 0.804 −0.4
helpsteer2 helpfulness (5 níveis) 0.386 0.341 +4.5
summeval-relevance relevância de resumo (5 níveis) 0.358 0.358 0.0
summeval-consistency fidelidade de resumo (5 níveis) 0.271 0.812 −54.1
pubmedqa biomédico sim/não/talvez 0.732 0.764 −3.2
Macro 0.689 0.761 −7.2

Lev e Jev rodaram no mesmo harness com todos os 3.880 itens do S1Bench. O harness reproduz os números publicados da TypeSafe para o Jev dentro de 0.8pp.

Onde Jev lidera claramente: pares de edição mínima (paws −12.4pp, vitaminc −13.3pp) e summeval-consistency (−54.1pp), onde Lev classifica a maioria dos resumos totalmente fiéis um nível abaixo. O backbone Qwen sem fine-tune marca 0.826 nesse subset — o fine-tuning introduziu a regressão.

Onde Lev lidera ou empata: multinli (+5.4pp) e helpsteer2 (+4.5pp), embora o ruído por subset fique entre 5–9pp.

Como funciona

  1. Leitura de label-token: cada opção recebe um código curto; a resposta é lida dos logits do próximo token sobre esses códigos. Escolhas são lidas em duas ordens de opção e a média cancela viés de posição.
  2. Head de candidate-path: acima de ~68 opções, um head aprendido pequeno faz match do estado contra o texto de cada opção.
  3. Calibração: temperaturas ajustadas pós-treino, uma por tipo de pergunta e modo de leitura.

Otimizações que fizeram diferença (do card):

  • Uma forward batched em vez de prefill-and-fork: 169 → 69 ms
  • Leitura de label-token até o limite do tokenizer: +51pp no MASSIVE de 60 intents
  • Pular códigos que splitam: banking77 0.818 → 0.980

Limites (leia antes de colocar em produção)

  • Aviso do autor: não use em decisões de produção que afetam pessoas sem sua própria avaliação
  • Edições mínimas e ratings finos são fracos — inputs que diferem por uma palavra trocada, e ratings de qualidade com cinco níveis, são onde Lev é menos acurado e pode errar com confiança
  • Calibração foi ajustada na distribuição de treino; tarefas muito diferentes podem ser menos calibradas
  • Perguntas são respondidas independentemente — codifique decisão conjunta como um choice, ou pergunte em etapas
  • Somente inglês
  • Precisa de GPU para uso em tempo real (backbone 4B leva segundos em CPU)

Treinamento

UnverifiedClaim (fonte: huggingface.co/interfaze-ai/lev):

  • Dados: 200.000 exemplos de 29 fontes construídas sobre 26 datasets públicos do HuggingFace (tópico, sentimento, emoção, intent, NLI, paráfrase, QA, toxicidade, helpfulness)
  • Guarda de contaminação: recusa qualquer fonte que resolve para um dos 13 subsets do S1Bench
  • Receita: LoRA r=32, α=64 em projeções q/k/v/o de atenção e MLP; 3 épocas, 18.750 steps, batch size 32, learning rate 5e-5, formato chat do Qwen, uma H100, 7.8 horas

I/O de decisão tipada pública, API documentada compatível com TypeSafe, pesos abertos e um run completo do S1Bench contra o Jev. Fica ao lado do Kev como ponto open / local no quadrante — com artifactKind: lora-adapter para não fingir que é um modelo base frontier.

Não afiliado nem endossado pela TypeSafe AI.