Provider coverage

Which providers and call styles the SDK records, including the gaps. Coverage is uneven and this page is the matrix.

Coverage is uneven. This page lists what is and is not recorded.

Coverage matrix

ProviderSyncAsyncStreamingErrors
AnthropicYesYesYesYes
OpenAI chatYesYesYesYes
OpenAI embeddingsYesYesn/aYes
Google google-genaiYesNoNoYes
Google google-generativeaiYesYesNoYes
AWS BedrockYesNoNoYes
MistralYesNoNoYes
CohereYesNoNoYes
Vertex AIYesNoNoYes
OpenAI-compatibleYesYesYesYes

Anthropic and OpenAI are fully covered. They also account for the majority of usage, which is why they were implemented first, and they are verified against the live APIs on every release rather than only against mocks.

Everything else covers the synchronous path. Async Gemini and streaming Mistral calls are not recorded. Use record() to report them.

What a recorded call contains

Model, provider, real token counts from the provider response, computed cost, latency, your attribution, and the file and line that made the call.

A recorded error contains the exception's type name at zero cost, so failure rates are visible per agent and per model.

Providers priced in the catalog

The catalog covers more providers than the matrix above, because OpenAI-compatible vendors use the OpenAI client:

Anthropic, OpenAI, Google (Gemini), Vertex AI, AWS Bedrock, Mistral, Cohere, Groq, DeepSeek, xAI, Together, Fireworks, Perplexity.

A model outside the catalog is still recorded and priced with a fallback estimate. See Cost and pricing.

No provider configuration

There is no per-provider setup. init() imports whatever is installed and patches it. Missing libraries are skipped. To check what was patched:

capsera.get_interception_report()

patched means recorded, not-installed means the library is absent, and unpatched means init() has not run yet.

Two limitations that apply to all providers

Embeddings bypass routing and budgets. They are recorded and costed, but skip routing, pre-call budget enforcement, and prompt analysis. This matters most for indexing jobs.

Streaming depends on how the response is consumed. Token counts only exist once a stream ends, so an abandoned stream is not recorded, and Anthropic streams iterated without a context manager are a known gap. See Troubleshooting.