Skip to content

Commit b592ce4

Browse files
Mike Wassermanchromium-wpt-export-bot
authored andcommitted
Prompt API: Reject system messages appended after others
Reject appending system messages when sessions have [pending] context. Run ValidateInput on prompt and append; track imminent pending usage. Update exception message. Add WPT coverage. Fixed: 495843316 Change-Id: I77dfb450719e86041c3e1ebea83f0511c3db4e43 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7698599 Auto-Submit: Mike Wasserman <msw@chromium.org> Commit-Queue: Mike Wasserman <msw@chromium.org> Reviewed-by: Jingyun Liu <jingyun@google.com> Cr-Commit-Position: refs/heads/main@{#1605041}
1 parent e719f9a commit b592ce4

4 files changed

Lines changed: 69 additions & 14 deletions

ai/language-model/language-model-append.tentative.https.window.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,24 @@ promise_test(async t => {
4242
await promise_rejects_quotaexceedederror(
4343
t, session.append(promptString), usage, session.contextWindow);
4444
}, 'Test that append input exceeding the total context window rejects');
45+
46+
promise_test(async t => {
47+
await ensureLanguageModel();
48+
const session = await createLanguageModel();
49+
const result1 = session.append([
50+
{role: 'user', content: 'foo'},
51+
{role: 'system', content: 'bar'},
52+
]);
53+
await promise_rejects_js(t, TypeError, result1);
54+
55+
const result2 = session.append([
56+
{role: 'system', content: 'foo'},
57+
{role: 'system', content: 'bar'},
58+
]);
59+
await promise_rejects_js(t, TypeError, result2);
60+
61+
const result3 = session.append({role: 'system', content: 'foo'});
62+
await promise_rejects_js(
63+
t, TypeError, session.append([{role: 'system', content: 'bar'}]));
64+
await result3;
65+
}, 'append() should reject system role messages after other messages');

ai/language-model/language-model-create.tentative.https.window.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,19 @@ promise_test(async t => {
7070
}, 'Create with initialPrompts without system role');
7171

7272
promise_test(async t => {
73-
let result = createLanguageModel({
73+
let result1 = createLanguageModel({
7474
initialPrompts: [
7575
{role: 'user', content: 'hello'}, {role: 'assistant', content: 'hello'},
7676
{role: 'system', content: 'you are a robot'}
7777
]
7878
});
79-
await promise_rejects_js(t, TypeError, result);
79+
await promise_rejects_js(t, TypeError, result1);
80+
81+
let result2 = createLanguageModel({
82+
initialPrompts:
83+
[{role: 'system', content: 'foo'}, {role: 'system', content: 'bar'}]
84+
});
85+
await promise_rejects_js(t, TypeError, result2);
8086
}, 'Create with system role not ordered first should fail');
8187

8288
promise_test(async t => {

ai/language-model/language-model-measure-context-usage.tentative.https.window.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@
88

99
promise_test(async t => {
1010
await ensureLanguageModel();
11-
12-
// Start a new session.
1311
const session = await createLanguageModel();
12+
const result = await session.measureContextUsage('This is a prompt.');
13+
assert_equals(typeof result, 'number');
14+
assert_greater_than(result, 0);
15+
}, 'measureContextUsage returns a number greater than zero for text');
1416

15-
// Test the measureContextUsage() API.
16-
let result = await session.measureContextUsage('This is a prompt.');
17-
assert_true(
18-
typeof result === "number" && result > 0,
19-
"The counting result should be a positive number."
20-
);
21-
});
17+
promise_test(async t => {
18+
const prompts = [
19+
{role: 'system', content: 'foo'},
20+
{role: 'user', content: 'bar'},
21+
{role: 'assistant', content: 'baz'},
22+
];
23+
await ensureLanguageModel();
24+
const session = await createLanguageModel({initialPrompts: prompts});
25+
const result = await session.measureContextUsage(prompts);
26+
assert_equals(typeof result, 'number');
27+
assert_greater_than(result, 0);
28+
}, 'measure message sequences of various roles, even after adding prompts');

ai/language-model/language-model-prompt.tentative.https.window.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ promise_test(async (t) => {
4242
promise_test(async () => {
4343
const options = {
4444
initialPrompts:
45-
[{role: 'system', content: [{type: 'text', value: 'The word of the day is regurgitation.'}]}]
45+
[{role: 'system', content: 'The word of the day is regurgitation.'}]
4646
};
4747
await ensureLanguageModel(options);
4848
const session = await LanguageModel.create(options);
4949
const usage = await session.measureContextUsage(options.initialPrompts);
5050
assert_greater_than(usage, 0);
5151
assert_equals(session.contextUsage, usage);
52-
assert_regexp_match(await session.prompt('What is the word of the day?'),
53-
/regurgitation/i);
52+
assert_regexp_match(
53+
await session.prompt('What is the word of the day?'), /regurgitation/i);
5454
}, 'Test that initialPrompt counts towards session contextUsage');
5555

5656
promise_test(async () => {
@@ -80,3 +80,24 @@ promise_test(async t => {
8080
await promise_rejects_quotaexceedederror(
8181
t, session.prompt(promptString), usage, session.contextWindow);
8282
}, 'Test that prompt input exceeding the total context window rejects');
83+
84+
promise_test(async t => {
85+
await ensureLanguageModel();
86+
const session = await createLanguageModel();
87+
const result1 = session.prompt([
88+
{role: 'user', content: 'foo'},
89+
{role: 'system', content: 'bar'},
90+
]);
91+
await promise_rejects_js(t, TypeError, result1);
92+
93+
const result2 = session.prompt([
94+
{role: 'system', content: 'foo'},
95+
{role: 'system', content: 'bar'},
96+
]);
97+
await promise_rejects_js(t, TypeError, result2);
98+
99+
const result3 = session.prompt({role: 'system', content: 'foo'});
100+
await promise_rejects_js(
101+
t, TypeError, session.prompt([{role: 'system', content: 'bar'}]));
102+
await result3;
103+
}, 'prompt() should reject system role messages after other messages');

0 commit comments

Comments
 (0)