🎉 10% discount! Built-in app-code; using this method to request all models offers a 10% discount.
Aihubmix Official Website | Model Square
The Aihubmix provider for the AI SDK One Gateway, Infinite Models;one-stop request: OpenAI, Claude, Gemini, DeepSeek, Qwen, and over 500 AI models.
npm i @aihubmix/ai-sdk-providernpm i @aihubmix/ai-sdk-provider@0.0.6The Aihubmix provider supports the following AI features:
- Text Generation: Chat completion with various models
- Streaming Text: Real-time text streaming
- Image Generation: Create images from text prompts
- Embeddings: Single and batch text embeddings
- Object Generation: Structured data generation with schemas
- Streaming Objects: Real-time structured data streaming
- Speech Synthesis: Text-to-speech conversion
- Transcription: Speech-to-text conversion
- Tools: Web search and other tools
You can import the default provider instance aihubmix from @aihubmix/ai-sdk-provider:
import { aihubmix } from '@aihubmix/ai-sdk-provider';Set your Aihubmix API key as an environment variable:
export AIHUBMIX_API_KEY="your-api-key-here"Or pass it directly to the provider:
import { createAihubmix } from '@aihubmix/ai-sdk-provider';
const aihubmix = createAihubmix({
apiKey: 'your-api-key-here',
});Every request carries an APP-Code header. By default it uses the value
built into this package, so you do not need to set it. If you have your
own app code, pass appCode to override the default:
import { createAihubmix } from '@aihubmix/ai-sdk-provider';
const aihubmix = createAihubmix({
apiKey: 'your-api-key-here',
appCode: 'YOUR-APP-CODE', // optional; falls back to the built-in default when omitted
});By default all requests go to https://aihubmix.com. To route through your
own gateway or proxy, pass baseURL (a trailing slash is allowed and
stripped). Paths such as /v1 and /gemini/v1beta are appended
automatically:
import { createAihubmix } from '@aihubmix/ai-sdk-provider';
const aihubmix = createAihubmix({
apiKey: 'your-api-key-here',
baseURL: 'https://your-gateway.example.com', // optional; defaults to https://aihubmix.com
});You may pass a custom fetch implementation (for proxies, logging, or
testing). It is forwarded to every model — OpenAI-compatible, Claude,
Gemini, Responses, transcription, and speech:
const aihubmix = createAihubmix({
apiKey: 'your-api-key-here',
fetch: myCustomFetch,
});First, import the necessary functions:
import { createAihubmix } from '@aihubmix/ai-sdk-provider';
import {
generateText,
streamText,
experimental_generateImage as generateImage,
embed,
embedMany,
generateObject,
streamObject,
experimental_generateSpeech as generateSpeech,
experimental_transcribe as transcribe
} from 'ai';
import { z } from 'zod';Note: Some APIs like
generateImage,generateSpeech, andtranscribeare still experimental in AI SDK v6.
import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateText } from 'ai';
const { text } = await generateText({
model: aihubmix('o4-mini'),
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateText } from 'ai';
const { text } = await generateText({
model: aihubmix('claude-3-7-sonnet-20250219'),
prompt: 'Explain quantum computing in simple terms.',
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateText } from 'ai';
const { text } = await generateText({
model: aihubmix('gemini-2.5-flash'),
prompt: 'Create a Python script to sort a list of numbers.',
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateImage } from 'ai';
const { image } = await generateImage({
model: aihubmix.image('gpt-image-1'),
prompt: 'A beautiful sunset over mountains',
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { embed } from 'ai';
const { embedding } = await embed({
model: aihubmix.embedding('text-embedding-ada-002'),
value: 'Hello, world!',
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { transcribe } from 'ai';
const { text } = await transcribe({
model: aihubmix.transcription('whisper-1'),
audio: audioFile,
});import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { streamText } from 'ai';
const result = streamText({
model: aihubmix('gpt-3.5-turbo'),
prompt: 'Write a short story about a robot learning to paint.',
maxOutputTokens: 256,
temperature: 0.3,
maxRetries: 3,
});
let fullText = '';
for await (const textPart of result.textStream) {
fullText += textPart;
process.stdout.write(textPart);
}
console.log('\nUsage:', await result.usage);
console.log('Finish reason:', await result.finishReason);import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateObject } from 'ai';
import { z } from 'zod';
const result = await generateObject({
model: aihubmix('gpt-4o-mini'),
schema: z.object({
recipe: z.object({
name: z.string(),
ingredients: z.array(
z.object({
name: z.string(),
amount: z.string(),
}),
),
steps: z.array(z.string()),
}),
}),
prompt: 'Generate a lasagna recipe.',
});
console.log(JSON.stringify(result.object.recipe, null, 2));
console.log('Token usage:', result.usage);
console.log('Finish reason:', result.finishReason);import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { streamObject } from 'ai';
import { z } from 'zod';
const result = await streamObject({
model: aihubmix('gpt-4o-mini'),
schema: z.object({
recipe: z.object({
name: z.string(),
ingredients: z.array(
z.object({
name: z.string(),
amount: z.string(),
}),
),
steps: z.array(z.string()),
}),
}),
prompt: 'Generate a lasagna recipe.',
});
for await (const objectPart of result.partialObjectStream) {
console.log(objectPart);
}
console.log('Token usage:', result.usage);
console.log('Final object:', result.object);import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { embedMany } from 'ai';
const { embeddings, usage } = await embedMany({
model: aihubmix.embedding('text-embedding-3-small'),
values: [
'sunny day at the beach',
'rainy afternoon in the city',
'snowy night in the mountains',
],
});
console.log('Embeddings:', embeddings);
console.log('Usage:', usage);import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateSpeech } from 'ai';
const { audio } = await generateSpeech({
model: aihubmix.speech('tts-1'),
text: 'Hello, this is a test for speech synthesis.',
});
// Save the audio file
await saveAudioFile(audio);
console.log('Audio generated successfully:', audio);The Aihubmix provider supports various tools including web search:
import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { generateText } from 'ai';
const { text } = await generateText({
model: aihubmix('gpt-4'),
prompt: 'What are the latest developments in AI?',
tools: {
webSearchPreview: aihubmix.tools.webSearchPreview({
searchContextSize: 'high',
}),
},
});- OpenCode Desktop fails with
ERR_UNSUPPORTED_DIR_IMPORT/Failed to initialize provider: aihubmix— this is an OpenCode Desktop bug (anomalyco/opencode#31909), not an API key or network problem. See docs/opencode-desktop-troubleshooting.md for the workaround. The OpenCode CLI is unaffected.