# AI SDK - Aihubmix Provider

<div align="center">
  <a href="README.md">🇺🇸 English</a> | 
  <a href="README.zh.md">🇨🇳 中文</a> | 
  <a href="README.ja.md">🇯🇵 日本語</a>
</div>

> **🎉 10% 割引！**
app-codeが内蔵されており、この方法でモデルをリクエストすると10%割引になります。

**[Aihubmix 公式サイト](https://aihubmix.com/)** | **[モデルスクエア](https://aihubmix.com/models)**

[AI SDK](https://ai-sdk.dev/docs)用の **[Aihubmix provider](https://sdk.vercel.ai/providers/community-providers/aihubmix)**
一つのゲートウェイ、無限のモデル；ワンストップリクエスト：OpenAI、Claude、Gemini、DeepSeek、Qwen、そして500以上のAIモデル。

## AI SDK v6 用セットアップ

```bash
npm i @aihubmix/ai-sdk-provider
```

### （レガシー）AI SDK v5 用セットアップ

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

## サポートされている機能

Aihubmix providerは以下のAI機能をサポートしています：

- **テキスト生成**：様々なモデルでのチャット完了
- **ストリーミングテキスト**：リアルタイムテキストストリーミング
- **画像生成**：テキストプロンプトから画像を作成
- **埋め込み**：単一およびバッチテキスト埋め込み
- **オブジェクト生成**：スキーマを使用した構造化データ生成
- **ストリーミングオブジェクト**：リアルタイム構造化データストリーミング
- **音声合成**：テキストから音声への変換
- **転写**：音声からテキストへの変換
- **ツール**：ウェブ検索およびその他のツール

## Provider インスタンス

`@aihubmix/ai-sdk-provider`からデフォルトのproviderインスタンス`aihubmix`をインポートできます：

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

## 設定

Aihubmix APIキーを環境変数として設定：

```bash
export AIHUBMIX_API_KEY="your-api-key-here"
```

または直接providerに渡す：

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

const aihubmix = createAihubmix({
  apiKey: 'your-api-key-here',
});
```

## 使用

まず、必要な関数をインポートします：

```ts
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';
```

> **注意**：`generateImage`、`generateSpeech`、`transcribe` などのAPIはAI SDK v6ではまだ実験的な機能です。

### テキスト生成

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

const { text } = await generateText({
  model: aihubmix('o4-mini'),
  prompt: '4人用のベジタリアンラザニアのレシピを書いてください。',
});
```

### Claudeモデル

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

const { text } = await generateText({
  model: aihubmix('claude-3-7-sonnet-20250219'),
  prompt: '簡単な言葉で量子コンピューティングを説明してください。',
});
```

### Geminiモデル

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

const { text } = await generateText({
  model: aihubmix('gemini-2.5-flash'),
  prompt: '数字のリストをソートするPythonスクリプトを作成してください。',
});
```

### 画像生成

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

const { image } = await generateImage({
  model: aihubmix.image('gpt-image-1'),
  prompt: '山々の上に美しい夕日',
});
```

### 埋め込み

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

const { embedding } = await embed({
  model: aihubmix.embedding('text-embedding-ada-002'),
  value: 'こんにちは、世界！',
});
```

### 転写

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

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

### ストリーミングテキスト

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

const result = streamText({
  model: aihubmix('gpt-3.5-turbo'),
  prompt: 'ロボットが絵を学ぶ短編小説を書いてください。',
  maxOutputTokens: 256,
  temperature: 0.3,
  maxRetries: 3,
});

let fullText = '';
for await (const textPart of result.textStream) {
  fullText += textPart;
  process.stdout.write(textPart);
}

console.log('\n使用量:', await result.usage);
console.log('完了理由:', await result.finishReason);
```

### オブジェクト生成

```ts
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: 'ラザニアのレシピを生成してください。',
});

console.log(JSON.stringify(result.object.recipe, null, 2));
console.log('Token使用量:', result.usage);
console.log('完了理由:', result.finishReason);
```

### ストリーミングオブジェクト

```ts
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: 'ラザニアのレシピを生成してください。',
});

for await (const objectPart of result.partialObjectStream) {
  console.log(objectPart);
}

console.log('Token使用量:', result.usage);
console.log('最終オブジェクト:', result.object);
```

### バッチ埋め込み

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

const { embeddings, usage } = await embedMany({
  model: aihubmix.embedding('text-embedding-3-small'),
  values: [
    'ビーチでの晴れた日',
    '街での雨の午後',
    '山での雪の夜',
  ],
});

console.log('埋め込み:', embeddings);
console.log('使用量:', usage);
```

### 音声合成

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

const { audio } = await generateSpeech({
  model: aihubmix.speech('tts-1'),
  text: 'こんにちは、これは音声合成のテストです。',
});

// 音声ファイルを保存
await saveAudioFile(audio);
console.log('音声生成成功:', audio);
```

### ツール

Aihubmix providerはウェブ検索を含む様々なツールをサポートしています：

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

const { text } = await generateText({
  model: aihubmix('gpt-4'),
  prompt: 'AIの最新の進歩は何ですか？',
  tools: {
    webSearchPreview: aihubmix.tools.webSearchPreview({
      searchContextSize: 'high',
    }),
  },
});
```

## 追加リソース

- [Aihubmix Provider リポジトリ](https://github.com/AIhubmix/ai-sdk-provider)
- [Aihubmix ドキュメント](https://docs.aihubmix.com/en)
- [Aihubmix ダッシュボード](https://aihubmix.com)
- [Aihubmix ビジネス協力](mailto:business@aihubmix.com)