Vercel AI SDK
Use HopBase desde el Vercel AI SDK con el proveedor compatible con OpenAI, con streaming y llamadas a herramientas.
El AI SDK de Vercel es un kit de herramientas en TypeScript para crear aplicaciones de IA. HopBase funciona con él a través del proveedor oficial @ai-sdk/openai-compatible; los modelos Claude usan @ai-sdk/anthropic.
| Ajuste | Valor |
|---|---|
| Paquete | @ai-sdk/openai-compatible |
baseURL | https://api.hop-base.com/v1 |
apiKey | Una clave creada en la consola, enviada como Authorization: Bearer |
| ID de modelo | El ID exacto que devuelve GET /v1/models con esa clave, por ejemplo deepseek-v4.1-flash-1017 |
Verificado en producción con ai 7.0 y @ai-sdk/openai-compatible 3.0: generateText, streamText y las llamadas a herramientas con tool() funcionan, y se informa el uso.
Una clave de HopBase solo llega a los modelos de los grupos que incluye. Al crear la clave en la consola, seleccione el grupo que sirve el modelo que quiere usar: por ejemplo DeepSeek para deepseek-v4.1-flash-1017, DeepSeek centro de datos de Singapur para deepseek-v4.1-flash-1017-sg o Gemini (todos los modelos, incl. imagen) para gemini-3.8-flash. Una clave sin el grupo del modelo devuelve 404 model_not_found.
Instalación
npm i ai @ai-sdk/openai-compatible zodGuarde la clave en una variable de entorno:
export HOPBASE_API_KEY=sk-your-keyCrear el proveedor
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const hopbase = createOpenAICompatible({
name: 'hopbase',
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
includeUsage: true, // report token usage on streamed responses
});hopbase('<ID de modelo>') devuelve un modelo de chat. El ID debe coincidir exactamente con GET /v1/models.
Generar texto
import { generateText } from 'ai';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Reply with one word: hello.',
});
console.log(text);Streaming
import { streamText } from 'ai';
import { hopbase } from './hopbase';
const result = streamText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Count from 1 to 5.',
});
for await (const delta of result.textStream) process.stdout.write(delta);Llamar herramientas
import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
tools: {
getWeather: tool({
description: 'Get the weather for a city',
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, tempC: 21 }),
}),
},
stopWhen: stepCountIs(3),
prompt: 'What is the weather in Tokyo? Use the tool.',
});
console.log(text);Para cambiar de modelo basta con cambiar el ID, por ejemplo hopbase('gemini-3.8-flash') con una clave que incluya el grupo Gemini (todos los modelos, incl. imagen).
Modelos Claude
Los modelos Claude se sirven con el protocolo Anthropic Messages. Use @ai-sdk/anthropic y mantenga /v1 en baseURL: el paquete le añade /messages, así que las solicitudes van a https://api.hop-base.com/v1/messages.
import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';
const hopbaseClaude = createAnthropic({
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
});
const { text } = await generateText({
model: hopbaseClaude('claude-sonnet-5-5'),
prompt: 'Reply with one word: hello.',
});La clave debe incluir un grupo de Claude. Esto difiere de los SDK de Anthropic y de Claude Code, que toman el host sin ruta https://api.hop-base.com y añaden /v1/messages por su cuenta.
Los precios de cada modelo están en la página de precios.
Solución de problemas
| Síntoma | Causa |
|---|---|
401 | HOPBASE_API_KEY no está definida en el proceso, o la clave está desactivada |
404 model_not_found | La clave no incluye el grupo del modelo, o el ID está abreviado. Vuelva a consultar GET /v1/models |
Solo fallan las solicitudes de @ai-sdk/anthropic | A baseURL le falta /v1. La URL de la solicitud debe terminar en /v1/messages |
route_not_found | La clave pertenece a un grupo de imagen o vídeo sin endpoint de chat |
Próximos pasos
- OpenCode: el mismo paquete de proveedor configurado en un agente de código
- OpenAI SDK y Anthropic SDK: los SDK oficiales contra los mismos endpoints
- Modelos disponibles: consulte los ID de modelo disponibles para una clave