1. 소개
Prompt API는 웹 페이지가 브라우저가 제공하는 언어 모델에 직접 프롬프트를 보낼 수 있는 기능을 제공합니다. 이는 기반 모델의 구체적인 세부 사항(예: 템플릿 처리 또는 토큰화)을 추상화하는 통일된 JavaScript API를 제공합니다. 내장 언어 모델을 활용함으로써 민감한 데이터의 로컬 처리, 오프라인 사용, 모델 공유, 그리고 클라우드 기반 또는 자체 모델 가져오기 방식에 비해 낮은 비용과 같은 이점을 제공합니다.
2. 의존성
이 명세는 Infra Standard에 의존합니다. [INFRA]
웹 플랫폼의 나머지 부분과 마찬가지로, 이러한 API에서 인간 언어는 "ja", "en-US",
"sr-Cyrl" 또는
"de-CH-1901-x-phonebk-extended"와 같은 BCP 47 언어 태그로 식별됩니다. 유효성 검사,
정규화, 언어 태그 매칭에 사용되는 구체적인 알고리즘은 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 API를 구현하거나 노출할 필요는 없습니다. [WRITING-ASSISTANCE-APIS]
3. API
[Exposed =Window ,SecureContext ]interface :LanguageModel EventTarget {static Promise <LanguageModel >create (optional LanguageModelCreateOptions = {});options static Promise <Availability >availability (optional LanguageModelCreateCoreOptions = {}); // **EXPERIMENTAL**: Only available in extension and experimental contexts.options static Promise <LanguageModelParams ?>(); // These will throw "NotSupportedError" DOMExceptions if role = "system"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 ; // **DEPRECATED**: This method is only available in extension contexts.Promise <double >measureInputUsage (LanguageModelPrompt ,input optional LanguageModelPromptOptions = {} ); // **DEPRECATED**: This attribute is only available in extension contexts.options readonly attribute double inputUsage ; // **DEPRECATED**: This attribute is only available in extension contexts.readonly attribute unrestricted double inputQuota ; // **DEPRECATED**: This attribute is only available in extension contexts.attribute EventHandler onquotaoverflow ; // **EXPERIMENTAL**: Only available in extension and experimental contexts.readonly attribute unsigned long topK ; // **EXPERIMENTAL**: Only available in extension and experimental contexts.readonly attribute float temperature ;Promise <LanguageModel >clone (optional LanguageModelCloneOptions = {}); };options LanguageModel includes DestroyableModel ; // **EXPERIMENTAL**: Only available in extension and experimental contexts. [Exposed =Window ,SecureContext ]interface {LanguageModelParams readonly attribute unsigned long ;defaultTopK readonly attribute unsigned long ;maxTopK readonly attribute float ;defaultTemperature readonly attribute float ; };maxTemperature callback =LanguageModelToolFunction Promise <DOMString > (any ...); // A description of a tool call that a language model can invoke.arguments dictionary {LanguageModelTool required DOMString ;name required DOMString ; // JSON schema for the input parameters.description required object ; // The function to be invoked by user agent on behalf of language model.inputSchema required LanguageModelToolFunction ; };execute dictionary { // Note: these two have custom out-of-range handling behavior, not in the IDL layer. // They are unrestricted double so as to allow +Infinity without failing. // **EXPERIMENTAL**: Only available in extension and experimental contexts.LanguageModelCreateCoreOptions unrestricted double ; // **EXPERIMENTAL**: Only available in extension and experimental contexts.topK unrestricted double ;temperature 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 >; }; // The argument to the prompt() method and others like itlanguages typedef (sequence <LanguageModelMessage > // Shorthand for `[{ role: "user", content: [{ type: "text", value: providedValue }] }]`or DOMString );LanguageModelPrompt dictionary {LanguageModelMessage required LanguageModelMessageRole ; // The DOMString branch is shorthand for `[{ type: "text", value: providedValue }]`role required (DOMString or sequence <LanguageModelMessageContent >);content boolean =prefix false ; };dictionary {LanguageModelMessageContent required LanguageModelMessageType ;type required LanguageModelMessageValue ; };value 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) 메서드 단계는 다음과 같습니다:
-
options, "
language-model", 언어 모델 옵션 유효성 검사 및 정규화, 언어 모델 옵션 가용성 계산, 언어 모델 다운로드, 언어 모델 초기화, 언어 모델 객체 생성, 그리고 false가 주어졌을 때 AI 모델 객체를 생성한 결과를 반환합니다.
LanguageModelCreateCoreOptions
options가 주어졌을 때 언어 모델 옵션을 유효성 검사하고 정규화하려면,
다음 단계를 수행합니다. 이 단계는 언어 태그를 정규화하고 중복 제거하기 위해 options를 제자리에서 변경하며,
유효하지 않은 항목이 있으면 예외를 throw합니다.
-
options["
expectedInputs"]가 존재하면, options["expectedInputs"]의 각 expected에 대해 다음을 수행합니다:-
expected["
languages"]가 존재하면, expected와 "languages"가 주어졌을 때 언어 태그를 유효성 검사하고 정규화합니다.
-
-
options["
expectedOutputs"]가 존재하면, options["expectedOutputs"]의 각 expected에 대해 다음을 수행합니다:-
expected["
languages"]가 존재하면, expected와 "languages"가 주어졌을 때 언어 태그를 유효성 검사하고 정규화합니다.
-
-
options["
initialPrompts"]가 존재하면, 다음을 수행합니다:-
존재한다면 options["
expectedInputs"]를, 그렇지 않으면 빈 list를 expectedInputs로 둡니다. -
expectedInputs가 주어졌을 때 예상 콘텐츠 타입 가져오기의 결과를 expectedInputTypes로 둡니다.
-
options["
initialPrompts"], expectedInputTypes, 그리고 false가 주어졌을 때 프롬프트를 유효성 검사하고 정규화하기를 수행합니다.
-
LanguageModelCreateCoreOptions
options가 주어졌을 때 언어
모델을 다운로드하려면:
LanguageModelCreateOptions
options가 주어졌을 때 언어
모델을 초기화하려면:
-
options가 주어졌을 때 언어 모델 옵션 가용성 계산의 결과를 availability로 둡니다.
-
availability가 null이거나
unavailable이면, DOMException 오류 정보를 반환합니다. 그 name은 "NotSupportedError"이고, 그 details에는 적절한 세부 정보가 포함됩니다.
-
-
사용자 에이전트의 프롬프트 기능을 뒷받침하는 AI 모델에 필요한 초기화 작업을 수행합니다.
여기에는 options를 지원하는 데 필요한 적절한 모델 및 파인튜닝을 메모리에 로드하는 것이 포함될 수 있습니다.
-
options["
initialPrompts"]가 존재하면, 다음을 수행합니다:-
존재한다면 options["
expectedInputs"]를, 그렇지 않으면 빈 list를 expectedInputs로 둡니다. -
expectedInputs가 주어졌을 때 예상 콘텐츠 타입 가져오기의 결과를 expectedInputTypes로 둡니다.
-
options["
initialPrompts"], expectedInputTypes, 그리고 false가 주어졌을 때 프롬프트를 유효성 검사하고 정규화하기의 결과를 initialMessages로 둡니다. -
initialMessages를 모델의 컨텍스트 윈도우에 로드합니다.
-
-
options["
tools"]가 존재하면, options["tools"]를 모델의 컨텍스트 윈도우에 로드합니다.
-
-
options를 로드하는 과정에서 모델의 컨텍스트 윈도우를 모두 사용하게 되어 초기화가 실패한 경우, 다음을 수행합니다:
-
options를 인코딩하는 데 필요한 컨텍스트 윈도우의 양을 requested로 둡니다. options를 입력으로 인코딩하는 방식은 구현 정의입니다.
-
사용자 에이전트가 지원하는 최대 컨텍스트 윈도우 크기를 maximum으로 둡니다.
-
Assert: requested는 maximum보다 큽니다. (이것이 이 오류 분기에 도달한 방식입니다.)
-
quota exceeded error information를 반환합니다. 그 requested는 requested이고 quota는 maximum입니다.
-
-
그 밖의 이유로 초기화가 실패한 경우, DOMException 오류 정보를 반환합니다. 그 name은 "
OperationError"이고, 그 details에는 적절한 세부 정보가 포함됩니다. -
null을 반환합니다.
LanguageModelCreateOptions
options가 주어졌을 때 언어
모델 객체를 생성하려면:
-
Assert: 이 단계는 realm의 surrounding agent의 event loop에서 실행되고 있습니다.
-
이 모델에 대해 사용자 에이전트가 사용할 수 있는 컨텍스트 윈도우의 양을 contextWindowSize로 둡니다. (이 값은 구현 정의이며, 예를 들어 사용자의 메모리나 JavaScript 문자열의 제한 외에 특정 제한이 없는 경우 +∞일 수 있습니다.)
-
LanguageModelMessage들의 빈 list를 initialMessages로 둡니다. -
initialMessagesUsage를 0으로 둡니다.
-
options["
initialPrompts"]가 존재하면, 다음을 수행합니다:-
존재한다면 options["
expectedInputs"]를, 그렇지 않으면 빈 list를 expectedInputs로 둡니다. -
expectedInputs가 주어졌을 때 예상 콘텐츠 타입 가져오기의 결과를 expectedInputTypes로 둡니다.
-
options["
initialPrompts"], expectedInputTypes, 그리고 false가 주어졌을 때 프롬프트를 유효성 검사하고 정규화하기의 결과로 initialMessages를 설정합니다. -
initialMessages 및 options["
signal"]가 주어졌을 때 언어 모델 컨텍스트 사용량 측정의 결과로 initialMessagesUsage를 설정합니다.
-
-
realm에서 생성된 새
LanguageModel객체를 다음과 함께 반환합니다- 초기 메시지
-
initialMessages
- top K
- temperature
-
존재한다면 options["
temperature"]를, 그렇지 않으면 구현 정의 값을 사용합니다 - 예상 입력
-
존재한다면 options["
expectedInputs"]를, 그렇지 않으면 빈 list를 사용합니다 - 예상 출력
-
존재한다면 options["
expectedOutputs"]를, 그렇지 않으면 빈 list를 사용합니다 - 도구
- 컨텍스트 윈도우 크기
-
contextWindowSize
- 현재 컨텍스트 사용량
-
initialMessagesUsage
3.2. 가용성
availability(options) 메서드 단계는
다음과 같습니다:
-
options, "
language-model", 언어 모델 옵션 유효성 검사 및 정규화, 그리고 언어 모델 옵션 가용성 계산이 주어졌을 때 AI 모델 가용성을 계산한 결과를 반환합니다.
LanguageModelCreateCoreOptions
options가 주어졌을 때 언어 모델 옵션 가용성을 계산하려면, 다음 단계를 수행합니다.
이 단계는 Availability
값 또는 null을 반환하며, 언어 태그를 가장 적합한 매치로 업데이트하기 위해 options를 제자리에서
변경합니다.
-
언어 모델 비옵션 가용성을 availability로 둡니다.
-
availability가 null이면 null을 반환합니다.
-
availability를 포함하는 list를 availabilities로 둡니다.
-
그 언어의 텍스트로 언어 모델에 프롬프트를 보내는 목적이 주어졌을 때 언어 가용성 파티션 가져오기의 결과를 inputPartition으로 둡니다.
-
그 언어로 언어 모델 출력을 생성하는 목적이 주어졌을 때 언어 가용성 파티션 가져오기의 결과를 outputPartition으로 둡니다.
-
options["
expectedInputs"]가 존재하면, options["expectedInputs"]의 각 expected에 대해 다음을 수행합니다:-
expected["
type"]와 true가 주어졌을 때 언어 모델 콘텐츠 타입 가용성을 inputTypeAvailability로 둡니다. -
inputTypeAvailability를 availabilities에 Append합니다.
-
options["
expectedOutputs"]가 존재하면, options["expectedOutputs"]의 각 expected에 대해 다음을 수행합니다:-
expected["
type"]와 false가 주어졌을 때 언어 모델 콘텐츠 타입 가용성을 outputTypeAvailability로 둡니다. -
outputTypeAvailability를 availabilities에 Append합니다.
-
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들의
list입니다.
모든 LanguageModel은
생성 중에 설정되는 unsigned long인 top K를 가집니다.
모든 LanguageModel은
생성 중에 설정되는 float인 temperature를 가집니다.
모든 LanguageModel은
생성 중에 설정되는 예상 입력을 가집니다. 이는 LanguageModelExpected들의
list입니다.
모든 LanguageModel은
생성 중에 설정되는 예상 출력을 가집니다. 이는 LanguageModelExpected들의
list입니다.
모든 LanguageModel은
생성 중에 설정되는 도구를 가집니다. 이는 LanguageModelTool들의
list입니다.
모든 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를 반환하는 것입니다.
다음은 모든 LanguageModel
객체가 event handler IDL attributes로 지원해야 하는
이벤트 핸들러(및 그에 대응하는 이벤트 핸들러 이벤트 타입)입니다:
| 이벤트 핸들러 | 이벤트 핸들러 이벤트 타입 |
|---|---|
oncontextoverflow
| contextoverflow
|
onquotaoverflow
| quotaoverflow
|
prompt(input, options) 메서드
단계는 다음과 같습니다:
-
options["
responseConstraint"]가 존재하면 그것을, 그렇지 않으면 null을 responseConstraint로 둡니다. -
options["
omitResponseConstraintInput"]를 omitResponseConstraintInput로 둡니다. -
chunkProduced, done, error, 그리고 stopProducing을 인수로 받아 다음 단계를 수행하는 알고리즘 단계를 operation으로 둡니다:
-
this, input, omitResponseConstraintInput, responseConstraint, error, 그리고 stopProducing이 주어졌을 때 prefilling의 결과를 prefillSuccess로 둡니다.
-
prefillSuccess가 true이면, this, responseConstraint, chunkProduced, done, error, 그리고 stopProducing이 주어졌을 때 generate를 수행합니다.
-
-
this, options, 그리고 operation이 주어졌을 때 집계된 AI 모델 결과 가져오기의 결과를 반환합니다.
promptStreaming(input, options)
메서드 단계는 다음과 같습니다:
-
options["
responseConstraint"]가 존재하면 그것을, 그렇지 않으면 null을 responseConstraint로 둡니다. -
options["
omitResponseConstraintInput"]를 omitResponseConstraintInput로 둡니다. -
chunkProduced, done, error, 그리고 stopProducing을 인수로 받아 다음 단계를 수행하는 알고리즘 단계를 operation으로 둡니다:
-
this, input, omitResponseConstraintInput, responseConstraint, error, 그리고 stopProducing이 주어졌을 때 prefilling의 결과를 prefillSuccess로 둡니다.
-
prefillSuccess가 true이면, this, responseConstraint, chunkProduced, done, error, 그리고 stopProducing이 주어졌을 때 generate를 수행합니다.
-
-
this, options, 그리고 operation이 주어졌을 때 스트리밍 AI 모델 결과 가져오기의 결과를 반환합니다.
append(input, options) 메서드
단계는 다음과 같습니다:
-
chunkProduced, done, error, 그리고 stopProducing을 인수로 받아 다음 단계를 수행하는 알고리즘 단계를 operation으로 둡니다:
prefilling 알고리즘은 청크를 생성하지 않기 때문에 chunkProduced는 절대 호출되지 않습니다.
-
this, input, false, null, error, 그리고 stopProducing이 주어졌을 때 prefilling의 결과를 prefillSuccess로 둡니다.
-
prefillSuccess가 true이고 done이 null이 아니면, done을 수행합니다.
-
-
this, options, 그리고 operation이 주어졌을 때 집계된 AI 모델 결과 가져오기의 결과를 반환합니다.
measureContextUsage(input, options)
메서드 단계는 다음과 같습니다:
-
options["
omitResponseConstraintInput"]가 true이고 options["responseConstraint"]가 존재하지 않으면, "TypeError"DOMException을 throw합니다. -
this의 예상 입력이 주어졌을 때 예상 콘텐츠 타입 가져오기의 결과를 expectedInputTypes로 둡니다.
-
input, expectedInputTypes, 그리고 false가 주어졌을 때 프롬프트를 유효성 검사하고 정규화하기의 결과를 messages로 둡니다.
-
options["
responseConstraint"]가 존재하고 null이 아니며, options["omitResponseConstraintInput"]가 false이면, 구현은 모델의 동작을 안내하기 위해 구현 정의LanguageModelMessage를 messages에 삽입할 수 있습니다. -
stopMeasuring 인수를 받아, messages와 stopMeasuring이 주어졌을 때 언어 모델 컨텍스트 사용량 측정의 결과를 반환하는 알고리즘 단계를 measureUsage로 둡니다.
-
this, options, 그리고 measureUsage가 주어졌을 때 AI 모델 입력 사용량 측정의 결과를 반환합니다.
measureInputUsage(input, options)
메서드 단계는 다음과 같습니다:
-
input 및 options가 주어졌을 때
measureContextUsage()메서드 단계를 실행한 결과를 반환합니다.
3.3.1. 사전 채우기 및 생성
-
LanguageModelmodel, -
LanguageModelPromptinput, -
boolean omitResponseConstraintInput,
-
object-or-null responseConstraint,
-
error information을 받아 아무것도 반환하지 않는 algorithm-or-null error, 그리고
-
인수를 받지 않고 boolean을 반환하는 algorithm-or-null stopPrefilling,
다음 단계를 수행합니다:
-
model의 현재 컨텍스트 사용량이 0보다 크면 input, expectedInputTypes, true가, 그렇지 않으면 false가 주어졌을 때 프롬프트를 유효성 검사하고 정규화하기의 결과를 messages로 둡니다.
이것이 예외 e를 throw하면, 다음을 수행합니다:
-
error가 null이 아니면, e의 name을 name으로 하고 적절한 세부 정보를 포함하는 details를 가지는 DOMException 오류 정보가 주어졌을 때 error를 수행합니다.
-
false를 반환합니다.
-
-
responseConstraint가 null이 아니고 omitResponseConstraintInput이 false이면, 구현은 모델의 동작을 안내하기 위해 구현 정의
LanguageModelMessage를 messages에 삽입할 수 있습니다. -
messages와 stopPrefilling이 주어졌을 때 언어 모델 컨텍스트 사용량 측정의 결과를 requested로 둡니다.
-
requested가 null이면 false를 반환합니다.
-
requested가 error information이면, 다음을 수행합니다:
-
error가 null이 아니면, requested가 주어졌을 때 error를 수행합니다.
-
false를 반환합니다.
-
-
Assert: requested는 숫자입니다.
-
model의 현재 컨텍스트 사용량 + requested가 model의 컨텍스트 윈도우 크기보다 크면, 다음을 수행합니다:
-
error가 null이 아니면, 다음을 수행합니다:
-
model의 현재 컨텍스트 사용량 + requested를 requested로 하고, model의 컨텍스트 윈도우 크기를 quota로 하는 quota exceeded error information을 errorInfo로 둡니다.
-
errorInfo가 주어졌을 때 error를 수행합니다.
-
-
false를 반환합니다.
-
-
model의 예상 입력이 주어졌을 때 예상 콘텐츠 타입 가져오기의 결과를 expectedInputTypes로 둡니다.
-
구현 정의 방식으로, messages를 포함하도록 기반 모델의 내부 상태를 갱신합니다.
이 프로세스는 상태가 어떻게 갱신되는지를 안내하기 위해 model의 초기 메시지, model의 top K, model의 temperature, model의 예상 입력, model의 예상 출력, 그리고 model의 도구를 사용해야 합니다.
이 프로세스는 § 4 프라이버시 고려사항 및 § 5 보안 고려사항에서 제공된 지침을 준수해야 합니다.
이 프로세스 중에 stopPrefilling이 true를 반환하면 false를 반환합니다.
사전 채우기 중에 오류가 발생한 경우:
-
§ 3.3.4 오류의 지침에 따라 오류를 error information errorInfo로 나타냅니다.
-
error가 null이 아니면, errorInfo가 주어졌을 때 error를 수행합니다.
-
false를 반환합니다.
-
-
model의 현재 컨텍스트 사용량을 model의 현재 컨텍스트 사용량 + requested로 설정합니다.
-
true를 반환합니다.
-
LanguageModelmodel, -
object-or-null responseConstraint,
-
string을 받아 아무것도 반환하지 않는 algorithm-or-null chunkProduced,
-
인수를 받지 않고 아무것도 반환하지 않는 algorithm-or-null done,
-
error information을 받아 아무것도 반환하지 않는 algorithm-or-null error, 그리고
-
인수를 받지 않고 boolean을 반환하는 algorithm-or-null stopProducing,
다음 단계를 수행합니다:
-
다음 지침의 적용을 받으며 구현 정의 방식으로, 현재 내부 상태를 기반으로 언어 모델에서 응답을 생성하는 프로세스를 시작합니다.
이 프로세스는 모델의 동작을 안내하기 위해 model의 초기 메시지, model의 top K, model의 temperature, model의 예상 입력, model의 예상 출력, model의 도구, 그리고 responseConstraint를 사용해야 합니다.
프롬프트 프로세스는 § 4 프라이버시 고려사항 및 § 5 보안 고려사항에서 제공된 지침을 준수해야 합니다.
model의 도구가 비어 있지 않으면, 모델은 제공된 도구의 execute 함수를 호출하여 이를 사용할 수 있습니다.
-
true인 동안:
-
다음 응답 데이터 청크가 생성되거나, 프로세스가 완료되거나, stopProducing 호출 결과가 true가 될 때까지 기다립니다.
-
그러한 청크가 성공적으로 생성되면:
-
이를 string chunk로 나타냅니다.
-
chunkProduced가 null이 아니면, chunk가 주어졌을 때 chunkProduced를 수행합니다.
-
-
그렇지 않고 프로세스가 완료되었으면:
-
done이 null이 아니면 done을 수행합니다.
-
Break합니다.
-
-
그렇지 않고 stopProducing이 true를 반환하면, break합니다.
-
그렇지 않고 프롬프트 중에 오류가 발생했으면:
-
§ 3.3.4 오류의 지침에 따라 오류를 error information errorInfo로 나타냅니다.
-
error가 null이 아니면, errorInfo가 주어졌을 때 error를 수행합니다.
-
Break합니다.
-
-
3.3.2. 사용량
-
LanguageModelMessagemessages들의 list, -
인수를 받지 않고 boolean을 반환하는 알고리즘 stopMeasuring,
다음 단계를 수행합니다:
-
messages가 주어졌을 때 prefill하기 위해 기반 모델로 전송될 구현 정의 입력을 inputToModel로 둡니다.
이는 일반적으로 모든 입력의 인코딩으로 구성되며, 프롬프트 엔지니어링이나 기타 구현 정의 래퍼가 포함될 수 있습니다.
이 프로세스 중에 stopMeasuring이 true를 반환하기 시작하면 null을 반환합니다.
이 프로세스 중에 오류가 발생하면, § 3.3.4 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환합니다.
-
inputToModel이 기반 모델에 주어졌을 때 이를 나타내는 데 필요한 컨텍스트 사용량을 반환합니다. 정확한 계산 절차는 구현 정의이며, 다음 제약 조건의 적용을 받습니다.
반환되는 컨텍스트 사용량은 음수가 아니어야 하며 유한해야 합니다. 이는 inputToModel 안의 데이터 양에 대략 비례해야 합니다.
이는 언어 모델 토큰화 방식에서 입력을 표현하는 데 필요한 토큰 수일 수도 있고, 바이트 단위의 데이터 크기와 관련될 수도 있습니다.
이 프로세스 중에 stopMeasuring이 true를 반환하기 시작하면, 대신 null을 반환합니다.
이 프로세스 중에 오류가 발생하면, 대신 § 3.3.4 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환합니다.
3.3.3. 옵션
LanguageModelExpected들의
list
expectedContents가 주어졌을 때 예상
콘텐츠 타입을 가져오려면:
LanguageModelPrompt
input, LanguageModelMessageType들의
list
expectedTypes, 그리고 boolean hasAppendedInput이
주어졌을 때 프롬프트를 유효성 검사하고 정규화하려면, 다음 단계를 수행합니다. 반환
값은 "longhand" 형식의 LanguageModelMessage들의
비어 있지 않은 list가
됩니다.
-
input이 string이면, « «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → input ]» », "prefix" → false ]» »를 반환합니다. -
Assert: input은
LanguageModelMessage들의 list입니다. -
input이 빈 list이면, « «[ "
role" → "user", "content" → « «[ "type" → "text", "value" → "" ]» », "prefix" → false ]» »를 반환합니다. -
LanguageModelMessage들의 빈 list를 messages로 둡니다. -
input의 각 message에 대해 다음을 수행합니다:
-
message["
content"]가 string이면, message를 «[ "role" → message["role"], "content" → « «[ "type" → "text", "value" → message["content"] ]» », "prefix" → message["prefix"] ]»로 설정합니다. -
message["
prefix"]가 true이면, 다음을 수행합니다:-
message["
role"]가 "assistant"가 아니면, "SyntaxError"DOMException을 throw합니다. -
message가 messages의 마지막 항목이 아니면, "
SyntaxError"DOMException을 throw합니다.
-
-
message["
role"]가 "system"이면, 다음을 수행합니다:-
hasAppendedInput이 true이면, "
TypeError"DOMException을 throw합니다.
-
-
message["
content"]의 각 content에 대해 다음을 수행합니다:-
message["
role"]가 "assistant"이고 content["type"]가 "text"가 아니면, "NotSupportedError"DOMException을 throw합니다. -
content["
type"]가 "text"이고 content["value"]가 string이 아니면, "TypeError"DOMException을 throw합니다. -
content["
type"]가 "image"이면, 다음을 수행합니다:-
expectedTypes가 "
image"를 포함하지 않으면, "NotSupportedError"DOMException을 throw합니다. -
content["
value"]가ImageBitmapSource또는BufferSource가 아니면, "TypeError"DOMException을 throw합니다.
-
-
content["
type"]가 "audio"이면, 다음을 수행합니다:-
expectedTypes가 "
audio"를 포함하지 않으면, "NotSupportedError"DOMException을 throw합니다. -
content["
value"]가AudioBuffer,BufferSource, 또는Blob이 아니면, "TypeError"DOMException을 throw합니다.
-
-
-
LanguageModelMessageContent들의 빈 list를 contentWithContiguousTextCollapsed로 둡니다. -
lastTextContent를 null로 둡니다.
-
message["
content"]의 각 content에 대해 다음을 수행합니다:-
-
lastTextContent가 null이면:
-
content를 contentWithContiguousTextCollapsed에 Append합니다.
-
lastTextContent를 content로 설정합니다.
-
-
그렇지 않으면, lastTextContent["
value"]를 lastTextContent["value"]와 content["value"]의 연결로 설정합니다.공백이나 다른 문자는 추가되지 않습니다. 따라서 « «[ "
type" → "text", "foo" ]», «[ "type" → "text", "bar" ]» »는 « «[ "type" → "text", "foobar" ]»로 정규화됩니다.
-
-
그렇지 않으면:
-
content를 contentWithContiguousTextCollapsed에 Append합니다.
-
lastTextContent를 null로 설정합니다.
-
-
message["
content"]를 contentWithContiguousTextCollapsed로 설정합니다.
-
-
message를 messages에 Append합니다.
-
hasAppendedInput을 true로 설정합니다.
-
-
messages가 비어 있으면, "
SyntaxError"DOMException을 throw합니다. -
messages를 반환합니다.
3.3.4. 오류
프롬프트가 실패하면, 다음 가능한 이유들이 웹 개발자에게 표면화될 수 있습니다. 이 표는 가능한 DOMException
names와 구현이 이를 사용해야 하는 경우를 나열합니다:
DOMException
name
| 시나리오 |
|---|---|
"NotAllowedError"
|
사용자 선택 또는 사용자 에이전트 정책에 의해 프롬프트가 비활성화되었습니다. |
"NotReadableError"
|
모델 출력이 사용자 에이전트에 의해 필터링되었습니다. 예를 들어 유해하거나, 부정확하거나, 무의미한 것으로 감지되었기 때문입니다. |
"NotSupportedError"
|
처리할 입력이 사용자 에이전트가 지원하지 않는 언어였거나, 모델 출력이 사용자 에이전트가 지원하지 않는 언어가 되었습니다(예: 사용자 에이전트가 해당 출력 언어에 대해 충분한 품질 관리 테스트를 수행하지 않았기 때문). |
"UnknownError"
|
사용자 에이전트가 모델에 프롬프트를 보낼 수 없고 동시에 § 4 프라이버시 고려사항 또는 § 5 보안 고려사항에 주어진 요구사항도 충족할 수 없다고 판단하는 경우를 포함한 그 밖의 모든 시나리오입니다. 또는 사용자 에이전트가 실패 이유를 공개하지 않는 것을 선호하는 경우입니다. |
이 표는 prompt API에 의해 표면화될 수 있는 예외의 전체 목록을 제공하지 않습니다. 이는 특정 구현 정의 단계에서 나올 수 있는 것만 포함합니다.
LanguageModel
model 및 LanguageModelCloneOptions
options가 주어졌을 때 언어
모델을 복제하려면:
-
model의 relevant global object를 global로 둡니다.
-
global의 associated Document가 fully active가 아니면, "
InvalidStateError"DOMException으로 거부된 promise를 반환합니다. -
signals를 « model의 destruction abort controller의 signal »로 둡니다.
-
signals가 주어졌을 때
AbortSignal과 model의 relevant realm을 사용하여 dependent abort signal 생성의 결과를 compositeSignal로 둡니다. -
compositeSignal이 aborted이면, compositeSignal의 abort reason으로 거부된 promise를 반환합니다.
-
signal이 null이 아니고 aborted이면, signal의 abort reason으로 거부된 promise를 반환합니다.
-
model의 relevant realm에서 생성된 새 promise를 promise로 둡니다.
-
abortedDuringOperation를 false로 둡니다.
이 변수는 event loop에서 쓰이지만, 병렬로 읽힙니다.
-
compositeSignal에 다음 abort 단계를 추가합니다:
-
abortedDuringOperation를 true로 설정합니다.
-
promise를 compositeSignal의 abort reason으로 Reject합니다.
-
-
병렬로:
-
다음 단계를 수행하도록 AI task source 위에 global task를 큐에 넣습니다:
-
abortedDuringOperation가 true이면 반환합니다.
-
다음을 가지는 새
LanguageModel객체를 clonedModel로 둡니다:-
temperature는 model의 temperature로 설정됩니다.
-
컨텍스트 윈도우 크기는 model의 컨텍스트 윈도우 크기로 설정됩니다.
-
현재 컨텍스트 사용량은 model의 현재 컨텍스트 사용량으로 설정됩니다.
-
구현 정의 방식으로, model에서 clonedModel로 다른 모든 상태를 복사합니다.
-
복사 작업이 실패하면:
-
promise를 "
OperationError"DOMException으로 Reject합니다. -
반환합니다.
-
-
promise를 clonedModel로 Resolve합니다.
-
-
-
promise를 반환합니다.
3.4. 권한 정책 통합
prompt API에 대한 접근은 policy-controlled feature "language-model" 뒤에 제한되며, 이는
'self'의
default allowlist를 가집니다.
4. 프라이버시 고려사항
prompt API에 대한 프라이버시 고려사항 논의는 Writing Assistance APIs § 6 Privacy considerations를 참조하십시오. 이 텍스트는 § 2 의존성에 언급된 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.
5. 보안 고려사항
prompt API에 대한 보안 고려사항 논의는 Writing Assistance APIs § 7 Security considerations를 참조하십시오. 이 텍스트는 § 2 의존성에 언급된 것처럼 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었습니다.