openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.6.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

tests/Images/ImagesTests.cs

176lines · modecode

1using Microsoft.ClientModel.TestFramework;
2using NUnit.Framework;
3using OpenAI.Images;
4using System;
5using System.ClientModel;
6using System.Threading.Tasks;
7using static OpenAI.Tests.TestHelpers;
8
9namespace OpenAI.Tests.Images;
10
11public partial class ImagesTests : ImageTestFixtureBase
12{
13 public ImagesTests(bool isAsync) : base(isAsync)
14 {
15 TestTimeoutInSeconds = 30;
16 }
17
18 [RecordedTest]
19 public async Task BasicGenerationWorks()
20 {
21 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images, "dall-e-3");
22
23 string prompt = "An isolated stop sign.";
24
25 GeneratedImage image = await client.GenerateImageAsync(prompt);
26 Assert.That(image.ImageUri, Is.Not.Null);
27 Assert.That(image.ImageBytes, Is.Null);
28
29 Console.WriteLine(image.ImageUri.AbsoluteUri);
30 await ValidateGeneratedImage(image.ImageUri, ["stop"]);
31 }
32
33 [RecordedTest]
34 public async Task GenerationWithOptionsWorks()
35 {
36 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images, "dall-e-3");
37
38 string prompt = "An isolated stop sign.";
39
40 ImageGenerationOptions options = new()
41 {
42 Quality = GeneratedImageQuality.Standard,
43 Style = GeneratedImageStyle.Natural,
44 };
45
46 GeneratedImage image = await client.GenerateImageAsync(prompt, options);
47 Assert.That(image.ImageUri, Is.Not.Null);
48 Assert.That(image.ImageBytes, Is.Null);
49
50 await ValidateGeneratedImage(image.ImageUri, ["stop"]);
51 }
52
53 [RecordedTest]
54 public async Task GenerationWithBytesResponseWorks()
55 {
56 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images, "dall-e-3");
57
58 string prompt = "An isolated stop sign.";
59
60 ImageGenerationOptions options = new()
61 {
62 ResponseFormat = GeneratedImageFormat.Bytes
63 };
64
65 GeneratedImage image = await client.GenerateImageAsync(prompt, options);
66 Assert.That(image.ImageUri, Is.Null);
67 Assert.That(image.ImageBytes, Is.Not.Null);
68
69 await ValidateGeneratedImage(image.ImageBytes, ["stop"]);
70 }
71
72 [RecordedTest]
73 public void GenerateImageCanParseServiceError()
74 {
75 ImageClient client = CreateProxyFromClient(new ImageClient("gpt-image-1", new ApiKeyCredential("fake_key"), InstrumentClientOptions(new OpenAIClientOptions())));
76 string prompt = "An isolated stop sign.";
77 ClientResultException ex = Assert.ThrowsAsync<ClientResultException>(async () => await client.GenerateImageAsync(prompt));
78 Assert.That(ex.Status, Is.EqualTo(401));
79 }
80
81 [RecordedTest]
82 public async Task GenerationOfMultipleImagesWorks()
83 {
84 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images, "dall-e-2");
85
86 string prompt = "An isolated stop sign.";
87
88 ImageGenerationOptions options = new()
89 {
90 ResponseFormat = GeneratedImageFormat.Uri,
91 Size = GeneratedImageSize.W256xH256
92 };
93
94 GeneratedImageCollection images = await client.GenerateImagesAsync(prompt, 2, options);
95
96 long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds();
97
98 Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024));
99 Assert.That(images.Count, Is.EqualTo(2));
100
101 foreach (GeneratedImage image in images)
102 {
103 Assert.That(image.ImageUri, Is.Not.Null);
104 Assert.That(image.ImageBytes, Is.Null);
105 await ValidateGeneratedImage(image.ImageUri, ["stop"]);
106 }
107 }
108
109 [RecordedTest]
110 public async Task GenerationOfMultipleImagesWithBytesResponseWorks()
111 {
112 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images);
113
114 string prompt = "An isolated stop sign.";
115
116 GeneratedImageCollection images = await client.GenerateImagesAsync(prompt, 2);
117
118 long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds();
119
120 Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024));
121 Assert.That(images.Count, Is.EqualTo(2));
122
123 foreach (GeneratedImage image in images)
124 {
125 Assert.That(image.ImageUri, Is.Null);
126 Assert.That(image.ImageBytes, Is.Not.Null);
127 await ValidateGeneratedImage(image.ImageBytes, ["stop"]);
128 }
129 }
130
131 [RecordedTest]
132 public void GenerateImagesCanParseServiceError()
133 {
134 ImageClient client = CreateProxyFromClient(new ImageClient("gpt-image-1", new ApiKeyCredential("fake_key"), InstrumentClientOptions(new OpenAIClientOptions())));
135 string prompt = "An isolated stop sign.";
136 ClientResultException ex = Assert.ThrowsAsync<ClientResultException>(async () => await client.GenerateImagesAsync(prompt, 2));
137
138 Assert.That(ex.Status, Is.EqualTo(401));
139 }
140
141 [RecordedTest]
142 public async Task GptImage1Works()
143 {
144 ImageClient client = GetProxiedOpenAIClient<ImageClient>(TestScenario.Images, "gpt-image-1");
145
146 string prompt = "An isolated stop sign.";
147
148 ImageGenerationOptions options = new()
149 {
150 OutputFileFormat = GeneratedImageFileFormat.Webp,
151 OutputCompressionFactor = 42,
152 Background = GeneratedImageBackground.Transparent,
153 ModerationLevel = GeneratedImageModerationLevel.Low,
154 Size = GeneratedImageSize.W1024xH1536,
155 };
156
157 GeneratedImageCollection images = await client.GenerateImagesAsync(prompt, 2, options);
158
159 long unixTime2025 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds();
160
161 Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2025));
162 Assert.That(images.Count, Is.EqualTo(2));
163
164 Assert.That(images.Usage.InputTokenCount, Is.GreaterThan(0));
165 Assert.That(images.Usage.OutputTokenCount, Is.GreaterThan(0));
166 Assert.That(images.Usage.TotalTokenCount, Is.GreaterThan(0));
167 Assert.That(images.Usage.InputTokenDetails.TextTokenCount, Is.GreaterThan(0));
168 Assert.That(images.Usage.InputTokenDetails.ImageTokenCount, Is.EqualTo(0));
169
170 foreach (GeneratedImage image in images)
171 {
172 Assert.That(image.ImageUri, Is.Null);
173 Assert.That(image.ImageBytes, Is.Not.Null);
174 }
175 }
176}
177