Google: Gemma 4 31B
Gemma 4 31B ITは、テキストと視覚的な推論のために指示調整された、Googleの密なモデルです。256Kのコンテキスト、設定できる思考、画像とフレームに基づく動画の理解、ネイティブな関数呼び出しにより、テキストを出力するコーディング、文書、エージェントの作業を支えます。
- Ailoot Ultra · OpenAI チャット
POST /v1/chat/completionsgoogle/gemma-4-31b-it - Ailoot Ultra · Anthropic メッセージ
POST /v1/messagesgoogle/gemma-4-31b-it
モデルについて
この説明はモデルの機能を紹介するものです。Ailootで利用できる入力、出力、オプションは、選択したメソッドごとに以下に記載されています。
Gemma 4 31B IT は、Google DeepMind が提供するオープンな Gemma 4 ファミリーの、指示調整済みの密モデルです。Google は、31B モデルをモデル品質とタスクへの適応を重視するものとして位置付けています。一方、独立した 26B A4B エディションは、推論の効率を高めるために混合エキスパートを使います。このカードは、名前付きの指示調整済み 31B エディションを対象とし、事前学習済みの重みや量子化した派生版を対象とするものではありません。
公式の密モデルのアーキテクチャ表は、30.7B パラメーター、60 層、1,024 トークンのスライディングウィンドウ、256K トークンのコンテキストを示しています。ファミリーは、ローカルのスライディングウィンドウ注意とグローバル注意を組み合わせ、最後をグローバル層にし、このモデル専用の視覚エンコーダーを使います。このプロファイルは、テキストと画像を入力し、テキストを出力するためのものです。これらはモデルのアーキテクチャ上の事実であり、アプリケーションの応答時間を決めたり、他の Gemma 4 サイズが持つ音声対応を示したりするものではありません。
256K トークンのコンテキストは、大量のテキストと視覚的な根拠を組み合わせるタスクを支えます。一つのプロンプト内に画像とテキストを交互に配置でき、メーカーは、最良の結果を得るため、関係するテキストの前に画像内容を置くことを勧めています。視覚タスクには、物体検出、文書ページの解釈、画面やインターフェースの理解、グラフ、多言語 OCR、手書き文字、位置の指示が含まれます。出力は、抽出した内容、説明、コード、ツール操作の提案といったテキストです。
動画の理解では、フレームの列を処理します。モデルカードは、毎秒一フレームで画像を処理する場合、最大 60 秒としています。関係する場面を用意し、フレーム順を保って、見える一連の流れに対する質問を渡します。この 26B/31B の視覚プロファイルは音声を受け取りません。小型の音声対応 Gemma 4 バリアントの音声機能は、ここには適用されません。話された情報が必要なタスクでは、文字起こしをテキストとして加えてください。
設定可能な thinking により、回答前に推論するか、直接回答するかを選べます。Gemma 4 は、user と assistant に加えて、ネイティブの system ロールを導入しています。Google のプロンプト形式では、system プロンプト内の <|think|> 制御トークンで thinking を有効にし、思考チャンネルと最終回答を分けます。文書化されたプロセッサーで、そのテンプレートを扱えます。複数ターンの会話では、過去の最終回答を履歴に残し、以前の思考は除きます。ただし、メーカーが保持すべきとしているツール呼び出しのターンは例外です。
ネイティブの Function Calling は、構造化されたツール利用をサポートします。Google の公開時の説明には、構造化 JSON 出力も記載されています。タスク、利用できる関数、期待する結果を定めます。アプリケーションが求められた操作を実行し、その出力を次の工程に返します。コーディングでは、生成、補完、修正を求められます。視覚アシスタントは、返されたテキストでグラフや画面を説明できます。関数呼び出しの指示と、接続先で実際に実行された操作は区別されます。
画像の可変解像度は、視覚トークン予算で制御します。文書化された選択肢は、70、140、280、560、1,120 トークンです。低い予算は分類、キャプション、フレーム列に適し、高い予算は、追加の計算を伴いながら、OCR、文書解析、小さい文字の詳細をより多く保ちます。画像を準備する前に、全体のシーンが必要なのか、正確な文字が必要なのかを決めてください。ラベルを明確に切り抜く方が、ページ全体の全ての詳細を漠然と調べる依頼より、抽出に役立つ場合があります。
Google は、ファミリーのサンプリング設定として、temperature 1.0、top-p 0.95、top-k 64 を推奨しています。モデルカードは、140 を超える言語での学習と、35 を超える言語を初期状態でサポートすることを区別しています。回答の言語を指定し、ドメイン名、フィールド名、式は指示の中で明示的に維持してください。256K はコンテキストの仕様です。引用されたモデルカードは、このエディションについて、独立した普遍的な最大出力値を示していません。
文書とコードのタスクでは、関係するページ画像、文章の要件、ソースの断片を渡します。例えば、「ラベルを読み取り、この画面が仕様とどう異なるかを説明して、提供したコードに焦点を絞った修正を提案してください」です。グラフでは、見える値と推測した傾向を区別するよう求めます。Gemma のモデルカードは、曖昧な言語、非常に複雑なタスク、不正確または古い事実に関する限界を指摘しています。学習知識だけに期待せず、求める結果に必須の信頼できる事実を添えてください。
実用タスク
実用タスク
英語の技術例
Match a form to its written specification
Compare this textual form specification and code. Spec: Email is required and uses email validation; nickname is optional. Code: <input name="email" type="text"><input name="nickname" required>. Return a discrepancy table and corrected HTML. Preserve both field names and add visible labels for each field.期待される結果
A spec-to-code discrepancy table and an editable HTML fragment with corrected attributes and labels.結果の確認
Check that only email is required, its type is email and each label points to its matching input.Ailoot Ultra · OpenAI チャット POST /v1/chat/completions google/gemma-4-31b-it
google/gemma-4-31b-itはじめに
Gemma 4 31B ITは、テキストと視覚的な推論のために指示調整された、Googleの密なモデルです。256Kのコンテキスト、設定できる思考、画像とフレームに基づく動画の理解、ネイティブな関数呼び出しにより、テキストを出力するコーディング、文書、エージェントの作業を支えます。
- 対応する入力
- テキスト
- 結果
- テキスト
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · OpenAI チャット POST /v1/chat/completions
- 入力の種類
text- 出力の種類
text- 出力形式
- jsonまたはSSE
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 google/gemma-4-31b-it | デフォルト— |
フィールドmessages | 種類message[] | 要件必須 | 値と制限 最小項目数: 1 | デフォルト— |
フィールドmessages[].role | 種類string | 要件必須 | 値と制限 例:system, user, assistant, tool, function 条件: これらのロールはソースコードの互換型で明示されています。正確なロールの集合はモデルごとに異なります。 モデルによる | デフォルト— |
フィールドmessages[].content | 種類string|content_part[]|null | 要件任意 | 値と制限 | デフォルト— |
フィールドmessages[].tool_calls | 種類tool_call[] | 要件任意 | 値と制限 | デフォルト— |
フィールドmessages[].tool_call_id | 種類string | 要件任意 | 値と制限 適用条件: role=tool。実際に返されたIDを使ってください | デフォルト— |
フィールドmessages[].name | 種類string | 要件任意 | 値と制限 | デフォルト— |
フィールドmessages[].reasoning_content | 種類string | 要件任意 | 値と制限 適用条件: このモデルが使用する場合は、実際に返された推論をそのまま次のリクエストへ戻してください | デフォルト— |
フィールドmessages[].reasoning_details | 種類object|array | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドmax_tokens | 種類integer | 要件任意 | 値と制限 最小値: 1 モデルによる | デフォルト— |
フィールドmax_completion_tokens | 種類integer | 要件任意 | 値と制限 最小値: 1 モデルによる | デフォルト— |
フィールドstream | 種類boolean | 要件任意 | 値と制限 | デフォルトfalse |
フィールドstream_options.include_usage | 種類boolean | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドtemperature | 種類number | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドtop_p | 種類number | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドstop | 種類string|string[] | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドtools | 種類function_tool[] | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドtools[].type | 種類string | 要件任意 | 値と制限 function モデルによる | デフォルト— |
フィールドtools[].function.name | 種類string | 要件必須 | 値と制限 適用条件: 関数ツールの指定あり | デフォルト— |
フィールドtools[].function.description | 種類string | 要件任意 | 値と制限 | デフォルト— |
フィールドtools[].function.parameters | 種類JSON_schema | 要件任意 | 値と制限 | デフォルト— |
フィールドtool_choice | 種類string|object | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドparallel_tool_calls | 種類boolean | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドresponse_format | 種類object | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドreasoning_effort | 種類string | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドreasoning | 種類object | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドservice_tier | 種類string | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドinstructions | 種類string | 要件任意 | 値と制限 互換性用のフィールド | デフォルト— |
フィールドfunctions | 種類function[] | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドfunction_call | 種類string|object | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドprompt_cache_options | 種類object | 要件任意 | 値と制限 モデルによる | デフォルト— |
フィールドmodalities | 種類string[] | 要件任意 | 値と制限 text | デフォルト— |
フィールドprovider | 種類object | 要件任意 | 値と制限 条件: このUltraテキストルートではprovider.optionsは拒否されます | デフォルト— |
フィールドcache_control.ttl | 種類string | 要件任意 | 値と制限 条件: 実際のプロンプトキャッシュの指定箇所では1hは拒否されます | デフォルト— |
入力素材の組み合わせ
テキスト · UTF8テキスト
messages[].content
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, messages |
パラメータmaterial_types | 仕様text |
パラメータmessages | 仕様role/content形式のメッセージ配列 |
パラメータfile_material | 仕様実際のUTF-8文書をテキストとしてそのまま挿入します。ファイルIDは推定しません |
パラメータoptional_controls | 仕様stream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
パラメータcontrol_scope | 仕様モデル固有。ユーザーの関数ツールとホスト側のツールは異なります |
パラメータoutput_modalities | 仕様text |
パラメータhosted_operations | 仕様false |
パラメータmultimodal_input_binding | 仕様null |
ライフサイクル: synchronous_or_streamed
正確なモデルIDをmessagesとともに送ってください。
コンテキスト長は出力上限ではありません。
テキストファイルはテキストをそのまま提供できます。画像/音声/ファイルオブジェクトの入力には正確なバインディングが必要です。
料金
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 標準料金 高速モードが選択されている場合
- Flex モード
- 標準料金 flex モードが選択されている場合
- 最大推論量
- 標準料金 推論量が最大で、調整に既定値(default)を使用する場合
- 明示的キャッシュの料金
- 無効 明示的キャッシュを要求した場合
Ailootの料金
設定別の価格
各料金を表示された条件と照合してください。選択肢となる設定の各組には、いずれか1つの料金を適用します。
| 設定 | 料金表 | コンテキストトークン数が次の値を超える場合 | コンテキストトークン数が次の値以下の場合 | 料金 |
|---|---|---|---|---|
| 設定トークンの基本単価 | 料金表基本料金 | コンテキストトークン数が次の値を超える場合— | コンテキストトークン数が次の値以下の場合上限なし | 料金 入力 · 入力トークン $0.0002 / 1K トークン 出力 · 出力トークン $0.00068 / 1K トークン 入力 · キャッシュ読み取り $0.0002 / 1K トークン 入力 · キャッシュ書き込み — / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
| 設定リクエスト長に応じた料金区分 1 | 料金表— | コンテキストトークン数が次の値を超える場合0 | コンテキストトークン数が次の値以下の場合上限なし | 料金 入力 · 入力トークン $0.0002 / 1K トークン 出力 · 出力トークン $0.00068 / 1K トークン 入力 · キャッシュ読み取り $0.0002 / 1K トークン 入力 · キャッシュ書き込み — / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · OpenAI チャット
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemma-4-31b-it", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemma-4-31b-it',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemma-4-31b-it',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
結果を受け取って保存
Ailoot Ultra · OpenAI チャット
jsonまたはSSE
完了した結果をすべて保存
返された完全なレスポンス、ファイル、コンテンツ部分をすべて保存してください。
すべての選択肢と、その内容・ツール呼び出し・推論を保持してください。SSEでは選択肢/ツールのインデックスごとに差分を組み立て、最終的な終了理由と使用量を残します。
元のレスポンスを確認する場合
リクエスト/応答IDとヘッダーを保持してください。テキストジョブを取得する汎用URLは提供されません。
レスポンスのフィールド
| フィールド | 種類 |
|---|---|
フィールドchoices[].index | 種類integer |
フィールドchoices[].message.content | 種類string|null |
フィールドchoices[].message.tool_calls | 種類tool_call[] |
フィールドchoices[].message.reasoning_content | 種類string |
フィールドchoices[].message.reasoning_details | 種類object|array |
フィールドchoices[].finish_reason | 種類string|null |
フィールドusage | 種類object |
エラーと次の手順
| レスポンス | 条件 | 次の手順 |
|---|---|---|
レスポンス400 · invalid_request_error | 条件必須フィールド、素材の表現形式、またはパラメーター値が不正です | 次の手順新しい生成リクエストを送る前に、指定されたフィールドを修正してください。 |
エイリアス
モデルのエイリアス
Ailoot Ultra google/gemma-4-31b-it
メソッドパスのエイリアス
上記に表示されたメソッドパスを使用してください。
関連する呼び出し用ID
Ailoot Ultra · Anthropic メッセージ POST /v1/messages google/gemma-4-31b-it
google/gemma-4-31b-itはじめに
Gemma 4 31B ITは、テキストと視覚的な推論のために指示調整された、Googleの密なモデルです。256Kのコンテキスト、設定できる思考、画像とフレームに基づく動画の理解、ネイティブな関数呼び出しにより、テキストを出力するコーディング、文書、エージェントの作業を支えます。
- 対応する入力
- テキスト
- 結果
- json · sse
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · Anthropic メッセージ POST /v1/messages
- 入力の種類
text- 出力の種類
json,sse- 出力形式
- JSONまたはSSE
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 google/gemma-4-31b-it | デフォルト— |
フィールドmessages | 種類message[] | 要件必須 | 値と制限 | デフォルト— |
フィールドmessages[].role | 種類string | 要件必須 | 値と制限 user, assistant | デフォルト— |
フィールドmessages[].content | 種類string | 要件必須 | 値と制限 | デフォルト— |
フィールドmax_tokens | 種類integer | 要件必須 | 値と制限 | デフォルト— |
フィールドstream | 種類boolean | 要件任意 | 値と制限 | デフォルトfalse |
入力素材の組み合わせ
テキスト · UTF-8テキスト
messages[].contentの文字列
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, messages, max_tokens |
パラメータoptional_controls | 仕様stream |
パラメータmaterial_types | 仕様text |
パラメータtext_file_material | 仕様実際のUTF-8文書を読み、その本文を指定された入力またはメッセージ内容の文字列に入れてください。 |
ライフサイクル: synchronous_or_streamed
料金
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 標準料金 高速モードが選択されている場合
- Flex モード
- 標準料金 flex モードが選択されている場合
- 最大推論量
- 標準料金 推論量が最大で、調整に既定値(default)を使用する場合
- 明示的キャッシュの料金
- 無効 明示的キャッシュを要求した場合
Ailootの料金
設定別の価格
各料金を表示された条件と照合してください。選択肢となる設定の各組には、いずれか1つの料金を適用します。
| 設定 | 料金表 | コンテキストトークン数が次の値を超える場合 | コンテキストトークン数が次の値以下の場合 | 料金 |
|---|---|---|---|---|
| 設定トークンの基本単価 | 料金表基本料金 | コンテキストトークン数が次の値を超える場合— | コンテキストトークン数が次の値以下の場合上限なし | 料金 入力 · 入力トークン $0.0002 / 1K トークン 出力 · 出力トークン $0.00068 / 1K トークン 入力 · キャッシュ読み取り $0.0002 / 1K トークン 入力 · キャッシュ書き込み — / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
| 設定リクエスト長に応じた料金区分 1 | 料金表— | コンテキストトークン数が次の値を超える場合0 | コンテキストトークン数が次の値以下の場合上限なし | 料金 入力 · 入力トークン $0.0002 / 1K トークン 出力 · 出力トークン $0.00068 / 1K トークン 入力 · キャッシュ読み取り $0.0002 / 1K トークン 入力 · キャッシュ書き込み — / 1K トークン 入力 · キャッシュ書き込み、1時間 — / 1K トークン |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · Anthropic メッセージ
{
"model": "google/gemma-4-31b-it",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemma-4-31b-it', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemma-4-31b-it', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
結果を受け取って保存
Ailoot Ultra · Anthropic メッセージ
JSONまたはSSE
完了した結果をすべて保存
返された完全なレスポンス、ファイル、コンテンツ部分をすべて保存してください。
すべてのコンテンツブロック、思考署名、実際のツール利用IDを保持してください。SSEのすべてのブロック差分を組み立てます。最初のテキストブロックだけでは完全な出力になりません。
元のレスポンスを確認する場合
リクエスト/応答IDとヘッダーを保持してください。テキストジョブを取得する汎用URLは提供されません。
レスポンスのフィールド
| フィールド | 種類 |
|---|---|
フィールドid | 種類string |
フィールドmodel | 種類string |
フィールドcontent[] | 種類text|thinking|tool_use|other content block |
フィールドstop_reason | 種類string|null |
フィールドusage | 種類object |
エラーと次の手順
| レスポンス | 条件 | 次の手順 |
|---|---|---|
レスポンス400 · invalid_request_error | 条件必須フィールド、素材の表現形式、またはパラメーター値が不正です | 次の手順新しい生成リクエストを送る前に、指定されたフィールドを修正してください。 |
エイリアス
モデルのエイリアス
Ailoot Ultra google/gemma-4-31b-it
メソッドパスのエイリアス
上記に表示されたメソッドパスを使用してください。
関連する呼び出し用ID
FAQ · Google: Gemma 4 31B
- 利用できる入力と結果は何ですか?
POST /v1/chat/completions·google/gemma-4-31b-it:text→textPOST /v1/messages·google/gemma-4-31b-it:text→json,sse- リクエストはどの項目を使用しますか?
POST /v1/chat/completions·google/gemma-4-31b-it:model,messages,stream,modalities,providerPOST /v1/messages·google/gemma-4-31b-it:model,messages,max_tokens,stream- どの制限が適用されますか?
POST /v1/chat/completions·google/gemma-4-31b-it:messages.min_items:1