diff --git a/internal/entity/models/jina.go b/internal/entity/models/jina.go index 663797c0a6..a55b5c61a2 100644 --- a/internal/entity/models/jina.go +++ b/internal/entity/models/jina.go @@ -234,8 +234,8 @@ func (j *JinaModel) Rerank(ctx context.Context, modelName *string, query string, } url := fmt.Sprintf("%s/%s", resolvedBaseURL, j.baseModel.URLSuffix.Rerank) - var topN = rerankConfig.TopN - if rerankConfig.TopN != 0 { + topN := len(documents) + if rerankConfig != nil && rerankConfig.TopN > 0 && rerankConfig.TopN < topN { topN = rerankConfig.TopN } diff --git a/internal/entity/models/jina_test.go b/internal/entity/models/jina_test.go index c34f9a93ed..3dd4418b08 100644 --- a/internal/entity/models/jina_test.go +++ b/internal/entity/models/jina_test.go @@ -254,3 +254,28 @@ func TestJinaChatFallsBackToDefaultOnEmptyRegion(t *testing.T) { t.Errorf("empty Region: expected fallback to default, got %v", err) } } + +func TestJinaRerankDefaultsTopNToDocumentCount(t *testing.T) { + srv := newJinaServer(t, "/rerank", func(t *testing.T, body map[string]interface{}, w http.ResponseWriter) { + if body["top_n"] != float64(2) { + t.Errorf("top_n=%v, want 2", body["top_n"]) + } + _, _ = w.Write([]byte(`{"results":[]}`)) + }) + defer srv.Close() + + apiKey := "test-key" + modelName := "jina-reranker-v3" + _, err := newJinaForTest(srv.URL).Rerank( + t.Context(), + &modelName, + "weather", + []string{"sunny", "rainy"}, + &APIConfig{ApiKey: &apiKey}, + &RerankConfig{}, + nil, + ) + if err != nil { + t.Fatalf("Rerank: %v", err) + } +}