Skip to content

Commit 90a9033

Browse files
fix!: [aiplatform] Fix rpc tensorboard_service.proto definitions for BatchCreateTensorboardTimeSeries and BatchReadTensorboardTimeSeriesData (#10221)
* fix!: Fix rpc tensorboard_service.proto definitions for BatchCreateTensorboardTimeSeries and BatchReadTensorboardTimeSeriesData feat: add models to CustomJobSpec feat: add max_wait_duration to Scheduling docs: minor changes to comments PiperOrigin-RevId: 597666793 Source-Link: googleapis/googleapis@84ee19c Source-Link: https://github.com/googleapis/googleapis-gen/commit/8dc3e3e32043acd6893bed96a6b4566f00843329 Copy-Tag: eyJwIjoiamF2YS1haXBsYXRmb3JtLy5Pd2xCb3QueWFtbCIsImgiOiI4ZGMzZTNlMzIwNDNhY2Q2ODkzYmVkOTZhNmI0NTY2ZjAwODQzMzI5In0= * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * fix!: Fix rpc tensorboard_service.proto definitions for BatchCreateTensorboardTimeSeries and BatchReadTensorboardTimeSeriesData feat: add models to CustomJobSpec feat: add max_wait_duration to Scheduling feat: add CountTokens method to llm_utility_service docs: minor changes to comments PiperOrigin-RevId: 597667108 Source-Link: googleapis/googleapis@714ab03 Source-Link: https://github.com/googleapis/googleapis-gen/commit/3ff71b39d2ad2eeb5113940c5de5593da0527b26 Copy-Tag: eyJwIjoiamF2YS1haXBsYXRmb3JtLy5Pd2xCb3QueWFtbCIsImgiOiIzZmY3MWIzOWQyYWQyZWViNTExMzk0MGM1ZGU1NTkzZGEwNTI3YjI2In0= * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent c952200 commit 90a9033

File tree

69 files changed

+3180
-552
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+3180
-552
lines changed

java-aiplatform/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
195195
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.html
196196
[stability-image]: https://img.shields.io/badge/stability-stable-green
197197
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-aiplatform.svg
198-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-aiplatform/3.33.0
198+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-aiplatform/3.34.0
199199
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
200200
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
201201
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1/FeatureOnlineStoreAdminServiceClient.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ public final OperationsClient getOperationsClient() {
540540
* }</pre>
541541
*
542542
* @param parent Required. The resource name of the Location to create FeatureOnlineStores.
543-
* Format: `projects/{project}/locations/{location}'`
543+
* Format: `projects/{project}/locations/{location}`
544544
* @param featureOnlineStore Required. The FeatureOnlineStore to create.
545545
* @param featureOnlineStoreId Required. The ID to use for this FeatureOnlineStore, which will
546546
* become the final component of the FeatureOnlineStore's resource name.
@@ -586,7 +586,7 @@ public final OperationsClient getOperationsClient() {
586586
* }</pre>
587587
*
588588
* @param parent Required. The resource name of the Location to create FeatureOnlineStores.
589-
* Format: `projects/{project}/locations/{location}'`
589+
* Format: `projects/{project}/locations/{location}`
590590
* @param featureOnlineStore Required. The FeatureOnlineStore to create.
591591
* @param featureOnlineStoreId Required. The ID to use for this FeatureOnlineStore, which will
592592
* become the final component of the FeatureOnlineStore's resource name.

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/FeatureOnlineStoreAdminServiceClient.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ public final OperationsClient getOperationsClient() {
542542
* }</pre>
543543
*
544544
* @param parent Required. The resource name of the Location to create FeatureOnlineStores.
545-
* Format: `projects/{project}/locations/{location}'`
545+
* Format: `projects/{project}/locations/{location}`
546546
* @param featureOnlineStore Required. The FeatureOnlineStore to create.
547547
* @param featureOnlineStoreId Required. The ID to use for this FeatureOnlineStore, which will
548548
* become the final component of the FeatureOnlineStore's resource name.
@@ -588,7 +588,7 @@ public final OperationsClient getOperationsClient() {
588588
* }</pre>
589589
*
590590
* @param parent Required. The resource name of the Location to create FeatureOnlineStores.
591-
* Format: `projects/{project}/locations/{location}'`
591+
* Format: `projects/{project}/locations/{location}`
592592
* @param featureOnlineStore Required. The FeatureOnlineStore to create.
593593
* @param featureOnlineStoreId Required. The ID to use for this FeatureOnlineStore, which will
594594
* become the final component of the FeatureOnlineStore's resource name.

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/LlmUtilityServiceClient.java

+156-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
* EndpointName endpoint =
6161
* EndpointName.ofProjectLocationEndpointName("[PROJECT]", "[LOCATION]", "[ENDPOINT]");
6262
* List<Value> instances = new ArrayList<>();
63-
* ComputeTokensResponse response = llmUtilityServiceClient.computeTokens(endpoint, instances);
63+
* CountTokensResponse response = llmUtilityServiceClient.countTokens(endpoint, instances);
6464
* }
6565
* }</pre>
6666
*
@@ -74,6 +74,25 @@
7474
* <th>Description</th>
7575
* <th>Method Variants</th>
7676
* <tr>
77+
* <td>CountTokens</td>
78+
* <td><p> Perform a token counting.</td>
79+
* <td>
80+
* <p>Request object method variants only take one parameter, a request object, which must be constructed before the call.</p>
81+
* <ul>
82+
* <li>countTokens(CountTokensRequest request)
83+
* </ul>
84+
* <p>"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.</p>
85+
* <ul>
86+
* <li>countTokens(EndpointName endpoint, List<Value> instances)
87+
* <li>countTokens(String endpoint, List<Value> instances)
88+
* </ul>
89+
* <p>Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.</p>
90+
* <ul>
91+
* <li>countTokensCallable()
92+
* </ul>
93+
* </td>
94+
* </tr>
95+
* <tr>
7796
* <td>ComputeTokens</td>
7897
* <td><p> Return a list of tokens based on the input text.</td>
7998
* <td>
@@ -260,6 +279,142 @@ public LlmUtilityServiceStub getStub() {
260279
return stub;
261280
}
262281

