Setup
Rodar a CLI
Indexe uma pasta e faça uma pergunta — sem navegador, sem servidor.
A CLI é o jeito mais rápido de provar que o pipeline funciona. Pega uma pasta, monta um brain temporário, faz uma pergunta, imprime a resposta com citações e apaga o brain na saída.
Rodar
bun run cli examples/sample-brain "Why does LocalLens use QWEN3_1_7B_INST_Q4?"Uma execução bem-sucedida fica assim:
LocalLens uses QWEN3_1_7B_INST_Q4 because it offers a strong balance of answer
quality and local resource use [1]. A 600M fallback is wired in for slimmer
machines [2].
Sources:
- locallens.md#0
- qvac-notes.md#1A primeira execução pausa por vários segundos enquanto os modelos de chat e embedding carregam. Execuções seguintes são bem mais rápidas — os pesos ficam em cache.
O que acontece por baixo dos panos
src/cli.ts é curto de propósito. Lê uma vez e você tem o
workflow inteiro:
const app = new LocalLensApp();
let brain: Brain | undefined;
try {
brain = await app.createBrainFromFolder({
name: folderPath.split(/[\\/]/).filter(Boolean).at(-1) ?? "cli-brain",
folderPath,
});
const result = await app.askBrain(brain.id, question);
console.log(`\n${result.answer}\n`);
if (result.citations.length > 0) {
console.log("Sources:");
for (const citation of result.citations) {
console.log(`- ${citation.relativePath}#${citation.chunkIndex}`);
}
}
} finally {
if (brain) await app.deleteBrain(brain.id).catch(() => undefined);
await app.close();
}Três coisas para destacar:
- O brain é apagado no
finally. A CLI é one-shot. Não deixa entrada JSON para trás. O caminho do navegador guarda brains por aí. Essa é a diferença real entre os dois pontos de entrada. await app.close()importa. Ele desmonta o QVAC. Pula isso e o processo do modelo pode ficar pendurado em background.- O nome do brain vem do nome da pasta. Só o suficiente para manter o JSON store legível enquanto o brain existe brevemente.
Fazer várias perguntas
A CLI reindexa toda vez. Se você quer disparar várias perguntas para a mesma pasta, use o app no navegador. Ele mantém brains entre requests.
Erros que você pode ver
Folder not found— o caminho que você passou não é um diretório. Confere a grafia e se você está na raiz do repositório.Choose a folder with supported text files— a pasta existe mas nada dentro dela qualifica. Extensões suportadas ficam emsrc/files.ts. Arquivos binários e arquivos acima de 2 MB são pulados.- Uma pausa longa seguida de erro de modelo — o modelo de 1.7B falhou ao carregar. O gateway cai para 600M automaticamente. Se isso também falhar, provavelmente você precisa de mais memória.