@bantai-dev/vercel-ai
v1.0.0
Published
Vercel AI SDK provider for @bantai-dev/llm
Downloads
20
Maintainers
Readme
@bantai-dev/vercel-ai
Vercel AI SDK provider for @bantai-dev/llm. Works with any model supported by the AI SDK (OpenAI, OpenRouter, Anthropic, etc.) and supports structured output via Zod.
Features
- Vercel AI SDK – Uses
generateTextfrom theaipackage with your chosen model. - Any model – Pass any
LanguageModel(e.g.createOpenAI(),createOpenRouter(),createAnthropic()). - Zod structured output – Pass
outputSchemain the LLM input; usesOutput.object({ schema })under the hood. - Policy & token quotas – Use with
generateText()from@bantai-dev/llmand policies/context from core.
Installation
pnpm add @bantai-dev/vercel-ai @bantai-dev/llm ai zodFor OpenRouter:
pnpm add @openrouter/ai-sdk-providerPeer dependencies
zod^4.3.5
Usage
With OpenRouter
import { vercelAI } from "@bantai-dev/vercel-ai";
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
import { generateText, withLLMContext } from "@bantai-dev/llm";
import { defineContext, definePolicy } from "@bantai-dev/core";
import { z } from "zod";
const openrouter = createOpenRouter({ apiKey: process.env.OPENROUTER_API_KEY });
const provider = vercelAI(openrouter("openai/gpt-4o")); // or e.g. "upstage/solar-pro-3:free"
const appContext = defineContext(
z.object({
userId: z.string().optional(),
tier: z.enum(["free", "premium"]),
})
);
const llmContext = withLLMContext(appContext, { storage });
const policy = definePolicy(llmContext, "My Policy", [/* rules */]);
const result = await generateText({
provider,
policies: [policy],
input: {
llm: {
prompt: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Say hello in JSON with a 'message' field." },
],
maxTokensPerRequest: 256,
outputSchema: z.object({ message: z.string() }),
},
tier: "free",
userId: "user-1",
},
});
console.log(result.output); // { message: "..." }With OpenAI (AI SDK)
import { createOpenAI } from "@openai/ai-sdk-provider"; // or from "ai/openai"
import { vercelAI } from "@bantai-dev/vercel-ai";
const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY });
const provider = vercelAI(openai("gpt-4o"));Provider options
Pass through options to the AI SDK generateText call:
const result = await generateText({
provider,
policies: [policy],
input: { llm: { prompt: "Hello" }, /* context */ },
providerOptions: {
// e.g. maxTokens, temperature, etc. – depends on AI SDK
},
});Prompt formats
- String – Single user message:
prompt: "Hello". - Messages – Array of
{ role: "user" | "system" | "assistant", content: string }passed to the AI SDK asmessages.
Utilities
convertPromptToVercelAIMessages(prompt)
Converts the LLM prompt (string or message array) to the ModelMessage[] format expected by the AI SDK. Used internally by the provider.
convertUIMessagesToPrompt(uiMessages)
Converts Vercel AI SDK UIMessage[] (e.g. from a chat UI) to the prompt format expected by @bantai-dev/llm (array of { role, content }). Useful when wiring UI to generateText with policies.
API
vercelAI(model)
Creates an LLMProvider that delegates to the Vercel AI SDK generateText.
- model – A
LanguageModelfrom the AI SDK (e.g. fromcreateOpenRouter(),createOpenAI()).
Returns an adapter with:
providerName:"vercel-ai"defaultModel:model.modelIdor the string model idgenerateText(input, options)– Calls AI SDKgenerateTextwith:messagesfromconvertPromptToVercelAIMessages(input.llm.prompt)- Optional
output: Output.object({ schema: input.llm.outputSchema })whenoutputSchemais set - Merged
providerOptionsfrom the second argument
Environment
- OpenRouter:
OPENROUTER_API_KEY - OpenAI:
OPENAI_API_KEY(when using OpenAI via AI SDK)
Related
- @bantai-dev/llm – Context, token quota rules,
generateText/streamText. - Vercel AI SDK – Documentation and providers.
License
MIT
