Outmatic
Outmatic
We open-sourced VoyageAI.NET 1.0.0, a typed .NET client for Voyage AI's embeddings and reranking, with the production defaults we use on client RAG pipelines: AOT-safe JSON, managed HTTP, auto-batching, resilience.
Outmatic
Engineering Team
We build RAG pipelines on .NET as part of our client work, and Voyage AI ships some of the strongest embedding and reranking models available today.
Out of that combination, we created VoyageAI.NET 1.0.0, an open-source library (MIT) and, as far as we can tell, the first typed .NET client for Voyage AI, released today.
The design choices come directly from our experience on production workloads. Rather than a thin HTTP wrapper, we implemented the patterns we consider appropriate for heavy-production use and made them the defaults.
The library wraps the three Voyage APIs most RAG pipelines actually use: text embeddings for indexing and querying text corpora, multimodal embeddings for search over text and images in the same vector space, and document reranking for ordering retrieved candidates before they reach the LLM.
The public surface stays small. Four methods cover the recurring use cases: a single embedding call, a batched variant that returns IAsyncEnumerable for streaming large jobs, a multimodal variant that accepts mixed text and image input, and a reranking call that takes a query, a set of documents, and a top-K.
AOT-safe and trim-safe serialization. All JSON uses source generation, with no runtime reflection. The library runs cleanly under Native AOT and with trimming enabled, so startup stays fast and the deployment footprint stays small.
Properly managed HTTP. The client is a typed HttpClient registered through IHttpClientFactory, with an HttpMessageHandler tuned for sustained throughput: HTTP/2, periodic connection recycling for DNS refresh, automatic decompression, multiple concurrent HTTP/2 connections. Safe lifecycle, healthy connection pool, immediate compatibility with OpenTelemetry.
Auto-batching with bounded concurrency. The batch method takes any size of input, splits it into batches (up to 128 items per request), and runs them with a hard concurrency cap (8 in flight by default). The output is IAsyncEnumerable, so back-pressure is natural and memory stays flat even on very large jobs.
Built-in resilience. Retry with backoff, circuit breaker, and timeout via Microsoft.Extensions.Http.Resilience. Standard framework policies, fully overridable.
Supported targets: net8.0, net9.0, net10.0. Registration is a single DI call.
When building .NET clients for AI services, the recurring gotchas are small infrastructure details: how HttpClient is configured, when connections are recycled, whether System.Text.Json is using reflection, how back-pressure reaches the batching layer. None of them are hard in isolation. All of them are easy to get wrong when written fresh inside every project.
If you are building a RAG pipeline, your real problem is retrieval quality and the prompt that comes out of it, not the SocketsHttpHandler. Isolating these choices in a typed library, with sensible defaults that stay overridable, lets the application code stay focused on the interesting work.
The package is on NuGet as VoyageAI.NET, the source is on GitHub at github.com/outmatic/VoyageAI.NET. MIT licensed.