LocalLens
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#1

A 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:

  1. 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.
  2. await app.close() importa. Ele desmonta o QVAC. Pula isso e o processo do modelo pode ficar pendurado em background.
  3. 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 em src/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.

On this page