프롬프트 API

커뮤니티 그룹 보고서 초안,

이 문서에 대한 자세한 정보
이 버전:
https://webmachinelearning.github.io/prompt-api
이슈 추적:
GitHub
편집자:
(Google)
전 편집자:
Domenic Denicola (Google)

초록

프롬프트 API는 웹 페이지가 언어 모델에 직접 프롬프트를 보낼 수 있는 기능을 제공합니다

이 문서의 상태

이 명세는 웹 머신 러닝 커뮤니티 그룹에 의해 발행되었습니다. 이는 W3C 표준이 아니며 W3C 표준화 과정에도 포함되어 있지 않습니다. 다음 사항에 유의하십시오. W3C 커뮤니티 기여자 라이선스 계약 (CLA) 에 따라 제한적인 옵트아웃 및 기타 조건이 적용됩니다. 자세한 내용은 W3C 커뮤니티 및 비즈니스 그룹을 참조하십시오.

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 국제화 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 계층이 아닌 별도의 범위 초과 처리 동작을 갖습니다.
  // 오류 없이 +Infinity를 허용하기 위해 unrestricted double 타입을 사용합니다.
  // **사용 중단**: 이 옵션은 제거될 예정입니다. 대신 samplingMode를 사용하세요. 확장 프로그램 컨텍스트에서만 사용할 수 있습니다.
  unrestricted double topK;
  // **사용 중단**: 이 옵션은 제거될 예정입니다. 대신 samplingMode를 사용하세요. 확장 프로그램 컨텍스트에서만 사용할 수 있습니다.
  unrestricted double temperature;

  LanguageModelSamplingMode samplingMode;

  // 세션에 예상되는 타입 및 언어입니다.
  sequence<LanguageModelExpected> expectedInputs;
  sequence<LanguageModelExpected> expectedOutputs;

  // 언어 모델이 사용할 수 있는 도구입니다.
  // **실험적 기능**: 실험적 컨텍스트에서만 사용할 수 있습니다.
  sequence<LanguageModelToolDeclaration> tools = [];
};

dictionary LanguageModelCreateOptions : LanguageModelCreateCoreOptions {
  AbortSignal signal;
  CreateMonitorCallback monitor;

  sequence<LanguageModelMessage> initialPrompts = [];
};

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

dictionary LanguageModelAppendOptions {
  AbortSignal signal;
};

dictionary LanguageModelCloneOptions {
  AbortSignal signal;
};

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

// prompt() 메서드 및 이와 유사한 메서드의 인수입니다.

typedef (
  sequence<LanguageModelMessage>
  // `[{ role: "user", content: [{ type: "text", value: providedValue }] }]`의 축약형입니다.
  or DOMString
) LanguageModelPrompt;

dictionary LanguageModelMessage {
  required LanguageModelMessageRole role;

  // DOMString 분기는 `[{ type: "text", value: providedValue }]`의 축약형입니다.
  required (DOMString or sequence<LanguageModelMessageContent>) content;

  boolean prefix = false;
};

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

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

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

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

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

// `LanguageModelToolCall` 및 `LanguageModelToolResponse` 값의 정의입니다.
enum LanguageModelToolResultType { "text", "image", "audio", "object" };

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

// 언어 모델이 요청한 도구 호출을 나타냅니다.
[Exposed=Window, SecureContext]
interface LanguageModelToolCall {
  constructor(LanguageModelToolCallInit init);
  readonly attribute DOMString callId;
  readonly attribute DOMString name;
  readonly attribute object? arguments;
};

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

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

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

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

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

// 도구 호출 실행에 대한 응답으로, 성공 또는 오류입니다.
typedef (LanguageModelToolSuccess or LanguageModelToolError) LanguageModelToolResponse;

3.1. 생성

정적 create(options) 메서드의 단계는 다음과 같습니다.
  1. options, "language-model", 언어 모델 옵션을 검증하고 정규화하기, 언어 모델 옵션 가용성 계산하기, 언어 모델 다운로드하기, 언어 모델 초기화하기, 언어 모델 객체 생성하기 및 false가 주어진 AI 모델 객체 생성하기의 결과를 반환합니다.

