提示 API

社区组报告草案,

关于本文档的更多详细信息
本版本:
https://webmachinelearning.github.io/prompt-api
问题跟踪:
GitHub
编辑:
(Google)
前任编辑:
Domenic Denicola (Google)

摘要

提示 API 使网页能够直接向语言模型发出提示

本文档状态

本规范由 Web Machine Learning Community Group 发布。 它不是 W3C 标准,也不在 W3C 标准轨道上。 请注意,根据 W3C 社区贡献者许可协议 (CLA) 适用有限的退出选择及其他条件。 了解更多关于 W3C 社区和业务组 的信息。

1. 简介

Prompt API 使网页能够直接提示浏览器提供的语言模型。它提供 统一的 JavaScript API,用于抽象底层模型的具体细节(例如模板处理或 分词)。通过利用内置语言模型,它提供了诸如本地处理 敏感数据、离线使用、模型共享,以及与基于云或 自带模型方法相比降低成本等优势。

2. 依赖项

本规范依赖于 Infra 标准。[INFRA]

与 Web 平台的其他部分一样,这些 API 中的人类语言由 BCP 47 语言标签标识, 例如 "ja"、"en-US"、"sr-Cyrl" 或 "de-CH-1901-x-phonebk-extended"。用于验证、规范化 和语言标签匹配的具体算法来自 ECMAScript 国际化 API 规范, 而后者又将部分处理委托给 Unicode 区域设置数据标记语言(LDML)。[BCP47] [ECMA-402] [UTS35]。

这些 API 是一组预计由机器学习模型提供支持的 API 的一部分,它们共享通用的 API 表面惯用形式和规范模式。目前,这些共享部分的规范文本 位于 Writing Assistance APIs § 5 共享基础设施,而通用的隐私和安全 注意事项在 Writing Assistance APIs § 6 隐私注意事项和 Writing Assistance APIs § 7 安全注意事项中讨论。实现这些 API 需要实现该 共享基础设施,并遵守这些隐私和安全注意事项。但这并不要求 实现或暴露实际的写作辅助 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 {
  // 注:这两项具有自定义的越界处理行为,并非在 IDL 层处理。
  // 它们的类型为 unrestricted double,以允许 +Infinity 而不报错。
  // **已弃用**:此选项将被移除;请改用 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. 创建

静态 create(options) 方法的步骤如下:
  1. 返回给定 创建 AI 模型对象的结果, options、"language-model"、 验证并规范化 语言模型选项、计算语言模型选项 可用性、下载语言模型、初始化语言模型、创建语言模型对象以及 false。

要 验证并规范化语言模型 选项,给定一个 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 错误信息,其 名称为 "NotSupportedError" 且其 详细信息包含适当的 详情。

  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 且 配额为 maximum。

  5. 如果初始化因任何其他原因失败,则返回一个 DOMException 错误信息,其 名称为 "OperationError" 且其 详细信息包含适当的详情。

  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"] 如果其 存在;否则为 null,如果 options["topK"] 存在或 options["temperature"] 存在;否则为 "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 都有一个 top K,它是一个 unsigned long,在创建期间设置。

每个 LanguageModel 都有一个 温度,它是一个 float,在创建期间设置。

每个 LanguageModel 都有一个 采样模式,它是一个 LanguageModelSamplingMode 或 null,在创建期间设置。

每个 LanguageModel 都有一个预期输入,它是一个由 LanguageModelExpected 组成的列表, 在创建期间设置。

每个 LanguageModel 都有一个预期输出,它是一个由 LanguageModelExpected 组成的列表, 在创建期间设置。

每个 LanguageModel 都有一个 工具,它是一个由 LanguageModelToolDeclaration 组成的列表, 在创建期间设置。

每个 LanguageModel 都有一个 上下文窗口大小,它是一个 unrestricted double,在 创建期间设置。

每个 LanguageModel 都有一个 当前上下文使用量,它是一个 double,初始为 0。


contextUsage getter 的步骤是返回 this 的当前上下文使用量。

inputUsage getter 的步骤是返回 this 的当前上下文使用量。

contextWindow getter 的步骤是返回 this 的上下文窗口大小。

inputQuota getter 的步骤是返回 this 的上下文窗口大小。

topK getter 的步骤是返回 this 的 top K。

temperature getter 的步骤是返回 this 的温度。

samplingMode getter 的步骤是返回 this 的采样模式。


以下是所有 LanguageModel 对象必须作为事件处理器 IDL 属性支持的事件处理器(以及它们对应的事件处理器事件类型):

事件处理器 事件处理器事件类型
oncontextoverflow contextoverflow
onquotaoverflow quotaoverflow

prompt(input, options) 方法 的步骤如下:
  1. 如果 options["responseConstraint"] 存在,则令 responseConstraint 为该值;否则为 null。

  2. 令 omitResponseConstraintInput 为 options["omitResponseConstraintInput"]。

  3. 令 hasNonTextExpectedOutput 为 false。

  4. 对于每个 this 的预期输出中的 expected:

    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 的兑现处理器所得的结果。

promptStreaming(input, options) 方法的步骤如下:
  1. 如果 options["responseConstraint"] 存在,则令 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,则实现可以向 messages 插入一个由实现定义的 LanguageModelMessage 以引导模型的行为。

  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, 该信息的名称是 e 的名称,且其详细信息包含适当的 细节。

    2. 返回 false。

  4. 如果 responseConstraint 不为 null 且 omitResponseConstraintInput 为 false, 则实现可以向 messages 插入一个由实现定义的 LanguageModelMessage 以引导模型的行为。

  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 的温度、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 的温度、model 的预期输入、model 的预期输出、model 的工具以及 responseConstraint 来引导 模型的行为。

    提示过程必须遵循 § 4 隐私 注意事项和 § 5 安全注意事项中给出的指导。

    如果 model 的工具不为空, 除文本之外或代替文本,模型可以根据 model 的 工具中声明的工具生成一个或多个工具调用。

  3. 当 true 时:

    1. 等待生成下一个响应数据块(文本或工具调用)、等待 过程完成,或者等待调用 stopProducing 的结果变为 true。

    2. 如果成功生成一个文本块:

      1. 令其表示为一个字符串 chunk。

      2. 如果 chunkProduced 不为 null,则给定 chunk 执行 chunkProduced。

    3. 否则,如果成功生成一个工具调用:

      1. 令 callId 为一个由实现定义的非空字符串,用于标识该工具调用。

      2. 令 name 为一个字符串,表示正在 调用的工具名称。

      3. 令 arguments 为一个在 model 的相关领域中创建的对象,表示该工具调用参数的 JSON 对象。

      4. 令 toolCall 为一个在 model 的相关领域中创建的新 LanguageModelToolCall, 其调用 ID设置为 callId,名称设置为 name,并且 参数设置为 arguments。

      5. 令 toolCallContent 为一个 LanguageModelMessageContent, 使用 «[ "type" → "tool-call", "value" → toolCall ]» 初始化。

      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 中的数据量成比例。

    这可能是使用某种语言模型分词方案表示输入所需的 token 数量,也可能与数据的字节大小有关。

    如果在此过程中 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 的 值,例如函数或 BigInts),则抛出一个 "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 的值,例如函数或 BigInts),则抛出一个 "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. 错误