282+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
283+
/**
284+
* Perform a token counting.
285+
*
286+
* <p>Sample code:
287+
*
288+
* <pre>{@code
289+
* // This snippet has been automatically generated and should be regarded as a code template only.
290+
* // It will require modifications to work:
291+
* // - It may require correct/in-range values for request initialization.
292+
* // - It may require specifying regional endpoints when creating the service client as shown in
293+
* // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
294+
* try (LlmUtilityServiceClient llmUtilityServiceClient = LlmUtilityServiceClient.create()) {
295+
* EndpointName endpoint =
296+
* EndpointName.ofProjectLocationEndpointName("[PROJECT]", "[LOCATION]", "[ENDPOINT]");
297+
* List<Value> instances = new ArrayList<>();
298+
* CountTokensResponse response = llmUtilityServiceClient.countTokens(endpoint, instances);
299+
* }
300+
* }</pre>
301+
*
302+
* @param endpoint Required. The name of the Endpoint requested to perform token counting. Format:
303+
* `projects/{project}/locations/{location}/endpoints/{endpoint}`
304+
* @param instances Required. The instances that are the input to token counting call. Schema is
305+
* identical to the prediction schema of the underlying model.
306+
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
307+
*/
308+
public final CountTokensResponse countTokens(EndpointName endpoint, List<Value> instances) {
309+
CountTokensRequest request =
310+
CountTokensRequest.newBuilder()
311+
.setEndpoint(endpoint == null ? null : endpoint.toString())
312+
.addAllInstances(instances)
313+
.build();
314+
return countTokens(request);
315+
}
316+
317+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
318+
/**
319+
* Perform a token counting.
320+
*
321+
* <p>Sample code:
322+
*
323+
* <pre>{@code
324+
* // This snippet has been automatically generated and should be regarded as a code template only.
325+
* // It will require modifications to work:
326+
* // - It may require correct/in-range values for request initialization.
327+
* // - It may require specifying regional endpoints when creating the service client as shown in
328+
* // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
329+
* try (LlmUtilityServiceClient llmUtilityServiceClient = LlmUtilityServiceClient.create()) {
330+
* String endpoint =
331+
* EndpointName.ofProjectLocationEndpointName("[PROJECT]", "[LOCATION]", "[ENDPOINT]")
332+
* .toString();
333+
* List<Value> instances = new ArrayList<>();
334+
* CountTokensResponse response = llmUtilityServiceClient.countTokens(endpoint, instances);
335+
* }
336+
* }</pre>
337+
*
338+
* @param endpoint Required. The name of the Endpoint requested to perform token counting. Format:
339+
* `projects/{project}/locations/{location}/endpoints/{endpoint}`
340+
* @param instances Required. The instances that are the input to token counting call. Schema is
341+
* identical to the prediction schema of the underlying model.
342+
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
343+
*/
344+
public final CountTokensResponse countTokens(String endpoint, List<Value> instances) {
345+
CountTokensRequest request =
346+
CountTokensRequest.newBuilder().setEndpoint(endpoint).addAllInstances(instances).build();
347+
return countTokens(request);
348+
}
349+
350+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
351+
/**
352+
* Perform a token counting.
353+
*
354+
* <p>Sample code:
355+
*
356+
* <pre>{@code
357+
* // This snippet has been automatically generated and should be regarded as a code template only.
358+
* // It will require modifications to work:
359+
* // - It may require correct/in-range values for request initialization.
360+
* // - It may require specifying regional endpoints when creating the service client as shown in
361+
* // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
362+
* try (LlmUtilityServiceClient llmUtilityServiceClient = LlmUtilityServiceClient.create()) {
363+
* CountTokensRequest request =
364+
* CountTokensRequest.newBuilder()
365+
* .setEndpoint(
366+
* EndpointName.ofProjectLocationEndpointName(
367+
* "[PROJECT]", "[LOCATION]", "[ENDPOINT]")
368+
* .toString())
369+
* .setModel("model104069929")
370+
* .addAllInstances(new ArrayList<Value>())
371+
* .addAllContents(new ArrayList<Content>())
372+
* .build();
373+
* CountTokensResponse response = llmUtilityServiceClient.countTokens(request);
374+
* }
375+
* }</pre>
376+
*
377+
* @param request The request object containing all of the parameters for the API call.
378+
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
379+
*/
380+
public final CountTokensResponse countTokens(CountTokensRequest request) {
381+
return countTokensCallable().call(request);
382+
}
383+
384+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
385+
/**
386+
* Perform a token counting.
387+
*
388+
* <p>Sample code:
389+
*
390+
* <pre>{@code
391+
* // This snippet has been automatically generated and should be regarded as a code template only.
392+
* // It will require modifications to work:
393+
* // - It may require correct/in-range values for request initialization.
394+
* // - It may require specifying regional endpoints when creating the service client as shown in
395+
* // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
396+
* try (LlmUtilityServiceClient llmUtilityServiceClient = LlmUtilityServiceClient.create()) {
397+
* CountTokensRequest request =
398+
* CountTokensRequest.newBuilder()
399+
* .setEndpoint(
400+
* EndpointName.ofProjectLocationEndpointName(
401+
* "[PROJECT]", "[LOCATION]", "[ENDPOINT]")
402+
* .toString())
403+
* .setModel("model104069929")
404+
* .addAllInstances(new ArrayList<Value>())
405+
* .addAllContents(new ArrayList<Content>())
406+
* .build();
407+
* ApiFuture<CountTokensResponse> future =
408+
* llmUtilityServiceClient.countTokensCallable().futureCall(request);
409+
* // Do something.
410+
* CountTokensResponse response = future.get();
411+
* }
412+
* }</pre>
413+
*/
414+
public final UnaryCallable<CountTokensRequest, CountTokensResponse> countTokensCallable() {
415+
return stub.countTokensCallable();
416+
}
417+
263418
// AUTO-GENERATED DOCUMENTATION AND METHOD.
264419
/**
265420
* Return a list of tokens based on the input text.

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/LlmUtilityServiceSettings.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
* <p>The builder of this class is recursive, so contained classes are themselves builders. When
5959
* build() is called, the tree of builders is called to create the complete settings object.
6060
*
61-
* <p>For example, to set the total timeout of computeTokens to 30 seconds:
61+
* <p>For example, to set the total timeout of countTokens to 30 seconds:
6262
*
6363
* <pre>{@code
6464
* // This snippet has been automatically generated and should be regarded as a code template only.
@@ -69,10 +69,10 @@
6969
* LlmUtilityServiceSettings.Builder llmUtilityServiceSettingsBuilder =
7070
* LlmUtilityServiceSettings.newBuilder();
7171
* llmUtilityServiceSettingsBuilder
72-
* .computeTokensSettings()
72+
* .countTokensSettings()
7373
* .setRetrySettings(
7474
* llmUtilityServiceSettingsBuilder
75-
* .computeTokensSettings()
75+
* .countTokensSettings()
7676
* .getRetrySettings()
7777
* .toBuilder()
7878
* .setTotalTimeout(Duration.ofSeconds(30))
@@ -84,6 +84,11 @@
8484
@Generated("by gapic-generator-java")
8585
public class LlmUtilityServiceSettings extends ClientSettings<LlmUtilityServiceSettings> {
8686

87+
/** Returns the object with the settings used for calls to countTokens. */
88+
public UnaryCallSettings<CountTokensRequest, CountTokensResponse> countTokensSettings() {
89+
return ((LlmUtilityServiceStubSettings) getStubSettings()).countTokensSettings();
90+
}
91+
8792
/** Returns the object with the settings used for calls to computeTokens. */
8893
public UnaryCallSettings<ComputeTokensRequest, ComputeTokensResponse> computeTokensSettings() {
8994
return ((LlmUtilityServiceStubSettings) getStubSettings()).computeTokensSettings();
@@ -213,6 +218,12 @@ public Builder applyToAllUnaryMethods(
213218
return this;
214219
}
215220

221+
/** Returns the builder for the settings used for calls to countTokens. */
222+
public UnaryCallSettings.Builder<CountTokensRequest, CountTokensResponse>
223+
countTokensSettings() {
224+
return getStubSettingsBuilder().countTokensSettings();
225+
}
226+
216227
/** Returns the builder for the settings used for calls to computeTokens. */
217228
public UnaryCallSettings.Builder<ComputeTokensRequest, ComputeTokensResponse>
218229
computeTokensSettings() {

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/gapic_metadata.json

+3
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,9 @@
667667
"ComputeTokens": {
668668
"methods": ["computeTokens", "computeTokens", "computeTokens", "computeTokensCallable"]
669669
},
670+
"CountTokens": {
671+
"methods": ["countTokens", "countTokens", "countTokens", "countTokensCallable"]
672+
},
670673
"GetIamPolicy": {
671674
"methods": ["getIamPolicy", "getIamPolicyCallable"]
672675
},

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/package-info.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
* EndpointName endpoint =
250250
* EndpointName.ofProjectLocationEndpointName("[PROJECT]", "[LOCATION]", "[ENDPOINT]");
251251
* List<Value> instances = new ArrayList<>();
252-
* ComputeTokensResponse response = llmUtilityServiceClient.computeTokens(endpoint, instances);
252+
* CountTokensResponse response = llmUtilityServiceClient.countTokens(endpoint, instances);
253253
* }
254254
* }</pre>
255255
*

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/stub/GrpcLlmUtilityServiceStub.java

