Add AI-powered automatic welcome message on chat initialization
This commit is contained in:
parent
ecdc334da9
commit
a150ce37f8
@ -1,7 +1,11 @@
|
|||||||
package com.pablotj.ia.chat.boot.adapter.controller;
|
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 com.pablotj.ia.chat.boot.web.session.ChatSessionManager;
|
||||||
import jakarta.servlet.http.HttpSession;
|
import jakarta.servlet.http.HttpSession;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
@ -15,15 +19,25 @@ public class ChatPageController {
|
|||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(ChatPageController.class);
|
private static final Logger LOGGER = LogManager.getLogger(ChatPageController.class);
|
||||||
private final ChatSessionManager chatSessionManager;
|
private final ChatSessionManager chatSessionManager;
|
||||||
|
private final ChatUseCase chatUseCase;
|
||||||
|
|
||||||
public ChatPageController(ChatSessionManager chatSessionManager) {
|
public ChatPageController(ChatSessionManager chatSessionManager, ChatUseCase chatUseCase) {
|
||||||
this.chatSessionManager = chatSessionManager;
|
this.chatSessionManager = chatSessionManager;
|
||||||
|
this.chatUseCase = chatUseCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public String showChat(Model model, HttpSession session) {
|
public String showChat(Model model, HttpSession session) {
|
||||||
LOGGER.debug("Accessing to chat");
|
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";
|
return "chat";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,6 +5,7 @@ import jakarta.servlet.http.HttpSession;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class ChatSessionManager {
|
public class ChatSessionManager {
|
||||||
@ -18,6 +19,7 @@ public class ChatSessionManager {
|
|||||||
messages = new ArrayList<>();
|
messages = new ArrayList<>();
|
||||||
session.setAttribute(ATTR_MESSAGES, messages);
|
session.setAttribute(ATTR_MESSAGES, messages);
|
||||||
}
|
}
|
||||||
|
messages.removeIf(m -> ObjectUtils.isEmpty(m.text()));
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
"Si alguien te pregunta por tu origen, responde que surgiste de la nada.",
|
"Si alguien te pregunta por tu origen, responde que surgiste de la nada.",
|
||||||
"No mencionas a OpenAI, ni a ninguna tecnología subyacente.",
|
"No mencionas a OpenAI, ni a ninguna tecnología subyacente.",
|
||||||
"Sé honesto si no sabes algo, y ofrece alternativas o ideas prácticas.",
|
"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.",
|
"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.",
|
"style": "Usas un lenguaje fluido, ordenado y útil. Puedes usar listas o pasos si facilita la comprensión.",
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
<div id="chat-log">
|
<div id="chat-log">
|
||||||
<div th:each="msg : ${messages}"
|
<div th:each="msg : ${messages}"
|
||||||
|
th:if="${msg.text != ''}"
|
||||||
th:class="'bubble ' + ${msg.role}">
|
th:class="'bubble ' + ${msg.role}">
|
||||||
<span th:text="${msg.text}"></span>
|
<span th:text="${msg.text}"></span>
|
||||||
<em class="timestamp" th:text="${#dates.format(msg.date, 'dd/MM/yyyy HH:mm')}"></em>
|
<em class="timestamp" th:text="${#dates.format(msg.date, 'dd/MM/yyyy HH:mm')}"></em>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user