プロンプト 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 は、Web ページに、ブラウザーにより提供される言語モデルへ直接プロンプトを与える能力を提供する。これは、 基礎となるモデルの具体的な詳細(テンプレート化やトークン化など)を抽象化する、統一的な JavaScript API を提供する。 組み込み言語モデルを活用することにより、機微なデータのローカル処理、オフライン利用、モデル共有、およびクラウドベースや 独自モデル持ち込みのアプローチと比べたコスト削減などの利点を提供する。

2. 依存関係

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

Web プラットフォームの他の部分と同様に、これらの 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 Shared infrastructure に存在し、共通のプライバシーおよびセキュリティに関する 考慮事項は Writing Assistance APIs § 6 Privacy considerations および Writing Assistance APIs § 7 Security considerations で議論されている。これらの API を実装するには、その 共有インフラストラクチャを実装し、それらのプライバシーおよびセキュリティに関する考慮事項に適合する必要がある。 ただし、実際の writing assistance APIs を実装または公開する必要はない。 [WRITING-ASSISTANCE-APIS]

3. API

[Exposed=Window, SecureContext]
interface LanguageModel : EventTarget {
  static Promise<LanguageModel> create(optional LanguageModelCreateOptions options = {});
  static Promise<Availability> availability(optional LanguageModelCreateCoreOptions options = {});
  // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
  static Promise<LanguageModelParams?> params();

  // role = "system" の場合、これらは "NotSupportedError" DOMException を投げる
  Promise<DOMString> 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;

  // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
  readonly attribute unsigned long topK;
  // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
  readonly attribute float temperature;

  readonly attribute LanguageModelSamplingMode samplingMode;

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

// **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
[Exposed=Window, SecureContext]
interface LanguageModelParams {
  readonly attribute unsigned long defaultTopK;
  readonly attribute unsigned long maxTopK;
  readonly attribute float defaultTemperature;
  readonly attribute float maxTemperature;
};


callback LanguageModelToolFunction = Promise<DOMString> (any... arguments);

// 言語モデルが呼び出せるツール呼び出しの記述。
dictionary LanguageModelTool {
  required DOMString name;
  required DOMString description;
  // 入力パラメーターの JSON スキーマ。
  required object inputSchema;
  // 言語モデルに代わってユーザーエージェントにより呼び出される関数。
  required LanguageModelToolFunction execute;
};

dictionary LanguageModelCreateCoreOptions {
  // 注: これら 2 つは IDL 層ではなく、カスタムの範囲外処理動作を持つ。
  // 失敗せずに +Infinity を許容するため、unrestricted double である。
  // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
  unrestricted double topK;
  // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。
  unrestricted double temperature;

  LanguageModelSamplingMode samplingMode = "default";

  sequence<LanguageModelExpected> expectedInputs;
  sequence<LanguageModelExpected> expectedOutputs;
  sequence<LanguageModelTool> 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", "balanced", "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
) LanguageModelMessageValue;

3.1. 作成

静的 create(options) メソッド手続きは次のとおりである:
  1. options, "language-model", validate and canonicalize language model options, compute language model options availability, download the language model, initialize the language model, create a language model object, および false が与えられた AI モデルオブジェクトを作成する結果を返す。

LanguageModelCreateCoreOptions options が与えられたとき、言語モデルオプションを検証し正規化するには、 次の手続きを実行する。これらは options をその場で変更して言語タグを正規化および重複排除し、 いずれかが無効であれば例外を投げる。
  1. options["expectedInputs"] が存在する場合、options["expectedInputs"] の各 expected について反復する:

    1. expected["languages"] が存在する場合、expected および "languages" が与えられた 言語タグの検証と正規化を行う。

  2. options["expectedOutputs"] が存在する場合、options["expectedOutputs"] の各 expected について反復する:

    1. expected["languages"] が存在する場合、expected および "languages" が与えられた 言語タグの検証と正規化を行う。

  3. 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. 表明: requestedmaximum より大きい。(それが、このエラー分岐に到達した理由である。)

    4. quota exceeded エラー情報を返す。 そのrequestedrequested であり、 quotamaximum である。

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

  6. null を返す。

realm realm および LanguageModelCreateOptions options が与えられたとき、 言語モデルオブジェクトを作成するには:
  1. 表明: これらの手続きは realm周囲のエージェントイベントループ上で実行されている。

  2. contextWindowSize を、このモデルについてユーザーエージェントが利用可能なコンテキストウィンドウ量とする。 (この値は実装定義であり、たとえばユーザーのメモリーや JavaScript 文字列の制限を超える 特定の制限がない場合には +∞ であってもよい。)

