Exemplos¶
O repositório vem com 14 crates de exemplo autocontidos em
[examples/], um por funcionalidade pública. Cada um é um crate
Cargo independente que você pode copiar.
-
O menor programa ponta a ponta: carregar, tokenizar, completar, chat, FIM. ~80 linhas, totalmente anotado.
-
Completion de texto one-shot com uma cadeia de sampler customizada.
-
Saída token a token através da API de callback de alto nível.
-
Um chat de dois turnos usando um template embutido.
-
REPL multi-turno interativo com
/clear,/save, tratamento de EOF. -
Imagem multimodal + texto com a API de alto nível
MtmdContext. -
API mtmd.h de baixo nível: bitmap → chunks → eval.
-
Extração de embedding com normalização L2.
-
BGE-small + ranqueamento cosseno sobre um corpus pequeno.
-
Demo de reranker bi-encoder.
-
ToolDefinition+ cinco formatosToolParser. -
JSON-Schema → GBNF → saída JSON restrita.
-
Decodificação por rascunho com
PromptLookupDecoding.
Runner de um comando¶
Cada exemplo é empacotado por examples/run.sh, que baixa o modelo
certo na primeira execução e é idempotente depois:
./examples/run.sh quickstart # ~400 MB — apenas texto, menor demo
./examples/run.sh chat # mesmo modelo — REPL interativo
./examples/run.sh stateful_chat # REPL multi-turno com /clear, /save
./examples/run.sh embeddings # ~30 MB — embedding BGE-small
./examples/run.sh embedding_search # BGE-small + ranqueamento cosseno
./examples/run.sh reranker # pontuação bi-encoder
./examples/run.sh vision gemma4 # ~5 GB — chat de visão + texto
./examples/run.sh vision lfm-vl # ~1 GB — modelo de visão menor
./examples/run.sh mtmd gemma4 # API mtmd.h bruta
./examples/run.sh tools # function calling
./examples/run.sh structured # gramática JSON-schema
./examples/run.sh speculative # decodificação por rascunho prompt-lookup
Sem argumentos, o script lista cada exemplo disponível.
Tabela completa¶
| Exemplo | Modelo | Tamanho | O que mostra |
|---|---|---|---|
quickstart |
Qwen2.5-0.5B-Instruct-GGUF |
~400 MB | Carrega → tokeniza → completa → chat → FIM |
simple |
qualquer GGUF de texto | varia | Completion de texto simples |
streaming |
mesmo do quickstart |
~400 MB | Saída de alto nível token a token |
chat |
GGUF instruct | varia | Chat one-shot com template embutido |
stateful_chat |
mesmo do quickstart |
~400 MB | REPL com histórico crescente, /clear, /save |
vision |
Gemma 4 ou LFM2.5-VL + mmproj | ~1–5 GB | Chat de visão de alto nível MtmdContext |
mtmd |
Gemma 4 + mmproj | ~5 GB | API mtmd.h bruta: bitmap → chunks → eval |
embeddings |
bge-small-en-v1.5-gguf |
~30 MB | Extração de embedding + L2 norm |
embedding_search |
bge-small-en-v1.5-gguf |
~30 MB | Busca semântica com ranqueamento cosseno |
reranker |
GGUF de embedding | varia | Ranqueamento bi-encoder por similaridade cosseno |
tools |
GGUF instruct ciente de tools | varia | ToolDefinition + 5 formatos ToolParser |
structured |
qualquer GGUF de texto | varia | json_schema_grammar() + parsing JSON |
speculative |
qualquer GGUF de texto | varia | Rascunho n-gram prompt-lookup |
Passando um modelo diferente¶
Cada exemplo aceita o caminho do GGUF como primeiro argumento posicional:
Exemplos de visão recebem <text.gguf> <mmproj.gguf> <image>.
Adicionando um novo exemplo¶
O boilerplate para um novo crate de exemplo é ~15 linhas:
[package]
name = "meu_exemplo"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
publish = false
[[bin]]
name = "run_meu_exemplo"
path = "src/main.rs"
[dependencies]
llama-crab = { path = "../../llama-crab", version = "0.1.0" }
anyhow = "1"
use anyhow::Result;
use llama_crab::{Llama, LlamaParams};
fn main() -> Result<()> {
let mut llama = Llama::load(LlamaParams::new("models/seu.gguf"))?;
let resp = llama.create_completion("Olá!", 32)?;
print!("{}", resp.text);
Ok(())
}
Depois adicione examples/meu_exemplo à lista members = [...]
no Cargo.toml raiz e uma linha à tabela desta página.
Por onde ir a partir daqui¶
- Quickstart — o menor programa ponta a ponta.
- Streaming — a requisição mais comum de desenvolvedores de apps.
- Visão (mtmd) — se você quer alimentar imagens a um modelo.
- Receita de chatbot — quando um único exemplo não é suficiente e você precisa montar um agente completo.