다음 언어 모델 옵션을 검증하고 정규화하려면, 주어진 LanguageModelCreateCoreOptions options에 대해 다음 단계를 수행합니다. 이 단계는 options를 제자리에서 변경하여 언어 태그를 정규화하고 중복을 제거하며, 유효하지 않은 태그가 있으면 예외를 던집니다.
  1. options["expectedInputs"]가 존재하면, 각각의 expected를 options["expectedInputs"]에서 순회합니다:

    1. expected["languages"]가 존재하면, 검증하고 정규화합니다: 언어 태그. 이때 expected와 "languages"를 전달합니다.

  2. hasToolCallInExpectedOutputs를 false로 둡니다.

  3. options["expectedOutputs"]가 존재하면, 각각의 expected를 options["expectedOutputs"]에서 순회합니다:

    1. expected["type"]가 다음 값이면: "tool-call", hasToolCallInExpectedOutputs를 true로 설정합니다.

    2. expected["languages"]가 존재하면, 검증하고 정규화합니다: 언어 태그. 이때 expected와 "languages"를 전달합니다.

  4. options["tools"]가 다음 상태가 아니라면: 비어 있음, 다음을 수행합니다:

    1. hasToolCallInExpectedOutputs가 false이면 TypeError를 던집니다.

    2. toolNames를 빈 순서 있는 집합으로 둡니다. 원소는 문자열입니다.

    3. 각각의 tool을 options["tools"]에서 순회합니다:

      1. tool["name"]가 빈 문자열이면 TypeError를 던집니다.

      2. toolNames가 포함하는 값이 tool["name"]이면, TypeError를 던집니다.

      3. 추가합니다: tool["name"]를 toolNames에 추가합니다.

      4. tool["description"]가 빈 문자열이면 TypeError를 던집니다.

      5. schema를 tool["inputSchema"]로 둡니다.

      6. typeValue를 ? Get(schema, "type")으로 둡니다.

      7. typeValue가 "object"가 아니면 TypeError를 던집니다.

      8. propertiesValue를 ? Get(schema, "properties")로 둡니다.

      9. propertiesValue가 undefined가 아니고 propertiesValue가 다음 타입이 아니면: Object, TypeError를 던집니다.

      10. requiredValue를 ? Get(schema, "required")로 둡니다.

      11. requiredValue가 undefined가 아니고 ? IsArray(requiredValue)가 false이면, TypeError를 던집니다.

      12. ? 직렬화합니다: JavaScript 값을 JSON 문자열로. 이때 schema를 전달합니다.

  5. options["initialPrompts"]가 존재하고 다음 상태가 아니라면: 비어 있음, 다음을 수행합니다:

    1. expectedInputs를 options["expectedInputs"]로 둡니다. 이 값이 존재하는 경우에 해당하며, 그렇지 않으면 빈 리스트로 둡니다.

    2. expectedInputTypes를 예상 콘텐츠 타입 가져오기의 결과로 둡니다. 이때 expectedInputs를 전달합니다.

    3. 프롬프트의 유효성 검사 및 정규화를 수행합니다. 이때 options["initialPrompts"], expectedInputTypes, false를 전달합니다.

다음 언어 모델 다운로드를 수행하려면, 주어진 LanguageModelCreateCoreOptions options에 대해:
  1. 단언: 이 단계는 병렬로 실행되고 있습니다.

  2. 사용자 에이전트가 언어 모델에 프롬프트를 전달하는 데 필요한 모든 항목의 다운로드 절차를 options에 따라 시작합니다. 여기에는 기본 AI 모델, 특정 언어나 옵션 값을 위한 미세 조정 데이터 또는 기타 리소스가 포함될 수 있습니다.

  3. 어떤 이유로든 다운로드 절차를 시작할 수 없으면 false를 반환합니다.

  4. true를 반환합니다.

다음 언어 모델 초기화를 수행하려면, 주어진 LanguageModelCreateOptions options에 대해:
  1. 단언: 이 단계는 병렬로 실행되고 있습니다.

  2. availability를 언어 모델 옵션의 가용성 계산에 options를 전달한 결과로 둡니다.

    1. availability가 null 또는 unavailable이면, 다음 DOMException 오류 정보를 반환합니다: 이름이 "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

    상위 K

    options["topK"] 이 값이 존재하고 options["samplingMode"]가 다음 상태가 아닌 경우: 존재함. 그렇지 않으면 구현 정의 값

    온도

    options["temperature"] 이 값이 존재하고 options["samplingMode"]가 다음 상태가 아닌 경우: 존재함. 그렇지 않으면 구현 정의 값

    샘플링 모드

    options["samplingMode"] 이 값이 존재하는 경우. 그렇지 않으면 options["topK"]가 존재하거나 options["temperature"]가 존재하면 null. 그렇지 않으면 "balanced"

    예상 입력

    options["expectedInputs"] 이 값이 존재하는 경우. 그렇지 않으면 빈 리스트

    예상 출력

    options["expectedOutputs"] 이 값이 존재하는 경우. 그렇지 않으면 빈 리스트

    도구

    tools

    컨텍스트 창 크기

    contextWindowSize

    현재 컨텍스트 사용량

    initialContextUsage

3.2. 가용성

정적 availability(options) 메서드의 단계는 다음과 같습니다:
  1. AI 모델 가용성 계산의 결과를 반환합니다. 이때 options, "language-model", 언어 모델 옵션의 유효성 검사 및 정규화, 그리고 언어 모델 옵션의 가용성 계산을 전달합니다.

