openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.0.0-beta.7

Branches

Tags

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

Clone

HTTPS

Download ZIP

tests/Embeddings/EmbeddingTests.cs

140lines · modecode

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