Skip to content

Knowledge Module

SDK reference for vector storage and semantic search

The knowledge module provides vector storage and semantic search for RAG.

from bifrost import knowledge

Store a document with automatic embedding.

async def store(
content: str,
*,
namespace: str = "default",
key: str | None = None,
metadata: dict[str, Any] | None = None,
scope: str | None = None,
) -> str
ParameterTypeDescription
contentstrDocument text to store
namespacestrNamespace for organization (default: “default”)
keystrUnique key for upsert behavior
metadatadictArbitrary metadata
scopestr | NoneOrganization scope (see below)

Scope parameter:

  • None (default): Use execution context’s organization
  • Org UUID string: Target specific organization
  • "global": Store at platform-level (visible to all orgs)

Document ID string.

doc_id = await knowledge.store(
"Our refund policy allows returns within 30 days.",
namespace="policies",
key="refund-policy",
metadata={"version": "2.0"}
)

Batch store multiple documents.

async def store_many(
documents: list[dict[str, Any]],
*,
namespace: str = "default",
scope: str | None = None,
) -> list[str]
ParameterTypeDescription
documentslist[dict]List of {content, key?, metadata?}
namespacestrNamespace for all documents
scopestr | NoneOrganization scope (see above)
docs = [
{"content": "Doc 1...", "key": "doc-1"},
{"content": "Doc 2...", "metadata": {"type": "faq"}}
]
ids = await knowledge.store_many(docs, namespace="docs")

Semantic search across documents.

async def search(
query: str,
*,
namespace: str | list[str] = "default",
limit: int = 5,
min_score: float | None = None,
metadata_filter: dict[str, Any] | None = None,
fallback: bool = True,
) -> list[KnowledgeDocument]
ParameterTypeDescription
querystrSearch query
namespacestr | listNamespace(s) to search
limitintMax results (default: 5)
min_scorefloatMinimum similarity score (0-1)
metadata_filterdictFilter by metadata fields
fallbackboolAlso search global scope (default: True)

List of KnowledgeDocument objects sorted by relevance.

results = await knowledge.search(
"refund policy",
namespace=["policies", "faq"],
limit=10
)
for doc in results:
print(f"{doc.score:.2f}: {doc.content[:100]}")
# With metadata filter
results = await knowledge.search(
"password reset",
namespace="tickets",
metadata_filter={"status": "open"},
min_score=0.7
)

List all namespaces with document counts.

async def list_namespaces(
scope: str | None = None,
include_global: bool = True,
) -> list[NamespaceInfo]
ParameterTypeDescription
scopestr | NoneOrganization scope (see above)
include_globalboolInclude global namespaces (default: True)
namespaces = await knowledge.list_namespaces()
for ns in namespaces:
print(f"{ns.namespace}: {ns.scopes['total']} docs")

Get a document by key.

async def get(
key: str,
*,
namespace: str = "default",
scope: str | None = None,
) -> KnowledgeDocument | None
ParameterTypeDescription
keystrDocument key
namespacestrNamespace to search in
scopestr | NoneOrganization scope (see above)
doc = await knowledge.get("refund-policy", namespace="policies")
if doc:
print(doc.content)

Delete a document by key.

async def delete(
key: str,
*,
namespace: str = "default",
scope: str | None = None,
) -> bool
ParameterTypeDescription
keystrDocument key to delete
namespacestrNamespace containing the document
scopestr | NoneOrganization scope (see above)
deleted = await knowledge.delete("ticket-123", namespace="tickets")

Delete all documents in a namespace.

async def delete_namespace(
namespace: str,
*,
scope: str | None = None,
) -> int
ParameterTypeDescription
namespacestrNamespace to delete
scopestr | NoneOrganization scope (see above)

Number of documents deleted.

count = await knowledge.delete_namespace("old-data")
print(f"Deleted {count} documents")
class KnowledgeDocument(BaseModel):
id: str
namespace: str
content: str
metadata: dict | None
score: float | None # Similarity score (0-1)
organization_id: str | None
key: str | None
created_at: datetime | None
class NamespaceInfo(BaseModel):
namespace: str
scopes: dict # {"global": N, "org": N, "total": N}

Documents can be scoped:

ScopeDescription
orgOnly visible to the storing organization (default)
globalVisible to all organizations

Search returns both global and org-specific documents automatically when fallback=True.