From 0f3066f7d004eeed2aba1f63c6b0c12f4e858a79 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Wed, 9 Jul 2025 23:56:10 +0800 Subject: [PATCH] fix(server): batch size in gemini embedding (#13120) ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability of embedding generation for multiple messages, allowing partial results even if some embeddings fail. * Enhanced error handling to ensure only valid embeddings are returned. --- .../src/plugins/copilot/providers/gemini/gemini.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/backend/server/src/plugins/copilot/providers/gemini/gemini.ts b/packages/backend/server/src/plugins/copilot/providers/gemini/gemini.ts index 20dd0c29f5..3e999aa7d6 100644 --- a/packages/backend/server/src/plugins/copilot/providers/gemini/gemini.ts +++ b/packages/backend/server/src/plugins/copilot/providers/gemini/gemini.ts @@ -239,12 +239,16 @@ export abstract class GeminiProvider extends CopilotProvider { taskType: 'RETRIEVAL_DOCUMENT', }); - const { embeddings } = await embedMany({ - model: modelInstance, - values: messages, - }); + const embeddings = await Promise.allSettled( + messages.map(m => + embedMany({ model: modelInstance, values: [m], maxRetries: 3 }) + ) + ); - return embeddings.filter(v => v && Array.isArray(v)); + return embeddings + .map(e => (e.status === 'fulfilled' ? e.value.embeddings : null)) + .flat() + .filter((v): v is number[] => !!v && Array.isArray(v)); } catch (e: any) { metrics.ai .counter('generate_embedding_errors')