Build, share, test, and rebuild hosted knowledge bases.
Kendr Cloud KBs expose the hosted RAG lifecycle behind a stable API: estimate, create, index, inspect artifacts, test retrieval, share access, rebuild, and delete. Every KB records its pipeline config, model map, vector dimensions, run history, retained artifacts, evaluations, and explainable retrieval scores.
Pipeline
The managed pipeline is Sources to Extraction JSON to Cleaning to Chunking to Embeddings to Kendr hosted vector DB to Retrieval to Reranking to Answer.
Configuration model
Configure the hosted pipeline with pipeline_config. Beginners can omit most fields and use Kendr defaults. Advanced callers can tune extraction, cleaning, chunking, embeddings, vector storage, retrieval, reranking, answer model, and artifact retention.
| Area | Key fields | Why it matters |
|---|---|---|
| Artifacts | artifact_retention: none, preview, or full | Controls whether extraction, cleaning, chunking, and embedding summaries can be inspected later. |
| Cleaning | presets, ordered regex rules | Removes repeated headers, footers, empty lines, and noisy boilerplate before chunking. |
| Chunking | strategy, target_words, min_words, max_words, overlap_words | Determines chunk quality, recall, duplication, and reindex requirements when changed. |
| Embeddings | provider, model, dimensions, mode | Defines the vector dimensions and the model identity stored in the KB model map. |
| Vector store | provider: kendr-cloud, collection metadata, dimension metadata | Routes chunks into Kendr managed storage and tells clients when a dimension-changing rebuild is required. |
| Retrieval | top_k, score_threshold, hybrid_vector_weight, source_cap, mmr | Controls how many chunks are retrieved, how hybrid scores are balanced, and how repetitive sources are capped. |
| Reranker and answer | reranker.mode, answer_model.provider, answer_model.model | Makes it visible which model or fallback is responsible for ordering evidence and producing the final answer. |
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /api/kb/cloud | Lists hosted KBs visible to the caller. |
| POST | /api/kb/cloud/estimate | Estimates indexing, storage, and source-size credits before creation. |
| POST | /api/kb/cloud | Creates a KB, saves pipeline config and access policy, and queues indexing. |
| POST | /api/kb/cloud/{kb_id}/test | Runs retrieval and returns hits, vector score, lexical score, rerank score, diagnostics, and answer text. |
| POST | /api/kb/cloud/{kb_id}/rebuild | Queues a rebuild from a selected stage after config, source, chunking, or embedding changes. |
| POST | /api/kb/cloud/{kb_id}/access | Updates team, user, link, and source-access metadata. |
| GET | /api/kb/cloud/{kb_id}/pipeline/artifacts | Returns retained extraction, cleaning, chunking, embedding, and storage artifacts. |
| GET | /api/kb/cloud/{kb_id}/runs | Returns pipeline run history with status, timings, warnings, and errors. |
| GET | /api/kb/cloud/{kb_id}/evaluations | Returns previous test queries and selected retrieval hits. |
| DELETE | /api/kb/cloud/{kb_id} | Deletes the hosted KB, sources, chunks, artifacts, runs, evaluations, and access grants. |
Example
This JavaScript example creates a team-visible KB, stores chunks in Kendr hosted vector storage, and runs a retrieval test with explainable scoring.
const kb = await client.createCloudKnowledgeBase({
name: 'Support runbooks',
sources: [{
kind: 'file',
label: 'Retention playbook',
value: 'retention-playbook.md',
content: 'Revenue retention improved after renewal handoff changes.'
}],
pipeline_config: {
artifact_retention: 'preview',
chunking: { strategy: 'semantic', target_words: 180, overlap_words: 30 },
embeddings: {
provider: 'kendr-managed',
model: 'kendr-managed-hash-embedding-v1',
dimensions: 128
},
vector_store: { provider: 'kendr-cloud' },
retrieval: { algorithm: 'hybrid', top_k: 8, hybrid_vector_weight: 0.65 },
reranker: { mode: 'heuristic' }
},
access_policy: { visibility: 'team', role: 'viewer' }
});
const result = await client.testCloudKnowledgeBase(kb.knowledge_base.id, {
query: 'What changed retention?',
limit: 4,
include_answer: true
});
console.log(result.hits.map(hit => ({
title: hit.title,
vectorScore: hit.vector_score,
lexicalScore: hit.lexical_score,
rerankScore: hit.rerank_score,
finalScore: hit.final_score
})));