diff --git a/Chat.go b/Chat.go index 14de748..cf2fc7c 100644 --- a/Chat.go +++ b/Chat.go @@ -24,55 +24,6 @@ func ChatPageHandler(c *fiber.Ctx) error { return c.Render("chat", fiber.Map{"IsLogin": checkIfLogin(), "HaveKey": checkIfHaveKey()}, "layouts/main") } -func LoadModelSelectionHandler(c *fiber.Ctx) error { - openaiExists, anthropicExists, mistralExists := getExistingKeys() - - var CompanyInfosAvailable []CompanyInfo - - if openaiExists { - var openaiCompanyInfo CompanyInfo - for _, info := range CompanyInfos { - if info.ID == "openai" { - openaiCompanyInfo = info - break - } - } - CompanyInfosAvailable = append(CompanyInfosAvailable, openaiCompanyInfo) - } - if anthropicExists { - var anthropicCompanyInfo CompanyInfo - for _, info := range CompanyInfos { - if info.ID == "anthropic" { - anthropicCompanyInfo = info - break - } - } - CompanyInfosAvailable = append(CompanyInfosAvailable, anthropicCompanyInfo) - } - if mistralExists { - var mistralCompanyInfo CompanyInfo - for _, info := range CompanyInfos { - if info.ID == "mistral" { - mistralCompanyInfo = info - break - } - } - CompanyInfosAvailable = append(CompanyInfosAvailable, mistralCompanyInfo) - } - - CheckedModels := []string{"gpt-3.5-turbo"} // Default model - out, err := pongo2.Must(pongo2.FromFile("views/partials/popover-models.html")).Execute(pongo2.Context{ - "CompanyInfos": CompanyInfosAvailable, - "CheckedModels": CheckedModels, - }) - if err != nil { - c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ - "error": "Error rendering template", - }) - } - return c.SendString(out) -} - func DeleteMessageHandler(c *fiber.Ctx) error { messageId := c.FormValue("id") @@ -185,6 +136,7 @@ func generateChatHTML() string { func GetMessageContentHandler(c *fiber.Ctx) error { messageId := c.FormValue("id") + onlyContent := c.FormValue("onlyContent") messageUUID, err := edgedb.ParseUUID(messageId) if err != nil { @@ -207,6 +159,10 @@ func GetMessageContentHandler(c *fiber.Ctx) error { modelID, _ := selectedMessage.ModelID.Get() + if onlyContent == "true" { + return c.SendString(markdownToHTML(selectedMessage.Content)) + } + out := "
" out += "

" out += model2Name(modelID) @@ -280,8 +236,29 @@ func generateEnterKeyChatHTML() string { return htmlString } -// Popover stuff +// Buton actions +func GetEditMessageFormHandler(c *fiber.Ctx) error { + id := c.FormValue("id") + idUUID, _ := edgedb.ParseUUID(id) + var message MessageContent + err := edgeClient.QuerySingle(context.Background(), ` + SELECT Message { content } + FILTER .id = $0; + `, &message, idUUID) + if err != nil { + log.Fatal(err) + } + + tmpl := pongo2.Must(pongo2.FromFile("views/partials/edit-message-form.html")) + out, err := tmpl.Execute(pongo2.Context{"Content": message.Content, "ID": id}) + if err != nil { + panic(err) + } + return c.SendString(out) +} + +// Popover stuff func LoadUsageKPIHandler(c *fiber.Ctx) error { var TotalUsage float32 // Using the database. Get the sum of all usage.inputCost and outputCost @@ -359,3 +336,52 @@ func LoadSettingsHandler(c *fiber.Ctx) error { } return c.SendString(out) } + +func LoadModelSelectionHandler(c *fiber.Ctx) error { + openaiExists, anthropicExists, mistralExists := getExistingKeys() + + var CompanyInfosAvailable []CompanyInfo + + if openaiExists { + var openaiCompanyInfo CompanyInfo + for _, info := range CompanyInfos { + if info.ID == "openai" { + openaiCompanyInfo = info + break + } + } + CompanyInfosAvailable = append(CompanyInfosAvailable, openaiCompanyInfo) + } + if anthropicExists { + var anthropicCompanyInfo CompanyInfo + for _, info := range CompanyInfos { + if info.ID == "anthropic" { + anthropicCompanyInfo = info + break + } + } + CompanyInfosAvailable = append(CompanyInfosAvailable, anthropicCompanyInfo) + } + if mistralExists { + var mistralCompanyInfo CompanyInfo + for _, info := range CompanyInfos { + if info.ID == "mistral" { + mistralCompanyInfo = info + break + } + } + CompanyInfosAvailable = append(CompanyInfosAvailable, mistralCompanyInfo) + } + + CheckedModels := []string{"gpt-3.5-turbo"} // Default model + out, err := pongo2.Must(pongo2.FromFile("views/partials/popover-models.html")).Execute(pongo2.Context{ + "CompanyInfos": CompanyInfosAvailable, + "CheckedModels": CheckedModels, + }) + if err != nil { + c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": "Error rendering template", + }) + } + return c.SendString(out) +} diff --git a/database.go b/database.go index b852c7d..12d23d7 100644 --- a/database.go +++ b/database.go @@ -55,6 +55,10 @@ type Message struct { Conv Conversation `edgedb:"conversation"` } +type MessageContent struct { + Content string `edgedb:"content"` +} + type Usage struct { ID edgedb.UUID `edgedb:"id"` ModelID string `edgedb:"model_id"` diff --git a/main.go b/main.go index 02380b5..c3c9ec7 100644 --- a/main.go +++ b/main.go @@ -41,6 +41,7 @@ func main() { app.Post("/deleteMessage", DeleteMessageHandler) app.Get("/generateMultipleMessages", GenerateMultipleMessages) app.Get("/messageContent", GetMessageContentHandler) + app.Get("/editMessageForm", GetEditMessageFormHandler) // Settings routes app.Post("/addKeys", addKeys) @@ -56,6 +57,11 @@ func main() { app.Get("/callback", handleCallback) app.Get("/callbackSignup", handleCallbackSignup) + app.Get("/test", func(c *fiber.Ctx) error { + fmt.Println("Current User: ", getCurrentUser(), " - ", checkIfLogin()) + return c.Render("test", fiber.Map{}) + }) + // Start server app.Listen(":8080") } diff --git a/static/style.css b/static/style.css index 099606a..2f83bc1 100644 --- a/static/style.css +++ b/static/style.css @@ -172,4 +172,18 @@ svg text { -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); +} + +/* Message button styles */ +.message-button { + opacity: 0; + transition: opacity 0.3s ease; +} + +.message-user:hover .message-button { + opacity: 1; +} + +.message-bot:hover .message-button { + opacity: 1; } \ No newline at end of file diff --git a/utils.go b/utils.go index a2adfdb..715a378 100644 --- a/utils.go +++ b/utils.go @@ -53,7 +53,7 @@ func model2Icon(model string) string { if strings.Contains(model, "mistral") || strings.Contains(model, "mixtral") { return "mistral" } - return "openai" + return "bouvai2" } func model2Name(model string) string { @@ -62,7 +62,7 @@ func model2Name(model string) string { return ModelsInfos[i].Name } } - return "OpenAI" + return "You" } func getExistingKeys() (bool, bool, bool) { diff --git a/views/layouts/main.html b/views/layouts/main.html index 8be7c1f..95c5705 100644 --- a/views/layouts/main.html +++ b/views/layouts/main.html @@ -22,6 +22,13 @@ {{embed}} + + \ No newline at end of file +

\ No newline at end of file diff --git a/views/partials/message-user.html b/views/partials/message-user.html index ef8348b..70aa646 100644 --- a/views/partials/message-user.html +++ b/views/partials/message-user.html @@ -15,7 +15,7 @@

-
+
{{ Content|safe }}
@@ -27,7 +27,8 @@ -
- - - \ No newline at end of file + \ No newline at end of file