Skip to main content

Pydantic AI tool adapters for Copass — drop-in discover/interpret/search tools for Pydantic AI agents

Project description

copass-pydantic-ai

Copass retrieval as Pydantic AI tools. The LLM picks discover (menu of relevant items) or search (synthesized answer) — you don't write the tool-calling loop. interpret is exposed for back-compat but legacy; prefer search for drill-in.

Prerequisites

Install the Copass CLI and bootstrap your account:

npm install -g @copass/cli
copass login                             # email OTP
copass setup                             # creates a sandbox, writes .olane/refs.json
copass apikey create --name my-app       # prints an olk_... key — shown once, save it
Output Use as
olk_... key printed by copass apikey create api_key on CopassRetrievalClient (typically via COPASS_API_KEY env)
sandbox_id in ./.olane/refs.json sandbox_id on copass_tools (typically via COPASS_SANDBOX_ID env)

Ingest some content so retrieval has something to return:

copass ingest path/to/file.md

Install

pip install copass-pydantic-ai pydantic-ai

Requires Python 3.10+.

Quickstart

import os
from pydantic_ai import Agent
from copass_pydantic_ai import CopassRetrievalClient, copass_tools

# COPASS_API_KEY is the olk_... token from `copass apikey create`.
# COPASS_SANDBOX_ID is from .olane/refs.json (written by `copass setup`).
client = CopassRetrievalClient(
    api_url=os.environ.get("COPASS_API_URL", "https://ai.copass.id"),
    api_key=os.environ["COPASS_API_KEY"],
)
discover, interpret, search = copass_tools(
    client=client,
    sandbox_id=os.environ["COPASS_SANDBOX_ID"],
)

agent = Agent(
    "anthropic:claude-opus-4-7",
    tools=[discover, interpret, search],
)
result = await agent.run("what do we know about checkout retry behavior?")
print(result.output)

If it worked, the answer cites concepts from whatever you ingested. Run twice with a shared window (see below) — the second call won't re-surface items the agent already used.

Why this, not the raw API

  • LLM chooses the retrieval shape. Three tools; the model picks the right one per turn.
  • Pydantic AI-native. Type hints become the schema; docstrings become descriptions. No decorator dance.
  • Trimmed responses. Tools return only what the model needs — no sandbox/query echoes.

Tools

Tool When the LLM calls it
discover "What's relevant?" — ranked menu of pointers
search "Tell me about X" / "Answer this." — synthesized answer (canonical drill-in)
interpret Legacy — brief pinned to canonical_ids. Prefer search for drill-in.

Window-aware retrieval

Pass any object with a get_turns() method:

class MyWindow:
    def __init__(self):
        self.turns: list[dict[str, str]] = []
    def get_turns(self) -> list[dict[str, str]]:
        return self.turns

window = MyWindow()
discover, interpret, search = copass_tools(
    client=client,
    sandbox_id=project_refs["sandbox_id"],
    window=window,
)

Every retrieval call forwards window.get_turns() as history so the server excludes already-seen content.

Low-level client

If you don't want the Pydantic AI wrapping, CopassRetrievalClient is a minimal async httpx client you can use directly:

menu = await client.discover("sb_...", query="...")
brief = await client.interpret("sb_...", query="...", items=[["cid1", "cid2"]])
answer = await client.search("sb_...", query="...")

Related

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

copass_pydantic_ai-1.4.4.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

copass_pydantic_ai-1.4.4-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file copass_pydantic_ai-1.4.4.tar.gz.

File metadata

  • Download URL: copass_pydantic_ai-1.4.4.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for copass_pydantic_ai-1.4.4.tar.gz
Algorithm Hash digest
SHA256 7c3577bad8c99432dff0c0107f7f804885a82df84ba30c5ed54ede32bfd37887
MD5 c0d3189d97d446e37e3a1e68f466ff1a
BLAKE2b-256 a6e34962b9256c4b38d642949236e23f6841cabc008dd33c424d38391d61f5ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for copass_pydantic_ai-1.4.4.tar.gz:

Publisher: release-python.yml on olane-labs/copass

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file copass_pydantic_ai-1.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for copass_pydantic_ai-1.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0482fb0ccb0f845c3a3b19c9a3f5f0d610a8bbe7de3ae1d17494234a2bac0bf3
MD5 25be04cbf0347639b640abcbeb675799
BLAKE2b-256 7fd560c0d316e7c449fe5a7f8254052f073b5fb3ecd4774d3e2910973d3e2e2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for copass_pydantic_ai-1.4.4-py3-none-any.whl:

Publisher: release-python.yml on olane-labs/copass

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page