firestore-vector-search/extension.yaml (176 lines of code) (raw):

# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: firestore-vector-search version: 0.0.7 specVersion: v1beta tags: [ ai, search, semantic-search, vector-search, text-search, generative-ai, nlp, llm, large-language-models, gemini, embeddings, google-ai, firestore, ] displayName: Vector Search with Firestore description: Perform vector similarity search with Firestore icon: icon.png license: Apache-2.0 # https://spdx.org/licenses/ sourceUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/firestore-vector-search releaseNotesUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/firestore-vector-search/CHANGELOG.md author: authorName: Google Cloud url: https://cloud.google.com contributors: - authorName: Jacob Cable email: jacob@invertase.io url: https://github.com/chrisbianca - authorName: Invertase email: oss@invertase.io url: https://github.com/invertase billingRequired: true apis: - apiName: aiplatform.googleapis.com reason: This extension uses the Vertex AI multimodal model for embedding images, if configured to do so. roles: - role: datastore.user reason: Allows the extension to write embeddings to Cloud Firestore. - role: aiplatform.user reason: >- This extension requires access to Vertex AI to create, update and query a Vertex Matching Engine index. - role: storage.objectAdmin reason: >- This extension requires access to Cloud Storage to read image data from your Cloud Storage. - role: datastore.indexAdmin reason: >- This extension requires access to Cloud Firestore to create, update and query a Firestore index. resources: - name: updateTrigger type: firebaseextensions.v1beta.function description: >- Queues the document update tasks properties: availableMemoryMb: 512 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: {} - name: updateTask type: firebaseextensions.v1beta.function description: >- Performs the embeddings for document updates properties: availableMemoryMb: 1024 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: retryConfig: maxAttempts: 50 - name: backfillTrigger type: firebaseextensions.v1beta.function description: >- Queues the backfill tasks properties: availableMemoryMb: 512 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: {} - name: backfillTask type: firebaseextensions.v1beta.function description: >- Performs the embeddings for backfill properties: availableMemoryMb: 1024 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: retryConfig: maxAttempts: 50 - name: embedOnWrite type: firebaseextensions.v1beta.function description: >- An event-triggered function that gets called when a document is created or updated. It generates embeddings for the document and writes those embeddings back to firestore properties: location: ${LOCATION} runtime: nodejs20 availableMemoryMb: 512 timeout: 540s eventTrigger: eventType: providers/cloud.firestore/eventTypes/document.write resource: projects/${param:PROJECT_ID}/databases/(default)/documents/${param:COLLECTION_NAME}/{documentId} - name: queryOnWrite type: firebaseextensions.v1beta.function description: >- An event-triggered function that gets called when a document is created or updated. It uses the document fields `query`, `limit`, and `prefilters` to perform a vector search query. properties: location: ${LOCATION} runtime: nodejs20 availableMemoryMb: 512 timeout: 540s eventTrigger: eventType: providers/cloud.firestore/eventTypes/document.write resource: projects/${param:PROJECT_ID}/databases/(default)/documents/_${param:EXT_INSTANCE_ID}/index/queries/{documentId} - name: queryCallable type: firebaseextensions.v1beta.function description: >- A callable function that queries a firestore collection with vector search properties: location: ${LOCATION} httpsTrigger: {} availableMemoryMb: 512 runtime: nodejs20 params: - param: EMBEDDING_PROVIDER label: LLM description: > Which embedding API do you want to use? Note: **Vertex AI provider** is supported only with the **us-central1** location. type: select options: - label: Gemini value: gemini - label: Multimodal value: multimodal - label: OpenAI value: openai - label: Vertex AI value: vertex - label: Other (User-provided endpoint) value: custom default: gemini required: true - param: GEMINI_API_KEY label: Gemini API key description: > If you selected Gemini to calculate embeddings, please provide your Gemini API key type: secret required: false - param: OPENAI_API_KEY label: OpenAI API key description: > If you selected OpenAI to calculate embeddings, please provide your OpenAI API key type: secret required: false - param: CUSTOM_EMBEDDINGS_ENDPOINT label: LLM Function description: > If you selected \"Other\" as your embedding provider, please provide the URL of your function that will calculate the embeddings. type: string required: false - param: CUSTOM_EMBEDDINGS_BATCH_SIZE label: LLM Function batch size description: > If you selected \"Other\" as your embedding provider, please provide the batch size of your function that will calculate the embeddings. type: string required: false - param: CUSTOM_EMBEDDINGS_DIMENSION label: LLM Function dimension description: > If you selected \"Other\" as your embedding provider, please provide the dimension of the embedding you will be using. type: string required: false - param: COLLECTION_NAME label: Collection path description: > What is the path to the collection that contains the strings that you want to embed? example: products validationRegex: '^[^/]+(/[^/]+/[^/]+)*$' validationErrorMessage: Must be a valid Cloud Firestore Collection default: products required: true - param: DEFAULT_QUERY_LIMIT label: Default query limit description: > What is the default number of results to return when making a vector search query? validationRegex: '^[1-9][0-9]*' validationErrorMessage: Must be a valid Cloud Firestore Collection default: 3 required: false - param: DISTANCE_MEASURE label: Distance measure description: >- What distance measure do you want to be used to rank the results of your vector search? type: select options: - label: Cosine value: COSINE - label: Euclidean value: EUCLIDEAN - label: Dot Product value: DOT_PRODUCT default: COSINE required: true - param: INPUT_FIELD_NAME label: Input field name description: > What is the name of the field that contains the string that you want to embed? example: input default: input required: true - param: OUTPUT_FIELD_NAME label: Output field name description: > What is the name of the field where you want to store your embeddings? example: embedding default: embedding required: true - param: STATUS_FIELD_NAME label: Status field name description: > What is the name of the field where you want to track the state of a document being embedded? example: status default: status required: true - param: DO_BACKFILL label: Embed existing documents? description: > Should existing documents in the Firestore collection be embedded as well? type: select required: true options: - label: Yes value: true - label: No value: false - param: UPDATE_ON_CONFIGURE label: Update existing embeddings? description: > Should existing documents in the Firestore collection be updated with new embeddings on reconfiguring the extensions? type: select required: true options: - label: Yes value: true - label: No value: false - param: LOCATION label: Cloud Functions location description: >- Where do you want to deploy the functions created for this extension? For help selecting a location, refer to the [location selection guide](https://firebase.google.com/docs/functions/locations). Make sure to pick a location supported by the Gemini API, if you have chosen this as your embedding provider. type: select options: - label: Iowa (us-central1) value: us-central1 - label: South Carolina (us-east1) value: us-east1 - label: Northern Virginia (us-east4) value: us-east4 - label: Los Angeles (us-west2) value: us-west2 - label: Salt Lake City (us-west3) value: us-west3 - label: Las Vegas (us-west4) value: us-west4 - label: Warsaw (europe-central2) value: europe-central2 - label: Belgium (europe-west1) value: europe-west1 - label: London (europe-west2) value: europe-west2 - label: Frankfurt (europe-west3) value: europe-west3 - label: Zurich (europe-west6) value: europe-west6 - label: Hong Kong (asia-east2) value: asia-east2 - label: Tokyo (asia-northeast1) value: asia-northeast1 - label: Osaka (asia-northeast2) value: asia-northeast2 - label: Seoul (asia-northeast3) value: asia-northeast3 - label: Mumbai (asia-south1) value: asia-south1 - label: Jakarta (asia-southeast2) value: asia-southeast2 - label: Montreal (northamerica-northeast1) value: northamerica-northeast1 - label: Sao Paulo (southamerica-east1) value: southamerica-east1 - label: Sydney (australia-southeast1) value: australia-southeast1 required: true immutable: true events: - type: firebase.extensions.firestore-vector-search.v1.onStart description: Occurs when a trigger has been called within the Extension, and will include data such as the context of the trigger request. - type: firebase.extensions.firestore-vector-search.v1.onSuccess description: Occurs when image resizing completes successfully. The event will contain further details about specific formats and sizes. - type: firebase.extensions.firestore-vector-search.v1.onError description: Occurs when an issue has been experienced in the Extension. This will include any error data that has been included within the Error Exception. - type: firebase.extensions.firestore-vector-search.v1.onCompletion description: Occurs when the function is settled. Provides no customized data other than the context. lifecycleEvents: onInstall: function: backfillTrigger processingMessage: Embed existing documents onConfigure: function: updateTrigger processingMessage: Update existing embeddings