This commit is contained in:
Adrien Bouvais 2024-05-15 19:09:21 +02:00
parent 1b73a97ff1
commit e72ec1af78
3 changed files with 36 additions and 23 deletions

29
Chat.go
View File

@ -61,21 +61,23 @@ func LoadChatHandler(c *fiber.Ctx) error {
} }
} }
type NextMessage struct { type TemplateMessage struct {
Icon string Icon string
Content string Content string
Hidden bool Hidden bool
Id string Id string
Name string Name string
ModelID string
} }
func generateChatHTML() string { func generateChatHTML() string {
// Get the messages from the database // Get the messages from the database
// Maybe redo that to be area by area because look like shit rn. It come from early stage of dev. It work tho soooo...
Messages := getAllMessages() Messages := getAllMessages()
htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>" htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>"
var NextMessages []NextMessage // Use the custom NextMessage struct var templateMessages []TemplateMessage
for i, message := range Messages { for i, message := range Messages {
if message.Role == "user" { if message.Role == "user" {
@ -86,7 +88,7 @@ func generateChatHTML() string {
} }
htmlString += userOut htmlString += userOut
// Reset NextMessages when a user message is encountered // Reset NextMessages when a user message is encountered
NextMessages = []NextMessage{} templateMessages = []TemplateMessage{}
} else { } else {
modelID, exist := message.ModelID.Get() modelID, exist := message.ModelID.Get()
if !exist { if !exist {
@ -97,28 +99,29 @@ func generateChatHTML() string {
selected = false selected = false
} }
// For bot messages, add them to NextMessages with only the needed fields // For bot messages, add them to NextMessages with only the needed fields
nextMsg := NextMessage{ templateMessage := TemplateMessage{
Icon: model2Icon(modelID), // Assuming Icon is a field you want to include from Message Icon: model2Icon(modelID), // Assuming Icon is a field you want to include from Message
Content: markdownToHTML(message.Content), Content: markdownToHTML(message.Content),
Hidden: !selected, // Assuming Hidden is a field you want to include from Message Hidden: !selected, // Assuming Hidden is a field you want to include from Message
Id: message.ID.String(), Id: message.ID.String(),
Name: model2Name(modelID), Name: model2Name(modelID),
ModelID: modelID,
} }
NextMessages = append(NextMessages, nextMsg) templateMessages = append(templateMessages, templateMessage)
// Check if the next message is not a bot or if it's the last message // Check if the next message is not a bot or if it's the last message
if i+1 == len(Messages) || Messages[i+1].Role != "bot" { if i+1 == len(Messages) || Messages[i+1].Role != "bot" {
sort.Slice(NextMessages, func(i, j int) bool { sort.Slice(templateMessages, func(i, j int) bool {
if !NextMessages[i].Hidden && NextMessages[j].Hidden { if !templateMessages[i].Hidden && templateMessages[j].Hidden {
return true return true
} }
if NextMessages[i].Hidden && !NextMessages[j].Hidden { if templateMessages[i].Hidden && !templateMessages[j].Hidden {
return false return false
} }
return true return true
}) })
botOut, err := botTmpl.Execute(pongo2.Context{"Messages": NextMessages, "ConversationAreaId": i}) botOut, err := botTmpl.Execute(pongo2.Context{"Messages": templateMessages, "ConversationAreaId": i})
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -200,8 +203,8 @@ func generateWelcomeChatHTML() string {
htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>" htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>"
NextMessages := []NextMessage{} NextMessages := []TemplateMessage{}
nextMsg := NextMessage{ nextMsg := TemplateMessage{
Icon: "bouvai2", // Assuming Icon is a field you want to include from Message Icon: "bouvai2", // Assuming Icon is a field you want to include from Message
Content: "<br>" + markdownToHTML(welcomeMessage) + loginButton, Content: "<br>" + markdownToHTML(welcomeMessage) + loginButton,
Hidden: false, // Assuming Hidden is a field you want to include from Message Hidden: false, // Assuming Hidden is a field you want to include from Message
@ -227,8 +230,8 @@ func generateEnterKeyChatHTML() string {
htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>" htmlString := "<div class='columns is-centered' id='chat-container'><div class='column is-12-mobile is-8-tablet is-6-desktop' id='chat-messages'>"
NextMessages := []NextMessage{} NextMessages := []TemplateMessage{}
nextMsg := NextMessage{ nextMsg := TemplateMessage{
Icon: "bouvai2", // Assuming Icon is a field you want to include from Message Icon: "bouvai2", // Assuming Icon is a field you want to include from Message
Content: "<br>" + markdownToHTML(welcomeMessage), Content: "<br>" + markdownToHTML(welcomeMessage),
Hidden: false, // Assuming Hidden is a field you want to include from Message Hidden: false, // Assuming Hidden is a field you want to include from Message

View File

@ -111,7 +111,8 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
SELECT Message { SELECT Message {
model_id, model_id,
content, content,
area area,
id
} }
FILTER .id = <uuid>$0; FILTER .id = <uuid>$0;
`, &message, messageID) `, &message, messageID)
@ -135,6 +136,15 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
fmt.Println(area) fmt.Println(area)
templateMessage := TemplateMessage{
Icon: model2Icon(modelID),
Content: markdownToHTML(message.Content),
Hidden: false,
Id: message.ID.String(),
Name: model2Name(modelID),
ModelID: modelID,
}
// Check if the context's deadline is exceeded // Check if the context's deadline is exceeded
select { select {
case <-ctx.Done(): case <-ctx.Done():
@ -147,12 +157,12 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Generate the HTML content // Generate the HTML content
out := "<div class='message-header'>" out := "<div class='message-header'>"
out += "<p>" out += "<p>"
out += model2Name(modelID) out += model2Name(templateMessage.ModelID)
out += " </p>" out += " </p>"
out += "</div>" out += "</div>"
out += "<div class='message-body'>" out += "<div class='message-body'>"
out += " <ct class='content'>" out += " <ct class='content'>"
out += markdownToHTML(message.Content) out += templateMessage.Content
out += " </ct>" out += " </ct>"
out += "</div>" out += "</div>"
@ -166,7 +176,7 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
) )
out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{ out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{
"message": message, "message": templateMessage,
}) })
if err != nil { if err != nil {
fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages") fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages")
@ -175,18 +185,18 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Send Content event // Send Content event
sseChanel.SendEvent( sseChanel.SendEvent(
"swapSelectionBtn-"+modelID, "swapSelectionBtn-"+templateMessage.ModelID,
out, out,
) )
// Send Icon Swap event // Send Icon Swap event
sseChanel.SendEvent( sseChanel.SendEvent(
"swapIcon-"+fmt.Sprintf("%d", area.Position), "swapIcon-"+fmt.Sprintf("%d", area.Position),
`<img src="icons/`+model2Icon(modelID)+`.png" alt="User Image">`, `<img src="icons/`+model2Icon(templateMessage.ModelID)+`.png" alt="User Image">`,
) )
default: default:
out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{ out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{
"message": message, "message": templateMessage,
}) })
if err != nil { if err != nil {
fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages") fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages")
@ -197,7 +207,7 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Send Content event // Send Content event
sseChanel.SendEvent( sseChanel.SendEvent(
"swapSelectionBtn-"+modelID, "swapSelectionBtn-"+templateMessage.ModelID,
out, out,
) )
} }

View File

@ -1,7 +1,7 @@
<button class="button is-small is-primary message-button is-outlined mr-1" hx-get="/messageContent?id={{ message.Id }}" <button class="button is-small is-primary message-button is-outlined mr-1" hx-get="/messageContent?id={{ message.Id }}"
hx-target="#content-{{ ConversationAreaId }}" onclick="updateIcon('{{ message.Icon }}', '{{ ConversationAreaId }}')" hx-target="#content-{{ ConversationAreaId }}" onclick="updateIcon('{{ Icon }}', '{{ ConversationAreaId }}')"
title="{{ message.Name }}"> title="{{ message.Name }}">
<span class="icon is-small"> <span class="icon is-small">
<img src="icons/{{ message.Icon }}.png" alt="{{ message.Name }}" style="max-height: 100%; max-width: 100%;"> <img src="icons/{{ Icon }}.png" alt="{{ message.Name }}" style="max-height: 100%; max-width: 100%;">
</span> </span>
</button> </button>