다음 언어 모델 옵션의 가용성을 계산하려면, 주어진 LanguageModelCreateCoreOptions options에 대해 다음 단계를 수행합니다. 이 단계는 Availability 값 또는 null을 반환하며, options를 제자리에서 변경하여 언어 태그를 최적 일치 항목으로 업데이트합니다.
  1. 단언: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. availability를 언어 모델의 옵션 외 가용성으로 둡니다.

  3. availability가 null이면 null을 반환합니다.

  4. availabilities를 리스트로 두며, 이 리스트는 availability를 포함합니다.

  5. inputPartition을 언어별 가용성 분할 가져오기에 해당 언어의 텍스트로 언어 모델에 프롬프트를 전달한다는 목적을 전달한 결과로 둡니다.

  6. outputPartition을 언어별 가용성 분할 가져오기에 해당 언어로 언어 모델의 출력을 생성한다는 목적을 전달한 결과로 둡니다.

  7. options["expectedInputs"]가 존재하면, 각각의 expected를 options["expectedInputs"]에서 순회합니다:

    1. expected["languages"]가 존재하면, 다음을 수행합니다:

      1. inputLanguageAvailability를 언어 가용성 계산에 expected["languages"]와 inputPartition을 전달한 결과로 둡니다.

      2. 추가할 inputLanguageAvailability를 availabilities에 넣습니다.

    2. inputTypeAvailability를 언어 모델 콘텐츠 타입의 가용성에 expected["type"]과 true를 전달한 결과로 둡니다.

    3. 추가할 inputTypeAvailability를 availabilities에 넣습니다.

  8. options["expectedOutputs"]가 존재하면, 각각의 expected를 options["expectedOutputs"]에서 순회합니다:

    1. expected["languages"]가 존재하면, 다음을 수행합니다:

      1. outputLanguageAvailability를 언어 가용성 계산에 expected["languages"]와 outputPartition을 전달한 결과로 둡니다.

      2. 추가할 outputLanguageAvailability를 availabilities에 넣습니다.

    2. outputTypeAvailability를 언어 모델 콘텐츠 타입의 가용성에 expected["type"]과 false를 전달한 결과로 둡니다.

    3. 추가할 outputTypeAvailability를 availabilities에 넣습니다.

  9. 다음 최소 가용성을 반환합니다. 이때 availabilities를 전달합니다.

다음 언어 모델의 옵션 외 가용성은 다음 단계로 결정됩니다. 이 단계는 Availability 값 또는 null을 반환합니다.
  1. 단언: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. 사용자 에이전트가 언어 모델에 프롬프트를 전달하는 기능을 지원할 수 있는지 확인하는 중 오류가 발생하고, 사용자 에이전트가 그 오류를 일시적인 것으로 판단하면(다시 질의하면 해당 오류가 발생하지 않을 수 있는 경우), null을 반환합니다.

  3. 사용자 에이전트가 현재 지원하는 기능에 언어 모델에 프롬프트를 전달하는 기능이 있으면 "available"을 반환합니다.

  4. 사용자 에이전트가 향후 지원할 수 있다고 판단하는 언어 모델 프롬프트 처리가, 이미 진행 중인 다운로드를 완료해야만 가능한 경우 "downloading"을 반환합니다.

  5. 사용자 에이전트가 향후 지원할 수 있다고 판단하는 언어 모델 프롬프트 처리가, 현재 진행 중이지 않은 다운로드를 수행해야만 가능한 경우 "downloadable"을 반환합니다.

  6. 그렇지 않으면 "unavailable"을 반환합니다.

다음 언어 모델 콘텐츠 타입의 가용성은 주어진 LanguageModelMessageType type과 불리언 isInput에 대해 다음 단계로 결정됩니다. 이 단계는 Availability 값을 반환합니다.
  1. 단언: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. 사용자 에이전트가 현재 지원하는 type이 isInput이 true이면 입력이고, isInput이 false이면 출력인 경우, 다음 값을 반환합니다: "available".

  3. 사용자 에이전트가 지원할 수 있다고 판단하는 type의 위와 같은 사용이, 이미 진행 중인 다운로드를 완료해야만 가능한 경우 "downloading"을 반환합니다.

  4. 사용자 에이전트가 지원할 수 있다고 판단하는 type의 위와 같은 사용이, 현재 진행 중이지 않은 다운로드를 수행해야만 가능한 경우 "downloadable"을 반환합니다.

  5. 그렇지 않으면 "unavailable"을 반환합니다.

3.3. LanguageModel 클래스

모든 LanguageModel에는 생성 시 설정되는 LanguageModelMessage의 목록인 초기 메시지가 있습니다.

모든 LanguageModel에는 생성 시 설정되는 unsigned long인 top K가 있습니다.

모든 LanguageModel에는 생성 시 설정되는 float인 temperature가 있습니다.

모든 LanguageModel에는 생성 시 설정되는 LanguageModelSamplingMode 또는 null인 샘플링 모드가 있습니다.

모든 LanguageModel에는 생성 시 설정되는 LanguageModelExpected의 목록인 예상 입력이 있습니다.

모든 LanguageModel에는 생성 시 설정되는 LanguageModelExpected의 목록인 예상 출력이 있습니다.

모든 LanguageModel에는 생성 시 설정되는 LanguageModelToolDeclaration의 목록인 도구가 있습니다.

