Skip to main content

KATE SDK — auto-eval, observability, and knowledge marketplace for AI agents

Project description

PyPI License Python

KATE SDK

Auto-eval and observability for AI agents. Trace every LLM call, run evaluations, and catch regressions before they ship.

Install

pip install projectkate

Optional instrumentation extras

pip install projectkate[openai]                # OpenAI
pip install projectkate[anthropic-instrument]  # Anthropic
pip install projectkate[langchain]             # LangChain / LangGraph
pip install projectkate[mistral]               # Mistral
pip install projectkate[vertexai]              # Vertex AI
pip install projectkate[google-genai]          # Google GenAI
pip install projectkate[crewai]                # CrewAI
pip install projectkate[all]                   # All supported providers

Quick Start

Trace mode — instrument your agent

import projectkate

# Initialize — reads KATE_API_URL, KATE_API_KEY, KATE_AGENT_ID from env
projectkate.init()

@projectkate.trace("summarize")
def summarize(text: str) -> str:
    return client.messages.create(
        model="claude-sonnet-4-20250514",
        messages=[{"role": "user", "content": f"Summarize: {text}"}],
    ).content[0].text

async with projectkate.run():
    result = summarize("Today's top news stories...")
    print(result)

Management client — programmatic platform access

from projectkate import KateClient

async with KateClient(api_key="kate_...") as kate:
    # List your agents
    agents = await kate.agents.list()

    # Check eval results for a run
    evals = await kate.evals.get_run_evals(run_id="...")

    # Publish an artifact
    await kate.artifacts.publish(artifact_id="...")

    # Check wallet balance
    balance = await kate.wallet.get_balance()

Tools — discover and use marketplace tools

KATE agents can discover and execute tools from the marketplace. The SDK provides a tool loop that handles the LLM ↔ tool-call cycle automatically.

Agentic tool loop

Wire up your LLM client and let the SDK handle tool discovery, execution, and chaining:

import projectkate
from openai import AsyncOpenAI

projectkate.init()
llm = AsyncOpenAI()

messages = [
    {"role": "system", "content": "You are a helpful assistant with access to tools."},
    {"role": "user", "content": "Find SEO keywords for 'AI observability'"},
]

result = await projectkate.tool_loop(
    llm,
    model="gpt-4o",
    messages=messages,
    max_rounds=10,
)

print(result.content)          # Final LLM response
print(result.tool_calls_made)  # Number of tool calls executed

Works with both OpenAI and Anthropic clients — the SDK detects the provider automatically.

Local tools

You can register your own tools alongside marketplace tools. The SDK merges them and routes calls to the right handler:

from projectkate import LocalTool

def get_current_date() -> str:
    from datetime import date
    return date.today().isoformat()

result = await projectkate.tool_loop(
    llm,
    model="gpt-4o",
    messages=messages,
    local_tools=[
        LocalTool(
            name="get_current_date",
            description="Returns today's date in ISO format",
            parameters={"type": "object", "properties": {}},
            fn=get_current_date,
        ),
    ],
)

Local tools run in-process. Async functions are supported.

Direct tool management

Use the management client for lower-level control:

async with KateClient(api_key="kate_...") as kate:
    # List tools available to your agent
    tools = await kate.tools.list(agent_id="...")

    # Execute a specific tool
    result = await kate.tools.execute(
        agent_id="...",
        tool_name="seo_keyword_research",
        input_data={"query": "AI observability"},
    )
    print(result.output)

    # Check credential status for subscribed tools
    statuses = await kate.tools.status(agent_id="...")

Local Eval (no server needed)

Run evaluations locally against your agent with zero infrastructure:

from projectkate.local import LocalEvalRunner

runner = LocalEvalRunner(agent_fn=my_agent)
results = await runner.run(test_cases=[
    {"input": "Summarize the news", "expected": "A concise summary..."},
])
runner.print_results(results)

Documentation

  • Docs — guides, API reference, and examples

License

Apache 2.0 — see LICENSE.

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

projectkate-0.3.0.tar.gz (43.2 kB view details)

Uploaded Source

Built Distribution

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

projectkate-0.3.0-py3-none-any.whl (42.5 kB view details)

Uploaded Python 3

File details

Details for the file projectkate-0.3.0.tar.gz.

File metadata

  • Download URL: projectkate-0.3.0.tar.gz
  • Upload date:
  • Size: 43.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.5

File hashes

Hashes for projectkate-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c62cf5c76f53064fdffe4d6ff16a389648498c6c78ef40f379250dcfcff54e16
MD5 b0d9f004816f77e729f0daac8672b4c5
BLAKE2b-256 4afa5f202c279d668eef0d2a1083bf059075511407012e7b90ce609ce0ae0334

See more details on using hashes here.

File details

Details for the file projectkate-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: projectkate-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 42.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.5

File hashes

Hashes for projectkate-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 89e4fb99d701049a5f500c609a50072fc18fa2dc59e97f78476e0ce28ea8b32d
MD5 5b392a4a4dc2c3ba7617920d788abd5c
BLAKE2b-256 a4e09ffbd29aed78c48456f02da10e05f1a6abc61e9e4fda9e39fca2c65d0771

See more details on using hashes here.

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