Skip to content

Commit 478b4c3

Browse files
committed
Guard against undefined mode, ie the non-hybrid common case
1 parent 50f142a commit 478b4c3

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

packages/ai/src/methods/chrome-adapter.test.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ describe('ChromeAdapter', () => {
109109
});
110110
});
111111
describe('isAvailable', () => {
112+
it('returns false if mode is undefined', async () => {
113+
const adapter = new ChromeAdapter();
114+
expect(
115+
await adapter.isAvailable({
116+
contents: []
117+
})
118+
).to.be.false;
119+
});
112120
it('returns false if mode is only cloud', async () => {
113121
const adapter = new ChromeAdapter(undefined, 'only_in_cloud');
114122
expect(
@@ -239,7 +247,10 @@ describe('ChromeAdapter', () => {
239247
const createStub = stub(languageModelProvider, 'create').returns(
240248
downloadPromise
241249
);
242-
const adapter = new ChromeAdapter(languageModelProvider);
250+
const adapter = new ChromeAdapter(
251+
languageModelProvider,
252+
'prefer_on_device'
253+
);
243254
await adapter.isAvailable({
244255
contents: [{ role: 'user', parts: [{ text: 'hi' }] }]
245256
});
@@ -260,7 +271,10 @@ describe('ChromeAdapter', () => {
260271
const createStub = stub(languageModelProvider, 'create').returns(
261272
downloadPromise
262273
);
263-
const adapter = new ChromeAdapter(languageModelProvider);
274+
const adapter = new ChromeAdapter(
275+
languageModelProvider,
276+
'prefer_on_device'
277+
);
264278
await adapter.isAvailable({
265279
contents: [{ role: 'user', parts: [{ text: 'hi' }] }]
266280
});

packages/ai/src/methods/chrome-adapter.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export class ChromeAdapter {
6868
* separation of concerns.</p>
6969
*/
7070
async isAvailable(request: GenerateContentRequest): Promise<boolean> {
71-
if (this.mode === 'only_in_cloud') {
71+
if (!this.mode || this.mode === 'only_in_cloud') {
7272
logger.debug(
7373
`On-device inference unavailable because mode is "only_in_cloud".`
7474
);
@@ -83,20 +83,25 @@ export class ChromeAdapter {
8383
}
8484

8585
// Applies prefer_on_device logic.
86-
if (availability !== Availability.available) {
86+
const isAvailable = availability === Availability.available;
87+
const isOnDeviceRequest = ChromeAdapter.isOnDeviceRequest(request);
88+
if (isAvailable && isOnDeviceRequest) {
89+
return true;
90+
}
91+
92+
if (!isAvailable) {
8793
logger.debug(
8894
`On-device inference unavailable because availability is "${availability}".`
8995
);
90-
return false;
9196
}
92-
if (!ChromeAdapter.isOnDeviceRequest(request)) {
97+
98+
if (!isOnDeviceRequest) {
9399
logger.debug(
94100
`On-device inference unavailable because request is incompatible.`
95101
);
96-
return false;
97102
}
98103

99-
return true;
104+
return false;
100105
}
101106

102107
/**

0 commit comments

Comments
 (0)