Ir para o conteúdo

Servidor

llama-crab-server é um binário HTTP fino construído sobre a API segura do llama-crab. Ele mantém a inferência dentro do binding Rust e usa uma thread worker que possui o modelo e o contexto.

O servidor expõe uma superfície compatível com OpenAI (/v1/chat/completions, /v1/completions, /v1/embeddings, /v1/rerank, /v1/models) mais algumas extensões específicas do llama-crab (/extras/tokenize, /extras/detokenize). É a maneira mais fácil de colocar um modelo atrás de um endpoint HTTP sem escrever um você mesmo.

  • Executando o servidor

    O comando cargo run, as flags de linha de comando, as variáveis de ambiente LLAMA_CRAB_* e os presets disponíveis.

  • Referência da API

    Cada rota, o formato da requisição, o formato da resposta e os códigos de status. Inclui um exemplo curl trabalhado para cada uma.

  • Streaming

    Server-Sent Events para requisições stream: true. A ordem exata dos chunks para chat e completions de texto.

  • Saída estruturada

    Os campos de requisição grammar, json_schema e response_format, e o pipeline GBNF pelo qual eles passam.

Forma do runtime

O servidor mantém a inferência do modelo em uma thread worker dedicada e envia requisições a ela através de canais. Llama possui um modelo nativo e contexto e intencionalmente não é compartilhado livremente entre threads.

flowchart LR
    HTTP[Router HTTP] -->|canal| W[Thread worker]
    W -->|possui| L[Llama]
    L -->|possui| M[Model]
    L -->|possui| C[Context]
    W -->|canal| HTTP
    HTTP -->|SSE| Client[Cliente]

O binário incluído usa este layout:

  • Um worker possui uma instância Llama e processa requisições sequencialmente.
  • O router HTTP valida requisições e encaminha jobs de inferência para o worker.
  • Rotas de streaming encaminham chunks decodificados de volta para a tarefa HTTP por um canal.

Você pode executar vários processos do servidor ou estender o crate com vários workers quando precisar de throughput paralelo.

Por que um binário separado?

O servidor é intencionalmente um wrapper fino:

  • Configuração — flags CLI e variáveis de ambiente.
  • Roteamento HTTP — parsing de requisições, formatação de respostas.
  • Ciclo de vida do worker — startup, shutdown, tratamento de erros.
  • Transporte de streaming — Server-Sent Events.
  • Erros — converte LlamaError em códigos de status HTTP no estilo OpenAI.

O comportamento de inferência permanece em llama-crab para que os usuários de CLI, biblioteca e servidor exercitem a mesma implementação. Se você fizer fork do servidor para uma integração customizada, a única lógica que precisa ser mantida em sincronia é a camada HTTP — o código do modelo permanece o mesmo.

Por onde ir a partir daqui