Skip to content

GH-5776: Add Jina AI Scoring (Reranker) Module#5887

Open
cylin0201 wants to merge 3 commits intospring-projects:mainfrom
cylin0201:GH-5776
Open

GH-5776: Add Jina AI Scoring (Reranker) Module#5887
cylin0201 wants to merge 3 commits intospring-projects:mainfrom
cylin0201:GH-5776

Conversation

@cylin0201
Copy link
Copy Markdown

GH-5776: Add Jina AI Scoring (Reranker) Module

Motivation

Spring AI currently lacks a built-in scoring/reranking abstraction. This PR introduces a ScoringModel abstraction in spring-ai-model and provides the first implementation using the Jina AI Reranker API.

Reranking is a critical component in RAG pipelines — it re-scores retrieved documents against the user query to improve relevance ordering before passing them to the LLM.

Changes

1. Core Scoring Abstraction (spring-ai-model)

  • ScoringModel, ScoringOptions, ScoringRequest, ScoringResponse, ScoringResult
  • ScoringOptions.getModel() added as a default method for backward compatibility
  • Registered SCORING in SpringAIModels and SpringAIModelProperties

2. Jina AI Implementation (models/spring-ai-jina)

  • JinaScoringApi — REST client with Builder pattern for Jina Reranker API (POST /v1/rerank)
  • JinaScoringModelScoringModel implementation with retry support, options merging, input validation
  • JinaScoringOptions — model, topK, returnDocuments, truncation configuration
  • Supported models: jina-reranker-v2-base-multilingual, jina-reranker-v1-*, jina-colbert-v1-en, jina-colbert-v2, jina-reranker-m0, jina-reranker-v3

3. RAG Integration (spring-ai-rag)

  • ScoringDocumentPostProcessor — post-retrieval reranking pipeline for RetrievalAugmentationAdvisor

4. Auto-Configuration (auto-configurations/models/spring-ai-autoconfigure-model-jina)

  • JinaScoringAutoConfiguration — conditional bean registration
  • JinaScoringPropertiesspring.ai.jina.scoring.* configuration properties
  • Spring Boot Starter (spring-ai-starter-model-jina)

5. BOM Registration

  • spring-ai-jina, spring-ai-autoconfigure-model-jina, spring-ai-starter-model-jina added to spring-ai-bom

Test Coverage

Test Class Type Count Notes
JinaScoringModelTests Unit (MockWebServer) 5 success, merge options, error, empty docs, retry
JinaScoringApiIT Integration 3 basic rerank, topN, usage stats
JinaScoringModelIT Integration 4 full model call, topK override, metadata preservation
ScoringDocumentPostProcessorIT Integration 1 RAG pipeline end-to-end
JinaScoringAutoConfigurationIT Integration 1 auto-config bean registration

Integration tests require JINA_API_KEY environment variable and are skipped by default.

Usage Example

// Direct usage
JinaScoringApi api = JinaScoringApi.builder()
    .apiKey("jina_...")
    .build();

JinaScoringModel scoringModel = JinaScoringModel.builder()
    .jinaScoringApi(api)
    .options(JinaScoringOptions.builder()
        .model("jina-reranker-v2-base-multilingual")
        .topK(3)
        .build())
    .build();

ScoringResponse response = scoringModel.call("What is Spring AI?", documents);

// With Spring Boot auto-configuration
// application.yml:
// spring.ai.jina.scoring.api-key: jina_...
// spring.ai.jina.scoring.options.model: jina-reranker-v2-base-multilingual

Checklist

  • All unit tests pass (mvnw clean verify -pl models/spring-ai-jina)
  • Auto-configuration module builds successfully
  • Checkstyle / spring-javaformat: 0 violations
  • NullAway: all null-safety annotations applied
  • DCO Sign-off on all commits
  • No unrelated changes included

Closes #5776

Add scoring (reranking) abstraction to spring-ai-model:
- ScoringModel, ScoringOptions, ScoringRequest, ScoringResponse
- ScoringResult, ScoringResultMetadata, ScoringResponseMetadata
- Register SCORING in SpringAIModels and SpringAIModelProperties
- ScoringOptions.getModel() as default method for backward compatibility

Signed-off-by: Wongi Kim <cylin0201@naver.com>
Implement Jina AI Reranker integration as a ScoringModel:
- JinaScoringApi: REST client with Builder pattern for Jina Reranker API
- JinaScoringModel: ScoringModel implementation with retry support, options merging
- JinaScoringOptions: model, topK, returnDocuments, truncation configuration
- ScoringDocumentPostProcessor: RAG post-retrieval reranking pipeline
- Unit tests with MockWebServer (5 tests: success, merge, error, empty, retry)
- Integration tests for API and model level (require JINA_API_KEY)

Signed-off-by: Wongi Kim <cylin0201@naver.com>
- JinaScoringAutoConfiguration: conditional bean registration for JinaScoringModel
- JinaScoringProperties: spring.ai.jina.scoring.* configuration properties
- Register spring-ai-jina modules in spring-ai-bom
- Register Jina modules in root pom.xml

Signed-off-by: Wongi Kim <cylin0201@naver.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Introduce ScoringModel abstraction for Document Reranking

1 participant