Skip to content

Commit 6dc4da8

Browse files
authored
Remove preview package and add function calling example (GoogleCloudPlatform#9241)
* Use gemini-pro instead of gemini-pro-vision in chat * Update chat test case to use gemini-pro * Remove the preview package Add a function calling example * Missing license header * chore(Checkstyle tweak) * Add missing region tag Fix typo in project ID string * Use the latest libraries-bom that references the 0.4.0 version of the google-cloud-vertexai SDK Use the same example for the token count as in Python and Golang
1 parent 4864162 commit 6dc4da8

14 files changed

Lines changed: 164 additions & 40 deletions

vertexai/snippets/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<groupId>com.google.cloud</groupId>
6060
<scope>import</scope>
6161
<type>pom</type>
62-
<version>26.29.0</version>
62+
<version>26.32.0</version>
6363
</dependency>
6464
</dependencies>
6565
</dependencyManagement>

vertexai/snippets/src/main/java/vertexai/gemini/ChatDiscussion.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
// [START aiplatform_gemini_multiturn_chat]
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.GenerateContentResponse;
22-
import com.google.cloud.vertexai.generativeai.preview.ChatSession;
23-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
24-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
22+
import com.google.cloud.vertexai.generativeai.ChatSession;
23+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
24+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2525
import java.io.IOException;
2626

2727
public class ChatDiscussion {
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package vertexai.gemini;
18+
19+
// [START aiplatform_gemini_function_calling]
20+
import com.google.cloud.vertexai.VertexAI;
21+
import com.google.cloud.vertexai.api.Content;
22+
import com.google.cloud.vertexai.api.FunctionDeclaration;
23+
import com.google.cloud.vertexai.api.GenerateContentResponse;
24+
import com.google.cloud.vertexai.api.Schema;
25+
import com.google.cloud.vertexai.api.Tool;
26+
import com.google.cloud.vertexai.api.Type;
27+
import com.google.cloud.vertexai.generativeai.ChatSession;
28+
import com.google.cloud.vertexai.generativeai.ContentMaker;
29+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
30+
import com.google.cloud.vertexai.generativeai.PartMaker;
31+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
32+
import java.io.IOException;
33+
import java.util.Arrays;
34+
import java.util.Collections;
35+
36+
public class FunctionCalling {
37+
public static void main(String[] args) throws IOException {
38+
// TODO(developer): Replace these variables before running the sample.
39+
String projectId = "your-google-cloud-project-id";
40+
String location = "us-central1";
41+
String modelName = "gemini-pro";
42+
43+
String promptText = "What's the weather like in Paris?";
44+
45+
whatsTheWeatherLike(projectId, location, modelName, promptText);
46+
}
47+
48+
public static String whatsTheWeatherLike(String projectId, String location,
49+
String modelName, String promptText)
50+
throws IOException {
51+
52+
try (VertexAI vertexAI = new VertexAI(projectId, location)) {
53+
54+
FunctionDeclaration functionDeclaration = FunctionDeclaration.newBuilder()
55+
.setName("getCurrentWeather")
56+
.setDescription("Get the current weather in a given location")
57+
.setParameters(
58+
Schema.newBuilder()
59+
.setType(Type.OBJECT)
60+
.putProperties("location", Schema.newBuilder()
61+
.setType(Type.STRING)
62+
.setDescription("location")
63+
.build()
64+
)
65+
.addRequired("location")
66+
.build()
67+
)
68+
.build();
69+
70+
System.out.println("Function declaration:");
71+
System.out.println(functionDeclaration);
72+
73+
// Add the function to a "tool"
74+
Tool tool = Tool.newBuilder()
75+
.addFunctionDeclarations(functionDeclaration)
76+
.build();
77+
78+
// Start a chat session from a model, with the use of the declared function.
79+
GenerativeModel model =
80+
GenerativeModel.newBuilder()
81+
.setModelName(modelName)
82+
.setVertexAi(vertexAI)
83+
.setTools(Arrays.asList(tool))
84+
.build();
85+
ChatSession chat = model.startChat();
86+
87+
System.out.println(String.format("Ask the question: %s", promptText));
88+
GenerateContentResponse response = chat.sendMessage(promptText);
89+
90+
// The model will most likely return a function call to the declared
91+
// function `getCurrentWeather` with "Paris" as the value for the
92+
// argument `location`.
93+
System.out.println("\nPrint response: ");
94+
System.out.println(ResponseHandler.getContent(response));
95+
96+
// Provide an answer to the model so that it knows what the result
97+
// of a "function call" is.
98+
Content content =
99+
ContentMaker.fromMultiModalData(
100+
PartMaker.fromFunctionResponse(
101+
"getCurrentWeather",
102+
Collections.singletonMap("currentWeather", "sunny")));
103+
System.out.println("Provide the function response: ");
104+
System.out.println(content);
105+
response = chat.sendMessage(content);
106+
107+
// See what the model replies now
108+
System.out.println("Print response: ");
109+
String finalAnswer = ResponseHandler.getText(response);
110+
System.out.println(finalAnswer);
111+
112+
return finalAnswer;
113+
}
114+
}
115+
}
116+
// [END aiplatform_gemini_function_calling]

vertexai/snippets/src/main/java/vertexai/gemini/GetTokenCount.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
// [START aiplatform_gemini_token_count]
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.CountTokensResponse;
22-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
22+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
2323
import java.io.IOException;
2424
// [END aiplatform_gemini_token_count]
2525

@@ -30,7 +30,7 @@ public static void main(String[] args) throws IOException {
3030
String location = "us-central1";
3131
String modelName = "gemini-pro-vision";
3232

33-
String textPrompt = "How many tokens are there in this prompt?";
33+
String textPrompt = "Why is the sky blue?";
3434
getTokenCount(projectId, location, modelName, textPrompt);
3535
}
3636

vertexai/snippets/src/main/java/vertexai/gemini/MultiTurnMultimodal.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import com.google.cloud.vertexai.VertexAI;
2020
import com.google.cloud.vertexai.api.GenerateContentResponse;
2121
import com.google.cloud.vertexai.api.GenerationConfig;
22-
import com.google.cloud.vertexai.generativeai.preview.ChatSession;
23-
import com.google.cloud.vertexai.generativeai.preview.ContentMaker;
24-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
25-
import com.google.cloud.vertexai.generativeai.preview.PartMaker;
26-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
22+
import com.google.cloud.vertexai.generativeai.ChatSession;
23+
import com.google.cloud.vertexai.generativeai.ContentMaker;
24+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
25+
import com.google.cloud.vertexai.generativeai.PartMaker;
26+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2727
import java.io.IOException;
2828

2929
public class MultiTurnMultimodal {

vertexai/snippets/src/main/java/vertexai/gemini/MultimodalMultiImage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.Content;
2222
import com.google.cloud.vertexai.api.GenerateContentResponse;
23-
import com.google.cloud.vertexai.generativeai.preview.ContentMaker;
24-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
25-
import com.google.cloud.vertexai.generativeai.preview.PartMaker;
26-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
23+
import com.google.cloud.vertexai.generativeai.ContentMaker;
24+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
25+
import com.google.cloud.vertexai.generativeai.PartMaker;
26+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2727
import java.io.ByteArrayOutputStream;
2828
import java.io.IOException;
2929
import java.io.InputStream;

vertexai/snippets/src/main/java/vertexai/gemini/MultimodalQuery.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
// [START aiplatform_gemini_pro_example]
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.GenerateContentResponse;
22-
import com.google.cloud.vertexai.generativeai.preview.ContentMaker;
23-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
24-
import com.google.cloud.vertexai.generativeai.preview.PartMaker;
25-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
22+
import com.google.cloud.vertexai.generativeai.ContentMaker;
23+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
24+
import com.google.cloud.vertexai.generativeai.PartMaker;
25+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2626
import java.util.Base64;
2727

2828
public class MultimodalQuery {

vertexai/snippets/src/main/java/vertexai/gemini/MultimodalVideoInput.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
// [START aiplatform_gemini_single_turn_video]
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.GenerateContentResponse;
22-
import com.google.cloud.vertexai.generativeai.preview.ContentMaker;
23-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
24-
import com.google.cloud.vertexai.generativeai.preview.PartMaker;
25-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
22+
import com.google.cloud.vertexai.generativeai.ContentMaker;
23+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
24+
import com.google.cloud.vertexai.generativeai.PartMaker;
25+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2626
import java.io.IOException;
2727

2828
public class MultimodalVideoInput {

vertexai/snippets/src/main/java/vertexai/gemini/QuestionAnswer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
import com.google.cloud.vertexai.VertexAI;
2020
import com.google.cloud.vertexai.api.GenerateContentResponse;
21-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
22-
import com.google.cloud.vertexai.generativeai.preview.ResponseHandler;
21+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
22+
import com.google.cloud.vertexai.generativeai.ResponseHandler;
2323

2424
public class QuestionAnswer {
2525

vertexai/snippets/src/main/java/vertexai/gemini/Quickstart.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
// [START aiplatform_gemini_get_started]
2020
import com.google.cloud.vertexai.VertexAI;
2121
import com.google.cloud.vertexai.api.GenerateContentResponse;
22-
import com.google.cloud.vertexai.generativeai.preview.ContentMaker;
23-
import com.google.cloud.vertexai.generativeai.preview.GenerativeModel;
24-
import com.google.cloud.vertexai.generativeai.preview.PartMaker;
22+
import com.google.cloud.vertexai.generativeai.ContentMaker;
23+
import com.google.cloud.vertexai.generativeai.GenerativeModel;
24+
import com.google.cloud.vertexai.generativeai.PartMaker;
2525
import java.io.IOException;
2626

2727
public class Quickstart {

0 commit comments

Comments
 (0)