← Integration guides

3 min read

pinstripes + Vercel AI SDK

Install

npm install ai @ai-sdk/openai

Configure the provider

import { createOpenAI } from "@ai-sdk/openai";

export const pinstripes = createOpenAI({
  apiKey: process.env.PLUMB_API_KEY,
  baseURL: "https://api.pinstripes.io/v1",
});

Put this in lib/pinstripes.ts and import it wherever you need it.


Streaming in a Next.js route handler

// app/api/chat/route.ts
import { streamText } from "ai";
import { pinstripes } from "@/lib/pinstripes";

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: pinstripes("ps/qwen3.6-a3b"),
    messages,
  });

  return result.toDataStreamResponse();
}

Using useChat on the client

// app/chat/page.tsx
"use client";
import { useChat } from "ai/react";

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat();

  return (
    <div>
      {messages.map(m => (
        <div key={m.id}>
          <strong>{m.role}:</strong> {m.content}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
        <button type="submit">Send</button>
      </form>
    </div>
  );
}

Structured output

import { generateObject } from "ai";
import { z } from "zod";
import { pinstripes } from "@/lib/pinstripes";

const { object } = await generateObject({
  model: pinstripes("ps/qwen3.6-a3b"),
  schema: z.object({
    sentiment: z.enum(["positive", "negative", "neutral"]),
    confidence: z.number().min(0).max(1),
  }),
  prompt: "Analyse this review: 'Fast inference, great pricing.'",
});

console.log(object); // { sentiment: 'positive', confidence: 0.97 }

Environment variable

Add to your .env.local:

PLUMB_API_KEY=sk-ps-...