firestore-palm-chatbot/extension.yaml (252 lines of code) (raw):
# Learn detailed information about the fields of an extension.yaml file in the docs:
# https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml
name: firestore-palm-chatbot # Identifier for your extension
version: 0.1.10 # Follow semver versioning
specVersion: v1beta # Version of the Firebase Extensions specification
# Friendly display name for your extension (~3-5 words)
displayName: Chatbot with PaLM API
# Brief description of the task your extension performs (~1 sentence)
description: >-
Deploys customizable chatbots using PaLM API and Firestore.
license: Apache-2.0 # https://spdx.org/licenses/
icon: icon.png
tags:
[
ai,
palm,
chatbot-api,
generative-ai,
text-ai,
language-ai,
large-language-models,
llm,
nlp,
google-ai,
]
author:
authorName: Google Cloud
url: https://cloud.google.com/
contributors:
- authorName: Invertase
email: oss@invertase.io
url: https://github.com/invertase
# Public URL for the source code of your extension
sourceUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/firestore-palm-chatbot
releaseNotesUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/firestore-palm-chatbot/CHANGELOG.md
# Specify whether a paid-tier billing plan is required to use your extension.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#billing-required-field
billingRequired: true
# In an `apis` field, list any Google APIs (like Cloud Translation, BigQuery, etc.)
# required for your extension to operate.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#apis-field
apis:
- apiName: aiplatform.googleapis.com
reason: For access to the PaLM API if this provider is chosen.
# In a `roles` field, list any IAM access roles required for your extension to operate.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#roles-field
roles:
- role: datastore.user
reason:
Allows this extension to access Cloud Firestore to read and process added
messages.
- role: aiplatform.user
reason:
Allows this extension to access the PaLM API via Vertex AI if this
provider is chosen.
# In the `resources` field, list each of your extension's functions, including the trigger for each function.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#resources-field
resources:
- name: generateMessage
type: firebaseextensions.v1beta.function
description: >-
Listens to Firestore data writes to generate conversations.
properties:
# LOCATION is a user-configured parameter value specified by the user during installation.
location: ${LOCATION}
# httpsTrigger is used for an HTTP triggered function.
eventTrigger:
eventType: providers/cloud.firestore/eventTypes/document.write
resource: projects/${PROJECT_ID}/databases/(default)/documents/${COLLECTION_NAME}/{messageId}
runtime: 'nodejs18'
# In the `params` field, set up your extension's user-configured parameters.
# Learn more in the docs: https://firebase.google.com/docs/extensions/alpha/ref-extension-yaml#params-field
params:
- param: PALM_API_PROVIDER
label: Palm API Provider
description: >-
There are two services which provide access to the PaLM API. Which would
you like to use? If Vertex AI is selected, the service will be
automatically enabled. If Generative Language is selected, you can provide
an API key obtained through MakerSuite or your GCP console, or use
Application Default Credentials if the Generative Language AI is enabled
in your google cloud project.
type: select
options:
- label: Vertex AI
value: vertex
- label: Generative Language AI for Developers
value: generative
required: true
default: vertex
immutable: false
- param: API_KEY
label: API Key (Generative Language AI for Developers Provider ONLY)
description: >-
If you selected Generative AI for Developers as your PaLM API provider,
you can optionally choose to provide an API key. If you do not provide an
API key, the extension will use Application Default Credentials, but will
need the service enabled in GCP.
type: secret
required: false
immutable: false
- param: COLLECTION_NAME
label: Collection Path
description: >-
Path to a Cloud Firestore collection which will represent a discussion
with a LLM on the PaLM API.
type: string
validationRegex: '^[^/]+(/[^/]+/[^/]+)*$'
validationErrorMessage: Must be a valid Cloud Firestore Collection
example: users/{uid}/discussions/{discussionId}/messages
required: true
immutable: false
- param: PROMPT_FIELD
label: Prompt Field
description: >-
The field in the message document that contains the prompt.
type: string
default: prompt
example: prompt
required: true
immutable: false
- param: RESPONSE_FIELD
label: Response Field
description: >-
The field in the message document into which to put the response.
type: string
default: response
example: response
required: true
immutable: false
- param: ORDER_FIELD
label: Order Field
description: >-
The field by which to order when fetching conversation history. If absent
when processing begins, the current timestamp will be written to this
field. Sorting will be in descending order.
type: string
example: createTime
required: false
immutable: 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).
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
- param: MODEL
label: Language model
description: >-
Which language model do you want to use?
type: select
options:
- label: chat-bison
value: chat-bison
- label: codechat-bison (Vertex Only)
value: codechat-bison
required: true
immutable: false
- param: CONTEXT
label: Context
description: >-
Contextual preamble for the language model. A string giving context for
the discussion.
type: string
required: false
immutable: false
- param: TEMPERATURE
label: Temperature
description: >-
Controls the randomness of the output. Values can range over [0,1],
inclusive. A value closer to 1 will produce responses that are more
varied, while a value closer to 0 will typically result in less surprising
responses from the model.
type: string
validationRegex: ^(?:0*(?:\.\d+)?|1(\.0*)?)$
validationErrorMessage:
Please specify a decimal representation of a number between 0 and 1.
required: false
immutable: false
- param: TOP_P
label: Nucleus sampling probability
description: >-
If specified, nucleus sampling will be used as the decoding strategy.
Nucleus sampling considers the smallest set of tokens whose probability
sum is at least a fixed value. Enter a value between 0 and 1.
type: string
validationRegex: ^(?:0*(?:\.\d+)?|1(\.0*)?)$
validationErrorMessage:
Please specify a decimal representation of a number between 0 and 1.
required: false
immutable: false
- param: TOP_K
label: Sampling strategy parameter
description: >-
If specified, top-k sampling will be used as the decoding strategy. Top-k
sampling considers the set of topK most probable tokens.
type: string
validationRegex: ^[1-9][0-9]*
validationErrorMessage: Please specify a positive integer.
required: false
immutable: false
- param: CANDIDATE_COUNT
label: Candidate count
description: >-
The default value is one. When set to an integer higher than one,
additional candidate responses, up to the specified number, will be stored
in Firestore under the 'candidates' field.
type: string
validationRegex: ^[1-9][0-9]*
validationErrorMessage: Please specify a positive integer.
default: 1
required: false
immutable: false
- param: CANDIDATES_FIELD
label: Candidates field
description: >-
The field in the message document into which to put the other candidate
responses if the candidate count parameter is greater than one.
type: string
default: candidates
required: false
immutable: false
- param: ENABLE_DISCUSSION_OPTION_OVERRIDES
label: Enable per document overrides.
description: >-
If set to \"Yes\", discussion parameters may be overwritten by fields in
the discussion collection.
type: select
options:
- label: Yes
value: yes
- label: No
value: no
default: no
required: true