RAG over private corpora
embed and the rag/db surface, with capability isolation between the retrieval layer and everything else.
The problem
Retrieval-augmented generation needs chunking, embedding, storage, and a guarded generation step. Teams often split retrieval (Python + pgvector) from generation (Node + OpenAI SDK), which complicates secret handling and makes "this component never saw the raw document" hard to argue.
Why Ecko
- embed builtin
- Embed text with the same provider configuration as
ai, without a separate embedding client library. - rag and db packages
- Vector search and document storage as first-class packages, composable with the same grant model as everything else.
- Split grants
- Retrieval with
grant [net, fs:read]; answer synthesis withgrant []reading only returned chunks.
In practice
import retrieve grant [net, fs:read]
import answer grant []
fn ask(q: str) -> str {
chunks = retrieve.search(q)
answer.from_chunks(chunks)
}
Try it on your workload.