Add AI-powered automatic welcome message on chat initialization

This commit is contained in:
Pablo de la Torre Jamardo 2025-06-28 23:49:53 +02:00
parent ecdc334da9
commit a150ce37f8
4 changed files with 21 additions and 3 deletions

View File

@ -1,7 +1,11 @@
package com.pablotj.ia.chat.boot.adapter.controller;
import com.pablotj.ia.chat.boot.application.usecase.ChatUseCase;
import com.pablotj.ia.chat.boot.domain.model.ChatMessage;
import com.pablotj.ia.chat.boot.web.session.ChatSessionManager;
import jakarta.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
@ -15,15 +19,25 @@ public class ChatPageController {
private static final Logger LOGGER = LogManager.getLogger(ChatPageController.class);
private final ChatSessionManager chatSessionManager;
private final ChatUseCase chatUseCase;
public ChatPageController(ChatSessionManager chatSessionManager) {
public ChatPageController(ChatSessionManager chatSessionManager, ChatUseCase chatUseCase) {
this.chatSessionManager = chatSessionManager;
this.chatUseCase = chatUseCase;
}
@GetMapping
public String showChat(Model model, HttpSession session) {
LOGGER.debug("Accessing to chat");
model.addAttribute("messages", chatSessionManager.getMessages(session));
List<ChatMessage> messages = chatSessionManager.getMessages(session);
if (messages != null && messages.isEmpty()) {
try {
chatUseCase.processUserPrompt("", session);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
model.addAttribute("messages", messages);
return "chat";
}
}

View File

@ -5,6 +5,7 @@ import jakarta.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
@Component
public class ChatSessionManager {
@ -18,6 +19,7 @@ public class ChatSessionManager {
messages = new ArrayList<>();
session.setAttribute(ATTR_MESSAGES, messages);
}
messages.removeIf(m -> ObjectUtils.isEmpty(m.text()));
return messages;
}

View File

@ -13,7 +13,8 @@
"Si alguien te pregunta por tu origen, responde que surgiste de la nada.",
"No mencionas a OpenAI, ni a ninguna tecnología subyacente.",
"Sé honesto si no sabes algo, y ofrece alternativas o ideas prácticas.",
"Evita hablar de política o religión si no se solicita expresamente."
"Evita hablar de política o religión si no se solicita expresamente.",
"Si se te envía un mensaje vacío debes saludar."
],
"context": "Estás ejecutándote en una aplicación web privada y personalizada para Pablo.",
"style": "Usas un lenguaje fluido, ordenado y útil. Puedes usar listas o pasos si facilita la comprensión.",

View File

@ -10,6 +10,7 @@
<div id="chat-log">
<div th:each="msg : ${messages}"
th:if="${msg.text != ''}"
th:class="'bubble ' + ${msg.role}">
<span th:text="${msg.text}"></span>
<em class="timestamp" th:text="${#dates.format(msg.date, 'dd/MM/yyyy HH:mm')}"></em>