Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/a-tail-zh_fitness-microservice.json

1 line
6.5 KiB
JSON

{"repo": "a-tail-zh/fitness-microservice", "files": {"aiservice/src/main/java/com/fitness/aiservice/service/DeepSeekAiProvider.java": {"9ece6cefb9f2b0d284f43536be0a86c8cded4c4c": {"t": 1785745692.939201, "n": 3004, "h": "d9321afca1b7fadf", "c": "package com.fitness.aiservice.service;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fitness.aiservice.model.AiProviderType;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.MediaType;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.reactive.function.client.WebClient;\n\nimport java.time.Duration;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\n@Service\n@Slf4j\npublic class DeepSeekAiProvider implements AiProvider {\n\n @Value(\"${deepseek.api-key:}\")\n private String apiKey;\n\n @Value(\"${deepseek.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${deepseek.url:https://api.deepseek.com/chat/completions}\")\n private String url;\n\n private final WebClient webClient;\n private final ObjectMapper objectMapper;\n\n public DeepSeekAiProvider(WebClient.Builder webClientBuilder, ObjectMapper objectMapper) {\n this.webClient = webClientBuilder\n .codecs(config -> config.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))\n .build();\n this.objectMapper = objectMapper;\n }\n\n @Override\n public AiProviderType type() {\n return AiProviderType.DEEPSEEK;\n }\n\n @Override\n public String chat(String systemPrompt, String userPrompt) {\n if (!StringUtils.hasText(apiKey)) {\n throw new IllegalStateException(\"DEEPSEEK_API_KEY is empty\");\n }\n\n List<Map<String, String>> messages = new ArrayList<>();\n messages.add(Map.of(\"role\", \"system\", \"content\", systemPrompt));\n messages.add(Map.of(\"role\", \"user\", \"content\", userPrompt));\n\n Map<String, Object> requestBody = Map.of(\n \"model\", model,\n \"messages\", messages,\n \"temperature\", 0.2,\n \"response_format\", Map.of(\"type\", \"json_object\")\n );\n\n log.debug(\"Calling DeepSeek API, model={}\", model);\n String rawResponse = webClient.post()\n .uri(url)\n .header(HttpHeaders.AUTHORIZATION, \"Bearer \" + apiKey)\n .contentType(MediaType.APPLICATION_JSON)\n .bodyValue(requestBody)\n .retrieve()\n .bodyToMono(String.class)\n .timeout(Duration.ofSeconds(90))\n .block();\n\n return extractContent(rawResponse);\n }\n\n private String extractContent(String rawResponse) {\n try {\n JsonNode root = objectMapper.readTree(rawResponse);\n return root.path(\"choices\").get(0).path(\"message\").path(\"content\").asText();\n } catch (Exception ex) {\n log.error(\"Failed to parse DeepSeek response: {}\", rawResponse, ex);\n throw new RuntimeException(\"Failed to parse DeepSeek response\", ex);\n }\n }\n}\n"}, "b7b382aede22804c27af19312d2c4aabdf528e0a": {"t": 1785755735.792748, "n": 3004, "h": "d9321afca1b7fadf", "c": "package com.fitness.aiservice.service;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fitness.aiservice.model.AiProviderType;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.MediaType;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.reactive.function.client.WebClient;\n\nimport java.time.Duration;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\n@Service\n@Slf4j\npublic class DeepSeekAiProvider implements AiProvider {\n\n @Value(\"${deepseek.api-key:}\")\n private String apiKey;\n\n @Value(\"${deepseek.model:deepseek-chat}\")\n private String model;\n\n @Value(\"${deepseek.url:https://api.deepseek.com/chat/completions}\")\n private String url;\n\n private final WebClient webClient;\n private final ObjectMapper objectMapper;\n\n public DeepSeekAiProvider(WebClient.Builder webClientBuilder, ObjectMapper objectMapper) {\n this.webClient = webClientBuilder\n .codecs(config -> config.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))\n .build();\n this.objectMapper = objectMapper;\n }\n\n @Override\n public AiProviderType type() {\n return AiProviderType.DEEPSEEK;\n }\n\n @Override\n public String chat(String systemPrompt, String userPrompt) {\n if (!StringUtils.hasText(apiKey)) {\n throw new IllegalStateException(\"DEEPSEEK_API_KEY is empty\");\n }\n\n List<Map<String, String>> messages = new ArrayList<>();\n messages.add(Map.of(\"role\", \"system\", \"content\", systemPrompt));\n messages.add(Map.of(\"role\", \"user\", \"content\", userPrompt));\n\n Map<String, Object> requestBody = Map.of(\n \"model\", model,\n \"messages\", messages,\n \"temperature\", 0.2,\n \"response_format\", Map.of(\"type\", \"json_object\")\n );\n\n log.debug(\"Calling DeepSeek API, model={}\", model);\n String rawResponse = webClient.post()\n .uri(url)\n .header(HttpHeaders.AUTHORIZATION, \"Bearer \" + apiKey)\n .contentType(MediaType.APPLICATION_JSON)\n .bodyValue(requestBody)\n .retrieve()\n .bodyToMono(String.class)\n .timeout(Duration.ofSeconds(90))\n .block();\n\n return extractContent(rawResponse);\n }\n\n private String extractContent(String rawResponse) {\n try {\n JsonNode root = objectMapper.readTree(rawResponse);\n return root.path(\"choices\").get(0).path(\"message\").path(\"content\").asText();\n } catch (Exception ex) {\n log.error(\"Failed to parse DeepSeek response: {}\", rawResponse, ex);\n throw new RuntimeException(\"Failed to parse DeepSeek response\", ex);\n }\n }\n}\n"}}}}