Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy AIS templates from cookbook. #635

Merged
merged 1 commit into from
Dec 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
332 changes: 332 additions & 0 deletions docs/ais-templates/aistudio_gemini_prompt_freeform.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,332 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "Tce3stUlHN0L"
},
"source": [
"##### Copyright 2023 Google LLC"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"cellView": "form",
"id": "tuOe1ymfHZPu"
},
"outputs": [],
"source": [
"# @title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"# you may not use this file except in compliance with the License.\n",
"# You may obtain a copy of the License at\n",
"#\n",
"# https://www.apache.org/licenses/LICENSE-2.0\n",
"#\n",
"# Unless required by applicable law or agreed to in writing, software\n",
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"# See the License for the specific language governing permissions and\n",
"# limitations under the License."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FKwyTRdwB8aW"
},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "RXInneX6xx7c"
},
"outputs": [],
"source": [
"!pip install -U -q \"google-generativeai>=0.8.2\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"cellView": "form",
"id": "kWIuwKG2_oWE"
},
"outputs": [],
"source": [
"# import necessary modules.\n",
"import base64\n",
"import copy\n",
"import json\n",
"import pathlib\n",
"import requests\n",
"\n",
"\n",
"import PIL.Image\n",
"import IPython.display\n",
"from IPython.display import Markdown\n",
"\n",
"try:\n",
" # The SDK will automatically read it from the GOOGLE_API_KEY environment variable.\n",
" # In Colab get the key from Colab-secrets (\"🔑\" in the left panel).\n",
" import os\n",
" from google.colab import userdata\n",
"\n",
" os.environ[\"GOOGLE_API_KEY\"] = userdata.get(\"GOOGLE_API_KEY\")\n",
"except ImportError:\n",
" pass\n",
"\n",
"import google.generativeai as genai\n",
"\n",
"# Parse the arguments\n",
"\n",
"model = \"gemini-1.5-flash\" # @param {isTemplate: true}\n",
"contents_b64 = \"W3sicGFydHMiOiBbeyJ0ZXh0IjogIldoYXQncyBpbiB0aGlzIHBpY3R1cmU/In0sIHsiZmlsZV9kYXRhIjogeyJ1cmwiOiAiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2dlbmVyYXRpdmVhaS1kb3dubG9hZHMvaW1hZ2VzL3Njb25lcy5qcGciLCAibWltZV90eXBlIjogImltYWdlL2pwZWcifX1dfV0=\" # @param {isTemplate: true}\n",
"generation_config_b64 = \"e30=\" # @param {isTemplate: true}\n",
"safety_settings_b64 = \"e30=\" # @param {isTemplate: true}\n",
"\n",
"gais_contents = json.loads(base64.b64decode(contents_b64))\n",
"\n",
"generation_config = json.loads(base64.b64decode(generation_config_b64))\n",
"safety_settings = json.loads(base64.b64decode(safety_settings_b64))\n",
"\n",
"stream = False\n",
"\n",
"# Convert and upload the files\n",
"\n",
"tempfiles = pathlib.Path(f\"tempfiles\")\n",
"tempfiles.mkdir(parents=True, exist_ok=True)\n",
"\n",
"\n",
"drive = None\n",
"def upload_file_data(file_data, index):\n",
" \"\"\"Upload files to the Files API.\n",
"\n",
" For each file, Google AI Studio either sent:\n",
" - a Google Drive ID,\n",
" - a URL,\n",
" - a file path, or\n",
" - The raw bytes (`inline_data`).\n",
"\n",
" The API only understands `inline_data` or it's Files API.\n",
" This code, uploads files to the files API where the API can access them.\n",
" \"\"\"\n",
"\n",
" mime_type = file_data[\"mime_type\"]\n",
" if drive_id := file_data.pop(\"drive_id\", None):\n",
" if drive is None:\n",
" from google.colab import drive\n",
" drive.mount(\"/gdrive\")\n",
"\n",
" path = next(\n",
" pathlib.Path(f\"/gdrive/.shortcut-targets-by-id/{drive_id}\").glob(\"*\")\n",
" )\n",
" print(\"Uploading:\", str(path))\n",
" file_info = genai.upload_file(path=path, mime_type=mime_type)\n",
" file_data[\"file_uri\"] = file_info.uri\n",
" return\n",
"\n",
" if url := file_data.pop(\"url\", None):\n",
" response = requests.get(url)\n",
" data = response.content\n",
" name = url.split(\"/\")[-1]\n",
" path = tempfiles / str(index)\n",
" path.write_bytes(data)\n",
" print(\"Uploading:\", url)\n",
" file_info = genai.upload_file(path, display_name=name, mime_type=mime_type)\n",
" file_data[\"file_uri\"] = file_info.uri\n",
" return\n",
"\n",
" if name := file_data.get(\"filename\", None):\n",
" if not pathlib.Path(name).exists():\n",
" raise IOError(\n",
" f\"local file: `{name}` does not exist. You can upload files \"\n",
" 'to Colab using the file manager (\"📁 Files\" in the left '\n",
" \"toolbar)\"\n",
" )\n",
" file_info = genai.upload_file(path, display_name=name, mime_type=mime_type)\n",
" file_data[\"file_uri\"] = file_info.uri\n",
" return\n",
"\n",
" if \"inline_data\" in file_data:\n",
" return\n",
"\n",
" raise ValueError(\"Either `drive_id`, `url` or `inline_data` must be provided.\")\n",
"\n",
"\n",
"contents = copy.deepcopy(gais_contents)\n",
"\n",
"index = 0\n",
"for content in contents:\n",
" for n, part in enumerate(content[\"parts\"]):\n",
" if file_data := part.get(\"file_data\", None):\n",
" upload_file_data(file_data, index)\n",
" index += 1\n",
"\n",
"import json\n",
"print(json.dumps(contents, indent=4))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "E7zAD69vE92b"
},
"source": [
"## Call `generate_content`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "LB2LxPmAB95V"
},
"outputs": [],
"source": [
"from IPython.display import display\n",
"from IPython.display import Markdown\n",
"\n",
"# Call the model and print the response.\n",
"gemini = genai.GenerativeModel(model_name=model)\n",
"\n",
"response = gemini.generate_content(\n",
" contents,\n",
" generation_config=generation_config,\n",
" safety_settings=safety_settings,\n",
" stream=stream,\n",
")\n",
"\n",
"display(Markdown(response.text))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9c9d345e9868"
},
"source": [
"<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
" <td>\n",
" <a target=\"_blank\" href=\"https://ai.google.dev/gemini-api/docs\"><img src=\"https://ai.google.dev/static/site-assets/images/docs/notebook-site-button.png\" height=\"32\" width=\"32\" />Docs on ai.google.dev</a>\n",
" </td>\n",
" <td>\n",
" <a target=\"_blank\" href=\"https://github.com/google-gemini/cookbook/blob/main/quickstarts\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />More notebooks in the Cookbook</a>\n",
" </td>\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "F91AeeGO1ncU"
},
"source": [
"## [optional] Show the conversation\n",
"\n",
"This section displays the conversation received from Google AI Studio."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"cellView": "form",
"id": "yoL3p3KPylFW"
},
"outputs": [],
"source": [
"# @title Show the conversation, in colab.\n",
"import mimetypes\n",
"\n",
"def show_file(file_data):\n",
" mime_type = file_data[\"mime_type\"]\n",
"\n",
" if drive_id := file_data.get(\"drive_id\", None):\n",
" path = next(\n",
" pathlib.Path(f\"/gdrive/.shortcut-targets-by-id/{drive_id}\").glob(\"*\")\n",
" )\n",
" name = path\n",
" # data = path.read_bytes()\n",
" kwargs = {\"filename\": path}\n",
" elif url := file_data.get(\"url\", None):\n",
" name = url\n",
" kwargs = {\"url\": url}\n",
" # response = requests.get(url)\n",
" # data = response.content\n",
" elif data := file_data.get(\"inline_data\", None):\n",
" name = None\n",
" kwargs = {\"data\": data}\n",
" elif name := file_data.get(\"filename\", None):\n",
" if not pathlib.Path(name).exists():\n",
" raise IOError(\n",
" f\"local file: `{name}` does not exist. You can upload files to \"\n",
" 'Colab using the file manager (\"📁 Files\"in the left toolbar)'\n",
" )\n",
" else:\n",
" raise ValueError(\"Either `drive_id`, `url` or `inline_data` must be provided.\")\n",
"\n",
" print(f\"File:\\n name: {name}\\n mime_type: {mime_type}\\n\")\n",
" return\n",
"\n",
" format = mimetypes.guess_extension(mime_type).strip(\".\")\n",
" if mime_type.startswith(\"image/\"):\n",
" image = IPython.display.Image(**kwargs, width=256)\n",
" IPython.display.display(image)\n",
" print()\n",
" return\n",
"\n",
" if mime_type.startswith(\"audio/\"):\n",
" if len(data) < 2**12:\n",
" audio = IPython.display.Audio(**kwargs)\n",
" IPython.display.display(audio)\n",
" print()\n",
" return\n",
"\n",
" if mime_type.startswith(\"video/\"):\n",
" if len(data) < 2**12:\n",
" audio = IPython.display.Video(**kwargs, mimetype=mime_type)\n",
" IPython.display.display(audio)\n",
" print()\n",
" return\n",
"\n",
" print(f\"File:\\n name: {name}\\n mime_type: {mime_type}\\n\")\n",
"\n",
"\n",
"for content in gais_contents:\n",
" if role := content.get(\"role\", None):\n",
" print(\"Role:\", role, \"\\n\")\n",
"\n",
" for n, part in enumerate(content[\"parts\"]):\n",
" if text := part.get(\"text\", None):\n",
" print(text, \"\\n\")\n",
"\n",
" elif file_data := part.get(\"file_data\", None):\n",
" show_file(file_data)\n",
"\n",
" print(\"-\" * 80, \"\\n\")"
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [
"Tce3stUlHN0L"
],
"name": "aistudio_gemini_prompt_freeform.ipynb",
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Loading
Loading