Skip to content

Commit 78d1cc2

Browse files
committed
Log availability checks
1 parent 816ed62 commit 78d1cc2

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

e2e/sample-apps/modular.js

+13-4
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,22 @@ async function callVertexAI(app) {
314314
console.log('[VERTEXAI] start');
315315
const vertexAI = getVertexAI(app);
316316
const model = getGenerativeModel(vertexAI, {
317-
mode: 'only_on_device'
317+
mode: 'prefer_on_device'
318318
});
319319
const singleResult = await model.generateContent([
320-
{ text: 'describe the following:' },
321-
{ text: 'the mojave desert' }
320+
{ text: 'describe this 20 x 20 px image in two words' },
321+
{
322+
inlineData: {
323+
mimeType: 'image/heic',
324+
data: 'AAAAGGZ0eXBoZWljAAAAAGhlaWNtaWYxAAAB7G1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QAAAAAAAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAADnBpdG0AAAAAAAEAAAA4aWluZgAAAAAAAgAAABVpbmZlAgAAAAABAABodmMxAAAAABVpbmZlAgAAAQACAABFeGlmAAAAABppcmVmAAAAAAAAAA5jZHNjAAIAAQABAAABD2lwcnAAAADtaXBjbwAAABNjb2xybmNseAACAAIABoAAAAAMY2xsaQDLAEAAAAAUaXNwZQAAAAAAAAAUAAAADgAAAChjbGFwAAAAFAAAAAEAAAANAAAAAQAAAAAAAAAB/8AAAACAAAAAAAAJaXJvdAAAAAAQcGl4aQAAAAADCAgIAAAAcWh2Y0MBA3AAAACwAAAAAAAe8AD8/fj4AAALA6AAAQAXQAEMAf//A3AAAAMAsAAAAwAAAwAecCShAAEAI0IBAQNwAAADALAAAAMAAAMAHqAUIEHAjw1iHuRZVNwICBgCogABAAlEAcBhcshAUyQAAAAaaXBtYQAAAAAAAAABAAEHgQIDhIUGhwAAACxpbG9jAAAAAEQAAAIAAQAAAAEAAAJsAAABDAACAAAAAQAAAhQAAABYAAAAAW1kYXQAAAAAAAABdAAAAAZFeGlmAABNTQAqAAAACAAEARIAAwAAAAEAAQAAARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAAAAAAAAAAEgAAAABAAAASAAAAAEAAAEIKAGvoR8wDimTiRYUbALiHkU3ZdZ8DXAcSrRB9GARtVQHvnCE0LEyBGAyb5P4eYr6JAK5UxNX10WNlARq3ZpcGeVD+Xom6LodYasuZKKtDHCz/xnswOtC/ksZzVKhtWQqGvkXcsJnLYqWevNkacnccQ95jbHJBg9nXub69jAAN3xhNOXxjGSxaG9QvES5R7sYICEojRjLF5OB5K3v+okQAwfgWpz/u21ayideOgOZQLAyBkKOv7ymLNCagiPWTlHAuy/3qR1Q7m2ERFaxKIAbLSkIVO/P8m8+anKxhzhC//L8NMAUoF+Sf3aEH9O41fwLc+PlcbrDrjgY2EboD3cn9DyN32Rum2Ym'
325+
}
326+
}
322327
]);
323328
console.log(`Generated text: ${singleResult.response.text()}`);
329+
const chat = model.startChat();
330+
let chatResult = await chat.sendMessage('describe red in two words');
331+
chatResult = await chat.sendMessage('describe blue');
332+
console.log('Chat history:', await chat.getHistory());
324333
console.log(`[VERTEXAI] end`);
325334
}
326335

@@ -345,7 +354,7 @@ function callDataConnect(app) {
345354
async function main() {
346355
console.log('FIREBASE VERSION', SDK_VERSION);
347356
const app = initializeApp(config);
348-
setLogLevel('warn');
357+
setLogLevel('debug');
349358

350359
// callAppCheck(app);
351360
// await authLogin(app);

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

+20-7
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ export class ChromeAdapter {
6666
*/
6767
async isAvailable(request: GenerateContentRequest): Promise<boolean> {
6868
if (this.mode === 'only_in_cloud') {
69+
logger.debug(
70+
`On-device inference unavailable because mode is "only_in_cloud".`
71+
);
6972
return false;
7073
}
7174

@@ -77,10 +80,20 @@ export class ChromeAdapter {
7780
}
7881

7982
// Applies prefer_on_device logic.
80-
return (
81-
availability === Availability.available &&
82-
ChromeAdapter.isOnDeviceRequest(request)
83-
);
83+
if (availability !== Availability.available) {
84+
logger.debug(
85+
`On-device inference unavailable because availability is "${availability}".`
86+
);
87+
return false;
88+
}
89+
if (!ChromeAdapter.isOnDeviceRequest(request)) {
90+
logger.debug(
91+
`On-device inference unavailable because request is incompatible.`
92+
);
93+
return false;
94+
}
95+
96+
return true;
8497
}
8598

8699
/**
@@ -98,7 +111,6 @@ export class ChromeAdapter {
98111
const contents = await Promise.all(
99112
request.contents[0].parts.map(ChromeAdapter.toLanguageModelMessageContent)
100113
);
101-
logger.warn('Only generating content from first item in "contents" array.');
102114
const text = await session.prompt(contents);
103115
return ChromeAdapter.toResponse(text);
104116
}
@@ -120,7 +132,6 @@ export class ChromeAdapter {
120132
const contents = await Promise.all(
121133
request.contents[0].parts.map(ChromeAdapter.toLanguageModelMessageContent)
122134
);
123-
logger.warn('Only generating content from first item in "contents" array.');
124135
const stream = await session.promptStreaming(contents);
125136
return ChromeAdapter.toStreamResponse(stream);
126137
}
@@ -146,7 +157,9 @@ export class ChromeAdapter {
146157
// Returns false if the request contains multiple roles, eg a chat history.
147158
// TODO: remove this guard once LanguageModelMessage is supported.
148159
if (content.role !== 'user') {
149-
logger.debug('Non-user role "${content.role}" rejected for on-device inference.');
160+
logger.debug(
161+
`Non-user role "${content.role}" rejected for on-device inference.`
162+
);
150163
return false;
151164
}
152165

0 commit comments

Comments
 (0)