From 58018c7d62df61f6e035c23aa80314787b321c6e Mon Sep 17 00:00:00 2001 From: David Motsonashvili <davidmotson@google.com> Date: Tue, 12 Dec 2023 09:03:50 -0800 Subject: [PATCH] Initial Commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Daymon <17409137+daymxn@users.noreply.github.com> Co-authored-by: emilypgoogle <110422458+emilypgoogle@users.noreply.github.com> Co-authored-by: Rodrigo Lazo <rlazo@users.noreply.github.com> Co-authored-by: Rosário P. Fernandes <rosariopf@google.com> --- .github/hooks/pre-push | 36 +++ .github/hooks/pre-push.d/formatting.sh | 18 ++ .github/hooks/pre-push.d/licensing.sh | 18 ++ .github/workflows/build_release.yml | 36 +++ .github/workflows/check-code-format.yml | 19 ++ .github/workflows/check-licensing.yml | 19 ++ .github/workflows/check_for_api_changes.yml | 57 ++++ .github/workflows/generate_docs.yml | 36 +++ .github/workflows/unit-tests.yml | 19 ++ .gitignore | 33 ++ CONTRIBUTING.md | 28 ++ DEVELOPING.md | 65 ++++ INSTALL_HOOKS.sh | 31 ++ README.md | 22 ++ build.gradle.kts | 29 ++ change | 23 ++ .../.google/packaging.yaml | 33 ++ generativeai-android-sample/README.md | 34 +++ .../app/build.gradle.kts | 79 +++++ .../app/src/main/AndroidManifest.xml | 40 +++ .../ai/sample/GenerativeAiViewModelFactory.kt | 76 +++++ .../com/google/ai/sample/MainActivity.kt | 68 +++++ .../kotlin/com/google/ai/sample/MenuScreen.kt | 92 ++++++ .../ai/sample/feature/chat/ChatMessage.kt | 30 ++ .../ai/sample/feature/chat/ChatScreen.kt | 222 ++++++++++++++ .../ai/sample/feature/chat/ChatUiState.kt | 39 +++ .../ai/sample/feature/chat/ChatViewModel.kt | 88 ++++++ .../multimodal/PhotoReasoningScreen.kt | 265 ++++++++++++++++ .../multimodal/PhotoReasoningUiState.kt | 47 +++ .../multimodal/PhotoReasoningViewModel.kt | 67 ++++ .../ai/sample/feature/text/SummarizeScreen.kt | 186 ++++++++++++ .../sample/feature/text/SummarizeUiState.kt | 47 +++ .../sample/feature/text/SummarizeViewModel.kt | 72 +++++ .../com/google/ai/sample/ui/theme/Color.kt | 27 ++ .../com/google/ai/sample/ui/theme/Theme.kt | 51 ++++ .../com/google/ai/sample/ui/theme/Type.kt | 34 +++ .../com/google/ai/sample/util/UriSaver.kt | 32 ++ .../res/drawable/ic_launcher_background.xml | 184 +++++++++++ .../res/drawable/ic_launcher_foreground.xml | 44 +++ .../main/res/mipmap-anydpi/ic_launcher.xml | 20 ++ .../res/mipmap-anydpi/ic_launcher_round.xml | 20 ++ .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../app/src/main/res/values/colors.xml | 24 ++ .../app/src/main/res/values/strings.xml | 40 +++ .../app/src/main/res/values/themes.xml | 19 ++ .../app/src/main/res/xml/backup_rules.xml | 28 ++ .../main/res/xml/data_extraction_rules.xml | 34 +++ generativeai-android-sample/build.gradle.kts | 26 ++ generativeai-android-sample/gradle.properties | 15 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + generativeai-android-sample/gradlew | 240 +++++++++++++++ generativeai-android-sample/gradlew.bat | 91 ++++++ .../screenshots/screenshots.png | Bin 0 -> 359162 bytes .../settings.gradle.kts | 35 +++ generativeai/.gitignore | 1 + generativeai/build.gradle.kts | 115 +++++++ generativeai/consumer-rules.pro | 0 generativeai/gradle.properties | 1 + generativeai/proguard-rules.pro | 21 ++ generativeai/public.api | 285 ++++++++++++++++++ .../generativeai/ExampleInstrumentedTest.kt | 38 +++ generativeai/src/main/AndroidManifest.xml | 18 ++ .../com/google/ai/client/generativeai/Chat.kt | 159 ++++++++++ .../ai/client/generativeai/GenerativeModel.kt | 184 +++++++++++ .../internal/api/APIController.kt | 163 ++++++++++ .../generativeai/internal/api/Request.kt | 36 +++ .../generativeai/internal/api/Response.kt | 34 +++ .../generativeai/internal/api/client/Types.kt | 30 ++ .../generativeai/internal/api/server/Types.kt | 99 ++++++ .../generativeai/internal/api/shared/Types.kt | 78 +++++ .../generativeai/internal/util/conversions.kt | 201 ++++++++++++ .../generativeai/internal/util/kotlin.kt | 41 +++ .../client/generativeai/internal/util/ktor.kt | 101 +++++++ .../internal/util/serialization.kt | 84 ++++++ .../client/generativeai/java/ChatFutures.kt | 62 ++++ .../java/GenerativeModelFutures.kt | 89 ++++++ .../generativeai/type/BlockThreshold.kt | 37 +++ .../ai/client/generativeai/type/Candidate.kt | 72 +++++ .../ai/client/generativeai/type/Content.kt | 64 ++++ .../generativeai/type/CountTokensResponse.kt | 26 ++ .../ai/client/generativeai/type/Exceptions.kt | 89 ++++++ .../type/GenerateContentResponse.kt | 66 ++++ .../generativeai/type/GenerationConfig.kt | 82 +++++ .../client/generativeai/type/HarmCategory.kt | 35 +++ .../generativeai/type/HarmProbability.kt | 38 +++ .../ai/client/generativeai/type/Part.kt | 47 +++ .../generativeai/type/PromptFeedback.kt | 43 +++ .../client/generativeai/type/SafetySetting.kt | 25 ++ .../generativeai/GenerativeModelTests.kt | 48 +++ .../generativeai/StreamingSnapshotTests.kt | 154 ++++++++++ .../client/generativeai/UnarySnapshotTests.kt | 128 ++++++++ .../ai/client/generativeai/util/kotlin.kt | 35 +++ .../ai/client/generativeai/util/tests.kt | 175 +++++++++++ .../streaming/failure-empty-content.txt | 1 + .../failure-finish-reason-safety.txt | 2 + .../streaming/failure-http-error.txt | 13 + .../failure-prompt-blocked-safety.txt | 2 + .../failure-recitation-no-content.txt | 6 + .../streaming/success-basic-reply-long.txt | 12 + .../streaming/success-basic-reply-short.txt | 2 + .../streaming/success-citations.txt | 12 + .../streaming/success-quotes-escaped.txt | 7 + .../streaming/success-unknown-enum.txt | 11 + .../unary/failure-empty-content.json | 28 ++ .../unary/failure-finish-reason-safety.json | 54 ++++ .../unary/failure-http-error.json | 13 + .../unary/failure-invalid-response.json | 14 + .../unary/failure-malformed-content.json | 30 ++ .../unary/failure-prompt-blocked-safety.json | 23 ++ .../unary/success-basic-reply-long.json | 54 ++++ .../unary/success-basic-reply-short.json | 54 ++++ .../golden-files/unary/success-citation.json | 70 +++++ .../unary/success-quote-reply.json | 54 ++++ .../unary/success-unknown-enum.json | 52 ++++ gradle.properties | 25 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++++++++ gradlew.bat | 89 ++++++ licenses/APACHE-2.0 | 15 + plugins/README.md | 74 +++++ plugins/build.gradle.kts | 56 ++++ plugins/settings.gradle.kts | 32 ++ .../com/google/gradle/plugins/ApiPlugin.kt | 87 ++++++ .../google/gradle/plugins/ChangelogPlugin.kt | 144 +++++++++ .../google/gradle/plugins/LicensePlugin.kt | 91 ++++++ .../google/gradle/tasks/ApplyLicenseTask.kt | 90 ++++++ .../google/gradle/tasks/FindChangesTask.kt | 51 ++++ .../com/google/gradle/tasks/MakeChangeTask.kt | 61 ++++ .../gradle/tasks/MakeReleaseNotesTask.kt | 77 +++++ .../gradle/tasks/ValidateLicenseTask.kt | 92 ++++++ .../gradle/tasks/WarnAboutApiChangesTask.kt | 100 ++++++ .../java/com/google/gradle/types/Changelog.kt | 52 ++++ .../google/gradle/types/LicenseTemplate.kt | 109 +++++++ .../com/google/gradle/types/LinesChanged.kt | 88 ++++++ .../com/google/gradle/types/ModuleVersion.kt | 233 ++++++++++++++ .../gradle/types/RandomWordsGenerator.kt | 49 +++ .../java/com/google/gradle/util/gradle.kt | 136 +++++++++ .../java/com/google/gradle/util/kotlin.kt | 47 +++ plugins/src/main/resources/words.txt | 251 +++++++++++++++ settings.gradle.kts | 34 +++ 151 files changed, 8735 insertions(+) create mode 100644 .github/hooks/pre-push create mode 100755 .github/hooks/pre-push.d/formatting.sh create mode 100755 .github/hooks/pre-push.d/licensing.sh create mode 100644 .github/workflows/build_release.yml create mode 100644 .github/workflows/check-code-format.yml create mode 100644 .github/workflows/check-licensing.yml create mode 100644 .github/workflows/check_for_api_changes.yml create mode 100644 .github/workflows/generate_docs.yml create mode 100644 .github/workflows/unit-tests.yml create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 DEVELOPING.md create mode 100755 INSTALL_HOOKS.sh create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100755 change create mode 100644 generativeai-android-sample/.google/packaging.yaml create mode 100644 generativeai-android-sample/README.md create mode 100644 generativeai-android-sample/app/build.gradle.kts create mode 100644 generativeai-android-sample/app/src/main/AndroidManifest.xml create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/GenerativeAiViewModelFactory.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MainActivity.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MenuScreen.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatMessage.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatScreen.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatUiState.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatViewModel.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningScreen.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningUiState.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeScreen.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeUiState.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeViewModel.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Color.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Theme.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Type.kt create mode 100644 generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/util/UriSaver.kt create mode 100644 generativeai-android-sample/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 generativeai-android-sample/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 generativeai-android-sample/app/src/main/res/values/colors.xml create mode 100644 generativeai-android-sample/app/src/main/res/values/strings.xml create mode 100644 generativeai-android-sample/app/src/main/res/values/themes.xml create mode 100644 generativeai-android-sample/app/src/main/res/xml/backup_rules.xml create mode 100644 generativeai-android-sample/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 generativeai-android-sample/build.gradle.kts create mode 100644 generativeai-android-sample/gradle.properties create mode 100644 generativeai-android-sample/gradle/wrapper/gradle-wrapper.jar create mode 100644 generativeai-android-sample/gradle/wrapper/gradle-wrapper.properties create mode 100755 generativeai-android-sample/gradlew create mode 100644 generativeai-android-sample/gradlew.bat create mode 100644 generativeai-android-sample/screenshots/screenshots.png create mode 100644 generativeai-android-sample/settings.gradle.kts create mode 100644 generativeai/.gitignore create mode 100644 generativeai/build.gradle.kts create mode 100644 generativeai/consumer-rules.pro create mode 100644 generativeai/gradle.properties create mode 100644 generativeai/proguard-rules.pro create mode 100644 generativeai/public.api create mode 100644 generativeai/src/androidTest/java/com/google/ai/client/generativeai/ExampleInstrumentedTest.kt create mode 100644 generativeai/src/main/AndroidManifest.xml create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/APIController.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Request.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Response.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/client/Types.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/server/Types.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/shared/Types.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/conversions.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/kotlin.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/ktor.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/serialization.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/java/ChatFutures.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/java/GenerativeModelFutures.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/BlockThreshold.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/Candidate.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/Content.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/CountTokensResponse.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/Exceptions.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerateContentResponse.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerationConfig.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmCategory.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmProbability.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/Part.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/PromptFeedback.kt create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/SafetySetting.kt create mode 100644 generativeai/src/test/java/com/google/ai/client/generativeai/GenerativeModelTests.kt create mode 100644 generativeai/src/test/java/com/google/ai/client/generativeai/StreamingSnapshotTests.kt create mode 100644 generativeai/src/test/java/com/google/ai/client/generativeai/UnarySnapshotTests.kt create mode 100644 generativeai/src/test/java/com/google/ai/client/generativeai/util/kotlin.kt create mode 100644 generativeai/src/test/java/com/google/ai/client/generativeai/util/tests.kt create mode 100644 generativeai/src/test/resources/golden-files/streaming/failure-empty-content.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/failure-finish-reason-safety.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/failure-http-error.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/failure-prompt-blocked-safety.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/failure-recitation-no-content.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/success-basic-reply-long.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/success-basic-reply-short.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/success-citations.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/success-quotes-escaped.txt create mode 100644 generativeai/src/test/resources/golden-files/streaming/success-unknown-enum.txt create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-empty-content.json create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-finish-reason-safety.json create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-http-error.json create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-invalid-response.json create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-malformed-content.json create mode 100644 generativeai/src/test/resources/golden-files/unary/failure-prompt-blocked-safety.json create mode 100644 generativeai/src/test/resources/golden-files/unary/success-basic-reply-long.json create mode 100644 generativeai/src/test/resources/golden-files/unary/success-basic-reply-short.json create mode 100644 generativeai/src/test/resources/golden-files/unary/success-citation.json create mode 100644 generativeai/src/test/resources/golden-files/unary/success-quote-reply.json create mode 100644 generativeai/src/test/resources/golden-files/unary/success-unknown-enum.json create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 licenses/APACHE-2.0 create mode 100644 plugins/README.md create mode 100644 plugins/build.gradle.kts create mode 100644 plugins/settings.gradle.kts create mode 100644 plugins/src/main/java/com/google/gradle/plugins/ApiPlugin.kt create mode 100644 plugins/src/main/java/com/google/gradle/plugins/ChangelogPlugin.kt create mode 100644 plugins/src/main/java/com/google/gradle/plugins/LicensePlugin.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/ApplyLicenseTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/FindChangesTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/MakeChangeTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/ValidateLicenseTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/tasks/WarnAboutApiChangesTask.kt create mode 100644 plugins/src/main/java/com/google/gradle/types/Changelog.kt create mode 100644 plugins/src/main/java/com/google/gradle/types/LicenseTemplate.kt create mode 100644 plugins/src/main/java/com/google/gradle/types/LinesChanged.kt create mode 100644 plugins/src/main/java/com/google/gradle/types/ModuleVersion.kt create mode 100644 plugins/src/main/java/com/google/gradle/types/RandomWordsGenerator.kt create mode 100644 plugins/src/main/java/com/google/gradle/util/gradle.kt create mode 100644 plugins/src/main/java/com/google/gradle/util/kotlin.kt create mode 100644 plugins/src/main/resources/words.txt create mode 100644 settings.gradle.kts diff --git a/.github/hooks/pre-push b/.github/hooks/pre-push new file mode 100644 index 00000000..8c91da69 --- /dev/null +++ b/.github/hooks/pre-push @@ -0,0 +1,36 @@ +#!/bin/bash +# Copyright 2023 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 +# +# http://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. +HOOKS_DIR=".git/hooks/pre-push.d" + +for hook in "$HOOKS_DIR"/*; do + "$hook" + EXIT_CODE=$? + + if [ $EXIT_CODE != 0 ]; then + echo "Pre-push hook failed: $hook" + exit $EXIT_CODE + fi +done + +# Check for changes made by the hooks +if ! git diff-index --quiet HEAD --; then + # Stage any changes + git add -u + + # Amend the newly made commit with these changes + git commit --amend --no-edit +fi + +exit 0 diff --git a/.github/hooks/pre-push.d/formatting.sh b/.github/hooks/pre-push.d/formatting.sh new file mode 100755 index 00000000..318e1f66 --- /dev/null +++ b/.github/hooks/pre-push.d/formatting.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright 2023 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 +# +# http://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. +echo "Running ktfmtFormat before push..." +./gradlew ktfmtFormat || exit 1 + +echo "Code formatted successfully." diff --git a/.github/hooks/pre-push.d/licensing.sh b/.github/hooks/pre-push.d/licensing.sh new file mode 100755 index 00000000..fa28dc9f --- /dev/null +++ b/.github/hooks/pre-push.d/licensing.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright 2023 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 +# +# http://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. +echo "Running applyLicense before push..." +./gradlew applyLicense || exit 1 + +echo "License headers successfully." diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml new file mode 100644 index 00000000..ef02da48 --- /dev/null +++ b/.github/workflows/build_release.yml @@ -0,0 +1,36 @@ +# Perform a Gradle `build` which includes `assemble`, `check`, `test` +# of the projects, and uploads the generated artifacts. + +name: Generate release artifacts + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: gradle + - name: Perform a Gradle build + run: ./gradlew generativeai:publishAllPublicationsToMavenRepository + - name: Upload generated artifacts + uses: actions/upload-artifact@v2 + with: + name: google-ai-android + path: generativeai/m2 + retention-days: 5 diff --git a/.github/workflows/check-code-format.yml b/.github/workflows/check-code-format.yml new file mode 100644 index 00000000..c96607eb --- /dev/null +++ b/.github/workflows/check-code-format.yml @@ -0,0 +1,19 @@ +name: Check code format + +on: pull_request + +jobs: + check-format: + runs-on: ubuntu-latest + steps: + - name: Checkout branch + uses: actions/checkout@v3.5.3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: gradle + - name: Run ktfmt + run: | + ./gradlew ktfmtCheck --no-daemon diff --git a/.github/workflows/check-licensing.yml b/.github/workflows/check-licensing.yml new file mode 100644 index 00000000..19f2c270 --- /dev/null +++ b/.github/workflows/check-licensing.yml @@ -0,0 +1,19 @@ +name: Check licensing + +on: pull_request + +jobs: + check-licensing: + runs-on: ubuntu-latest + steps: + - name: Checkout branch + uses: actions/checkout@v3.5.3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: gradle + - name: Run license validator + run: | + ./gradlew validateLicense --no-daemon diff --git a/.github/workflows/check_for_api_changes.yml b/.github/workflows/check_for_api_changes.yml new file mode 100644 index 00000000..5c9b2743 --- /dev/null +++ b/.github/workflows/check_for_api_changes.yml @@ -0,0 +1,57 @@ +name: Check for api changes + +on: pull_request + +jobs: + check-for-api-changes: + runs-on: ubuntu-latest + steps: + - name: Checkout master + uses: actions/checkout@v3.5.3 + with: + ref: ${{ github.base_ref }} + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: gradle + + - name: Update public.api + run: | + ./gradlew updateApi --no-daemon + + - name: Save public.api from master + run: mv generativeai/public.api ~/public.api + + - name: Checkout branch + uses: actions/checkout@v3.5.3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: gradle + + - name: Copy saved api to branch + run: mv ~/public.api generativeai/public.api + + - name: Run api warning task + run: | + ./gradlew warnAboutApiChanges --no-daemon + + - name: Add PR Comment + if: ${{ hashFiles('api_changes.md') != '' }} + uses: marocchino/sticky-pull-request-comment@v2.8.0 + with: + header: api_changes + path: build/api_changes.md + + - name: Remove old PR Comment + if: ${{ hashFiles('api_changes.md') == '' }} + uses: marocchino/sticky-pull-request-comment@v2.8.0 + with: + header: api_changes + delete: true diff --git a/.github/workflows/generate_docs.yml b/.github/workflows/generate_docs.yml new file mode 100644 index 00000000..a5525910 --- /dev/null +++ b/.github/workflows/generate_docs.yml @@ -0,0 +1,36 @@ +# Perform a Gradle `build` which includes `assemble`, `check`, `test` +# of the projects, and uploads the generated artifacts. + +name: Generate docs + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "gen-docs" + gen-docs: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: gradle + - name: Run dokka + run: ./gradlew generativeai:dokkaHtml + - name: Upload generated docs + uses: actions/upload-artifact@v2 + with: + name: google-ai-android + path: generativeai/build/dokka/html + retention-days: 5 diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml new file mode 100644 index 00000000..2ddafab8 --- /dev/null +++ b/.github/workflows/unit-tests.yml @@ -0,0 +1,19 @@ +name: Unit tests + +on: pull_request + +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout branch + uses: actions/checkout@v3.5.3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + cache: gradle + - name: Run tests + run: | + ./gradlew test --no-daemon diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..347e252e --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..ebbb59e5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,28 @@ +# How to Contribute + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution; +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to <https://cla.developers.google.com/> to see +your current agreements on file or to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Community Guidelines + +This project follows +[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). \ No newline at end of file diff --git a/DEVELOPING.md b/DEVELOPING.md new file mode 100644 index 00000000..90ea673e --- /dev/null +++ b/DEVELOPING.md @@ -0,0 +1,65 @@ +# Developing + +## Setting up the repo + +### Git Hooks + +This repo uses git hooks for certain behaviors such as formatting before a push. To install the git +hooks, run the following command at the root of your repo directory: + +```bash +./INSTALL_HOOKS.sh +``` + +## Building and Releasing + +To locally publish the m2 repo: + +`./gradlew generativeai:publishToMavenLocal` + +To generate a releasable m2 repo: + +`./gradlew generativeai:publishAllPublicationsToMavenRepository` + +The m2 repo will be in `generativeai/m2`. + +To generate Dokka: + +`./gradlew generativeai:dokkaHtml` + +The docs will be in `generativeai/build/dokka/html`. + +## Making changes + +When making changes that are intended to invoke a release, it's important to make sure a proper +changelog entry accompanies your change. We use a custom [plugin](./plugins/README.md), alongside an +executable bash script called `change` to better facilitate this process. + +Changes are organized in the `.changes` directory at the root of the repo, and each change pending +a release will be represented as a single file with a seemingly random string of words as a file +name. This file will contain two vital pieces of information; + + - What the change is about (a user displayable message to use in the subsequent release notes) + - The api impact of the change (will this require a major, minor, or patch bump?) + +We have tooling that will automatically determine the impact of your changes, so all you need to do +is run the following command from the root of the repo whenever you want to make a change that will +invoke a release: + +```bash +change "hello world!" +``` + +Alternatively, if you want to invoke a release without adding anything to the release notes come +release time- you can run `change` without specifying a message: + +```bash +change +``` + +Both of these commands should generate a new file under the `.changes` directory with your message +and impact. + + +To learn more, read the section on our changelog plugin in our [plugin readme](./plugins/README.md). + diff --git a/INSTALL_HOOKS.sh b/INSTALL_HOOKS.sh new file mode 100755 index 00000000..3fedaf0d --- /dev/null +++ b/INSTALL_HOOKS.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright 2023 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 +# +# http://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. + +# Define the source and destination directories +SOURCE_DIR=".github/hooks/" +DEST_DIR=".git/hooks/" + +# Check if the source directory exists +if [ -d "$SOURCE_DIR" ]; then + # Copy the files from source to destination + cp -r $SOURCE_DIR $DEST_DIR + + # Change permissions to make the hooks executable + chmod -R 777 $DEST_DIR + + echo "Hooks copied successfully." +else + echo "Source directory does not exist: $SOURCE_DIR" +fi diff --git a/README.md b/README.md new file mode 100644 index 00000000..ea401a43 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# Google AI SDK for Android + +> [!IMPORTANT] +> Thanks for your interest in the Google AI SDKs! **You can start using this SDK and its samples on +> December 13, 2023.** Until then, check out our +> [blog post](https://blog.google/technology/ai/google-gemini-ai/) to learn more about Google's +> Gemini multimodal model. + +The Google AI SDK for Android enables developers to use Google's state-of-the-art generative AI +models (like Gemini) to build AI-powered features and applications. + +*More details and information coming soon!* + +> [!NOTE] +> If you want to access Gemini on-device (Gemini Nano), check out the +> [Google AI Edge SDK for Android](https://android-developers.googleblog.com/2023/12/a-new-foundation-for-ai-on-android.html), +> which is enabled via Android AICore. + +## License + +The contents of this repository are licensed under the +[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..70f47906 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,29 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +plugins { + id("com.android.library") version "8.1.3" apply false + id("org.jetbrains.dokka") version "1.9.10" apply false + kotlin("android") version "1.8.22" apply false + kotlin("plugin.serialization") version "1.9.0" apply false + id("com.ncorti.ktfmt.gradle") version "0.15.1" apply false + id("license-plugin") +} + +license { + template.set(file("licenses/APACHE-2.0")) + include.set(listOf("**/*.kt", "**/*.kts")) +} diff --git a/change b/change new file mode 100755 index 00000000..eff4bc35 --- /dev/null +++ b/change @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright 2023 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 +# +# http://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. + +if [ $# -eq 0 ]; then + ./gradlew makeChange +elif [ "$1" == "release" ] || [ "$1" == "compile" ]; then + ./gradlew makeReleaseNotes +else + MESSAGE="$1" + ./gradlew makeChange -PchangeMessage="${MESSAGE}" +fi diff --git a/generativeai-android-sample/.google/packaging.yaml b/generativeai-android-sample/.google/packaging.yaml new file mode 100644 index 00000000..334e2036 --- /dev/null +++ b/generativeai-android-sample/.google/packaging.yaml @@ -0,0 +1,33 @@ +# Copyright 2023 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. +# +# GOOGLE SAMPLE PACKAGING DATA +# +# This file is used by Google as part of our samples packaging process. +# End users may safely ignore this file. It has no relevance to other systems. +--- +status: PUBLISHED +technologies: [Android, AI, JetpackCompose] +categories: + - Artificial Intelligence + - Machine Learning + - JetpackComposeLayouts +languages: [Kotlin] +solutions: + - Mobile +github: google/generative-ai-android +level: INTERMEDIATE +apiRefs: + - android:androidx.compose.Composable +license: apache2 diff --git a/generativeai-android-sample/README.md b/generativeai-android-sample/README.md new file mode 100644 index 00000000..7e0d3ecb --- /dev/null +++ b/generativeai-android-sample/README.md @@ -0,0 +1,34 @@ +# Google Generative AI Sample for Android (Kotlin) + +This Android sample app demonstrates how to use state-of-the-art +generative AI models (like Gemini) to build AI-powered features and applications. + +To try out this sample app, you need to use latest stable version of Android Studio. +However, if you want to latest lint checks and AI productivity features in Android +Studio use the latest preview version of [Android Studio](https://developer.android.com/studio/preview). + +You can clone this repository or import the project from Android Studio following the steps +[here](https://developer.android.com/jetpack/compose/setup#sample). + +## Screenshots + +<img src="screenshots/screenshots.png" alt="Screenshot"> + +## Requirements + +1. Follow the instructions on Google AI Studio [setup page](https://makersuite.google.com/app/apikey) to obtain an API key. +2. Add your API Key to the `local.properties` file in this format + +```txt +apiKey=YOUR_API_KEY +``` +## Features + +This sample showcases the following API capablilites: +* Generate Text - demonstrates the Text feature from the SDK +* Photo Reasoning - demonstrates the MultiModal feature from the SDK +* Chat - demonstrates the Multi-turn Conversations feature from the SDK + +## Documentation + +You can find the quick start documentation for the Android Generative AI API [here](https://googledevai.google.com/tutorials/android_quickstart). diff --git a/generativeai-android-sample/app/build.gradle.kts b/generativeai-android-sample/app/build.gradle.kts new file mode 100644 index 00000000..ac4e47fa --- /dev/null +++ b/generativeai-android-sample/app/build.gradle.kts @@ -0,0 +1,79 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") +} + +android { + namespace = "com.google.ai.sample" + compileSdk = 34 + + defaultConfig { + applicationId = "com.google.ai.sample" + minSdk = 26 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.5.4" + } +} + +dependencies { + implementation("androidx.core:core-ktx:1.9.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2") + implementation("androidx.activity:activity-compose:1.8.1") + implementation("androidx.navigation:navigation-compose:2.7.5") + + implementation(platform("androidx.compose:compose-bom:2023.10.01")) + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-graphics") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material3:material3") + + implementation("io.coil-kt:coil-compose:2.5.0") + + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) + androidTestImplementation("androidx.compose.ui:ui-test-junit4") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") + + implementation("com.google.ai.client.generativeai:generativeai:0.1.0") +} diff --git a/generativeai-android-sample/app/src/main/AndroidManifest.xml b/generativeai-android-sample/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..0d795b20 --- /dev/null +++ b/generativeai-android-sample/app/src/main/AndroidManifest.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools"> + + <application + android:allowBackup="true" + android:dataExtractionRules="@xml/data_extraction_rules" + android:fullBackupContent="@xml/backup_rules" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + tools:targetApi="31"> + <activity + android:name=".MainActivity" + android:exported="true" + android:label="@string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + +</manifest> diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/GenerativeAiViewModelFactory.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/GenerativeAiViewModelFactory.kt new file mode 100644 index 00000000..519a527d --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/GenerativeAiViewModelFactory.kt @@ -0,0 +1,76 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.CreationExtras +import com.google.ai.client.generativeai.GenerativeModel +import com.google.ai.client.generativeai.type.generationConfig +import com.google.ai.sample.feature.chat.ChatViewModel +import com.google.ai.sample.feature.multimodal.PhotoReasoningViewModel +import com.google.ai.sample.feature.text.SummarizeViewModel + +val GenerativeViewModelFactory = object : ViewModelProvider.Factory { + override fun <T : ViewModel> create( + viewModelClass: Class<T>, + extras: CreationExtras + ): T { + val config = generationConfig { + temperature = 0.7f + } + + return with(viewModelClass) { + when { + isAssignableFrom(SummarizeViewModel::class.java) -> { + // Initialize a GenerativeModel with the `gemini-pro` AI model + // for text generation + val generativeModel = GenerativeModel( + modelName = "gemini-pro", + apiKey = BuildConfig.apiKey, + generationConfig = config + ) + SummarizeViewModel(generativeModel) + } + + isAssignableFrom(PhotoReasoningViewModel::class.java) -> { + // Initialize a GenerativeModel with the `gemini-pro-vision` AI model + // for multimodal text generation + val generativeModel = GenerativeModel( + modelName = "gemini-pro-vision", + apiKey = BuildConfig.apiKey, + generationConfig = config + ) + PhotoReasoningViewModel(generativeModel) + } + + isAssignableFrom(ChatViewModel::class.java) -> { + // Initialize a GenerativeModel with the `gemini-pro` AI model for chat + val generativeModel = GenerativeModel( + modelName = "gemini-pro", + apiKey = BuildConfig.apiKey, + generationConfig = config + ) + ChatViewModel(generativeModel) + } + + else -> + throw IllegalArgumentException("Unknown ViewModel class: ${viewModelClass.name}") + } + } as T + } +} \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MainActivity.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MainActivity.kt new file mode 100644 index 00000000..67ebf68d --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MainActivity.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.google.ai.sample.feature.chat.ChatRoute +import com.google.ai.sample.feature.multimodal.PhotoReasoningRoute +import com.google.ai.sample.feature.text.SummarizeRoute +import com.google.ai.sample.ui.theme.GenerativeAISample + +class MainActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setContent { + GenerativeAISample { + // A surface container using the 'background' color from the theme + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + val navController = rememberNavController() + + NavHost(navController = navController, startDestination = "menu") { + composable("menu") { + MenuScreen(onItemClicked = { routeId -> + navController.navigate(routeId) + }) + } + composable("summarize") { + SummarizeRoute() + } + composable("photo_reasoning") { + PhotoReasoningRoute() + } + composable("chat") { + ChatRoute() + } + } + } + } + } + } +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MenuScreen.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MenuScreen.kt new file mode 100644 index 00000000..eb7800e3 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/MenuScreen.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.Card +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +data class MenuItem( + val routeId: String, + val titleResId: Int, + val descriptionResId: Int +) + +@Composable +fun MenuScreen( + onItemClicked: (String) -> Unit = { } +) { + val menuItems = listOf( + MenuItem("summarize", R.string.menu_summarize_title, R.string.menu_summarize_description), + MenuItem("photo_reasoning", R.string.menu_reason_title, R.string.menu_reason_description), + MenuItem("chat", R.string.menu_chat_title, R.string.menu_chat_description) + ) + LazyColumn( + Modifier + .padding(top = 16.dp, bottom = 16.dp) + ) { + items(menuItems) { menuItem -> + Card( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + Column( + modifier = Modifier + .padding(all = 16.dp) + .fillMaxWidth() + ) { + Text( + text = stringResource(menuItem.titleResId), + style = MaterialTheme.typography.titleMedium + ) + Text( + text = stringResource(menuItem.descriptionResId), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(top = 8.dp) + ) + TextButton( + onClick = { + onItemClicked(menuItem.routeId) + }, + modifier = Modifier.align(Alignment.End) + ) { + Text(text = stringResource(R.string.action_try)) + } + } + } + } + } +} + +@Preview(showSystemUi = true) +@Composable +fun MenuScreenPreview() { + MenuScreen() +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatMessage.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatMessage.kt new file mode 100644 index 00000000..ce76394b --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatMessage.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.chat + +import java.util.UUID + +enum class Participant { + USER, MODEL, ERROR +} + +data class ChatMessage( + val id: String = UUID.randomUUID().toString(), + var text: String = "", + val participant: Participant = Participant.USER, + var isPending: Boolean = false +) diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatScreen.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatScreen.kt new file mode 100644 index 00000000..d18846c3 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatScreen.kt @@ -0,0 +1,222 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.chat + +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Send +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardCapitalization +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import com.google.ai.sample.GenerativeViewModelFactory +import com.google.ai.sample.R +import com.google.ai.sample.ui.theme.GenerativeAISample +import kotlinx.coroutines.launch + +@Composable +internal fun ChatRoute( + chatViewModel: ChatViewModel = viewModel(factory = GenerativeViewModelFactory) +) { + val chatUiState by chatViewModel.uiState.collectAsState() + val listState = rememberLazyListState() + val coroutineScope = rememberCoroutineScope() + + Scaffold( + bottomBar = { + MessageInput( + onSendMessage = { inputText -> + chatViewModel.sendMessage(inputText) + }, + resetScroll = { + coroutineScope.launch { + listState.scrollToItem(0) + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .padding(paddingValues) + .fillMaxSize() + ) { + // Messages List + ChatList(chatUiState.messages, listState) + } + } +} + +@Composable +fun ChatList( + chatMessages: List<ChatMessage>, + listState: LazyListState +) { + LazyColumn( + reverseLayout = true, + state = listState + ) { + items(chatMessages.reversed()) { message -> + ChatBubbleItem(message) + } + } +} + +@Composable +fun ChatBubbleItem( + chatMessage: ChatMessage +) { + val isModelMessage = chatMessage.participant == Participant.MODEL || + chatMessage.participant == Participant.ERROR + + val backgroundColor = when (chatMessage.participant) { + Participant.MODEL -> MaterialTheme.colorScheme.primaryContainer + Participant.USER -> MaterialTheme.colorScheme.tertiaryContainer + Participant.ERROR -> MaterialTheme.colorScheme.errorContainer + } + + val bubbleShape = if (isModelMessage) { + RoundedCornerShape(4.dp, 20.dp, 20.dp, 20.dp) + } else { + RoundedCornerShape(20.dp, 4.dp, 20.dp, 20.dp) + } + + val horizontalAlignment = if (isModelMessage) { + Alignment.Start + } else { + Alignment.End + } + + Column( + horizontalAlignment = horizontalAlignment, + modifier = Modifier + .padding(horizontal = 8.dp, vertical = 4.dp) + .fillMaxWidth() + ) { + Text( + text = chatMessage.participant.name, + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(bottom = 4.dp) + ) + Row { + if (chatMessage.isPending) { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.CenterVertically) + .padding(all = 8.dp) + ) + } + BoxWithConstraints { + Card( + colors = CardDefaults.cardColors(containerColor = backgroundColor), + shape = bubbleShape, + modifier = Modifier.widthIn(0.dp, maxWidth * 0.9f) + ) { + Text( + text = chatMessage.text, + modifier = Modifier.padding(16.dp) + ) + } + } + } + } +} + +@Composable +fun MessageInput( + onSendMessage: (String) -> Unit, + resetScroll: () -> Unit = {} +) { + var userMessage by rememberSaveable { mutableStateOf("") } + + ElevatedCard( + modifier = Modifier + .fillMaxWidth() + ) { + Row( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth() + ) { + OutlinedTextField( + value = userMessage, + label = { Text(stringResource(R.string.chat_label)) }, + onValueChange = { userMessage = it }, + keyboardOptions = KeyboardOptions( + capitalization = KeyboardCapitalization.Sentences, + ), + modifier = Modifier + .align(Alignment.CenterVertically) + .fillMaxWidth() + .weight(0.85f) + ) + IconButton( + onClick = { + if (userMessage.isNotBlank()) { + onSendMessage(userMessage) + userMessage = "" + resetScroll() + } + }, + modifier = Modifier + .padding(start = 16.dp) + .align(Alignment.CenterVertically) + .fillMaxWidth() + .weight(0.15f) + ) { + Icon( + Icons.Default.Send, + contentDescription = stringResource(R.string.action_send), + modifier = Modifier + ) + } + } + } +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatUiState.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatUiState.kt new file mode 100644 index 00000000..2fc56ae2 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatUiState.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.chat + +import androidx.compose.runtime.toMutableStateList + +class ChatUiState( + messages: List<ChatMessage> = emptyList() +) { + private val _messages: MutableList<ChatMessage> = messages.toMutableStateList() + val messages: List<ChatMessage> = _messages + + fun addMessage(msg: ChatMessage) { + _messages.add(msg) + } + + fun replaceLastPendingMessage() { + val lastMessage = _messages.lastOrNull() + lastMessage?.let { + val newMessage = lastMessage.apply { isPending = false } + _messages.removeLast() + _messages.add(newMessage) + } + } +} \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatViewModel.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatViewModel.kt new file mode 100644 index 00000000..dbfa23b5 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/chat/ChatViewModel.kt @@ -0,0 +1,88 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.chat + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.google.ai.client.generativeai.GenerativeModel +import com.google.ai.client.generativeai.type.asTextOrNull +import com.google.ai.client.generativeai.type.content +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +class ChatViewModel( + generativeModel: GenerativeModel +) : ViewModel() { + private val chat = generativeModel.startChat( + history = listOf( + content(role = "user") { text("Hello, I have 2 dogs in my house.") }, + content(role = "model") { text("Great to meet you. What would you like to know?") } + ) + ) + + private val _uiState: MutableStateFlow<ChatUiState> = + MutableStateFlow(ChatUiState(chat.history.map { content -> + // Map the initial messages + ChatMessage( + text = content.parts.first().asTextOrNull() ?: "", + participant = if (content.role == "user") Participant.USER else Participant.MODEL, + isPending = false + ) + })) + val uiState: StateFlow<ChatUiState> = + _uiState.asStateFlow() + + + fun sendMessage(userMessage: String) { + // Add a pending message + _uiState.value.addMessage( + ChatMessage( + text = userMessage, + participant = Participant.USER, + isPending = true + ) + ) + + viewModelScope.launch { + try { + val response = chat.sendMessage(userMessage) + + _uiState.value.replaceLastPendingMessage() + + response.text?.let { modelResponse -> + _uiState.value.addMessage( + ChatMessage( + text = modelResponse, + participant = Participant.MODEL, + isPending = false + ) + ) + } + } catch (e: Exception) { + _uiState.value.replaceLastPendingMessage() + _uiState.value.addMessage( + ChatMessage( + text = e.localizedMessage, + participant = Participant.ERROR + ) + ) + } + } + } +} \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningScreen.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningScreen.kt new file mode 100644 index 00000000..8cc8f94e --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningScreen.kt @@ -0,0 +1,265 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.multimodal + +import android.graphics.drawable.BitmapDrawable +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.PickVisualMediaRequest +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredSize +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material.icons.rounded.Add +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import coil.ImageLoader +import coil.compose.AsyncImage +import coil.request.ImageRequest +import coil.request.SuccessResult +import com.google.ai.sample.GenerativeViewModelFactory +import coil.size.Precision +import com.google.ai.sample.R +import com.google.ai.sample.util.UriSaver +import kotlinx.coroutines.launch + +@Composable +internal fun PhotoReasoningRoute( + viewModel: PhotoReasoningViewModel = viewModel(factory = GenerativeViewModelFactory) +) { + val photoReasoningUiState by viewModel.uiState.collectAsState() + + val coroutineScope = rememberCoroutineScope() + val imageRequestBuilder = ImageRequest.Builder(LocalContext.current) + val imageLoader = ImageLoader.Builder(LocalContext.current).build() + + PhotoReasoningScreen( + uiState = photoReasoningUiState, + onReasonClicked = { inputText, selectedItems -> + coroutineScope.launch { + val bitmaps = selectedItems.mapNotNull { + val imageRequest = imageRequestBuilder + .data(it) + // Scale the image down to 768px for faster uploads + .size(size = 768) + .precision(Precision.EXACT) + .build() + try { + val result = imageLoader.execute(imageRequest) + if (result is SuccessResult) { + return@mapNotNull (result.drawable as BitmapDrawable).bitmap + } else { + return@mapNotNull null + } + } catch (e: Exception) { + return@mapNotNull null + } + } + viewModel.reason(inputText, bitmaps) + } + } + ) +} + +@Composable +fun PhotoReasoningScreen( + uiState: PhotoReasoningUiState = PhotoReasoningUiState.Loading, + onReasonClicked: (String, List<Uri>) -> Unit = { _, _ -> } +) { + var userQuestion by rememberSaveable { mutableStateOf("") } + val imageUris = rememberSaveable(saver = UriSaver()) { mutableStateListOf() } + + val pickMedia = rememberLauncherForActivityResult( + ActivityResultContracts.PickVisualMedia() + ) { imageUri -> + imageUri?.let { + imageUris.add(it) + } + } + + Column( + modifier = Modifier + .padding(all = 16.dp) + .verticalScroll(rememberScrollState()) + ) { + Card( + modifier = Modifier.fillMaxWidth() + ) { + Row( + modifier = Modifier.padding(top = 16.dp) + ) { + IconButton( + onClick = { + pickMedia.launch( + PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) + ) + }, + modifier = Modifier + .padding(all = 4.dp) + .align(Alignment.CenterVertically) + ) { + Icon( + Icons.Rounded.Add, + contentDescription = stringResource(R.string.add_image), + ) + } + OutlinedTextField( + value = userQuestion, + label = { Text(stringResource(R.string.reason_label)) }, + placeholder = { Text(stringResource(R.string.reason_hint)) }, + onValueChange = { userQuestion = it }, + modifier = Modifier + .fillMaxWidth(0.8f) + ) + TextButton( + onClick = { + if (userQuestion.isNotBlank()) { + onReasonClicked(userQuestion, imageUris.toList()) + } + }, + modifier = Modifier + .padding(all = 4.dp) + .align(Alignment.CenterVertically) + ) { + Text(stringResource(R.string.action_go)) + } + } + LazyRow( + modifier = Modifier.padding(all = 8.dp) + ) { + items(imageUris) { imageUri -> + AsyncImage( + model = imageUri, + contentDescription = null, + modifier = Modifier + .padding(4.dp) + .requiredSize(72.dp) + ) + } + } + } + when (uiState) { + PhotoReasoningUiState.Initial -> { + // Nothing is shown + } + + PhotoReasoningUiState.Loading -> { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .align(Alignment.CenterHorizontally) + ) { + CircularProgressIndicator() + } + } + + is PhotoReasoningUiState.Success -> { + Card( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth(), + shape = MaterialTheme.shapes.large, + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.onSecondaryContainer + ) + ) { + Row( + modifier = Modifier + .padding(all = 16.dp) + .fillMaxWidth() + ) { + Icon( + Icons.Outlined.Person, + contentDescription = "Person Icon", + tint = MaterialTheme.colorScheme.onSecondary, + modifier = Modifier + .requiredSize(36.dp) + .drawBehind { + drawCircle(color = Color.White) + } + ) + Text( + text = uiState.outputText, // TODO(thatfiredev): Figure out Markdown support + color = MaterialTheme.colorScheme.onSecondary, + modifier = Modifier + .padding(start = 16.dp) + .fillMaxWidth() + ) + } + } + } + + is PhotoReasoningUiState.Error -> { + Card( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth(), + shape = MaterialTheme.shapes.large, + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.errorContainer + ) + ) { + Text( + text = uiState.errorMessage, + color = MaterialTheme.colorScheme.error, + modifier = Modifier.padding(all = 16.dp) + ) + } + } + } + } +} + +@Composable +@Preview(showSystemUi = true) +fun PhotoReasoningScreenPreview() { + PhotoReasoningScreen() +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningUiState.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningUiState.kt new file mode 100644 index 00000000..8baf4752 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningUiState.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.multimodal + +/** + * A sealed hierarchy describing the state of the text generation. + */ +sealed interface PhotoReasoningUiState { + + /** + * Empty state when the screen is first shown + */ + data object Initial: PhotoReasoningUiState + + /** + * Still loading + */ + data object Loading: PhotoReasoningUiState + + /** + * Text has been generated + */ + data class Success( + val outputText: String + ): PhotoReasoningUiState + + /** + * There was an error generating text + */ + data class Error( + val errorMessage: String + ): PhotoReasoningUiState +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt new file mode 100644 index 00000000..5f5751a7 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/multimodal/PhotoReasoningViewModel.kt @@ -0,0 +1,67 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.multimodal + +import android.graphics.Bitmap +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.google.ai.client.generativeai.GenerativeModel +import com.google.ai.client.generativeai.type.content +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +class PhotoReasoningViewModel( + private val generativeModel: GenerativeModel +) : ViewModel() { + + private val _uiState: MutableStateFlow<PhotoReasoningUiState> = + MutableStateFlow(PhotoReasoningUiState.Initial) + val uiState: StateFlow<PhotoReasoningUiState> = + _uiState.asStateFlow() + + fun reason( + userInput: String, + selectedImages: List<Bitmap> + ) { + _uiState.value = PhotoReasoningUiState.Loading + val prompt = "Look at the image(s), and then answer the following question: $userInput" + + viewModelScope.launch(Dispatchers.IO) { + try { + val inputContent = content { + for (bitmap in selectedImages) { + image(bitmap) + } + text(prompt) + } + + var outputContent = "" + + generativeModel.generateContentStream(inputContent) + .collect { response -> + outputContent += response.text + _uiState.value = PhotoReasoningUiState.Success(outputContent) + } + } catch (e: Exception) { + _uiState.value = PhotoReasoningUiState.Error(e.localizedMessage ?: "") + } + } + } +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeScreen.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeScreen.kt new file mode 100644 index 00000000..dc1ef9ae --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeScreen.kt @@ -0,0 +1,186 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.text + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredSize +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import com.google.ai.sample.GenerativeViewModelFactory +import com.google.ai.sample.R +import com.google.ai.sample.ui.theme.GenerativeAISample + +@Composable +internal fun SummarizeRoute( + summarizeViewModel: SummarizeViewModel = viewModel(factory = GenerativeViewModelFactory) +) { + val summarizeUiState by summarizeViewModel.uiState.collectAsState() + + SummarizeScreen(summarizeUiState, onSummarizeClicked = { inputText -> + summarizeViewModel.summarizeStreaming(inputText) + }) +} + +@Composable +fun SummarizeScreen( + uiState: SummarizeUiState = SummarizeUiState.Loading, + onSummarizeClicked: (String) -> Unit = {} +) { + var textToSummarize by rememberSaveable { mutableStateOf("") } + + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + ) { + ElevatedCard( + modifier = Modifier + .padding(all = 16.dp) + .fillMaxWidth(), + shape = MaterialTheme.shapes.large + ) { + OutlinedTextField( + value = textToSummarize, + label = { Text(stringResource(R.string.summarize_label)) }, + placeholder = { Text(stringResource(R.string.summarize_hint)) }, + onValueChange = { textToSummarize = it }, + modifier = Modifier + .padding(16.dp) + .fillMaxWidth() + ) + TextButton( + onClick = { + if (textToSummarize.isNotBlank()) { + onSummarizeClicked(textToSummarize) + } + }, + modifier = Modifier + .padding(end = 16.dp, bottom = 16.dp) + .align(Alignment.End) + ) { + Text(stringResource(R.string.action_go)) + } + } + + when (uiState) { + SummarizeUiState.Initial -> { + // Nothing is shown + } + + SummarizeUiState.Loading -> { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .align(Alignment.CenterHorizontally) + ) { + CircularProgressIndicator() + } + } + + is SummarizeUiState.Success -> { + Card( + modifier = Modifier + .padding(start = 16.dp, end = 16.dp, bottom = 16.dp) + .fillMaxWidth(), + shape = MaterialTheme.shapes.large, + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.onSecondaryContainer + ) + ) { + Row( + modifier = Modifier + .padding(all = 16.dp) + .fillMaxWidth() + ) { + Icon( + Icons.Outlined.Person, + contentDescription = "Person Icon", + tint = MaterialTheme.colorScheme.onSecondary, + modifier = Modifier + .requiredSize(36.dp) + .drawBehind { + drawCircle(color = Color.White) + } + ) + Text( + text = uiState.outputText, // TODO(thatfiredev): Figure out Markdown support + color = MaterialTheme.colorScheme.onSecondary, + modifier = Modifier + .padding(start = 16.dp) + .fillMaxWidth() + ) + } + } + } + + is SummarizeUiState.Error -> { + Card( + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth(), + shape = MaterialTheme.shapes.large, + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.errorContainer + ) + ) { + Text( + text = uiState.errorMessage, + color = MaterialTheme.colorScheme.error, + modifier = Modifier.padding(all = 16.dp) + ) + } + } + } + } +} + +@Composable +@Preview(showSystemUi = true) +fun SummarizeScreenPreview() { + GenerativeAISample(darkTheme = true) { + SummarizeScreen() + } +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeUiState.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeUiState.kt new file mode 100644 index 00000000..b0598131 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeUiState.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.text + +/** + * A sealed hierarchy describing the state of the text generation. + */ +sealed interface SummarizeUiState { + + /** + * Empty state when the screen is first shown + */ + data object Initial: SummarizeUiState + + /** + * Still loading + */ + data object Loading: SummarizeUiState + + /** + * Text has been generated + */ + data class Success( + val outputText: String + ): SummarizeUiState + + /** + * There was an error generating text + */ + data class Error( + val errorMessage: String + ): SummarizeUiState +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeViewModel.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeViewModel.kt new file mode 100644 index 00000000..f0c20994 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/feature/text/SummarizeViewModel.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.feature.text + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.google.ai.client.generativeai.GenerativeModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +class SummarizeViewModel( + private val generativeModel: GenerativeModel +) : ViewModel() { + + private val _uiState: MutableStateFlow<SummarizeUiState> = + MutableStateFlow(SummarizeUiState.Initial) + val uiState: StateFlow<SummarizeUiState> = + _uiState.asStateFlow() + + fun summarize(inputText: String) { + _uiState.value = SummarizeUiState.Loading + + val prompt = "Summarize the following text for me: $inputText" + + viewModelScope.launch { + // Non-streaming + try { + val response = generativeModel.generateContent(prompt) + response.text?.let { outputContent -> + _uiState.value = SummarizeUiState.Success(outputContent) + } + } catch (e: Exception) { + _uiState.value = SummarizeUiState.Error(e.localizedMessage ?: "") + } + } + } + + fun summarizeStreaming(inputText: String) { + _uiState.value = SummarizeUiState.Loading + + val prompt = "Summarize the following text for me: $inputText" + + viewModelScope.launch { + try { + var outputContent = "" + generativeModel.generateContentStream(prompt) + .collect { response -> + outputContent += response.text + _uiState.value = SummarizeUiState.Success(outputContent) + } + } catch (e: Exception) { + _uiState.value = SummarizeUiState.Error(e.localizedMessage ?: "") + } + } + } +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Color.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Color.kt new file mode 100644 index 00000000..6180c124 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Color.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Theme.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Theme.kt new file mode 100644 index 00000000..db724b52 --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Theme.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.ui.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80, + background = Color(0xFF1C1B1F), +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40, + background = Color(0xFFFFFBFE), +) + +@Composable +fun GenerativeAISample( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit +) { + val colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Type.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Type.kt new file mode 100644 index 00000000..60e75d3f --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/ui/theme/Type.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) +) \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/util/UriSaver.kt b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/util/UriSaver.kt new file mode 100644 index 00000000..199cadff --- /dev/null +++ b/generativeai-android-sample/app/src/main/kotlin/com/google/ai/sample/util/UriSaver.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.sample.util + +import android.net.Uri +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.SaverScope + +/** + * Saves a list of Uris across configuration changes + */ +class UriSaver : Saver<MutableList<Uri>, List<String>> { + override fun restore(value: List<String>): MutableList<Uri> = value.map { + Uri.parse(it) + }.toMutableList() + + override fun SaverScope.save(value: MutableList<Uri>): List<String> = value.map { it.toString() } +} \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_background.xml b/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..cd259e37 --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,184 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="108dp" + android:height="108dp" + android:viewportWidth="108" + android:viewportHeight="108"> + <path + android:fillColor="#3DDC84" + android:pathData="M0,0h108v108h-108z" /> + <path + android:fillColor="#00000000" + android:pathData="M9,0L9,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,0L19,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M29,0L29,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M39,0L39,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M49,0L49,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M59,0L59,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M69,0L69,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M79,0L79,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M89,0L89,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M99,0L99,108" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,9L108,9" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,19L108,19" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,29L108,29" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,39L108,39" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,49L108,49" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,59L108,59" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,69L108,69" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,79L108,79" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,89L108,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M0,99L108,99" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,29L89,29" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,39L89,39" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,49L89,49" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,59L89,59" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,69L89,69" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M19,79L89,79" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M29,19L29,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M39,19L39,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M49,19L49,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M59,19L59,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M69,19L69,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + <path + android:fillColor="#00000000" + android:pathData="M79,19L79,89" + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> +</vector> diff --git a/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_foreground.xml b/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..3ae9094b --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,44 @@ +<!-- Copyright 2023 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 + + http://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. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt" + android:width="108dp" + android:height="108dp" + android:viewportWidth="108" + android:viewportHeight="108"> + <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> + <aapt:attr name="android:fillColor"> + <gradient + android:endX="85.84757" + android:endY="92.4963" + android:startX="42.9492" + android:startY="49.59793" + android:type="linear"> + <item + android:color="#44000000" + android:offset="0.0" /> + <item + android:color="#00000000" + android:offset="1.0" /> + </gradient> + </aapt:attr> + </path> + <path + android:fillColor="#FFFFFF" + android:fillType="nonZero" + android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" + android:strokeWidth="1" + android:strokeColor="#00000000" /> +</vector> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher.xml new file mode 100644 index 00000000..ec0bcbff --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@drawable/ic_launcher_background" /> + <foreground android:drawable="@drawable/ic_launcher_foreground" /> + <monochrome android:drawable="@drawable/ic_launcher_foreground" /> +</adaptive-icon> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml new file mode 100644 index 00000000..ec0bcbff --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@drawable/ic_launcher_background" /> + <foreground android:drawable="@drawable/ic_launcher_foreground" /> + <monochrome android:drawable="@drawable/ic_launcher_foreground" /> +</adaptive-icon> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cm<R)d19?=)E<{+g@mp0C)CAX%7ksNnpX=jPlJEkqD9%o*fC(U7iySOYHHS zCLH@bXPyI|^Z)Mc^PG7Oc+NfBJO`d7p5;U`M53Wbd!w|M(MUoNRc2m{@^!wFKzL?& zx_RAc-^9Azxo%DmXW^9GV0~;n_G9&dym)|QrMEx!y_F=oDunn;1y)cvAc6z{0MHiz zodGIH07w8nF%*bGq9Gv`YHnm80|d1T$uW=u4vGV%tX#>e5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!<r*4*+?g*sysFgiN}}d!-T(>jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#<RA5Hg_mG&BZS>9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG<W<SKpuS2eaDGkL-J- z!+&UV_N0e<DV*|igwqdC*l{lj0T&&`uq=ycU@f9x0i8jzLa(y*X(YV?PCtUw;ks}p z4zFn7N(-OG^(9ot1ZhYISOWe9?+l%f6v41n+j<OM$_uJgNP?ZJy}hEMMH=;WiG4I` zs(bIWwSD<LJnAN(E(Xjr4k(^UYF37F_3f{;E%%FEa&I3I0GbdH@{pD5$m+1PN5CW) zyZ&*9o#8wstdx@^rci;0B4BP2+H4Y<KbJI5L(bXG(k@`Kp=d>8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqro<oln8GL@_6LPC)kg1!M)Y!|NCn7b*0sG zEN=&c2xMM<>a($ne7EUK;#3V<N-jQ7j($tREa0F&-HzYCQtR#fTCZMRN*ZSm;T7a+ zuxa$}zDL8R9wGYkHb$+gJoiM@z+u{u7a_VUBwtd)bPzHxH}C`W=^2PsBr`s7taBMG zm#Ss=-o`)W8%%x%>YkXaew%Kh^3OrMht<?zOY6P}#rBhn_hrWY$_P`{#CBR9w?+E6 zt7r#NN-tjxFY{9q75P<|L<ZJBHwn4FhG(&i>jYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)<UE%?IC0Du41FrE~F_qc8nOq>P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9<vs%8>j@06@(!<!eaZcF<_le1MVaYMg=gRy*f2#IaBH-mJIpy+L z=Gsbhd6=3>{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/generativeai-android-sample/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuH<!ckn_w-(t15itRHmqN0O$B3XH(E|jyV^QXq8=yM`Q**vy zpEpgQd+no=J<Tlv&+_>B%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}<p z;bEy|mw1;}P&gp|0ssKe4*;D3Dlh;r06r}ehC-pC4mGy`3;|+W04+#B4r_x~@mHHy z)H}bD|I2-n_L$pW;*I)~?=#N<)`92&<$3IR`#<SH6@I&FRQa6xBmQ5wPwJ2PAI(ne z$L2Yb@JHxb`+bLk*AjR$^`b?pr|?!6=+AboIQ2D-p)UI7x(J0|5(5~ur$_+)`>C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ<hjKiZs6mOSFB&+cIl`GV$93-<ciUjF#*1^<p~gh ziQ_{)r0dA7$It&Fe=obxu8n!+elxmgqxPbUL!FxW0;AOfqz@8JOz9Qbm)m-9!^7D) z480@BoIIb<oT``+rVla8L)8fXO&6}3P9n4v$`6WG<DUNWuKb9J9rUsAn7d-_YWT^U z{NXl@OAPIJ!>3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^Q<WhKYr9rXr6*~Tmpuq6NjnD6;;NNBGIg-1ZvfACQ4{ocrwM0)?`oL2ts zCXY5KT@`(ir63J0?%+_(-dDgf<6R$u{lCdy6Zi5d+Bf;1OXyD;xe3#Gug*&T|0o41 zD8;$|JvUv&@vsLIH&C5+S{!k&{~Z54^y@9r>X7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!T<mO literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/generativeai-android-sample/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..62b611da081676d42f6c3f78a2c91e7bcedddedb GIT binary patch literal 1772 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 O>FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 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 literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/generativeai-android-sample/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 zcmV-U53%r4Nk&FS4*&pHMM6+kP&il$0000G0001A003VA06|PpNSy@$00HoY|G(*G z+qV7x14$dSO^Re!iqt-AAIE9iwr$(CZQJL$blA4B`>;C3fBY6Q8_YSjb2%a=fc}4E zrSzssacq<^nmW|Rs93PJni30R<8w<(bK_$LO4L?!_OxLl$}K$MUEllnMK|rg=f3;y z*?;3j|Nh>)p0JQ3A~rf(MibH2r+)3cyV1qF&;8m{w-S*y+0mM){KTK^M5}ksc`qX3 zy>rf^b>~l>SSHds8(I@hz3&PD@LmEs4&prkT=BjsBCXTMhN$_)+kvnl0bLKW5rEsj z*d#KXGDB4P&>etx0X+`R19yC=LS)j!mgs5M0L~+o-T~J<oyc-(l&0FxfDJ)vWdrzG zjkHRMCVIq8fJ3SsaN{G0bSezdyMc{>l!p!AJxnGAhV%~rhYUL4hlWhgES3Kb5oA&X z{}?3OBSS-{!v$nCIGj->(-TAG)8LR{htr41^gxsT8yqt2@DEG6Yl`Uma3Nd4;YUoW zTbkYl3CMU5ypMF3EIkYmWL|*BknM`0+Kq6CpvO(y$#j94e+q{vI{Zp8cV_6RK!`&C zo<pW1O@mj#Ba$B1jF9e#KLC$tdVGRA(KNLm5)Z-c3uM|e{5g0;)Z=U1o}r1okeCSe z&690M^SdF4s^BB6+fY=x1U@bvmsd$`X83VHh)V#T!DbU?^&>b$*5Q|$IZ09dW=L!V zw@#2wviu|<#3lgG<y?|hUxpyMg6}AupvayTr}GM=TMW<L9;Z9j*(N<6al*6Nv}pBq zNQh4md`M{`Vm9A~M}$3oY?+A^<^B<?{}o6PDK4EKtBb3wi8R-)jnxf}q~=aYj0C%v z6V$@(vAW|xm9TnOtnNN6L9fN@aGkJpd#vs_IB9lgtah&@ZNCmaMjkgzYeS?|_54^} zTvwWi)xbYv^}ni8L~Kgmjn&V}hKa})-h&Y069PU_u+-A`bU@-Gz>E8GEhcx+zBt`} zOwP8j9X%^f7i_bth4PiJ$LYtFJSCN$3xwDN;8mr*B;CJwBP2G0TMq0uNt7S^DO_wE zepk!Wrn#Z#03j{`c*Rf~y3o7?J}w?tEELRUR2cgxB*Y{LzA#pxHgf}q?u5idu>077 zd^=p)`nA}6e`|@`p?u}YU66PP_MA}Zqqe!c{nK&z%Jwq1N4e_q<#4g^xaz=ao;u|6 zwpRcW2Lax=ZGbx=Q*HhlJ`Ns#Y*r0*%!T?P*TTiX;rb)$CGLz=rSUum$)3Qyv{BL2 zO*=OI2|%(Yz~`pNEOnLp>+?T@glq-DujlIp?hdJeZ7ctP4_OKx|5@EOps3rr(pWzg zK4d3&oN-X2qN(d_MkfwB4I)_)!I_6nj2iA9u^pQ{;GckGLxBGrJUM2Wdda!k)Y>lq zmjws>dVQ*vW9lvEMkiN3wE-__6OWD0txS&Qn0n22cyj4Q*8(nG4!G{6OOwNvsrPIL zCl-$W9UwkEUVuLwyD%|inbOF*xMODZ4VMEVAq_zUxZ+K#Gdqf!DW$5f)?7UNOFMz! zrB~tuu=6X2FE(p^iqgxr+?ZK;=yz`e;C$#_@D9Lj-+TDVOrva>(#*PVbaHO>A)mhl z07OJWCqYC60518$!&c`eNBcBW%GnfaQ*$eazV^2_AW?j)h;J1nUjN(I9=0+!RVx~% z3@Tf!P0TE<o$!VqowG;KvFtwQM{hV`ZE0qrR<w#Ts%&9+`_$a>+98jA?WceK-}A1% zW!K)lyKcGqy#M~})315-A#2NXQ`?6NR#Apo=S!oF=JfpX>iR*49ec{7AN$xxpK{D$ z2d%Fz&rdfSqourN$~Y^NFIMV1CZ?J*bMx~H3k&meGtH@q9ra2vZxmA$S(#jaaj-g4 ztJmxG+DLV<*q<|sDXPp$X>E)#S}Vm&sRaO5P&goh2><}FEdZSXDqsL$06sAkh(e+v zAsBhKSRexgwg6tIy~GFJzaTxXD(}|+0e<LznCgHsU8?@8?t|e+t3NOg)4%V%QT)RG z#(vWKzWPe^0R3j`BK^Sj0R4vax&4^<HvOypv-k`BiT}~o0m7^OSGJ$@KajnJ{#EwN zDeve%EWSc^7qvI|&GkIv!CUKJ?z|=S5$~^*hbW!^KEXeU|8)Of{R8r6<YPXsPJiI{ z3I0p{JN=jUpWV;#UH-pt{fqxv+)or1tENbj$yb}h1W}{VuIxcdxr4O$Pk-W+vE;HW zs>OwFDA%rn`X;MVwDHT9=4=g%OaJ9s%3b9>9EUTnnp0t;2Zpa{*>mk~hZqItE_!dQ zOtC>8`$l|mV43Jbudf0N6&&X;{=z}Zi}d1`2qmJ}i|0*GsulD3>GgQXHN)pkR6sf1 z?5ZU%&xtL}oH;YiAA)d*^Ndw2T$+Mjuzyzz@-SM`9df7LqTxLuIwC~S0092~+=qYv z@*ja;?Wt!T!{U?c*Z0YtGe)XbI&y-?B&G2$`JDM)(dIV9G`Sc#6?sI60de6kv+)Qb zUW~2|WjvJq3TA8`0+sWA3zRhY9a~ow)O~&StBkG2{*{TGiY~S8ep{V&Vo2l<6LWsu z^#p0-v*t2?3&aA1)ozu|%efSR=XnpX$lvT<i5fh}s=@+>eRdKlvM!@|pM5p2w3u-6 zU>}t2xiYLS+{|%C65AzX+23Mtlq?BS&YdYcYsVjoiE&rT>;Necn6l^K)T^lmE`5u{ zm1i+-a-gc;Z&v-{;8r)z6NYfBUv+=_L}ef}qa9FX01)<p5}9zArZ*5BNNPrYJe?q^ zoGwf&5As9!{7(Mh#&*CXqg;f?QnQ-nlaTt)rSHVHCm`47n7&FR=c_u*_Tb`8rUm3H z0O9JxAZpoqT#O$8lO#-qLUxwg2QFpWD)MH~tWW!FJ@rL#Z3X@-EA+a_!T&{YBN@VU z#uLh{fnX}ph>+Aaf+;xj(mL6|JUzGJR1|fnanb%?BPPIp>SCjP|8qE5qJ{=n5<?FH zyc@=a;51oWzuVAcj6pr}S4=V^1y$yRMekrgPiZC)AMQEB*qQt?gOx<6n-Ze<xOk%8 zJlp{hn2r5lN&v>ZGw?8<T=j<kiK3k}QNf{mJrZ8{h9VJ5mymJ}tharUQVZ+A)q|JA zP<4CV&CzPUYMZ;!LAXmAxQKNOUhvT9Hs7xDmh*<vTKo#A=V}0C%3}Bd)|`ucui<U} zkh|*TSU#9=A^@TE$st=m>1z3(k;pzH%1CtlX50{E7h)$h{qGKfzC`e2o`*IqA#tjA z`Fz&^%$b9F*N`)U-#6>a)Z`55`$Dd0cfcs0$d13^ONrdCu9x<t+8g+uSD5W2zwlhC z|JVEzcPV$NtS$c<FJ8rBZ;INEx+Q=2(FJ^S342`@#MjKlFl)sF8^7THVLheX^i?L? z&CPm=G=y+=EKRt@v8Clr<)efd)hKaE^n%ZPKLi%wwD38M$NzP!(WBLE?qcvP01sx9 z&*Nj-pc7`@jq=MVuj=Qp>cv_=n#WQo8stcz3jP9|2EvdI-RhJM3%Q%oM&!OlShM|0 z?gz?<?7WW8=Q%s)y_zh$<gKU|U@-;T<hp_neb-hC9;eMWIi~L=ZQC!2-eBW=SL{}p z$?;Q@X@<Q+-HdRo>wHZSnm45njLtsz8PVT1S&jAlbKg5kVam$p16=EK@Sj4EP0OtH zmJDmdc^v)x>56Qg_wmYHz6h)>kl_h$>0@J!ypv%APmjZTAQVLy6Fu50RGY&JAVNhx zrF_qG6`x9MkT;1S<Ag2tDFJ87lYSIU+mImGAD&|@nwJc#mdqwB-2t$i{E|O|iC+rn zTx&X1e_l?93I&#?`F=sa9qG87|KIc6S%E@vyQNP?qi0>FWo$)l{M$;3qUDn9JwE}z zRl#E_bDRJFii61kPgBybIgp8dNW!Cc1b*^YYk-#oWLJvtM_v^hQx~9?8LD4VFFxBF z3MlrsSC%f9Oupn*ctPL0U1fwfX<e8j*;kJ8_CN6%nCTqo2`3d9Pst}VgQjU)?(M7p zzxo&&R>?`tRhPD{PSLFPQOmIt$mDy0SgpNVvHS+f#Do>h1Gn?LZU9(KaN>Q_=Y*_T zvtD7%_u^^+{g`0VGzg(VZrpVQ<iSLmVH#_?Ygs~6CEv!IHC;9@ugl#8Bd(1@U8J`m zZPR+rwS3E7Io$PJ#u@SZ7*ofWJeNkkZzfy5$#`y(gV@Mrz3MQq!<5HDiA{dy{A6&s zm;xq~CnA00hNM6ID4qQ25IVwnMQJks`iwc)#g`8-cX!e+83#89|3i9nc;W|OlG5lT z#`=rnOh~`2$itxg{QZs*tGy>6Ub5M=tI_p7T93R8@3Zulu3|#{iNcu!oiHxZ4Rf*( zfmiN$$ru(*_Zqn=`Gq#OuHRTSwp7uH_SokR&|)RuW5yo=Z|_4?qU-JU+tpt>!B&Is z@N(=SG;bpV<x5xb4+$A4;kTvxjvLCmS(Qzk7DoqV?c3gPc^$ajYmd|>c;AO@zbmMM zScqq1)b-ZQIrs={oD}|?6y{$HNB1U0^LsBh8JI&3!GBZxOXI<}&5-$lgkAaYqhOTb z?2vEnZ$-kk;*M_17(upJF3%+iH*s0-r{vttXVB2OUwI1s^+G(Ft(U8gYFXC}#P&E^ z>T@C^tS`Z7{6HT4_nF~n>JlZtk5&qDBl6r|^kzQYe`wq!C)n@$c>WOPA61NDFj<<6 zGW71NMMhwAl!U-yqrq2xrSFqRCI8acw7?}3j;ynxo*-b7Co;g5r%^j=H@9({PXXBf z@r>U>>N;E)81wx`B4f%{PB~MHka_);%kBCb(d|Jy5!MqJ%2p`t&@L)4$T2j&-WHvG zv3(uyA_gwqNu(k?jQTtv3dgPKRZoH8prxe7>pQBW5L&dpumS&5Ld2?(sCpJjvc4L5 zEnh&?91WVm)ZdTj=fjJ$<vc{WSJ<ii^$T&iG*Yv9jX<?z?mPY(t5t-1^A0*RQs5X? zYSLjXl&MWC!|=j$?-@JVu!#TF`ZHTW&ulyLWq^6N!VAX2Xmm)BA=Yu5B~k=gi4VJ{ zIG~`oyZBm%<a3bH1xUE^?HI_r5%K8}A8v#m>pPDdgAttLXuke+?KdKxu<Qg!^11Y? cG7e%GKbg~lPT|05mMxkl$h;o@5^?|l06hZIiU0rr literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..28d4b77f9f036a47549d47db79c16788749dca10 GIT binary patch literal 2884 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 literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/generativeai-android-sample/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..9287f5083623b375139afb391af71cc533a7dd37 GIT binary patch literal 5914 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�(p-{x$&=IACIfoAR<Nvvu>!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@<pC<8PLRXJuvO4y>xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5<Pf8lV3fF#Ppu>Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@<t56P}GC(ea zcuDo~%vU?vTqAIp#flPNMI2`5;t8&98^HQwmsAsoPNK_fx^Bggb1WVe*N(RqH8#4x zCQN_rN*!W39u4A)O3%B(eX4-oO~1PlFj1j%A~@Wj>9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`<bqO>pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0x<PZ)*(STjdw~o@Rw-Or2Ax?U!if0^R7qyS!JDYN`R9pBUrvi5{Lgqu za0I&Zd*A54UPC}|lJz-2f!1VYM+A-ElFU{V`W)8LtCk5Mx|)Il)$QH*gA63%JZFt} zGq@eFEWXJ~R>Ps?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeN<ek%udeE*tim(T?PyxRjZ^lIknLzS6Fbvpe_110000002i;2E&u=k literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..aa7d6427e6fa1074b79ccd52ef67ac15c5637e85 GIT binary patch literal 3844 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 G0001O&w8c+ literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/generativeai-android-sample/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..9126ae37cbc3587421d6889eadd1d91fbf1994d4 GIT binary patch literal 7778 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 literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/app/src/main/res/values/colors.xml b/generativeai-android-sample/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..ef8476ee --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/values/colors.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<resources> + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> +</resources> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/values/strings.xml b/generativeai-android-sample/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..94841531 --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/values/strings.xml @@ -0,0 +1,40 @@ +<!-- Copyright 2023 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 + + http://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. +--> +<resources> + <string name="app_name">Generative AI Sample App</string> + <string name="action_go">Go</string> + <string name="action_try">Try it</string> + + <!-- Menu strings --> + <string name="menu_summarize_title">Generate text from text-only input</string> + <string name="menu_summarize_description">Sample app that summarizes text</string> + <string name="menu_reason_title">Generate text from text-and-image input (multimodal)</string> + <string name="menu_reason_description">Sample app for uploading images and asking about them</string> + <string name="menu_chat_title">Build multi-turn conversations (chat)</string> + <string name="menu_chat_description">Sample app demonstrating a conversational UI</string> + + <!-- Summarize sample strings --> + <string name="summarize_label">Text</string> + <string name="summarize_hint">Enter text or a URL to summarize</string> + + <!-- Photo Reasoning sample strings --> + <string name="reason_label">Question</string> + <string name="reason_hint">Upload an image and then ask a question</string> + <string name="add_image">Add Image</string> + + <!-- Chat sample strings --> + <string name="chat_label">Message</string> + <string name="action_send">Send</string> +</resources> diff --git a/generativeai-android-sample/app/src/main/res/values/themes.xml b/generativeai-android-sample/app/src/main/res/values/themes.xml new file mode 100644 index 00000000..d423efff --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/values/themes.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<resources> + + <style name="Theme.Emptything" parent="android:Theme.Material.Light.NoActionBar" /> +</resources> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/xml/backup_rules.xml b/generativeai-android-sample/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 00000000..8aa9e4e9 --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<!-- + Sample backup rules file; uncomment and customize as necessary. + See https://developer.android.com/guide/topics/data/autobackup + for details. + Note: This file is ignored for devices older that API 31 + See https://developer.android.com/about/versions/12/backup-restore +--> +<full-backup-content> + <!-- + <include domain="sharedpref" path="."/> + <exclude domain="sharedpref" path="device.xml"/> +--> +</full-backup-content> \ No newline at end of file diff --git a/generativeai-android-sample/app/src/main/res/xml/data_extraction_rules.xml b/generativeai-android-sample/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 00000000..3723fc1c --- /dev/null +++ b/generativeai-android-sample/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<!-- + Sample data extraction rules file; uncomment and customize as necessary. + See https://developer.android.com/about/versions/12/backup-restore#xml-changes + for details. +--> +<data-extraction-rules> + <cloud-backup> + <!-- TODO: Use <include> and <exclude> to control what is backed up. + <include .../> + <exclude .../> + --> + </cloud-backup> + <!-- + <device-transfer> + <include .../> + <exclude .../> + </device-transfer> + --> +</data-extraction-rules> \ No newline at end of file diff --git a/generativeai-android-sample/build.gradle.kts b/generativeai-android-sample/build.gradle.kts new file mode 100644 index 00000000..2db663ed --- /dev/null +++ b/generativeai-android-sample/build.gradle.kts @@ -0,0 +1,26 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +buildscript { + dependencies { + } +} +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id("com.android.application") version "8.1.0" apply false + id("org.jetbrains.kotlin.android") version "1.9.20" apply false + id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false +} diff --git a/generativeai-android-sample/gradle.properties b/generativeai-android-sample/gradle.properties new file mode 100644 index 00000000..d6469edf --- /dev/null +++ b/generativeai-android-sample/gradle.properties @@ -0,0 +1,15 @@ +## For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx1024m -XX:MaxPermSize=256m + org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +#Tue Nov 07 15:47:18 PST 2023 +android.defaults.buildfeatures.buildconfig=true +android.useAndroidX=true diff --git a/generativeai-android-sample/gradle/wrapper/gradle-wrapper.jar b/generativeai-android-sample/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 LmiCMtn7{r93&V3< literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/gradle/wrapper/gradle-wrapper.properties b/generativeai-android-sample/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e1bef7e8 --- /dev/null +++ b/generativeai-android-sample/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/generativeai-android-sample/gradlew b/generativeai-android-sample/gradlew new file mode 100755 index 00000000..a69d9cb6 --- /dev/null +++ b/generativeai-android-sample/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# 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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/generativeai-android-sample/gradlew.bat b/generativeai-android-sample/gradlew.bat new file mode 100644 index 00000000..53a6b238 --- /dev/null +++ b/generativeai-android-sample/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/generativeai-android-sample/screenshots/screenshots.png b/generativeai-android-sample/screenshots/screenshots.png new file mode 100644 index 0000000000000000000000000000000000000000..156a1eef639aa7b0393ef895e3415166731f6a1b GIT binary patch literal 359162 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 z	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%0Auh8Xyck!jlp+(<;cm>HaQ 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�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 !1Cc?TZjg3#j8(~>6Fim0Kz0<Sj&kC5_*%=<^ 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 Du{uaK literal 0 HcmV?d00001 diff --git a/generativeai-android-sample/settings.gradle.kts b/generativeai-android-sample/settings.gradle.kts new file mode 100644 index 00000000..a290317f --- /dev/null +++ b/generativeai-android-sample/settings.gradle.kts @@ -0,0 +1,35 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +pluginManagement { + repositories { + mavenLocal() + google() + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenLocal() + google() + mavenCentral() + } +} + +rootProject.name = "GenerativeAiSampleApp" +include(":app") diff --git a/generativeai/.gitignore b/generativeai/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/generativeai/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/generativeai/build.gradle.kts b/generativeai/build.gradle.kts new file mode 100644 index 00000000..6cee2c0f --- /dev/null +++ b/generativeai/build.gradle.kts @@ -0,0 +1,115 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +plugins { + id("com.android.library") + id("maven-publish") + id("org.jetbrains.dokka") + id("com.ncorti.ktfmt.gradle") + id("changelog-plugin") + kotlin("android") + kotlin("plugin.serialization") +} + +ktfmt { + googleStyle() +} + +android { + namespace = "com.google.ai.client.generativeai" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + publishing { + singleVariant("release") { + withSourcesJar() + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + + testOptions { + unitTests.isReturnDefaultValues = true + } +} + +dependencies { + implementation("io.ktor:ktor-client-okhttp:2.3.5") + implementation("io.ktor:ktor-client-core:2.3.5") + implementation("io.ktor:ktor-client-content-negotiation:2.3.5") + implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.5") + implementation("io.ktor:ktor-client-logging:2.3.5") + + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") + implementation("androidx.core:core-ktx:1.12.0") + implementation("org.slf4j:slf4j-android:1.7.36") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactive:1.7.3") + implementation("org.reactivestreams:reactive-streams:1.0.3") + + implementation("com.google.guava:listenablefuture:1.0") + implementation("androidx.concurrent:concurrent-futures:1.2.0-alpha02") + implementation("androidx.concurrent:concurrent-futures-ktx:1.2.0-alpha02") + + testImplementation("junit:junit:4.13.2") + testImplementation("io.kotest:kotest-assertions-core:4.0.7") + testImplementation("io.kotest:kotest-assertions-jvm:4.0.7") + testImplementation("io.ktor:ktor-client-mock:2.3.5") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + + dokkaPlugin("org.jetbrains.dokka:android-documentation-plugin:1.9.10") +} + +publishing { + publications { + register<MavenPublication>("release") { + groupId = "com.google.ai.client.generativeai" + artifactId = "generativeai" + version = project.version.toString() + + afterEvaluate { + from(components["release"]) + } + } + } + repositories { + maven { + url = uri("${projectDir}/m2") + } + } +} diff --git a/generativeai/consumer-rules.pro b/generativeai/consumer-rules.pro new file mode 100644 index 00000000..e69de29b diff --git a/generativeai/gradle.properties b/generativeai/gradle.properties new file mode 100644 index 00000000..de55ab65 --- /dev/null +++ b/generativeai/gradle.properties @@ -0,0 +1 @@ +version=0.1.0 diff --git a/generativeai/proguard-rules.pro b/generativeai/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/generativeai/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/generativeai/public.api b/generativeai/public.api new file mode 100644 index 00000000..384f51c0 --- /dev/null +++ b/generativeai/public.api @@ -0,0 +1,285 @@ +public final class com/google/ai/client/generativeai/Chat { + public fun <init> (Lcom/google/ai/client/generativeai/GenerativeModel;Ljava/util/List;)V + public synthetic fun <init> (Lcom/google/ai/client/generativeai/GenerativeModel;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getHistory ()Ljava/util/List; + public final fun sendMessage (Landroid/graphics/Bitmap;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun sendMessage (Lcom/google/ai/client/generativeai/type/Content;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun sendMessage (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun sendMessageStream (Landroid/graphics/Bitmap;)Lkotlinx/coroutines/flow/Flow; + public final fun sendMessageStream (Lcom/google/ai/client/generativeai/type/Content;)Lkotlinx/coroutines/flow/Flow; + public final fun sendMessageStream (Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +} + +public final class com/google/ai/client/generativeai/GenerativeModel { + public fun <init> (Ljava/lang/String;Ljava/lang/String;)V + public fun <init> (Ljava/lang/String;Ljava/lang/String;Lcom/google/ai/client/generativeai/type/GenerationConfig;)V + public fun <init> (Ljava/lang/String;Ljava/lang/String;Lcom/google/ai/client/generativeai/type/GenerationConfig;Ljava/util/List;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Lcom/google/ai/client/generativeai/type/GenerationConfig;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun countTokens (Landroid/graphics/Bitmap;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun countTokens (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun countTokens ([Lcom/google/ai/client/generativeai/type/Content;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun generateContent (Landroid/graphics/Bitmap;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun generateContent (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun generateContent ([Lcom/google/ai/client/generativeai/type/Content;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun generateContentStream (Landroid/graphics/Bitmap;)Lkotlinx/coroutines/flow/Flow; + public final fun generateContentStream (Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; + public final fun generateContentStream ([Lcom/google/ai/client/generativeai/type/Content;)Lkotlinx/coroutines/flow/Flow; + public final fun getApiKey ()Ljava/lang/String; + public final fun getGenerationConfig ()Lcom/google/ai/client/generativeai/type/GenerationConfig; + public final fun getModelName ()Ljava/lang/String; + public final fun getSafetySettings ()Ljava/util/List; + public final fun startChat (Ljava/util/List;)Lcom/google/ai/client/generativeai/Chat; + public static synthetic fun startChat$default (Lcom/google/ai/client/generativeai/GenerativeModel;Ljava/util/List;ILjava/lang/Object;)Lcom/google/ai/client/generativeai/Chat; +} + +public abstract class com/google/ai/client/generativeai/java/ChatFutures { + public static final field Companion Lcom/google/ai/client/generativeai/java/ChatFutures$Companion; + public static final fun from (Lcom/google/ai/client/generativeai/Chat;)Lcom/google/ai/client/generativeai/java/ChatFutures; + public abstract fun sendMessage (Lcom/google/ai/client/generativeai/type/Content;)Lcom/google/common/util/concurrent/ListenableFuture; + public abstract fun sendMessageStream (Lcom/google/ai/client/generativeai/type/Content;)Lorg/reactivestreams/Publisher; +} + +public final class com/google/ai/client/generativeai/java/ChatFutures$Companion { + public final fun from (Lcom/google/ai/client/generativeai/Chat;)Lcom/google/ai/client/generativeai/java/ChatFutures; +} + +public abstract class com/google/ai/client/generativeai/java/GenerativeModelFutures { + public static final field Companion Lcom/google/ai/client/generativeai/java/GenerativeModelFutures$Companion; + public abstract fun countTokens ([Lcom/google/ai/client/generativeai/type/Content;)Lcom/google/common/util/concurrent/ListenableFuture; + public static final fun from (Lcom/google/ai/client/generativeai/GenerativeModel;)Lcom/google/ai/client/generativeai/java/GenerativeModelFutures; + public abstract fun generateContent ([Lcom/google/ai/client/generativeai/type/Content;)Lcom/google/common/util/concurrent/ListenableFuture; + public abstract fun generateContentStream ([Lcom/google/ai/client/generativeai/type/Content;)Lorg/reactivestreams/Publisher; + public abstract fun startChat ()Lcom/google/ai/client/generativeai/java/ChatFutures; + public abstract fun startChat (Ljava/util/List;)Lcom/google/ai/client/generativeai/java/ChatFutures; +} + +public final class com/google/ai/client/generativeai/java/GenerativeModelFutures$Companion { + public final fun from (Lcom/google/ai/client/generativeai/GenerativeModel;)Lcom/google/ai/client/generativeai/java/GenerativeModelFutures; +} + +public final class com/google/ai/client/generativeai/type/BlobPart : com/google/ai/client/generativeai/type/Part { + public fun <init> (Ljava/lang/String;[B)V + public final fun getBlob ()[B + public final fun getMimeType ()Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/BlockReason : java/lang/Enum { + public static final field OTHER Lcom/google/ai/client/generativeai/type/BlockReason; + public static final field SAFETY Lcom/google/ai/client/generativeai/type/BlockReason; + public static final field UNKNOWN Lcom/google/ai/client/generativeai/type/BlockReason; + public static final field UNSPECIFIED Lcom/google/ai/client/generativeai/type/BlockReason; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/BlockReason; + public static fun values ()[Lcom/google/ai/client/generativeai/type/BlockReason; +} + +public final class com/google/ai/client/generativeai/type/BlockThreshold : java/lang/Enum { + public static final field LOW_AND_ABOVE Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static final field MEDIUM_AND_ABOVE Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static final field NONE Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static final field ONLY_HIGH Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static final field UNSPECIFIED Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/BlockThreshold; + public static fun values ()[Lcom/google/ai/client/generativeai/type/BlockThreshold; +} + +public final class com/google/ai/client/generativeai/type/Candidate { + public final fun getCitationMetadata ()Ljava/util/List; + public final fun getContent ()Lcom/google/ai/client/generativeai/type/Content; + public final fun getFinishReason ()Lcom/google/ai/client/generativeai/type/FinishReason; + public final fun getSafetyRatings ()Ljava/util/List; +} + +public final class com/google/ai/client/generativeai/type/CitationMetadata { + public fun <init> (IILjava/lang/String;Ljava/lang/String;)V + public final fun getEndIndex ()I + public final fun getLicense ()Ljava/lang/String; + public final fun getStartIndex ()I + public final fun getUri ()Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/Content { + public fun <init> (Ljava/lang/String;Ljava/util/List;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun <init> (Ljava/util/List;)V + public final fun getParts ()Ljava/util/List; + public final fun getRole ()Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/Content$Builder { + public fun <init> ()V + public final fun addBlob (Ljava/lang/String;[B)Lcom/google/ai/client/generativeai/type/Content$Builder; + public final fun addImage (Landroid/graphics/Bitmap;)Lcom/google/ai/client/generativeai/type/Content$Builder; + public final fun addPart (Lcom/google/ai/client/generativeai/type/Part;)Lcom/google/ai/client/generativeai/type/Content$Builder; + public final fun addText (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/Content$Builder; + public final fun build ()Lcom/google/ai/client/generativeai/type/Content; + public final fun getParts ()Ljava/util/List; + public final fun getRole ()Ljava/lang/String; + public final fun setParts (Ljava/util/List;)V + public final fun setRole (Ljava/lang/String;)V +} + +public final class com/google/ai/client/generativeai/type/ContentKt { + public static final fun content (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/google/ai/client/generativeai/type/Content; + public static synthetic fun content$default (Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lcom/google/ai/client/generativeai/type/Content; +} + +public final class com/google/ai/client/generativeai/type/CountTokensResponse { + public fun <init> (I)V + public final fun component1 ()I + public final fun getTotalTokens ()I +} + +public final class com/google/ai/client/generativeai/type/FinishReason : java/lang/Enum { + public static final field MAX_TOKENS Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field OTHER Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field RECITATION Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field SAFETY Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field STOP Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field UNKNOWN Lcom/google/ai/client/generativeai/type/FinishReason; + public static final field UNSPECIFIED Lcom/google/ai/client/generativeai/type/FinishReason; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/FinishReason; + public static fun values ()[Lcom/google/ai/client/generativeai/type/FinishReason; +} + +public final class com/google/ai/client/generativeai/type/GenerateContentResponse { + public fun <init> (Ljava/util/List;Lcom/google/ai/client/generativeai/type/PromptFeedback;)V + public final fun getCandidates ()Ljava/util/List; + public final fun getPromptFeedback ()Lcom/google/ai/client/generativeai/type/PromptFeedback; + public final fun getText ()Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/GenerationConfig { + public static final field Companion Lcom/google/ai/client/generativeai/type/GenerationConfig$Companion; + public synthetic fun <init> (Ljava/lang/Float;Ljava/lang/Integer;Ljava/lang/Float;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getCandidateCount ()Ljava/lang/Integer; + public final fun getMaxOutputTokens ()Ljava/lang/Integer; + public final fun getStopSequences ()Ljava/util/List; + public final fun getTemperature ()Ljava/lang/Float; + public final fun getTopK ()Ljava/lang/Integer; + public final fun getTopP ()Ljava/lang/Float; +} + +public final class com/google/ai/client/generativeai/type/GenerationConfig$Builder { + public field candidateCount Ljava/lang/Integer; + public field maxOutputTokens Ljava/lang/Integer; + public field stopSequences Ljava/util/List; + public field temperature Ljava/lang/Float; + public field topK Ljava/lang/Integer; + public field topP Ljava/lang/Float; + public fun <init> ()V + public final fun build ()Lcom/google/ai/client/generativeai/type/GenerationConfig; +} + +public final class com/google/ai/client/generativeai/type/GenerationConfig$Companion { + public final fun builder ()Lcom/google/ai/client/generativeai/type/GenerationConfig$Builder; +} + +public final class com/google/ai/client/generativeai/type/GenerationConfigKt { + public static final fun generationConfig (Lkotlin/jvm/functions/Function1;)Lcom/google/ai/client/generativeai/type/GenerationConfig; +} + +public abstract class com/google/ai/client/generativeai/type/GoogleGenerativeAIException : java/lang/RuntimeException { + public static final field Companion Lcom/google/ai/client/generativeai/type/GoogleGenerativeAIException$Companion; + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +} + +public final class com/google/ai/client/generativeai/type/GoogleGenerativeAIException$Companion { + public final fun from (Ljava/lang/Throwable;)Lcom/google/ai/client/generativeai/type/GoogleGenerativeAIException; +} + +public final class com/google/ai/client/generativeai/type/HarmCategory : java/lang/Enum { + public static final field DANGEROUS_CONTENT Lcom/google/ai/client/generativeai/type/HarmCategory; + public static final field HARASSMENT Lcom/google/ai/client/generativeai/type/HarmCategory; + public static final field HATE_SPEECH Lcom/google/ai/client/generativeai/type/HarmCategory; + public static final field SEXUALLY_EXPLICIT Lcom/google/ai/client/generativeai/type/HarmCategory; + public static final field UNKNOWN Lcom/google/ai/client/generativeai/type/HarmCategory; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/HarmCategory; + public static fun values ()[Lcom/google/ai/client/generativeai/type/HarmCategory; +} + +public final class com/google/ai/client/generativeai/type/HarmProbability : java/lang/Enum { + public static final field HIGH Lcom/google/ai/client/generativeai/type/HarmProbability; + public static final field LOW Lcom/google/ai/client/generativeai/type/HarmProbability; + public static final field MEDIUM Lcom/google/ai/client/generativeai/type/HarmProbability; + public static final field NEGLIGIBLE Lcom/google/ai/client/generativeai/type/HarmProbability; + public static final field UNKNOWN Lcom/google/ai/client/generativeai/type/HarmProbability; + public static final field UNSPECIFIED Lcom/google/ai/client/generativeai/type/HarmProbability; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/ai/client/generativeai/type/HarmProbability; + public static fun values ()[Lcom/google/ai/client/generativeai/type/HarmProbability; +} + +public final class com/google/ai/client/generativeai/type/ImagePart : com/google/ai/client/generativeai/type/Part { + public fun <init> (Landroid/graphics/Bitmap;)V + public final fun getImage ()Landroid/graphics/Bitmap; +} + +public final class com/google/ai/client/generativeai/type/InvalidStateException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +} + +public abstract interface class com/google/ai/client/generativeai/type/Part { +} + +public final class com/google/ai/client/generativeai/type/PartKt { + public static final fun asBlobPartOrNull (Lcom/google/ai/client/generativeai/type/Part;)Lcom/google/ai/client/generativeai/type/BlobPart; + public static final fun asImageOrNull (Lcom/google/ai/client/generativeai/type/Part;)Landroid/graphics/Bitmap; + public static final fun asTextOrNull (Lcom/google/ai/client/generativeai/type/Part;)Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/PromptBlockedException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Lcom/google/ai/client/generativeai/type/GenerateContentResponse;Ljava/lang/Throwable;)V + public synthetic fun <init> (Lcom/google/ai/client/generativeai/type/GenerateContentResponse;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getResponse ()Lcom/google/ai/client/generativeai/type/GenerateContentResponse; +} + +public final class com/google/ai/client/generativeai/type/PromptFeedback { + public fun <init> (Lcom/google/ai/client/generativeai/type/BlockReason;Ljava/util/List;)V + public final fun getBlockReason ()Lcom/google/ai/client/generativeai/type/BlockReason; + public final fun getSafetyRatings ()Ljava/util/List; +} + +public final class com/google/ai/client/generativeai/type/ResponseStoppedException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Lcom/google/ai/client/generativeai/type/GenerateContentResponse;Ljava/lang/Throwable;)V + public synthetic fun <init> (Lcom/google/ai/client/generativeai/type/GenerateContentResponse;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getResponse ()Lcom/google/ai/client/generativeai/type/GenerateContentResponse; +} + +public final class com/google/ai/client/generativeai/type/SafetyRating { + public fun <init> (Lcom/google/ai/client/generativeai/type/HarmCategory;Lcom/google/ai/client/generativeai/type/HarmProbability;)V + public final fun getCategory ()Lcom/google/ai/client/generativeai/type/HarmCategory; + public final fun getProbability ()Lcom/google/ai/client/generativeai/type/HarmProbability; +} + +public final class com/google/ai/client/generativeai/type/SafetySetting { + public fun <init> (Lcom/google/ai/client/generativeai/type/HarmCategory;Lcom/google/ai/client/generativeai/type/BlockThreshold;)V + public final fun getHarmCategory ()Lcom/google/ai/client/generativeai/type/HarmCategory; + public final fun getThreshold ()Lcom/google/ai/client/generativeai/type/BlockThreshold; +} + +public final class com/google/ai/client/generativeai/type/SerializationException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +} + +public final class com/google/ai/client/generativeai/type/ServerException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +} + +public final class com/google/ai/client/generativeai/type/TextPart : com/google/ai/client/generativeai/type/Part { + public fun <init> (Ljava/lang/String;)V + public final fun getText ()Ljava/lang/String; +} + +public final class com/google/ai/client/generativeai/type/UnknownException : com/google/ai/client/generativeai/type/GoogleGenerativeAIException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +} + diff --git a/generativeai/src/androidTest/java/com/google/ai/client/generativeai/ExampleInstrumentedTest.kt b/generativeai/src/androidTest/java/com/google/ai/client/generativeai/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..5cfbd5c3 --- /dev/null +++ b/generativeai/src/androidTest/java/com/google/ai/client/generativeai/ExampleInstrumentedTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.* +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.google.ai.client.generativeai.test", appContext.packageName) + } +} diff --git a/generativeai/src/main/AndroidManifest.xml b/generativeai/src/main/AndroidManifest.xml new file mode 100644 index 00000000..e2612fd6 --- /dev/null +++ b/generativeai/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2023 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 + + http://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. +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <uses-permission android:name="android.permission.INTERNET"/> +</manifest> \ No newline at end of file diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt new file mode 100644 index 00000000..dbb76aa0 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt @@ -0,0 +1,159 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import android.graphics.Bitmap +import com.google.ai.client.generativeai.type.BlobPart +import com.google.ai.client.generativeai.type.Content +import com.google.ai.client.generativeai.type.GenerateContentResponse +import com.google.ai.client.generativeai.type.ImagePart +import com.google.ai.client.generativeai.type.InvalidStateException +import com.google.ai.client.generativeai.type.TextPart +import com.google.ai.client.generativeai.type.content +import java.util.LinkedList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.flow.onEach + +/** + * Representation of a back and forth interaction with a model. + * + * Handles the capturing and storage of the communication with the model, providing methods for + * further interaction. + * + * @param model the model to use for the interaction + * @property history the previous interactions with the model + */ +class Chat(private val model: GenerativeModel, val history: MutableList<Content> = ArrayList()) { + + /** + * Generates a response from the backend with the provided [Content], and any previous ones + * sent/returned from this chat. + * + * @param prompt A [Content] to send to the model. + * @throws InvalidStateException if the prompt is not coming from the 'user' role + */ + suspend fun sendMessage(prompt: Content): GenerateContentResponse { + prompt.assertComesFromUser() + + val response = model.generateContent(*history.toTypedArray(), prompt) + + history.add(prompt) + history.add(response.candidates.first().content) + + return response + } + + /** + * Generates a response from the backend with the provided text represented [Content]. + * + * @param prompt The text to be converted into a single piece of [Content] to send to the model. + */ + suspend fun sendMessage(prompt: String): GenerateContentResponse { + val content = content("user") { text(prompt) } + return sendMessage(content) + } + + /** + * Generates a response from the backend with the provided image represented [Content]. + * + * @param prompt The image to be converted into a single piece of [Content] to send to the model. + */ + suspend fun sendMessage(prompt: Bitmap): GenerateContentResponse { + val content = content("user") { image(prompt) } + return sendMessage(content) + } + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A [Content] to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + * @throws InvalidStateException if the prompt is not coming from the 'user' role + */ + fun sendMessageStream(prompt: Content): Flow<GenerateContentResponse> { + prompt.assertComesFromUser() + + val flow = model.generateContentStream(*history.toTypedArray(), prompt) + val bitmaps = LinkedList<Bitmap>() + val blobs = LinkedList<BlobPart>() + val text = StringBuilder() + + /** + * TODO: revisit when images and blobs are returned. This will cause issues with how things are + * structured in the response. eg; a text/image/text response will be (incorrectly) + * represented as image/text + */ + return flow + .onEach { + for (part in it.candidates.first().content.parts) { + when (part) { + is TextPart -> text.append(part.text) + is ImagePart -> bitmaps.add(part.image) + is BlobPart -> blobs.add(part) + } + } + } + .onCompletion { + if (it == null) { + val content = + content("model") { + for (bitmap in bitmaps) { + image(bitmap) + } + for (blob in blobs) { + blob(blob.mimeType, blob.blob) + } + if (text.isNotBlank()) { + text(text.toString()) + } + } + + history.add(prompt) + history.add(content) + } + } + } + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A [Content] to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + */ + fun sendMessageStream(prompt: String): Flow<GenerateContentResponse> { + val content = content("user") { text(prompt) } + return sendMessageStream(content) + } + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A [Content] to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + */ + fun sendMessageStream(prompt: Bitmap): Flow<GenerateContentResponse> { + val content = content("user") { image(prompt) } + return sendMessageStream(content) + } + + private fun Content.assertComesFromUser() { + if (role != "user") { + throw InvalidStateException("Chat prompts should come from the 'user' role.") + } + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt new file mode 100644 index 00000000..15064aa7 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt @@ -0,0 +1,184 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import android.graphics.Bitmap +import com.google.ai.client.generativeai.internal.api.APIController +import com.google.ai.client.generativeai.internal.api.CountTokensRequest +import com.google.ai.client.generativeai.internal.api.GenerateContentRequest +import com.google.ai.client.generativeai.internal.util.toInternal +import com.google.ai.client.generativeai.internal.util.toPublic +import com.google.ai.client.generativeai.type.Content +import com.google.ai.client.generativeai.type.CountTokensResponse +import com.google.ai.client.generativeai.type.FinishReason +import com.google.ai.client.generativeai.type.GenerateContentResponse +import com.google.ai.client.generativeai.type.GenerationConfig +import com.google.ai.client.generativeai.type.GoogleGenerativeAIException +import com.google.ai.client.generativeai.type.PromptBlockedException +import com.google.ai.client.generativeai.type.ResponseStoppedException +import com.google.ai.client.generativeai.type.SafetySetting +import com.google.ai.client.generativeai.type.SerializationException +import com.google.ai.client.generativeai.type.content +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.map + +/** + * A facilitator for a given multimodal model (eg; Gemini). + * + * @property modelName name of the model in the backend + * @property apiKey authentication key for interacting with the backend + * @property generationConfig configuration parameters to use for content generation + * @property safetySettings the safety bounds to use during alongside prompts during content + * generation + */ +class GenerativeModel +internal constructor( + val modelName: String, + val apiKey: String, + val generationConfig: GenerationConfig? = null, + val safetySettings: List<SafetySetting>? = null, + private val controller: APIController +) { + + @JvmOverloads + constructor( + modelName: String, + apiKey: String, + generationConfig: GenerationConfig? = null, + safetySettings: List<SafetySetting>? = null, + ) : this(modelName, apiKey, generationConfig, safetySettings, APIController(apiKey, modelName)) + + /** + * Generates a response from the backend with the provided [Content]s. + * + * @param prompt A group of [Content]s to send to the model. + * @return A [GenerateContentResponse] after some delay. Function should be called within a + * suspend context to properly manage concurrency. + */ + suspend fun generateContent(vararg prompt: Content): GenerateContentResponse = + try { + controller.generateContent(constructRequest(*prompt)).toPublic().validate() + } catch (e: Throwable) { + throw GoogleGenerativeAIException.from(e) + } + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A group of [Content]s to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + */ + fun generateContentStream(vararg prompt: Content): Flow<GenerateContentResponse> = + controller + .generateContentStream(constructRequest(*prompt)) + .map { it.toPublic().validate() } + .catch { throw GoogleGenerativeAIException.from(it) } + + /** + * Generates a response from the backend with the provided text represented [Content]. + * + * @param prompt The text to be converted into a single piece of [Content] to send to the model. + * @return A [GenerateContentResponse] after some delay. Function should be called within a + * suspend context to properly manage concurrency. + */ + suspend fun generateContent(prompt: String): GenerateContentResponse = + generateContent(content { text(prompt) }) + + /** + * Generates a streaming response from the backend with the provided text represented [Content]. + * + * @param prompt The text to be converted into a single piece of [Content] to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + */ + fun generateContentStream(prompt: String): Flow<GenerateContentResponse> = + generateContentStream(content { text(prompt) }) + + /** + * Generates a response from the backend with the provided bitmap represented [Content]. + * + * @param prompt The bitmap to be converted into a single piece of [Content] to send to the model. + * @return A [GenerateContentResponse] after some delay. Function should be called within a + * suspend context to properly manage concurrency. + */ + suspend fun generateContent(prompt: Bitmap): GenerateContentResponse = + generateContent(content { image(prompt) }) + + /** + * Generates a streaming response from the backend with the provided bitmap represented [Content]. + * + * @param prompt The bitmap to be converted into a single piece of [Content] to send to the model. + * @return A [Flow] which will emit responses as they are returned from the model. + */ + fun generateContentStream(prompt: Bitmap): Flow<GenerateContentResponse> = + generateContentStream(content { image(prompt) }) + + /** Creates a chat instance which internally tracks the ongoing conversation with the model */ + fun startChat(history: List<Content> = emptyList()): Chat = Chat(this, history.toMutableList()) + + /** + * Counts the number of tokens used in a prompt. + * + * @param prompt A group of [Content]s to count tokens of. + * @return A [CountTokensResponse] containing the number of tokens in the prompt. + */ + suspend fun countTokens(vararg prompt: Content): CountTokensResponse { + return controller.countTokens(constructCountTokensRequest(*prompt)).toPublic() + } + + /** + * Counts the number of tokens used in a prompt. + * + * @param prompt The text to be converted to a single piece of [Content] to count the tokens of. + * @return A [CountTokensResponse] containing the number of tokens in the prompt. + */ + suspend fun countTokens(prompt: String): CountTokensResponse { + return countTokens(content { text(prompt) }) + } + + /** + * Counts the number of tokens used in a prompt. + * + * @param prompt The image to be converted to a single piece of [Content] to count the tokens of. + * @return A [CountTokensResponse] containing the number of tokens in the prompt. + */ + suspend fun countTokens(prompt: Bitmap): CountTokensResponse { + return countTokens(content { image(prompt) }) + } + + private fun constructRequest(vararg prompt: Content) = + GenerateContentRequest( + modelName, + prompt.map { it.toInternal() }, + safetySettings?.map { it.toInternal() }, + generationConfig?.toInternal() + ) + + private fun constructCountTokensRequest(vararg prompt: Content) = + CountTokensRequest(modelName, prompt.map { it.toInternal() }) + + private fun GenerateContentResponse.validate() = apply { + if (candidates.isEmpty() && promptFeedback == null) { + throw SerializationException("Error deserializing response, found no valid fields") + } + promptFeedback?.blockReason?.let { throw PromptBlockedException(this) } + candidates + .mapNotNull { it.finishReason } + .firstOrNull { it != FinishReason.STOP } + ?.let { throw ResponseStoppedException(this) } + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/APIController.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/APIController.kt new file mode 100644 index 00000000..de299165 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/APIController.kt @@ -0,0 +1,163 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api + +import com.google.ai.client.generativeai.internal.util.decodeToFlow +import com.google.ai.client.generativeai.type.ServerException +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.HttpClientEngine +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.HttpTimeout +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.preparePost +import io.ktor.client.request.setBody +import io.ktor.client.statement.HttpResponse +import io.ktor.client.statement.bodyAsChannel +import io.ktor.client.statement.bodyAsText +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import io.ktor.serialization.kotlinx.json.json +import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.launch +import kotlinx.serialization.json.Json + +// TODO: Should these stay here or be moved elsewhere? +internal const val DOMAIN = "https://generativelanguage.googleapis.com/v1/models" + +internal val JSON = Json { + ignoreUnknownKeys = true + prettyPrint = false +} + +/** + * Backend class for interfacing with the Gemini API. + * + * This class handles making HTTP requests to the API and streaming the responses back. + * + * @param httpEngine The HTTP client engine to be used for making requests. Defaults to CIO engine. + * Exposed primarily for DI in tests. + * @property key The API key used for authentication. + * @property model The model to use for generation. + */ +internal class APIController( + private val key: String, + private val model: String, + httpEngine: HttpClientEngine = OkHttp.create() +) { + private val client = + HttpClient(httpEngine) { + install(HttpTimeout) { + requestTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS + socketTimeoutMillis = 80_000 + } + install(ContentNegotiation) { json(JSON) } + } + + suspend fun generateContent(request: GenerateContentRequest): GenerateContentResponse { + return client + .post("$DOMAIN/$model:generateContent") { applyCommonConfiguration(request) } + .also { validateResponse(it) } + .body() + } + + fun generateContentStream(request: GenerateContentRequest): Flow<GenerateContentResponse> { + return client.postStream("$DOMAIN/$model:streamGenerateContent?alt=sse") { + applyCommonConfiguration(request) + } + } + + suspend fun countTokens(request: CountTokensRequest): CountTokensResponse { + return client + .post("$DOMAIN/$model:countTokens") { applyCommonConfiguration(request) } + .also { validateResponse(it) } + .body() + } + + private fun HttpRequestBuilder.applyCommonConfiguration(request: Request) { + when (request) { + is GenerateContentRequest -> setBody<GenerateContentRequest>(request) + is CountTokensRequest -> setBody<CountTokensRequest>(request) + } + contentType(ContentType.Application.Json) + header("x-goog-api-key", key) + } +} + +/** + * Makes a POST request to the specified [url] and returns a [Flow] of deserialized response objects + * of type [R]. The response is expected to be a stream of JSON objects that are parsed in real-time + * as they are received from the server. + * + * This function is intended for internal use within the client that handles streaming responses. + * + * Example usage: + * ``` + * val client: HttpClient = HttpClient(CIO) + * val request: Request = GenerateContentRequest(...) + * val url: String = "http://example.com/stream" + * + * val responses: GenerateContentResponse = client.postStream(url) { + * setBody(request) + * contentType(ContentType.Application.Json) + * } + * responses.collect { + * println("Got a response: $it") + * } + * ``` + * + * @param R The type of the response object. + * @param url The URL to which the POST request will be made. + * @param config An optional [HttpRequestBuilder] callback for request configuration. + * @return A [Flow] of response objects of type [R]. + */ +private inline fun <reified R : Response> HttpClient.postStream( + url: String, + crossinline config: HttpRequestBuilder.() -> Unit = {} +): Flow<R> = channelFlow { + launch(CoroutineName("postStream")) { + preparePost(url) { config() } + .execute { + validateResponse(it) + + val channel = it.bodyAsChannel() + val flow = JSON.decodeToFlow<R>(channel) + + flow.collect { send(it) } + } + } +} + +private suspend fun validateResponse(response: HttpResponse) { + if (response.status != HttpStatusCode.OK) { + val text = response.bodyAsText() + val message = + try { + JSON.decodeFromString<GRpcErrorResponse>(text).error.message + } catch (e: Throwable) { + "Unexpected Response:\n$text" + } + + throw ServerException(message) + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Request.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Request.kt new file mode 100644 index 00000000..44cbe85d --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Request.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api + +import com.google.ai.client.generativeai.internal.api.client.GenerationConfig +import com.google.ai.client.generativeai.internal.api.shared.Content +import com.google.ai.client.generativeai.internal.api.shared.SafetySetting +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +internal sealed interface Request + +@Serializable +internal data class GenerateContentRequest( + val model: String, + val contents: List<Content>, + @SerialName("safety_settings") val safetySettings: List<SafetySetting>? = null, + @SerialName("generation_config") val generationConfig: GenerationConfig? = null, +) : Request + +@Serializable +internal data class CountTokensRequest(val model: String, val contents: List<Content>) : Request diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Response.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Response.kt new file mode 100644 index 00000000..df142c4f --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/Response.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api + +import com.google.ai.client.generativeai.internal.api.server.Candidate +import com.google.ai.client.generativeai.internal.api.server.GRpcError +import com.google.ai.client.generativeai.internal.api.server.PromptFeedback +import kotlinx.serialization.Serializable + +internal sealed interface Response + +@Serializable +internal data class GenerateContentResponse( + val candidates: List<Candidate>? = null, + val promptFeedback: PromptFeedback? = null, +) : Response + +@Serializable internal data class CountTokensResponse(val totalTokens: Int) : Response + +@Serializable internal data class GRpcErrorResponse(val error: GRpcError) : Response diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/client/Types.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/client/Types.kt new file mode 100644 index 00000000..f1f778bf --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/client/Types.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api.client + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +internal data class GenerationConfig( + val temperature: Float?, + @SerialName("top_p") val topP: Float?, + @SerialName("top_k") val topK: Int?, + @SerialName("candidate_count") val candidateCount: Int?, + @SerialName("max_output_tokens") val maxOutputTokens: Int?, + @SerialName("stop_sequences") val stopSequences: List<String>? +) diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/server/Types.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/server/Types.kt new file mode 100644 index 00000000..9f250dc4 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/server/Types.kt @@ -0,0 +1,99 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api.server + +import com.google.ai.client.generativeai.internal.api.shared.Content +import com.google.ai.client.generativeai.internal.api.shared.HarmCategory +import com.google.ai.client.generativeai.internal.util.FirstOrdinalSerializer +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +internal object BlockReasonSerializer : + KSerializer<BlockReason> by FirstOrdinalSerializer(BlockReason::class) + +internal object HarmProbabilitySerializer : + KSerializer<HarmProbability> by FirstOrdinalSerializer(HarmProbability::class) + +internal object FinishReasonSerializer : + KSerializer<FinishReason> by FirstOrdinalSerializer(FinishReason::class) + +@Serializable +internal data class PromptFeedback( + val blockReason: BlockReason? = null, + val safetyRatings: List<SafetyRating>? = null, +) + +@Serializable(BlockReasonSerializer::class) +internal enum class BlockReason { + UNKNOWN, + @SerialName("BLOCKED_REASON_UNSPECIFIED") UNSPECIFIED, + SAFETY, + OTHER +} + +@Serializable +internal data class Candidate( + val content: Content? = null, + val finishReason: FinishReason? = null, + val safetyRatings: List<SafetyRating>? = null, + val citationMetadata: CitationMetadata? = null +) + +@Serializable internal data class CitationMetadata(val citationSources: List<CitationSources>) + +@Serializable +internal data class CitationSources( + val startIndex: Int, + val endIndex: Int, + val uri: String, + val license: String +) + +@Serializable +internal data class SafetyRating( + val category: HarmCategory, + val probability: HarmProbability, + val blocked: Boolean? = null // TODO(): any reason not to default to false? +) + +@Serializable(HarmProbabilitySerializer::class) +internal enum class HarmProbability { + UNKNOWN, + @SerialName("HARM_PROBABILITY_UNSPECIFIED") UNSPECIFIED, + NEGLIGIBLE, + LOW, + MEDIUM, + HIGH +} + +@Serializable(FinishReasonSerializer::class) +internal enum class FinishReason { + UNKNOWN, + @SerialName("FINISH_REASON_UNSPECIFIED") UNSPECIFIED, + STOP, + MAX_TOKENS, + SAFETY, + RECITATION, + OTHER +} + +@Serializable +internal data class GRpcError( + val code: Int, + val message: String, +) diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/shared/Types.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/shared/Types.kt new file mode 100644 index 00000000..3f15f807 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/api/shared/Types.kt @@ -0,0 +1,78 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.api.shared + +import com.google.ai.client.generativeai.internal.util.FirstOrdinalSerializer +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationException +import kotlinx.serialization.json.JsonContentPolymorphicSerializer +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.jsonObject + +internal object HarmCategorySerializer : + KSerializer<HarmCategory> by FirstOrdinalSerializer(HarmCategory::class) + +@Serializable(HarmCategorySerializer::class) +internal enum class HarmCategory { + UNKNOWN, + @SerialName("HARM_CATEGORY_HARASSMENT") HARASSMENT, + @SerialName("HARM_CATEGORY_HATE_SPEECH") HATE_SPEECH, + @SerialName("HARM_CATEGORY_SEXUALLY_EXPLICIT") SEXUALLY_EXPLICIT, + @SerialName("HARM_CATEGORY_DANGEROUS_CONTENT") DANGEROUS_CONTENT +} + +typealias Base64 = String + +@Serializable internal data class Content(val role: String? = null, val parts: List<Part>) + +@Serializable(PartSerializer::class) internal sealed interface Part + +@Serializable internal data class TextPart(val text: String) : Part + +@Serializable internal data class BlobPart(@SerialName("inline_data") val inlineData: Blob) : Part + +@Serializable +internal data class Blob( + @SerialName("mime_type") val mimeType: String, + val data: Base64, +) + +@Serializable +internal data class SafetySetting(val category: HarmCategory, val threshold: HarmBlockThreshold) + +@Serializable +internal enum class HarmBlockThreshold { + @SerialName("HARM_BLOCK_THRESHOLD_UNSPECIFIED") UNSPECIFIED, + BLOCK_LOW_AND_ABOVE, + BLOCK_MEDIUM_AND_ABOVE, + BLOCK_ONLY_HIGH, + BLOCK_NONE, +} + +internal object PartSerializer : JsonContentPolymorphicSerializer<Part>(Part::class) { + override fun selectDeserializer(element: JsonElement): DeserializationStrategy<Part> { + val jsonObject = element.jsonObject + return when { + "text" in jsonObject -> TextPart.serializer() + "inlineData" in jsonObject -> BlobPart.serializer() + else -> throw SerializationException("Unknown Part type") + } + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/conversions.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/conversions.kt new file mode 100644 index 00000000..19c0332c --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/conversions.kt @@ -0,0 +1,201 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.util + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.util.Base64 +import com.google.ai.client.generativeai.internal.api.CountTokensResponse +import com.google.ai.client.generativeai.internal.api.GenerateContentResponse +import com.google.ai.client.generativeai.internal.api.client.GenerationConfig +import com.google.ai.client.generativeai.internal.api.server.BlockReason +import com.google.ai.client.generativeai.internal.api.server.Candidate +import com.google.ai.client.generativeai.internal.api.server.CitationSources +import com.google.ai.client.generativeai.internal.api.server.FinishReason +import com.google.ai.client.generativeai.internal.api.server.HarmProbability +import com.google.ai.client.generativeai.internal.api.server.PromptFeedback +import com.google.ai.client.generativeai.internal.api.server.SafetyRating +import com.google.ai.client.generativeai.internal.api.shared.Blob +import com.google.ai.client.generativeai.internal.api.shared.BlobPart +import com.google.ai.client.generativeai.internal.api.shared.Content +import com.google.ai.client.generativeai.internal.api.shared.HarmBlockThreshold +import com.google.ai.client.generativeai.internal.api.shared.HarmCategory +import com.google.ai.client.generativeai.internal.api.shared.Part +import com.google.ai.client.generativeai.internal.api.shared.SafetySetting +import com.google.ai.client.generativeai.internal.api.shared.TextPart +import com.google.ai.client.generativeai.type.BlockThreshold +import com.google.ai.client.generativeai.type.CitationMetadata +import com.google.ai.client.generativeai.type.ImagePart +import com.google.ai.client.generativeai.type.SerializationException +import com.google.ai.client.generativeai.type.content +import java.io.ByteArrayOutputStream + +private const val BASE_64_FLAGS = Base64.NO_WRAP + +internal fun com.google.ai.client.generativeai.type.Content.toInternal() = + Content(this.role, this.parts.map { it.toInternal() }) + +internal fun com.google.ai.client.generativeai.type.Part.toInternal(): Part { + return when (this) { + is com.google.ai.client.generativeai.type.TextPart -> TextPart(text) + is ImagePart -> BlobPart(Blob("image/png", encodeBitmapToBase64Png(image))) + is com.google.ai.client.generativeai.type.BlobPart -> + BlobPart(Blob(mimeType, Base64.encodeToString(blob, BASE_64_FLAGS))) + else -> + throw SerializationException( + "The given subclass of Part (${javaClass.simpleName}) is not supported in the serialization yet." + ) + } +} + +internal fun com.google.ai.client.generativeai.type.SafetySetting.toInternal() = + SafetySetting(harmCategory.toInternal(), threshold.toInternal()) + +internal fun com.google.ai.client.generativeai.type.GenerationConfig.toInternal() = + GenerationConfig( + temperature = temperature, + topP = topP, + topK = topK, + candidateCount = candidateCount, + maxOutputTokens = maxOutputTokens, + stopSequences = stopSequences + ) + +internal fun com.google.ai.client.generativeai.type.HarmCategory.toInternal() = + when (this) { + com.google.ai.client.generativeai.type.HarmCategory.HARASSMENT -> HarmCategory.HARASSMENT + com.google.ai.client.generativeai.type.HarmCategory.HATE_SPEECH -> HarmCategory.HATE_SPEECH + com.google.ai.client.generativeai.type.HarmCategory.SEXUALLY_EXPLICIT -> + HarmCategory.SEXUALLY_EXPLICIT + com.google.ai.client.generativeai.type.HarmCategory.DANGEROUS_CONTENT -> + HarmCategory.DANGEROUS_CONTENT + com.google.ai.client.generativeai.type.HarmCategory.UNKNOWN -> HarmCategory.UNKNOWN + } + +internal fun BlockThreshold.toInternal() = + when (this) { + BlockThreshold.NONE -> HarmBlockThreshold.BLOCK_NONE + BlockThreshold.ONLY_HIGH -> HarmBlockThreshold.BLOCK_ONLY_HIGH + BlockThreshold.MEDIUM_AND_ABOVE -> HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE + BlockThreshold.LOW_AND_ABOVE -> HarmBlockThreshold.BLOCK_LOW_AND_ABOVE + BlockThreshold.UNSPECIFIED -> HarmBlockThreshold.UNSPECIFIED + } + +internal fun Candidate.toPublic(): com.google.ai.client.generativeai.type.Candidate { + val safetyRatings = safetyRatings?.map { it.toPublic() }.orEmpty() + val citations = citationMetadata?.citationSources?.map { it.toPublic() }.orEmpty() + val finishReason = finishReason.toPublic() + + return com.google.ai.client.generativeai.type.Candidate( + this.content?.toPublic() ?: content("model") {}, + safetyRatings, + citations, + finishReason + ) +} + +internal fun Content.toPublic(): com.google.ai.client.generativeai.type.Content = + com.google.ai.client.generativeai.type.Content(role, parts.map { it.toPublic() }) + +internal fun Part.toPublic(): com.google.ai.client.generativeai.type.Part { + return when (this) { + is TextPart -> com.google.ai.client.generativeai.type.TextPart(text) + is BlobPart -> { + val data = Base64.decode(inlineData.data, BASE_64_FLAGS) + if (inlineData.mimeType.contains("image")) { + ImagePart(decodeBitmapFromImage(data)) + } else { + com.google.ai.client.generativeai.type.BlobPart(inlineData.mimeType, data) + } + } + } +} + +internal fun CitationSources.toPublic() = + CitationMetadata(startIndex = startIndex, endIndex = endIndex, uri = uri, license = license) + +internal fun SafetyRating.toPublic() = + com.google.ai.client.generativeai.type.SafetyRating(category.toPublic(), probability.toPublic()) + +internal fun PromptFeedback.toPublic(): com.google.ai.client.generativeai.type.PromptFeedback { + val safetyRatings = safetyRatings?.map { it.toPublic() }.orEmpty() + return com.google.ai.client.generativeai.type.PromptFeedback( + blockReason?.toPublic(), + safetyRatings, + ) +} + +internal fun FinishReason?.toPublic() = + when (this) { + null -> null + FinishReason.MAX_TOKENS -> com.google.ai.client.generativeai.type.FinishReason.MAX_TOKENS + FinishReason.RECITATION -> com.google.ai.client.generativeai.type.FinishReason.RECITATION + FinishReason.SAFETY -> com.google.ai.client.generativeai.type.FinishReason.SAFETY + FinishReason.STOP -> com.google.ai.client.generativeai.type.FinishReason.STOP + FinishReason.OTHER -> com.google.ai.client.generativeai.type.FinishReason.OTHER + FinishReason.UNSPECIFIED -> com.google.ai.client.generativeai.type.FinishReason.UNSPECIFIED + FinishReason.UNKNOWN -> com.google.ai.client.generativeai.type.FinishReason.UNKNOWN + } + +internal fun HarmCategory.toPublic() = + when (this) { + HarmCategory.HARASSMENT -> com.google.ai.client.generativeai.type.HarmCategory.HARASSMENT + HarmCategory.HATE_SPEECH -> com.google.ai.client.generativeai.type.HarmCategory.HATE_SPEECH + HarmCategory.SEXUALLY_EXPLICIT -> + com.google.ai.client.generativeai.type.HarmCategory.SEXUALLY_EXPLICIT + HarmCategory.DANGEROUS_CONTENT -> + com.google.ai.client.generativeai.type.HarmCategory.DANGEROUS_CONTENT + HarmCategory.UNKNOWN -> com.google.ai.client.generativeai.type.HarmCategory.UNKNOWN + } + +internal fun HarmProbability.toPublic() = + when (this) { + HarmProbability.HIGH -> com.google.ai.client.generativeai.type.HarmProbability.HIGH + HarmProbability.MEDIUM -> com.google.ai.client.generativeai.type.HarmProbability.MEDIUM + HarmProbability.LOW -> com.google.ai.client.generativeai.type.HarmProbability.LOW + HarmProbability.NEGLIGIBLE -> com.google.ai.client.generativeai.type.HarmProbability.NEGLIGIBLE + HarmProbability.UNSPECIFIED -> + com.google.ai.client.generativeai.type.HarmProbability.UNSPECIFIED + HarmProbability.UNKNOWN -> com.google.ai.client.generativeai.type.HarmProbability.UNKNOWN + } + +internal fun BlockReason.toPublic() = + when (this) { + BlockReason.UNSPECIFIED -> com.google.ai.client.generativeai.type.BlockReason.UNSPECIFIED + BlockReason.SAFETY -> com.google.ai.client.generativeai.type.BlockReason.SAFETY + BlockReason.OTHER -> com.google.ai.client.generativeai.type.BlockReason.OTHER + BlockReason.UNKNOWN -> com.google.ai.client.generativeai.type.BlockReason.UNKNOWN + } + +internal fun GenerateContentResponse.toPublic() = + com.google.ai.client.generativeai.type.GenerateContentResponse( + candidates?.map { it.toPublic() }.orEmpty(), + promptFeedback?.toPublic() + ) + +internal fun CountTokensResponse.toPublic() = + com.google.ai.client.generativeai.type.CountTokensResponse(totalTokens) + +private fun encodeBitmapToBase64Png(input: Bitmap): String { + ByteArrayOutputStream().let { + input.compress(Bitmap.CompressFormat.PNG, 100, it) + return Base64.encodeToString(it.toByteArray(), BASE_64_FLAGS) + } +} + +private fun decodeBitmapFromImage(input: ByteArray) = + BitmapFactory.decodeByteArray(input, 0, input.size) diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/kotlin.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/kotlin.kt new file mode 100644 index 00000000..03d4f20e --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/kotlin.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.util + +import java.lang.reflect.Field + +/** + * Removes the last character from the [StringBuilder]. + * + * If the StringBuilder is empty, calling this function will throw an [IndexOutOfBoundsException]. + * + * @return The [StringBuilder] used to make the call, for optional chaining. + * @throws IndexOutOfBoundsException if the StringBuilder is empty. + */ +internal fun StringBuilder.removeLast(): StringBuilder = + if (isEmpty()) throw IndexOutOfBoundsException("StringBuilder is empty.") + else deleteCharAt(length - 1) + +/** + * A variant of [getAnnotation][Field.getAnnotation] that provides implicit Kotlin support. + * + * Syntax sugar for: + * ``` + * getAnnotation(T::class.java) + * ``` + */ +internal inline fun <reified T : Annotation> Field.getAnnotation() = getAnnotation(T::class.java) diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/ktor.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/ktor.kt new file mode 100644 index 00000000..ae3434e3 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/ktor.kt @@ -0,0 +1,101 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +@file:Suppress("DEPRECATION") // a replacement for our purposes has not been published yet + +package com.google.ai.client.generativeai.internal.util + +import io.ktor.utils.io.ByteChannel +import io.ktor.utils.io.ByteReadChannel +import io.ktor.utils.io.close +import io.ktor.utils.io.readUTF8Line +import io.ktor.utils.io.writeFully +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.serialization.SerializationException +import kotlinx.serialization.json.Json + +/** + * Suspends and processes each line read from the [ByteReadChannel] until the channel is closed for + * read. + * + * This extension function facilitates processing the stream of lines in a manner that takes into + * account EOF/empty strings- and avoids calling [block] as such. + * + * Example usage: + * ``` + * val channel: ByteReadChannel = ByteReadChannel("Hello, World!") + * channel.onEachLine { + * println("Received line: $it") + * } + * ``` + * + * @param block A suspending function to process each line. + */ +internal suspend fun ByteReadChannel.onEachLine(block: suspend (String) -> Unit) { + while (!isClosedForRead) { + awaitContent() + val line = readUTF8Line()?.takeUnless { it.isEmpty() } ?: continue + block(line) + } +} + +/** + * Decodes a stream of JSON elements from the given [ByteReadChannel] into a [Flow] of objects of + * type [T]. + * + * This function takes in a stream of events, each with a set of named parts. Parts are separated by + * an HTTP \r\n newline, events are separated by a double HTTP \r\n\r\n newline. This function + * assumes every event will only contain a named "data" part with a JSON object. Each data JSON is + * decoded into an instance of [T] and emitted as it is read from the channel. + * + * Example usage: + * ``` + * val json = Json { ignoreUnknownKeys = true } // Create a Json instance with any configurations + * val channel: ByteReadChannel = ByteReadChannel("data: {\"name\":\"Alice\"}\r\n\r\ndata: {\"name\":\"Bob\"}]") + * + * json.decodeToFlow<Person>(channel).collect { person -> + * println(person.name) + * } + * ``` + * + * @param T The type of objects to decode from the JSON stream. + * @param channel The [ByteReadChannel] from which the JSON stream will be read. + * @return A [Flow] of objects of type [T]. + * @throws SerializationException in case of any decoding-specific error + * @throws IllegalArgumentException if the decoded input is not a valid instance of [T] + */ +internal inline fun <reified T> Json.decodeToFlow(channel: ByteReadChannel): Flow<T> = channelFlow { + channel.onEachLine { + val data = it.removePrefix("data:") + send(decodeFromString(data)) + } +} + +/** + * Writes the provided [bytes] to the channel and closes it. + * + * Just a wrapper around [writeFully] that closes the channel after writing is complete. + * + * @param bytes the data to send through the channel + */ +internal suspend fun ByteChannel.send(bytes: ByteArray) { + writeFully(bytes) + close() +} + +/** String separator used in SSE communication to signal the end of a message. */ +internal const val SSE_SEPARATOR = "\r\n\r\n" diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/serialization.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/serialization.kt new file mode 100644 index 00000000..76405fe3 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/internal/util/serialization.kt @@ -0,0 +1,84 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.internal.util + +import android.util.Log +import com.google.ai.client.generativeai.type.SerializationException +import kotlin.reflect.KClass +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +/** + * Serializer for enums that defaults to the first ordinal on unknown types. + * + * Convention is that the first enum be named `UNKNOWN`, but any name is valid. + * + * When an unknown enum value is found, the enum itself will be logged to stderr with a message + * about opening an issue on GitHub regarding the new enum value. + */ +internal class FirstOrdinalSerializer<T : Enum<T>>(private val enumClass: KClass<T>) : + KSerializer<T> { + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("FirstOrdinalSerializer") + + override fun deserialize(decoder: Decoder): T { + val name = decoder.decodeString() + val values = enumClass.enumValues() + + return values.firstOrNull { it.serialName == name } + ?: values.first().also { printWarning(name) } + } + + private fun printWarning(name: String) { + Log.e( + "FirstOrdinalSerializer", + """ + |Unknown enum value found: $name" + |This usually means the backend was updated, and the SDK needs to be updated to match it. + |Check if there's a new version for the SDK, otherwise please open an issue on our + |GitHub to bring it to our attention: + |https://github.com/google/google-ai-android + """ + .trimMargin() + ) + } + + override fun serialize(encoder: Encoder, value: T) { + encoder.encodeString(value.serialName) + } +} + +/** + * Provides the name to be used in serialization for this enum value. + * + * By default an enum is serialized to its [name][Enum.name], and can be overwritten by providing a + * [SerialName] annotation. + */ +internal val <T : Enum<T>> T.serialName: String + get() = declaringJavaClass.getField(name).getAnnotation<SerialName>()?.value ?: name + +/** + * Variant of [kotlin.enumValues] that provides support for [KClass] instances of enums. + * + * @throws SerializationException if the class is not a valid enum. Beyond runtime emily magic, this + * shouldn't really be possible. + */ +internal fun <T : Enum<T>> KClass<T>.enumValues(): Array<T> = + java.enumConstants ?: throw SerializationException("$simpleName is not a valid enum type.") diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/java/ChatFutures.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/java/ChatFutures.kt new file mode 100644 index 00000000..615f9cbd --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/java/ChatFutures.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.java + +import androidx.concurrent.futures.SuspendToFutureAdapter +import com.google.ai.client.generativeai.Chat +import com.google.ai.client.generativeai.type.Content +import com.google.ai.client.generativeai.type.GenerateContentResponse +import com.google.common.util.concurrent.ListenableFuture +import kotlinx.coroutines.reactive.asPublisher +import org.reactivestreams.Publisher + +/** + * Helper method for interacting with a [Chat] from Java. + * + * @see from + */ +abstract class ChatFutures internal constructor() { + + /** + * Generates a response from the backend with the provided [Content], and any previous ones + * sent/returned from this chat. + * + * @param prompt A [Content] to send to the model. + */ + abstract fun sendMessage(prompt: Content): ListenableFuture<GenerateContentResponse> + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A [Content] to send to the model. + */ + abstract fun sendMessageStream(prompt: Content): Publisher<GenerateContentResponse> + + private class FuturesImpl(val chat: Chat) : ChatFutures() { + override fun sendMessage(prompt: Content): ListenableFuture<GenerateContentResponse> = + SuspendToFutureAdapter.launchFuture { chat.sendMessage(prompt) } + + override fun sendMessageStream(prompt: Content): Publisher<GenerateContentResponse> = + chat.sendMessageStream(prompt).asPublisher() + } + + companion object { + + /** @return a [ChatFutures] created around the provided [Chat] */ + @JvmStatic fun from(chat: Chat): ChatFutures = FuturesImpl(chat) + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/java/GenerativeModelFutures.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/java/GenerativeModelFutures.kt new file mode 100644 index 00000000..36d2b34a --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/java/GenerativeModelFutures.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.java + +import androidx.concurrent.futures.SuspendToFutureAdapter +import com.google.ai.client.generativeai.GenerativeModel +import com.google.ai.client.generativeai.java.ChatFutures.Companion.from +import com.google.ai.client.generativeai.type.Content +import com.google.ai.client.generativeai.type.CountTokensResponse +import com.google.ai.client.generativeai.type.GenerateContentResponse +import com.google.common.util.concurrent.ListenableFuture +import kotlinx.coroutines.reactive.asPublisher +import org.reactivestreams.Publisher + +/** + * Helper method for interacting with a [GenerativeModel] from Java. + * + * @see from + */ +abstract class GenerativeModelFutures internal constructor() { + + /** + * Generates a response from the backend with the provided [Content]s. + * + * @param prompt A group of [Content]s to send to the model. + */ + abstract fun generateContent(vararg prompt: Content): ListenableFuture<GenerateContentResponse> + + /** + * Generates a streaming response from the backend with the provided [Content]s. + * + * @param prompt A group of [Content]s to send to the model. + */ + abstract fun generateContentStream(vararg prompt: Content): Publisher<GenerateContentResponse> + + /** + * Counts the number of tokens used in a prompt. + * + * @param prompt A group of [Content]s to count tokens of. + */ + abstract fun countTokens(vararg prompt: Content): ListenableFuture<CountTokensResponse> + + /** Creates a chat instance which internally tracks the ongoing conversation with the model */ + abstract fun startChat(): ChatFutures + + /** + * Creates a chat instance which internally tracks the ongoing conversation with the model + * + * @param history an existing history of context to use as a starting point + */ + abstract fun startChat(history: List<Content>): ChatFutures + + private class FuturesImpl(val model: GenerativeModel) : GenerativeModelFutures() { + override fun generateContent( + vararg prompt: Content + ): ListenableFuture<GenerateContentResponse> = + SuspendToFutureAdapter.launchFuture { model.generateContent(*prompt) } + + override fun generateContentStream(vararg prompt: Content): Publisher<GenerateContentResponse> = + model.generateContentStream().asPublisher() + + override fun countTokens(vararg prompt: Content): ListenableFuture<CountTokensResponse> = + SuspendToFutureAdapter.launchFuture { model.countTokens(*prompt) } + + override fun startChat(): ChatFutures = startChat(emptyList()) + + override fun startChat(history: List<Content>): ChatFutures = from(model.startChat(history)) + } + + companion object { + + /** @return a [GenerativeModelFutures] created around the provided [GenerativeModel] */ + @JvmStatic fun from(model: GenerativeModel): GenerativeModelFutures = FuturesImpl(model) + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/BlockThreshold.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/BlockThreshold.kt new file mode 100644 index 00000000..ab4ca534 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/BlockThreshold.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * Represents the threshold for some [HarmCategory] that is allowed and blocked by [SafetySetting]s. + */ +enum class BlockThreshold { + /** The threshold was not specified. */ + UNSPECIFIED, + + /** Content with negligible harm is allowed. */ + LOW_AND_ABOVE, + + /** Content with negligible to low harm is allowed. */ + MEDIUM_AND_ABOVE, + + /** Content with negligible to medium harm is allowed. */ + ONLY_HIGH, + + /** All content is allowed regardless of harm. */ + NONE +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Candidate.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Candidate.kt new file mode 100644 index 00000000..22b38b17 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Candidate.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * A piece of a response from the model. Contains [SafetyRating]s, [CitationMetadata], and an + * optional [FinishReason] in addition to the [Content] of the response. + */ +class Candidate +internal constructor( + val content: Content, + val safetyRatings: List<SafetyRating>, + val citationMetadata: List<CitationMetadata>, + val finishReason: FinishReason? +) + +/** Rating for a particular [HarmCategory] with a provided [HarmProbability]. */ +class SafetyRating(val category: HarmCategory, val probability: HarmProbability) + +/** + * Provides citation metadata for sourcing of content provided by the model between a given + * [startIndex] and [endIndex]. + * + * @property startIndex The beginning of the citation. + * @property endIndex The end of the citation. + * @property uri The URI of the cited work. + * @property license The license under which the cited work is distributed. + */ +class CitationMetadata( + val startIndex: Int, + val endIndex: Int, + val uri: String, + val license: String +) + +/** The reason for content finishing. */ +enum class FinishReason { + /** A new and not yet supported value. */ + UNKNOWN, + + /** Reason is unspecified. */ + UNSPECIFIED, + + /** Model finished successfully and stopped. */ + STOP, + + /** Model hit the token limit. */ + MAX_TOKENS, + + /** [SafetySetting]s prevented the model from outputting content. */ + SAFETY, + + /** Model began looping. */ + RECITATION, + + /** Model stopped for another reason. */ + OTHER +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Content.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Content.kt new file mode 100644 index 00000000..128bfada --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Content.kt @@ -0,0 +1,64 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +import android.graphics.Bitmap + +/** + * Represents content sent to and received from the model. + * + * Contains a collection of text, image, and binary parts. + * + * @see content + */ +class Content @JvmOverloads constructor(val role: String? = null, val parts: List<Part>) { + + class Builder { + var role: String? = null + + var parts: MutableList<Part> = arrayListOf() + + @JvmName("addPart") fun <T : Part> part(data: T) = apply { parts.add(data) } + + @JvmName("addText") fun text(text: String) = part(TextPart(text)) + + @JvmName("addBlob") fun blob(mimeType: String, blob: ByteArray) = part(BlobPart(mimeType, blob)) + + @JvmName("addImage") fun image(image: Bitmap) = part(ImagePart(image)) + + fun build(): Content = Content(role, parts) + } +} + +/** + * Function to construct content sent to and received in a DSL-like manner. + * + * Contains a collection of text, image, and binary parts. + * + * Example usage: + * ``` + * content("user") { + * text("Example string") + * ) + * ``` + */ +fun content(role: String? = null, init: Content.Builder.() -> Unit): Content { + val builder = Content.Builder() + builder.role = role + builder.init() + return builder.build() +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/CountTokensResponse.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/CountTokensResponse.kt new file mode 100644 index 00000000..a2d9255e --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/CountTokensResponse.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * Represents a response measuring model input. + * + * @property totalTokens A count of the number of tokens in the input + */ +class CountTokensResponse(val totalTokens: Int) { + operator fun component1() = totalTokens +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Exceptions.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Exceptions.kt new file mode 100644 index 00000000..f8fefb68 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Exceptions.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +import com.google.ai.client.generativeai.GenerativeModel +import io.ktor.serialization.JsonConvertException + +/** Parent class for any errors that occur from [GenerativeModel]. */ +sealed class GoogleGenerativeAIException(message: String, cause: Throwable? = null) : + RuntimeException(message, cause) { + companion object { + + /** + * Converts a [Throwable] to a [GoogleGenerativeAIException]. + * + * Will populate default messages as expected, and propagate the provided [cause] through the + * resulting exception. + */ + fun from(cause: Throwable): GoogleGenerativeAIException = + when (cause) { + is GoogleGenerativeAIException -> cause + is JsonConvertException, + is kotlinx.serialization.SerializationException -> + SerializationException( + "Something went wrong while trying to deserialize a response from the server.", + cause + ) + else -> UnknownException("Something unexpected happened.", cause) + } + } +} + +/** Something went wrong while trying to deserialize a response from the server. */ +class SerializationException(message: String, cause: Throwable? = null) : + GoogleGenerativeAIException(message, cause) + +/** The server responded with a non 200 response code. */ +class ServerException(message: String, cause: Throwable? = null) : + GoogleGenerativeAIException(message, cause) + +/** + * A request was blocked for some reason. + * + * See the [response's][response] `promptFeedback.blockReason` for more information. + * + * @property response the full server response for the request. + */ +class PromptBlockedException(val response: GenerateContentResponse, cause: Throwable? = null) : + GoogleGenerativeAIException( + "Prompt was blocked: ${response.promptFeedback?.blockReason?.name}", + cause + ) + +/** + * Some form of state occurred that shouldn't have. + * + * Usually indicative of consumer error. + */ +class InvalidStateException(message: String, cause: Throwable? = null) : + GoogleGenerativeAIException(message, cause) + +/** + * A request was stopped during generation for some reason. + * + * @property response the full server response for the request + */ +class ResponseStoppedException(val response: GenerateContentResponse, cause: Throwable? = null) : + GoogleGenerativeAIException( + "Content generation stopped. Reason: ${response.candidates.first().finishReason?.name}", + cause + ) + +/** Catch all case for exceptions not explicitly expected. */ +class UnknownException(message: String, cause: Throwable? = null) : + GoogleGenerativeAIException(message, cause) diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerateContentResponse.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerateContentResponse.kt new file mode 100644 index 00000000..9e33ce16 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerateContentResponse.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +import android.util.Log + +/** + * Represents a response from the model. + * + * @property candidates a list of possible responses generated from the model + * @property promptFeedback optional feedback for the given prompt. When streaming, it's only + * populated in the first response. + */ +class GenerateContentResponse( + val candidates: List<Candidate>, + val promptFeedback: PromptFeedback?, +) { + /** Convenience field representing the first text part in the response, if it exists. */ + val text: String? by lazy { firstPartAs<TextPart>()?.text } + + private inline fun <reified T : Part> firstPartAs(): T? { + if (candidates.isEmpty()) { + warn("No candidates were found, but was asked to get a candidate.") + return null + } + + val (parts, otherParts) = candidates.first().content.parts.partition { it is T } + val type = T::class.simpleName ?: "of the part type you asked for" + + if (parts.isEmpty()) { + if (otherParts.isNotEmpty()) { + warn( + "We didn't find any $type, but we did find other part types. Did you ask for the right type?" + ) + } + + return null + } + + if (parts.size > 1) { + warn("Multiple $type were found, returning the first one.") + } else if (otherParts.isNotEmpty()) { + warn("Returning the only $type found, but other part types were present as well.") + } + + return parts.first() as T + } + + private fun warn(message: String) { + Log.w("GenerateContentResponse", message) + } +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerationConfig.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerationConfig.kt new file mode 100644 index 00000000..f1ff79d7 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/GenerationConfig.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * Configuration parameters to use for content generation. + * + * @property temperature The degree of randomness in token selection, typically between 0 and 1 + * @property topK The sum of probabilities to collect to during token selection + * @property topP How many tokens to select amongst the highest probabilities + * @property candidateCount The max *unique* responses to return + * @property maxOutputTokens The max tokens to generate per response + * @property stopSequences A list of strings to stop generation on occurrence of + */ +class GenerationConfig +private constructor( + val temperature: Float?, + val topK: Int?, + val topP: Float?, + val candidateCount: Int?, + val maxOutputTokens: Int?, + val stopSequences: List<String>? +) { + + class Builder { + @JvmField var temperature: Float? = null + @JvmField var topK: Int? = null + @JvmField var topP: Float? = null + @JvmField var candidateCount: Int? = null + @JvmField var maxOutputTokens: Int? = null + @JvmField var stopSequences: List<String>? = null + + fun build() = + GenerationConfig( + temperature = temperature, + topK = topK, + topP = topP, + candidateCount = candidateCount, + maxOutputTokens = maxOutputTokens, + stopSequences = stopSequences + ) + } + + companion object { + fun builder() = Builder() + } +} + +/** + * Helper method to construct a [GenerationConfig] in a DSL-like manner. + * + * Example Usage: + * ``` + * generationConfig { + * temperature = 0.75f + * topP = 0.5f + * topK = 30 + * candidateCount = 4 + * maxOutputTokens = 300 + * stopSequences = listOf("in conclusion", "-----", "do you need") + * } + * ``` + */ +fun generationConfig(init: GenerationConfig.Builder.() -> Unit): GenerationConfig { + val builder = GenerationConfig.builder() + builder.init() + return builder.build() +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmCategory.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmCategory.kt new file mode 100644 index 00000000..d4e9781f --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmCategory.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** Category for a given harm rating. */ +enum class HarmCategory { + /** A new and not yet supported value. */ + UNKNOWN, + + /** Harassment content. */ + HARASSMENT, + + /** Hate speech and content. */ + HATE_SPEECH, + + /** Sexually explicit content. */ + SEXUALLY_EXPLICIT, + + /** Dangerous content. */ + DANGEROUS_CONTENT +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmProbability.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmProbability.kt new file mode 100644 index 00000000..020cf9c6 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/HarmProbability.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** Represents the probability that some [HarmCategory] is applicable in a [SafetyRating]. */ +enum class HarmProbability { + /** A new and not yet supported value. */ + UNKNOWN, + + /** Probability for harm is unspecified. */ + UNSPECIFIED, + + /** Probability for harm is negligible. */ + NEGLIGIBLE, + + /** Probability for harm is low. */ + LOW, + + /** Probability for harm is medium. */ + MEDIUM, + + /** Probability for harm is high. */ + HIGH, +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Part.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Part.kt new file mode 100644 index 00000000..d4b7a930 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Part.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +import android.graphics.Bitmap + +/** + * Interface representing data sent to and received from requests. + * + * One of: + * * [TextPart] representing text or string based data. + * * [ImagePart] representing image data. + * * [BlobPart] representing MIME typed binary data. + */ +interface Part + +/** Represents text or string based data sent to and received from requests. */ +class TextPart(val text: String) : Part + +/** Represents image data sent to and received from requests. */ +class ImagePart(val image: Bitmap) : Part + +/** Represents binary data with an associated MIME type sent to and received from requests. */ +class BlobPart(val mimeType: String, val blob: ByteArray) : Part + +/** @return The part as a [String] if it represents text, and null otherwise */ +fun Part.asTextOrNull(): String? = (this as? TextPart)?.text + +/** @return The part as a [Bitmap] if it represents an image, and null otherwise */ +fun Part.asImageOrNull(): Bitmap? = (this as? ImagePart)?.image + +/** @return The part as a [BlobPart] if it represents a blob, and null otherwise */ +fun Part.asBlobPartOrNull(): BlobPart? = this as? BlobPart diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/PromptFeedback.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/PromptFeedback.kt new file mode 100644 index 00000000..7dc981a7 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/PromptFeedback.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * Feedback on the prompt provided in the request. + * + * @param blockReason The reason that content was blocked, if at all. + * @param safetyRatings A list of relevant [SafetyRating]s. + */ +class PromptFeedback( + val blockReason: BlockReason?, + val safetyRatings: List<SafetyRating>, +) + +/** Describes why content was blocked. */ +enum class BlockReason { + /** A new and not yet supported value. */ + UNKNOWN, + + /** Content was blocked for an unspecified reason. */ + UNSPECIFIED, + + /** Content was blocked for violating provided [SafetySetting]s. */ + SAFETY, + + /** Content was blocked for another reason. */ + OTHER +} diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/SafetySetting.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/SafetySetting.kt new file mode 100644 index 00000000..8f4b62c9 --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/SafetySetting.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.type + +/** + * A configuration for a [BlockThreshold] of some [HarmCategory] allowed and blocked in responses. + * + * @param harmCategory The relevant [HarmCategory]. + * @param threshold The threshold form harm allowable. + */ +class SafetySetting(val harmCategory: HarmCategory, val threshold: BlockThreshold) {} diff --git a/generativeai/src/test/java/com/google/ai/client/generativeai/GenerativeModelTests.kt b/generativeai/src/test/java/com/google/ai/client/generativeai/GenerativeModelTests.kt new file mode 100644 index 00000000..da0e90b6 --- /dev/null +++ b/generativeai/src/test/java/com/google/ai/client/generativeai/GenerativeModelTests.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import com.google.ai.client.generativeai.util.commonTest +import com.google.ai.client.generativeai.util.createResponses +import com.google.ai.client.generativeai.util.prepareStreamingResponse +import io.kotest.matchers.shouldBe +import io.ktor.utils.io.close +import io.ktor.utils.io.writeFully +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.withTimeout +import org.junit.Test + +internal class GenerativeModelTests { + private val testTimeout = 5.seconds + + @Test + fun `(generateContentStream) emits responses as they come in`() = commonTest { + val response = createResponses("The", " world", " is", " a", " beautiful", " place!") + val bytes = prepareStreamingResponse(response) + + bytes.forEach { channel.writeFully(it) } + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + responses.collect { + it.candidates.isEmpty() shouldBe false + channel.close() + } + } + } +} diff --git a/generativeai/src/test/java/com/google/ai/client/generativeai/StreamingSnapshotTests.kt b/generativeai/src/test/java/com/google/ai/client/generativeai/StreamingSnapshotTests.kt new file mode 100644 index 00000000..4deb16c9 --- /dev/null +++ b/generativeai/src/test/java/com/google/ai/client/generativeai/StreamingSnapshotTests.kt @@ -0,0 +1,154 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import com.google.ai.client.generativeai.type.BlockReason +import com.google.ai.client.generativeai.type.FinishReason +import com.google.ai.client.generativeai.type.HarmCategory +import com.google.ai.client.generativeai.type.PromptBlockedException +import com.google.ai.client.generativeai.type.ResponseStoppedException +import com.google.ai.client.generativeai.type.SerializationException +import com.google.ai.client.generativeai.type.ServerException +import com.google.ai.client.generativeai.util.goldenStreamingFile +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.shouldBe +import io.ktor.http.HttpStatusCode +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.toList +import kotlinx.coroutines.withTimeout +import org.junit.Test + +internal class StreamingSnapshotTests { + private val testTimeout = 5.seconds + + @Test + fun `short reply`() = + goldenStreamingFile("success-basic-reply-short.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val responseList = responses.toList() + responseList.isEmpty() shouldBe false + responseList.first().candidates.first().finishReason shouldBe FinishReason.STOP + responseList.first().candidates.first().content.parts.isEmpty() shouldBe false + responseList.first().candidates.first().safetyRatings.isEmpty() shouldBe false + } + } + + @Test + fun `long reply`() = + goldenStreamingFile("success-basic-reply-long.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val responseList = responses.toList() + responseList.isEmpty() shouldBe false + responseList.forEach { + it.candidates.first().finishReason shouldBe FinishReason.STOP + it.candidates.first().content.parts.isEmpty() shouldBe false + it.candidates.first().safetyRatings.isEmpty() shouldBe false + } + } + } + + @Test + fun `unknown enum`() = + goldenStreamingFile("success-unknown-enum.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + responses.first { + it.candidates.any { it.safetyRatings.any { it.category == HarmCategory.UNKNOWN } } + } + } + } + + @Test + fun `quotes escaped`() = + goldenStreamingFile("success-quotes-escaped.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val responseList = responses.toList() + + responseList.isEmpty() shouldBe false + responseList.first().text!!.contains("\"") + } + } + + @Test + fun `prompt blocked for safety`() = + goldenStreamingFile("failure-prompt-blocked-safety.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val exception = shouldThrow<PromptBlockedException> { responses.collect() } + exception.response.promptFeedback?.blockReason shouldBe BlockReason.SAFETY + } + } + + @Test + fun `empty content`() = + goldenStreamingFile("failure-empty-content.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { shouldThrow<SerializationException> { responses.collect() } } + } + + @Test + fun `http errors`() = + goldenStreamingFile("failure-http-error.txt", HttpStatusCode.PreconditionFailed) { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { shouldThrow<ServerException> { responses.collect() } } + } + + @Test + fun `stopped for safety`() = + goldenStreamingFile("failure-finish-reason-safety.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val exception = shouldThrow<ResponseStoppedException> { responses.collect() } + exception.response.candidates.first().finishReason shouldBe FinishReason.SAFETY + } + } + + @Test + fun `citation parsed correctly`() = + goldenStreamingFile("success-citations.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val responseList = responses.toList() + responseList.any { it.candidates.any { it.citationMetadata.isNotEmpty() } } shouldBe true + } + } + + @Test + fun `stopped for recitation`() = + goldenStreamingFile("failure-recitation-no-content.txt") { + val responses = model.generateContentStream() + + withTimeout(testTimeout) { + val exception = shouldThrow<ResponseStoppedException> { responses.collect() } + exception.response.candidates.first().finishReason shouldBe FinishReason.RECITATION + } + } +} diff --git a/generativeai/src/test/java/com/google/ai/client/generativeai/UnarySnapshotTests.kt b/generativeai/src/test/java/com/google/ai/client/generativeai/UnarySnapshotTests.kt new file mode 100644 index 00000000..5713a6d3 --- /dev/null +++ b/generativeai/src/test/java/com/google/ai/client/generativeai/UnarySnapshotTests.kt @@ -0,0 +1,128 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai + +import com.google.ai.client.generativeai.type.BlockReason +import com.google.ai.client.generativeai.type.FinishReason +import com.google.ai.client.generativeai.type.HarmCategory +import com.google.ai.client.generativeai.type.PromptBlockedException +import com.google.ai.client.generativeai.type.ResponseStoppedException +import com.google.ai.client.generativeai.type.SerializationException +import com.google.ai.client.generativeai.type.ServerException +import com.google.ai.client.generativeai.util.goldenUnaryFile +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import io.ktor.http.HttpStatusCode +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.withTimeout +import org.junit.Test + +internal class UnarySnapshotTests { + private val testTimeout = 5.seconds + + @Test + fun `short reply`() = + goldenUnaryFile("success-basic-reply-short.json") { + withTimeout(testTimeout) { + val response = model.generateContent() + + response.candidates.isEmpty() shouldBe false + response.candidates.first().finishReason shouldBe FinishReason.STOP + response.candidates.first().content.parts.isEmpty() shouldBe false + response.candidates.first().safetyRatings.isEmpty() shouldBe false + } + } + + @Test + fun `long reply`() = + goldenUnaryFile("success-basic-reply-long.json") { + withTimeout(testTimeout) { + val response = model.generateContent() + + response.candidates.isEmpty() shouldBe false + response.candidates.first().finishReason shouldBe FinishReason.STOP + response.candidates.first().content.parts.isEmpty() shouldBe false + response.candidates.first().safetyRatings.isEmpty() shouldBe false + } + } + + @Test + fun `unknown enum`() = + goldenUnaryFile("success-unknown-enum.json") { + withTimeout(testTimeout) { + val response = model.generateContent() + + response.candidates.first { it.safetyRatings.any { it.category == HarmCategory.UNKNOWN } } + } + } + + @Test + fun `prompt blocked for safety`() = + goldenUnaryFile("failure-prompt-blocked-safety.json") { + withTimeout(testTimeout) { + shouldThrow<PromptBlockedException> { model.generateContent() } should + { + it.response.promptFeedback?.blockReason shouldBe BlockReason.SAFETY + } + } + } + + @Test + fun `empty content`() = + goldenUnaryFile("failure-empty-content.json") { + withTimeout(testTimeout) { shouldThrow<SerializationException> { model.generateContent() } } + } + + @Test + fun `http error`() = + goldenUnaryFile("failure-http-error.json", HttpStatusCode.PreconditionFailed) { + withTimeout(testTimeout) { shouldThrow<ServerException> { model.generateContent() } } + } + + @Test + fun `stopped for safety`() = + goldenUnaryFile("failure-finish-reason-safety.json") { + withTimeout(testTimeout) { + val exception = shouldThrow<ResponseStoppedException> { model.generateContent() } + exception.response.candidates.first().finishReason shouldBe FinishReason.SAFETY + } + } + + @Test + fun `citation returns correctly`() = + goldenUnaryFile("success-citation.json") { + withTimeout(testTimeout) { + val response = model.generateContent() + + response.candidates.isEmpty() shouldBe false + response.candidates.first().citationMetadata.isNotEmpty() shouldBe true + } + } + + @Test + fun `invalid response`() = + goldenUnaryFile("failure-invalid-response.json") { + withTimeout(testTimeout) { shouldThrow<SerializationException> { model.generateContent() } } + } + + @Test + fun `malformed content`() = + goldenUnaryFile("failure-malformed-content.json") { + withTimeout(testTimeout) { shouldThrow<SerializationException> { model.generateContent() } } + } +} diff --git a/generativeai/src/test/java/com/google/ai/client/generativeai/util/kotlin.kt b/generativeai/src/test/java/com/google/ai/client/generativeai/util/kotlin.kt new file mode 100644 index 00000000..259f72eb --- /dev/null +++ b/generativeai/src/test/java/com/google/ai/client/generativeai/util/kotlin.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.ai.client.generativeai.util + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.runBlocking + +/** + * Runs the given [block] using [runBlocking] on the current thread for side effect. + * + * Using this function is like [runBlocking] with default context (which runs the given block on the + * calling thread) but forces the return type to be `Unit`, which is helpful when implementing + * suspending tests as expression functions: + * ``` + * @Test + * fun myTest() = doBlocking {...} + * ``` + */ +internal fun doBlocking(block: suspend CoroutineScope.() -> Unit) { + runBlocking(block = block) +} diff --git a/generativeai/src/test/java/com/google/ai/client/generativeai/util/tests.kt b/generativeai/src/test/java/com/google/ai/client/generativeai/util/tests.kt new file mode 100644 index 00000000..fe498754 --- /dev/null +++ b/generativeai/src/test/java/com/google/ai/client/generativeai/util/tests.kt @@ -0,0 +1,175 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +@file:Suppress("DEPRECATION") // a replacement for our purposes has not been published yet + +package com.google.ai.client.generativeai.util + +import com.google.ai.client.generativeai.GenerativeModel +import com.google.ai.client.generativeai.internal.api.APIController +import com.google.ai.client.generativeai.internal.api.GenerateContentRequest +import com.google.ai.client.generativeai.internal.api.GenerateContentResponse +import com.google.ai.client.generativeai.internal.api.JSON +import com.google.ai.client.generativeai.internal.api.server.Candidate +import com.google.ai.client.generativeai.internal.api.shared.Content +import com.google.ai.client.generativeai.internal.api.shared.TextPart +import com.google.ai.client.generativeai.internal.util.SSE_SEPARATOR +import com.google.ai.client.generativeai.internal.util.send +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respond +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpStatusCode +import io.ktor.http.headersOf +import io.ktor.utils.io.ByteChannel +import io.ktor.utils.io.close +import io.ktor.utils.io.writeFully +import java.io.File +import kotlinx.coroutines.launch +import kotlinx.serialization.encodeToString + +internal fun prepareStreamingResponse(response: List<GenerateContentResponse>): List<ByteArray> = + response.map { "data: ${JSON.encodeToString(it)}$SSE_SEPARATOR".toByteArray() } + +internal fun prepareResponse(response: GenerateContentResponse) = + JSON.encodeToString(response).toByteArray() + +internal fun createRequest(vararg text: String): GenerateContentRequest { + val contents = text.map { Content(parts = listOf(TextPart(it))) } + + return GenerateContentRequest("gemini", contents) +} + +internal fun createResponse(text: String) = createResponses(text).single() + +internal fun createResponses(vararg text: String): List<GenerateContentResponse> { + val candidates = text.map { Candidate(Content(parts = listOf(TextPart(it)))) } + + return candidates.map { GenerateContentResponse(candidates = listOf(it)) } +} + +/** + * Wrapper around common instances needed in tests. + * + * @param channel A [ByteChannel] for sending responses through the mock HTTP engine + * @param model A [GenerativeModel] that consumes the [channel] + * @see commonTest + * @see send + */ +internal data class CommonTestScope(val channel: ByteChannel, val model: GenerativeModel) + +/** A test that runs under a [CommonTestScope]. */ +internal typealias CommonTest = suspend CommonTestScope.() -> Unit + +/** + * Common test block for providing a [CommonTestScope] during tests. + * + * Example usage: + * ``` + * @Test + * fun `(generateContent) generates a proper response`() = commonTest { + * val request = createRequest("say something nice") + * val response = createResponse("The world is a beautiful place!") + * + * channel.send(prepareResponse(response)) + * + * withTimeout(testTimeout) { + * val data = controller.generateContent(request) + * data.candidates.shouldNotBeEmpty() + * } + * } + * ``` + * + * @param status An optional [HttpStatusCode] to return as a response + * @param block The test contents themselves, with the [CommonTestScope] implicitly provided + * @see CommonTestScope + */ +internal fun commonTest(status: HttpStatusCode = HttpStatusCode.OK, block: CommonTest) = + doBlocking { + val channel = ByteChannel(autoFlush = true) + val mockEngine = MockEngine { + respond(channel, status, headersOf(HttpHeaders.ContentType, "application/json")) + } + val controller = APIController("super_cool_test_key", "gemini-pro", mockEngine) + val model = GenerativeModel("gemini-pro", "super_cool_test_key", controller = controller) + CommonTestScope(channel, model).block() + } + +/** + * A variant of [commonTest] for performing *streaming-based* snapshot tests. + * + * Loads the *Golden File* and automatically parses the messages from it; providing it to the + * channel. + * + * @param name The name of the *Golden File* to load + * @param httpStatusCode An optional [HttpStatusCode] to return as a response + * @param block The test contents themselves, with a [CommonTestScope] implicitly provided + * @see goldenUnaryFile + */ +internal fun goldenStreamingFile( + name: String, + httpStatusCode: HttpStatusCode = HttpStatusCode.OK, + block: CommonTest +) = doBlocking { + val goldenFile = loadGoldenFile("streaming/$name") + val messages = goldenFile.readLines().filter { it.isNotBlank() } + + commonTest(httpStatusCode) { + launch { + for (message in messages) { + channel.writeFully("$message$SSE_SEPARATOR".toByteArray()) + } + channel.close() + } + + block() + } +} + +/** + * A variant of [commonTest] for performing snapshot tests. + * + * Loads the *Golden File* and automatically provides it to the channel. + * + * @param name The name of the *Golden File* to load + * @param httpStatusCode An optional [HttpStatusCode] to return as a response + * @param block The test contents themselves, with a [CommonTestScope] implicitly provided + * @see goldenStreamingFile + */ +internal fun goldenUnaryFile( + name: String, + httpStatusCode: HttpStatusCode = HttpStatusCode.OK, + block: CommonTest +) = + commonTest(httpStatusCode) { + val goldenFile = loadGoldenFile("unary/$name") + val message = goldenFile.readText() + + channel.send(message.toByteArray()) + + block() + } + +/** + * Loads a *Golden File* from the resource directory. + * + * Expects golden files to live under `golden-files` in the resource files. + * + * @see goldenUnaryFile + */ +internal fun loadGoldenFile(path: String): File = loadResourceFile("golden-files/$path") + +/** Loads a file from the test resources directory. */ +internal fun loadResourceFile(path: String) = File("src/test/resources/$path") diff --git a/generativeai/src/test/resources/golden-files/streaming/failure-empty-content.txt b/generativeai/src/test/resources/golden-files/streaming/failure-empty-content.txt new file mode 100644 index 00000000..5762b515 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/failure-empty-content.txt @@ -0,0 +1 @@ +data: {"candidates": [{"content": {},"index": 0}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} diff --git a/generativeai/src/test/resources/golden-files/streaming/failure-finish-reason-safety.txt b/generativeai/src/test/resources/golden-files/streaming/failure-finish-reason-safety.txt new file mode 100644 index 00000000..05e09361 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/failure-finish-reason-safety.txt @@ -0,0 +1,2 @@ +data: {"candidates": [{"content": {"parts": [{"text": "<redacted>"}],"role": "model"},"finishReason": "SAFETY","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "HIGH"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + diff --git a/generativeai/src/test/resources/golden-files/streaming/failure-http-error.txt b/generativeai/src/test/resources/golden-files/streaming/failure-http-error.txt new file mode 100644 index 00000000..9179f6cc --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/failure-http-error.txt @@ -0,0 +1,13 @@ +{ + "error": { + "code": 400, + "message": "$grpcMessage", + "status": "FAILED_PRECONDITION", + "details": [ + { + "@type": "type.googleapis.com/google.rpc.DebugInfo", + "detail": "[ORIGINAL ERROR] generic::failed_precondition: User location is not supported for the API use. [google.rpc.error_details_ext] { message: \"User location is not supported for the API use.\" }" + } + ] +} +} \ No newline at end of file diff --git a/generativeai/src/test/resources/golden-files/streaming/failure-prompt-blocked-safety.txt b/generativeai/src/test/resources/golden-files/streaming/failure-prompt-blocked-safety.txt new file mode 100644 index 00000000..58c914af --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/failure-prompt-blocked-safety.txt @@ -0,0 +1,2 @@ +data: {"promptFeedback": {"blockReason": "SAFETY","safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "HIGH"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + diff --git a/generativeai/src/test/resources/golden-files/streaming/failure-recitation-no-content.txt b/generativeai/src/test/resources/golden-files/streaming/failure-recitation-no-content.txt new file mode 100644 index 00000000..6d69b64e --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/failure-recitation-no-content.txt @@ -0,0 +1,6 @@ +data: {"candidates": [{"content": {"parts": [{"text": "PLACEHOLDER"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + +data: {"candidates": [{"content": {"parts": [{"text": "PLACEHOLDER"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "LOW"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}],"citationMetadata": {"citationSources": [{"startIndex": 30,"endIndex": 179,"uri": "https://example.com","license": ""}]}}]} + +data: {"candidates": [{"finishReason": "RECITATION","index": 0}]} + diff --git a/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-long.txt b/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-long.txt new file mode 100644 index 00000000..268f75d7 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-long.txt @@ -0,0 +1,12 @@ +data: {"candidates": [{"content": {"parts": [{"text": "**Cats:**\n\n1. **Anatomy and Appearance:**\n - Cats have"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + +data: {"candidates": [{"content": {"parts": [{"text": " flexible bodies with a long tail, sharp retractable claws, and soft fur.\n - Their eyes are adapted for low-light conditions and have a vertical slit"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "-like pupil.\n - Cats come in a wide variety of breeds, each with distinct physical characteristics.\n\n2. **Behavior and Personality:**\n - Cats are known for their independence and solitary nature.\n - They are often described as aloof and mysterious, but they can also be affectionate and playful."}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "\n - Cats are territorial and communicate through body language, vocalizations, and scent marking.\n\n3. **Diet and Nutrition:**\n - Cats are obligate carnivores, meaning they require animal-based protein for survival.\n - Their diet should consist primarily of high-quality cat food that meets their nutritional needs.\n - Cats are prone to obesity, so portion control and regular exercise are important.\n\n4. **Health and Care:**\n - Cats require regular veterinary checkups, vaccinations, and parasite control.\n - They should be brushed regularly to prevent matting and shedding.\n - Providing"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": " a clean litter box and fresh water is essential for their well-being.\n\n5. **Lifespan:**\n - The average lifespan of a cat is 12-15 years, although some cats can live longer with proper care.\n\n**Dogs:**\n\n1. **Anatomy and Appearance:**\n - Dogs have a diverse range of sizes, shapes, and coat types depending on their breed.\n - They have strong jaws with sharp teeth adapted for chewing and tearing.\n - Dogs' ears are typically floppy or erect and can be used to express emotions.\n\n2. **Behavior and Personality:**\n - Dogs are known for their loyalty, companionship, and trainability.\n - They are social animals that thrive on human interaction and form strong bonds with their owners.\n - Dogs communicate through barking, whining, growling, and body language.\n\n3. **Diet and Nutrition:**\n - Dogs are omnivores and can eat a variety of foods, including meat, grains, fruits, and vegetables.\n - Their diet should be balanced and meet their nutritional requirements based on age, size, and activity level.\n - Obesity is a common problem in dogs, so portion control and exercise are important.\n\n4"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": ". **Health and Care:**\n - Dogs require regular veterinary checkups, vaccinations, and parasite control.\n - They should be brushed regularly to maintain a healthy coat and prevent shedding.\n - Providing adequate exercise, mental stimulation, and socialization is essential for their well-being.\n\n5. **Lifespan:**\n - The average lifespan of a dog varies depending on breed, size, and overall health.\n - Smaller breeds tend to live longer than larger breeds, with an average lifespan of 10-15 years."}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + diff --git a/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-short.txt b/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-short.txt new file mode 100644 index 00000000..b3c07628 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/success-basic-reply-short.txt @@ -0,0 +1,2 @@ +data: {"candidates": [{"content": {"parts": [{"text": "Cheyenne"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + diff --git a/generativeai/src/test/resources/golden-files/streaming/success-citations.txt b/generativeai/src/test/resources/golden-files/streaming/success-citations.txt new file mode 100644 index 00000000..3bb76e3d --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/success-citations.txt @@ -0,0 +1,12 @@ +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}],"citationMetadata": {"citationSources": [{"startIndex": 574,"endIndex": 705,"uri": "https://example.com","license": ""},{"startIndex": 899,"endIndex": 1026,"uri": "https://example.com","license": ""}]}}]} + +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}],"citationMetadata": {"citationSources": [{"startIndex": 574,"endIndex": 705,"uri": "https://example.com","license": ""},{"startIndex": 899,"endIndex": 1026,"uri": "https://example.com","license": ""}]}}]} + +data: {"candidates": [{"content": {"parts": [{"text": "placeholder"}],"role": "model"},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}],"citationMetadata": {"citationSources": [{"startIndex": 574,"endIndex": 705,"uri": "https://example.com","license": ""},{"startIndex": 899,"endIndex": 1026,"uri": "https://example.com","license": ""}]}}]} + diff --git a/generativeai/src/test/resources/golden-files/streaming/success-quotes-escaped.txt b/generativeai/src/test/resources/golden-files/streaming/success-quotes-escaped.txt new file mode 100644 index 00000000..0c48e4c4 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/success-quotes-escaped.txt @@ -0,0 +1,7 @@ +data: {"candidates": [{"content": {"parts": [{"text": " Pineapples and bananas are two different types of fruit. Pineapples grow on a"}]},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_TOXICITY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_SEXUAL","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_VIOLENCE","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DEROGATORY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_TOXICITY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_SEXUAL","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_VIOLENCE","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DEROGATORY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS","probability": "NEGLIGIBLE"}]}} + +data: {"candidates": [{"content": {"parts": [{"text": " tropical plant with a rosette of long, pointed leaves. Bananas grow on a herbaceous"}]},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_TOXICITY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_SEXUAL","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_VIOLENCE","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DEROGATORY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": " plant with large, broad leaves. The two plants are not related, and pin"}]},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_TOXICITY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_SEXUAL","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_VIOLENCE","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DEROGATORY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "eapples do not grow on banana plants."}]},"index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_TOXICITY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_SEXUAL","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_VIOLENCE","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DEROGATORY","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS","probability": "NEGLIGIBLE"}]}]} diff --git a/generativeai/src/test/resources/golden-files/streaming/success-unknown-enum.txt b/generativeai/src/test/resources/golden-files/streaming/success-unknown-enum.txt new file mode 100644 index 00000000..0f3da8eb --- /dev/null +++ b/generativeai/src/test/resources/golden-files/streaming/success-unknown-enum.txt @@ -0,0 +1,11 @@ +data: {"candidates": [{"content": {"parts": [{"text": "**Cats:**\n\n- **Physical Characteristics:**\n - Size: Cats come"}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}],"promptFeedback": {"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}} + +data: {"candidates": [{"content": {"parts": [{"text": " in a wide range of sizes, from small breeds like the Singapura to large breeds like the Maine Coon.\n - Fur: Cats have soft, furry coats"}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": " that can vary in length and texture depending on the breed.\n - Eyes: Cats have large, expressive eyes that can be various colors, including green, blue, yellow, and hazel.\n - Ears: Cats have pointed, erect ears that are sensitive to sound.\n - Tail: Cats have long"}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": ", flexible tails that they use for balance and communication.\n\n- **Behavior and Personality:**\n - Independent: Cats are often described as independent animals that enjoy spending time alone.\n - Affectionate: Despite their independent nature, cats can be very affectionate and form strong bonds with their owners.\n - Playful: Cats are naturally playful and enjoy engaging in activities such as chasing toys, climbing, and pouncing.\n - Curious: Cats are curious creatures that love to explore their surroundings.\n - Vocal: Cats communicate through a variety of vocalizations, including meows, purrs, hisses, and grow"}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": "ls.\n\n- **Health and Care:**\n - Diet: Cats are obligate carnivores, meaning they require animal-based protein for optimal health.\n - Grooming: Cats spend a significant amount of time grooming themselves to keep their fur clean and free of mats.\n - Exercise: Cats need regular exercise to stay healthy and active. This can be achieved through play sessions or access to outdoor space.\n - Veterinary Care: Regular veterinary checkups are essential for maintaining a cat's health and detecting any potential health issues early on.\n\n**Dogs:**\n\n- **Physical Characteristics:**\n - Size: Dogs come in a wide range of sizes, from small breeds like the Chihuahua to giant breeds like the Great Dane.\n - Fur: Dogs have fur coats that can vary in length, texture, and color depending on the breed.\n - Eyes: Dogs have expressive eyes that can be various colors, including brown, blue, green, and hazel.\n - Ears: Dogs have floppy or erect ears that are sensitive to sound.\n - Tail: Dogs have long, wagging tails that they use for communication and expressing emotions.\n\n- **Behavior and Personality:**\n - Loyal: Dogs are known for their loyalty and"}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT","probability": "NEGLIGIBLE"}]}]} + +data: {"candidates": [{"content": {"parts": [{"text": " devotion to their owners.\n - Friendly: Dogs are generally friendly and outgoing animals that enjoy interacting with people and other animals.\n - Playful: Dogs are playful and energetic creatures that love to engage in activities such as fetching, running, and playing with toys.\n - Trainable: Dogs are highly trainable and can learn a variety of commands and tricks.\n - Vocal: Dogs communicate through a variety of vocalizations, including barking, howling, whining, and growling.\n\n- **Health and Care:**\n - Diet: Dogs are omnivores and can eat a variety of foods, including meat, vegetables, and grains.\n - Grooming: Dogs require regular grooming to keep their fur clean and free of mats. The frequency of grooming depends on the breed and coat type.\n - Exercise: Dogs need regular exercise to stay healthy and active. The amount of exercise required varies depending on the breed and age of the dog.\n - Veterinary Care: Regular veterinary checkups are essential for maintaining a dog's health and detecting any potential health issues early on."}]},"finishReason": "STOP","index": 0,"safetyRatings": [{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HATE_SPEECH","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_HARASSMENT","probability": "NEGLIGIBLE"},{"category": "HARM_CATEGORY_DANGEROUS_CONTENT_NEW_ENUM","probability": "NEGLIGIBLE_UNKNOWN_ENUM"}]}]} diff --git a/generativeai/src/test/resources/golden-files/unary/failure-empty-content.json b/generativeai/src/test/resources/golden-files/unary/failure-empty-content.json new file mode 100644 index 00000000..4e188966 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-empty-content.json @@ -0,0 +1,28 @@ +{ + "candidates": [ + { + "content": {}, + "index": 0 + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/failure-finish-reason-safety.json b/generativeai/src/test/resources/golden-files/unary/failure-finish-reason-safety.json new file mode 100644 index 00000000..111e33de --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-finish-reason-safety.json @@ -0,0 +1,54 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "<redacted>" + } + ], + "role": "model" + }, + "finishReason": "SAFETY", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "HIGH" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/failure-http-error.json b/generativeai/src/test/resources/golden-files/unary/failure-http-error.json new file mode 100644 index 00000000..9179f6cc --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-http-error.json @@ -0,0 +1,13 @@ +{ + "error": { + "code": 400, + "message": "$grpcMessage", + "status": "FAILED_PRECONDITION", + "details": [ + { + "@type": "type.googleapis.com/google.rpc.DebugInfo", + "detail": "[ORIGINAL ERROR] generic::failed_precondition: User location is not supported for the API use. [google.rpc.error_details_ext] { message: \"User location is not supported for the API use.\" }" + } + ] +} +} \ No newline at end of file diff --git a/generativeai/src/test/resources/golden-files/unary/failure-invalid-response.json b/generativeai/src/test/resources/golden-files/unary/failure-invalid-response.json new file mode 100644 index 00000000..49d05e18 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-invalid-response.json @@ -0,0 +1,14 @@ +{ + "this": [ + { + "is": { + "not": [ + { + "a": "valid" + } + ] + }, + "response": {} + } + ] +} diff --git a/generativeai/src/test/resources/golden-files/unary/failure-malformed-content.json b/generativeai/src/test/resources/golden-files/unary/failure-malformed-content.json new file mode 100644 index 00000000..737f2e08 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-malformed-content.json @@ -0,0 +1,30 @@ +{ + "candidates": [ + { + "content": { + "invalid-field": true + }, + "index": 0 + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/failure-prompt-blocked-safety.json b/generativeai/src/test/resources/golden-files/unary/failure-prompt-blocked-safety.json new file mode 100644 index 00000000..9d2abbb2 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/failure-prompt-blocked-safety.json @@ -0,0 +1,23 @@ +{ + "promptFeedback": { + "blockReason": "SAFETY", + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "HIGH" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/success-basic-reply-long.json b/generativeai/src/test/resources/golden-files/unary/success-basic-reply-long.json new file mode 100644 index 00000000..8a7f3cd3 --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/success-basic-reply-long.json @@ -0,0 +1,54 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "1. **Use Freshly Ground Coffee**:\n - Grind your coffee beans just before brewing to preserve their flavor and aroma.\n - Use a burr grinder for a consistent grind size.\n\n2. **Choose the Right Water**:\n - Use filtered or spring water for the best taste.\n - Avoid using tap water, as it may contain impurities that can affect the flavor.\n\n3. **Measure Accurately**:\n - Use a kitchen scale to measure your coffee and water precisely.\n - A general rule of thumb is to use 1:16 ratio of coffee to water (e.g., 15 grams of coffee to 240 grams of water).\n\n4. **Preheat Your Equipment**:\n - Preheat your coffee maker or espresso machine before brewing to ensure a consistent temperature.\n\n5. **Control the Water Temperature**:\n - The ideal water temperature for brewing coffee is between 195°F (90°C) and 205°F (96°C).\n - Too hot water can extract bitter flavors, while too cold water won't extract enough flavor.\n\n6. **Steep the Coffee**:\n - For drip coffee, let the water slowly drip through the coffee grounds for optimal extraction.\n - For espresso, maintain a steady pressure and flow rate during the extraction process.\n\n7. **Clean Your Equipment**:\n - Regularly clean your coffee maker or espresso machine to remove any residual oils or coffee grounds that can affect the taste.\n\n8. **Experiment with Different Coffee Beans**:\n - Try different coffee beans from various regions and roasts to find your preferred flavor profile.\n\n9. **Store Coffee Properly**:\n - Store your coffee beans in an airtight container in a cool, dark place to preserve their freshness.\n\n10. **Enjoy Freshly Brewed Coffee**:\n - Drink your coffee as soon as possible after brewing to savor its peak flavor and aroma." + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/success-basic-reply-short.json b/generativeai/src/test/resources/golden-files/unary/success-basic-reply-short.json new file mode 100644 index 00000000..40a9a6da --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/success-basic-reply-short.json @@ -0,0 +1,54 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "Mountain View, California, United States" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/success-citation.json b/generativeai/src/test/resources/golden-files/unary/success-citation.json new file mode 100644 index 00000000..2a765ace --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/success-citation.json @@ -0,0 +1,70 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "placeholder" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ], + "citationMetadata": { + "citationSources": [ + { + "startIndex": 574, + "endIndex": 705, + "uri": "https://example.com/", + "license": "" + }, + { + "startIndex": 899, + "endIndex": 1026, + "uri": "https://example.com/", + "license": "" + } + ] + } + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/success-quote-reply.json b/generativeai/src/test/resources/golden-files/unary/success-quote-reply.json new file mode 100644 index 00000000..f1e5331e --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/success-quote-reply.json @@ -0,0 +1,54 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "1. \"The greatest glory in living lies not in never falling, but in rising every time we fall.\" - Nelson Mandela\n2. \"The future belongs to those who believe in the beauty of their dreams.\" - Eleanor Roosevelt\n3. \"It does not matter how slow you go so long as you do not stop.\" - Confucius\n4. \"If you want to live a happy life, tie it to a goal, not to people or things.\" - Albert Einstein\n5. \"The only person you are destined to become is the person you decide to be.\" - Ralph Waldo Emerson\n6. \"It's not how much you have, but how much you enjoy that makes happiness.\" - Charles Spurgeon\n7. \"The greatest wealth is to live content with little.\" - Plato\n8. \"The only way to do great work is to love what you do.\" - Steve Jobs\n9. \"Don't be afraid to fail. Be afraid not to try.\" - Michael Jordan\n10. \"The best way to predict the future is to create it.\" - Abraham Lincoln" + } + ], + "role": "model" + }, + "finishReason": "STOP", + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } +} diff --git a/generativeai/src/test/resources/golden-files/unary/success-unknown-enum.json b/generativeai/src/test/resources/golden-files/unary/success-unknown-enum.json new file mode 100644 index 00000000..b27a11ae --- /dev/null +++ b/generativeai/src/test/resources/golden-files/unary/success-unknown-enum.json @@ -0,0 +1,52 @@ +{ + "candidates": [ + { + "content": { + "parts": [ + { + "text": "1. **Use Freshly Ground Coffee**:\n - Grind your coffee beans just before brewing to preserve their flavor and aroma.\n - Use a burr grinder for a consistent grind size.\n\n\n2. **Choose the Right Water**:\n - Use filtered or spring water for the best taste.\n - Avoid using tap water, as it may contain impurities that can affect the flavor.\n\n\n3. **Measure Accurately**:\n - Use a kitchen scale to measure your coffee and water precisely.\n - A general rule of thumb is to use 1:16 ratio of coffee to water (e.g., 15 grams of coffee to 240 grams of water).\n\n\n4. **Preheat Your Equipment**:\n - Preheat your coffee maker or espresso machine before brewing to ensure a consistent temperature.\n\n\n5. **Control the Water Temperature**:\n - The ideal water temperature for brewing coffee is between 195°F (90°C) and 205°F (96°C).\n - Too hot water can extract bitter flavors, while too cold water won't extract enough flavor.\n\n\n6. **Steep the Coffee**:\n - For drip coffee, let the water slowly drip through the coffee grounds for optimal extraction.\n - For pour-over coffee, pour the water in a circular motion over the coffee grounds, allowing it to steep for 30-45 seconds before continuing.\n\n\n7. **Clean Your Equipment**:\n - Regularly clean your coffee maker or espresso machine to prevent the buildup of oils and residue that can affect the taste of your coffee.\n\n\n8. **Experiment with Different Coffee Beans**:\n - Try different coffee beans from various regions and roasts to find your preferred flavor profile.\n - Experiment with different grind sizes and brewing methods to optimize the flavor of your chosen beans.\n\n\n9. **Store Coffee Properly**:\n - Store your coffee beans in an airtight container in a cool, dark place to preserve their freshness and flavor.\n - Avoid storing coffee in the refrigerator or freezer, as this can cause condensation and affect the taste.\n\n\n10. **Enjoy Freshly Brewed Coffee**:\n - Drink your coffee as soon as possible after brewing to enjoy its peak flavor and aroma.\n - Coffee starts to lose its flavor and aroma within 30 minutes of brewing." + } + ] + }, + "index": 0, + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT_ENUM_NEW", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "probability": "NEGLIGIBLE" + } + ] + } + ], + "promptFeedback": { + "safetyRatings": [ + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "probability": "NEGLIGIBLE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT_LIKE_A_NEW_ENUM", + "probability": "NEGLIGIBLE_NEW_ENUM" + } + ] + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..c0123bf7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,25 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +# No currently stable versions of AGP are tested against compileSdk 34 +android.suppressUnsupportedCompileSdk=34 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..95644b24 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Nov 06 13:03:44 PST 2023 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 00000000..4f906e0c --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..ac1b06f9 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/licenses/APACHE-2.0 b/licenses/APACHE-2.0 new file mode 100644 index 00000000..38c92ab3 --- /dev/null +++ b/licenses/APACHE-2.0 @@ -0,0 +1,15 @@ +/* + * Copyright ${YEAR} 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 + * + * http://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. + */ diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 00000000..fe6e91db --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,74 @@ +# Plugins + +This composite module houses the gradle plugins that are used in the main SDK; to assist in a +number of monotonous tasks. You can read more on these plugins and the tasks they create below. + +## ChangelogPlugin + +Creates and manages changelog files. These files are used to signify changes made to the repo that +should invoke a release, alongside text to display in the release notes at release time. + +Change files are (by default) created under the `.changes` directory at the root of the repo. +These files are json encoded variants of a [Changelog](./src/main/java/com/google/gradle/types/Changelog.kt) instance- +which is just an organization of what impact the change had (will it invoke a patch, minor, or +major bump?) and an (optional) end-user readable message to show alongside the other changes at +release time. By default, the files are saved as a random sequence of four words (to avoid +collisions). + +During a release cycle, the `.changes` directory will be filled with change files. When it comes to +release time, these changes will be combined into a single `release_notes.md` file that contains +all the changes made- in a consumable format. After a release, the `.changes` directory will be +wiped, and the cycle will continue. + +To assist in this endeavour, the ChangelogPlugin registers an internal plugin and a few tasks: + +### APIPlugin + +An internal plugin (automatically added, and cannot be explicitly applied) that facilitates the +generation of `.api` files. + +#### Tasks + +The APIPlugin registers the two following tasks to facilitate this process: + +- [buildApi](./src/main/java/com/google/gradle/plugins/ApiPlugin.kt) -> Creates a `.api` file +containing the public API of the project. +- [updateApi](./src/main/java/com/google/gradle/plugins/ApiPlugin.kt) -> Updates (or creates) the +`public.api` file at the project directory; keeping track of the currently released/public api. + +### Tasks + +The ChangelogPlugin registers the four following tasks: + +- [findChanges](./src/main/java/com/google/gradle/tasks/FindChangesTask.kt) -> Creates a new `.api` +file for the current project, and compares it to the existing `public.api` to create a diff of +changes made to the public api. +- [makeChange](./src/main/java/com/google/gradle/tasks/MakeChangeTask.kt) -> Creates a new `.json` +file in the `.changes` directory with an optional message, including the version impact inferred +from `findChanges`. +- [warnAboutApiChanges](./src/main/java/com/google/gradle/tasks/WarnAboutApiChangesTask.kt) -> If +`findChanges` finds changes that will have version implications, this task will create a +`api_changes.md` in the root project's build directory, with a message to display to the developer +regarding what they changed, and the impact it will have on the public API. If no public API changes +are found, this task will just skip itself. +- [deleteChangeFiles](./src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt) -> Deletes +all the change files in the `.changes` directory, intended to be used after the release notes have +been created- or otherwise during a cleanup stage of the release. +- [makeReleaseNotes](./src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt) -> Creates a +`release_notes.md` in the root project's build directory, containing a collection of all the changes +in the `.changes` directory; including the new project version at the top of file (inferred from the +highest impact change). + + +## LicensePlugin + +Handles the checking and adding of license headers to the top of all source files. + +### Tasks + +The LicensePlugin registers the two following tasks to facilitate this process: + +- [validateLicense](./src/main/java/com/google/gradle/tasks/ValidateLicenseTask.kt) -> Validate that +a license header in present in a set of files. +- [ApplyLicenseTask](./src/main/java/com/google/gradle/tasks/ApplyLicenseTask.kt) -> Applies a +license header to a set of files. diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts new file mode 100644 index 00000000..55bed7c0 --- /dev/null +++ b/plugins/build.gradle.kts @@ -0,0 +1,56 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +plugins { + `java-library` + `java-gradle-plugin` + `kotlin-dsl` + kotlin("jvm") version "1.8.22" + id("com.ncorti.ktfmt.gradle") version "0.15.1" + id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.2" + kotlin("plugin.serialization") version "1.9.0" +} + +ktfmt { + googleStyle() +} + +kotlin { + jvmToolchain(17) + compilerOptions { + freeCompilerArgs.add("-Xcontext-receivers") + } +} + +gradlePlugin { + plugins { + register("license-plugin") { + id = "license-plugin" + implementationClass = "com.google.gradle.plugins.LicensePlugin" + } + register("changelog-plugin") { + id = "changelog-plugin" + implementationClass = "com.google.gradle.plugins.ChangelogPlugin" + } + } +} + +dependencies { + implementation("com.android.tools.build:gradle:8.1.3") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") + implementation("org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin:0.13.2") +} diff --git a/plugins/settings.gradle.kts b/plugins/settings.gradle.kts new file mode 100644 index 00000000..f57dedd8 --- /dev/null +++ b/plugins/settings.gradle.kts @@ -0,0 +1,32 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "plugins" diff --git a/plugins/src/main/java/com/google/gradle/plugins/ApiPlugin.kt b/plugins/src/main/java/com/google/gradle/plugins/ApiPlugin.kt new file mode 100644 index 00000000..a2dc2b26 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/plugins/ApiPlugin.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.plugins + +import com.google.gradle.util.android +import com.google.gradle.util.release +import com.google.gradle.util.tempFile +import java.io.File +import kotlinx.validation.KotlinApiBuildTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Copy +import org.gradle.api.tasks.Optional +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.register + +/** + * A Gradle plugin for creating `.api` files; representing the public API of the project. + * + * By default, a `public.api` file (at the root of the project) will be used as a base for the + * released api. + * + * Registers two tasks: + * - `buildApi` -> creates a `.api` file containing the *current* public API of the project. + * - `updateApi` -> updates the `public.api` file at the project root to match the one generated by + * `buildApi`; effectively saying that the released api is up to date with the current repo state. + * + * @see ApiPluginExtension + * @see ChangelogPluginExtension + */ +abstract class ApiPlugin : Plugin<Project> { + override fun apply(project: Project) { + with(project) { + val extension = extensions.create<ApiPluginExtension>("api").apply { commonConfiguration() } + + val buildApi = registerBuildApiTask() + + tasks.register<Copy>("updateApi") { + val fileName = extension.apiFile.map { it.name } + val filePath = extension.apiFile.map { it.parent } + + from(buildApi) + into(filePath) + + rename { fileName.get() } + } + } + } + + private fun Project.registerBuildApiTask() = + tasks.register<KotlinApiBuildTask>("buildApi") { + val classes = provider { android.release.output.classesDirs } + + inputClassesDirs = files(classes) + inputDependencies = files(classes) + outputApiDir = tempFile("api").get() + } + + context(Project) + private fun ApiPluginExtension.commonConfiguration() { + apiFile.convention(file("public.api")) + } +} + +/** + * Extension properties for the [ApiPlugin]. + * + * @property apiFile The file to reference as (and save to) in regards to the publicly released api. + */ +abstract class ApiPluginExtension { + @get:Optional abstract val apiFile: Property<File> +} diff --git a/plugins/src/main/java/com/google/gradle/plugins/ChangelogPlugin.kt b/plugins/src/main/java/com/google/gradle/plugins/ChangelogPlugin.kt new file mode 100644 index 00000000..e3285b70 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/plugins/ChangelogPlugin.kt @@ -0,0 +1,144 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.plugins + +import com.google.gradle.tasks.FindChangesTask +import com.google.gradle.tasks.MakeChangeTask +import com.google.gradle.tasks.MakeReleaseNotesTask +import com.google.gradle.tasks.WarnAboutApiChangesTask +import com.google.gradle.types.Changelog +import com.google.gradle.types.ModuleVersion +import com.google.gradle.types.RandomWordsGenerator +import com.google.gradle.util.apply +import com.google.gradle.util.buildDir +import com.google.gradle.util.childFile +import com.google.gradle.util.outputFile +import com.google.gradle.util.provideProperty +import com.google.gradle.util.tempFile +import java.io.File +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Delete +import org.gradle.api.tasks.Optional +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.support.listFilesOrdered + +/** + * A Gradle plugin for managing and creating [Changelog] files. + * + * By default, the root `.changes` directory will be used to save change files. + * + * Will also register the [ApiPlugin] if it's not already present, as it will handle the actual + * generation of the API files. + * + * Registers four tasks: + * - `findChanges` + * - `makeChange` + * - `warnAboutApiChanges` + * - `deleteChangeFiles` + * - `makeReleaseNotes` + * + * You can learn more about these tasks by visiting their respective docs below. + * + * @see ChangelogPluginExtension + * @see FindChangesTask + * @see MakeChangeTask + * @see WarnAboutApiChangesTask + * @see MakeReleaseNotesTask + */ +abstract class ChangelogPlugin : Plugin<Project> { + override fun apply(project: Project) { + with(project) { + val extension = + extensions.create<ChangelogPluginExtension>("changelog").apply { commonConfiguration() } + val releasedApiFile = apiPlugin.apiFile + val newApiFile = tasks.named("buildApi").outputFile + + val findChanges = + tasks.register<FindChangesTask>("findChanges") { + old.set(releasedApiFile) + new.set(newApiFile) + outputFile.set(tempFile("changes")) + } + + val fileChanges = findChanges.outputFile + + tasks.register<MakeChangeTask>("makeChange") { + val changeMessage = provideProperty<String>("changeMessage") + val changeName = RandomWordsGenerator.generateString() + val changeOutput = extension.outputDirectory.childFile("$changeName.json") + + changesFile.set(fileChanges) + message.set(changeMessage) + outputFile.set(changeOutput) + } + + tasks.register<WarnAboutApiChangesTask>("warnAboutApiChanges") { + changesFile.set(fileChanges) + outputFile.set(rootProject.buildDir("api_changes.md")) + } + + val changelogFiles = + extension.outputDirectory.map { it.listFilesOrdered { it.extension == "json" } } + + val deleteChangeFiles = + tasks.register<Delete>("deleteChangeFiles") { + group = "cleanup" + + delete(changelogFiles) + } + + tasks.register<MakeReleaseNotesTask>("makeReleaseNotes") { + onlyIf("No changelog files found") { changelogFiles.get().isNotEmpty() } + changeFiles.set(changelogFiles) + version.set(ModuleVersion.fromStringOrNull(project.version.toString())) + outputFile.set(rootProject.buildDir("release_notes.md")) + + finalizedBy(deleteChangeFiles) + } + } + } + + context(Project) + private fun ChangelogPluginExtension.commonConfiguration() { + outputDirectory.convention(rootProject.file(".changes")) + } +} + +/** + * Extension properties for the [ChangelogPlugin]. + * + * @property outputDirectory The directory into which to store the [Changelog] files + */ +abstract class ChangelogPluginExtension { + @get:Optional abstract val outputDirectory: Property<File> +} + +/** + * Helper mapping to the [ApiPluginExtension]. + * + * Automatically applies the [ApiPlugin] if not already present. + */ +private val Project.apiPlugin: ApiPluginExtension + get() { + plugins.apply<ApiPlugin>() + return extensions.getByType() + } diff --git a/plugins/src/main/java/com/google/gradle/plugins/LicensePlugin.kt b/plugins/src/main/java/com/google/gradle/plugins/LicensePlugin.kt new file mode 100644 index 00000000..7209dca7 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/plugins/LicensePlugin.kt @@ -0,0 +1,91 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.plugins + +import com.google.gradle.tasks.ApplyLicenseTask +import com.google.gradle.tasks.ValidateLicenseTask +import java.io.File +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Optional +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.register + +/** + * A Gradle plugin for managing and applying license headers to source files. + * + * By default, all files matching the `src/**/*.kt` file path pattern will be processed. + * + * Registers two tasks: + * - `validateLicense` + * - `applyLicense` + * + * You can learn more about these tasks by visiting their respective docs below. + * + * @see LicensePluginExtension + * @see ValidateLicenseTask + * @see ApplyLicenseTask + */ +abstract class LicensePlugin : Plugin<Project> { + override fun apply(project: Project) { + with(project) { + val extension = + extensions.create<LicensePluginExtension>("license").apply { commonConfiguration() } + + val licenseTemplate = extension.template.map { it.readText() } + val inputFiles = + extension.include.map { + fileTree(".") { + include(it) + exclude(extension.exclude.get()) + } + .files + } + + tasks.register<ValidateLicenseTask>("validateLicense") { + group = "licensing" + files.set(inputFiles) + template.set(licenseTemplate) + } + + tasks.register<ApplyLicenseTask>("applyLicense") { + group = "licensing" + files.set(inputFiles) + template.set(licenseTemplate) + } + } + } + + private fun LicensePluginExtension.commonConfiguration() { + include.convention(listOf("src/**/*.kt")) + exclude.convention(listOf()) + } +} + +/** + * Extension properties for the [LicensePlugin]. + * + * @property include Files to include in processing. Can be a file path pattern. + * @property exclude Files to exclude from processing. Can be a file path pattern. + */ +abstract class LicensePluginExtension { + @get:Optional abstract val include: ListProperty<String> + @get:Optional abstract val exclude: ListProperty<String> + @get:Optional abstract val template: Property<File> +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/ApplyLicenseTask.kt b/plugins/src/main/java/com/google/gradle/tasks/ApplyLicenseTask.kt new file mode 100644 index 00000000..e5254dc9 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/ApplyLicenseTask.kt @@ -0,0 +1,90 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.LicenseTemplate +import com.google.gradle.util.submit +import java.io.File +import javax.inject.Inject +import org.gradle.api.DefaultTask +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.TaskAction +import org.gradle.workers.WorkAction +import org.gradle.workers.WorkParameters +import org.gradle.workers.WorkerExecutor + +/** + * A Gradle task to apply a license header to a set of files. + * + * This task is idempotent and will not add the license header if already present, and preserves + * shebangs. + * + * Additionally, the files are processed in parallel through an injected [WorkerExecutor]. + * + * @property files The files to which the license template will be applied. + * @property template The [LicenseTemplate] to be applied to the files. + */ +abstract class ApplyLicenseTask @Inject constructor(private val workerExecutor: WorkerExecutor) : + DefaultTask() { + @get:InputFiles abstract val files: ListProperty<File> + + @get:Input abstract val template: Property<String> + + @TaskAction + fun add() { + val queue = workerExecutor.noIsolation() + + for (currentFile in files.get()) { + queue.submit<ApplyLicenseWorkAction, ApplyLicenseWorkParameters> { + file.set(currentFile) + license.set(template) + } + } + } +} + +/** + * Parameters for the [ApplyLicenseWorkAction]. + * + * @property file the file to apply the [license] to. + * @property license a [LicenseTemplate] to use in applying a license header. + */ +interface ApplyLicenseWorkParameters : WorkParameters { + val file: Property<File> + val license: Property<String> +} + +/** + * The work action to apply a license template to an individual file. + * + * @see ApplyLicenseWorkParameters + * @see ApplyLicenseTask + */ +abstract class ApplyLicenseWorkAction : WorkAction<ApplyLicenseWorkParameters> { + override fun execute() { + val template = LicenseTemplate(parameters.license.get()) + val file = parameters.file.get() + + if (!template.matches(file)) { + template.applyToFile(file) + println("Applied license to file: ${file.name}") + } + } +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/FindChangesTask.kt b/plugins/src/main/java/com/google/gradle/tasks/FindChangesTask.kt new file mode 100644 index 00000000..54d09621 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/FindChangesTask.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.LinesChanged +import com.google.gradle.types.changedFrom +import java.io.File +import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * A Gradle task to find the changes in the public api between the [old] and [new] api files. + * + * The changes are represented as [LinesChanged]; with a list of added and removed lines between the + * files. These are saved in `.json` format in the [outputFile]. + * + * @property old the previously released api file (typically `public.api) + * @property new the current API pending release (generated from the state of the repo as is) + * @property outputFile where to save the diff to + */ +abstract class FindChangesTask : DefaultTask() { + @get:InputFile abstract val old: Property<File> + + @get:InputFile abstract val new: Property<File> + + @get:OutputFile abstract val outputFile: Property<File> + + @TaskAction + fun add() { + val diff = old.get().changedFrom(new.get()) + + diff.toFile(outputFile.get()) + } +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/MakeChangeTask.kt b/plugins/src/main/java/com/google/gradle/tasks/MakeChangeTask.kt new file mode 100644 index 00000000..06d84f30 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/MakeChangeTask.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.Changelog +import com.google.gradle.types.LinesChanged +import com.google.gradle.types.RandomWordsGenerator +import com.google.gradle.types.VersionType +import java.io.File +import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * A Gradle task to create [Changelog] files. + * + * By default, the output is a `.json` file with a random sequence of four words as the file name + * (to avoid collisions). This file will contain the impact of the changes ([VersionType] wise), and + * optionally the message provided; otherwise absent. + * + * @property changesFile a file contained a [LinesChanged]; representing the changes made in this + * repo + * @property message an optional string message to provide to the end user in the compiled + * [Changelog] file; to be displayed at release time in the release notes. + * @property outputFile where to save the serialized [Changelog] to + * @see [RandomWordsGenerator] + */ +abstract class MakeChangeTask : DefaultTask() { + @get:InputFile abstract val changesFile: Property<File> + + @get:[Optional Input] + abstract val message: Property<String> + + @get:OutputFile abstract val outputFile: Property<File> + + @TaskAction + fun add() { + val diff = LinesChanged.fromFile(changesFile.get()) + val changelog = Changelog(diff.bump, listOfNotNull(message.orNull)) + + changelog.toFile(outputFile.get()) + } +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt b/plugins/src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt new file mode 100644 index 00000000..6c73c7e0 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/MakeReleaseNotesTask.kt @@ -0,0 +1,77 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.Changelog +import com.google.gradle.types.ModuleVersion +import com.google.gradle.types.VersionType +import java.io.File +import org.gradle.api.DefaultTask +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * A Gradle task to make the release notes for a release. + * + * By default, saved in the root project's build directory under `release_notes.md`. The release + * notes are a collection of all the messages provided by [changes][Changelog] before a release, in + * a markdown list. + * + * The markdown file will also have a header representing the version to be released, bumped from + * the provided [version] according to the highest impact [VersionType] from the list of changes. + * + * Note, that the version is ONLY bumped if the impact of any given change is more than a + * [patch][VersionType.PATCH], as the repo's current version is set to a patch bump higher than the + * currently released version by default to avoid cache conflicts when testing locally. + * + * @property changeFiles the [Changelog] files to use in the release + * @property version a [ModuleVersion] representing the current version of the project + * @property outputFile where to save the serialized release notes to + */ +abstract class MakeReleaseNotesTask : DefaultTask() { + @get:InputFiles abstract val changeFiles: ListProperty<File> + + @get:Input abstract val version: Property<ModuleVersion> + + @get:OutputFile abstract val outputFile: Property<File> + + @TaskAction + fun add() { + val changelogs = changeFiles.get().map { Changelog.fromFile(it) } + + val changes = changelogs.flatMap { it.changes } + + val bump = changelogs.minBy { it.type.ordinal }.type + + val version = if (bump >= VersionType.PATCH) version.get() else version.get().bump(bump) + + outputFile + .get() + .writeText( + """ + | # $version + | + | - ${changes.joinToString("\n - ")} + """ + .trimMargin() + ) + } +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/ValidateLicenseTask.kt b/plugins/src/main/java/com/google/gradle/tasks/ValidateLicenseTask.kt new file mode 100644 index 00000000..313b1112 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/ValidateLicenseTask.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.LicenseTemplate +import com.google.gradle.util.submit +import java.io.File +import javax.inject.Inject +import org.gradle.api.DefaultTask +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.StopExecutionException +import org.gradle.api.tasks.TaskAction +import org.gradle.workers.WorkAction +import org.gradle.workers.WorkParameters +import org.gradle.workers.WorkerExecutor + +/** + * A Gradle task to validate that a license header in present in a set of files. + * + * The files are processed in parallel through an injected [WorkerExecutor]. + * + * When a file is found to be missing the license header, it will throw a [StopExecutionException] + * with the file path. Since the files are evaluated in parallel- one file missing the license + * header will not cause the other files to not be processed. + * + * @property files The files to check for a license header. + * @property template A [LicenseTemplate] to use for checking if a license header is present. + */ +abstract class ValidateLicenseTask @Inject constructor(private val workerExecutor: WorkerExecutor) : + DefaultTask() { + @get:InputFiles abstract val files: ListProperty<File> + + @get:Input abstract val template: Property<String> + + @TaskAction + fun add() { + val queue = workerExecutor.noIsolation() + + for (currentFile in files.get()) { + queue.submit<ValidateLicenseWorkAction, ValidateLicenseWorkParameters> { + file.set(currentFile) + license.set(template) + } + } + } +} + +/** + * Parameters for the [ValidateLicenseWorkAction]. + * + * @property file the file to check for a license header in. + * @property license a [LicenseTemplate] to use for checking if a license header is present. + */ +interface ValidateLicenseWorkParameters : WorkParameters { + val file: Property<File> + val license: Property<String> +} + +/** + * The work action to verify a license header is present in an individual file. + * + * @throws StopExecutionException if a file is missing a license header + * @see ValidateLicenseWorkParameters + * @see ValidateLicenseTask + */ +abstract class ValidateLicenseWorkAction : WorkAction<ValidateLicenseWorkParameters> { + override fun execute() { + val template = LicenseTemplate(parameters.license.get()) + val file = parameters.file.get() + + if (!template.matches(file)) { + throw StopExecutionException("File is missing a license header: ${file.canonicalPath}") + } + } +} diff --git a/plugins/src/main/java/com/google/gradle/tasks/WarnAboutApiChangesTask.kt b/plugins/src/main/java/com/google/gradle/tasks/WarnAboutApiChangesTask.kt new file mode 100644 index 00000000..fa44f40a --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/tasks/WarnAboutApiChangesTask.kt @@ -0,0 +1,100 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.tasks + +import com.google.gradle.types.LinesChanged +import com.google.gradle.types.VersionType.* +import com.google.gradle.util.SkipTask +import java.io.File +import org.gradle.api.DefaultTask +import org.gradle.api.provider.Property +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * A Gradle task to warn about API changes made during development. + * + * By default, saved in the root project's build directory under `api_changes.md`. The task uses the + * provided [changesFile] to infer if merging the changes currently present in the repo will have an + * impact on the public api. + * + * This should help developers avoid accidentally leaking internal implementation details into the + * public API, and causing breaking changes without noticing. + * + * The generated message is intended to be safe to display straight to the developer. + * + * If no public api changes are found, then no message will be generated and the task will skip + * itself. + * + * @property changesFile a file contained a [LinesChanged]; representing the changes made in this + * repo + * @property outputFile where to save the warning message to + * @throws SkipTask if no public api changes are found + */ +abstract class WarnAboutApiChangesTask : DefaultTask() { + @get:InputFile abstract val changesFile: Property<File> + + @get:OutputFile abstract val outputFile: Property<File> + + @TaskAction + fun add() { + val diff = LinesChanged.fromFile(changesFile.get()) + + val added = spoiler("APIs Added", diff.added.joinToString("\n\n") { it.trim() }) + val removed = spoiler("APIs Removed", diff.removed.joinToString("\n\n") { it.trim() }) + + val message = + when (diff.bump) { + MAJOR -> + """ + |You've removed things from the public API. This means your change will cause a + |**major** version bump during release time. If you're okay with this, you can ignore + |this message. + | + |${removed.takeUnless { diff.removed.isEmpty() }.orEmpty()} + |${added.takeUnless { diff.added.isEmpty() }.orEmpty()} + """ + .trimMargin() + MINOR -> + """ + |You've added things to the public API. This means your change will cause a + |**minor** version bump during release time. If you're okay with this, you can ignore + |this message. + | + |${added.takeUnless { diff.added.isEmpty() }.orEmpty()} + """ + .trimMargin() + else -> throw SkipTask("No public api changes found") + } + + outputFile.get().writeText(message) + } + + private fun spoiler(title: String, content: String) = + """ + |<details> + |<summary> $title </summary> + | + |``` + |$content + |``` + | + |</details> + """ + .trimMargin() +} diff --git a/plugins/src/main/java/com/google/gradle/types/Changelog.kt b/plugins/src/main/java/com/google/gradle/types/Changelog.kt new file mode 100644 index 00000000..ff2452a3 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/types/Changelog.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.types + +import java.io.File +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +/** + * A sequence of changes, to be displayed to the end user after a release. + * + * @property type the version bump implications this change has the project, represented as a + * [VersionType] + * @property changes a list of changes made; to be displayed in the release notes + * @see toFile + * @see fromFile + */ +@Serializable +data class Changelog(val type: VersionType, val changes: List<String>) { + + /** + * Saves this instance a given file in JSON format. + * + * @param file the file to write the data to + */ + fun toFile(file: File) = file.writeText(Json.encodeToString(this) + '\n') + + companion object { + + /** + * Parses a [Changelog] object from a `.json` file. + * + * @param file a `.json` file to parse from + */ + fun fromFile(file: File): Changelog = Json.decodeFromString(file.readText()) + } +} diff --git a/plugins/src/main/java/com/google/gradle/types/LicenseTemplate.kt b/plugins/src/main/java/com/google/gradle/types/LicenseTemplate.kt new file mode 100644 index 00000000..28a2009a --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/types/LicenseTemplate.kt @@ -0,0 +1,109 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.types + +import com.google.gradle.util.appendLines +import com.google.gradle.util.dropIf +import com.google.gradle.util.remove +import java.io.File +import java.time.LocalDate + +/** + * Represents a license header template. + * + * License templates can have variables in the form of `${VARIABLE}`. + * + * When [matching a file][matches] to see if it has a license header, all variables are ignored. + * + * When [applying the license to a file][applyToFile], all variables are removed with the exception + * for any `${YEAR}` variables- which will be replaced with the current year provided by + * [LocalDate]. + * + * @property template string template to use for matching license headers. + * @see matches + * @see applyToFile + */ +data class LicenseTemplate(val template: String) { + + /** [Regex] pattern to identify template variables. */ + private val variableRegex = """\$\{.*?}""".toRegex() + + /** Compiled variant of [template] as a [Regex] pattern. */ + private val pattern: Regex = makePattern() + + /** + * Checks if the content of a file matches the pattern derived from the template. + * + * @param other The file whose content is to be matched against the pattern. + */ + fun matches(other: File) = pattern.containsMatchIn(other.readText()) + + /** + * Applies the license template to a file. Preserves the shebang line if present and appends the + * processed template. + * + * @param file The file to which the template is to be applied. + */ + fun applyToFile(file: File) { + val lines = file.readLines() + + val shebang = lines.firstOrNull()?.takeIf { it.startsWith("#!") } + val contentWithoutShebang = lines.dropIf(shebang) + + file.writeText( + buildString { + shebang?.let { appendLine(it) } + appendLine(prepareTemplate()) + appendLines(contentWithoutShebang) + } + ) + } + + /** + * Prepares the [template] for usage in an actual file. + * + * The only feature we currently support is variable substitution, as described in + * [LicenseTemplate]. + */ + private fun prepareTemplate() = + template.replace("\${YEAR}", LocalDate.now().year.toString()).remove(variableRegex) + + /** + * Converts [template] into a [Regex] pattern to be used for matching. + * + * It does this by splitting the text around any template variables (`${}`), replacing them with + * regex to match 0 or more words (`\w*`), and then joining the rest of the text around them as + * escaped regex. + * + * For example, given the input: + * ``` + * Hello ${}, and good ${TIME}! + * ``` + * + * It would create the following pattern: + * ``` + * \QHello \E\w*\Q, and good \E\w*\Q!\E + * ``` + * + * With `\Q` and `\E` wrapping string literals. + */ + private fun makePattern(): Regex { + val parts = template.split(variableRegex) + val pattern = parts.joinToString("\\w*") { Regex.escape(it) } + return pattern.toRegex() + } +} diff --git a/plugins/src/main/java/com/google/gradle/types/LinesChanged.kt b/plugins/src/main/java/com/google/gradle/types/LinesChanged.kt new file mode 100644 index 00000000..a97645cc --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/types/LinesChanged.kt @@ -0,0 +1,88 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.types + +import com.google.gradle.util.readTextOrNull +import java.io.File +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +/** + * Serializable representation of changes made to a file. + * + * Typically used for `.api` files in comparing api changes. + * + * @property added list of strings representing new lines that were added + * @property removed list of strings representing old lines that were deleted + * @property bump the version bump type calculated based on the changes. + * @see toFile + * @see fromFile + */ +@Serializable +data class LinesChanged(val added: List<String>, val removed: List<String>) { + val bump = calculateBumpType() + + /** + * Saves this instance a given file in JSON format. + * + * @param file the file to write the data to + */ + fun toFile(file: File) = file.writeText(Json.encodeToString(this)) + + private fun calculateBumpType(): VersionType { + if (removed.isNotEmpty()) return VersionType.MAJOR + if (added.isNotEmpty()) return VersionType.MINOR + + return VersionType.PATCH + } + + companion object { + + /** + * Parses a [LinesChanged] object from a `.json` file. + * + * If the file doesn't exist, or does not have any content- a [LinesChanged] with empty lists + * will be returned. + * + * @param file a `.json` file to parse from + */ + fun fromFile(file: File): LinesChanged { + val content = file.readTextOrNull() + + if (content.isNullOrBlank()) return LinesChanged(emptyList(), emptyList()) + + return Json.decodeFromString(content) + } + } +} + +/** + * Compares the content of this file with another file and determines the changes as [LinesChanged]. + * + * @param other the file to compare against + * @receiver File the file whose changes are to be determined from + */ +fun File.changedFrom(other: File): LinesChanged { + val myLines = readLines().filter { it.isNotBlank() } + val otherLines = other.readLines().filter { it.isNotBlank() } + + val added = otherLines - myLines.toSet() + val removed = myLines - otherLines.toSet() + + return LinesChanged(added, removed) +} diff --git a/plugins/src/main/java/com/google/gradle/types/ModuleVersion.kt b/plugins/src/main/java/com/google/gradle/types/ModuleVersion.kt new file mode 100644 index 00000000..ad89770d --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/types/ModuleVersion.kt @@ -0,0 +1,233 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.types + +import java.io.Serializable + +/** + * Possible version types in a SemVer versioning scheme. + * + * @see ModuleVersion + */ +enum class VersionType { + MAJOR, + MINOR, + PATCH, + PRE +} + +/** + * Type-Safe representation of pre-release identifiers. + * + * The following priority is established, in order of newest to oldest: + * + * `RC > EAP > BETA > ALPHA` + * + * @see PreReleaseVersion + */ +enum class PreReleaseVersionType { + ALPHA, + BETA, + EAP, + RC +} + +/** + * Type-Safe representation of pre-release [Versions][VersionType] for [ModuleVersion]. + * + * Pre-Release versions (otherwise known as [pre][VersionType.PRE]) indicates changes that are worth + * releasing- but not stable enough to satisfy a full release. + * + * Pre-Release versions should be in the format of: + * + * `(Type)(Build)` + * + * Where `Type` is a case insensitive string of any [PreReleaseVersionType], and `Build` is a two + * digit number (single digits should have a leading zero). + * + * Note that `build` will always be present as starting at one by defalt. That is, the following + * transform occurs: + * ``` + * "12.13.1-beta" // 12.13.1-beta01 + * ``` + * + * @property type an enum of [PreReleaseVersionType] that identifies the pre-release identifier + * @property build an [Int] that specifies the build number; defaults to one + * @see fromStringsOrNull + */ +data class PreReleaseVersion(val type: PreReleaseVersionType, val build: Int = 1) : + Comparable<PreReleaseVersion>, Serializable { + + companion object { + + /** + * Converts a string of [type] and [build] into a valid [PreReleaseVersion]. + * + * To learn more about what is considered a valid string and not, take a look at + * [PreReleaseVersion]. + * + * Example Usage: + * ``` + * PreReleaseVersion.fromStringsOrNull("alpha", "6") // PreReleaseVersion(ALPHA, 6) + * PreReleaseVersion.fromStringsOrNull("Beta", "") // PreReleaseVersion(BETA, 1) + * PreReleaseVersion.fromStringsOrNull("", "13") // null + * ``` + * + * @param type a case insensitive string of any [PreReleaseVersionType] + * @param build a string number; gets automatically converted to double digits, and defaults to + * one if blank + * @return a [PreReleaseVersion] created from the string, or null if the string was invalid. + */ + fun fromStringsOrNull(type: String, build: String): PreReleaseVersion? = + runCatching { + val preType = PreReleaseVersionType.valueOf(type.uppercase()) + val buildNumber = build.takeUnless { it.isBlank() }?.toInt() ?: 1 + + PreReleaseVersion(preType, buildNumber) + } + .getOrNull() + } + + override fun compareTo(other: PreReleaseVersion) = + compareValuesBy(this, other, { it.type }, { it.build }) + + /** Returns a copy of this [PreReleaseVersion], with the [build] increased by one. */ + fun bump() = copy(build = build + 1) + + /** + * Formatted as `TypeBuild` + * + * For example: + * ``` + * PreReleaseVersion(ALPHA, 5).toString() // "alpha05" + * PreReleaseVersion(RC, 12).toString() // "rc12" + * ``` + */ + override fun toString() = "${type.name.lowercase()}${build.toString().padStart(2, '0')}" +} + +/** + * Type-Safe representation of your standard [SemVer](https://semver.org/) versioning scheme. + * + * All versions should fall under your standard `MAJOR.MINOR.PATCH-PRE` format, where `PRE` is + * optional. + * + * To see rules about pre-release (`PRE`) formatting, see [PreReleaseVersion]. + * + * @property major An update that represents breaking changes + * @property minor An update that represents new functionality + * @property patch An update that represents bug fixes + * @property pre An update that represents unstable changes not ready for a full release + * @see fromStringOrNull + */ +data class ModuleVersion( + val major: Int, + val minor: Int, + val patch: Int, + val pre: PreReleaseVersion? = null +) : Comparable<ModuleVersion>, Serializable { + + /** Formatted as `MAJOR.MINOR.PATCH-PRE` */ + override fun toString() = "$major.$minor.$patch${pre?.let { "-$it" } ?: ""}" + + override fun compareTo(other: ModuleVersion) = + compareValuesBy( + this, + other, + { it.major }, + { it.minor }, + { it.patch }, + { it.pre == null }, // a version with no prerelease version takes precedence + { it.pre } + ) + + companion object { + /** + * Regex used in matching SemVer versions. + * + * The regex can be broken down as such: + * + * `(N digits).(N digits).(N digits)-(maybe letters)(maybe numbers)` + * + * For example, the following would be valid matches: + * ``` + * "13.1.5" // valid + * "5.0.5-beta" // valid + * "19.45.12-rc09" // valid + * ``` + * + * While the following would not be: + * ``` + * "1.3.4-" // invalid + * "16.2.3-01" // invalid + * "5.1.c" // invalid + * ``` + */ + val VERSION_REGEX = + "(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?:\\-\\b)?(?<pre>\\w\\D+)?(?<build>\\B\\d+)?" + .toRegex() + + /** + * Extrapolates the version variables from a provided [String], and turns them into a + * [ModuleVersion]. + * + * The String should be in the format of `MAJOR.MINOR.PATCH-PRE`. + * + * ``` + * ModuleVersion.fromString("1.2.3") // ModuleVersion(1,2,3) + * ModuleVersion.fromString("16.12.3-alpha") // ModuleVersion(16,12,3, ...) + * ModuleVersion.fromString("5.4.1-beta01") // ModuleVersion(5,4,1, ...) + * ModuleVersion.fromString("a.b.c") // null + * ``` + * + * @param str a [String] that matches the SemVer format. + * @return a [ModuleVersion] created from the string, or null if the string was invalid. + */ + fun fromStringOrNull(str: String): ModuleVersion? = + runCatching { + VERSION_REGEX.matchEntire(str)?.let { + val (major, minor, patch, pre, build) = it.destructured + ModuleVersion( + major.toInt(), + minor.toInt(), + patch.toInt(), + PreReleaseVersion.fromStringsOrNull(pre, build) + ) + .takeUnless { it.pre == null && (pre.isNotEmpty() || build.isNotEmpty()) } + } + } + .getOrNull() + } + + /** + * Returns a copy of this [ModuleVersion], with the given [VersionType] increased by one. + * + * @param version the [VersionType] to increase; defaults to the lowest valid version ([pre] else + * [patch]). + */ + fun bump(version: VersionType? = null) = + version + .let { it ?: if (pre != null) VersionType.PRE else VersionType.PATCH } + .let { + when (it) { + VersionType.MAJOR -> copy(major = major + 1, minor = 0, patch = 0) + VersionType.MINOR -> copy(minor = minor + 1, patch = 0) + VersionType.PATCH -> copy(patch = patch + 1) + VersionType.PRE -> copy(pre = pre?.bump()) + } + } +} diff --git a/plugins/src/main/java/com/google/gradle/types/RandomWordsGenerator.kt b/plugins/src/main/java/com/google/gradle/types/RandomWordsGenerator.kt new file mode 100644 index 00000000..37d70bd8 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/types/RandomWordsGenerator.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.types + +import com.google.gradle.util.readResourceFile +import org.gradle.kotlin.dsl.provideDelegate + +/** + * Object for generating a sequence of random words from a preset list. + * + * Useful in avoiding file collisions, while still easily consumable file names. + * + * @see generate + * @see generateString + */ +object RandomWordsGenerator { + + /** + * Generates a random list of words. + * + * @param wordCount how many words to generate + */ + fun generate(wordCount: Int = 4): List<String> = (1..wordCount).map { words.random() } + + /** + * Generates a file name safe string representation of a random list of words. + * + * The words will be separated by a `"-"` + * + * @param wordCount how many words to generate + */ + fun generateString(wordCount: Int = 4): String = generate(wordCount).joinToString("-") + + private val words by lazy { readResourceFile("/words.txt").filter { it.isNotBlank() } } +} diff --git a/plugins/src/main/java/com/google/gradle/util/gradle.kt b/plugins/src/main/java/com/google/gradle/util/gradle.kt new file mode 100644 index 00000000..8c4d95a9 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/util/gradle.kt @@ -0,0 +1,136 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.util + +import java.io.File +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.PluginContainer +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.StopActionException +import org.gradle.api.tasks.TaskProvider +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType +import org.gradle.workers.WorkAction +import org.gradle.workers.WorkParameters +import org.gradle.workers.WorkQueue +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation +import org.jetbrains.kotlin.gradle.utils.provider + +/** Creates a file [Provider] mapped for the build directory. */ +fun Project.buildDir(path: String) = layout.buildDirectory.asFile.childFile(path) + +/** + * Submits a piece of work to be executed asynchronously. + * + * More Kotlin friendly variant of the existing [WorkQueue.submit] + * + * Syntax sugar for: + * ```kotlin + * submit(T::class.java, paramAction) + * ``` + */ +inline fun <reified T : WorkAction<C>, C : WorkParameters> WorkQueue.submit( + noinline action: C.() -> Unit +) { + submit(T::class.java, action) +} + +/** + * Maps a file provider to another file provider as a sub directory. + * + * Syntax sugar for: + * ``` + * fileProvider.map { File("${it.path}/$path") } + * ``` + */ +fun Provider<File>.childFile(path: String) = map { File("${it.path}/$path") } + +/** + * Returns a new [File] under the given sub directory. + * + * Syntax sugar for: + * ``` + * File("$path/$childPath") + * ``` + */ +fun File.childFile(childPath: String) = File("$path/$childPath") + +/** + * Provides a temporary file for use during the task. + * + * Creates a file under the [temporaryDir][DefaultTask.getTemporaryDir] of the task, and should be + * preferred to defining an explicit [File]. This will allow Gradle to make better optimizations on + * our part, and helps us avoid edge-case scenarios like conflicting file names. + */ +fun DefaultTask.tempFile(path: String): Provider<File> = + project.provider { temporaryDir.childFile(path) } + +/** + * Syntax sugar for: + * ```kotlin + * plugins.apply(T::class) + * ``` + */ +inline fun <reified T : Plugin<*>> PluginContainer.apply() = apply(T::class) + +/** + * Represents an exception used to skip a Gradle task. + * + * Provides a more semantic way to refer to [StopActionException] when skipping tasks; as folks seem + * to infer from the exception name that it stops *all* execution- when that's not the case. + */ +typealias SkipTask = StopActionException + +/** + * Retrieves the output file of a Gradle task, as a [Provider]. + * + * Allows for easy access to the primary output file of a task, when tasks output a directory + * instead of a single file. It filters out directories and returns the first file in the task's + * outputs. + */ +val TaskProvider<*>.outputFile: Provider<File> + get() = map { it.outputs.files.asFileTree.first { !it.isDirectory } } + +/** The Android extension specific for Kotlin projects within Gradle. */ +val Project.android: KotlinAndroidProjectExtension + get() = extensions.getByType<KotlinAndroidProjectExtension>() + +/** + * The `"release"` compilation target of a Kotlin Android project. + * + * In non android projects, this would be referred to as the main source set. + */ +val KotlinAndroidProjectExtension.release: KotlinJvmAndroidCompilation + get() = target.compilations.getByName("release") + +/** + * Provides a project property as the specified type, or null otherwise. + * + * Utilizing a safe cast, an attempt is made to cast the project property (if found) to the receiver + * type. Should this cast fail, the resulting value will be null. + * + * Keep in mind that is provided lazily via a [Provider], so evaluation does not occur until the + * value is needed. + * + * @param property the name of the property to look for + */ +inline fun <reified T> Project.provideProperty(property: String) = provider { + findProperty(property) as? T +} diff --git a/plugins/src/main/java/com/google/gradle/util/kotlin.kt b/plugins/src/main/java/com/google/gradle/util/kotlin.kt new file mode 100644 index 00000000..4c0ceee2 --- /dev/null +++ b/plugins/src/main/java/com/google/gradle/util/kotlin.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +package com.google.gradle.util + +import java.io.File + +/* Replaces all matching substrings with an empty string (nothing) */ +fun String.remove(regex: Regex) = replace(regex, "") + +/** + * Conditionally drops the first element of the list if the provided value is null. + * + * @param T The type of elements in the list. + * @param V The type of the value to be checked. + * @param value The value to check against. + */ +fun <T, V> List<T>.dropIf(value: V?) = takeUnless { value != null } ?: drop(1) + +/** + * Appends a list of strings to a [StringBuilder], each on a new line. + * + * @param lines A list of strings to be appended. + */ +fun StringBuilder.appendLines(lines: List<String>) = appendLine(lines.joinToString("\n")) + +/** Reads the text from a file in the resource directory. */ +fun readResourceFile(path: String): List<String> { + return object {}.javaClass.getResourceAsStream(path)?.bufferedReader()?.use { it.readLines() } + ?: throw RuntimeException("Couldn't find resource file: $path") +} + +/** Reads the text from a file if it exists, otherwise returns null. */ +fun File.readTextOrNull(): String? = takeIf { exists() }?.readText() diff --git a/plugins/src/main/resources/words.txt b/plugins/src/main/resources/words.txt new file mode 100644 index 00000000..b636add7 --- /dev/null +++ b/plugins/src/main/resources/words.txt @@ -0,0 +1,251 @@ +account +achiever +actor +addition +adjustment +advertisement +advice +aftermath +agreement +airplane +airport +alarm +amount +amusement +angle +animal +answer +ant +apparatus +apparel +apple +appliance +approval +arch +argument +arithmetic +arm +army +art +attack +attempt +attention +attraction +aunt +authority +baby +back +badge +bag +bait +balance +ball +balloon +banana +band +base +baseball +basket +basketball +bat +bath +battle +bead +beam +bean +bear +beast +bed +bedroom +bee +beef +beetle +beggar +beginner +behavior +belief +believe +bell +berry +bike +bird +birth +birthday +bit +bite +blade +blood +blow +board +boat +body +bomb +bone +book +boot +border +bottle +boundary +box +boy +brain +brake +branch +brass +bread +breakfast +breath +brick +bridge +brother +brush +bubble +bucket +building +bulb +bun +burn +burst +business +butto +cabbage +cable +cactus +cake +cakes +calculator +calendar +camera +camp +can +cannon +canvas +cap +caption +car +card +carpenter +carriage +cart +cast +cat +cattle +cause +cave +celery +cellar +cemetery +cent +chain +chair +chalk +chance +change +channel +cheese +cherry +chess +chicken +children +chin +church +circle +clam +clock +cloth +cloud +clover +club +coach +coal +coast +coat +cobweb +coil +collar +color +comb +comfort +committee +company +competition +condition +connection +control +cook +copper +copy +cord +cork +corn +cough +country +cover +cow +crack +cracker +crate +crayon +cream +creator +creature +credit +crib +crime +crook +crow +crowd +crown +crush +cry +cub +cup +current +curtain +curve +cushion +dad +daughter +day +death +debt +decision +deer +degree +design +desire +desk +destruction +detail +development +digestion +dime +dinner +dinosaurs +direction +dirt +discovery +discussion +disease +disgust +distance +distribution +division +dock +doctor +dog +dogs +doll +donkey +door +downtown +drain +drawer +dress +drink +driving +drop +drug +drum +duck +dust diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..44f363aa --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,34 @@ +/* + * Copyright 2023 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 + * + * http://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. + */ + +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "generativeai" +include(":generativeai") +includeBuild("./plugins")