Vercel AI SDK
Import w3stor tools and plug them into generateText or streamText. The SDK handles x402 payment signing automatically.
Install
Terminal
npm install @w3stor/sdk ai @ai-sdk/openai @x402/fetch @x402/evm viemSetup
Pass a private key and the SDK creates an x402 payment signer for paid operations (upload, attest) on Base Sepolia USDC.
import { createTools } from "@w3stor/sdk/ai-sdk";
const { storeFile, listFiles, checkStatus, attestFile } = await createTools({ privateKey: process.env.PRIVATE_KEY, // x402 payments handled automatically});Using a viem Account
If you already have a viem account, pass it directly instead of a raw key.
import { createTools } from "@w3stor/sdk/ai-sdk";import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const { storeFile, listFiles, checkStatus, attestFile } = await createTools({ account,});generateText
Single-shot generation with multi-step tool calls.
import { generateText } from "ai";import { openai } from "@ai-sdk/openai";import { createTools } from "@w3stor/sdk/ai-sdk";
const { storeFile, listFiles, checkStatus } = await createTools({ privateKey: process.env.PRIVATE_KEY,});
const { text } = await generateText({ model: openai("gpt-4o"), tools: { storeFile, listFiles, checkStatus }, maxSteps: 5, prompt: "Upload /data/research.pdf tagged 'paper,2026', then check its status.",});streamText
Stream responses with real-time tool execution for chat interfaces.
import { streamText } from "ai";import { openai } from "@ai-sdk/openai";import { createTools } from "@w3stor/sdk/ai-sdk";
const { storeFile, listFiles, checkStatus } = await createTools({ privateKey: process.env.PRIVATE_KEY,});
const result = streamText({ model: openai("gpt-4o"), tools: { storeFile, listFiles, checkStatus }, maxSteps: 5, prompt: "Show me all my stored files and their replication status.",});
for await (const chunk of result.textStream) { process.stdout.write(chunk);}Next.js Route Handler
Drop into a Next.js API route for a full-stack storage assistant.
// app/api/storage/route.tsimport { streamText } from "ai";import { openai } from "@ai-sdk/openai";import { createTools } from "@w3stor/sdk/ai-sdk";
const tools = await createTools({ privateKey: process.env.PRIVATE_KEY });
export async function POST(req: Request) { const { messages } = await req.json();
const result = streamText({ model: openai("gpt-4o"), tools, maxSteps: 5, system: "You are a storage assistant. Help users upload files to decentralized storage and manage their data.", messages, });
return result.toDataStreamResponse();}