当提示失败时,以下可能的原因可以暴露给 Web 开发者。此表列出了 可能的 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 的销毁中止 控制器的signal »。

  5. 如果 options["signal"] 存在,则 将其追加到 signals。

  6. 令 compositeSignal 为给定 signals、使用 AbortSignal 以及 model 的相关领域 创建依赖中止信号的结果。

  7. 如果 compositeSignal 已中止,则返回以 compositeSignal 的中止原因拒绝的 promise。

  8. 如果 options["signal"] 存在,则令 signal 为该值;否则为 null。

  9. 如果 signal 不为 null 且已中止,则返回一个以 signal 的中止原因拒绝的 promise。

  10. 令 promise 为一个在 model 的相关领域中创建的新 promise。

  11. 令 abortedDuringOperation 为 false。

    此变量将从事件循环写入,但从并行过程中读取。

  12. 将以下中止步骤添加到 compositeSignal:

    1. 将 abortedDuringOperation 设置为 true。

    2. 以 compositeSignal 的中止原因拒绝 promise。

  13. 并行:

    1. 在 AI 任务源上排入一个全局任务以执行以下步骤:

      1. 如果 abortedDuringOperation 为 true,则返回。

      2. 令 clonedModel 为一个新的 LanguageModel 对象,具有:

      3. 以由实现定义的方式, 将 model 的任何其他状态复制到 clonedModel。

      4. 如果复制操作失败:

        1. 以一个 "OperationError" DOMException 拒绝 promise。

        2. 返回。

      5. 以 clonedModel 兑现 promise。

  14. 返回 promise。

3.4. LanguageModelToolCall 类

每个 LanguageModelToolCall 都有一个 调用 ID,它是一个字符串,在创建期间设置。

每个 LanguageModelToolCall 都有一个名称,它是一个字符串,在创建期间设置。

每个 LanguageModelToolCall 都有一个参数,它是一个对象或 null, 在创建期间设置。

new LanguageModelToolCall(init) 构造函数的步骤如下:
  1. 将 this 的调用 ID设置为 init["callId"]。

  2. 将 this 的名称设置为 init["name"]。

  3. 如果 init["arguments"] 存在,则将 this 的参数设置为该值;否则为 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"] 创建冻结数组的结果。

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 隐私注意事项。该文本旨在适用于所有共享相同基础设施的 API,如 § 2 依赖项中所述。

5. 安全注意事项

有关 Prompt API 的安全注意事项讨论,请参阅 Writing Assistance APIs § 7 安全注意事项。该文本旨在适用于所有共享相同基础设施的 API,如 § 2 依赖项中所述。

索引

本规范定义的 术语

通过引用定义的 术语

参考文献

规范性参考文献

[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. 权限 策略。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]
写作辅助 API。社区组报告草案。URL:https://webmachinelearning.github.io/writing-assistance-apis/

非规范性参考文献

[BCP47]
Addison Phillips; Mark Davis. 用于标识 语言的标签。2009 年 9 月。当前最佳实践。URL:https://www.rfc-editor.org/info/bcp47
[UTS35]
Mark Davis; et al. Unicode 区域设置 数据标记语言(LDML)。2020 年 10 月 23 日。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;

  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;

  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;