プロンプト API

コミュニティグループ報告書ドラフト,

この文書についての詳細
このバージョン:
https://webmachinelearning.github.io/prompt-api
課題追跡:
GitHub
編集者:
(Google)
元編集者:
Domenic Denicola (Google)

概要

プロンプト API は、Web ページに言語モデルへ直接プロンプトを与える能力を提供する

この文書のステータス

この仕様は、Web Machine Learning Community Group により公開された。 これは W3C 標準ではなく、W3C 標準化過程上のものでもない。 W3C Community Contributor License Agreement (CLA) の下では、限定的なオプトアウトおよびその他の条件が適用されることに注意されたい。 W3C Community and Business Groups についてさらに学ぶ。

1. はじめに

Prompt API は、ウェブページがブラウザーによって提供される言語モデルに直接プロンプトを与える機能を提供します。この API は、 基盤となるモデル固有の詳細(テンプレート処理や トークン化など)を抽象化する統一された JavaScript API を提供します。組み込みの言語モデルを利用することで、 機密データのローカル処理、オフラインでの使用、モデルの共有、クラウドベースまたは 独自モデルを持ち込む方式と比較したコスト削減などの利点を提供します。

2. 依存関係

この仕様は Infra Standard に依存します。 [INFRA]

ウェブプラットフォームの他の部分と同様に、これらの API では人間の言語は BCP 47 言語タグによって識別されます。 たとえば "ja"、"en-US"、"sr-Cyrl"、または "de-CH-1901-x-phonebk-extended" です。検証、正規化、 および言語タグの照合に使用される具体的なアルゴリズムは、ECMAScript Internationalization API Specification のものであり、これはさらに処理の一部を Unicode Locale Data Markup Language (LDML) に委ねます。 [BCP47] [ECMA-402] [UTS35]。

これらの API は、機械学習モデルによって駆動されることが想定される API ファミリーの一部であり、共通の API サーフェスの慣用表現と仕様パターンを共有します。現在、これらの共有部分に関する仕様テキストは Writing Assistance APIs § 5 共通インフラストラクチャにあり、共通のプライバシーおよびセキュリティに 関する考慮事項については Writing Assistance APIs § 6 プライバシーに関する考慮事項および Writing Assistance APIs § 7 セキュリティに関する考慮事項で説明されています。これらの API を実装するには、その 共通インフラストラクチャを実装し、それらのプライバシーおよびセキュリティに関する考慮事項に適合する必要があります。ただし、実際の Writing Assistance API を実装または公開する必要はありません。 [WRITING-ASSISTANCE-APIS]

3. API

// prompt() メソッドおよび同様のメソッドの戻り値の型。
typedef (DOMString or sequence<LanguageModelMessageContent>) LanguageModelPromptResult;

[Exposed=Window, SecureContext]
interface LanguageModel : EventTarget {
  static Promise<LanguageModel> create(optional LanguageModelCreateOptions options = {});
  static Promise<Availability> availability(optional LanguageModelCreateCoreOptions options = {});
  // **非推奨**: このメソッドは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
  static Promise<LanguageModelParams?> params();

