simple generate

This commit is contained in:
root
2025-09-24 00:47:20 +05:00
parent 0b2f9bc508
commit 7adb815b35
2 changed files with 36 additions and 1 deletions
@@ -36,7 +36,7 @@ public class ReportController {
@PostMapping("/generate")
public ResponseEntity<byte[]> generate(@Validated @RequestBody ReportGenerateRequest request) {
ReportBinary rb = reportGenerationService.generate(request);
ReportBinary rb = reportGenerationService.simpleGenerate(request);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + rb.getFilename() + "\"")
.contentType(rb.getMediaType())
@@ -95,6 +95,41 @@ public class ReportGenerationService {
this.minIOService = minIOService;
}
public ReportBinary simpleGenerate(ReportGenerateRequest req) {
LocalDateTime start = req.getStartDate();
LocalDateTime end = req.getEndDate();
List<MarketItem> items = marketItemRepository
.findByPublishedAtBetween(start, end, org.springframework.data.domain.Pageable.unpaged())
.getContent();
String combined = getCombinedSummaries(items);
String contextBlock = String.format(
"Заголовок отчёта: %s\nАвтор: %s\nКомпания: %s\nПериод: %s — %s\n",
Optional.ofNullable(req.getReportTitle()).orElse("Отчёт"),
Optional.ofNullable(req.getAuthorName()).orElse("Не указан"),
Optional.ofNullable(req.getCompanyName()).orElse("Не указана"),
start == null ? "?" : start.toString(),
end == null ? "?" : end.toString());
String instruction = "Ты — аналитик. На основе кратких сводок новостей ниже напиши цельный аналитический текст отчёта для руководства. "
+ "Структура (без нумерации разделов): Краткое содержание (2–3 абзаца), Введение (1 абзац: цель, источники, подход), "
+ "Основная часть (3–5 ключевых тенденций и событий периода с краткими пояснениями, допускаются маркированные списки), "
+ "Рекомендации (4–6 практических пунктов), Заключение (1 абзац). Стиль: деловой, нейтральный, без вводных вроде 'в данном тексте'. "
+ "Не упоминай, что ты ИИ. Используй русский язык.\n\nКонтекст отчёта:\n" + contextBlock
+ "\nСводки новостей:\n";
String generated = ollamaAnalyticsService.generateWithInstruction(combined, instruction);
if (generated == null) {
generated = "(Не удалось сгенерировать текст отчёта по предоставленным данным.)";
}
String filename = "report_simple_" + (end == null ? "date" : end.toLocalDate().toString()) + "-"
+ System.currentTimeMillis() + ".txt";
return new ReportBinary(filename, MediaType.TEXT_PLAIN,
generated.getBytes(java.nio.charset.StandardCharsets.UTF_8));
}
public ReportBinary generate(ReportGenerateRequest req) {
LocalDateTime start = req.getStartDate();
LocalDateTime end = req.getEndDate();