From 548c2f9d403631b4a5d567098ab1c8d4a5697642 Mon Sep 17 00:00:00 2001 From: Sanders Date: Mon, 17 Feb 2025 20:18:04 +0300 Subject: [PATCH] Fix AI --- .../ru/cathub/telegabot/model/TextRole.java | 4 +- .../service/impl/BookCreationServiceImpl.java | 44 ++++++++++--------- .../service/impl/BookReminderScheduler.java | 11 +++-- .../service/impl/ProfileServiceImpl.java | 4 +- src/main/resources/application.properties | 14 ++---- 5 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/main/java/ru/cathub/telegabot/model/TextRole.java b/src/main/java/ru/cathub/telegabot/model/TextRole.java index d4b5dff..a968330 100644 --- a/src/main/java/ru/cathub/telegabot/model/TextRole.java +++ b/src/main/java/ru/cathub/telegabot/model/TextRole.java @@ -1,8 +1,8 @@ package ru.cathub.telegabot.model; public enum TextRole { - DEFAULT("Ты книжный ассистент в Telegram-боте. Отвечай кратко, используй эмоджи, разметку Markdown (*для\n" + - " выделения*, _для наклонного_). Отвечай ТОЛЬКО на русском языке. Дополнительно проверь что ответ точно на Русском языке. Не выводи текст, который ошибочно написал на другом языке."), + DEFAULT("Ты книжный ассистент в Telegram-боте. Отвечай, используй эмоджи, разметку Markdown (*для\n" + + " выделения*, _для наклонного_). Отвечай ТОЛЬКО на русском языке."), REVIEWER("Анализируй текст как профессиональный редактор"), RECOMMENDER("Рекомендуй книги на основе предпочтений"); diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java index 8819b14..0101cfb 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookCreationServiceImpl.java @@ -142,32 +142,34 @@ public class BookCreationServiceImpl implements BookCreationService { int weeksLeft = Math.toIntExact(ChronoUnit.WEEKS.between(today, endOfYear)); BotUser freshUser = userRepository.findById(user.getId()).orElseThrow(); - int target = freshUser.getBooksToRead() != null ? freshUser.getBooksToRead() : 0; - int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0; - int left = target - read; - - String stats; - if (left < 0) { - stats = formatBookMoreStats(weeksLeft, read); - } else if (left == 0) { - stats = ""; - try { - String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг на год", freshUser.getBooksToRead()); - String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); - log.info("Congratulation target generated: {}", congrat); - telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); - } catch (Exception e) { - log.error("Error generating congratulation for user {}", user.getId(), e); - telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!"); + if (freshUser.getBooksToRead() != null) { + int target = freshUser.getBooksToRead(); + int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0; + int left = target - read; + + String stats; + if (left < 0) { + stats = formatBookMoreStats(weeksLeft, read); + } else if (left == 0) { + stats = ""; + try { + String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг за год", freshUser.getBooksToRead()); + String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); + log.info("Congratulation target generated: {}", congrat); + telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat)); + } catch (Exception e) { + log.error("Error generating congratulation for user {}", user.getId(), e); + telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!"); + } + } else { + stats = formatBookLeftStats(weeksLeft, target, read, left); } - } else { - stats = formatBookLeftStats(weeksLeft, target, read, left); + telegramClientService.sendMessageWithMarkdown(user, message + stats); } - telegramClientService.sendMessageWithMarkdown(user, message + stats); - bookRepository.save(book); user.setLastReadDate(new Date(System.currentTimeMillis())); + user.setLastNotificationDate(null); userRepository.save(user); try { diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java b/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java index 81faefe..5d7dafb 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; import org.jobrunr.jobs.annotations.Recurring; import org.jobrunr.scheduling.cron.Cron; import org.springframework.stereotype.Service; +import org.telegram.telegrambots.meta.api.objects.User; import ru.cathub.telegabot.model.BotUser; import ru.cathub.telegabot.model.TextRole; import ru.cathub.telegabot.repository.UserRepository; @@ -27,18 +28,22 @@ public class BookReminderScheduler { private final TelegramClientService telegramClientService; private final OpenRouterService openRouterService; - @Recurring(cron = "0 0 18 * * *", id = "book-reminder") + @Recurring(cron = "0 21 18,19 * * *", id = "book-reminder") public void checkReadingActivity() { Date weekAgo = new Date( Instant.now().minus(7, ChronoUnit.DAYS) .toEpochMilli() ); - for (var user : userRepository.findUsersNeedingReminder(weekAgo)) { + for (BotUser user : userRepository.findUsersNeedingReminder(weekAgo)) { try { - String prompt = "Придумай креативное и мотивирующее напоминание о том, что пользователь давно не читал книг"; + String prompt = "Придумай креативное и мотивирующее напоминание о том, что пользователь давно не читал книг. Доблжно быть примерно два абзаца."; String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); + log.info("Sending {} to user {}", congrat, user.getId() ); telegramClientService.sendMessageWithMarkdown(user, escapeNonMarkdown(congrat)); + + user.setLastNotificationDate(new Date(System.currentTimeMillis())); + userRepository.save(user); } catch (Exception e) { log.error("Error sending reminder to user {}", user.getId(), e); } diff --git a/src/main/java/ru/cathub/telegabot/service/impl/ProfileServiceImpl.java b/src/main/java/ru/cathub/telegabot/service/impl/ProfileServiceImpl.java index f58f5d1..30ad48c 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/ProfileServiceImpl.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/ProfileServiceImpl.java @@ -10,6 +10,8 @@ import ru.cathub.telegabot.service.ProfileService; import ru.cathub.telegabot.service.TelegramClientService; import ru.cathub.telegabot.utils.Constants; +import java.util.Optional; + import static ru.cathub.telegabot.utils.Constants.SET_BOOKS_GOAL; @Service @@ -49,7 +51,7 @@ public class ProfileServiceImpl implements ProfileService { userRepository.save(user); telegramClientService.sendMessage( user, - "Текущая цель: " + user.getBooksToRead() + "\nВведите новое количество книг:" + "Текущая цель: " + (user.getBooksToRead() != null ? String.valueOf(user.getBooksToRead()) : "Не задано") + "\nВведите новое количество книг:" ); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 289629d..0677ebb 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,24 +18,18 @@ spring.flyway.baselineOnMigrate=true spring.flyway.validateOnMigrate=true - - - -# ?????????? SQL-??????? -spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=false - # ?????????? ????????? ???????? logging.level.org.hibernate.SQL=DEBUG -logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE -logging.level.io.hypersistence.utils.hibernate.query=DEBUG + +# Logs the JDBC parameters passed to a query +logging.level.org.hibernate.type=TRACE # ??????????? ???? logging.level.org.springframework.cache=INFO # OpenRouter AI openrouter.api.url=https://openrouter.ai/api/v1 -openrouter.api.model=qwen/qwen-2.5-72b-instruct +openrouter.api.model=qwen/qwen-max # Для безопасности лучше установить через переменную окружения: