Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

// META: title=Language Model Create
// META: script=/resources/testdriver.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.measureInputUsage, 'function');
assert_equals(typeof session.clone, 'function');
assert_equals(typeof session.destroy, 'function');
assert_equals(typeof session.inputUsage, 'number');
assert_equals(typeof session.inputQuota, 'number');
assert_equals(typeof session.topK, 'number');
assert_equals(typeof session.temperature, 'number');
assert_equals(typeof session.onquotaoverflow, '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({ topK: 3, temperature: 0.6 });
assert_true(!!session);
}, 'Create with topK and temperature');
promise_test(async t => {
let result = createLanguageModel({ topK: 3 });
await promise_rejects_dom(
t, 'NotSupportedError', result,
'Initializing a new session must either specify both topK and temperature, or neither of them.');
}, 'Create with only topK should fail');
promise_test(async t => {
let result = createLanguageModel({ temperature: 0.5 });
await promise_rejects_dom(
t, 'NotSupportedError', result,
'Initializing a new session must either specify both topK and temperature, or neither of them.');
}, 'Create with only temperature should fail');
promise_test(async t => {
let result = createLanguageModel({ topK: 3, temperature: -0.5 });
await promise_rejects_js(t, RangeError, result);
}, 'Create with negative temperature should fail');
promise_test(async t => {
let result = createLanguageModel({ topK: 0, temperature: 0.5 });
await promise_rejects_js(t, RangeError, result);
}, 'Create with zero topK should fail');
promise_test(async t => {
let result = createLanguageModel({ topK: -2, temperature: 0.5 });
await promise_rejects_js(t, RangeError, result);
}, 'Create with negative topK should fail');
promise_test(async t => {
let session = await createLanguageModel({ topK: 1.5, temperature: 0.5 });
assert_true(!!session);
assert_equals(session.topK, 1);
}, 'Create with fractional topK should be rounded down');
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 result = createLanguageModel({
initialPrompts: [
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'},
{role: 'system', content: 'you are a robot'}
]
});
await promise_rejects_js(t, TypeError, result);
}, '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');