Skip to content

Commit e859c03

Browse files
authored
VinF Hybrid Inference: log debug messages in conditional logic (#8992)
1 parent 31261ca commit e859c03

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
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

+25-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
import { AIError } from '../errors';
19+
import { logger } from '../logger';
1920
import {
2021
CountTokensRequest,
2122
GenerateContentRequest,
@@ -65,6 +66,9 @@ export class ChromeAdapter {
6566
*/
6667
async isAvailable(request: GenerateContentRequest): Promise<boolean> {
6768
if (this.mode === 'only_in_cloud') {
69+
logger.debug(
70+
`On-device inference unavailable because mode is "only_in_cloud".`
71+
);
6872
return false;
6973
}
7074

@@ -76,10 +80,20 @@ export class ChromeAdapter {
7680
}
7781

7882
// Applies prefer_on_device logic.
79-
return (
80-
availability === Availability.available &&
81-
ChromeAdapter.isOnDeviceRequest(request)
82-
);
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;
8397
}
8498

8599
/**
@@ -135,13 +149,17 @@ export class ChromeAdapter {
135149
private static isOnDeviceRequest(request: GenerateContentRequest): boolean {
136150
// Returns false if the prompt is empty.
137151
if (request.contents.length === 0) {
152+
logger.debug('Empty prompt rejected for on-device inference.');
138153
return false;
139154
}
140155

141156
for (const content of request.contents) {
142157
// Returns false if the request contains multiple roles, eg a chat history.
143158
// TODO: remove this guard once LanguageModelMessage is supported.
144159
if (content.role !== 'user') {
160+
logger.debug(
161+
`Non-user role "${content.role}" rejected for on-device inference.`
162+
);
145163
return false;
146164
}
147165

@@ -153,6 +171,9 @@ export class ChromeAdapter {
153171
part.inlineData.mimeType
154172
) === -1
155173
) {
174+
logger.debug(
175+
`Unsupported mime type "${part.inlineData.mimeType}" rejected for on-device inference.`
176+
);
156177
return false;
157178
}
158179
}

0 commit comments

Comments
 (0)