모든 LanguageModel에는 생성 시 설정되는 unrestricted double인 컨텍스트 창 크기가 있습니다.

모든 LanguageModel에는 처음에 0인 double인 현재 컨텍스트 사용량이 있습니다.


contextUsage getter의 단계는 this의 현재 컨텍스트 사용량을 반환하는 것입니다.

inputUsage getter의 단계는 this의 현재 컨텍스트 사용량을 반환하는 것입니다.

contextWindow getter의 단계는 this의 컨텍스트 창 크기를 반환하는 것입니다.

inputQuota getter의 단계는 this의 컨텍스트 창 크기를 반환하는 것입니다.

topK getter의 단계는 this의 top K를 반환하는 것입니다.

temperature getter의 단계는 this의 temperature를 반환하는 것입니다.

samplingMode getter의 단계는 this의 샘플링 모드를 반환하는 것입니다.


다음은 모든 LanguageModel 객체가 이벤트 핸들러 IDL 속성으로 지원해야 하는 이벤트 핸들러와 이에 대응하는 이벤트 핸들러 이벤트 타입입니다:

이벤트 핸들러 이벤트 핸들러 이벤트 타입
oncontextoverflow contextoverflow
onquotaoverflow quotaoverflow

prompt(input, options) 메서드의 단계는 다음과 같습니다:
  1. responseConstraint를 options["responseConstraint"]가 존재하면 해당 값으로, 그렇지 않으면 null로 둡니다.

  2. omitResponseConstraintInput을 options["omitResponseConstraintInput"]로 둡니다.

  3. hasNonTextExpectedOutput을 false로 둡니다.

  4. 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. Assert: 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. contents를 반환하는 이행 핸들러로 promise에 반응한 결과를 반환합니다.

promptStreaming(input, options) 메서드의 단계는 다음과 같습니다:
  1. responseConstraint를 options["responseConstraint"]가 존재하면 해당 값으로, 그렇지 않으면 null로 둡니다.

  2. omitResponseConstraintInput을 options["omitResponseConstraintInput"]로 둡니다.

  3. operation을 chunkProduced, done, error 및 stopProducing 인수를 받아 다음 단계를 수행하는 알고리즘 단계로 둡니다:

    1. prefillSuccess를 this, input, omitResponseConstraintInput, responseConstraint, error 및 stopProducing이 주어진 사전 채우기의 결과로 둡니다.

    2. prefillSuccess가 true이면 this, responseConstraint, chunkProduced, done, error 및 stopProducing이 주어진 생성하기를 수행합니다.

  4. this, options 및 operation이 주어진 스트리밍 AI 모델 결과 가져오기의 결과를 반환합니다.

append(input, options) 메서드의 단계는 다음과 같습니다:
  1. operation을 chunkProduced, done, error 및 stopProducing 인수를 받아 다음 단계를 수행하는 알고리즘 단계로 둡니다:

    사전 채우기 알고리즘은 청크를 생성하지 않으므로 chunkProduced는 호출되지 않습니다.

    1. prefillSuccess를 this, input, false, null, error 및 stopProducing이 주어진 사전 채우기의 결과로 둡니다.

    2. prefillSuccess가 true이고 done이 null이 아니면 done을 수행합니다.

  2. this, options 및 operation이 주어진 집계된 AI 모델 결과 가져오기의 결과를 반환합니다.

measureContextUsage(input, options) 메서드의 단계는 다음과 같습니다:
  1. options["omitResponseConstraintInput"]이 true이고 options["responseConstraint"]가 존재하지 않으면 "TypeError" DOMException을 발생시킵니다.

  2. expectedInputTypes를 this의 예상 입력이 주어진 예상 콘텐츠 타입 가져오기의 결과로 둡니다.

  3. messages를 input, expectedInputTypes 및 false가 주어진 프롬프트를 검증하고 정규화하기의 결과로 둡니다.

  4. options["responseConstraint"]가 존재하고 null이 아니며 options["omitResponseConstraintInput"]이 false이면 구현은 모델의 동작을 유도하기 위해 구현 정의 LanguageModelMessage를 messages에 삽입할 수 있습니다.

  5. measureUsage를 stopMeasuring 인수를 받아 messages 및 stopMeasuring이 주어진 언어 모델 컨텍스트 사용량 측정하기의 결과를 반환하는 알고리즘 단계로 둡니다.

  6. this, options 및 measureUsage가 주어진 AI 모델 입력 사용량 측정하기의 결과를 반환합니다.

measureInputUsage(input, options) 메서드의 단계는 다음과 같습니다:
  1. input 및 options이 주어진 measureContextUsage() 메서드 단계를 실행한 결과를 반환합니다.

clone(options) 메서드의 단계는 다음과 같습니다:
  1. this 및 options이 주어진 언어 모델 복제하기의 결과를 반환합니다.

3.3.1. 사전 채우기 및 생성하기

다음이 주어졌을 때 사전 채우기를 수행하려면:

