Skip to content

VoyageAI

Nuget package dotnet License: MIT Discord

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

1
2
3
using VoyageAI;

using var client = new VoyageAIClient(apiKey);

Microsoft.Extensions.AI

The SDK implements IEmbeddingGenerator:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

1
2
3
4
5
6
7
8
9
using var client = GetAuthorizedApi();
IEmbeddingGenerator<string, Embedding<float>> generator = client;

var embeddings = await generator.GenerateAsync(
    ["Hello, world!"],
    new EmbeddingGenerationOptions
    {
        ModelId = "voyage-3-lite",
    });

Embedding Generator Get Service Returns Metadata

1
2
3
4
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

1
2
3
4
using var client = new VoyageAIClient("test-api-key");
IEmbeddingGenerator<string, Embedding<float>> generator = client;

var self = generator.GetService<VoyageAIClient>();

Embeddings

1
2
3
4
5
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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

JetBrains logo

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