+31
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import com.google.api.gax.rpc.UnaryCallable;
2929
import com.google.cloud.aiplatform.v1beta1.ComputeTokensRequest;
3030
import com.google.cloud.aiplatform.v1beta1.ComputeTokensResponse;
31+
import com.google.cloud.aiplatform.v1beta1.CountTokensRequest;
32+
import com.google.cloud.aiplatform.v1beta1.CountTokensResponse;
3133
import com.google.cloud.location.GetLocationRequest;
3234
import com.google.cloud.location.ListLocationsRequest;
3335
import com.google.cloud.location.ListLocationsResponse;
@@ -53,6 +55,16 @@
5355
@BetaApi
5456
@Generated("by gapic-generator-java")
5557
public class GrpcLlmUtilityServiceStub extends LlmUtilityServiceStub {
58+
private static final MethodDescriptor<CountTokensRequest, CountTokensResponse>
59+
countTokensMethodDescriptor =
60+
MethodDescriptor.<CountTokensRequest, CountTokensResponse>newBuilder()
61+
.setType(MethodDescriptor.MethodType.UNARY)
62+
.setFullMethodName("google.cloud.aiplatform.v1beta1.LlmUtilityService/CountTokens")
63+
.setRequestMarshaller(ProtoUtils.marshaller(CountTokensRequest.getDefaultInstance()))
64+
.setResponseMarshaller(
65+
ProtoUtils.marshaller(CountTokensResponse.getDefaultInstance()))
66+
.build();
67+
5668
private static final MethodDescriptor<ComputeTokensRequest, ComputeTokensResponse>
5769
computeTokensMethodDescriptor =
5870
MethodDescriptor.<ComputeTokensRequest, ComputeTokensResponse>newBuilder()
@@ -110,6 +122,7 @@ public class GrpcLlmUtilityServiceStub extends LlmUtilityServiceStub {
110122
ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance()))
111123
.build();
112124