다음 단계를 수행합니다:

  1. Assert: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. expectedInputTypes를 model의 예상 입력이 주어진 예상 콘텐츠 타입 가져오기의 결과로 둡니다.

  3. messages를 input, expectedInputTypes 및 model의 현재 컨텍스트 사용량이 0보다 크면 true, 그렇지 않으면 false가 주어진 프롬프트를 검증하고 정규화하기의 결과로 둡니다.

    이 과정에서 예외 e가 발생하면:

    1. error가 null이 아니면, DOMException 오류 정보를 주어 error를 수행합니다. 여기서 name은 e의 name이고 details에는 적절한 세부 정보가 포함됩니다.

    2. false를 반환합니다.

  4. responseConstraint가 null이 아니고 omitResponseConstraintInput이 false이면 구현은 모델의 동작을 유도하기 위해 구현 정의 LanguageModelMessage를 messages에 삽입할 수 있습니다.

  5. requested를 messages 및 stopPrefilling이 주어진 언어 모델 컨텍스트 사용량 측정하기의 결과로 둡니다.

  6. requested가 null이면 false를 반환합니다.

  7. requested가 오류 정보이면:

    1. error가 null이 아니면 requested를 주어 error를 수행합니다.

    2. false를 반환합니다.

  8. Assert: requested는 숫자입니다.

  9. model의 현재 컨텍스트 사용량 + requested가 model의 컨텍스트 창 크기보다 크면:

    1. error가 null이 아니면:

      1. errorInfo를 할당량 초과 오류 정보로 둡니다. 이 정보의 requested는 model의 현재 컨텍스트 사용량 + requested이고 quota는 model의 컨텍스트 창 크기입니다.

      2. errorInfo를 주어 error를 수행합니다.

    2. false를 반환합니다.

  10. 구현 정의 방식으로 messages가 포함되도록 기반 모델의 내부 상태를 업데이트합니다.

    이 프로세스는 상태 업데이트 방식을 유도하기 위해 model의 초기 메시지, model의 샘플링 모드, model의 top K, model의 temperature, model의 예상 입력, model의 예상 출력 및 model의 도구를 사용해야 합니다.

    이 프로세스는 § 4 개인정보 보호 고려 사항 및 § 5 보안 고려 사항의 지침을 준수해야 합니다.

    이 프로세스 도중 stopPrefilling이 true를 반환하면 false를 반환합니다.

    사전 채우기 중 오류가 발생했다면:

    1. § 3.3.4 오류의 지침에 따라 오류를 오류 정보 errorInfo로 나타냅니다.

    2. error가 null이 아니면 errorInfo를 주어 error를 수행합니다.

    3. false를 반환합니다.

  11. model의 현재 컨텍스트 사용량을 model의 현재 컨텍스트 사용량 + requested로 설정합니다.

  12. true를 반환합니다.

다음이 주어졌을 때 생성하기를 수행하려면:

다음 단계를 수행합니다:

  1. Assert: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. 구현 정의 방식으로, 다음 지침에 따라 현재 내부 상태를 기반으로 언어 모델에서 응답을 생성하는 프로세스를 시작합니다.

    이 프로세스는 모델의 동작을 유도하기 위해 model의 초기 메시지, model의 샘플링 모드, model의 top K, model의 temperature, 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를 도구 호출의 인수 JSON 객체를 나타내며 model의 관련 realm에서 생성된 Object로 둡니다.

      4. toolCall을 model의 관련 realm에서 생성된 새 LanguageModelToolCall로 둡니다. 이 객체의 호출 ID는 callId로, 이름은 name으로, 인수는 arguments로 설정합니다.

      5. toolCallContent를 «[ "type" → "tool-call", "value" → toolCall ]»로 초기화된 LanguageModelMessageContent로 둡니다.

      6. chunkProduced가 null이 아니면 toolCallContent를 주어 chunkProduced를 수행합니다.

    4. 그렇지 않고 프로세스가 완료되었다면:

      1. 구현 정의 방식으로 생성된 응답(텍스트와 모든 도구 호출 모두)을 포함하도록 기반 모델의 내부 상태와 model의 현재 컨텍스트 사용량을 업데이트합니다.

      2. done이 null이 아니면 done을 수행합니다.

      3. 중단합니다.

    5. 그렇지 않고 stopProducing이 true를 반환하면 중단합니다.

    6. 그렇지 않고 프롬프트 처리 중 오류가 발생했다면:

      1. § 3.3.4 오류의 지침에 따라 오류를 오류 정보 errorInfo로 나타냅니다.

      2. error가 null이 아니면 errorInfo를 주어 error를 수행합니다.

      3. 중단합니다.

3.3.2. 사용량

다음이 주어졌을 때 언어 모델 컨텍스트 사용량을 측정하려면:

