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 ?>(); // role = "system" の場合、これらは "NotSupportedError" DOMException を投げるparams 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 ; // 入力パラメーターの JSON スキーマ。description required object ; // 言語モデルに代わってユーザーエージェントにより呼び出される関数。inputSchema required LanguageModelToolFunction ; };execute dictionary { // 注: これら 2 つは IDL 層ではなく、カスタムの範囲外処理動作を持つ。 // 失敗せずに +Infinity を許容するため、unrestricted double である。 // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。LanguageModelCreateCoreOptions unrestricted double ; // **実験的**: 拡張機能および実験的コンテキストでのみ利用可能。topK unrestricted double ;temperature LanguageModelSamplingMode = "default";samplingMode 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 >; }; // 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" ,"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) メソッド手続きは次のとおりである:
LanguageModelCreateCoreOptions
options が与えられたとき、言語モデルオプションを検証し正規化するには、
次の手続きを実行する。これらは options をその場で変更して言語タグを正規化および重複排除し、
いずれかが無効であれば例外を投げる。
-
options["
expectedInputs"] が存在する場合、options["expectedInputs"] の各 expected について反復する:-
expected["
languages"] が存在する場合、expected および "languages" が与えられた 言語タグの検証と正規化を行う。
-
-
options["
expectedOutputs"] が存在する場合、options["expectedOutputs"] の各 expected について反復する:-
expected["
languages"] が存在する場合、expected および "languages" が与えられた 言語タグの検証と正規化を行う。
-
-
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 より大きい。(それが、このエラー分岐に到達した理由である。)
-
quota exceeded エラー情報を返す。 そのrequested は requested であり、 quota は maximum である。
-
-
その他の理由で初期化が失敗した場合、DOMException エラー情報を返す。そのname は "
OperationError" であり、そのdetails には適切な詳細が含まれる。 -
null を返す。
LanguageModelCreateOptions
options が与えられたとき、
言語モデルオブジェクトを作成するには:
-
contextWindowSize を、このモデルについてユーザーエージェントが利用可能なコンテキストウィンドウ量とする。 (この値は実装定義であり、たとえばユーザーのメモリーや JavaScript 文字列の制限を超える 特定の制限がない場合には +∞ であってもよい。)
-
initialMessages を、
LanguageModelMessageの空の リストとする。 -
initialMessagesUsage を 0 とする。
-
options["
initialPrompts"] が存在する場合:-
expectedInputs を、options["
expectedInputs"] が存在するならその値、そうでなければ空のリストとする。 -
expectedInputTypes を、expectedInputs が与えられた 期待されるコンテンツ型を取得する結果とする。
-
initialMessages を、options["
initialPrompts"], expectedInputTypes, および false が与えられた プロンプトの検証と正規化結果に設定する。 -
initialMessagesUsage を、initialMessages および options["
signal"] が与えられた 言語モデルのコンテキスト使用量を測定する結果に設定する。
-
-
realm に作成された新しい
LanguageModelオブジェクトを、次を持つものとして返す- initial messages
-
initialMessages
- top K
- temperature
-
options["
temperature"] が存在するならその値、そうでなければ実装定義の値 - expected inputs
-
options["
expectedInputs"] が存在するならその値、そうでなければ空のリスト - expected outputs
-
options["
expectedOutputs"] が存在するならその値、そうでなければ空のリスト - tools
- context window size
-
contextWindowSize
- current context usage
-
initialMessagesUsage
3.2. 利用可能性
availability(options) メソッド手続きは
次のとおりである:
-
options, "
language-model", validate and canonicalize language model options, および compute language model options availability が与えられた AI モデルの利用可能性を計算する結果を返す。
LanguageModelCreateCoreOptions
options が与えられたとき、言語モデルオプションの利用可能性を計算するには、
次の手続きを実行する。これらは Availability
値または null のいずれかを返し、言語タグをその最適一致に更新するため、options をその場で変更する。
-
availability を、言語モデルの非オプション利用可能性とする。
-
availability が null である場合、null を返す。
-
availabilities を、availability を含む リストとする。
-
inputPartition を、その言語のテキストで言語モデルにプロンプトを与える目的が与えられた 言語利用可能性パーティションを取得する結果とする。
-
outputPartition を、その言語で言語モデル出力を生成する目的が与えられた 言語利用可能性パーティションを取得する結果とする。
-
options["
expectedInputs"] が存在する場合、options["expectedInputs"] の各 expected について反復する:-
expected["
languages"] が存在する場合:-
inputLanguageAvailability を、 expected["
languages"] および inputPartition が与えられた 言語利用可能性を計算する結果とする。 -
inputLanguageAvailability を availabilities に付加する。
-
-
inputTypeAvailability を、expected["
type"] および true が与えられた言語モデルコンテンツ型利用可能性とする。 -
inputTypeAvailability を availabilities に付加する。
-
-
options["
expectedOutputs"] が存在する場合、options["expectedOutputs"] の各 expected について反復する:-
expected["
languages"] が存在する場合:-
outputLanguageAvailability を、 expected["
languages"] および outputPartition が与えられた 言語利用可能性を計算する結果とする。 -
outputLanguageAvailability を availabilities に付加する。
-
-
outputTypeAvailability を、expected["
type"] および false が与えられた言語モデルコンテンツ型利用可能性とする。 -
outputTypeAvailability を availabilities に付加する。
-
-
availabilities が与えられた 最小利用可能性を返す。
Availability
値または null を返す。
-
ユーザーエージェントが、言語モデルへのプロンプトをサポートできるかどうかを判断しようとして何らかのエラーがあり、 そのエラーをユーザーエージェントが一時的なもの(再照会によりそのようなエラーが発生しなくなる可能性があるもの)と考える場合、 null を返す。
-
ユーザーエージェントが、言語モデルへのプロンプトをサポートできるようになると考えるが、 すでに進行中のダウンロードが完了した後に限られる場合、"
downloading" を返す。 -
ユーザーエージェントが、言語モデルへのプロンプトをサポートできるようになると考えるが、 現在進行中ではないダウンロードを実行した後に限られる場合、"
downloadable" を返す。 -
そうでなければ、"
unavailable" を返す。
LanguageModelMessageType
type および boolean isInput が与えられたときの
言語モデルコンテンツ型利用可能性は、
次の手続きにより与えられる。これらは Availability
値を返す。
-
isInput が true の場合は入力として、isInput が false の場合は出力として、 ユーザーエージェントが type を現在サポートする場合、"
available" を返す。 -
ユーザーエージェントが、type をそのようなものとしてサポートできるようになると考えるが、 すでに進行中のダウンロードが完了した後に限られる場合、"
downloading" を返す。 -
ユーザーエージェントが、type をそのようなものとしてサポートできるようになると考えるが、 現在進行中ではないダウンロードを実行した後に限られる場合、"
downloadable" を返す。 -
そうでなければ、"
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 取得子手続きは、this の current
context usage を返すことである。
inputUsage 取得子手続きは、this の current
context usage を返すことである。
contextWindow 取得子手続きは、this の context window
size を返すことである。
inputQuota 取得子手続きは、this の context window
size を返すことである。
topK 取得子手続きは、this の top K を返すことである。
temperature 取得子手続きは、this の temperature を返すことである。
次は、すべての LanguageModel
オブジェクトにより、イベントハンドラー IDL 属性としてサポートされなければならない
イベントハンドラー(およびそれに対応する
イベントハンドラーイベント型)である:
| イベントハンドラー | イベントハンドラーイベント型 |
|---|---|
oncontextoverflow
| contextoverflow
|
onquotaoverflow
| quotaoverflow
|
prompt(input, options) メソッド手続きは
次のとおりである:
-
responseConstraint を、options["
responseConstraint"] が存在するならその値、そうでなければ null とする。 -
omitResponseConstraintInput を options["
omitResponseConstraintInput"] とする。 -
operation を、引数 chunkProduced, done, error, および stopProducing を取り、次の手続きを実行する アルゴリズム手続きとする:
-
prefillSuccess を、this, input, omitResponseConstraintInput, responseConstraint, error, および stopProducing が与えられた prefilling の結果とする。
-
prefillSuccess が true である場合、this, responseConstraint, chunkProduced, done, error, および stopProducing が与えられた generate を実行する。
-
-
this, options, および operation が与えられた 集約された AI モデル結果を取得する結果を返す。
promptStreaming(input, options)
メソッド手続きは次のとおりである:
-
responseConstraint を、options["
responseConstraint"] が存在するならその値、そうでなければ null とする。 -
omitResponseConstraintInput を options["
omitResponseConstraintInput"] とする。 -
operation を、引数 chunkProduced, done, error, および stopProducing を取り、次の手続きを実行する アルゴリズム手続きとする:
-
prefillSuccess を、this, input, omitResponseConstraintInput, responseConstraint, error, および stopProducing が与えられた prefilling の結果とする。
-
prefillSuccess が true である場合、this, responseConstraint, chunkProduced, done, error, および stopProducing が与えられた generate を実行する。
-
-
this, options, および operation が与えられた ストリーミング AI モデル結果を取得する結果を返す。
append(input, options) メソッド手続きは
次のとおりである:
-
operation を、引数 chunkProduced, done, error, および stopProducing を取り、次の手続きを実行する アルゴリズム手続きとする:
prefilling アルゴリズムは チャンクを生成しないため、chunkProduced は決して呼び出されない。
-
prefillSuccess を、this, input, false, null, error, および stopProducing が与えられた prefilling の結果とする。
-
prefillSuccess が true であり、かつ done が null でない場合、 done を実行する。
-
-
this, options, および operation が与えられた 集約された AI モデル結果を取得する結果を返す。
measureContextUsage(input, options)
メソッド手続きは次のとおりである:
-
options["
omitResponseConstraintInput"] が true であり、かつ options["responseConstraint"] が存在しない場合、"TypeError"DOMExceptionを投げる。 -
expectedInputTypes を、this の expected inputs が与えられた 期待される コンテンツ型を取得する結果とする。
-
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, -
boolean omitResponseConstraintInput,
-
object-or-null responseConstraint,
-
エラー情報を取り、何も返さない algorithm-or-null error, および
-
引数を取らず boolean を返す algorithm-or-null stopPrefilling,
次の手続きを実行する:
-
messages を、input, expectedInputTypes, および model の現在のコンテキスト使用量が 0 より大きい場合は true、そうでなければ false が与えられた プロンプトの検証と正規化の結果とする。
これが例外 e を投げる場合:
-
error が null でない場合、e のnameを name とし、かつ details に適切な詳細を含む DOMException エラー情報を与えて error を実行する。
-
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 を、model の現在のコンテキスト使用量 + requested をrequested とし、 model のコンテキストウィンドウサイズを quota とする quota exceeded エラー情報とする。
-
errorInfo を与えて error を実行する。
-
-
false を返す。
-
-
expectedInputTypes を、model の期待される 入力が与えられた 期待される コンテンツ型を取得する結果とする。
-
実装定義の方法で、基礎となるモデルの内部状態を messages を含むよう更新する。
この処理は、状態がどのように更新されるかを導くために、model の初期 メッセージ、model のtop K、model のtemperature、 model の期待される入力、model の期待される出力、および model のtools を使用するべきである。
この処理は、§ 4 プライバシーに関する考慮事項および§ 5 セキュリティに関する考慮事項で与えられた指針に適合しなければならない。
この処理中に stopPrefilling が true を返す場合、false を返す。
事前入力中にエラーが発生した場合:
-
そのエラーを、§ 3.3.4 エラーの指針に従って エラー情報 errorInfo として表す。
-
error が null でない場合、errorInfo を与えて error を実行する。
-
false を返す。
-
-
model の現在のコンテキスト使用量を、 model の現在のコンテキスト使用量 + requested に設定する。
-
true を返す。
-
LanguageModelmodel, -
object-or-null responseConstraint,
-
文字列を取り、何も返さない algorithm-or-null chunkProduced,
-
引数を取らず何も返さない algorithm-or-null done,
-
エラー情報を取り、何も返さない algorithm-or-null error, および
-
引数を取らず boolean を返す algorithm-or-null stopProducing,
次の手続きを実行する:
-
実装定義の方法で、次の指針に従い、言語モデルの現在の内部状態に基づいて 応答を生成する処理を開始する。
この処理は、モデルの挙動を導くために、model の初期 メッセージ、model のtop K、model のtemperature、 model の期待される入力、model の期待される出力、model のtools、および responseConstraint を使用するべきである。
プロンプト処理は、§ 4 プライバシーに関する考慮事項および§ 5 セキュリティに関する考慮事項で与えられた指針に適合しなければならない。
model のtools が空でない場合、モデルは提供されたツールを、それらの execute 関数を呼び出すことにより使用してもよい。
-
true の間:
-
応答データの次のチャンクが生成されるか、処理が終了するか、または stopProducing を呼び出した結果が true になるまで待つ。
-
そのようなチャンクが正常に生成された場合:
-
それを文字列 chunk として表す。
-
chunkProduced が null でない場合、chunk を与えて chunkProduced を実行する。
-
-
そうではなく、処理が終了した場合:
-
done が null でない場合、done を実行する。
-
抜ける。
-
-
そうではなく、stopProducing が true を返す場合、抜ける。
-
そうではなく、プロンプト中にエラーが発生した場合:
-
そのエラーを、§ 3.3.4 エラーの指針に従って エラー情報 errorInfo として表す。
-
error が null でない場合、errorInfo を与えて error を実行する。
-
抜ける。
-
-
3.3.2. 使用状況
-
LanguageModelMessageのリスト messages, -
引数を取らず boolean を返すアルゴリズム 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、および boolean hasAppendedInput が与えられたとき、
プロンプトを検証し正規化するには、次の手続きを実行する。
戻り値は、"longhand" 形式の LanguageModelMessage
の
空でないリストとなる。
-
input が文字列である場合、« «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» » を返す。 -
表明: input は
LanguageModelMessageの リストである。 -
input が空のリストである場合、« «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» » を返す。 -
messages を、
LanguageModelMessageの空の リストとする。 -
input の各 message について反復する:
-
message["
content"] が文字列である場合、message を «[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]» に設定する。 -
message["
prefix"] が true である場合:-
message["
role"] が "assistant" でない場合、"SyntaxError"DOMExceptionを投げる。 -
message が messages 内の最後の項目でない場合、"
SyntaxError"DOMExceptionを投げる。
-
-
message["
role"] が "system" である場合:-
hasAppendedInput が true である場合、"
TypeError"DOMExceptionを投げる。
-
-
message["
content"] の各 content について反復する:-
message["
role"] が "assistant" であり、かつ content["type"] が "text" でない場合、"NotSupportedError"DOMExceptionを投げる。 -
content["
type"] が "text" であり、かつ content["value"] が文字列でない場合、"TypeError"DOMExceptionを投げる。 -
content["
type"] が "image" である場合:-
expectedTypes が "
image" を含まない場合、"NotSupportedError"DOMExceptionを投げる。 -
content["
value"] がImageBitmapSourceまたはBufferSourceでない場合、"TypeError"DOMExceptionを投げる。
-
-
content["
type"] が "audio" である場合:-
expectedTypes が "
audio" を含まない場合、"NotSupportedError"DOMExceptionを投げる。 -
content["
value"] がAudioBuffer、BufferSource、 またはBlobでない場合、"TypeError"DOMExceptionを投げる。
-
-
-
contentWithContiguousTextCollapsed を、
LanguageModelMessageContentの空の リストとする。 -
lastTextContent を null とする。
-
message["
content"] の各 content について反復する:-
content["
type"] が "text" である場合:-
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. エラー
プロンプトが失敗した場合、次の考えられる理由が Web 開発者に示され得る。この表は、使用可能な DOMException
name と、実装がそれらを使用するべき場合を列挙する:
DOMException
name
| シナリオ |
|---|---|
"NotAllowedError"
|
ユーザーの選択またはユーザーエージェントのポリシーにより、プロンプトが無効化されている。 |
"NotReadableError"
|
モデル出力がユーザーエージェントによりフィルタリングされた。たとえば、有害、不正確、または無意味であると検出されたため。 |
"NotSupportedError"
|
処理される入力がユーザーエージェントのサポートしない言語であった、または モデル出力が、ユーザーエージェントのサポートしない言語になった(たとえば、ユーザーエージェントがその出力言語について十分な品質管理テストを行っていないため)。 |
"UnknownError"
|
その他すべてのシナリオ。これには、ユーザーエージェントがモデルにプロンプトを与えつつ § 4 プライバシーに関する考慮事項または§ 5 セキュリティに関する考慮事項で与えられた要件を満たすことはできないと考える場合を含む。 または、ユーザーエージェントが失敗理由を開示したくない場合。 |
この表は、prompt API により示され得る例外の完全な一覧を与えるものではない。 これは、特定の実装定義の手続きから生じ得るもののみを含む。
LanguageModel
model および LanguageModelCloneOptions
options が与えられたとき、言語モデルを複製するには:
-
global を、model の関連するグローバルオブジェクトとする。
-
global の関連付けられた Document が完全にアクティブでない場合、"
InvalidStateError"DOMExceptionで 拒否された Promiseを返す。 -
signals を、« model のdestruction abort controller のsignal » とする。
-
compositeSignal を、signals が与えられ、
AbortSignalおよび model の関連するレルムを用いて 依存 abort signal を作成する結果とする。 -
compositeSignal がaborted である場合、 compositeSignal のabort reason で 拒否された Promiseを返す。
-
signal が null でなく、かつaborted である場合、signal のabort reason で拒否された Promise を返す。
-
promise を、model の関連するレルム内で作成された新しい Promiseとする。
-
abortedDuringOperation を false とする。
-
compositeSignal に次の abort 手続きを追加する:
-
abortedDuringOperation を true に設定する。
-
compositeSignal の abort reason で promise を拒否する。
-
-
並列に:
-
次の手続きを実行するため、AI タスクソース上でグローバルタスクをキューに入れる:
-
abortedDuringOperation が true である場合、返す。
-
clonedModel を、次を持つ新しい
LanguageModelオブジェクトとする:-
initial messages を model のinitial messages に設定する。
-
temperature を model のtemperature に設定する。
-
expected inputs を model のexpected inputs に設定する。
-
expected outputs を model のexpected outputs に設定する。
-
context window size を model のcontext window size に設定する。
-
current context usage を model のcurrent context usage に設定する。
-
-
実装定義の方法で、 その他の任意の状態を model から clonedModel にコピーする。
-
コピー操作が失敗した場合:
-
"
OperationError"DOMExceptionで promise を拒否する。 -
返す。
-
-
clonedModel で promise を解決する。
-
-
-
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 に適用されるよう書かれている。