認証
認証は単一のAPIキーによって行われます。APIキーを取得ページでGoogleまたはメールアドレスとパスワードを使用してサインアップできます。キーは直ちに表示され、前払いクレジットに紐付きます。主要ベンダーとは異なり、トライアルには月額サブスクリプションやクレジットカードは不要です。すべてのリクエストにヘッダーAuthorization: Bearer YOUR_API_KEYを使用してください。アカウントごとにアクティブな認証情報はキーのみであり、新しいキーを生成すると以前のキーは無効になります。
基本的な完了
OpenAI 互換エンドポイントに標準的なチャット完了リクエストを送信します。モデル識別子は uncensored です。このモデルはオープンウェイトで、法的な成人用途に対してコンテンツ拒否なしで回答するように調整されています。GPT、Claude、またはその他のベンダーモデルではありません。このサービスのベース URL は以下で提供されます。
curl https://api.ornith.top/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'YOUR_API_KEY をダッシュボードからのキーに置き換えてください。応答には choices[0].message.content に生成されたテキストが含まれます。401 のようなエラーは無効なキーを示し、402 は前払いクレジットが枯渇したことを意味します。
Python SDK
公式の openai Python パッケージを使用します。Ornith のベース URL を指し示し、API キーを提供してください。これにより、標準的な OpenAI クライアント構造との互換性が確保されます。role と content を含む辞書のリストとしてメッセージを渡すことができます。クライアントは HTTP リクエストを自動的に処理します。このアプローチは、単純なテキスト生成やツールや JSON モードを使用したより複雑な相互作用の両方に機能します。
from openai import OpenAI
client = OpenAI(base_url="https://api.ornith.top/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)応答オブジェクトは標準的な OpenAI の構造を反映しています。生成されたテキストに応答オブジェクトから直接アクセスできます。この方法は、モデルの出力へのプログラムによるアクセスが必要なバックエンドサービスやスクリプトに最適です。
Node SDK
openai npm パッケージをインストールします。Ornith のベース URL と API キーを使用してクライアントを初期化します。リクエストの構造は Python SDK と同じです。chat.completions.create メソッドを使用してください。これは、Web バックエンドを構築している場合でも、CLI ツールを作成している場合でも、JavaScript 環境に適しています。クライアントは応答のシリアライズとデシリアライズを処理します。
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.ornith.top/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);エラーを適切に処理してください。ネットワークエラーや API エラーは例外をスローします。ステータスコードを確認して、認証の失敗、レート制限、またはサーバーエラーを区別してください。応答には、Python SDK と同じ形式で完了の詳細が含まれています。
ストリーミング応答
リクエストで stream: true を設定してストリーミングを有効にします。これにより、生成されるたびにトークンのストリームが返されます。リアルタイムの UI 更新やプログレッシブなテキスト表示に使用してください。ストリームは、総トークン使用量を含む最終チャンクで終了します。これにより、完全な応答を待たずにリアルタイムでコストを追跡できます。進行状況を表示したい長いコンテキストに対して効率的です。
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)ストリームをイテレートして各チャンクを処理します。最後のチャンクには usage フィールドが含まれます。これは課金の透明性に役立ちます。大きな応答に対するメモリの問題を避けるために、クライアントがストリームを正しく処理することを確認してください。
制限、エラー、コンテキスト
コンテキストウィンドウは、プロンプトと補完を合わせて100,000トークンです。1つのリクエストあたりの最大出力は32,000トークンです(max_tokensが未設定の場合は2,048トークン)。1分あたりのリクエスト数は300件、キーあたりの同時リクエスト数は8件までです。リクエストボディは8 MB未満である必要があります。レート制限を超えた場合、429エラーが発生します。未成年者関連コンテンツの拒否はハードコードされており、常に適用されます。エラーはクレジットを消費しません。クレジットは前払いであり、期限切れしません。