@tethora/ai-sdk
v1.1.0
Published
Vercel AI SDK integration for Tethora. Auto-log generateText, streamText, and tool calls to your AI governance platform.
Maintainers
Readme
@tethora/ai-sdk
Vercel AI SDK integration for Tethora - the AI agent governance and compliance platform.
Wraps any AI SDK function (generateText, generateObject, streamText, etc.) to enforce policies and automatically log LLM calls and tool usage. Actions that violate your policies are blocked before the API call is made.
Install
npm install @tethora/ai-sdk tethora-sdk aiUsage
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { Tethora } from 'tethora-sdk';
import { withTethora } from '@tethora/ai-sdk';
const tethora = new Tethora({ apiKey: 'your-tethora-api-key' });
const traced = withTethora({ client: tethora });
// Wrap any AI SDK function
const result = await traced(generateText, {
model: openai('gpt-4'),
prompt: 'Explain AI governance in one sentence.',
});Policy Enforcement
Before each AI SDK call, the wrapper checks your Tethora policies. If a policy blocks the action, the API call is never made and a BlockedError is thrown:
import { BlockedError } from '@tethora/ai-sdk';
try {
const result = await traced(generateText, {
model: openai('gpt-4'),
prompt: 'Hello!',
});
} catch (err) {
if (err instanceof BlockedError) {
console.log('Blocked by policy:', err.violations);
}
}To disable enforcement and use logging only:
const traced = withTethora({
client: tethora,
skipCheck: true, // Log only, no policy enforcement
});Works With All AI SDK Functions
// generateText
await traced(generateText, { model, prompt: '...' });
// generateObject
await traced(generateObject, { model, schema, prompt: '...' });
// streamText
await traced(streamText, { model, prompt: '...' });
// With tools
await traced(generateText, {
model,
prompt: '...',
tools: { search: searchTool, calculate: calcTool },
});What Gets Logged
| Event Type | Actions | Data Captured |
|-----------|---------|---------------|
| llm_call | [fn].start, [fn].complete, [fn].error, [fn].blocked | Model ID, prompt preview, tool names, usage, finish reason, duration |
| tool_call | tool.[name] | Tool name, arguments (for each tool call in the response) |
Configuration
withTethora({
client: tethora, // Required: Tethora SDK instance
sessionId: '...', // Optional: group events by session
agentId: '...', // Optional: override default agent ID
skipCheck: false, // Optional: set true to disable policy enforcement
});Links
Licence
MIT
