{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Google Vertex AI PaLM \n", "\n", "**Note:** This is separate from the `Google PaLM` integration, it exposes [Vertex AI PaLM API](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/overview) on `Google Cloud`. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, Google Cloud [does not use](https://cloud.google.com/vertex-ai/docs/generative-ai/data-governance#foundation_model_development) customer data to train its foundation models as part of Google Cloud's AI/ML Privacy Commitment. More details about how Google processes data can also be found in [Google's Customer Data Processing Addendum (CDPA)](https://cloud.google.com/terms/data-processing-addendum).\n", "\n", "To use `Vertex AI PaLM` you must have the `google-cloud-aiplatform` Python package installed and either:\n", "- Have credentials configured for your environment (gcloud, workload identity, etc...)\n", "- Store the path to a service account JSON file as the GOOGLE_APPLICATION_CREDENTIALS environment variable\n", "\n", "This codebase uses the `google.auth` library which first looks for the application credentials variable mentioned above, and then looks for system-level auth.\n", "\n", "For more information, see: \n", "- https://cloud.google.com/docs/authentication/application-default-credentials#GAC\n", "- https://googleapis.dev/python/google-auth/latest/reference/google.auth.html#module-google.auth" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "#!pip install google-cloud-aiplatform" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from langchain.llms import VertexAI" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Question-answering example" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from langchain import PromptTemplate, LLMChain" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "template = \"\"\"Question: {question}\n", "\n", "Answer: Let's think step by step.\"\"\"\n", "\n", "prompt = PromptTemplate(template=template, input_variables=[\"question\"])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "llm = VertexAI()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "llm_chain = LLMChain(prompt=prompt, llm=llm)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Justin Bieber was born on March 1, 1994. The Super Bowl in 1994 was won by the San Francisco 49ers.\\nThe final answer: San Francisco 49ers.'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "question = \"What NFL team won the Super Bowl in the year Justin Beiber was born?\"\n", "\n", "llm_chain.run(question)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code generation example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can now leverage the `Codey API` for code generation within `Vertex AI`. \n", "\n", "The model names are:\n", "- `code-bison`: for code suggestion\n", "- `code-gecko`: for code completion" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2023-06-17T21:16:53.149438Z", "iopub.status.busy": "2023-06-17T21:16:53.149065Z", "iopub.status.idle": "2023-06-17T21:16:53.421824Z", "shell.execute_reply": "2023-06-17T21:16:53.421136Z", "shell.execute_reply.started": "2023-06-17T21:16:53.149415Z" }, "tags": [] }, "outputs": [], "source": [ "llm = VertexAI(model_name=\"code-bison\")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2023-06-17T21:17:11.179077Z", "iopub.status.busy": "2023-06-17T21:17:11.178686Z", "iopub.status.idle": "2023-06-17T21:17:11.182499Z", "shell.execute_reply": "2023-06-17T21:17:11.181895Z", "shell.execute_reply.started": "2023-06-17T21:17:11.179052Z" }, "tags": [] }, "outputs": [], "source": [ "llm_chain = LLMChain(prompt=prompt, llm=llm)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2023-06-17T21:18:47.024785Z", "iopub.status.busy": "2023-06-17T21:18:47.024230Z", "iopub.status.idle": "2023-06-17T21:18:49.352249Z", "shell.execute_reply": "2023-06-17T21:18:49.351695Z", "shell.execute_reply.started": "2023-06-17T21:18:47.024762Z" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'```python\\ndef is_prime(n):\\n \"\"\"\\n Determines if a number is prime.\\n\\n Args:\\n n: The number to be tested.\\n\\n Returns:\\n True if the number is prime, False otherwise.\\n \"\"\"\\n\\n # Check if the number is 1.\\n if n == 1:\\n return False\\n\\n # Check if the number is 2.\\n if n == 2:\\n return True\\n\\n'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "question = \"Write a python function that identifies if the number is a prime number?\"\n", "\n", "llm_chain.run(question)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using models deployed on Vertex Model Garden" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vertex Model Garden [exposes](https://cloud.google.com/vertex-ai/docs/start/explore-models) open-sourced models that can be deployed and served on Vertex AI. If you have successfully deployed a model from Vertex Model Garden, you can find a corresponding Vertex AI [endpoint](https://cloud.google.com/vertex-ai/docs/general/deployment#what_happens_when_you_deploy_a_model) in the console or via API." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from langchain.llms import VertexAIModelGarden" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "llm = VertexAIModelGarden(\n", " project=\"YOUR PROJECT\",\n", " endpoint_id=\"YOUR ENDPOINT_ID\"\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "llm(\"What is the meaning of life?\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Like all LLMs, we can then compose it with other components:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from langchain.prompts import PromptTemplate\n", "\n", "prompt = PromptTemplate.from_template(\"What is the meaning of {thing}?\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "llm_oss_chain = prompt | llm\n", "\n", "llm_oss_chain.invoke({\"thing\": \"life\"})" ] } ], "metadata": { "kernelspec": { "display_name": "poetry-venv", "language": "python", "name": "poetry-venv" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" }, "vscode": { "interpreter": { "hash": "cc99336516f23363341912c6723b01ace86f02e26b4290be1efc0677e2e2ec24" } } }, "nbformat": 4, "nbformat_minor": 4 }