Knowledge
Upload, monitor, search, and delete AgentOS knowledge content.
"""Upload, monitor, search, and delete AgentOS knowledge content.
Upload processing is asynchronous, so this example polls the concrete
content-status endpoint before listing and searching.
Prerequisites: start ``_server.py`` and set OPENAI_API_KEY.
Run: .venvs/demo/bin/python cookbook/05_agent_os/03_python_client/04_knowledge.py
Try: watch processing move from processing to completed before search runs.
"""
import asyncio
from agno.client import AgentOSClient
from agno.os.routers.knowledge.schemas import ContentStatus
BASE_URL = "http://localhost:7778"
# ---------------------------------------------------------------------------
# Create the Client
# ---------------------------------------------------------------------------
async def wait_until_processed(client: AgentOSClient, content_id: str) -> ContentStatus:
"""Poll an uploaded content item until processing reaches a terminal state."""
for _ in range(60):
status = await client.get_knowledge_content_status(content_id)
print(f"Content status: {status.status.value}")
if status.status is ContentStatus.COMPLETED:
return status.status
if status.status is ContentStatus.PARTIAL:
print(f"Partial ingestion: {status.status_message}")
return status.status
if status.status is ContentStatus.FAILED:
raise RuntimeError(status.status_message or "Knowledge processing failed")
await asyncio.sleep(0.5)
raise TimeoutError("Knowledge content did not finish processing")
async def manage_knowledge() -> None:
"""Exercise the full knowledge content lifecycle."""
client = AgentOSClient(base_url=BASE_URL)
uploaded = await client.upload_knowledge_content(
name="Python client notes",
description="Small document uploaded by the Python client cookbook.",
text_content=(
"AgentOS exposes agents, teams, workflows, sessions, memory, "
"knowledge, and evaluations through one HTTP API."
),
metadata={"source": "03_python_client"},
)
print(f"Upload accepted: {uploaded.id}")
await wait_until_processed(client, uploaded.id)
content = await client.list_knowledge_content()
print(f"Knowledge items: {len(content.data)}")
results = await client.search_knowledge(
query="What does AgentOS expose?",
limit=5,
)
print(f"Search results: {len(results.data)}")
for result in results.data:
print(f"- {result.content}")
if result.reranking_score is not None:
print(f" Reranking score: {result.reranking_score}")
deleted = await client.delete_knowledge_content(uploaded.id)
print(f"Deleted content: {deleted.id}")
# ---------------------------------------------------------------------------
# Run the Example
# ---------------------------------------------------------------------------
if __name__ == "__main__":
asyncio.run(manage_knowledge())Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U "agno[os]" chromadb openaiExport your API keys
export OPENAI_API_KEY="your_openai_api_key_here"Clone Agno
Clone the pinned Agno source and run the remaining commands from its root:
git clone https://github.com/agno-agi/agno.git
cd agno
git checkout 8f36eaf2d18e91afa7b327eec66a3cd3685dcb87Start the AgentOS server
Open another terminal in the parent directory where .venv and the cloned agno directory are siblings, then start the shared server on port 7778:
source .venv/bin/activate
export OPENAI_API_KEY="your_openai_api_key_here"
cd agno
python cookbook/05_agent_os/03_python_client/_server.pyRun the example
Run the example from the repository root:
python cookbook/05_agent_os/03_python_client/04_knowledge.pyFull source: cookbook/05_agent_os/03_python_client/04_knowledge.py