VoyageAI

Features 🔥
- Fully generated C# SDK based on official Voyage AI OpenAPI specification using AutoSDK
- Same day update to support new features
- Updated and supported automatically if there are no breaking changes
- All modern .NET features - nullability, trimming, NativeAOT, etc.
- Microsoft.Extensions.AI
IEmbeddingGenerator support
Usage
| using VoyageAI;
using var client = new VoyageAIClient(apiKey);
|
Microsoft.Extensions.AI
The SDK implements IEmbeddingGenerator:
| using VoyageAI;
using Microsoft.Extensions.AI;
IEmbeddingGenerator<string, Embedding<float>> generator = new VoyageAIClient(apiKey);
var embeddings = await generator.GenerateAsync(
["Hello, world!"],
new EmbeddingGenerationOptions { ModelId = "voyage-3" });
Console.WriteLine($"Embedding dimension: {embeddings[0].Vector.Length}");
|
Embedding Generator Generate Async
| using var client = GetAuthorizedApi();
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var embeddings = await generator.GenerateAsync(
["Hello, world!"],
new EmbeddingGenerationOptions
{
ModelId = "voyage-3-lite",
});
|
| using var client = new VoyageAIClient("test-api-key");
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var metadata = generator.GetService<EmbeddingGeneratorMetadata>();
|
Embedding Generator Get Service Returns Self
| using var client = new VoyageAIClient("test-api-key");
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var self = generator.GetService<VoyageAIClient>();
|
Embeddings
| using var client = GetAuthorizedApi();
var response = await client.EmbeddingsApiAsync(
input: "Hello, world!",
model: "voyage-3-lite");
|
Multimodal Embeddings Text And Image Url
1
2
3
4
5
6
7
8
9
10
11
12 | using var client = GetAuthorizedApi();
var inputs = new List<MultimodalInput>
{
new(
MultimodalContent.Text("This is a banana."),
MultimodalContent.ImageUrl("https://raw.githubusercontent.com/voyage-ai/voyage-multimodal-3/refs/heads/main/images/banana.jpg")),
};
var response = await client.MultimodalEmbeddingsAsync(
inputs: inputs,
model: "voyage-multimodal-3");
|
Multimodal Embeddings Text Only
| using var client = GetAuthorizedApi();
var inputs = new List<MultimodalInput>
{
new(MultimodalContent.Text("Hello, world!")),
};
var response = await client.MultimodalEmbeddingsAsync(
inputs: inputs,
model: "voyage-multimodal-3");
|
Reranking
1
2
3
4
5
6
7
8
9
10
11
12 | using var client = GetAuthorizedApi();
var response = await client.RerankerApiAsync(
query: "What is the capital of France?",
documents: [
"Paris is the capital of France.",
"Berlin is the capital of Germany.",
"London is the capital of the United Kingdom.",
],
model: "rerank-2-lite",
topK: 2,
returnDocuments: true);
|
Support
Priority place for bugs: https://github.com/tryAGI/VoyageAI/issues
Priority place for ideas and general questions: https://github.com/tryAGI/VoyageAI/discussions
Discord: https://discord.gg/Ca2xhfBf3v
Acknowledgments

This project is supported by JetBrains through the Open Source Support Program.