.
This commit is contained in:
@@ -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 "- (данные не были предоставлены)";
|
||||
|
||||
Reference in New Issue
Block a user