simple generate
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user