From 34287a8f239c0c45bdf50af547cc073f01eee90f Mon Sep 17 00:00:00 2001 From: David Motsonashvili <davidmotson@google.com> Date: Thu, 1 Feb 2024 10:08:49 -0800 Subject: [PATCH] Add opt in annotation for v1beta endpoint --- .../java/com/google/ai/client/generativeai/Chat.kt | 2 ++ .../google/ai/client/generativeai/GenerativeModel.kt | 3 +++ .../client/generativeai/internal/util/conversions.kt | 3 +++ .../ai/client/generativeai/type/BetaGenAiAPI.kt | 6 ++++++ .../client/generativeai/type/FunctionDeclarations.kt | 11 +++++++++++ .../com/google/ai/client/generativeai/type/Tool.kt | 1 + 6 files changed, 26 insertions(+) create mode 100644 generativeai/src/main/java/com/google/ai/client/generativeai/type/BetaGenAiAPI.kt 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 index 2e7a1185..a8153f24 100644 --- a/generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/Chat.kt @@ -17,6 +17,7 @@ package com.google.ai.client.generativeai import android.graphics.Bitmap +import com.google.ai.client.generativeai.type.BetaGenAiAPI import com.google.ai.client.generativeai.type.BlobPart import com.google.ai.client.generativeai.type.Content import com.google.ai.client.generativeai.type.FunctionCallPart @@ -46,6 +47,7 @@ import kotlinx.coroutines.flow.transform * @param model the model to use for the interaction * @property history the previous interactions with the model */ +@OptIn(BetaGenAiAPI::class) class Chat(private val model: GenerativeModel, val history: MutableList<Content> = ArrayList()) { private var lock = Semaphore(1) 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 index 6422ea9d..5db9a646 100644 --- a/generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/GenerativeModel.kt @@ -22,6 +22,7 @@ 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.BetaGenAiAPI import com.google.ai.client.generativeai.type.Content import com.google.ai.client.generativeai.type.CountTokensResponse import com.google.ai.client.generativeai.type.FinishReason @@ -53,6 +54,7 @@ import kotlinx.coroutines.flow.map * @property safetySettings the safety bounds to use during alongside prompts during content * generation */ +@OptIn(BetaGenAiAPI::class) class GenerativeModel internal constructor( val modelName: String, @@ -182,6 +184,7 @@ internal constructor( * @param call A [FunctionCallPart] from the model, containing a function call and parameters * @return The output of the requested function call */ + @BetaGenAiAPI suspend fun executeFunction(call: FunctionCallPart): String { if (tools == null) { throw RuntimeException("No registered tools") 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 index 0180df4b..010ca807 100644 --- 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 @@ -42,6 +42,7 @@ 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.BetaGenAiAPI import com.google.ai.client.generativeai.type.BlockThreshold import com.google.ai.client.generativeai.type.CitationMetadata import com.google.ai.client.generativeai.type.FunctionDeclaration @@ -108,11 +109,13 @@ internal fun BlockThreshold.toInternal() = BlockThreshold.UNSPECIFIED -> HarmBlockThreshold.UNSPECIFIED } +@BetaGenAiAPI internal fun Tool.toInternal() = com.google.ai.client.generativeai.internal.api.client.Tool( functionDeclarations.map { it.toInternal() } ) +@BetaGenAiAPI internal fun FunctionDeclaration.toInternal(): com.google.ai.client.generativeai.internal.api.client.FunctionDeclaration { val convertedParams = buildJsonObject { diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/BetaGenAiAPI.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/BetaGenAiAPI.kt new file mode 100644 index 00000000..2bd4b92c --- /dev/null +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/BetaGenAiAPI.kt @@ -0,0 +1,6 @@ +package com.google.ai.client.generativeai.type + +@RequiresOptIn(message = "This API is only available on the v1beta endpoint") +@Retention(AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) +annotation class BetaGenAiAPI diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/FunctionDeclarations.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/FunctionDeclarations.kt index 1871e8f7..9a83e87b 100644 --- a/generativeai/src/main/java/com/google/ai/client/generativeai/type/FunctionDeclarations.kt +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/FunctionDeclarations.kt @@ -8,6 +8,7 @@ package com.google.ai.client.generativeai.type * @property description A description of what the function does and its output. * @property function the function implementation */ +@BetaGenAiAPI class NoParameterFunction( name: String, description: String, @@ -25,6 +26,7 @@ class NoParameterFunction( * @property param A description of the first function parameter * @property function the function implementation */ +@BetaGenAiAPI class OneParameterFunction( name: String, description: String, @@ -44,6 +46,7 @@ class OneParameterFunction( * @property param2 A description of the second function parameter * @property function the function implementation */ +@BetaGenAiAPI class TwoParameterFunction( name: String, description: String, @@ -65,6 +68,7 @@ class TwoParameterFunction( * @property param3 A description of the third function parameter * @property function the function implementation */ +@BetaGenAiAPI class ThreeParameterFunction( name: String, description: String, @@ -88,6 +92,7 @@ class ThreeParameterFunction( * @property param4 A description of the fourth function parameter * @property function the function implementation */ +@BetaGenAiAPI class FourParameterFunction( name: String, description: String, @@ -100,6 +105,7 @@ class FourParameterFunction( override fun getParameters() = listOf(param1, param2, param3, param4) } +@BetaGenAiAPI abstract class FunctionDeclaration( val name: String, val description: String, @@ -113,6 +119,7 @@ abstract class FunctionDeclaration( * @property name The name of the function call, this should be clear and descriptive for the model * @property description A description of what the function does and its output. */ +@BetaGenAiAPI class FunctionBuilder(private val name: String, private val description: String) { fun build(function: suspend () -> String): FunctionDeclaration { @@ -124,6 +131,7 @@ class FunctionBuilder(private val name: String, private val description: String) } } +@BetaGenAiAPI class OneFunctionBuilder( private val name: String, private val description: String, @@ -138,6 +146,7 @@ class OneFunctionBuilder( } } +@BetaGenAiAPI class TwoFunctionBuilder( private val name: String, private val description: String, @@ -153,6 +162,7 @@ class TwoFunctionBuilder( } } +@BetaGenAiAPI class ThreeFunctionBuilder( private val name: String, private val description: String, @@ -169,6 +179,7 @@ class ThreeFunctionBuilder( } } +@BetaGenAiAPI class FourFunctionBuilder( private val name: String, private val description: String, diff --git a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Tool.kt b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Tool.kt index 1e3344fa..598eb52f 100644 --- a/generativeai/src/main/java/com/google/ai/client/generativeai/type/Tool.kt +++ b/generativeai/src/main/java/com/google/ai/client/generativeai/type/Tool.kt @@ -6,6 +6,7 @@ package com.google.ai.client.generativeai.type * * @param functionDeclarations The set of functions that this tool allows the model access to */ +@BetaGenAiAPI class Tool( val functionDeclarations: List<FunctionDeclaration>, )