jamesrochabrun/SwiftOpenAI
The most complete open-source Swift package for interacting with OpenAI's public API.
SwiftOpenAI – OpenAI API の Swift ネイティブクライアント
これは何か
SwiftOpenAI は、すべての公開 OpenAI エンドポイント(チャット、音声、画像、埋め込み、ファインチューニングなど)と、Azure OpenAI、Anthropic、Gemini、Ollama、Groq、xAI、OpenRouter、DeepSeek、AIProxy などの互換サービスをラップする Swift パッケージです。iOS、macOS、watchOS、Linux アプリが、ネイティブな Swift 型、async/await、およびストリーミング、関数呼び出し、ビジョン、新しい Realtime 音声チャット API の組み込みサポートを使用して API を呼び出せるようにします。
対象者
- AI 対応アプリ を構築している Swift 開発者 – チャットアシスタント、音声エージェント、画像生成、文字起こしツールなど。
- HTTP リクエストを手動で作成する代わりに、型安全で async ファースト のラッパーを必要とするチーム。
- Apple プラットフォームまたは Linux で実行されるプロジェクト(例:Vapor バックエンド)。
主な機能(README に記載されている内容)
| 領域 | パッケージが提供するもの |
|---|---|
| コア API カバレッジ | すべての OpenAI エンドポイント:音声(文字起こし、翻訳、音声合成、Realtime)、チャット(関数呼び出し、構造化出力、ビジョン)、埋め込み、ファインチューニング、バッチ、ファイル、画像、モデル、モデレーション。 |
| Beta/Assistants | Assistant オブジェクト、スレッド、メッセージ、実行、ストリーミングデルタ、ベクターストア、エージェント – OpenAI の Assistants API をミラーリング。 |
| Realtime 音声 | WebSocket ベースの低遅延双方向音声、VAD、ツール呼び出し、カスタム音声選択、設定可能な音声フォーマット。 |
| ストリーミング | チャット、音声、Assistants などのためのサーバー送信イベントスタイルのストリーミングを、非同期シーケンスとして公開。 |
| クロスプラットフォーム | iOS 15+、macOS 13+、watchOS 9+、Linux で動作(URLSession のバグを避けるために AsyncHTTPClient を使用)。 |
| OpenAI 互換プロバイダー | OpenAIServiceFactory を介して、Azure OpenAI、Anthropic、Gemini、Ollama、Groq、xAI、OpenRouter、DeepSeek、AIProxy、およびカスタム URL のヘルパーイニシャライザ。 |
| エラーハンドリング | APIError.responseUnsuccessful が HTTP ステータスコード(例:429 レート制限)を提供。 |
| インストール | Swift Package Manager – Xcode または swift package で追加。README は Xcode のデフォルトの上限バージョンと、正しく設定する方法について警告しています。 |
| CLI と MCP | 別のリポジトリが、コアライブラリ上に構築されたコマンドラインインターフェースと「MCP」(おそらく macOS 互換パッケージ)を提供。 |
使用方法(README のクイック例)
import SwiftOpenAI
let apiKey = "sk‑…"
let service = OpenAIServiceFactory.service(apiKey: apiKey)
let chatParams = ChatCompletionParameters(
messages: [.init(role: .user, content: .text("Hello, world!"))],
model: .gpt4o)
do {
let response = try await service.startChat(parameters: chatParams)
print(response.choices.first?.message.content?.text ?? "no reply")
} catch APIError.responseUnsuccessful(let desc, let code) {
print("Error \(code): \(desc)")
}
同じパターンが音声文字起こし、音声合成、画像生成などにも適用され、パラメータ構造を交換し、service で対応するメソッドを呼び出します。
このライブラリを選ぶべき時
- すでに Swift で作業しており、OpenAI の進化する API サーフェスに追従する 単一の依存関係 を望む場合。
- 多くの一般的な HTTP ラッパーに欠けている ストリーミング または Realtime 音声 サポートが必要な場合。
- アプリが Apple プラットフォーム をターゲットにしており、Combine やコールバックではなくネイティブの async/await を好む場合。
- コードを変更せずにクライアントを Azure または他の OpenAI 互換バックエンド に向ける柔軟性も欲しい場合。
注意すべき点
- README は ベータ版 Assistants API に言及しています – OpenAI が仕様を最終決定するにつれて、これらの型は変更される可能性があります。
- Realtime 音声には AVFoundation とマイク権限が必要です。Linux では利用できません。
- パッケージのバージョンが Xcode のデフォルトの上限(2.0.0)を超える可能性があるため、パッケージを追加する際に下限を手動で設定する必要があります。
上記のすべての情報はリポジトリの README から直接取得したものであり、追加の機能は想定されていません。
関連
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト