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
Content string
Hidden bool
Id string
Name string
ModelID string
}
func generateChatHTML() string {
// 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()
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 {
if message.Role == "user" {
@ -86,7 +88,7 @@ func generateChatHTML() string {
}
htmlString += userOut
// Reset NextMessages when a user message is encountered
NextMessages = []NextMessage{}
templateMessages = []TemplateMessage{}
} else {
modelID, exist := message.ModelID.Get()
if !exist {
@ -97,28 +99,29 @@ func generateChatHTML() string {
selected = false
}
// 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
Content: markdownToHTML(message.Content),
Hidden: !selected, // Assuming Hidden is a field you want to include from Message
Id: message.ID.String(),
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
if i+1 == len(Messages) || Messages[i+1].Role != "bot" {
sort.Slice(NextMessages, func(i, j int) bool {
if !NextMessages[i].Hidden && NextMessages[j].Hidden {
sort.Slice(templateMessages, func(i, j int) bool {
if !templateMessages[i].Hidden && templateMessages[j].Hidden {
return true
}
if NextMessages[i].Hidden && !NextMessages[j].Hidden {
if templateMessages[i].Hidden && !templateMessages[j].Hidden {
return false
}
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 {
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'>"
NextMessages := []NextMessage{}
nextMsg := NextMessage{
NextMessages := []TemplateMessage{}
nextMsg := TemplateMessage{
Icon: "bouvai2", // Assuming Icon is a field you want to include from Message
Content: "<br>" + markdownToHTML(welcomeMessage) + loginButton,
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'>"
NextMessages := []NextMessage{}
nextMsg := NextMessage{
NextMessages := []TemplateMessage{}
nextMsg := TemplateMessage{
Icon: "bouvai2", // Assuming Icon is a field you want to include from Message
Content: "<br>" + markdownToHTML(welcomeMessage),
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 {
model_id,
content,
area
area,
id
}
FILTER .id = <uuid>$0;
`, &message, messageID)
@ -135,6 +136,15 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
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
select {
case <-ctx.Done():
@ -147,12 +157,12 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Generate the HTML content
out := "<div class='message-header'>"
out += "<p>"
out += model2Name(modelID)
out += model2Name(templateMessage.ModelID)
out += " </p>"
out += "</div>"
out += "<div class='message-body'>"
out += " <ct class='content'>"
out += markdownToHTML(message.Content)
out += templateMessage.Content
out += " </ct>"
out += "</div>"
@ -166,7 +176,7 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
)
out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{
"message": message,
"message": templateMessage,
})
if err != nil {
fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages")
@ -175,18 +185,18 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Send Content event
sseChanel.SendEvent(
"swapSelectionBtn-"+modelID,
"swapSelectionBtn-"+templateMessage.ModelID,
out,
)
// Send Icon Swap event
sseChanel.SendEvent(
"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:
out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{
"message": message,
"message": templateMessage,
})
if err != nil {
fmt.Println("Error in modelSelecBtnTmpl.Execute: in GenerateMultipleMessages")
@ -197,7 +207,7 @@ func HandleGenerateMultipleMessages(selectedModelIds []string) {
// Send Content event
sseChanel.SendEvent(
"swapSelectionBtn-"+modelID,
"swapSelectionBtn-"+templateMessage.ModelID,
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 }}"
hx-target="#content-{{ ConversationAreaId }}" onclick="updateIcon('{{ message.Icon }}', '{{ ConversationAreaId }}')"
hx-target="#content-{{ ConversationAreaId }}" onclick="updateIcon('{{ Icon }}', '{{ ConversationAreaId }}')"
title="{{ message.Name }}">
<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>
</button>