Integrate Ordinator reranking service into Forgejo issue search #106

Open
opened 2026-04-30 19:08:23 +02:00 by kade · 0 comments
Owner

Ordinator Reranking Integration

Overview

Integrate Ordinator reranking service into Forgejo issue search to improve search relevance using multi-factor scoring (semantic similarity, personalization, authority, recency).

Ordinator Service Status

  • Service: Running on Unix socket /var/run/reynard/ordinator.sock
  • Endpoints:
    • GET /health - Service health check
    • POST /rerank - Rerank search results
    • GET /stats - Service statistics
  • Deployment: Ansible-managed systemd service with resource limits
  • Documentation: services/ordinator/DEPLOYMENT.md

Integration Points

1. Go HTTP Client for Ordinator

Create a Go client package to communicate with Ordinator via Unix socket:

  • Location: modules/ordinator/client.go
  • Functionality: HTTP client over Unix domain socket
  • Endpoints: Health check, rerank request, stats

2. Issue Search Integration

Modify issue search flow in Forgejo:

  • Current location: routers/api/v1/repo/issue.go - SearchIssues()
  • Integration point: After initial search results from indexer, pass through Ordinator for reranking
  • Configuration: Feature flag to enable/disable Ordinator reranking

3. Configuration

Add Ordinator configuration to Forgejo settings:

  • Socket path: /var/run/reynard/ordinator.sock
  • Enable/disable reranking
  • Timeout settings
  • Fallback behavior (if Ordinator unavailable)

Implementation Plan

  1. Create Go HTTP client for Unix socket communication

    • Use net.Dial("unix", socketPath) for Unix socket
    • HTTP client wrapper for Ordinator endpoints
    • Error handling and fallback logic
  2. Integrate into issue search

    • Modify SearchIssues() in routers/api/v1/repo/issue.go
    • Add reranking step after indexer results
    • Preserve original search results for fallback
  3. Add configuration

    • Add Ordinator settings to modules/setting/setting.go
    • Add to configuration file schema
    • Admin UI for Ordinator settings
  4. Testing

    • Unit tests for Go client
    • Integration tests with running Ordinator service
    • Performance benchmarks

Technical Details

Ordinator Rerank Request Format

{
  "query": "search query string",
  "candidates": [
    {"id": "issue-1", "title": "...", "body": "..."},
    {"id": "issue-2", "title": "...", "body": "..."}
  ],
  "user_context": {"user_id": 123},
  "strategy": "default",
  "limit": 10
}

Ordinator Rerank Response Format

{
  "success": true,
  "data": {
    "reranked": [
      {"id": "issue-1", "score": 0.95},
      {"id": "issue-2", "score": 0.87}
    ]
  },
  "error": null
}

Dependencies

  • Ordinator service must be deployed and running
  • Unix socket accessible to Forgejo process
  • No external network dependencies (socket-only communication)

References

  • Ordinator deployment: services/ordinator/DEPLOYMENT.md
  • Ordinator API: services/ordinator/src/server.rs
  • Forgejo issue search: routers/api/v1/repo/issue.go
  • Forgejo issue search models: models/issues/issue_search.go
# Ordinator Reranking Integration ## Overview Integrate Ordinator reranking service into Forgejo issue search to improve search relevance using multi-factor scoring (semantic similarity, personalization, authority, recency). ## Ordinator Service Status - **Service**: Running on Unix socket `/var/run/reynard/ordinator.sock` - **Endpoints**: - `GET /health` - Service health check - `POST /rerank` - Rerank search results - `GET /stats` - Service statistics - **Deployment**: Ansible-managed systemd service with resource limits - **Documentation**: `services/ordinator/DEPLOYMENT.md` ## Integration Points ### 1. Go HTTP Client for Ordinator Create a Go client package to communicate with Ordinator via Unix socket: - Location: `modules/ordinator/client.go` - Functionality: HTTP client over Unix domain socket - Endpoints: Health check, rerank request, stats ### 2. Issue Search Integration Modify issue search flow in Forgejo: - Current location: `routers/api/v1/repo/issue.go` - `SearchIssues()` - Integration point: After initial search results from indexer, pass through Ordinator for reranking - Configuration: Feature flag to enable/disable Ordinator reranking ### 3. Configuration Add Ordinator configuration to Forgejo settings: - Socket path: `/var/run/reynard/ordinator.sock` - Enable/disable reranking - Timeout settings - Fallback behavior (if Ordinator unavailable) ## Implementation Plan 1. **Create Go HTTP client for Unix socket communication** - Use `net.Dial("unix", socketPath)` for Unix socket - HTTP client wrapper for Ordinator endpoints - Error handling and fallback logic 2. **Integrate into issue search** - Modify `SearchIssues()` in `routers/api/v1/repo/issue.go` - Add reranking step after indexer results - Preserve original search results for fallback 3. **Add configuration** - Add Ordinator settings to `modules/setting/setting.go` - Add to configuration file schema - Admin UI for Ordinator settings 4. **Testing** - Unit tests for Go client - Integration tests with running Ordinator service - Performance benchmarks ## Technical Details ### Ordinator Rerank Request Format ```json { "query": "search query string", "candidates": [ {"id": "issue-1", "title": "...", "body": "..."}, {"id": "issue-2", "title": "...", "body": "..."} ], "user_context": {"user_id": 123}, "strategy": "default", "limit": 10 } ``` ### Ordinator Rerank Response Format ```json { "success": true, "data": { "reranked": [ {"id": "issue-1", "score": 0.95}, {"id": "issue-2", "score": 0.87} ] }, "error": null } ``` ## Dependencies - Ordinator service must be deployed and running - Unix socket accessible to Forgejo process - No external network dependencies (socket-only communication) ## References - Ordinator deployment: `services/ordinator/DEPLOYMENT.md` - Ordinator API: `services/ordinator/src/server.rs` - Forgejo issue search: `routers/api/v1/repo/issue.go` - Forgejo issue search models: `models/issues/issue_search.go`
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kade/forgejo#106
No description provided.