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 viem

Setup

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();}