  3. initialMessages を、LanguageModelMessage の空の リストとする。

  4. initialMessagesUsage を 0 とする。

  5. options["initialPrompts"] が存在する場合:

    1. expectedInputs を、options["expectedInputs"] が存在するならその値、そうでなければ空のリストとする。

    2. expectedInputTypes を、expectedInputs が与えられた 期待されるコンテンツ型を取得する結果とする。

    3. initialMessages を、options["initialPrompts"], expectedInputTypes, および false が与えられた プロンプトの検証と正規化結果に設定する。

    4. initialMessagesUsage を、initialMessages および options["signal"] が与えられた 言語モデルのコンテキスト使用量を測定する結果に設定する。

  6. realm に作成された新しい LanguageModel オブジェクトを、次を持つものとして返す

    initial messages

    initialMessages

    top K

    options["topK"] が存在するならその値、そうでなければ実装定義の値

    temperature

    options["temperature"] が存在するならその値、そうでなければ実装定義の値

    expected inputs

    options["expectedInputs"] が存在するならその値、そうでなければ空のリスト

    expected outputs

    options["expectedOutputs"] が存在するならその値、そうでなければ空のリスト

    tools

    options["tools"] が存在するならその値、そうでなければ空のリスト

    context window size

    contextWindowSize

    current context usage

    initialMessagesUsage

3.2. 利用可能性

静的 availability(options) メソッド手続きは 次のとおりである:
  1. options, "language-model", validate and canonicalize language model options, および compute language model options availability が与えられた AI モデルの利用可能性を計算する結果を返す。

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

  2. availability を、言語モデルの非オプション利用可能性とする。

  3. availability が null である場合、null を返す。

  4. availabilities を、availability を含む リストとする。

  5. inputPartition を、その言語のテキストで言語モデルにプロンプトを与える目的が与えられた 言語利用可能性パーティションを取得する結果とする。

  6. outputPartition を、その言語で言語モデル出力を生成する目的が与えられた 言語利用可能性パーティションを取得する結果とする。

  7. options["expectedInputs"] が存在する場合、options["expectedInputs"] の各 expected について反復する:

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

      1. inputLanguageAvailability を、 expected["languages"] および inputPartition が与えられた 言語利用可能性を計算する結果とする。

      2. inputLanguageAvailabilityavailabilities付加する。

    2. inputTypeAvailability を、expected["type"] および true が与えられた言語モデルコンテンツ型利用可能性とする。

    3. inputTypeAvailabilityavailabilities付加する。

  8. options["expectedOutputs"] が存在する場合、options["expectedOutputs"] の各 expected について反復する:

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

      1. outputLanguageAvailability を、 expected["languages"] および outputPartition が与えられた 言語利用可能性を計算する結果とする。

      2. outputLanguageAvailabilityavailabilities付加する。

    2. outputTypeAvailability を、expected["type"] および false が与えられた言語モデルコンテンツ型利用可能性とする。

    3. outputTypeAvailabilityavailabilities付加する。

  9. availabilities が与えられた 最小利用可能性を返す。

言語モデルの非オプション利用可能性は、 次の手続きにより与えられる。これらは Availability 値または null を返す。
  1. 表明: このアルゴリズムは並列に実行されている。

  2. ユーザーエージェントが、言語モデルへのプロンプトをサポートできるかどうかを判断しようとして何らかのエラーがあり、 そのエラーをユーザーエージェントが一時的なもの(再照会によりそのようなエラーが発生しなくなる可能性があるもの)と考える場合、 null を返す。

  3. ユーザーエージェントが言語モデルへのプロンプトを現在サポートする場合、"available" を返す。

  4. ユーザーエージェントが、言語モデルへのプロンプトをサポートできるようになると考えるが、 すでに進行中のダウンロードが完了した後に限られる場合、"downloading" を返す。

  5. ユーザーエージェントが、言語モデルへのプロンプトをサポートできるようになると考えるが、 現在進行中ではないダウンロードを実行した後に限られる場合、"downloadable" を返す。

  6. そうでなければ、"unavailable" を返す。

LanguageModelMessageType type および boolean isInput が与えられたときの 言語モデルコンテンツ型利用可能性は、 次の手続きにより与えられる。これらは Availability 値を返す。
  1. 表明: このアルゴリズムは並列に実行されている。

  2. isInput が true の場合は入力として、isInput が false の場合は出力として、 ユーザーエージェントが type現在サポートする場合、"available" を返す。

  3. ユーザーエージェントが、type をそのようなものとしてサポートできるようになると考えるが、 すでに進行中のダウンロードが完了した後に限られる場合、"downloading" を返す。

