from pikarc import AsyncPikarc, PikarcBlockedError
from openai import AsyncOpenAI
openai = AsyncOpenAI()
guard = AsyncPikarc(api_key="lg_...", base_url="http://localhost:8000")
try:
async with guard.run(user_id="alice", metadata={"agent": "support-bot"}) as run:
# Model call — guardrail-checked, tokens tracked
response = await run.model_call(
fn=lambda: openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Find recent orders"}],
),
model="gpt-4o",
token_extractor=lambda r: (
r.usage.prompt_tokens,
r.usage.completion_tokens,
),
)
# Tool call — guardrail-checked, duration tracked
orders = await run.tool_call(
fn=lambda: search_orders(user="alice", limit=10),
tool_name="search_orders",
input_data={"user": "alice", "limit": 10},
)
# Another model call — guardrails checked again
summary = await run.model_call(
fn=lambda: openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Find recent orders"},
{"role": "assistant", "content": response.choices[0].message.content},
{"role": "user", "content": f"Summarize: {orders}"},
],
),
model="gpt-4o",
token_extractor=lambda r: (
r.usage.prompt_tokens,
r.usage.completion_tokens,
),
)
except PikarcBlockedError as e:
print(f"Blocked: {e.reason} ({e.deny_reason})")
finally:
await guard.close()