Automatic update from web-platform-tests Prompt API: Setup experimental feature for sampling parameters Adds a new runtime enabled feature "AIPromptAPIParams". V0 restores legacy temperature and topK options and attributes. Split handling of legacy params from other renamed identifiers. Update IDL gating and comments. Consolidate deprecation notices. Bug: 496663356 Change-Id: I6d3cb2701493582c8e6e7ccd24473d4bcd698b03 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7708992 Reviewed-by: Jingyun Liu <jingyun@google.com> Auto-Submit: Mike Wasserman <msw@chromium.org> Reviewed-by: Dave Tapuska <dtapuska@chromium.org> Reviewed-by: Philip Rogers <pdr@chromium.org> Commit-Queue: Mike Wasserman <msw@chromium.org> Cr-Commit-Position: refs/heads/main@{#1608540} -- wpt-commits: 01dec597449335db4ba39cc4ef082e8cfec18490 wpt-pr: 58888
101 lines
3.3 KiB
JavaScript
101 lines
3.3 KiB
JavaScript
// META: title=Language Model Create
|
|
// META: script=/resources/testdriver.js
|
|
// META: script=/resources/testdriver-vendor.js
|
|
// META: script=../resources/util.js
|
|
// META: timeout=long
|
|
|
|
'use strict';
|
|
|
|
promise_test(async t => {
|
|
await ensureLanguageModel();
|
|
}, 'Ensure sessions can be created');
|
|
|
|
promise_test(async t => {
|
|
let session = await createLanguageModel();
|
|
assert_true(session instanceof LanguageModel);
|
|
|
|
assert_equals(typeof session.prompt, 'function');
|
|
assert_equals(typeof session.promptStreaming, 'function');
|
|
assert_equals(typeof session.append, 'function');
|
|
assert_equals(typeof session.measureContextUsage, 'function');
|
|
assert_equals(typeof session.clone, 'function');
|
|
assert_equals(typeof session.destroy, 'function');
|
|
|
|
assert_equals(typeof session.contextUsage, 'number');
|
|
assert_equals(typeof session.contextWindow, 'number');
|
|
|
|
|
|
assert_equals(typeof session.oncontextoverflow, 'object');
|
|
}, 'LanguageModel.create() returns a valid object with default options');
|
|
|
|
promise_test(async t => {
|
|
await testMonitor(createLanguageModel);
|
|
}, 'LanguageModel.create() notifies its monitor on downloadprogress');
|
|
|
|
promise_test(async t => {
|
|
await testCreateMonitorWithAbort(t, createLanguageModel);
|
|
}, 'Progress events are not emitted after aborted.');
|
|
|
|
promise_test(async t => {
|
|
let session = await createLanguageModel({
|
|
initialPrompts: [
|
|
{role: 'system', content: 'you are a robot'},
|
|
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}
|
|
]
|
|
});
|
|
assert_true(!!session);
|
|
}, 'Create with initialPrompts');
|
|
|
|
promise_test(async t => {
|
|
let session = await createLanguageModel({initialPrompts: []});
|
|
assert_true(!!session);
|
|
}, 'Create with empty initialPrompts');
|
|
|
|
promise_test(async t => {
|
|
let session = await createLanguageModel({
|
|
initialPrompts: [
|
|
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}
|
|
]
|
|
});
|
|
assert_true(!!session);
|
|
}, 'Create with initialPrompts without system role');
|
|
|
|
promise_test(async t => {
|
|
let result1 = createLanguageModel({
|
|
initialPrompts: [
|
|
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'},
|
|
{role: 'system', content: 'you are a robot'}
|
|
]
|
|
});
|
|
await promise_rejects_js(t, TypeError, result1);
|
|
|
|
let result2 = createLanguageModel({
|
|
initialPrompts:
|
|
[{role: 'system', content: 'foo'}, {role: 'system', content: 'bar'}]
|
|
});
|
|
await promise_rejects_js(t, TypeError, result2);
|
|
}, 'Create with system role not ordered first should fail');
|
|
|
|
promise_test(async t => {
|
|
let result = createLanguageModel({
|
|
initialPrompts: [
|
|
{role: 'system', content: 'you are a robot'},
|
|
{role: 'system', content: 'you are a kitten'},
|
|
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}
|
|
]
|
|
});
|
|
await promise_rejects_js(t, TypeError, result);
|
|
}, 'Create multiple system role entries should fail');
|
|
|
|
promise_test(async (t) => {
|
|
return promise_rejects_js(t, RangeError, LanguageModel.create({
|
|
expectedInputs: [{type: 'text', languages: ['en-abc-invalid']}]
|
|
}));
|
|
}, 'LanguageModel.create() rejects when given invalid language tags');
|
|
|
|
promise_test(async (t) => {
|
|
let session = await LanguageModel.create(
|
|
{expectedInputs: [{type: 'text', languages: ['EN']}]});
|
|
assert_true(!!session);
|
|
}, 'LanguageModel.create() canonicalizes language tags');
|