WeKnora: grounded answers, scoped memory and deliberate operations
WeKnora cost and performance: separate ingestion, answer work and memory maintenance
Plan measurements for model calls, queues, semantic recall and vector backfill without converting source constants into speed guarantees.
What you will learn
- Measure stages that spend different resources
- Semantic recall trades coverage against an extra dependency
- Backfilling and column synchronization have different costs
Before you start
- Basic HTTP and container concepts
- Understanding of documents, passages and model providers
Separate ingestion, retrieval, answer support and memory scope, then design an evidence-based acceptance exercise.
Key takeaways
- Ingestion, answers and maintenance need separate cost records.
- A query-embedding timeout is not an end-to-end latency guarantee.
- Vector backfill and searchable-column synchronization are different jobs.
Measure stages that spend different resources
Ingestion may include parsing, chunking, embedding and optional enrichment; answering may include rewriting, retrieval, reranking and generation. Agent tools, Wiki maintenance and personal-memory extraction add other work. A single response-time number hides which component created the cost.
Use a fixed synthetic corpus and repeated direct, paraphrased and unanswerable questions. Record parsing completion, retrieval support, first useful answer, full completion and actual provider usage separately. No request latency, cost per answer or throughput was measured for this series.
Semantic recall trades coverage against an extra dependency
The vector service bounds query embedding with a two-second timeout and falls back to lexical matching when semantic matching is unavailable. That is a source-level dependency timeout, not a two-second guarantee for the full response. Other retrieval, queue and generation work remains.
Memory configuration pins its own embedding model rather than silently picking a knowledge base’s model. Model identity and dimensions must stay compatible with stored vectors. When diagnosing missing recall, record the ranking mode, skip reason and outside-pool hits instead of assuming that enabling a checkbox made every stored item searchable.
Backfilling and column synchronization have different costs
The source caps missing-vector backfill at 200 items per maintenance run. That path calls an embedding model and stops a run when embedding fails. Moving already stored vectors into the searchable column is separate synchronization, capped at 2000 per run and requiring no new model call.
Database ranking can avoid transferring every stored vector to the app; the fallback does transfer and score a bounded scope. Do not turn this architectural distinction into an invented speedup percentage. Monitor backlog age and sample relevance while comparing configurations, because a faster response that misses the relevant memory is not an equivalent result.
Decision guide
| Criterion | Option A | Option B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Implementation steps
- 1
Fix corpus and question categories.
- 2
Record per-stage timing and actual provider usage.
- 3
Observe recall mode and missing-vector backlog.
- 4
Compare quality as well as latency.
Copy-ready example
{
"measurementPlan": true,
"ingestionMs": null,
"answerMs": null,
"providerCost": null,
"rankingMode": null,
"outsidePoolHits": null,
"missingEmbeddings": null,
"columnSyncBacklog": null,
"benchmarkExecuted": false
}Frequently asked questions
Does the two-second constant cap the whole answer?
No. It bounds the query-side embedding call.
Does syncing an existing vector require embedding it again?
The inspected synchronization path moves existing vector data without a new model call.
Sources
- WeKnora / README.mdSource checked 2026-09-14
- WeKnora / internal/application/service/memory/vector.goSource checked 2026-09-14
- WeKnora / internal/application/repository/memory_vector.goSource checked 2026-09-14
- WeKnora / website-docs/03-features/23-memory.mdSource checked 2026-09-14