Providers
AgentKavach supports OpenAI, Anthropic, Google, and Mistral out of the box. The same guard.create() method works across all providers.
OpenAI #
Standard Call
from agentkavach import AgentKavach, Budget
guard = AgentKavach(
provider="openai",
api_key="cg_...",
llm_key="sk-...",
budget=Budget.daily(50),
)
response = guard.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)Native Namespace
If you prefer the OpenAI-native calling convention, AgentKavach exposes it directly:
response = guard.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)Streaming
stream = guard.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Write a poem"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Supported Models
gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-4, gpt-3.5-turbo, o1, o1-mini, o3-mini, o3, o4-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-4.5-preview, codex-mini
ℹ️ Local token counting
Anthropic #
Standard Call
from agentkavach import AgentKavach, Budget
guard = AgentKavach(
provider="anthropic",
api_key="cg_...",
llm_key="sk-ant-...",
budget=Budget.daily(50),
)
response = guard.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Summarize this report"}],
max_tokens=1024,
)Native Namespace
response = guard.messages.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Summarize this report"}],
max_tokens=1024,
)⚠️ max_tokens required
max_tokens parameter on every call. Omitting it will raise an error.Supported Models
claude-opus-4-0, claude-opus-4-6, claude-sonnet-4-0, claude-sonnet-4-6, claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022, claude-3-opus-20240229, claude-3-haiku-20240307, claude-haiku-4-5
Model Aliases
| Alias | Resolves To |
|---|---|
claude-opus | claude-opus-4-6 |
claude-sonnet | claude-sonnet-4-6 |
claude-haiku | claude-haiku-4-5 |
ℹ️ Token counting
Google #
Standard Call
from agentkavach import AgentKavach, Budget
guard = AgentKavach(
provider="google",
api_key="cg_...",
llm_key="AIza...",
budget=Budget.monthly(300),
)
response = guard.create(
model="gemini-2.0-flash",
contents="Generate a project outline",
)Native Namespace
response = guard.generate_content(
model="gemini-2.0-flash",
contents="Generate a project outline",
)⚠️ contents, not messages
contents instead of messages. Using the wrong parameter name will raise an error.Supported Models
gemini-2.0-flash, gemini-1.5-pro, gemini-1.5-flash, gemini-2.5-pro, gemini-2.5-flash
Model Aliases
| Alias | Resolves To |
|---|---|
gemini-pro | gemini-2.5-pro |
gemini-flash | gemini-2.5-flash |
ℹ️ Token counting
Mistral #
Standard Call
from agentkavach import AgentKavach, Budget
guard = AgentKavach(
provider="mistral",
api_key="cg_...",
llm_key="your-mistral-api-key",
budget=Budget.daily(50),
)
response = guard.create(
model="mistral-large-latest",
messages=[{"role": "user", "content": "Hello!"}],
)Native Namespace
Mistral uses an OpenAI-compatible format. The native namespace maps to client.chat.complete():
response = guard.chat.complete(
model="mistral-large-latest",
messages=[{"role": "user", "content": "Hello!"}],
)Streaming
stream = guard.create(
model="mistral-large-latest",
messages=[{"role": "user", "content": "Write a poem"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Supported Models
mistral-large-latest, mistral-large-2411, mistral-small-latest, mistral-small-2503, codestral-latest, pixtral-large-latest, ministral-8b-latest, mistral-embed
Model Aliases
| Alias | Resolves To |
|---|---|
mistral-large | mistral-large-2411 |
mistral-small | mistral-small-2503 |
codestral | codestral-latest |
pixtral-large | pixtral-large-latest |
ministral-8b | ministral-8b-latest |
ℹ️ Token counting
Cross-Provider Comparison #
| Feature | OpenAI | Anthropic | Mistral | |
|---|---|---|---|---|
| Parameter name | messages | messages | contents | messages |
| Namespace | guard.chat.completions.create() | guard.messages.create() | guard.generate_content() | guard.chat.complete() |
| Unified API | guard.create() | guard.create() | guard.create() | guard.create() |
| Token counting | Local (~0.1ms) | API call (~150ms) | API call (~150ms) | Local (~0.1ms) |
| Streaming | stream=True | stream=True | stream=True | stream=True |
| LLM key env var | OPENAI_API_KEY | ANTHROPIC_API_KEY | GOOGLE_API_KEY | MISTRAL_API_KEY |