in firestore-vector-search/functions/src/embeddings/client/multimodal/index.ts [63:104]
async getEmbeddings(inputs: string[]): Promise<number[][]> {
// POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/multimodalembedding@001:predict
// TODO: do we add config location?
const endpoint = `https://us-central1-aiplatform.googleapis.com/v1/projects/${config.projectId}/locations/us-central-1/publishers/google/models/multimodalembedding@001:predict`;
const promises: Promise<{
image?: {bytesBase64Encoded: string; mimeType: string};
}>[] = inputs.map(async input => {
const unit8Array = await this._getImageBuffer(input);
const buffer = Buffer.from(unit8Array);
const b64 = buffer.toString('base64');
return {
image: {
bytesBase64Encoded: b64,
mimeType: 'image/jpeg',
},
};
});
const instances = await Promise.all(promises);
const requestBody = {instances};
const result = await fetch(endpoint, {
method: 'POST',
body: JSON.stringify(requestBody),
headers: {
'Content-Type': 'application/json; charset=utf-8',
Authorization: `Bearer ${await this.getAccessToken()}`,
},
}).then(res => {
return res.json();
});
const {predictions} = result;
const imageEmbeddings = predictions.map(p => p.imageEmbedding);
return imageEmbeddings;
}