in firestore-semantic-search/functions/src/common/gemini_embeddings.ts [43:76]
async function getEmbeddingsGemini(
text: string | string[]
): Promise<number[][]> {
if (!client && (typeof text !== 'string' || text.length !== 0)) {
await initializeGeminiClient();
}
const model = client.getGenerativeModel({model: 'embedding-001'});
let embeddings: number[][] = [];
const t0 = performance.now();
if (Array.isArray(text)) {
const batches: EmbedContentRequest[] = text.map(doc => ({
content: {role: 'user', parts: [{text: doc}]},
taskType: TaskType.RETRIEVAL_QUERY,
}));
const result = await model.batchEmbedContents({
requests: batches,
});
embeddings = result.embeddings.map(embedding => embedding.values);
} else {
const result = await model.embedContent(text);
embeddings = [result.embedding.values];
}
const duration = performance.now() - t0;
console.log(`Processed embeddings. This took ${duration}ms`);
return embeddings;
}