From aa41e35cb121f616756fc498cf1245d32c46c5e7 Mon Sep 17 00:00:00 2001 From: Adrien Date: Thu, 16 May 2024 00:35:09 +0200 Subject: [PATCH] Working event handler --- Chat.go | 7 +- Request.go | 89 ++++++++++++------------- RequestGroq.go | 6 -- RequestMistral.go | 2 - RequestOpenai.go | 2 - database.go | 10 +-- main.go | 9 +-- views/chat.html | 2 +- views/layouts/main.html | 2 +- views/partials/message-bot.html | 18 +++-- views/partials/model-selection-btn.html | 2 +- 11 files changed, 62 insertions(+), 87 deletions(-) diff --git a/Chat.go b/Chat.go index a8e6e1e..af73723 100644 --- a/Chat.go +++ b/Chat.go @@ -19,16 +19,12 @@ func ChatPageHandler(c *fiber.Ctx) error { edgeClient = edgeClient.WithGlobals(map[string]interface{}{"ext::auth::client_token": authCookie}) } - fmt.Println("Current User: ", getCurrentUser(), " - ", checkIfLogin()) - return c.Render("chat", fiber.Map{"IsLogin": checkIfLogin(), "HaveKey": checkIfHaveKey()}, "layouts/main") } func DeleteMessageHandler(c *fiber.Ctx) error { messageId := c.FormValue("id") - fmt.Println("Deleting message: " + messageId) - messageUUID, err := edgedb.ParseUUID(messageId) if err != nil { fmt.Println("Error in uuid.FromString: in DeleteMessageHandler") @@ -141,7 +137,8 @@ func GetMessageContentHandler(c *fiber.Ctx) error { content, llm : { modelInfo : { - modelID + modelID, + name, } } } diff --git a/Request.go b/Request.go index 2cbcac4..508459d 100644 --- a/Request.go +++ b/Request.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "strings" "sync" "time" @@ -12,7 +13,9 @@ import ( "github.com/gofiber/fiber/v2" ) -func GenerateMultipleMessagesHandler(c *fiber.Ctx) error { +var lastSelectedLLMs []LLM + +func GeneratePlaceholderHandler(c *fiber.Ctx) error { message := c.FormValue("message", "") selectedLLMIds := []string{"1e5a07c4-12fe-11ef-8da6-67d29b408c53"} // TODO Hanle in the UI @@ -44,8 +47,7 @@ func GenerateMultipleMessagesHandler(c *fiber.Ctx) error { } selectedLLMs = append(selectedLLMs, selectedLLM) } - - fmt.Println("Selected LLMs: ", selectedLLMs) + lastSelectedLLMs = selectedLLMs _, position := insertArea() messageID := insertUserMessage(message) @@ -57,13 +59,12 @@ func GenerateMultipleMessagesHandler(c *fiber.Ctx) error { messageOut, _ = botTmpl.Execute(pongo2.Context{"IsPlaceholder": true, "SelectedLLMs": selectedLLMs, "ConversationAreaId": position + 1}) out += messageOut - go HandleGenerateMultipleMessages(selectedLLMs) - return c.SendString(out) } -func HandleGenerateMultipleMessages(selectedLLMs []LLM) { +func GenerateMultipleMessagesHandler(c *fiber.Ctx) error { insertArea() + selectedLLMs := lastSelectedLLMs // Create a wait group to synchronize the goroutines var wg sync.WaitGroup @@ -99,12 +100,8 @@ func HandleGenerateMultipleMessages(selectedLLMs []LLM) { var messageID edgedb.UUID if addMessageFunc != nil { messageID = addMessageFunc(selectedLLMs[idx], idx == 0) - } else { - fmt.Println("Invalid model: ", selectedLLMs[idx].Model.Company.Name) } - fmt.Println("Message ID: ", messageID) - var message Message err := edgeClient.QuerySingle(edgeCtx, ` SELECT Message { @@ -116,7 +113,11 @@ func HandleGenerateMultipleMessages(selectedLLMs []LLM) { }, llm : { modelInfo : { - modelID + modelID, + name, + company : { + icon, + } } } } @@ -157,51 +158,43 @@ func HandleGenerateMultipleMessages(selectedLLMs []LLM) { out += " " out += "" - // Send Content event - sseChanel.SendEvent( - "swapContent-"+fmt.Sprintf("%d", message.Area.Position), - out, - ) + go func() { - fmt.Println(templateMessage) + // Send Content event + sseChanel.SendEvent( + "swapContent-"+fmt.Sprintf("%d", message.Area.Position), + out, + ) - out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{ - "message": templateMessage, - "ConversationAreaId": message.Area.Position, - }) - if err != nil { - fmt.Println("Error in modelSelecBtnTmpl.Execute: in HandleGenerateMultipleMessages 3") - log.Fatal(err) - } + out, err := selectBtnTmpl.Execute(map[string]interface{}{ + "message": templateMessage, + "ConversationAreaId": message.Area.Position, + }) + if err != nil { + fmt.Println("Error in modelSelecBtnTmpl.Execute: in HandleGenerateMultipleMessages 3") + log.Fatal(err) + } - fmt.Println("Sending event: swapSelectionBtn-" + selectedLLMs[idx].ID.String()) - fmt.Println(out) + // Replace newline characters to prevent premature termination + out = strings.ReplaceAll(out, "\n", "") - // Send Content event - sseChanel.SendEvent( - "swapSelectionBtn-"+templateMessage.ModelID, - out, - ) + // Send Content event + sseChanel.SendEvent( + "swapSelectionBtn-"+selectedLLMs[idx].ID.String(), + out, + ) - // Send Icon Swap event - sseChanel.SendEvent( - "swapIcon-"+fmt.Sprintf("%d", message.Area.Position), - `User Image`, - ) + // Send Icon Swap event + sseChanel.SendEvent( + "swapIcon-"+fmt.Sprintf("%d", message.Area.Position), + `User Image`, + ) + }() default: - out, err := modelSelecBtnTmpl.Execute(map[string]interface{}{ - "message": templateMessage, - "ConversationAreaId": message.Area.Position, - }) - if err != nil { - fmt.Println("Error in modelSelecBtnTmpl.Execute: in HandleGenerateMultipleMessages 4") - log.Fatal(err) - } - // Send Content event sseChanel.SendEvent( "swapSelectionBtn-"+templateMessage.ModelID, - out, + "New button", ) } } @@ -210,4 +203,6 @@ func HandleGenerateMultipleMessages(selectedLLMs []LLM) { // Wait for all goroutines to finish wg.Wait() + + return c.SendString("") } diff --git a/RequestGroq.go b/RequestGroq.go index 15252fc..06956c5 100644 --- a/RequestGroq.go +++ b/RequestGroq.go @@ -44,7 +44,6 @@ func addGroqMessage(llm LLM, selected bool) edgedb.UUID { if err != nil { fmt.Println("Error:", err) } else if len(chatCompletion.Choices) == 0 { - fmt.Println(chatCompletion) fmt.Println("No response from Groq") id := insertBotMessage("No response from Groq", selected, llm.ID) return id @@ -100,7 +99,6 @@ func TestGroqKey(apiKey string) bool { var chatCompletionResponse GroqChatCompletionResponse err = json.Unmarshal(body, &chatCompletionResponse) - fmt.Println(chatCompletionResponse) if err != nil { return false } @@ -125,8 +123,6 @@ func RequestGroq(model string, messages []Message, temperature float64) (GroqCha return GroqChatCompletionResponse{}, fmt.Errorf("error getting Groq API key: %w", err) } - fmt.Println("API key:", apiKey) - url := "https://api.groq.com/openai/v1/chat/completions" requestBody := GroqChatCompletionRequest{ @@ -135,8 +131,6 @@ func RequestGroq(model string, messages []Message, temperature float64) (GroqCha Temperature: temperature, } - fmt.Println(requestBody) - jsonBody, err := json.Marshal(requestBody) if err != nil { return GroqChatCompletionResponse{}, fmt.Errorf("error marshaling JSON: %w", err) diff --git a/RequestMistral.go b/RequestMistral.go index 61435fe..2ce6d1e 100644 --- a/RequestMistral.go +++ b/RequestMistral.go @@ -43,7 +43,6 @@ func addMistralMessage(llm LLM, selected bool) edgedb.UUID { if err != nil { fmt.Println("Error:", err) } else if len(chatCompletion.Choices) == 0 { - fmt.Println(chatCompletion) fmt.Println("No response from Mistral") id := insertBotMessage("No response from Mistral", selected, llm.ID) return id @@ -104,7 +103,6 @@ func TestMistralKey(apiKey string) bool { var chatCompletionResponse MistralChatCompletionResponse err = json.Unmarshal(body, &chatCompletionResponse) - fmt.Println(chatCompletionResponse) if err != nil { fmt.Println("Error:", err) return false diff --git a/RequestOpenai.go b/RequestOpenai.go index 79929eb..f10dd14 100644 --- a/RequestOpenai.go +++ b/RequestOpenai.go @@ -45,7 +45,6 @@ func addOpenaiMessage(llm LLM, selected bool) edgedb.UUID { if err != nil { fmt.Println("Error:", err) } else if len(chatCompletion.Choices) == 0 { - fmt.Println(chatCompletion) fmt.Println("No response from OpenAI") id := insertBotMessage("No response from OpenAI", selected, llm.ID) return id @@ -101,7 +100,6 @@ func TestOpenaiKey(apiKey string) bool { var chatCompletionResponse OpenaiChatCompletionResponse err = json.Unmarshal(body, &chatCompletionResponse) - fmt.Println(chatCompletionResponse) if err != nil { return false } diff --git a/database.go b/database.go index 6abfea0..60ceeee 100644 --- a/database.go +++ b/database.go @@ -116,15 +116,6 @@ func getLastArea() edgedb.UUID { return inserted.id } -func getCurrentUser() User { - var result User - err := edgeClient.QuerySingle(edgeCtx, "SELECT global currentUser LIMIT 1;", &result) - if err != nil { - return User{} - } - return result -} - func checkIfLogin() bool { var result User err := edgeClient.QuerySingle(edgeCtx, "SELECT global currentUser LIMIT 1;", &result) @@ -292,6 +283,7 @@ func getAllMessages() []Message { llm : { modelInfo : { modelID, + name, company : { icon } diff --git a/main.go b/main.go index 49e4c01..28432a9 100644 --- a/main.go +++ b/main.go @@ -12,13 +12,13 @@ import ( var userTmpl *pongo2.Template var botTmpl *pongo2.Template -var modelSelecBtnTmpl *pongo2.Template +var selectBtnTmpl *pongo2.Template var sseChanel *ssefiber.FiberSSEChannel func main() { botTmpl = pongo2.Must(pongo2.FromFile("views/partials/message-bot.html")) userTmpl = pongo2.Must(pongo2.FromFile("views/partials/message-user.html")) - modelSelecBtnTmpl = pongo2.Must(pongo2.FromFile("views/partials/model-selection-btn.html")) + selectBtnTmpl = pongo2.Must(pongo2.FromFile("views/partials/model-selection-btn.html")) // Import HTML using django engine/template engine := django.New("./views", ".html") @@ -44,6 +44,7 @@ func main() { // Chat routes app.Post("/deleteMessage", DeleteMessageHandler) + app.Get("/generatePlaceholder", GeneratePlaceholderHandler) app.Get("/generateMultipleMessages", GenerateMultipleMessagesHandler) app.Get("/messageContent", GetMessageContentHandler) app.Get("/editMessageForm", GetEditMessageFormHandler) @@ -67,10 +68,6 @@ func main() { app.Get("/test", func(c *fiber.Ctx) error { fmt.Println("Hello from test") - go sseChanel.SendEvent( - "swapIcon-1", - `User Image`, - ) return c.SendString("") }) diff --git a/views/chat.html b/views/chat.html index c0da6fc..b34458c 100644 --- a/views/chat.html +++ b/views/chat.html @@ -24,7 +24,7 @@ @@ -70,6 +68,12 @@
+ +
+

+ Waiting... +

+
@@ -81,7 +85,7 @@
{% for selectedLLM in SelectedLLMs %} \ No newline at end of file