- Fully generated C# SDK based on official Jina 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.
- Support .Net Framework/.Net Standard 2.0
- Microsoft.Extensions.AI
IEmbeddingGeneratorsupport
using Jina;
using var api = new JinaApi(apiKey);
var response = await api.Embeddings.CreateEmbeddingAsync(new TextEmbeddingInput
{
Model = "jina-clip-v1",
Input = new List<ApiSchemasEmbeddingTextDoc>
{
new()
{
Text = "Hello, world!",
}
}
});
Console.WriteLine($"[{string.Join(", ", response.Data[0].Embedding ?? [])}]");The SDK implements IEmbeddingGenerator:
using Jina;
using Microsoft.Extensions.AI;
IEmbeddingGenerator<string, Embedding<float>> generator = new JinaApi(apiKey);
var embeddings = await generator.GenerateAsync(
["Hello, world!"],
new EmbeddingGenerationOptions { ModelId = "jina-embeddings-v3" });
Console.WriteLine($"Embedding dimension: {embeddings[0].Vector.Length}");using var client = new JinaClient(apiKey);
var response = await client.SearchFoundationModels.EmbeddingsAsync(
new EmbeddingsV2Request
{
Model = EmbeddingsV2RequestModel.JinaEmbeddingsV2BaseEn,
Input = "Hello, world!",
});
var embedding = response.Data.Value1![0].Embedding.Value2;
Console.WriteLine($"[{string.Join(", ", embedding ?? [])}]");using var client = new JinaClient(apiKey);
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var embeddings = await generator.GenerateAsync(
["Hello", "World", "Test"],
new EmbeddingGenerationOptions
{
ModelId = "jina-embeddings-v3",
});
foreach (var embedding in embeddings)
{
}using var client = new JinaClient(apiKey);
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var embeddings = await generator.GenerateAsync(
["Hello, world!"],
new EmbeddingGenerationOptions
{
ModelId = "jina-embeddings-v3",
Dimensions = 256,
});using var client = CreateTestClient();
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var metadata = generator.GetService<EmbeddingGeneratorMetadata>();using var client = CreateTestClient();
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var result = generator.GetService<EmbeddingGeneratorMetadata>(serviceKey: "unknown");using var client = CreateTestClient();
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var self = generator.GetService<JinaClient>();using var client = new JinaClient(apiKey);
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var embeddings = await generator.GenerateAsync(
["Hello, world!"],
new EmbeddingGenerationOptions
{
ModelId = "jina-embeddings-v3",
});using var client = new JinaClient(apiKey);
var items = new AnyOf<string, TextDoc, ImageDoc>[]
{
"A beautiful sunset over the ocean",
new ImageDoc { Image = "https://i.ibb.co/nQNGqL0/beach1.jpg" },
};
var embeddings = await client.GenerateMixedEmbeddingsAsync(
items,
new EmbeddingGenerationOptions
{
Dimensions = 256,
});
foreach (var embedding in embeddings)
{
}using var client = new JinaClient(apiKey);
var embeddings = await client.GenerateImageEmbeddingsAsync(
["https://i.ibb.co/nQNGqL0/beach1.jpg"],
new EmbeddingGenerationOptions
{
Dimensions = 256,
});using var client = new JinaClient(apiKey);
RerankingResponse output = await client.SearchFoundationModels.RerankAsync(
new TextRerankerRequest
{
Model = TextRerankerRequestModel.JinaRerankerV2BaseMultilingual,
Query = "Organic skincare products for sensitive skin",
TopN = 3,
Documents =
[
"Organic skincare for sensitive skin with aloe vera and chamomile.",
"New makeup trends focus on bold colors and innovative techniques.",
"Bio-Hautpflege für empfindliche Haut mit Aloe Vera und Kamille.",
"Neue Make-up-Trends setzen auf kräftige Farben und innovative Techniken.",
"Cuidado de la piel orgánico para piel sensible con aloe vera y manzanilla.",
"Las nuevas tendencias de maquillaje se centran en colores vivos y técnicas innovadoras.",
],
});
foreach (RerankingResult result in output.Results)
{
Console.WriteLine($@"
Index: {result.Index}
Document: {result.Document?.Value1 ?? result.Document?.Value2?.Text}
RelevanceScore: {result.RelevanceScore}");
}Priority place for bugs: https://github.com/tryAGI/Jina/issues
Priority place for ideas and general questions: https://github.com/tryAGI/Jina/discussions
Discord: https://discord.gg/Ca2xhfBf3v
This project is supported by JetBrains through the Open Source Support Program.
