openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.0.0-beta.10

Branches

Tags

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

Clone

HTTPS

Download ZIP

tests/Embeddings/EmbeddingTests.cs

141lines · modecode

1using NUnit.Framework;
2using OpenAI.Embeddings;
3using OpenAI.Tests.Utility;
4using System;
5using System.ClientModel;
6using System.Collections.Generic;
7using System.Threading.Tasks;
8using static OpenAI.Tests.TestHelpers;
9
10namespace OpenAI.Tests.Embeddings;
11
12[TestFixture(true)]
13[TestFixture(false)]
14[Parallelizable(ParallelScope.All)]
15[Category("Embeddings")]
16public partial class EmbeddingTests : SyncAsyncTestBase
17{
18 public EmbeddingTests(bool isAsync) : base(isAsync)
19 {
20 }
21
22 public enum EmbeddingsInputKind
23 {
24 UsingStrings,
25 UsingIntegers,
26 }
27
28 [Test]
29 public async Task GenerateSingleEmbedding()
30 {
31 EmbeddingClient client = new("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
32
33 string input = "Hello, world!";
34
35 Embedding embedding = IsAsync
36 ? await client.GenerateEmbeddingAsync(input)
37 : client.GenerateEmbedding(input);
38 Assert.That(embedding, Is.Not.Null);
39 Assert.That(embedding.Index, Is.EqualTo(0));
40 Assert.That(embedding.Vector, Is.Not.Null);
41 Assert.That(embedding.Vector.Span.Length, Is.EqualTo(1536));
42
43 float[] array = embedding.Vector.ToArray();
44 Assert.That(array.Length, Is.EqualTo(1536));
45 }
46
47 [Test]
48 [TestCase(EmbeddingsInputKind.UsingStrings)]
49 [TestCase(EmbeddingsInputKind.UsingIntegers)]
50 public async Task GenerateMultipleEmbeddings(EmbeddingsInputKind embeddingsInputKind)
51 {
52 EmbeddingClient client = new("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
53
54 const int Dimensions = 456;
55
56 EmbeddingGenerationOptions options = new()
57 {
58 Dimensions = Dimensions,
59 };
60
61 EmbeddingCollection embeddings = null;
62
63 if (embeddingsInputKind == EmbeddingsInputKind.UsingStrings)
64 {
65 List<string> prompts =
66 [
67 "Hello, world!",
68 "This is a test.",
69 "Goodbye!"
70 ];
71
72 embeddings = IsAsync
73 ? await client.GenerateEmbeddingsAsync(prompts, options)
74 : client.GenerateEmbeddings(prompts, options);
75 }
76 else if (embeddingsInputKind == EmbeddingsInputKind.UsingIntegers)
77 {
78 List<List<int>> prompts =
79 [
80 [104, 101, 108, 108, 111],
81 [119, 111, 114, 108, 100],
82 [84, 69, 83, 84]
83 ];
84
85 embeddings = IsAsync
86 ? await client.GenerateEmbeddingsAsync(prompts, options)
87 : client.GenerateEmbeddings(prompts, options);
88 }
89
90 Assert.That(embeddings, Is.Not.Null);
91 Assert.That(embeddings.Count, Is.EqualTo(3));
92 Assert.That(embeddings.Model, Is.EqualTo("text-embedding-3-small"));
93 Assert.That(embeddings.Usage.InputTokens, Is.GreaterThan(0));
94 Assert.That(embeddings.Usage.TotalTokens, Is.GreaterThan(0));
95
96 for (int i = 0; i < embeddings.Count; i++)
97 {
98 Assert.That(embeddings[i].Index, Is.EqualTo(i));
99 Assert.That(embeddings[i].Vector, Is.Not.Null);
100 Assert.That(embeddings[i].Vector.Span.Length, Is.EqualTo(Dimensions));
101
102 float[] array = embeddings[i].Vector.ToArray();
103 Assert.That(array.Length, Is.EqualTo(Dimensions));
104 }
105 }
106
107 [Test]
108 public async Task BadOptions()
109 {
110 EmbeddingClient client = GetTestClient();
111
112 EmbeddingGenerationOptions options = new()
113 {
114 Dimensions = -42,
115 };
116
117 Exception caughtException = null;
118
119 try
120 {
121 _ = IsAsync
122 ? await client.GenerateEmbeddingAsync("foo", options)
123 : client.GenerateEmbedding("foo", options);
124 }
125 catch (Exception ex)
126 {
127 caughtException = ex;
128 }
129
130 Assert.That(caughtException, Is.InstanceOf<ClientResultException>());
131 Assert.That(caughtException.Message, Contains.Substring("dimensions"));
132 }
133
134 [Test]
135 public void SerializeEmbeddingCollection()
136 {
137 // TODO: Add this test.
138 }
139
140 private static EmbeddingClient GetTestClient() => GetTestClient<EmbeddingClient>(TestScenario.Embeddings);
141}
142