Skip to content

Repository files navigation

AI SDK - Aihubmix Provider

🎉 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.

Setup for AI SDK v6

npm i @aihubmix/ai-sdk-provider

(LEGACY) Setup for AI SDK v5

npm i @aihubmix/ai-sdk-provider@0.0.6

Supported Features

The 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

Provider Instance

You can import the default provider instance aihubmix from @aihubmix/ai-sdk-provider:

import { aihubmix } from '@aihubmix/ai-sdk-provider';

Configuration

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',
});

appCode (optional)

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

baseURL (optional)

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

Custom fetch

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

Usage

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, and transcribe are still experimental in AI SDK v6.

Generate Text

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.',
});

Claude Model

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.',
});

Gemini Model

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.',
});

Image Generation

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',
});

Embeddings

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!',
});

Transcription

import { aihubmix } from '@aihubmix/ai-sdk-provider';
import { transcribe } from 'ai';

const { text } = await transcribe({
  model: aihubmix.transcription('whisper-1'),
  audio: audioFile,
});

Stream Text

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

Generate Object

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

Stream Object

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

Embed Many

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

Speech Synthesis

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

Tools

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',
    }),
  },
});

Known Issues

Additional Resources

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages