This commit is contained in:
root
2025-10-06 18:48:57 +05:00
parent bc44e5dd77
commit 2d5765337e
@@ -34,8 +34,8 @@ public class ReportSynthesisService {
buildTextPrompt(originalQuery, aggregatedLearnings, lang)));
Mono<List<byte[]>> chartsMono = Mono.fromCallable(() -> {
String json = ollamaAnalyticsService.generateWithInstruction(aggregatedLearnings,
buildChartDataPrompt(aggregatedLearnings));
String json = extractSvgCode(ollamaAnalyticsService.generateWithInstruction(aggregatedLearnings,
buildChartDataPrompt(aggregatedLearnings)));
if (json == null || json.trim().isEmpty() || json.trim().equals("{}")) {
return new ArrayList<byte[]>();
}
@@ -52,6 +52,32 @@ public class ReportSynthesisService {
.map(tuple -> new FinalReportPayload(tuple.getT1(), tuple.getT2()));
}
private String extractSvgCode(String ollamaResponse) {
if (ollamaResponse == null || ollamaResponse.isBlank()) {
return null;
}
// Try to find content within XML markdown block first
int startXml = ollamaResponse.indexOf("```xml");
if (startXml != -1) {
int startSvg = ollamaResponse.indexOf("<svg", startXml);
int endSvg = ollamaResponse.lastIndexOf("</svg>");
if (startSvg != -1 && endSvg != -1 && endSvg > startSvg) {
return ollamaResponse.substring(startSvg, endSvg + 6);
}
}
// Fallback: find the first <svg> and last </svg> tags in the whole string
int startSvg = ollamaResponse.indexOf("<svg");
int endSvg = ollamaResponse.lastIndexOf("</svg>");
if (startSvg != -1 && endSvg != -1 && endSvg > startSvg) {
return ollamaResponse.substring(startSvg, endSvg + 6);
}
return null; // Return null if no SVG found
}
private String formatLearnings(List<String> learnings) {
if (learnings == null || learnings.isEmpty()) {
return "- (данные не были предоставлены)";