From 9968791916280cac1cda6aabfd1ac52f9083559f Mon Sep 17 00:00:00 2001 From: Erik Eldridge Date: Thu, 1 May 2025 13:09:52 -0700 Subject: [PATCH] Flatten request parts rather than plucking first --- packages/vertexai/src/methods/chrome-adapter.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/vertexai/src/methods/chrome-adapter.ts b/packages/vertexai/src/methods/chrome-adapter.ts index 9ac8f350a02..9d96c953a84 100644 --- a/packages/vertexai/src/methods/chrome-adapter.ts +++ b/packages/vertexai/src/methods/chrome-adapter.ts @@ -92,10 +92,13 @@ export class ChromeAdapter { */ async generateContent(request: GenerateContentRequest): Promise { const session = await this.createSession(); - // TODO: support multiple content objects when Chrome supports + // NOTE: assumes all parts are from the same role, enforced by isOnDeviceRequest validation. + // TODO: stop stripping roles when Chrome supports // sequence const contents = await Promise.all( - request.contents[0].parts.map(ChromeAdapter.toLanguageModelMessageContent) + request.contents.flatMap(content => + content.parts.map(ChromeAdapter.toLanguageModelMessageContent) + ) ); const text = await session.prompt(contents); return ChromeAdapter.toResponse(text); @@ -113,10 +116,13 @@ export class ChromeAdapter { request: GenerateContentRequest ): Promise { const session = await this.createSession(); - // TODO: support multiple content objects when Chrome supports + // NOTE: assumes all parts are from the same role, enforced by isOnDeviceRequest validation. + // TODO: stop stripping roles when Chrome supports // sequence const contents = await Promise.all( - request.contents[0].parts.map(ChromeAdapter.toLanguageModelMessageContent) + request.contents.flatMap(content => + content.parts.map(ChromeAdapter.toLanguageModelMessageContent) + ) ); const stream = await session.promptStreaming(contents); return ChromeAdapter.toStreamResponse(stream);