  // これらは role = "system" の場合に TypeError をスローする
  Promise<LanguageModelPromptResult> prompt(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  ReadableStream promptStreaming(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  Promise<undefined> append(
    LanguageModelPrompt input,
    optional LanguageModelAppendOptions options = {}
  );

  Promise<double> measureContextUsage(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  readonly attribute double contextUsage;
  readonly attribute unrestricted double contextWindow;
  attribute EventHandler oncontextoverflow;

  // **非推奨**: このメソッドは拡張機能のコンテキストでのみ利用可能。
  Promise<double> measureInputUsage(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  // **非推奨**: この属性は拡張機能のコンテキストでのみ利用可能。
  readonly attribute double inputUsage;
  // **非推奨**: この属性は拡張機能のコンテキストでのみ利用可能。
  readonly attribute unrestricted double inputQuota;
  // **非推奨**: この属性は拡張機能のコンテキストでのみ利用可能。
  attribute EventHandler onquotaoverflow;

  // **非推奨**: この属性は削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
  readonly attribute unsigned long topK;
  // **非推奨**: この属性は削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
  readonly attribute float temperature;

  // **実験的**: 実験用のコンテキストでのみ利用可能。
  readonly attribute LanguageModelSamplingMode? samplingMode;

  Promise<LanguageModel> clone(optional LanguageModelCloneOptions options = {});
};
LanguageModel includes DestroyableModel;

// **非推奨**: このインターフェースは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
[Exposed=Window, SecureContext]
interface LanguageModelParams {
  readonly attribute unsigned long defaultTopK;
  readonly attribute unsigned long maxTopK;
  readonly attribute float defaultTemperature;
  readonly attribute float maxTemperature;
};

// 言語モデルが実行できるツール呼び出しの記述。
// 注: この辞書への変更を検討する際、作成者は
// WebMCP の ModelContextTool との全般的な整合性を確保すべきである
// (https://webmachinelearning.github.io/webmcp/#model-context-tool).
dictionary LanguageModelToolDeclaration {
  required DOMString name;
  required DOMString description;
  // 入力パラメーターの JSON スキーマ。
  required object inputSchema;
};

dictionary LanguageModelCreateCoreOptions {
  // 注: この2つには、IDL 層によらない独自の範囲外処理の動作がある。
  // 失敗せずに +Infinity を許容できるよう、これらは unrestricted double である。
  // **非推奨**: このオプションは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
  unrestricted double topK;
  // **非推奨**: このオプションは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。
  unrestricted double temperature;

  // **実験的**: 実験用のコンテキストでのみ利用可能。
  LanguageModelSamplingMode samplingMode;

  // セッションで想定される型および言語。
  sequence<LanguageModelExpected> expectedInputs;
  sequence<LanguageModelExpected> expectedOutputs;

  // 言語モデルが使用できるツール。
  // **実験的**: 実験用のコンテキストでのみ利用可能。
  sequence<LanguageModelToolDeclaration> tools = [];
};

dictionary LanguageModelCreateOptions : LanguageModelCreateCoreOptions {
  AbortSignal signal;
  CreateMonitorCallback monitor;

  sequence<LanguageModelMessage> initialPrompts = [];
};

dictionary LanguageModelPromptOptions {
  object responseConstraint;
  boolean omitResponseConstraintInput = false;
  AbortSignal signal;
};

dictionary LanguageModelAppendOptions {
  AbortSignal signal;
};

dictionary LanguageModelCloneOptions {
  AbortSignal signal;
};

dictionary LanguageModelExpected {
  required LanguageModelMessageType type;
  sequence<DOMString> languages;
};

// prompt() メソッドおよび同様のメソッドの引数

typedef (
  sequence<LanguageModelMessage>
  // `[{ role: "user", content: [{ type: "text", value: providedValue }] }]` の略記
  or DOMString
) LanguageModelPrompt;

dictionary LanguageModelMessage {
  required LanguageModelMessageRole role;

  // DOMString の分岐は `[{ type: "text", value: providedValue }]` の略記
  required (DOMString or sequence<LanguageModelMessageContent>) content;

  boolean prefix = false;
};

dictionary LanguageModelMessageContent {
  required LanguageModelMessageType type;
  required LanguageModelMessageValue value;
};

enum LanguageModelSamplingMode { "most-predictable", "predictable", "slightly-predictable", "balanced", "slightly-creative", "creative", "most-creative" };

enum LanguageModelMessageRole { "system", "user", "assistant" };

enum LanguageModelMessageType { "text", "image", "audio", "tool-call", "tool-response" };

typedef (
  ImageBitmapSource
  or AudioBuffer
  or BufferSource
  or DOMString
  or LanguageModelToolCall
  or LanguageModelToolResponse
) LanguageModelMessageValue;

// `LanguageModelToolCall` および `LanguageModelToolResponse` の値の定義
enum LanguageModelToolResultType { "text", "image", "audio", "object" };

dictionary LanguageModelToolResultContent {
  required LanguageModelToolResultType type;
  required any value;
};

// 言語モデルが要求したツール呼び出しを表す。
[Exposed=Window, SecureContext]
interface LanguageModelToolCall {
  constructor(LanguageModelToolCallInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute object? arguments;
};

dictionary LanguageModelToolCallInit {
  required DOMString callId;
  required DOMString name;
  object arguments;
};

[Exposed=Window, SecureContext]
interface LanguageModelToolSuccess {
  constructor(LanguageModelToolSuccessInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute FrozenArray<LanguageModelToolResultContent> result;
};

dictionary LanguageModelToolSuccessInit {
  required DOMString callId;
  required DOMString name;
  required sequence<LanguageModelToolResultContent> result;
};

[Exposed=Window, SecureContext]
interface LanguageModelToolError {
  constructor(LanguageModelToolErrorInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute DOMString errorMessage;
};

dictionary LanguageModelToolErrorInit {
  required DOMString callId;
  required DOMString name;
  required DOMString errorMessage;
};

// ツール呼び出しの実行による応答。成功またはエラーのいずれか。
typedef (LanguageModelToolSuccess or LanguageModelToolError) LanguageModelToolResponse;

3.1. 作成

static create(options) メソッドの手順は次のとおりです。
  1. options、"language-model"、 言語モデルオプションを検証および正規化する、言語モデルオプションの利用可能性を 計算する、言語モデルをダウンロードする、言語モデルを初期化する、言語モデルオブジェクトを作成する、および false を与えた AI モデルオブジェクトの作成の結果を返します。

次の 検証および正準化(言語モデルの オプション) は、LanguageModelCreateCoreOptions options が与えられた場合、以下の手順を実行する。これらは options をその場で変更して正準化を行い、 言語タグの重複を排除し、いずれかが無効であれば例外をスローする。
  1. もし options["expectedInputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedInputs"] の各項目とする:

    1. もし expected["languages"] が 存在する場合は、次の 検証および正準化( 言語タグ) を、expected と "languages" を与えて実行する。

  2. hasToolCallInExpectedOutputs を false とする。

  3. もし options["expectedOutputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedOutputs"] の各項目とする:

    1. もし expected["type"] が "tool-call" であれば、 hasToolCallInExpectedOutputs を true に設定する。

    2. もし expected["languages"] が 存在する場合は、次の 検証および正準化( 言語タグ) を、expected と "languages" を与えて実行する。

  4. もし options["tools"] が 次の意味で 空でない場合は:

    1. hasToolCallInExpectedOutputs が false の場合は、次の例外をスローする:TypeError。

    2. toolNames を空の 順序付き 集合とする。要素は 文字列とする。

    3. 各項目に対して実行する。tool は options["tools"] の各項目とする:

      1. もし tool["name"] が 空の 文字列であれば、次の例外をスローする:TypeError。

      2. もし toolNames が 含んでいるものに tool["name"] があれば、 次の例外をスローする:TypeError。

      3. 追加する:tool["name"] を toolNames に。

      4. もし tool["description"] が 空の 文字列であれば、次の例外をスローする:TypeError。

      5. schema を tool["inputSchema"] とする。

      6. typeValue を ? Get(schema, "type") とする。

      7. typeValue が "object" でない場合は、次の例外をスローする:TypeError。

      8. propertiesValue を ? Get(schema, "properties") とする。

      9. propertiesValue が undefined でなく、かつ propertiesValue が 次の型でない場合:Object、次の例外をスローする:TypeError。

      10. requiredValue を ? Get(schema, "required") とする。

      11. requiredValue が undefined でなく、かつ ? IsArray(requiredValue) が false の場合は、 次の例外をスローする:TypeError。

      12. ? 直列化する( JavaScript 値を JSON 文字列に)を、schema を与えて実行する。

  5. もし options["initialPrompts"] が 存在し、かつ 空でない 場合は:

    1. expectedInputs を options["expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。

    2. expectedInputTypes を、次の 想定されるコンテンツ型を取得する処理に expectedInputs を与えた結果とする。

    3. 次の 検証および正準化( プロンプト)を、options["initialPrompts"]、 expectedInputTypes、および false を与えて実行する。

次の ダウンロード( 言語モデル) は、LanguageModelCreateCoreOptions options が与えられた場合:
  1. 表明:これらの手順は 並列に実行されている。

  2. ユーザーエージェントが言語モデルにプロンプトを与えるために必要なものすべてについて、ダウンロード処理を開始する。 その内容は options に従う。これには、基盤 AI モデル、特定の 言語やオプション値に対応するファインチューニング、またはその他のリソースが含まれる場合がある。

  3. 何らかの理由でダウンロード処理を開始できない場合は、false を返す。

  4. true を返す。

次の 初期化( 言語モデル) は、LanguageModelCreateOptions options が与えられた場合:
  1. 表明:これらの手順は 並列に実行されている。

  2. availability を、次の 言語モデルのオプションの 可用性を計算する処理に options を与えた結果とする。

    1. もし availability が null または unavailable であれば、 次の DOMException エラー情報を返す。その name は "NotSupportedError" とし、 その details には適切な 詳細を含める。

  3. ユーザーエージェントのプロンプト処理能力を支える AI モデルに必要な初期化操作を 実行する。

    これには、適切なモデルと、次のオプションをサポートするために必要なファインチューニングを、 options に従ってメモリーに読み込むことが含まれる場合がある。

    1. もし options["initialPrompts"] が 次の意味で 空でない場合は:

      1. expectedInputs を options["expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。

      2. expectedInputTypes を、次の 想定されるコンテンツ 型を取得する処理に expectedInputs を与えた結果とする。

      3. initialMessages を、次の 検証および 正準化(プロンプト)に options["initialPrompts"]、 expectedInputTypes、および false を与えた結果とする。

      4. initialMessages をモデルのコンテキストウィンドウに読み込む。

    2. もし options["tools"] が 次の意味で 空でなければ、options["tools"] を モデルのコンテキストウィンドウに読み込む。

  4. options の読み込み処理によって、モデルのコンテキストウィンドウを使い切ったことが 原因で初期化に失敗した場合は:

    1. requested を、次を符号化するために必要なコンテキストウィンドウの量とする: options。入力としての options の符号化は 実装定義である。

    2. maximum を、ユーザーエージェントがサポートするコンテキストウィンドウの最大サイズとする。

    3. 表明:requested は次の値より大きい: maximum。(それが、このエラー分岐に到達した理由である。)

    4. 次の クォータ超過エラー情報を返す。 その requested は requested とし、 quota は maximum とする。

  5. その他の理由で初期化に失敗した場合は、次の DOMException エラー情報を返す。その name は "OperationError" とし、 その details には適切な詳細を含める。

  6. null を返す。

次の 作成( 言語モデルオブジェクト) は、レルム realm と LanguageModelCreateOptions options が与えられた場合:
  1. 表明:これらの手順は realm の 周囲のエージェントの イベントループ上で実行されている。

  2. contextWindowSize を、このモデルについてユーザーエージェントが利用できるコンテキストウィンドウの 量とする。(この値は 実装定義であり、例えば次の制約を超える 固有の制限がなければ +∞ でもよい:ユーザーのメモリー、または JavaScript 文字列の制限。)

  3. initialMessages を空の リストとし、その要素は LanguageModelMessage とする。

  4. tools を options["tools"] とする。

  5. initialContextUsage を 0 とする。

  6. もし options["initialPrompts"] が 存在し、かつ 空でない 場合は:

    1. expectedInputs を options["expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。

    2. expectedInputTypes を、次の 想定されるコンテンツ型を取得する処理に expectedInputs を与えた結果とする。

    3. initialMessages を、次の 検証および正準化( プロンプト)に options["initialPrompts"]、 expectedInputTypes、および false を与えた結果に設定する。

  7. initialMessages が 空でないか、または tools が 空でない 場合は:

    1. initialContextUsage を、次を符号化するために使用されるコンテキストウィンドウの量に設定する: initialMessages および tools。

  8. 新しい LanguageModel オブジェクトを realm 内で作成し、以下の値を設定して返す。

    初期メッセージ

    initialMessages

    top K

    options["topK"] ただし、これが 存在し、かつ options["samplingMode"] が 次の意味で 存在しない場合に限る。それ以外の場合は 実装定義の値

    温度

    options["temperature"] ただし、これが 存在し、かつ options["samplingMode"] が 次の意味で 存在しない場合に限る。それ以外の場合は 実装定義の値

    サンプリングモード

    options["samplingMode"] ただし、これが 存在する場合に限る。それ以外の場合、options["topK"] が 存在するか、または options["temperature"] が 存在する場合は null、それ以外の場合は "balanced"

    想定入力

    options["expectedInputs"] ただし、これが 存在する場合に限り、それ以外の場合は空の リスト

    想定出力

    options["expectedOutputs"] ただし、これが 存在する場合に限り、それ以外の場合は空の リスト

    ツール

    tools

    コンテキストウィンドウのサイズ

    contextWindowSize

    現在のコンテキスト使用量

    initialContextUsage

3.2. 利用可能性

静的 availability(options) メソッドの手順は 次のとおりである:
  1. 次の AI モデルの可用性を計算する処理に、 options、"language-model"、 検証および正準化( 言語モデルのオプション)、および 計算(言語モデルのオプションの 可用性)を与えた結果を返す。

次の 計算(言語モデルのオプションの可用性) は、 LanguageModelCreateCoreOptions options が与えられた場合、以下の手順を実行する。これらは Availability 値または null を返し、options をその場で変更して、言語タグを最適な 一致に更新する。
  1. 表明:このアルゴリズムは 並列に実行されている。

  2. availability を オプションに依存しない言語モデルの 可用性とする。

  3. availability が null の場合は、null を返す。

  4. availabilities を リストとし、その要素を availability とする。

  5. inputPartition を、次の 言語の可用性の 分割を取得する処理に、その言語のテキストで言語モデルにプロンプトを与えるという目的を与えた結果とする。

  6. outputPartition を、次の 言語の可用性の 分割を取得する処理に、その言語で言語モデルの出力を生成するという目的を与えた結果とする。

  7. もし options["expectedInputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedInputs"] の各項目とする:

    1. もし expected["languages"] が 存在する場合は:

      1. inputLanguageAvailability を、次の 言語の 可用性を計算する処理に expected["languages"] および inputPartition を与えた結果とする。

      2. 追加する:inputLanguageAvailability を availabilities に。

    2. inputTypeAvailability を、次の 言語モデルのコンテンツ型の 可用性に expected["type"] および true を与えた結果とする。

    3. 追加する:inputTypeAvailability を availabilities に。

  8. もし options["expectedOutputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedOutputs"] の各項目とする:

    1. もし expected["languages"] が 存在する場合は:

      1. outputLanguageAvailability を、次の 言語の 可用性を計算する処理に expected["languages"] および outputPartition を与えた結果とする。

      2. 追加する:outputLanguageAvailability を availabilities に。

    2. outputTypeAvailability を、次の 言語モデルのコンテンツ型の 可用性に expected["type"] および false を与えた結果とする。

    3. 追加する:outputTypeAvailability を availabilities に。

  9. 次の 最小可用性に availabilities を与えた結果を返す。

次の オプションに依存しない言語モデルの可用性 は、 以下の手順によって与えられる。これらは Availability 値または null を返す。
  1. 表明:このアルゴリズムは 並列に実行されている。

  2. ユーザーエージェントが次を実行できるかどうかの判断中に何らかのエラーが発生し、その対象が サポートできるかどうかという、言語 モデルへのプロンプト処理であり、そのエラーをユーザーエージェントが一時的である(再照会すれば そのようなエラーが生じなくなる可能性がある)と判断する場合は、null を返す。

  3. ユーザーエージェントが 現在サポートしている対象が、 言語モデルへのプロンプト処理である場合は、次を返す:"available"。

  4. ユーザーエージェントが、次の処理を サポートできるようになると判断し、その対象が言語モデルへのプロンプト処理であるが、 すでに進行中のダウンロードの完了後に限る場合は、次を返す:"downloading"。

  5. ユーザーエージェントが、次の処理を サポートできるようになると判断し、その対象が言語モデルへのプロンプト処理であるが、 現在は進行していないダウンロードを実行した後に限る場合は、次を返す:"downloadable"。

  6. それ以外の場合は、次を返す:"unavailable"。

次の 言語モデルのコンテンツ型の可用性 は、 LanguageModelMessageType type および真偽値 isInput が与えられた場合、以下の手順によって与えられる。これらは Availability 値を返す。
  1. 表明:このアルゴリズムは 並列に実行されている。

  2. ユーザーエージェントが 現在サポートしているものが type であり、 その用途が isInput が true なら入力、isInput が false なら出力である場合は、 次を返す:"available"。

  3. ユーザーエージェントが、次の型を サポートできるようになると判断し、その対象が上記の用途の type であるが、 すでに進行中のダウンロードの完了後に限る場合は、次を返す:"downloading"。

  4. ユーザーエージェントが、次の型を サポートできるようになると判断し、その対象が上記の用途の type であるが、 現在は進行していないダウンロードを実行した後に限る場合は、次を返す:"downloadable"。

  5. それ以外の場合は、次を返す:"unavailable"。

3.3. LanguageModel クラス

すべての LanguageModel は、作成時に設定される LanguageModelMessage の リストである、初期メッセージを持ちます。

すべての LanguageModel は、作成時に設定される unsigned long である top K を持ちます。

すべての LanguageModel は、作成時に設定される float である temperature を持ちます。

すべての LanguageModel は、作成時に設定される LanguageModelSamplingMode または null である サンプリングモードを持ちます。

すべての LanguageModel は、作成時に設定される LanguageModelExpected の リストである、想定される入力を持ちます。

すべての LanguageModel は、作成時に設定される LanguageModelExpected の リストである、想定される出力を持ちます。

すべての LanguageModel は、作成時に設定される LanguageModelToolDeclaration の リストである、ツールを持ちます。

すべての LanguageModel は、作成時に設定される unrestricted double である コンテキストウィンドウサイズを持ちます。

すべての LanguageModel は、初期値 0 の double である 現在のコンテキスト使用量を持ちます。


contextUsage getter の手順は、this の現在のコンテキスト使用量を返すことです。

inputUsage getter の手順は、this の現在のコンテキスト使用量を返すことです。

contextWindow getter の手順は、this のコンテキストウィンドウサイズを返すことです。

inputQuota getter の手順は、this のコンテキストウィンドウサイズを返すことです。

topK getter の手順は、this の top K を返すことです。

temperature getter の手順は、this のtemperature を返すことです。

samplingMode getter の手順は、this のサンプリングモードを返すことです。


次に示すのは、すべての LanguageModel オブジェクトがイベントハンドラー IDL 属性としてサポートしなければならない、 イベントハンドラー(および対応するイベントハンドラーイベント型)です:

イベントハンドラー イベントハンドラーイベント型
oncontextoverflow contextoverflow
onquotaoverflow quotaoverflow

prompt(input, options) メソッドの 手順は次のとおりです:
  1. responseConstraint を options["responseConstraint"] が 存在する場合はその値、それ以外の場合は null とします。

  2. omitResponseConstraintInput を options["omitResponseConstraintInput"] とします。

  3. hasNonTextExpectedOutput を false とします。

  4. 各 expected について、this の想定される出力を処理します:

    1. expected["type"] が "text" でない場合、 hasNonTextExpectedOutput を true に設定します。

  5. contents を LanguageModelMessageContent の空のリストとします。

  6. text を空の文字列とします。

  7. operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:

    1. prefillSuccess を、this、 input、omitResponseConstraintInput、responseConstraint、 error、および stopProducing を与えて事前入力した結果とします。

    2. prefillSuccess が false の場合、返ります。

    3. hasNonTextExpectedOutput が false の場合:

      1. this、responseConstraint、 chunkProduced、done、error、および stopProducing を与えて生成します。

      2. 返ります。

    4. onChunk を、引数 chunk を取り、 次の手順を実行するアルゴリズムステップとします:

      1. chunk が文字列の場合:

        1. text を text と chunk の連結に設定します。

      2. それ以外の場合:

        1. 表明: chunk は LanguageModelMessageContent です。

        2. text が空の文字列でない場合:

          1. «[ "type" → "text", "value" → text ]» を contents に付加します。

          2. text を空の文字列に設定します。

        3. chunk を contents に付加します。

    5. onDone を、引数を取らず次の 手順を実行するアルゴリズムステップとします:

      1. text が空の文字列 でないか、contents が空の場合:

        1. «[ "type" → "text", "value" → text ]» を contents に付加します。

      2. done が null でない場合、done を実行します。

    6. this、responseConstraint、onChunk、 onDone、error、および stopProducing を与えて 生成します。

  8. promise を、this、options、および operation を与えて 集約された AI モデル結果を取得した 結果とします。

  9. hasNonTextExpectedOutput が false の場合、promise を返します。

  10. promise に、contents を返す fulfillment ハンドラーで 反応した結果を返します。

promptStreaming(input, options) メソッドの手順は次のとおりです:
  1. responseConstraint を options["responseConstraint"] が 存在する場合はその値、それ以外の場合は null とします。

  2. omitResponseConstraintInput を options["omitResponseConstraintInput"] とします。

  3. operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:

    1. prefillSuccess を、this、 input、omitResponseConstraintInput、responseConstraint、 error、および stopProducing を与えて事前入力した結果とします。

    2. prefillSuccess が true の場合、this、 responseConstraint、chunkProduced、done、 error、および stopProducing を与えて生成します。

  4. this、options、および operation を与えて ストリーミング AI モデル結果を取得した結果を返します。

append(input, options) メソッドの 手順は次のとおりです:
  1. operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:

    事前入力アルゴリズムは チャンクを生成しないため、chunkProduced は決して呼び出されません。

    1. prefillSuccess を、this、 input、false、null、error、および stopProducing を与えて 事前入力した結果とします。

    2. prefillSuccess が true で done が null でない場合、 done を実行します。

  2. this、options、および operation を与えて 集約された AI モデル結果を取得した 結果を返します。

measureContextUsage(input, options) メソッドの手順は次のとおりです:
  1. options["omitResponseConstraintInput"] が true で、options["responseConstraint"] が 存在しない場合、"TypeError" DOMException をスローします。

  2. expectedInputTypes を、this の想定される入力を与えて 想定される コンテンツ型を取得した結果とします。

  3. messages を、input、expectedInputTypes、および false を 与えてプロンプトを検証および正規化した 結果とします。

  4. options["responseConstraint"] が 存在し、null でなく、かつ options["omitResponseConstraintInput"] が false の場合、実装はモデルの動作を導くために実装定義の LanguageModelMessage を messages に挿入しても構いません。

  5. measureUsage を、引数 stopMeasuring を取り、 messages と stopMeasuring を与えて言語モデルのコンテキスト使用量を測定した 結果を返すアルゴリズムステップとします。

  6. this、options、および measureUsage を与えて AI モデル入力使用量を測定した結果を返します。

measureInputUsage(input, options) メソッドの手順は次のとおりです:
  1. input と options を与えて measureContextUsage() メソッドの手順を実行した結果を返します。

clone(options) メソッドの手順は次のとおりです:
  1. this と options を与えて言語モデルを複製した結果を返します。

3.3.1. 事前入力と生成

次が与えられたときに事前入力するには:

次の手順を実行します:

  1. 表明: このアルゴリズムは並列に実行されています。

  2. expectedInputTypes を、model の想定される 入力を与えて想定される コンテンツ型を取得した結果とします。

  3. messages を、input、expectedInputTypes、および model の現在のコンテキスト使用量が 0 より 大きければ true、それ以外は false を与えてプロンプトを検証および正規化した 結果とします。

    これが例外 e をスローした場合:

    1. error が null でない場合、DOMException エラー情報を与えて error を実行します。そのname は e のname であり、そのdetails には適切な 詳細を含めます。

    2. false を返します。

  4. responseConstraint が null でなく、omitResponseConstraintInput が false の場合、 実装はモデルの動作を導くために実装定義の LanguageModelMessage を messages に挿入しても構いません。

  5. requested を、messages と stopPrefilling を与えて 言語モデルのコンテキスト 使用量を測定した結果とします。

  6. requested が null の場合、false を返します。

  7. requested がエラー情報の場合:

    1. error が null でない場合、requested を与えて error を実行します。

    2. false を返します。

  8. 表明: requested は数値です。

  9. model の現在のコンテキスト使用量 + requested が model のコンテキストウィンドウサイズより大きい場合:

    1. error が null でない場合:

      1. errorInfo を、クォータ超過エラー 情報とします。そのrequested は model の現在のコンテキスト使用量 + requested、quota は model のコンテキストウィンドウサイズです。

      2. errorInfo を与えて error を実行します。

    2. false を返します。

  10. 実装定義の方法で、 基盤となるモデルの内部状態を更新し、messages を含めます。

    この処理では、状態の更新方法を導くために、model の初期 メッセージ、model のサンプリングモード、model のtop K、model のtemperature、model の想定される入力、model の想定される出力、および model のツール を使用するべきです。

    この処理は、§ 4 プライバシーに関する 考慮事項および § 5 セキュリティに関する考慮事項に示された指針に適合しなければなりません。

    この処理中に stopPrefilling が true を返した場合、false を返します。

    事前入力中にエラーが発生した場合:

    1. § 3.3.4 エラーの指針に従い、エラーを エラー情報 errorInfo として表します。

    2. error が null でない場合、errorInfo を与えて error を実行します。

    3. false を返します。

  11. model の現在のコンテキスト使用量を、 model の現在のコンテキスト使用量 + requested に設定します。

  12. true を返します。

次が与えられたときに生成するには:

次の手順を実行します:

  1. 表明: このアルゴリズムは並列に実行されています。

  2. 次の指針に従い、実装定義の方法で、 現在の内部状態に基づいて言語モデルから応答を生成する処理を開始します。

    この処理では、モデルの動作を導くために、model の初期 メッセージ、model のサンプリングモード、model のtop K、model のtemperature、model の想定される入力、model の想定される出力、model のツール、および responseConstraint を使用する べきです。

    プロンプト処理は、§ 4 プライバシーに関する 考慮事項および § 5 セキュリティに関する考慮事項に示された指針に適合しなければなりません。

    model のツールが空でない場合、 モデルはテキストに加えて、またはテキストの代わりに、model の ツールで 宣言されたツールに基づいて 1 つ以上のツール呼び出しを生成しても構いません。

  3. true の間:

    1. 次の応答データのチャンク(テキストまたはツール呼び出し)が生成されるか、 処理が終了するか、stopProducing を呼び出した結果が true になるまで待機します。

    2. テキストチャンクが正常に生成された場合:

      1. それを文字列 chunk として表します。

      2. chunkProduced が null でない場合、chunk を与えて chunkProduced を実行します。

    3. それ以外で、ツール呼び出しが正常に生成された場合:

      1. callId を、ツール呼び出しを識別する空でない文字列である実装定義の値とします。

      2. name を、呼び出されるツールの名前を表す文字列とします。

      3. arguments を、ツール呼び出しの引数の JSON オブジェクトを表す Object とし、model の関連 realmで作成します。

      4. toolCall を、model の関連 realmで作成された新しい LanguageModelToolCall とし、呼び出し IDを callId に、名前を name に、そして 引数を arguments に設定します。

      5. toolCallContent を、«[ "type" → "tool-call", "value" → toolCall ]» で初期化された LanguageModelMessageContent とします。

      6. chunkProduced が null でない場合、toolCallContent を与えて chunkProduced を実行します。

    4. それ以外で、処理が終了した場合:

      1. 実装定義の方法で、 基盤となるモデルの内部状態および model の現在のコンテキスト使用量を 更新し、生成された応答(テキストとすべてのツール呼び出し)を含めます。

      2. done が null でない場合、done を実行します。

      3. 中断します。

    5. それ以外で、stopProducing が true を返した場合、中断します。

    6. それ以外で、プロンプト処理中にエラーが発生した場合:

      1. § 3.3.4 エラーの指針に従い、エラーをエラー情報 errorInfo として表します。

      2. error が null でない場合、errorInfo を与えて error を実行します。

      3. 中断します。

3.3.2. 使用法

次が与えられたときに言語モデルのコンテキスト使用量を測定するには:

次の手順を実行します:

  1. 表明: このアルゴリズムは並列に実行されています。

  2. inputToModel を、messages を与えて事前入力するために基盤となるモデルへ送られる実装定義の入力とします。

    これは一般に、すべての入力のエンコードで構成され、 プロンプトエンジニアリングまたはその他の実装定義のラッパーが含まれる場合があります。

    この処理中に stopMeasuring が true を返し始めた場合、null を返します。

    この処理中にエラーが発生した場合、§ 3.3.4 エラーの 指針に従った適切なDOMException エラー情報を返します。

  3. inputToModel を基盤となるモデルに与えたときに表現するために必要な コンテキスト使用量を返します。正確な計算手順は実装定義であり、次の 制約に従います。

    返されるコンテキスト使用量は非負かつ有限でなければなりません。これはおおよそ inputToModel 内のデータ量に比例するべきです。

    これは、言語モデルのトークン化方式で入力を表すために必要な トークン数である場合も、データのバイト数に関連する値である場合もあります。

    この処理中に stopMeasuring が true を返し始めた場合、代わりに null を返します。

    この処理中にエラーが発生した場合、代わりに§ 3.3.4 エラーの 指針に従った適切なDOMException エラー情報を返します。

3.3.3. オプション

LanguageModelExpected の リスト expectedContents が与えられたときに想定される コンテンツ型を取得するには:
  1. expectedTypes を LanguageModelMessageType の空のリストとします。

  2. expectedContents の各 expected についてそれぞれ:

    1. expectedTypes が expected["type"] を 含まない場合、expected["type"] を expectedTypes に付加します。

  3. expectedTypes が "text" を 含まない 場合、"text" を expectedTypes に付加します。

  4. expectedTypes を返します。

次の プロンプトを検証して正準化する 処理は、LanguageModelPrompt input、次の リスト(要素は LanguageModelMessageType) expectedTypes、および真偽値 hasAppendedInput が与えられた場合、以下の手順を実行する。戻り 値は空でない リストであり、その要素は LanguageModelMessageで、 「省略しない」形式である。
  1. 表明:expectedTypesは 含む: "text"。

  2. もし inputが 文字列なら、次を返す:« «[ "role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» »。

  3. 表明:inputは リストであり、要素は LanguageModelMessageである。

  4. もし inputが空の リストなら、次を返す:« «[ "role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» »。

  5. messagesを空の リストとし、要素は LanguageModelMessageとする。

  6. 各項目に対して実行する。messageは inputの各項目とする:

    1. もし message["content"]が 文字列なら、messageを次に設定する:«[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]»。

    2. もし message["prefix"]が trueなら:

      1. もし message["role"]が "assistant"でなければ、 次の例外をスローする:"SyntaxError" DOMException。

      2. messageが inputの最後の項目でない場合は、次の例外をスローする: "SyntaxError" DOMException。

    3. もし message["role"]が "system"であれば、 以下を実行する:

      1. hasAppendedInputがtrueの場合は、次の例外をスローする:TypeError。

    4. もし message["content"]が 空の リストなら:

      1. emptyContentを新しい LanguageModelMessageContentとし、 次の値で初期化する:«[ "type" → "text", "value" → "" ]»。

      2. 追加する:emptyContentを message["content"]に。

    5. 各項目に対して実行する。contentは message["content"]の各項目とする:

      1. もし content["type"]が "tool-call"であり、 かつ message["role"]が "assistant"でなければ、 次の例外をスローする:TypeError。

      2. もし content["type"]が "tool-response"であり、 かつ message["role"]が "user"でなければ、 次の例外をスローする:TypeError。

      3. もし message["role"]が "assistant"であり、 かつ content["type"]が "image" または "audio"なら、 次の例外をスローする:"NotSupportedError" DOMException。

      4. もし content["type"]が "text"であり、 かつ content["value"]が 文字列でなければ、次の例外をスローする:TypeError。

      5. もし content["type"]が "image"であれば、 以下を実行する:

        1. もし expectedTypesが 含まないものに "image"があれば、 次の例外をスローする:"NotSupportedError" DOMException。

        2. もし content["value"]が 次のいずれでもなければ:ImageBitmapSource または BufferSource、 次の例外をスローする:TypeError。

      6. もし content["type"]が "audio"であれば、 以下を実行する:

        1. もし expectedTypesが 含まないものに "audio"があれば、 次の例外をスローする:"NotSupportedError" DOMException。

        2. もし content["value"]が 次のいずれでもなければ:AudioBuffer、 BufferSource、 または Blob、 次の例外をスローする:TypeError。

      7. もし content["type"]が "tool-call"であれば、 以下を実行する:

        1. もし expectedTypesが 含まないものに "tool-call"があれば、 次の例外をスローする:"NotSupportedError" DOMException。

        2. もし content["value"]が 次の型でなければ:LanguageModelToolCall、 次の例外をスローする:TypeError。

        3. argumentsを content["value"]の argumentsとする。

        4. argumentsがnullでない場合は:

          1. もし ? IsArray(arguments)が true、または argumentsが プラットフォームオブジェクト、または argumentsをJSONオブジェクトに直列化できない( 例えば、循環参照や、JSONに直列化できない 関数やBigIntなどの値が原因で)場合は、次の例外をスローする:"DataError" DOMException。

      8. もし content["type"]が "tool-response"であれば、 以下を実行する:

        1. もし expectedTypesが 含まないものに "tool-response"があれば、 次の例外をスローする:"NotSupportedError" DOMException。

        2. もし content["value"]が 次の型でなければ:LanguageModelToolResponse、 次の例外をスローする:TypeError。

        3. もし content["value"]が LanguageModelToolSuccessなら、 次を 各項目に対して実行する。resultItemは content["value"]の resultの各項目とする:

          1. もし resultItem["type"]が "image" または "audio"であり、 かつユーザーエージェントがマルチモーダルなツール結果の コンテンツをサポートしない場合は、次の例外をスローする:"NotSupportedError" DOMException。

          2. もし resultItem["type"]が "text"であり、 かつ resultItem["value"]が 文字列でなければ、次の例外をスローする:TypeError。

          3. もし resultItem["type"]が "image"であり、 かつ resultItem["value"]が 次のいずれでもなければ:ImageBitmapSource または BufferSource、 次の例外をスローする:TypeError。

          4. もし resultItem["type"]が "audio"であり、 かつ resultItem["value"]が 次のいずれでもなければ:AudioBuffer、 BufferSource、 または Blob、 次の例外をスローする:TypeError。

          5. もし resultItem["type"]が "object"であれば、 以下を実行する:

            1. もし resultItem["value"]が Objectでなければ、次の例外をスローする: TypeError。

            2. もし resultItem["value"]が プラットフォーム オブジェクト、またはJSONに直列化できない( 例えば、循環参照や、 関数や次の値など、JSONに直列化できない値が原因で: BigInt)場合は、次の例外をスローする:"DataError" DOMException。

    6. contentWithContiguousTextCollapsedを空の リストとし、要素は LanguageModelMessageContentとする。

    7. lastTextContentをnullとする。

    8. 各項目に対して実行する。contentは message["content"]の各項目とする:

      1. もし content["type"]が "text"なら:

        1. lastTextContentがnullなら:

          1. 追加する:contentを contentWithContiguousTextCollapsedに。

          2. lastTextContentを contentに設定する。

        2. それ以外の場合は、lastTextContent["value"]を 次の連結に設定する:lastTextContent["value"] および content["value"]。

          空白やその他の文字は追加されない。したがって、« «[ "type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» »は次のように正準化される:« «[ "type" → "text", "foobar" ]»。

      2. それ以外の場合は:

        1. 追加する:contentを contentWithContiguousTextCollapsedに。

        2. lastTextContentをnullに設定する。

      3. message["content"]を contentWithContiguousTextCollapsedに設定する。

    9. 追加する:messageを messagesに。

    10. hasAppendedInputをtrueに設定する。

  7. もし messagesが 次の意味で 空なら、次の例外をスローする:"SyntaxError" DOMException。

  8. messagesを返す。

3.3.4. エラー

プロンプト処理が失敗した場合、次の考えられる理由がウェブ開発者に提示されることがあります。この表には 考えられる DOMException の 名前と、実装がそれらを使用するべきケースを示します:

DOMException の 名前 シナリオ
"NotAllowedError"

ユーザーの選択またはユーザーエージェントのポリシーによってプロンプト処理が無効化されています。

"NotReadableError"

モデルの出力がユーザーエージェントによってフィルタリングされました。たとえば、有害、 不正確、または無意味であると検出された場合です。

"NotSupportedError"

処理する入力がユーザーエージェントのサポートしない言語であったか、create() の呼び出しで 適切に指定されていませんでした。

モデルの出力が、ユーザーエージェントのサポートしない言語になりました(たとえば、 ユーザーエージェントがその出力言語に対して十分な品質管理テストを 実施していないため)。

"UnknownError"

その他すべてのシナリオ。これには、ユーザーエージェントがモデルにプロンプトを与えられず、さらに § 4 プライバシーに関する考慮事項または § 5 セキュリティに関する考慮事項に示された要件も満たせないと判断した場合が含まれます。または、 ユーザーエージェントが失敗理由を開示しないことを望む場合です。

この表は、prompt API によって提示され得る例外の完全な一覧を示すものではありません。 特定の実装定義の手順から生じ得るものだけを含みます。

LanguageModel model と LanguageModelCloneOptions options が与えられたとき、言語 モデルを複製するには:
  1. global を model の関連グローバルオブジェクトとします。

  2. 表明: global は Window オブジェクトです。

  3. global の関連付けられた Document が完全にアクティブでない場合、"InvalidStateError" DOMException で 拒否された promiseを返します。

  4. signals を « model の破棄用 abort controller のsignal » とします。

  5. options["signal"] が存在する場合、 それを signals に付加します。

  6. compositeSignal を、signals を指定し、AbortSignal と model の関連 realm を使用して依存 abort signal を作成した結果とします。

  7. compositeSignal が中止済みの場合、compositeSignal の中止理由で 拒否された promiseを返します。

  8. signal を options["signal"] が 存在する場合はその値、それ以外の場合は null とします。

  9. signal が null でなく、かつ中止済みの場合、signal の 中止理由で拒否された promise を返します。

  10. promise を、model の関連 realmで作成された新しい promiseとします。

  11. abortedDuringOperation を false とします。

    この変数はイベントループから書き込まれますが、並列に読み取られます。

  12. compositeSignal に次の abort 手順を追加します:

    1. abortedDuringOperation を true に設定します。

    2. promise を compositeSignal の中止理由で拒否します。

  13. 並列に:

    1. AI タスクソース上でグローバルタスクをキューに入れ、次の手順を実行します:

      1. abortedDuringOperation が true の場合、返ります。

      2. clonedModel を、次を持つ新しい LanguageModel オブジェクトとします:

      3. 実装定義の方法で、 その他の状態を model から clonedModel へコピーします。

      4. コピー処理が失敗した場合:

        1. promise を "OperationError" DOMException で拒否します。

        2. 返ります。

      5. promise を clonedModel で解決します。

  14. promise を返します。

3.4. LanguageModelToolCall クラス

すべての LanguageModelToolCall は、作成時に設定される文字列である 呼び出し IDを持ちます。

すべての LanguageModelToolCall は、作成時に設定される文字列である 名前を持ちます。

すべての LanguageModelToolCall は、作成時に設定されるObject または null である 引数を持ちます。

new LanguageModelToolCall(init) コンストラクターの手順は次のとおりです:
  1. this の呼び出し IDを init["callId"] に設定します。

  2. this の名前を init["name"] に設定します。

  3. this の引数を、init["arguments"] が 存在する場合はその値、それ以外の場合は null に設定します。

callId getter の手順は、 this の呼び出し IDを返すことです。

name getter の手順は、this の名前を返すことです。

arguments getter の手順は、 this の引数を返すことです。

3.5. LanguageModelToolSuccess クラス

すべての LanguageModelToolSuccess は、作成時に設定される文字列である 呼び出し IDを持ちます。

すべての LanguageModelToolSuccess は、作成時に設定される文字列である 名前を持ちます。

すべての LanguageModelToolSuccess は、 FrozenArray<LanguageModelToolResultContent> である 結果を持ち、作成時に設定されます。

new LanguageModelToolSuccess(init) コンストラクターの手順は次のとおりです:
  1. this の呼び出し IDを init["callId"] に設定します。

  2. this の名前を init["name"] に設定します。

  3. this の結果を、init["result"] から FrozenArray を作成した結果に設定します。

callId getter の手順は、 this の呼び出し IDを返すことです。

name getter の手順は、this の名前を返すことです。

result getter の手順は、 this の結果を返すことです。

3.6. LanguageModelToolError クラス

すべての LanguageModelToolError は、作成時に設定される文字列である 呼び出し IDを持ちます。

すべての LanguageModelToolError は、作成時に設定される文字列である 名前を持ちます。

すべての LanguageModelToolError は、作成時に設定される文字列である エラーメッセージを持ちます。

new LanguageModelToolError(init) コンストラクターの手順は次のとおりです:
  1. this の呼び出し IDを init["callId"] に設定します。

  2. this の名前を init["name"] に設定します。

  3. this のエラーメッセージを init["errorMessage"] に設定します。

callId getter の手順は、 this の呼び出し IDを返すことです。

name getter の手順は、this の名前を返すことです。

errorMessage getter の手順 は、this のエラーメッセージを返すことです。

3.7. 権限 ポリシーとの統合

Prompt API へのアクセスは、"language-model" というポリシー制御機能によって制限され、これは 'self' のデフォルト許可リストを持ちます。

4. プライバシーに関する考慮事項

Prompt API のプライバシーに関する考慮事項については、Writing Assistance APIs § 6 プライバシーに関する考慮事項を参照してください。そのテキストは、§ 2 依存関係で述べたとおり、同じインフラストラクチャを共有するすべての API に適用されるように 書かれています。

5. セキュリティに関する考慮事項

Prompt API のセキュリティに関する考慮事項については、Writing Assistance APIs § 7 セキュリティに関する考慮事項を参照してください。そのテキストは、§ 2 依存関係で述べたとおり、同じインフラストラクチャを共有するすべての API に適用されるように 書かれています。

索引

この 仕様で定義される用語

参照により 定義される用語

参考文献

規範的参考文献

[DOM]
Anne van Kesteren. DOM 標準. 現行標準. URL: https://dom.spec.whatwg.org/
[ECMA-402]
ECMAScript 国際化 API 仕様. URL: https://tc39.es/ecma402/
[ECMASCRIPT]
ECMAScript 言語仕様. URL: https://tc39.es/ecma262/multipage/
[FileAPI]
Marijn Kruisselbrink. File API. URL: https://w3c.github.io/FileAPI/
[HTML]
Anne van Kesteren; et al. HTML 標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. 現行標準. URL: https://infra.spec.whatwg.org/
[PERMISSIONS-POLICY-1]
Ian Clelland; Ari Chivukula. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[RDF12-CONCEPTS]
Andy Seaborne; et al. RDF 1.2 の概念と抽象 データモデル. URL: https://w3c.github.io/rdf-concepts/spec/
[STREAMS]
Adam Rice; et al. Streams 標準. 現行 標準. URL: https://streams.spec.whatwg.org/
[WEBAUDIO-1.0]
Paul Adenot; Hongchan Choi. Web Audio API. URL: https://webaudio.github.io/web-audio-api/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. 現行 標準. URL: https://webidl.spec.whatwg.org/
[WRITING-ASSISTANCE-APIS]
Writing Assistance APIs. コミュニティグループ報告書草案. URL: https://webmachinelearning.github.io/writing-assistance-apis/

非規範的参考文献

[BCP47]
Addison Phillips; Mark Davis. 言語識別用タグ. September 2009. 現行最良慣行. URL: https://www.rfc-editor.org/info/bcp47
[UTS35]
Mark Davis; et al. Unicode Locale Data Markup Language (LDML). 23 October 2020. Unicode 技術標準 #35. URL: https://www.unicode.org/reports/tr35/tr35-61/tr35.html

IDL 索引

// The return type from prompt() method and those alike.
typedef (DOMString or sequence<LanguageModelMessageContent>) LanguageModelPromptResult;

[Exposed=Window, SecureContext]
interface LanguageModel : EventTarget {
  static Promise<LanguageModel> create(optional LanguageModelCreateOptions options = {});
  static Promise<Availability> availability(optional LanguageModelCreateCoreOptions options = {});
  // **DEPRECATED**: This method will be removed; use samplingMode instead. Only available in extension contexts.
  static Promise<LanguageModelParams?> params();

  // These will throw a TypeError if role = "system"
  Promise<LanguageModelPromptResult> prompt(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  ReadableStream promptStreaming(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  Promise<undefined> append(
    LanguageModelPrompt input,
    optional LanguageModelAppendOptions options = {}
  );

  Promise<double> measureContextUsage(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  readonly attribute double contextUsage;
  readonly attribute unrestricted double contextWindow;
  attribute EventHandler oncontextoverflow;

  // **DEPRECATED**: This method is only available in extension contexts.
  Promise<double> measureInputUsage(
    LanguageModelPrompt input,
    optional LanguageModelPromptOptions options = {}
  );
  // **DEPRECATED**: This attribute is only available in extension contexts.
  readonly attribute double inputUsage;
  // **DEPRECATED**: This attribute is only available in extension contexts.
  readonly attribute unrestricted double inputQuota;
  // **DEPRECATED**: This attribute is only available in extension contexts.
  attribute EventHandler onquotaoverflow;

  // **DEPRECATED**: This attribute will be removed; use samplingMode instead. Only available in extension contexts.
  readonly attribute unsigned long topK;
  // **DEPRECATED**: This attribute will be removed; use samplingMode instead. Only available in extension contexts.
  readonly attribute float temperature;

  // **EXPERIMENTAL**: Only available in experimental contexts.
  readonly attribute LanguageModelSamplingMode? samplingMode;

  Promise<LanguageModel> clone(optional LanguageModelCloneOptions options = {});
};
LanguageModel includes DestroyableModel;

// **DEPRECATED**: This interface will be removed; use samplingMode instead. Only available in extension contexts.
[Exposed=Window, SecureContext]
interface LanguageModelParams {
  readonly attribute unsigned long defaultTopK;
  readonly attribute unsigned long maxTopK;
  readonly attribute float defaultTemperature;
  readonly attribute float maxTemperature;
};

// A description of a tool call that a language model can invoke.
// Note: When considering changes to this dictionary, authors should ensure
// general alignment with ModelContextTool from WebMCP
// (https://webmachinelearning.github.io/webmcp/#model-context-tool).
dictionary LanguageModelToolDeclaration {
  required DOMString name;
  required DOMString description;
  // JSON schema for the input parameters.
  required object inputSchema;
};

dictionary LanguageModelCreateCoreOptions {
  // Note: these two have custom out-of-range handling behavior, not in the IDL layer.
  // They are unrestricted double so as to allow +Infinity without failing.
  // **DEPRECATED**: This option will be removed; use samplingMode instead. Only available in extension contexts.
  unrestricted double topK;
  // **DEPRECATED**: This option will be removed; use samplingMode instead. Only available in extension contexts.
  unrestricted double temperature;

  // **EXPERIMENTAL**: Only available in experimental contexts.
  LanguageModelSamplingMode samplingMode;

  // The expected types and languages for the session.
  sequence<LanguageModelExpected> expectedInputs;
  sequence<LanguageModelExpected> expectedOutputs;

  // Tools that the language model can use.
  // **EXPERIMENTAL**: Only available in experimental contexts.
  sequence<LanguageModelToolDeclaration> tools = [];
};

dictionary LanguageModelCreateOptions : LanguageModelCreateCoreOptions {
  AbortSignal signal;
  CreateMonitorCallback monitor;

  sequence<LanguageModelMessage> initialPrompts = [];
};

dictionary LanguageModelPromptOptions {
  object responseConstraint;
  boolean omitResponseConstraintInput = false;
  AbortSignal signal;
};

dictionary LanguageModelAppendOptions {
  AbortSignal signal;
};

dictionary LanguageModelCloneOptions {
  AbortSignal signal;
};

dictionary LanguageModelExpected {
  required LanguageModelMessageType type;
  sequence<DOMString> languages;
};

// The argument to the prompt() method and others like it

typedef (
  sequence<LanguageModelMessage>
  // Shorthand for `[{ role: "user", content: [{ type: "text", value: providedValue }] }]`
  or DOMString
) LanguageModelPrompt;

dictionary LanguageModelMessage {
  required LanguageModelMessageRole role;

  // The DOMString branch is shorthand for `[{ type: "text", value: providedValue }]`
  required (DOMString or sequence<LanguageModelMessageContent>) content;

  boolean prefix = false;
};

dictionary LanguageModelMessageContent {
  required LanguageModelMessageType type;
  required LanguageModelMessageValue value;
};

enum LanguageModelSamplingMode { "most-predictable", "predictable", "slightly-predictable", "balanced", "slightly-creative", "creative", "most-creative" };

enum LanguageModelMessageRole { "system", "user", "assistant" };

enum LanguageModelMessageType { "text", "image", "audio", "tool-call", "tool-response" };

typedef (
  ImageBitmapSource
  or AudioBuffer
  or BufferSource
  or DOMString
  or LanguageModelToolCall
  or LanguageModelToolResponse
) LanguageModelMessageValue;

// The definitions of `LanguageModelToolCall` and `LanguageModelToolResponse` values
enum LanguageModelToolResultType { "text", "image", "audio", "object" };

dictionary LanguageModelToolResultContent {
  required LanguageModelToolResultType type;
  required any value;
};

// Represents a tool call requested by the language model.
[Exposed=Window, SecureContext]
interface LanguageModelToolCall {
  constructor(LanguageModelToolCallInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute object? arguments;
};

dictionary LanguageModelToolCallInit {
  required DOMString callId;
  required DOMString name;
  object arguments;
};

[Exposed=Window, SecureContext]
interface LanguageModelToolSuccess {
  constructor(LanguageModelToolSuccessInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute FrozenArray<LanguageModelToolResultContent> result;
};

dictionary LanguageModelToolSuccessInit {
  required DOMString callId;
  required DOMString name;
  required sequence<LanguageModelToolResultContent> result;
};

[Exposed=Window, SecureContext]
interface LanguageModelToolError {
  constructor(LanguageModelToolErrorInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute DOMString errorMessage;
};

dictionary LanguageModelToolErrorInit {
  required DOMString callId;
  required DOMString name;
  required DOMString errorMessage;
};

// The response from executing a tool call - either success or error.
typedef (LanguageModelToolSuccess or LanguageModelToolError) LanguageModelToolResponse;