다음 단계를 수행합니다:

  1. Assert: 이 알고리즘은 병렬로 실행되고 있습니다.

  2. inputToModel을 messages가 주어진 사전 채우기를 수행하기 위해 기반 모델에 전송될 구현 정의 입력으로 둡니다.

    이는 일반적으로 모든 입력의 인코딩으로 구성되며, 프롬프트 엔지니어링이나 기타 구현 정의 래퍼가 함께 포함될 수 있습니다.

    이 프로세스 도중 stopMeasuring이 true를 반환하기 시작하면 null을 반환합니다.

    이 프로세스 도중 오류가 발생하면 § 3.3.4 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환합니다.

  3. inputToModel을 기반 모델에 제공할 때 이를 나타내는 데 필요한 컨텍스트 사용량을 반환합니다. 정확한 계산 절차는 다음 제약을 따르는 구현 정의입니다.

    반환되는 컨텍스트 사용량은 음수가 아니며 유한해야 합니다. 또한 inputToModel의 데이터 양에 대략 비례해야 합니다.

    이는 언어 모델 토큰화 체계에서 입력을 표현하는 데 필요한 토큰 수일 수도 있고, 데이터의 바이트 크기와 관련될 수도 있습니다.

    이 프로세스 도중 stopMeasuring이 true를 반환하기 시작하면 대신 null을 반환합니다.

    이 프로세스 도중 오류가 발생하면 대신 § 3.3.4 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환합니다.

3.3.3. 옵션

LanguageModelExpected의 목록 expectedContents가 주어졌을 때 예상 콘텐츠 타입을 가져오려면:
  1. expectedTypes를 LanguageModelMessageType의 빈 목록으로 둡니다.

  2. expectedContents의 각 expected에 대해 각각:

    1. expectedTypes에 expected["type"]이 포함되어 있지 않으면 expected["type"]을 expectedTypes에 추가합니다.

  3. expectedTypes에 "text"가 포함되어 있지 않으면, "text"를 expectedTypes에 추가합니다.

  4. expectedTypes를 반환합니다.

