package com.pharmacopoeia.nihaisha.controller; import com.pharmacopoeia.nihaisha.engine.OnnxEmbeddingEngine; import com.pharmacopoeia.nihaisha.engine.OnnxRerankerEngine; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.sql.DataSource; import java.sql.Connection; import java.util.*; @RestController public class NihHealthController { private final DataSource dataSource; private final OnnxEmbeddingEngine embeddingEngine; private final OnnxRerankerEngine rerankerEngine; public NihHealthController(DataSource dataSource, OnnxEmbeddingEngine embeddingEngine, OnnxRerankerEngine rerankerEngine) { this.dataSource = dataSource; this.embeddingEngine = embeddingEngine; this.rerankerEngine = rerankerEngine; } /** * 倪海厦 RAG 健康检查 * 药典项目已有 /health 端点,此端点提供倪海厦专属状态 */ @GetMapping("/api/v1/nihaisha/health") public ResponseEntity> health() { Map status = new LinkedHashMap<>(); status.put("status", "UP"); status.put("timestamp", new Date().toString()); // 数据库检查 try (Connection conn = dataSource.getConnection()) { status.put("database", conn.isValid(3) ? "UP" : "DOWN"); } catch (Exception e) { status.put("database", "DOWN"); status.put("databaseError", e.getMessage()); } // ONNX 模型状态 status.put("embeddingModel", embeddingEngine.isLoaded() ? "LOADED" : "NOT_LOADED"); status.put("rerankerModel", rerankerEngine.isLoaded() ? "LOADED" : "NOT_LOADED"); return ResponseEntity.ok(status); } }