125+
private final UnaryCallable<CountTokensRequest, CountTokensResponse> countTokensCallable;
113126
private final UnaryCallable<ComputeTokensRequest, ComputeTokensResponse> computeTokensCallable;
114127
private final UnaryCallable<ListLocationsRequest, ListLocationsResponse> listLocationsCallable;
115128
private final UnaryCallable<ListLocationsRequest, ListLocationsPagedResponse>
@@ -164,6 +177,16 @@ protected GrpcLlmUtilityServiceStub(
164177
this.callableFactory = callableFactory;
165178
this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory);
166179

180+
GrpcCallSettings<CountTokensRequest, CountTokensResponse> countTokensTransportSettings =
181+
GrpcCallSettings.<CountTokensRequest, CountTokensResponse>newBuilder()
182+
.setMethodDescriptor(countTokensMethodDescriptor)
183+
.setParamsExtractor(
184+
request -> {
185+
RequestParamsBuilder builder = RequestParamsBuilder.create();
186+
builder.add("endpoint", String.valueOf(request.getEndpoint()));
187+
return builder.build();
188+
})
189+
.build();
167190
GrpcCallSettings<ComputeTokensRequest, ComputeTokensResponse> computeTokensTransportSettings =
168191
GrpcCallSettings.<ComputeTokensRequest, ComputeTokensResponse>newBuilder()
169192
.setMethodDescriptor(computeTokensMethodDescriptor)
@@ -226,6 +249,9 @@ protected GrpcLlmUtilityServiceStub(
226249
})
227250
.build();
228251

