# ▲ Vercel AI SDK

The [Vercel AI SDK](https://sdk.vercel.ai/) is a TypeScript toolkit for building AI-powered applications. Connect it to Tensorix using the OpenAI-compatible provider.

## Prerequisites

* Node.js 18+
* Tensorix API key from [app.tensorix.ai](https://app.tensorix.ai)

## Installation

```bash
npm install ai @ai-sdk/openai-compatible
# or
pnpm add ai @ai-sdk/openai-compatible
# or
yarn add ai @ai-sdk/openai-compatible
```

## Configuration

### Create Provider Instance

```typescript
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});
```

### Environment Variables

Create a `.env.local` file:

```env
TENSORIX_API_KEY=your-tensorix-api-key
```

## Usage Examples

### Text Generation

```typescript
import { generateText } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

const { text } = await generateText({
  model: tensorix('claude-sonnet-4-20250514'),
  prompt: 'Write a haiku about programming.',
});

console.log(text);
```

### Streaming Text

```typescript
import { streamText } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

const { textStream } = await streamText({
  model: tensorix('gpt-4o'),
  prompt: 'Explain the theory of relativity.',
});

for await (const chunk of textStream) {
  process.stdout.write(chunk);
}
```

### Chat Completions

```typescript
import { generateText } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

const { text } = await generateText({
  model: tensorix('claude-sonnet-4-20250514'),
  messages: [
    { role: 'system', content: 'You are a helpful coding assistant.' },
    { role: 'user', content: 'How do I create a REST API in Node.js?' },
  ],
});

console.log(text);
```

### Structured Output

```typescript
import { generateObject } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { z } from 'zod';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

const { object } = await generateObject({
  model: tensorix('gpt-4o'),
  schema: z.object({
    recipe: z.object({
      name: z.string(),
      ingredients: z.array(z.string()),
      steps: z.array(z.string()),
    }),
  }),
  prompt: 'Generate a recipe for chocolate chip cookies.',
});

console.log(object.recipe);
```

## Next.js Integration

### API Route (App Router)

```typescript
// app/api/chat/route.ts
import { streamText } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

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

  const result = await streamText({
    model: tensorix('claude-sonnet-4-20250514'),
    messages,
  });

  return result.toDataStreamResponse();
}
```

### React Component

```typescript
// components/Chat.tsx
'use client';

import { useChat } from 'ai/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat({
    api: '/api/chat',
  });

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

## Tool Calling

```typescript
import { generateText, tool } from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { z } from 'zod';

const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,
  baseURL: 'https://api.tensorix.ai/v1',
});

const result = await generateText({
  model: tensorix('gpt-4o'),
  tools: {
    weather: tool({
      description: 'Get the weather in a location',
      parameters: z.object({
        location: z.string().describe('The location to get weather for'),
      }),
      execute: async ({ location }) => {
        // Implement weather lookup
        return { temperature: 72, condition: 'sunny' };
      },
    }),
  },
  prompt: 'What is the weather in San Francisco?',
});

console.log(result);
```

## Available Models

See [Tensorix Models](/api-reference/models.md) for all available models.

| Model                        | Best For                       |
| ---------------------------- | ------------------------------ |
| `claude-sonnet-4-20250514`   | Complex reasoning, coding      |
| `claude-3-5-sonnet-20241022` | General chat, analysis         |
| `gpt-4o`                     | Multi-modal, tool calling      |
| `gpt-4o-mini`                | Fast responses, cost-effective |

## Troubleshooting

### API connection errors

Verify your configuration:

```typescript
const tensorix = createOpenAICompatible({
  name: 'tensorix',
  apiKey: process.env.TENSORIX_API_KEY,  // Must be set
  baseURL: 'https://api.tensorix.ai/v1',  // Include /v1
});
```

### Streaming not working

Ensure you're using `streamText` instead of `generateText` and returning `toDataStreamResponse()`.

## Resources

* [Vercel AI SDK Documentation](https://sdk.vercel.ai/)
* [Vercel AI SDK GitHub](https://github.com/vercel/ai)
* [Tensorix API Reference](/api-reference/overview.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tensorix.ai/developer-sdks/vercel-ai-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
