Skip to content
Docs

Jina AI Embedding Provider

The Jina AI embedding provider implements the embedding.Embedder interface using the Jina Embeddings API. It supports Jina’s multilingual embedding models with native batch processing and token usage reporting.

Choose Jina embeddings when you need language-specific models (German, Chinese, and others) or when the v3 model’s strong retrieval performance on benchmarks matters for your use case. Jina specializes in search and retrieval, so its models are tuned for similarity search quality.

Terminal window
go get github.com/lookatitude/beluga-ai/rag/embedding/providers/jina
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/lookatitude/beluga-ai/config"
"github.com/lookatitude/beluga-ai/rag/embedding"
_ "github.com/lookatitude/beluga-ai/rag/embedding/providers/jina"
)
func main() {
emb, err := embedding.New("jina", config.ProviderConfig{
APIKey: os.Getenv("JINA_API_KEY"),
})
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
vectors, err := emb.Embed(ctx, []string{
"Beluga AI provides a unified embedding interface",
"Jina AI specializes in search and embeddings",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Embedded %d texts, dimensions: %d\n", len(vectors), emb.Dimensions())
}
ParameterTypeDefaultDescription
APIKeystring(required)Jina AI API key
Modelstringjina-embeddings-v2-base-enEmbedding model name
BaseURLstringhttps://api.jina.ai/v1API base URL
Timeouttime.Duration0 (no timeout)Request timeout
Options["dimensions"]float64Model-dependentOverride vector dimensions
ModelDefault Dimensions
jina-embeddings-v2-base-en768
jina-embeddings-v2-small-en512
jina-embeddings-v2-base-de768
jina-embeddings-v2-base-zh768
jina-embeddings-v31024
import (
jinaemb "github.com/lookatitude/beluga-ai/rag/embedding/providers/jina"
)
emb, err := jinaemb.New(config.ProviderConfig{
APIKey: os.Getenv("JINA_API_KEY"),
Model: "jina-embeddings-v3",
})
if err != nil {
log.Fatal(err)
}

Jina offers language-specific models that can be selected via the model parameter:

// German-language embeddings
emb, err := embedding.New("jina", config.ProviderConfig{
APIKey: os.Getenv("JINA_API_KEY"),
Model: "jina-embeddings-v2-base-de",
})
// Chinese-language embeddings
emb, err := embedding.New("jina", config.ProviderConfig{
APIKey: os.Getenv("JINA_API_KEY"),
Model: "jina-embeddings-v2-base-zh",
})

The Jina provider sends all texts in a single API request and correctly maps results back by index:

texts := []string{
"First document",
"Second document",
"Third document",
}
vectors, err := emb.Embed(ctx, texts)
if err != nil {
log.Fatal(err)
}