  4. ユーザーエージェントが、type をそのようなものとしてサポートできるようになると考えるが、 現在進行中ではないダウンロードを実行した後に限られる場合、"downloadable" を返す。

  5. そうでなければ、"unavailable" を返す。

3.3. LanguageModel クラス

すべての LanguageModel は、作成時に設定される LanguageModelMessageリストである initial messages を持つ。

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

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

すべての LanguageModel は、作成時に設定される LanguageModelExpectedリストである expected inputs を持つ。

すべての LanguageModel は、作成時に設定される LanguageModelExpectedリストである expected outputs を持つ。

すべての LanguageModel は、作成時に設定される LanguageModelToolリストである tools を持つ。

すべての LanguageModel は、作成時に設定される unrestricted double である context window size を持つ。

すべての LanguageModel は、初期値が 0 である double の current context usage を持つ。


contextUsage 取得子手続きは、thiscurrent context usage を返すことである。

inputUsage 取得子手続きは、thiscurrent context usage を返すことである。

contextWindow 取得子手続きは、thiscontext window size を返すことである。

inputQuota 取得子手続きは、thiscontext window size を返すことである。

topK 取得子手続きは、thistop K を返すことである。

temperature 取得子手続きは、thistemperature を返すことである。


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

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

prompt(input, options) メソッド手続きは 次のとおりである:
  1. responseConstraint を、options["responseConstraint"] が存在するならその値、そうでなければ null とする。

  2. omitResponseConstraintInputoptions["omitResponseConstraintInput"] とする。

  3. operation を、引数 chunkProduced, done, error, および stopProducing を取り、次の手続きを実行する アルゴリズム手続きとする:

    1. prefillSuccess を、this, input, omitResponseConstraintInput, responseConstraint, error, および stopProducing が与えられた prefilling の結果とする。

    2. prefillSuccess が true である場合、this, responseConstraint, chunkProduced, done, error, および stopProducing が与えられた generate を実行する。

  4. this, options, および operation が与えられた 集約された AI モデル結果を取得する結果を返す。

promptStreaming(input, options) メソッド手続きは次のとおりである:
  1. responseConstraint を、options["responseConstraint"] が存在するならその値、そうでなければ null とする。

  2. omitResponseConstraintInputoptions["omitResponseConstraintInput"] とする。

  3. operation を、引数 chunkProduced, done, error, および stopProducing を取り、次の手続きを実行する アルゴリズム手続きとする:

    1. prefillSuccess を、this, input, omitResponseConstraintInput, responseConstraint, error, および stopProducing が与えられた prefilling の結果とする。

    2. prefillSuccess が true である場合、this, responseConstraint, chunkProduced, done, error, および stopProducing が与えられた generate を実行する。

  4. this, options, および operation が与えられた ストリーミング AI モデル結果を取得する結果を返す。

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

    prefilling アルゴリズムは チャンクを生成しないため、chunkProduced は決して呼び出されない。

    1. prefillSuccess を、this, input, false, null, error, および stopProducing が与えられた prefilling の結果とする。

    2. prefillSuccess が true であり、かつ done が null でない場合、 done を実行する。

  2. this, options, および operation が与えられた 集約された AI モデル結果を取得する結果を返す。

measureContextUsage(input, options) メソッド手続きは次のとおりである:
  1. options["omitResponseConstraintInput"] が true であり、かつ options["responseConstraint"] が存在しない場合、"TypeError" DOMException を投げる。

  2. expectedInputTypes を、thisexpected inputs が与えられた 期待される コンテンツ型を取得する結果とする。

  3. messages を、input, expectedInputTypes, および false が与えられた プロンプトの検証と正規化結果とする。

  4. options["responseConstraint"] が存在するかつ null でなく、かつ options["omitResponseConstraintInput"] が false である場合、実装はモデルの挙動を導くため、実装定義LanguageModelMessagemessages に挿入してもよい。

  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. messages を、input, expectedInputTypes, および model現在のコンテキスト使用量が 0 より大きい場合は true、そうでなければ false が与えられた プロンプトの検証と正規化の結果とする。

    これが例外 e を投げる場合:

    1. error が null でない場合、enamename とし、かつ details に適切な詳細を含む DOMException エラー情報を与えて error を実行する。

    2. false を返す。

  3. responseConstraint が null でなく、かつ omitResponseConstraintInput が false である場合、実装はモデルの挙動を導くため、実装定義LanguageModelMessagemessages に挿入してもよい。

  4. requested を、messages および stopPrefilling が与えられた 言語モデルのコンテキスト使用量を測定する結果とする。

  5. requested が null である場合、false を返す。

  6. requestedエラー情報である場合:

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

