Skip to content

Commit d47c08b

Browse files
committed
chore: Add the assembly version header
Also shallow copies the client builder to avoid side effect from DI and assembly version header modifications.
1 parent fc487d9 commit d47c08b

File tree

1 file changed

+44
-6
lines changed

1 file changed

+44
-6
lines changed

apis/Google.Cloud.VertexAI.Extensions/Google.Cloud.VertexAI.Extensions/VertexAIExtensions.cs

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static IChatClient BuildIChatClient(
5757
this PredictionServiceClientBuilder builder,
5858
IServiceProvider? provider = null, string? defaultModelId = null)
5959
{
60-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
60+
builder = builder.WithAssemblyVersionHeader();
6161

6262
PredictionServiceClient client = provider is not null ?
6363
builder.Build(provider) :
@@ -83,7 +83,7 @@ public static async Task<IChatClient> BuildIChatClientAsync(
8383
IServiceProvider? provider = null, string? defaultModelId = null,
8484
CancellationToken cancellationToken = default)
8585
{
86-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
86+
builder = builder.WithAssemblyVersionHeader();
8787

8888
PredictionServiceClient client = await (provider is not null ?
8989
builder.BuildAsync(provider, cancellationToken) :
@@ -126,7 +126,7 @@ public static IEmbeddingGenerator<string, Embedding<float>> BuildIEmbeddingGener
126126
this PredictionServiceClientBuilder builder,
127127
IServiceProvider? provider = null, string? defaultModelId = null)
128128
{
129-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
129+
builder = builder.WithAssemblyVersionHeader();
130130

131131
PredictionServiceClient client = provider is not null ?
132132
builder.Build(provider) :
@@ -152,7 +152,7 @@ public static async Task<IEmbeddingGenerator<string, Embedding<float>>> BuildIEm
152152
IServiceProvider? provider = null, string? defaultModelId = null,
153153
CancellationToken cancellationToken = default)
154154
{
155-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
155+
builder = builder.WithAssemblyVersionHeader();
156156

157157
PredictionServiceClient client = await (provider is not null ?
158158
builder.BuildAsync(provider, cancellationToken) :
@@ -194,7 +194,7 @@ public static IImageGenerator BuildIImageGenerator(
194194
this PredictionServiceClientBuilder builder,
195195
IServiceProvider? provider = null, string? defaultModelId = null)
196196
{
197-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
197+
builder = builder.WithAssemblyVersionHeader();
198198

199199
PredictionServiceClient client = provider is not null ?
200200
builder.Build(provider) :
@@ -220,7 +220,7 @@ public static async Task<IImageGenerator> BuildIImageGeneratorAsync(
220220
IServiceProvider? provider = null, string? defaultModelId = null,
221221
CancellationToken cancellationToken = default)
222222
{
223-
GaxPreconditions.CheckNotNull(builder, nameof(builder));
223+
builder = builder.WithAssemblyVersionHeader();
224224

225225
PredictionServiceClient client = await (provider is not null ?
226226
builder.BuildAsync(provider, cancellationToken) :
@@ -303,4 +303,42 @@ public static AITool AsAITool(this Tool tool)
303303

304304
return usage;
305305
}
306+
307+
private static PredictionServiceClientBuilder WithAssemblyVersionHeader(this PredictionServiceClientBuilder builder)
308+
{
309+
GaxPreconditions.CheckNotNull(builder, nameof(builder));
310+
var newBuilder = MemberwiseCloneBuilder();
311+
newBuilder.Settings = newBuilder.Settings?.Clone() ?? new PredictionServiceSettings();
312+
newBuilder.Settings.VersionHeaderBuilder.AppendAssemblyVersion("gccl", typeof(VertexAIExtensions));
313+
return newBuilder;
314+
315+
// This is a shallow copy.
316+
PredictionServiceClientBuilder MemberwiseCloneBuilder() => new PredictionServiceClientBuilder
317+
{
318+
ApiKey = builder.ApiKey,
319+
CallInvoker = builder.CallInvoker,
320+
ChannelCredentials = builder.ChannelCredentials,
321+
Credential = builder.Credential,
322+
#pragma warning disable CS0618 // Type or member is obsolete
323+
CredentialsPath = builder.CredentialsPath,
324+
#pragma warning restore CS0618 // Type or member is obsolete
325+
Endpoint = builder.Endpoint,
326+
GoogleCredential = builder.GoogleCredential,
327+
GrpcAdapter = builder.GrpcAdapter,
328+
GrpcChannelOptions = builder.GrpcChannelOptions,
329+
#pragma warning disable CS0618 // Type or member is obsolete
330+
JsonCredentials = builder.JsonCredentials,
331+
#pragma warning restore CS0618 // Type or member is obsolete
332+
Logger = builder.Logger,
333+
QuotaProject = builder.QuotaProject,
334+
Scopes = builder.Scopes,
335+
Settings = builder.Settings,
336+
#pragma warning disable CS0618 // Type or member is obsolete
337+
TokenAccessMethod = builder.TokenAccessMethod,
338+
#pragma warning restore CS0618 // Type or member is obsolete
339+
UniverseDomain = builder.UniverseDomain,
340+
UseJwtAccessWithScopes = builder.UseJwtAccessWithScopes,
341+
UserAgent = builder.UserAgent,
342+
};
343+
}
306344
}

0 commit comments

Comments
 (0)