Skip to content

Commit 4cd8529

Browse files
authored
feat: Added Trimming/NativeAOT support. (#21)
1 parent 6203354 commit 4cd8529

File tree

5 files changed

+32
-11
lines changed

5 files changed

+32
-11
lines changed

src/Custom/Embeddings/EmbeddingClient.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public virtual async Task<ClientResult<OpenAIEmbedding>> GenerateEmbeddingAsync(
9999
Argument.AssertNotNullOrEmpty(input, nameof(input));
100100

101101
options ??= new();
102-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(input), ref options);
102+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(input, SourceGenerationContext.Default.String), ref options);
103103

104104
using BinaryContent content = options;
105105
ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);
@@ -118,7 +118,7 @@ public virtual ClientResult<OpenAIEmbedding> GenerateEmbedding(string input, Emb
118118
Argument.AssertNotNullOrEmpty(input, nameof(input));
119119

120120
options ??= new();
121-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(input), ref options);
121+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(input, SourceGenerationContext.Default.String), ref options);
122122

123123
using BinaryContent content = options;
124124
ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions());
@@ -137,7 +137,7 @@ public virtual async Task<ClientResult<OpenAIEmbeddingCollection>> GenerateEmbed
137137
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
138138

139139
options ??= new();
140-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
140+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableString), ref options);
141141

142142
using BinaryContent content = options;
143143
ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);
@@ -157,7 +157,7 @@ public virtual ClientResult<OpenAIEmbeddingCollection> GenerateEmbeddings(IEnume
157157
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
158158

159159
options ??= new();
160-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
160+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableString), ref options);
161161

162162
using BinaryContent content = options;
163163
ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions());
@@ -176,7 +176,7 @@ public virtual async Task<ClientResult<OpenAIEmbeddingCollection>> GenerateEmbed
176176
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
177177

178178
options ??= new();
179-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
179+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableReadOnlyMemoryInt32), ref options);
180180

181181
using BinaryContent content = options;
182182
ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);
@@ -195,7 +195,7 @@ public virtual ClientResult<OpenAIEmbeddingCollection> GenerateEmbeddings(IEnume
195195
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
196196

197197
options ??= new();
198-
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
198+
CreateEmbeddingGenerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableReadOnlyMemoryInt32), ref options);
199199

200200
using BinaryContent content = options;
201201
ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions());

src/Custom/Moderations/ModerationClient.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public virtual async Task<ClientResult<ModerationResult>> ClassifyTextAsync(stri
9797
Argument.AssertNotNullOrEmpty(input, nameof(input));
9898

9999
ModerationOptions options = new();
100-
CreateModerationOptions(BinaryData.FromObjectAsJson(input), ref options);
100+
CreateModerationOptions(BinaryData.FromObjectAsJson(input, SourceGenerationContext.Default.String), ref options);
101101

102102
using BinaryContent content = options;
103103
ClientResult result = await ClassifyTextAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);
@@ -114,7 +114,7 @@ public virtual ClientResult<ModerationResult> ClassifyText(string input, Cancell
114114
Argument.AssertNotNullOrEmpty(input, nameof(input));
115115

116116
ModerationOptions options = new();
117-
CreateModerationOptions(BinaryData.FromObjectAsJson(input), ref options);
117+
CreateModerationOptions(BinaryData.FromObjectAsJson(input, SourceGenerationContext.Default.String), ref options);
118118

119119
using BinaryContent content = options;
120120
ClientResult result = ClassifyText(content, cancellationToken.ToRequestOptions());
@@ -131,7 +131,7 @@ public virtual async Task<ClientResult<ModerationResultCollection>> ClassifyText
131131
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
132132

133133
ModerationOptions options = new();
134-
CreateModerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
134+
CreateModerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableString), ref options);
135135

136136
using BinaryContent content = options;
137137
ClientResult result = await ClassifyTextAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false);
@@ -148,7 +148,7 @@ public virtual ClientResult<ModerationResultCollection> ClassifyText(IEnumerable
148148
Argument.AssertNotNullOrEmpty(inputs, nameof(inputs));
149149

150150
ModerationOptions options = new();
151-
CreateModerationOptions(BinaryData.FromObjectAsJson(inputs), ref options);
151+
CreateModerationOptions(BinaryData.FromObjectAsJson(inputs, SourceGenerationContext.Default.IEnumerableString), ref options);
152152

153153
using BinaryContent content = options;
154154
ClientResult result = ClassifyText(content, cancellationToken.ToRequestOptions());

src/Custom/OpenAIModelFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable<Op
3030
public static OpenAIEmbedding OpenAIEmbedding(ReadOnlyMemory<float> vector = default, int index = default)
3131
{
3232
// TODO: Vector must be converted to base64-encoded string.
33-
return new OpenAIEmbedding(index, BinaryData.FromObjectAsJson(vector), InternalEmbeddingObject.Embedding, serializedAdditionalRawData: null);
33+
return new OpenAIEmbedding(index, BinaryData.FromObjectAsJson(vector, SourceGenerationContext.Default.ReadOnlyMemorySingle), InternalEmbeddingObject.Embedding, serializedAdditionalRawData: null);
3434
}
3535

3636
}

src/OpenAI.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,14 @@
7878
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
7979
<PackageReference Include="System.ClientModel" Version="1.2.1" />
8080
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="6.0.1" />
81+
<PackageReference Include="System.Memory.Data" Version="9.0.0" />
8182
</ItemGroup>
83+
84+
<PropertyGroup Label="Trimmable" Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))">
85+
<IsAotCompatible Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">true</IsAotCompatible>
86+
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
87+
<IsTrimmable>true</IsTrimmable>
88+
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
89+
<TrimmerSingleWarn>false</TrimmerSingleWarn>
90+
</PropertyGroup>
8291
</Project>

src/SourceGenerationContext.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text.Json.Serialization;
4+
5+
namespace OpenAI;
6+
7+
[JsonSourceGenerationOptions]
8+
[JsonSerializable(typeof(string))]
9+
[JsonSerializable(typeof(IEnumerable<string>))]
10+
[JsonSerializable(typeof(IEnumerable<ReadOnlyMemory<int>>))]
11+
[JsonSerializable(typeof(ReadOnlyMemory<float>))]
12+
internal sealed partial class SourceGenerationContext : JsonSerializerContext;

0 commit comments

Comments
 (0)