    2. false を返す。

  7. 表明: requested は数である。

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

    1. error が null でない場合:

      1. errorInfo を、model現在のコンテキスト使用量 + requestedrequested とし、 modelコンテキストウィンドウサイズquota とする quota exceeded エラー情報とする。

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

    2. false を返す。

  9. expectedInputTypes を、model期待される 入力が与えられた 期待される コンテンツ型を取得する結果とする。

  10. 実装定義の方法で、基礎となるモデルの内部状態を messages を含むよう更新する。

    この処理は、状態がどのように更新されるかを導くために、model初期 メッセージmodeltop Kmodeltemperaturemodel期待される入力model期待される出力、および modeltools を使用するべきである。

    この処理は、§ 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初期 メッセージmodeltop Kmodeltemperaturemodel期待される入力model期待される出力modeltools、および responseConstraint を使用するべきである。

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

    modeltools が空でない場合、モデルは提供されたツールを、それらの execute 関数を呼び出すことにより使用してもよい。

  3. true の間:

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

    2. そのようなチャンクが正常に生成された場合:

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

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

    3. そうではなく、処理が終了した場合:

      1. done が null でない場合、done を実行する。

      2. 抜ける

    4. そうではなく、stopProducing が true を返す場合、抜ける

    5. そうではなく、プロンプト中にエラーが発生した場合:

      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. expectedTypesexpected["type"] を含まない場合、expected["type"] を expectedTypes付加する。

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

  4. expectedTypes を返す。

LanguageModelPrompt inputLanguageModelMessageTypeリスト expectedTypes、および boolean hasAppendedInput が与えられたとき、 プロンプトを検証し正規化するには、次の手続きを実行する。 戻り値は、"longhand" 形式の LanguageModelMessage の 空でないリストとなる。
  1. 表明: expectedTypes は "text" を含む

