language-model-create.tentative.https.window.js (4785B)
1 // META: title=Language Model Create 2 // META: script=/resources/testdriver.js 3 // META: script=../resources/util.js 4 // META: timeout=long 5 6 'use strict'; 7 8 promise_test(async t => { 9 await ensureLanguageModel(); 10 }, 'Ensure sessions can be created'); 11 12 promise_test(async t => { 13 let session = await createLanguageModel(); 14 assert_true(session instanceof LanguageModel); 15 16 assert_equals(typeof session.prompt, 'function'); 17 assert_equals(typeof session.promptStreaming, 'function'); 18 assert_equals(typeof session.append, 'function'); 19 assert_equals(typeof session.measureInputUsage, 'function'); 20 assert_equals(typeof session.clone, 'function'); 21 assert_equals(typeof session.destroy, 'function'); 22 23 assert_equals(typeof session.inputUsage, 'number'); 24 assert_equals(typeof session.inputQuota, 'number'); 25 assert_equals(typeof session.topK, 'number'); 26 assert_equals(typeof session.temperature, 'number'); 27 28 assert_equals(typeof session.onquotaoverflow, 'object'); 29 }, 'LanguageModel.create() returns a valid object with default options'); 30 31 promise_test(async t => { 32 await testMonitor(createLanguageModel); 33 }, 'LanguageModel.create() notifies its monitor on downloadprogress'); 34 35 promise_test(async t => { 36 await testCreateMonitorWithAbort(t, createLanguageModel); 37 }, 'Progress events are not emitted after aborted.'); 38 39 promise_test(async t => { 40 let session = await createLanguageModel({ topK: 3, temperature: 0.6 }); 41 assert_true(!!session); 42 }, 'Create with topK and temperature'); 43 44 promise_test(async t => { 45 let result = createLanguageModel({ topK: 3 }); 46 await promise_rejects_dom( 47 t, 'NotSupportedError', result, 48 'Initializing a new session must either specify both topK and temperature, or neither of them.'); 49 }, 'Create with only topK should fail'); 50 51 promise_test(async t => { 52 let result = createLanguageModel({ temperature: 0.5 }); 53 await promise_rejects_dom( 54 t, 'NotSupportedError', result, 55 'Initializing a new session must either specify both topK and temperature, or neither of them.'); 56 }, 'Create with only temperature should fail'); 57 58 promise_test(async t => { 59 let result = createLanguageModel({ topK: 3, temperature: -0.5 }); 60 await promise_rejects_js(t, RangeError, result); 61 }, 'Create with negative temperature should fail'); 62 63 promise_test(async t => { 64 let result = createLanguageModel({ topK: 0, temperature: 0.5 }); 65 await promise_rejects_js(t, RangeError, result); 66 }, 'Create with zero topK should fail'); 67 68 promise_test(async t => { 69 let result = createLanguageModel({ topK: -2, temperature: 0.5 }); 70 await promise_rejects_js(t, RangeError, result); 71 }, 'Create with negative topK should fail'); 72 73 promise_test(async t => { 74 let session = await createLanguageModel({ topK: 1.5, temperature: 0.5 }); 75 assert_true(!!session); 76 assert_equals(session.topK, 1); 77 }, 'Create with fractional topK should be rounded down'); 78 79 promise_test(async t => { 80 let session = await createLanguageModel({ 81 initialPrompts: [ 82 {role: 'system', content: 'you are a robot'}, 83 {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'} 84 ] 85 }); 86 assert_true(!!session); 87 }, 'Create with initialPrompts'); 88 89 promise_test(async t => { 90 let session = await createLanguageModel({initialPrompts: []}); 91 assert_true(!!session); 92 }, 'Create with empty initialPrompts'); 93 94 promise_test(async t => { 95 let session = await createLanguageModel({ 96 initialPrompts: [ 97 {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'} 98 ] 99 }); 100 assert_true(!!session); 101 }, 'Create with initialPrompts without system role'); 102 103 promise_test(async t => { 104 let result = createLanguageModel({ 105 initialPrompts: [ 106 {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'}, 107 {role: 'system', content: 'you are a robot'} 108 ] 109 }); 110 await promise_rejects_js(t, TypeError, result); 111 }, 'Create with system role not ordered first should fail'); 112 113 promise_test(async t => { 114 let result = createLanguageModel({ 115 initialPrompts: [ 116 {role: 'system', content: 'you are a robot'}, 117 {role: 'system', content: 'you are a kitten'}, 118 {role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'} 119 ] 120 }); 121 await promise_rejects_js(t, TypeError, result); 122 }, 'Create multiple system role entries should fail'); 123 124 promise_test(async (t) => { 125 return promise_rejects_js(t, RangeError, LanguageModel.create({ 126 expectedInputs: [{type: 'text', languages: ['en-abc-invalid']}] 127 })); 128 }, 'LanguageModel.create() rejects when given invalid language tags'); 129 130 promise_test(async (t) => { 131 let session = await LanguageModel.create( 132 {expectedInputs: [{type: 'text', languages: ['EN']}]}); 133 assert_true(!!session); 134 }, 'LanguageModel.create() canonicalizes language tags');