actiongate-openai
Gate OpenAI function/tool calls through ActionGate primitives before execution.
pip install actiongate-openai
What it does
Sits between the model's tool_call and your function. Checks rate limits, budgets, and policies before the function runs. If any gate blocks, the function never executes.
Model → tool_call → GatedToolRunner.call() → your function
↓ (if blocked)
GateResult(allowed=False)
Quick start
from actiongate import Engine, Gate, Policy
from actiongate_openai import GatedToolRunner
engine = Engine()
runner = GatedToolRunner(actiongate=engine)
runner.register(
"search_web", search_fn,
gate=Gate("tools", "search_web", "agent:1"),
policy=Policy(max_calls=10, window=60),
)
# In your tool execution loop:
for tool_call in response.choices[0].message.tool_calls:
result = runner.call_from_openai(tool_call)
if result.allowed:
# send result.result back to model
else:
# send result.message as error
Works with both Chat Completions API and Responses API tool calls.
Add more gates
Each gate is optional. Install what you need:
pip install actiongate-openai[budget] # + spend control
pip install actiongate-openai[all] # + spend, policy, audit
from actiongate import Engine as AG, Gate, Policy
from budgetgate import Engine as BG, Ledger, Budget
from rulegate import Engine as RG, Rule, Ruleset, Context
from auditgate import Engine as Audit, Trail
from actiongate_openai import GatedToolRunner
from decimal import Decimal
def no_pii(ctx: Context) -> bool:
return "ssn" not in str(ctx.kwargs).lower()
runner = GatedToolRunner(
actiongate=AG(),
budgetgate=BG(),
rulegate=RG(),
auditgate=Audit(recorded_by="agent:1"),
)
runner.register(
"search_web", search_fn,
# Rate limit: 10 calls per minute
gate=Gate("tools", "search_web", "agent:1"),
policy=Policy(max_calls=10, window=60),
# Budget: $5 per hour
ledger=Ledger("openai", "search", "agent:1"),
budget=Budget(max_spend=Decimal("5.00"), window=3600),
cost=Decimal("0.01"),
# Policy: no PII in queries
rule=Rule("tools", "search_web", "agent:1"),
ruleset=Ruleset(predicates=(no_pii,)),
# Audit: log every decision
trail=Trail("tools", "search_web", "agent:1"),
)
Gates evaluate in order: ActionGate → BudgetGate → RuleGate → execute → AuditGate. First block stops the pipeline.
GateResult
Every call returns a GateResult:
result = runner.call("search_web", {"query": "latest news"})
result.allowed # bool
result.result # function return value (None if blocked)
result.blocked_by # "actiongate" | "budgetgate" | "rulegate" | None
result.message # human-readable block reason
result.decisions # dict of gate decisions for inspection
License
Apache-2.0. ActionGate and BudgetGate are Apache-2.0. RuleGate and AuditGate are BSL-1.1.
Metadata
Release files for actiongate-openai 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| actiongate_openai-0.2.0.tar.gz | 11.1 kB | Without provenance | Details for actiongate_openai-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| actiongate_openai-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for actiongate_openai-0.2.0-py3-none-any.whl |
Total release size: 21.5 kB
Release files / actiongate_openai-0.2.0.tar.gz
| Download URL | actiongate_openai-0.2.0.tar.gz |
|---|---|
| Size | 11.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2088e4dd35c5ffc043bc3bf6a36f1c653be1ea9249c5ee8001a8656bc328d085
|
|
BLAKE2b-256 checksum How to use checksums |
0741b59c7ab345ca395eaa1d7a6cb8f75197fffe63542947c97b3dd1986f074e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / actiongate_openai-0.2.0-py3-none-any.whl
| Download URL | actiongate_openai-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7bc5112dcf86db39e6858b4ab2c96aa85a0fc1dda5b30c22e4b0f2822d57a95a
|
|
BLAKE2b-256 checksum How to use checksums |
b35bada39a1442fbbcc04c97ded6c898ee6f6aca74558ae2b28e87e5e11a2c00
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Security for actiongate-openai 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.