Source code for taimoe.platform.resources.knowledge_bases

"""Knowledge bases resource for Taimoe Platform SDK."""

from __future__ import annotations

from typing import TYPE_CHECKING

from taimoe.platform.types.knowledge_base import KnowledgeBase, QueryResult

if TYPE_CHECKING:
    from taimoe.platform.client.client import TaimoeClient


[docs] class KnowledgeBasesResource: """Resource for interacting with knowledge base endpoints.""" def __init__(self, client: TaimoeClient) -> None: self._client = client
[docs] def list(self, team: str, org: str | None = None) -> list[KnowledgeBase]: """List knowledge bases for a team. Backend returns a bare array.""" org_name = org or self._client.org path = f"/api/v1/organizations/{org_name}/teams/{team}/knowledge-bases" items = self._client._request("GET", path) return [KnowledgeBase.model_validate(item) for item in items]
[docs] async def list_async(self, team: str, org: str | None = None) -> list[KnowledgeBase]: """List knowledge bases for a team asynchronously.""" org_name = org or self._client.org path = f"/api/v1/organizations/{org_name}/teams/{team}/knowledge-bases" items = await self._client._request_async("GET", path) return [KnowledgeBase.model_validate(item) for item in items]
[docs] def get(self, slug: str, org: str | None = None) -> KnowledgeBase: """Get a specific knowledge base by slug. Backend only exposes GET-by-UUID, so we list the team and filter. """ if "/" not in slug: raise ValueError(f"Invalid slug '{slug}'. Expected format 'team-slug/kb-slug'.") team, kb_slug = slug.split("/", 1) kbs = self.list(team=team, org=org) for kb in kbs: if kb.slug == kb_slug: return kb raise ValueError(f"Knowledge base '{slug}' not found.")
[docs] async def get_async(self, slug: str, org: str | None = None) -> KnowledgeBase: """Get a specific knowledge base asynchronously by slug.""" if "/" not in slug: raise ValueError(f"Invalid slug '{slug}'. Expected format 'team-slug/kb-slug'.") team, kb_slug = slug.split("/", 1) kbs = await self.list_async(team=team, org=org) for kb in kbs: if kb.slug == kb_slug: return kb raise ValueError(f"Knowledge base '{slug}' not found.")
[docs] def test_query(self, slug: str, query: str, org: str | None = None) -> QueryResult: """Test a query against a knowledge base using its slug.""" kb = self.get(slug=slug, org=org) team = slug.split("/", 1)[0] org_name = org or self._client.org path = f"/api/v1/organizations/{org_name}/teams/{team}/knowledge-bases/{kb.id}/test-query" payload = {"query": query} data = self._client._request("POST", path, json=payload) return QueryResult.model_validate(data)
[docs] async def test_query_async(self, slug: str, query: str, org: str | None = None) -> QueryResult: """Test a query against a knowledge base asynchronously using its slug.""" kb = await self.get_async(slug=slug, org=org) team = slug.split("/", 1)[0] org_name = org or self._client.org path = f"/api/v1/organizations/{org_name}/teams/{team}/knowledge-bases/{kb.id}/test-query" payload = {"query": query} data = await self._client._request_async("POST", path, json=payload) return QueryResult.model_validate(data)