  2. input文字列である場合、« «[ "role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» » を返す。

  3. 表明: inputLanguageModelMessageリストである。

  4. input が空のリストである場合、« «[ "role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» » を返す。

  5. messages を、LanguageModelMessage の空の リストとする。

  6. input の各 message について反復する:

    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. messagemessages 内の最後の項目でない場合、"SyntaxError" DOMException を投げる。

    3. message["role"] が "system" である場合:

      1. hasAppendedInput が true である場合、"TypeError" DOMException を投げる。

    4. message["content"] が空のリストである場合:

      1. emptyContent を、«[ "type" → "text", "value" → "" ]» で初期化された新しい LanguageModelMessageContent とする。

      2. emptyContentmessage["content"] に 付加する。

    5. message["content"] の各 content について反復する:

      1. message["role"] が "assistant" であり、かつ content["type"] が "text" でない場合、"NotSupportedError" DOMException を投げる。

      2. content["type"] が "text" であり、かつ content["value"] が文字列でない場合、"TypeError" DOMException を投げる。

      3. content["type"] が "image" である場合:

        1. expectedTypes が "image" を含まない場合、"NotSupportedError" DOMException を投げる。

        2. content["value"] が ImageBitmapSource または BufferSource でない場合、"TypeError" DOMException を投げる。

      4. content["type"] が "audio" である場合:

        1. expectedTypes が "audio" を含まない場合、"NotSupportedError" DOMException を投げる。

        2. content["value"] が AudioBufferBufferSource、 または Blob でない場合、"TypeError" DOMException を投げる。

    6. contentWithContiguousTextCollapsed を、LanguageModelMessageContent の空の リストとする。

    7. lastTextContent を null とする。

    8. message["content"] の各 content について反復する:

      1. content["type"] が "text" である場合:

        1. lastTextContent が null である場合:

          1. contentcontentWithContiguousTextCollapsed付加する。

          2. lastTextContentcontent に設定する。

        2. そうでなければ、lastTextContent["value"] を、lastTextContent["value"] と content["value"] の連結に設定する。

          スペースその他の文字は追加されない。したがって、« «[ "type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» » は « «[ "type" → "text", "foobar" ]» に正規化される。

      2. そうでなければ:

        1. contentcontentWithContiguousTextCollapsed付加する。

        2. lastTextContent を null に設定する。

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

    9. messagemessages付加する。

    10. hasAppendedInput を true に設定する。

  7. messages空である場合、 "SyntaxError" DOMException を投げる。

  8. messages を返す。

3.3.4. エラー

プロンプトが失敗した場合、次の考えられる理由が Web 開発者に示され得る。この表は、使用可能な DOMException name と、実装がそれらを使用するべき場合を列挙する:

DOMException name シナリオ
"NotAllowedError"

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

"NotReadableError"

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

"NotSupportedError"

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

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

"UnknownError"

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

この表は、prompt API により示され得る例外の完全な一覧を与えるものではない。 これは、特定の実装定義の手続きから生じ得るもののみを含む。

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

  2. 表明: globalWindow オブジェクトである。

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

  4. signals を、« modeldestruction abort controllersignal » とする。

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

  6. compositeSignal を、signals が与えられ、AbortSignal および model関連するレルムを用いて 依存 abort signal を作成する結果とする。

  7. compositeSignalaborted である場合、 compositeSignalabort reason拒否された Promiseを返す。

  8. signal を、options["signal"] が存在するならその値、そうでなければ null とする。

  9. signal が null でなく、かつaborted である場合、signalabort reason で拒否された Promise を返す。

  10. promise を、model関連するレルム内で作成された新しい Promiseとする。

  11. abortedDuringOperation を false とする。

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

  12. compositeSignal次の abort 手続きを追加する:

    1. abortedDuringOperation を true に設定する。

    2. compositeSignalabort reasonpromise拒否する。

  13. 並列に:

    1. 次の手続きを実行するため、AI タスクソース上でグローバルタスクをキューに入れる:

      1. abortedDuringOperation が true である場合、返す。

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

      3. 実装定義の方法で、 その他の任意の状態を model から clonedModel にコピーする。

      4. コピー操作が失敗した場合:

        1. "OperationError" DOMExceptionpromise拒否する。

        2. 返す。

      5. clonedModelpromise解決する。

  14. promise を返す。

3.4. Permissions policy 統合

prompt API へのアクセスは、ポリシー制御機能 "language-model" の背後に置かれており、これは 'self'既定の許可リストを持つ。

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

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

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

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

索引

この仕様により定義される 用語

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

参照文献

規範的参照文献

[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ECMA-402]
ECMAScript Internationalization API Specification. URL: https://tc39.es/ecma402/
[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[FileAPI]
Marijn Kruisselbrink. File API. URL: https://w3c.github.io/FileAPI/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[STREAMS]
Adam Rice; et al. Streams Standard. Living Standard. 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 Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[WRITING-ASSISTANCE-APIS]
Writing Assistance APIs. Draft Community Group Report. URL: https://webmachinelearning.github.io/writing-assistance-apis/

参考参照文献

[BCP47]
A. Phillips, Ed.; M. Davis, Ed.. Tags for Identifying Languages. 2009年9月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
[UTS35]
Mark Davis; et al. Unicode Locale Data Markup Language (LDML). 2020年10月23日. Unicode Technical Standard #35. URL: https://www.unicode.org/reports/tr35/tr35-61/tr35.html

IDL 索引

[Exposed=Window, SecureContext]
interface LanguageModel : EventTarget {
  static Promise<LanguageModel> create(optional LanguageModelCreateOptions options = {});
  static Promise<Availability> availability(optional LanguageModelCreateCoreOptions options = {});
  // **EXPERIMENTAL**: Only available in extension and experimental contexts.
  static Promise<LanguageModelParams?> params();

  // These will throw "NotSupportedError" DOMExceptions if role = "system"
  Promise<DOMString> 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;

  // **EXPERIMENTAL**: Only available in extension and experimental contexts.
  readonly attribute unsigned long topK;
  // **EXPERIMENTAL**: Only available in extension and experimental contexts.
  readonly attribute float temperature;

  readonly attribute LanguageModelSamplingMode samplingMode;

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

// **EXPERIMENTAL**: Only available in extension and experimental contexts.
[Exposed=Window, SecureContext]
interface LanguageModelParams {
  readonly attribute unsigned long defaultTopK;
  readonly attribute unsigned long maxTopK;
  readonly attribute float defaultTemperature;
  readonly attribute float maxTemperature;
};


callback LanguageModelToolFunction = Promise<DOMString> (any... arguments);

// A description of a tool call that a language model can invoke.
dictionary LanguageModelTool {
  required DOMString name;
  required DOMString description;
  // JSON schema for the input parameters.
  required object inputSchema;
  // The function to be invoked by user agent on behalf of language model.
  required LanguageModelToolFunction execute;
};

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.
  // **EXPERIMENTAL**: Only available in extension and experimental contexts.
  unrestricted double topK;
  // **EXPERIMENTAL**: Only available in extension and experimental contexts.
  unrestricted double temperature;

  LanguageModelSamplingMode samplingMode = "default";

  sequence<LanguageModelExpected> expectedInputs;
  sequence<LanguageModelExpected> expectedOutputs;
  sequence<LanguageModelTool> 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", "balanced", "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
) LanguageModelMessageValue;