async getEmbeddings()

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;
  }