다음 프롬프트를 검증하고 정규화하려면, 주어진 LanguageModelPrompt input, 리스트로서 LanguageModelMessageType을 담는 expectedTypes, 불리언 hasAppendedInput에 대해 다음 단계를 수행합니다. 반환 값은 비어 있지 않은 리스트이며 LanguageModelMessage들을 "전체 표기" 형식으로 담습니다.
  1. 단언: expectedTypes에 포함되는 값으로 "text"가 있습니다.

  2. input이 문자열이면 다음을 반환합니다: « «[ "role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» ».

  3. 단언: input은 리스트이며 LanguageModelMessage를 담습니다.

  4. input이 빈 리스트이면 다음을 반환합니다: « «[ "role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» ».

  5. messages를 빈 리스트로 둡니다. 원소는 LanguageModelMessage입니다.

  6. 각각의 message를 input에서 순회합니다:

    1. message["content"]가 문자열이면 message를 «[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]»로 설정합니다.

    2. message["prefix"]가 true이면 다음을 수행합니다:

      1. message["role"]가 다음 값이 아니면: "assistant", 다음 예외를 던집니다: "SyntaxError" DOMException.

      2. message가 input의 마지막 항목이 아니면 다음 예외를 던집니다: "SyntaxError" DOMException.

    3. message["role"]가 다음 값이면: "system", 다음을 수행합니다:

      1. hasAppendedInput이 true이면 TypeError를 던집니다.

    4. message["content"]가 빈 리스트이면 다음을 수행합니다:

      1. emptyContent를 새로운 LanguageModelMessageContent로 두며, 다음 값으로 초기화합니다: «[ "type" → "text", "value" → "" ]».

      2. 추가할 emptyContent를 message["content"]에 넣습니다.

    5. 각각의 content를 message["content"]에서 순회합니다:

      1. content["type"]가 다음 값이고: "tool-call" 또한 message["role"]가 다음 값이 아니면: "assistant", 다음 예외를 던집니다: TypeError.

      2. content["type"]가 다음 값이고: "tool-response" 또한 message["role"]가 다음 값이 아니면: "user", 다음 예외를 던집니다: TypeError.

      3. message["role"]가 다음 값이고: "assistant" 또한 content["type"]가 다음 값이면: "image" 또는 "audio", 다음 예외를 던집니다: "NotSupportedError" DOMException.

      4. content["type"]가 다음 값이고: "text" 또한 content["value"]가 문자열이 아니면 TypeError를 던집니다.

      5. content["type"]가 다음 값이면: "image", 다음을 수행합니다:

        1. expectedTypes가 포함하지 않는 값이 "image"이면, 다음 예외를 던집니다: "NotSupportedError" DOMException.

        2. content["value"]가 다음 타입 중 어느 것도 아니면: ImageBitmapSource 또는 BufferSource, 다음 예외를 던집니다: TypeError.

      6. content["type"]가 다음 값이면: "audio", 다음을 수행합니다:

        1. expectedTypes가 포함하지 않는 값이 "audio"이면, 다음 예외를 던집니다: "NotSupportedError" DOMException.

        2. content["value"]가 다음 타입 중 어느 것도 아니면: AudioBuffer, BufferSource, 또는 Blob, 다음 예외를 던집니다: TypeError.

      7. content["type"]가 다음 값이면: "tool-call", 다음을 수행합니다:

        1. expectedTypes가 포함하지 않는 값이 "tool-call"이면, 다음 예외를 던집니다: "NotSupportedError" DOMException.

        2. content["value"]가 다음 타입이 아니면: LanguageModelToolCall, 다음 예외를 던집니다: TypeError.

        3. arguments를 content["value"]의 arguments로 둡니다.

        4. arguments가 null이 아니면 다음을 수행합니다:

          1. ? IsArray(arguments)가 true이거나, arguments가 플랫폼 객체이거나, arguments를 JSON 객체로 직렬화할 수 없다면( 예를 들어 순환 참조 또는 JSON으로 직렬화할 수 없는 함수나 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으로 직렬화할 수 없다면( 예를 들어 순환 참조 또는 함수나 BigInts 등 JSON으로 직렬화할 수 없는 값 때문에), 다음 예외를 던집니다: "DataError" DOMException.

    6. contentWithContiguousTextCollapsed를 빈 리스트로 둡니다. 원소는 LanguageModelMessageContent입니다.

    7. lastTextContent를 null로 둡니다.

    8. 각각의 content를 message["content"]에서 순회합니다:

      1. content["type"]가 다음 값이면: "text":

        1. lastTextContent가 null이면:

          1. 추가할 content를 contentWithContiguousTextCollapsed에 넣습니다.

          2. lastTextContent를 content로 설정합니다.

        2. 그렇지 않으면 lastTextContent["value"]를 다음 두 값을 이어 붙인 결과로 설정합니다: lastTextContent["value"] 및 content["value"].

          공백이나 다른 문자는 추가하지 않습니다. 따라서 « «[ "type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» »는 다음과 같이 정규화됩니다: « «[ "type" → "text", "foobar" ]».

      2. 그렇지 않으면:

        1. 추가할 content를 contentWithContiguousTextCollapsed에 넣습니다.

        2. lastTextContent를 null로 설정합니다.

      3. message["content"]를 contentWithContiguousTextCollapsed로 설정합니다.

    9. 추가할 message를 messages에 넣습니다.

    10. hasAppendedInput을 true로 설정합니다.

  7. messages가 비어 있으면, 다음 예외를 던집니다: "SyntaxError" DOMException.

  8. messages를 반환합니다.

3.3.4. 오류

프롬프트 처리가 실패하면 다음과 같은 가능한 이유가 웹 개발자에게 노출될 수 있습니다. 이 표에는 가능한 DOMException 이름과 구현에서 이를 사용해야 하는 경우를 나열합니다:

DOMException 이름 시나리오
"NotAllowedError"

사용자의 선택 또는 사용자 에이전트 정책으로 인해 프롬프트 처리가 비활성화되어 있습니다.

"NotReadableError"

예를 들어 유해하거나, 부정확하거나, 무의미한 것으로 감지되어 모델 출력이 사용자 에이전트에 의해 필터링되었습니다.

"NotSupportedError"

처리할 입력이 사용자 에이전트가 지원하지 않는 언어이거나, create() 호출에 올바르게 제공되지 않았습니다.

모델 출력이 사용자 에이전트가 지원하지 않는 언어가 되었습니다(예를 들어, 사용자 에이전트가 해당 출력 언어에 대해 충분한 품질 관리 테스트를 수행하지 않았기 때문입니다).

"UnknownError"

사용자 에이전트가 모델에 프롬프트를 제공하면서 동시에 § 4 개인정보 보호 고려 사항 또는 § 5 보안 고려 사항에 제시된 요구 사항을 충족할 수 없다고 판단하는 경우를 포함한 그 밖의 모든 시나리오입니다. 또는 사용자 에이전트가 실패 이유를 공개하지 않으려는 경우입니다.

이 표는 prompt API에서 노출될 수 있는 예외의 전체 목록을 제공하지 않습니다. 일부 구현 정의 단계에서 발생할 수 있는 예외만 포함합니다.

LanguageModel model과 LanguageModelCloneOptions options이 주어졌을 때 언어 모델을 복제하려면:
  1. global을 model의 관련 전역 객체로 둡니다.

  2. Assert: global은 Window 객체입니다.

  3. global의 연결된 Document가 완전히 활성 상태가 아니면 "InvalidStateError" DOMException으로 거부된 promise를 반환합니다.

  4. signals를 « model의 파기 중단 컨트롤러의 signal »로 둡니다.

  5. options["signal"]이 존재하면 이를 signals에 추가합니다.

  6. compositeSignal을 signals에 AbortSignal 및 model의 관련 realm을 사용하여 종속 중단 신호 생성하기를 수행한 결과로 둡니다.

  7. compositeSignal이 중단되었다면 compositeSignal의 중단 이유로 거부된 promise를 반환합니다.

  8. signal을 options["signal"]이 존재하면 해당 값으로, 그렇지 않으면 null로 둡니다.

  9. signal이 null이 아니고 중단되었다면 signal의 중단 이유로 거부된 promise를 반환합니다.

  10. promise를 model의 관련 realm에서 생성된 새 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에는 생성 시 설정되는 Object 또는 null인 인수가 있습니다.

new LanguageModelToolCall(init) 생성자의 단계는 다음과 같습니다:
  1. this의 호출 ID를 init["callId"]로 설정합니다.

  2. this의 이름을 init["name"]으로 설정합니다.

  3. this의 인수를 init["arguments"]가 존재하면 해당 값으로, 그렇지 않으면 null로 설정합니다.

callId getter의 단계는 this의 호출 ID를 반환하는 것입니다.

name getter의 단계는 this의 이름을 반환하는 것입니다.

arguments getter의 단계는 this의 인수를 반환하는 것입니다.

3.5. LanguageModelToolSuccess 클래스

모든 LanguageModelToolSuccess에는 생성 시 설정되는 문자열인 호출 ID가 있습니다.

모든 LanguageModelToolSuccess에는 생성 시 설정되는 문자열인 이름이 있습니다.

모든 LanguageModelToolSuccess에는 생성 시 설정되는 FrozenArray<LanguageModelToolResultContent>인 결과가 있습니다.

new LanguageModelToolSuccess(init) 생성자의 단계는 다음과 같습니다:
  1. this의 호출 ID를 init["callId"]로 설정합니다.

  2. this의 이름을 init["name"]으로 설정합니다.

  3. this의 결과를 init["result"]에서 고정 배열을 생성한 결과로 설정합니다.

callId getter의 단계는 this의 호출 ID를 반환하는 것입니다.

name getter의 단계는 this의 이름을 반환하는 것입니다.

result getter의 단계는 this의 결과를 반환하는 것입니다.

3.6. LanguageModelToolError 클래스

모든 LanguageModelToolError에는 생성 시 설정되는 문자열인 호출 ID가 있습니다.

모든 LanguageModelToolError에는 생성 시 설정되는 문자열인 이름이 있습니다.

모든 LanguageModelToolError에는 생성 시 설정되는 문자열인 오류 메시지가 있습니다.

new LanguageModelToolError(init) 생성자의 단계는 다음과 같습니다:
  1. this의 호출 ID를 init["callId"]로 설정합니다.

  2. this의 이름을 init["name"]으로 설정합니다.

  3. this의 오류 메시지를 init["errorMessage"]로 설정합니다.

callId getter의 단계는 this의 호출 ID를 반환하는 것입니다.

name getter의 단계는 this의 이름을 반환하는 것입니다.

errorMessage getter의 단계는 this의 오류 메시지를 반환하는 것입니다.

3.7. 권한 정책 통합

prompt API에 대한 접근은 정책 제어 기능 "language-model"의 적용을 받으며, 이 기능의 기본 허용 목록은 'self'입니다.

4. 개인정보 보호 고려 사항

prompt API의 개인정보 보호 고려 사항에 대한 논의는 Writing Assistance APIs § 6 개인정보 보호 고려 사항을 참조하십시오. 이 텍스트는 § 2 의존성에서 언급한 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.

5. 보안 고려 사항

prompt API의 보안 고려 사항에 대한 논의는 Writing Assistance APIs § 7 보안 고려 사항을 참조하십시오. 이 텍스트는 § 2 의존성에서 언급한 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고 문헌

규범적 참고 문헌

[DOM]
Anne van Kesteren. DOM 표준. 현행 표준. URL: https://dom.spec.whatwg.org/
[ECMA-402]
ECMAScript 국제화 API 명세. URL: https://tc39.es/ecma402/
[ECMASCRIPT]
ECMAScript 언어 명세. URL: https://tc39.es/ecma262/multipage/
[FileAPI]
Marijn Kruisselbrink. File API. URL: https://w3c.github.io/FileAPI/
[HTML]
Anne van Kesteren; et al. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 표준. 현행 표준. URL: https://infra.spec.whatwg.org/
[PERMISSIONS-POLICY-1]
Ian Clelland; Ari Chivukula. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[RDF12-CONCEPTS]
Andy Seaborne; et al. RDF 1.2 개념 및 추상 데이터 모델. URL: https://w3c.github.io/rdf-concepts/spec/
[STREAMS]
Adam Rice; et al. Streams 표준. 현행 표준. URL: https://streams.spec.whatwg.org/
[WEBAUDIO-1.0]
Paul Adenot; Hongchan Choi. Web Audio API. URL: https://webaudio.github.io/web-audio-api/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 표준. 현행 표준. URL: https://webidl.spec.whatwg.org/
[WRITING-ASSISTANCE-APIS]
Writing Assistance APIs. 커뮤니티 그룹 보고서 초안. URL: https://webmachinelearning.github.io/writing-assistance-apis/

비규범적 참고 문헌

[BCP47]
Addison Phillips; Mark Davis. 언어 식별용 태그. 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;