From 2d5765337e1f4427455ea197e94908f0e8473290 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 6 Oct 2025 18:48:57 +0500 Subject: [PATCH] . --- .../service/ReportSynthesisService.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/kz/konturai/parser/service/ReportSynthesisService.java b/src/main/java/kz/konturai/parser/service/ReportSynthesisService.java index 3b6653f..63bb498 100644 --- a/src/main/java/kz/konturai/parser/service/ReportSynthesisService.java +++ b/src/main/java/kz/konturai/parser/service/ReportSynthesisService.java @@ -34,8 +34,8 @@ public class ReportSynthesisService { buildTextPrompt(originalQuery, aggregatedLearnings, lang))); Mono> 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(); } @@ -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(""); + if (startSvg != -1 && endSvg != -1 && endSvg > startSvg) { + return ollamaResponse.substring(startSvg, endSvg + 6); + } + } + + // Fallback: find the first and last tags in the whole string + int startSvg = ollamaResponse.indexOf(""); + + 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 learnings) { if (learnings == null || learnings.isEmpty()) { return "- (данные не были предоставлены)";