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 = {}); // **非推奨**: このメソッドは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。options static Promise <LanguageModelParams ?>(); // これらは role = "system" の場合に TypeError をスローするparams 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 ; }; // 言語モデルが実行できるツール呼び出しの記述。 // 注: この辞書への変更を検討する際、作成者は // WebMCP の ModelContextTool との全般的な整合性を確保すべきである // (https://webmachinelearning.github.io/webmcp/#model-context-tool).maxTemperature dictionary {LanguageModelToolDeclaration required DOMString ;name required DOMString ; // 入力パラメーターの JSON スキーマ。description required object ; };inputSchema dictionary { // 注: この2つには、IDL 層によらない独自の範囲外処理の動作がある。 // 失敗せずに +Infinity を許容できるよう、これらは unrestricted double である。 // **非推奨**: このオプションは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。LanguageModelCreateCoreOptions unrestricted double ; // **非推奨**: このオプションは削除される予定である。代わりに samplingMode を使用すること。拡張機能のコンテキストでのみ利用可能。topK 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 >; }; // prompt() メソッドおよび同様のメソッドの引数languages typedef (sequence <LanguageModelMessage > // `[{ role: "user", content: [{ type: "text", value: providedValue }] }]` の略記or DOMString );LanguageModelPrompt dictionary {LanguageModelMessage required LanguageModelMessageRole ; // DOMString の分岐は `[{ type: "text", value: providedValue }]` の略記role 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 ); // `LanguageModelToolCall` および `LanguageModelToolResponse` の値の定義LanguageModelMessageValue 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. 作成
create(options) メソッドの手順は次のとおりです。
-
options、"
language-model"、 言語モデルオプションを検証および正規化する、言語モデルオプションの利用可能性を 計算する、言語モデルをダウンロードする、言語モデルを初期化する、言語モデルオブジェクトを作成する、および false を与えた AI モデルオブジェクトの作成の結果を返します。
LanguageModelCreateCoreOptions
options が与えられた場合、以下の手順を実行する。これらは options をその場で変更して正準化を行い、
言語タグの重複を排除し、いずれかが無効であれば例外をスローする。
-
もし options["
expectedInputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedInputs"] の各項目とする:-
もし expected["
languages"] が 存在する場合は、次の 検証および正準化( 言語タグ) を、expected と "languages" を与えて実行する。
-
-
hasToolCallInExpectedOutputs を false とする。
-
もし options["
expectedOutputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedOutputs"] の各項目とする: -
もし options["
tools"] が 次の意味で 空でない場合は:-
hasToolCallInExpectedOutputs が false の場合は、次の例外をスローする:
TypeError。 -
各項目に対して実行する。tool は options["
tools"] の各項目とする:-
もし toolNames が 含んでいるものに tool["
name"] があれば、 次の例外をスローする:TypeError。 -
もし tool["
description"] が 空の 文字列であれば、次の例外をスローする:TypeError。 -
schema を tool["
inputSchema"] とする。 -
typeValue を ? Get(schema, "type") とする。
-
typeValue が "
object" でない場合は、次の例外をスローする:TypeError。 -
propertiesValue を ? Get(schema, "properties") とする。
-
propertiesValue が undefined でなく、かつ propertiesValue が 次の型でない場合:Object、次の例外をスローする:
TypeError。 -
requiredValue を ? Get(schema, "required") とする。
-
requiredValue が undefined でなく、かつ ? IsArray(requiredValue) が false の場合は、 次の例外をスローする:
TypeError。 -
? 直列化する( JavaScript 値を JSON 文字列に)を、schema を与えて実行する。
-
-
もし options["
initialPrompts"] が 存在し、かつ 空でない 場合は:-
expectedInputs を options["
expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。 -
expectedInputTypes を、次の 想定されるコンテンツ型を取得する処理に expectedInputs を与えた結果とする。
-
次の 検証および正準化( プロンプト)を、options["
initialPrompts"]、 expectedInputTypes、および false を与えて実行する。
-
LanguageModelCreateCoreOptions
options が与えられた場合:
LanguageModelCreateOptions
options が与えられた場合:
-
availability を、次の 言語モデルのオプションの 可用性を計算する処理に options を与えた結果とする。
-
もし availability が null または
unavailableであれば、 次の DOMException エラー情報を返す。その name は "NotSupportedError" とし、 その details には適切な 詳細を含める。
-
-
ユーザーエージェントのプロンプト処理能力を支える AI モデルに必要な初期化操作を 実行する。
これには、適切なモデルと、次のオプションをサポートするために必要なファインチューニングを、 options に従ってメモリーに読み込むことが含まれる場合がある。
-
もし options["
initialPrompts"] が 次の意味で 空でない場合は:-
expectedInputs を options["
expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。 -
expectedInputTypes を、次の 想定されるコンテンツ 型を取得する処理に expectedInputs を与えた結果とする。
-
initialMessages を、次の 検証および 正準化(プロンプト)に options["
initialPrompts"]、 expectedInputTypes、および false を与えた結果とする。 -
initialMessages をモデルのコンテキストウィンドウに読み込む。
-
-
もし options["
tools"] が 次の意味で 空でなければ、options["tools"] を モデルのコンテキストウィンドウに読み込む。
-
-
options の読み込み処理によって、モデルのコンテキストウィンドウを使い切ったことが 原因で初期化に失敗した場合は:
-
requested を、次を符号化するために必要なコンテキストウィンドウの量とする: options。入力としての options の符号化は 実装定義である。
-
maximum を、ユーザーエージェントがサポートするコンテキストウィンドウの最大サイズとする。
-
表明:requested は次の値より大きい: maximum。(それが、このエラー分岐に到達した理由である。)
-
次の クォータ超過エラー情報を返す。 その requested は requested とし、 quota は maximum とする。
-
-
その他の理由で初期化に失敗した場合は、次の DOMException エラー情報を返す。その name は "
OperationError" とし、 その details には適切な詳細を含める。 -
null を返す。
LanguageModelCreateOptions
options が与えられた場合:
-
contextWindowSize を、このモデルについてユーザーエージェントが利用できるコンテキストウィンドウの 量とする。(この値は 実装定義であり、例えば次の制約を超える 固有の制限がなければ +∞ でもよい:ユーザーのメモリー、または JavaScript 文字列の制限。)
-
initialMessages を空の リストとし、その要素は
LanguageModelMessageとする。 -
tools を options["
tools"] とする。 -
initialContextUsage を 0 とする。
-
もし options["
initialPrompts"] が 存在し、かつ 空でない 場合は:-
expectedInputs を options["
expectedInputs"] とする。 ただし、それが 存在する場合に限り、それ以外の場合は空の リストとする。 -
expectedInputTypes を、次の 想定されるコンテンツ型を取得する処理に expectedInputs を与えた結果とする。
-
initialMessages を、次の 検証および正準化( プロンプト)に options["
initialPrompts"]、 expectedInputTypes、および false を与えた結果に設定する。
-
-
initialMessages が 空でないか、または tools が 空でない 場合は:
-
initialContextUsage を、次を符号化するために使用されるコンテキストウィンドウの量に設定する: initialMessages および tools。
-
-
新しい
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) メソッドの手順は
次のとおりである:
-
次の AI モデルの可用性を計算する処理に、 options、"
language-model"、 検証および正準化( 言語モデルのオプション)、および 計算(言語モデルのオプションの 可用性)を与えた結果を返す。
LanguageModelCreateCoreOptions
options が与えられた場合、以下の手順を実行する。これらは Availability
値または null を返し、options をその場で変更して、言語タグを最適な
一致に更新する。
-
availability を オプションに依存しない言語モデルの 可用性とする。
-
availability が null の場合は、null を返す。
-
availabilities を リストとし、その要素を availability とする。
-
inputPartition を、次の 言語の可用性の 分割を取得する処理に、その言語のテキストで言語モデルにプロンプトを与えるという目的を与えた結果とする。
-
outputPartition を、次の 言語の可用性の 分割を取得する処理に、その言語で言語モデルの出力を生成するという目的を与えた結果とする。
-
もし options["
expectedInputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedInputs"] の各項目とする:-
もし expected["
languages"] が 存在する場合は:-
inputLanguageAvailability を、次の 言語の 可用性を計算する処理に expected["
languages"] および inputPartition を与えた結果とする。 -
追加する:inputLanguageAvailability を availabilities に。
-
-
inputTypeAvailability を、次の 言語モデルのコンテンツ型の 可用性に expected["
type"] および true を与えた結果とする。 -
追加する:inputTypeAvailability を availabilities に。
-
-
もし options["
expectedOutputs"] が 存在する場合は、次を 各項目に対して実行する。 expected は options["expectedOutputs"] の各項目とする:-
もし expected["
languages"] が 存在する場合は:-
outputLanguageAvailability を、次の 言語の 可用性を計算する処理に expected["
languages"] および outputPartition を与えた結果とする。 -
追加する:outputLanguageAvailability を availabilities に。
-
-
outputTypeAvailability を、次の 言語モデルのコンテンツ型の 可用性に expected["
type"] および false を与えた結果とする。 -
追加する:outputTypeAvailability を availabilities に。
-
-
次の 最小可用性に availabilities を与えた結果を返す。
Availability
値または null を返す。
-
ユーザーエージェントが次を実行できるかどうかの判断中に何らかのエラーが発生し、その対象が サポートできるかどうかという、言語 モデルへのプロンプト処理であり、そのエラーをユーザーエージェントが一時的である(再照会すれば そのようなエラーが生じなくなる可能性がある)と判断する場合は、null を返す。
-
ユーザーエージェントが 現在サポートしている対象が、 言語モデルへのプロンプト処理である場合は、次を返す:"
available"。 -
ユーザーエージェントが、次の処理を サポートできるようになると判断し、その対象が言語モデルへのプロンプト処理であるが、 すでに進行中のダウンロードの完了後に限る場合は、次を返す:"
downloading"。 -
ユーザーエージェントが、次の処理を サポートできるようになると判断し、その対象が言語モデルへのプロンプト処理であるが、 現在は進行していないダウンロードを実行した後に限る場合は、次を返す:"
downloadable"。 -
それ以外の場合は、次を返す:"
unavailable"。
LanguageModelMessageType
type および真偽値 isInput が与えられた場合、以下の手順によって与えられる。これらは Availability
値を返す。
-
ユーザーエージェントが 現在サポートしているものが type であり、 その用途が isInput が true なら入力、isInput が false なら出力である場合は、 次を返す:"
available"。 -
ユーザーエージェントが、次の型を サポートできるようになると判断し、その対象が上記の用途の type であるが、 すでに進行中のダウンロードの完了後に限る場合は、次を返す:"
downloading"。 -
ユーザーエージェントが、次の型を サポートできるようになると判断し、その対象が上記の用途の type であるが、 現在は進行していないダウンロードを実行した後に限る場合は、次を返す:"
downloadable"。 -
それ以外の場合は、次を返す:"
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) メソッドの
手順は次のとおりです:
-
responseConstraint を options["
responseConstraint"] が 存在する場合はその値、それ以外の場合は null とします。 -
omitResponseConstraintInput を options["
omitResponseConstraintInput"] とします。 -
hasNonTextExpectedOutput を false とします。
-
contents を
LanguageModelMessageContentの空のリストとします。 -
text を空の文字列とします。
-
operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:
-
prefillSuccess を、this、 input、omitResponseConstraintInput、responseConstraint、 error、および stopProducing を与えて事前入力した結果とします。
-
prefillSuccess が false の場合、返ります。
-
hasNonTextExpectedOutput が false の場合:
-
onChunk を、引数 chunk を取り、 次の手順を実行するアルゴリズムステップとします:
-
onDone を、引数を取らず次の 手順を実行するアルゴリズムステップとします:
-
this、responseConstraint、onChunk、 onDone、error、および stopProducing を与えて 生成します。
-
-
promise を、this、options、および operation を与えて 集約された AI モデル結果を取得した 結果とします。
-
hasNonTextExpectedOutput が false の場合、promise を返します。
-
promise に、contents を返す fulfillment ハンドラーで 反応した結果を返します。
promptStreaming(input, options)
メソッドの手順は次のとおりです:
-
responseConstraint を options["
responseConstraint"] が 存在する場合はその値、それ以外の場合は null とします。 -
omitResponseConstraintInput を options["
omitResponseConstraintInput"] とします。 -
operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:
-
this、options、および operation を与えて ストリーミング AI モデル結果を取得した結果を返します。
append(input, options) メソッドの
手順は次のとおりです:
-
operation を、引数 chunkProduced、 done、error、および stopProducing を取り、次の 手順を実行するアルゴリズムステップとします:
事前入力アルゴリズムは チャンクを生成しないため、chunkProduced は決して呼び出されません。
-
this、options、および operation を与えて 集約された AI モデル結果を取得した 結果を返します。
measureContextUsage(input, options)
メソッドの手順は次のとおりです:
-
options["
omitResponseConstraintInput"] が true で、options["responseConstraint"] が 存在しない場合、"TypeError"DOMExceptionをスローします。 -
expectedInputTypes を、this の想定される入力を与えて 想定される コンテンツ型を取得した結果とします。
-
messages を、input、expectedInputTypes、および false を 与えてプロンプトを検証および正規化した 結果とします。
-
options["
responseConstraint"] が 存在し、null でなく、かつ options["omitResponseConstraintInput"] が false の場合、実装はモデルの動作を導くために実装定義のLanguageModelMessageを messages に挿入しても構いません。 -
measureUsage を、引数 stopMeasuring を取り、 messages と stopMeasuring を与えて言語モデルのコンテキスト使用量を測定した 結果を返すアルゴリズムステップとします。
-
this、options、および measureUsage を与えて AI モデル入力使用量を測定した結果を返します。
measureInputUsage(input, options)
メソッドの手順は次のとおりです:
-
input と options を与えて
measureContextUsage()メソッドの手順を実行した結果を返します。
clone(options) メソッドの手順は次のとおりです:
-
this と options を与えて言語モデルを複製した結果を返します。
3.3.1. 事前入力と生成
-
LanguageModelmodel、 -
LanguageModelPromptinput、 -
ブール値 omitResponseConstraintInput、
-
object または null の responseConstraint、
-
エラー情報を取り何も返さない、アルゴリズムまたは null の error、および
-
引数を取らずブール値を返す、アルゴリズムまたは null の stopPrefilling、
次の手順を実行します:
-
expectedInputTypes を、model の想定される 入力を与えて想定される コンテンツ型を取得した結果とします。
-
messages を、input、expectedInputTypes、および model の現在のコンテキスト使用量が 0 より 大きければ true、それ以外は false を与えてプロンプトを検証および正規化した 結果とします。
これが例外 e をスローした場合:
-
error が null でない場合、DOMException エラー情報を与えて error を実行します。そのname は e のname であり、そのdetails には適切な 詳細を含めます。
-
false を返します。
-
-
responseConstraint が null でなく、omitResponseConstraintInput が false の場合、 実装はモデルの動作を導くために実装定義の
LanguageModelMessageを messages に挿入しても構いません。 -
requested を、messages と stopPrefilling を与えて 言語モデルのコンテキスト 使用量を測定した結果とします。
-
requested が null の場合、false を返します。
-
requested がエラー情報の場合:
-
error が null でない場合、requested を与えて error を実行します。
-
false を返します。
-
-
表明: requested は数値です。
-
model の現在のコンテキスト使用量 + requested が model のコンテキストウィンドウサイズより大きい場合:
-
error が null でない場合:
-
errorInfo を、クォータ超過エラー 情報とします。そのrequested は model の現在のコンテキスト使用量 + requested、quota は model のコンテキストウィンドウサイズです。
-
errorInfo を与えて error を実行します。
-
-
false を返します。
-
-
実装定義の方法で、 基盤となるモデルの内部状態を更新し、messages を含めます。
この処理では、状態の更新方法を導くために、model の初期 メッセージ、model のサンプリングモード、model のtop K、model のtemperature、model の想定される入力、model の想定される出力、および model のツール を使用するべきです。
この処理は、§ 4 プライバシーに関する 考慮事項および § 5 セキュリティに関する考慮事項に示された指針に適合しなければなりません。
この処理中に stopPrefilling が true を返した場合、false を返します。
事前入力中にエラーが発生した場合:
-
§ 3.3.4 エラーの指針に従い、エラーを エラー情報 errorInfo として表します。
-
error が null でない場合、errorInfo を与えて error を実行します。
-
false を返します。
-
-
model の現在のコンテキスト使用量を、 model の現在のコンテキスト使用量 + requested に設定します。
-
true を返します。
-
LanguageModelmodel、 -
object または null の responseConstraint、
-
文字列または
LanguageModelMessageContentを取り何も返さない、アルゴリズムまたは null の chunkProduced、 -
引数を取らず何も返さない、アルゴリズムまたは null の done、
-
エラー情報を取り何も返さない、アルゴリズムまたは null の error、および
-
引数を取らずブール値を返す、アルゴリズムまたは null の stopProducing、
次の手順を実行します:
-
次の指針に従い、実装定義の方法で、 現在の内部状態に基づいて言語モデルから応答を生成する処理を開始します。
この処理では、モデルの動作を導くために、model の初期 メッセージ、model のサンプリングモード、model のtop K、model のtemperature、model の想定される入力、model の想定される出力、model のツール、および responseConstraint を使用する べきです。
プロンプト処理は、§ 4 プライバシーに関する 考慮事項および § 5 セキュリティに関する考慮事項に示された指針に適合しなければなりません。
model のツールが空でない場合、 モデルはテキストに加えて、またはテキストの代わりに、model の ツールで 宣言されたツールに基づいて 1 つ以上のツール呼び出しを生成しても構いません。
-
true の間:
-
次の応答データのチャンク(テキストまたはツール呼び出し)が生成されるか、 処理が終了するか、stopProducing を呼び出した結果が true になるまで待機します。
-
テキストチャンクが正常に生成された場合:
-
それを文字列 chunk として表します。
-
chunkProduced が null でない場合、chunk を与えて chunkProduced を実行します。
-
-
それ以外で、ツール呼び出しが正常に生成された場合:
-
name を、呼び出されるツールの名前を表す文字列とします。
-
arguments を、ツール呼び出しの引数の JSON オブジェクトを表す Object とし、model の関連 realmで作成します。
-
toolCall を、model の関連 realmで作成された新しい
LanguageModelToolCallとし、呼び出し IDを callId に、名前を name に、そして 引数を arguments に設定します。 -
toolCallContent を、«[ "
type" → "tool-call", "value" → toolCall ]» で初期化されたLanguageModelMessageContentとします。 -
chunkProduced が null でない場合、toolCallContent を与えて chunkProduced を実行します。
-
それ以外で、処理が終了した場合:
-
実装定義の方法で、 基盤となるモデルの内部状態および model の現在のコンテキスト使用量を 更新し、生成された応答(テキストとすべてのツール呼び出し)を含めます。
-
done が null でない場合、done を実行します。
-
-
それ以外で、stopProducing が true を返した場合、中断します。
-
それ以外で、プロンプト処理中にエラーが発生した場合:
-
§ 3.3.4 エラーの指針に従い、エラーをエラー情報 errorInfo として表します。
-
error が null でない場合、errorInfo を与えて error を実行します。
-
-
3.3.2. 使用法
-
LanguageModelMessageの リスト messages、 -
引数を取らずブール値を返すアルゴリズム stopMeasuring、
次の手順を実行します:
-
inputToModel を、messages を与えて事前入力するために基盤となるモデルへ送られる実装定義の入力とします。
これは一般に、すべての入力のエンコードで構成され、 プロンプトエンジニアリングまたはその他の実装定義のラッパーが含まれる場合があります。
この処理中に stopMeasuring が true を返し始めた場合、null を返します。
この処理中にエラーが発生した場合、§ 3.3.4 エラーの 指針に従った適切なDOMException エラー情報を返します。
-
inputToModel を基盤となるモデルに与えたときに表現するために必要な コンテキスト使用量を返します。正確な計算手順は実装定義であり、次の 制約に従います。
返されるコンテキスト使用量は非負かつ有限でなければなりません。これはおおよそ inputToModel 内のデータ量に比例するべきです。
これは、言語モデルのトークン化方式で入力を表すために必要な トークン数である場合も、データのバイト数に関連する値である場合もあります。
この処理中に stopMeasuring が true を返し始めた場合、代わりに null を返します。
この処理中にエラーが発生した場合、代わりに§ 3.3.4 エラーの 指針に従った適切なDOMException エラー情報を返します。
3.3.3. オプション
LanguageModelExpected
の
リスト
expectedContents が与えられたときに想定される
コンテンツ型を取得するには:
LanguageModelPrompt
input、次の リスト(要素は LanguageModelMessageType)
expectedTypes、および真偽値 hasAppendedInput が与えられた場合、以下の手順を実行する。戻り
値は空でない リストであり、その要素は LanguageModelMessageで、
「省略しない」形式である。
-
もし inputが 文字列なら、次を返す:« «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» »。 -
表明:inputは リストであり、要素は
LanguageModelMessageである。 -
もし inputが空の リストなら、次を返す:« «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» »。 -
messagesを空の リストとし、要素は
LanguageModelMessageとする。 -
各項目に対して実行する。messageは inputの各項目とする:
-
もし message["
content"]が 文字列なら、messageを次に設定する:«[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]»。 -
もし message["
prefix"]が trueなら:-
もし message["
role"]が "assistant"でなければ、 次の例外をスローする:"SyntaxError"DOMException。 -
messageが inputの最後の項目でない場合は、次の例外をスローする: "
SyntaxError"DOMException。
-
-
もし message["
role"]が "system"であれば、 以下を実行する:-
hasAppendedInputがtrueの場合は、次の例外をスローする:
TypeError。
-
-
各項目に対して実行する。contentは message["
content"]の各項目とする:-
もし content["
type"]が "tool-call"であり、 かつ message["role"]が "assistant"でなければ、 次の例外をスローする:TypeError。 -
もし content["
type"]が "tool-response"であり、 かつ message["role"]が "user"でなければ、 次の例外をスローする:TypeError。 -
もし message["
role"]が "assistant"であり、 かつ content["type"]が "image" または "audio"なら、 次の例外をスローする:"NotSupportedError"DOMException。 -
もし content["
type"]が "text"であり、 かつ content["value"]が 文字列でなければ、次の例外をスローする:TypeError。 -
もし content["
type"]が "image"であれば、 以下を実行する:-
もし expectedTypesが 含まないものに "
image"があれば、 次の例外をスローする:"NotSupportedError"DOMException。 -
もし content["
value"]が 次のいずれでもなければ:ImageBitmapSourceまたはBufferSource、 次の例外をスローする:TypeError。
-
-
もし content["
type"]が "audio"であれば、 以下を実行する:-
もし expectedTypesが 含まないものに "
audio"があれば、 次の例外をスローする:"NotSupportedError"DOMException。 -
もし content["
value"]が 次のいずれでもなければ:AudioBuffer、BufferSource、 またはBlob、 次の例外をスローする:TypeError。
-
-
もし content["
type"]が "tool-call"であれば、 以下を実行する:-
もし expectedTypesが 含まないものに "
tool-call"があれば、 次の例外をスローする:"NotSupportedError"DOMException。 -
もし content["
value"]が 次の型でなければ:LanguageModelToolCall、 次の例外をスローする:TypeError。 -
argumentsがnullでない場合は:
-
もし ? IsArray(arguments)が true、または argumentsが プラットフォームオブジェクト、または argumentsをJSONオブジェクトに直列化できない( 例えば、循環参照や、JSONに直列化できない 関数やBigIntなどの値が原因で)場合は、次の例外をスローする:"
DataError"DOMException。
-
-
-
もし content["
type"]が "tool-response"であれば、 以下を実行する:-
もし expectedTypesが 含まないものに "
tool-response"があれば、 次の例外をスローする:"NotSupportedError"DOMException。 -
もし content["
value"]が 次の型でなければ:LanguageModelToolResponse、 次の例外をスローする:TypeError。 -
もし content["
value"]がLanguageModelToolSuccessなら、 次を 各項目に対して実行する。resultItemは content["value"]の resultの各項目とする:-
もし resultItem["
type"]が "image" または "audio"であり、 かつユーザーエージェントがマルチモーダルなツール結果の コンテンツをサポートしない場合は、次の例外をスローする:"NotSupportedError"DOMException。 -
もし resultItem["
type"]が "text"であり、 かつ resultItem["value"]が 文字列でなければ、次の例外をスローする:TypeError。 -
もし resultItem["
type"]が "image"であり、 かつ resultItem["value"]が 次のいずれでもなければ:ImageBitmapSourceまたはBufferSource、 次の例外をスローする:TypeError。 -
もし resultItem["
type"]が "audio"であり、 かつ resultItem["value"]が 次のいずれでもなければ:AudioBuffer、BufferSource、 またはBlob、 次の例外をスローする:TypeError。 -
もし resultItem["
type"]が "object"であれば、 以下を実行する:-
もし resultItem["
value"]が プラットフォーム オブジェクト、またはJSONに直列化できない( 例えば、循環参照や、 関数や次の値など、JSONに直列化できない値が原因で: BigInt)場合は、次の例外をスローする:"DataError"DOMException。
-
-
-
-
contentWithContiguousTextCollapsedを空の リストとし、要素は
LanguageModelMessageContentとする。 -
lastTextContentをnullとする。
-
各項目に対して実行する。contentは message["
content"]の各項目とする:-
-
lastTextContentがnullなら:
-
追加する:contentを contentWithContiguousTextCollapsedに。
-
lastTextContentを contentに設定する。
-
-
それ以外の場合は、lastTextContent["
value"]を 次の連結に設定する:lastTextContent["value"] および content["value"]。空白やその他の文字は追加されない。したがって、« «[ "
type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» »は次のように正準化される:« «[ "type" → "text", "foobar" ]»。
-
-
それ以外の場合は:
-
追加する:contentを contentWithContiguousTextCollapsedに。
-
lastTextContentをnullに設定する。
-
-
message["
content"]を contentWithContiguousTextCollapsedに設定する。
-
-
追加する:messageを messagesに。
-
hasAppendedInputをtrueに設定する。
-
-
もし messagesが 次の意味で 空なら、次の例外をスローする:"
SyntaxError"DOMException。 -
messagesを返す。
3.3.4. エラー
プロンプト処理が失敗した場合、次の考えられる理由がウェブ開発者に提示されることがあります。この表には
考えられる DOMException
の
名前と、実装がそれらを使用するべきケースを示します:
DOMException
の
名前
| シナリオ |
|---|---|
"NotAllowedError"
|
ユーザーの選択またはユーザーエージェントのポリシーによってプロンプト処理が無効化されています。 |
"NotReadableError"
|
モデルの出力がユーザーエージェントによってフィルタリングされました。たとえば、有害、 不正確、または無意味であると検出された場合です。 |
"NotSupportedError"
|
処理する入力がユーザーエージェントのサポートしない言語であったか、 モデルの出力が、ユーザーエージェントのサポートしない言語になりました(たとえば、 ユーザーエージェントがその出力言語に対して十分な品質管理テストを 実施していないため)。 |
"UnknownError"
|
その他すべてのシナリオ。これには、ユーザーエージェントがモデルにプロンプトを与えられず、さらに § 4 プライバシーに関する考慮事項または § 5 セキュリティに関する考慮事項に示された要件も満たせないと判断した場合が含まれます。または、 ユーザーエージェントが失敗理由を開示しないことを望む場合です。 |
この表は、prompt API によって提示され得る例外の完全な一覧を示すものではありません。 特定の実装定義の手順から生じ得るものだけを含みます。
LanguageModel
model と LanguageModelCloneOptions
options が与えられたとき、言語
モデルを複製するには:
-
global を model の関連グローバルオブジェクトとします。
-
global の関連付けられた Document が完全にアクティブでない場合、"
InvalidStateError"DOMExceptionで 拒否された promiseを返します。 -
signals を « model の破棄用 abort controller のsignal » とします。
-
compositeSignal を、signals を指定し、
AbortSignalと model の関連 realm を使用して依存 abort signal を作成した結果とします。 -
compositeSignal が中止済みの場合、compositeSignal の中止理由で 拒否された promiseを返します。
-
signal が null でなく、かつ中止済みの場合、signal の 中止理由で拒否された promise を返します。
-
promise を、model の関連 realmで作成された新しい promiseとします。
-
abortedDuringOperation を false とします。
-
compositeSignal に次の abort 手順を追加します:
-
並列に:
-
AI タスクソース上でグローバルタスクをキューに入れ、次の手順を実行します:
-
abortedDuringOperation が true の場合、返ります。
-
clonedModel を、次を持つ新しい
LanguageModelオブジェクトとします:-
temperature を model のtemperature に設定します。
-
コンテキストウィンドウ サイズを model のコンテキストウィンドウ サイズに設定します。
-
現在のコンテキスト 使用量を model の現在のコンテキスト 使用量に設定します。
-
実装定義の方法で、 その他の状態を model から clonedModel へコピーします。
-
コピー処理が失敗した場合:
-
promise を "
OperationError"DOMExceptionで拒否します。 -
返ります。
-
-
promise を clonedModel で解決します。
-
-
-
promise を返します。
3.4.
LanguageModelToolCall
クラス
すべての LanguageModelToolCall
は、作成時に設定される文字列である
呼び出し IDを持ちます。
すべての LanguageModelToolCall
は、作成時に設定される文字列である
名前を持ちます。
すべての LanguageModelToolCall
は、作成時に設定されるObject または null である
引数を持ちます。
new LanguageModelToolCall(init)
コンストラクターの手順は次のとおりです:
callId getter の手順は、
this の呼び出し IDを返すことです。
name getter の手順は、this の名前を返すことです。
arguments getter の手順は、
this の引数を返すことです。
3.5.
LanguageModelToolSuccess
クラス
すべての LanguageModelToolSuccess
は、作成時に設定される文字列である
呼び出し IDを持ちます。
すべての LanguageModelToolSuccess
は、作成時に設定される文字列である
名前を持ちます。
すべての LanguageModelToolSuccess
は、
である
結果を持ち、作成時に設定されます。
FrozenArray<LanguageModelToolResultContent>
new LanguageModelToolSuccess(init)
コンストラクターの手順は次のとおりです:
callId getter の手順は、
this の呼び出し IDを返すことです。
name getter の手順は、this の名前を返すことです。
result getter の手順は、
this の結果を返すことです。
3.6.
LanguageModelToolError
クラス
すべての LanguageModelToolError
は、作成時に設定される文字列である
呼び出し IDを持ちます。
すべての LanguageModelToolError
は、作成時に設定される文字列である
名前を持ちます。
すべての LanguageModelToolError
は、作成時に設定される文字列である
エラーメッセージを持ちます。
new LanguageModelToolError(init)
コンストラクターの手順は次のとおりです:
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 に適用されるように 書かれています。