252+
this.countTokensCallable =
253+
callableFactory.createUnaryCallable(
254+
countTokensTransportSettings, settings.countTokensSettings(), clientContext);
229255
this.computeTokensCallable =
230256
callableFactory.createUnaryCallable(
231257
computeTokensTransportSettings, settings.computeTokensSettings(), clientContext);
@@ -258,6 +284,11 @@ public GrpcOperationsStub getOperationsStub() {
258284
return operationsStub;
259285
}
260286

287+
@Override
288+
public UnaryCallable<CountTokensRequest, CountTokensResponse> countTokensCallable() {
289+
return countTokensCallable;
290+
}
291+
261292
@Override
262293
public UnaryCallable<ComputeTokensRequest, ComputeTokensResponse> computeTokensCallable() {
263294
return computeTokensCallable;

java-aiplatform/google-cloud-aiplatform/src/main/java/com/google/cloud/aiplatform/v1beta1/stub/LlmUtilityServiceStub.java

+6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.google.api.gax.rpc.UnaryCallable;
2424
import com.google.cloud.aiplatform.v1beta1.ComputeTokensRequest;
2525
import com.google.cloud.aiplatform.v1beta1.ComputeTokensResponse;
26+
import com.google.cloud.aiplatform.v1beta1.CountTokensRequest;
27+
import com.google.cloud.aiplatform.v1beta1.CountTokensResponse;
2628
import com.google.cloud.location.GetLocationRequest;
2729
import com.google.cloud.location.ListLocationsRequest;
2830
import com.google.cloud.location.ListLocationsResponse;
@@ -44,6 +46,10 @@
4446
@Generated("by gapic-generator-java")
4547
public abstract class LlmUtilityServiceStub implements BackgroundResource {
4648

49+
public UnaryCallable<CountTokensRequest, CountTokensResponse> countTokensCallable() {
50+
throw new UnsupportedOperationException("Not implemented: countTokensCallable()");
51+
}
52+
4753
public UnaryCallable<ComputeTokensRequest, ComputeTokensResponse> computeTokensCallable() {
4854
throw new UnsupportedOperationException("Not implemented: computeTokensCallable()");
4955
}

0 commit comments

Comments
 (0)