The Nomic SDK implements IEmbeddingGenerator<string, Embedding<float>> and provides AIFunction tool wrappers, all compatible with Microsoft.Extensions.AI.
Installation
1
dotnetaddpackageNomic
IEmbeddingGenerator
The NomicClient directly implements IEmbeddingGenerator<string, Embedding<float>> for generating text embeddings using the nomic-embed-text-v1.5 model (default) or nomic-embed-text-v1.
Nomic models support Matryoshka embeddings with custom dimensionality (64-768):
1 2 3 4 5 6 7 8 9101112131415
usingMicrosoft.Extensions.AI;usingNomic;IEmbeddingGenerator<string,Embedding<float>>generator=newNomicClient(apiKey:Environment.GetEnvironmentVariable("NOMIC_API_KEY")!);varembeddings=awaitgenerator.GenerateAsync(["Compact embedding for efficient storage."],newEmbeddingGenerationOptions{ModelId="nomic-embed-text-v1.5",Dimensions=256,// Reduce from default 768});Console.WriteLine($"Dimensions: {embeddings[0].Vector.Length}");// 256
Batch Embeddings
1 2 3 4 5 6 7 8 91011121314151617
usingMicrosoft.Extensions.AI;usingNomic;IEmbeddingGenerator<string,Embedding<float>>generator=newNomicClient(apiKey:Environment.GetEnvironmentVariable("NOMIC_API_KEY")!);vartexts=new[]{"The quick brown fox jumps over the lazy dog.","Machine learning is a subset of artificial intelligence.","Embeddings represent text as numerical vectors.",};varembeddings=awaitgenerator.GenerateAsync(texts);Console.WriteLine($"Generated {embeddings.Count} embeddings");Console.WriteLine($"Total tokens: {embeddings.Usage?.TotalTokenCount}");
usingNomic;usingMicrosoft.Extensions.AI;varnomicClient=newNomicClient(apiKey:Environment.GetEnvironmentVariable("NOMIC_API_KEY")!);varoptions=newChatOptions{Tools=[ nomicClient.AsEmbedTextTool(), nomicClient.AsEmbedImageTool(), ],};IChatClientchatClient=/* your chat client */;varmessages=newList<ChatMessage>{new(ChatRole.User,"Generate embeddings for the texts 'Hello world' and 'Machine learning is fascinating'."),};while(true){varresponse=awaitchatClient.GetResponseAsync(messages,options);messages.AddRange(response.ToChatMessages());if(response.FinishReason==ChatFinishReason.ToolCalls){varresults=awaitresponse.CallToolsAsync(options);messages.AddRange(results);continue;}Console.WriteLine(response.Text);break;}