Added together auto db update
This commit is contained in:
parent
c543956495
commit
5d8ea744c7
5
Chat.go
5
Chat.go
@ -269,11 +269,14 @@ func GenerateMessageContentHTML(authCookie string, messageId string, onlyContent
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = edgeGlobalClient.WithGlobals(map[string]interface{}{"ext::auth::client_token": authCookie}).Execute(edgeCtx, `
|
err = edgeGlobalClient.WithGlobals(map[string]interface{}{"ext::auth::client_token": authCookie}).Execute(edgeCtx, `
|
||||||
UPDATE Message
|
UPDATE Message
|
||||||
FILTER .id = <uuid>$0
|
FILTER .id = <uuid>$0
|
||||||
SET {selected := true};
|
SET {selected := true};
|
||||||
`, messageUUID)
|
`, messageUUID)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,12 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -139,3 +142,162 @@ func RequestTogether(c *fiber.Ctx, llm LLM, messages []Message) string {
|
|||||||
|
|
||||||
return chatCompletionResponse.Choices[0].Text
|
return chatCompletionResponse.Choices[0].Text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TogetherModel struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Object string `json:"object"`
|
||||||
|
Created int64 `json:"created"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
DisplayName string `json:"display_name"`
|
||||||
|
Organization string `json:"organization"`
|
||||||
|
Link string `json:"link"`
|
||||||
|
License string `json:"license"`
|
||||||
|
ContextLength int `json:"context_length"`
|
||||||
|
Pricing TogetherPricing `json:"pricing"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TogetherPricing struct {
|
||||||
|
Hourly float64 `json:"hourly"`
|
||||||
|
Input float64 `json:"input"`
|
||||||
|
Output float64 `json:"output"`
|
||||||
|
Base float64 `json:"base"`
|
||||||
|
Finetune float64 `json:"finetune"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Use my key everytime, no auth needed
|
||||||
|
func UpdateTogetherModels(c *fiber.Ctx, currentModelInfos []ModelInfo) {
|
||||||
|
url := "https://api.together.xyz/v1/models"
|
||||||
|
|
||||||
|
var apiKey string
|
||||||
|
err := edgeGlobalClient.WithGlobals(map[string]interface{}{"ext::auth::client_token": c.Cookies("jade-edgedb-auth-token")}).QuerySingle(edgeCtx, `
|
||||||
|
with
|
||||||
|
filtered_keys := (
|
||||||
|
select Key {
|
||||||
|
key
|
||||||
|
} filter .company.name = <str>$0 AND .<keys[is Setting].<setting[is User] = global currentUser
|
||||||
|
)
|
||||||
|
select filtered_keys.key limit 1
|
||||||
|
`, &apiKey, "together")
|
||||||
|
if err != nil {
|
||||||
|
logErrorCode.Println("08-00-0000")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
logErrorCode.Println("08-01-0001")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("Accept", "application/json")
|
||||||
|
req.Header.Set("Authorization", "Bearer "+apiKey)
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
logErrorCode.Println("08-02-0002")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
logErrorCode.Println("08-01-0003")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
logErrorCode.Println("08-03-0004 -", resp.Status, "-", string(body))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var togetherModels []TogetherModel
|
||||||
|
err = json.Unmarshal(body, &togetherModels)
|
||||||
|
if err != nil {
|
||||||
|
logErrorCode.Println("08-01-0005")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var exist bool
|
||||||
|
var savedModel ModelInfo
|
||||||
|
var newModelFound bool = false
|
||||||
|
const epsilon = 1e-9
|
||||||
|
|
||||||
|
fmt.Println("Updating Together ModelInfo:")
|
||||||
|
for _, model := range togetherModels {
|
||||||
|
if model.Type == "chat" {
|
||||||
|
exist = false
|
||||||
|
for _, currentModel := range currentModelInfos {
|
||||||
|
if currentModel.ModelID == model.ID {
|
||||||
|
exist = true
|
||||||
|
savedModel = currentModel
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if exist {
|
||||||
|
if math.Abs(model.Pricing.Input/1000000-float64(savedModel.InputPrice)) > epsilon ||
|
||||||
|
math.Abs(model.Pricing.Output/1000000-float64(savedModel.OutputPrice)) > epsilon {
|
||||||
|
fmt.Println("Found one existing model with changed price:", model.ID, ". Updating price from ", float64(savedModel.InputPrice), " to ", model.Pricing.Input/1000000)
|
||||||
|
err = edgeGlobalClient.Execute(edgeCtx, `
|
||||||
|
UPDATE ModelInfo FILTER .modelID = <str>$0 SET { inputPrice := <float32>$1, outputPrice := <float32>$2}
|
||||||
|
`, model.ID, float32(model.Pricing.Input)/1000000, float32(model.Pricing.Output)/1000000)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error updating price:", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Println("Found new model:", model.ID)
|
||||||
|
newModelFound = true
|
||||||
|
err = edgeGlobalClient.Execute(edgeCtx, `
|
||||||
|
INSERT ModelInfo { name := "New model, name coming soon...", modelID := <str>$0, inputPrice := <float32>$1, outputPrice := <float32>$2, company := assert_single(( SELECT Company FILTER .name = <str>$3))}
|
||||||
|
`, model.ID, float32(model.Pricing.Input)/1000000, float32(model.Pricing.Output)/1000000, "together")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error creating new modelInfo:", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if newModelFound {
|
||||||
|
SendNoreplyEmail("adrien.bouvais.pro@gmail.com", "New Together models found", "Look like new model have been found, you should name it.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete all unfound models
|
||||||
|
for _, currentModel := range currentModelInfos {
|
||||||
|
if currentModel.Company.Name != "together" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
exist = false
|
||||||
|
for _, model := range togetherModels {
|
||||||
|
if model.ID == currentModel.ModelID {
|
||||||
|
exist = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !exist {
|
||||||
|
fmt.Println("A ModelInfo using this modelID:", currentModel.ModelID, ", was found using a modelID that doesn't exist anymore. Deleting it.")
|
||||||
|
err = edgeGlobalClient.Execute(edgeCtx, `
|
||||||
|
DELETE ModelInfo FILTER .modelID = <str>$0 AND .company.name = <str>$1
|
||||||
|
`, currentModel.ModelID, "together")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error deleting a ModelInfo with an unfound modelID.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateTogetherModelsHandler(c *fiber.Ctx) error {
|
||||||
|
if !IsUserAdmin(c) {
|
||||||
|
return c.SendString("That's for admin, how did you manage to come here ?")
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentModelInfos []ModelInfo
|
||||||
|
err := edgeGlobalClient.Query(edgeCtx, `SELECT ModelInfo { id, name, modelID, inputPrice, outputPrice, company}`, ¤tModelInfos)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error getting all ModelInfo for updating them")
|
||||||
|
}
|
||||||
|
UpdateTogetherModels(c, currentModelInfos)
|
||||||
|
return c.SendString("Models from together ai updated")
|
||||||
|
}
|
||||||
|
7
TODO.md
7
TODO.md
@ -1,12 +1,12 @@
|
|||||||
# Bugs
|
# Bugs
|
||||||
[ ] Sometime I can redo or edit but the button is not available
|
[X] Sometime I can redo or edit but the button is not available
|
||||||
[X] The SSE event that sometime fails after some times. Reconnect when sending a new message.
|
[X] The SSE event that sometime fails after some times. Reconnect when sending a new message.
|
||||||
[X] 2 selected messages
|
[X] 2 selected messages
|
||||||
[X] On first response, code block width are too long
|
[X] On first response, code block width are too long
|
||||||
[X] Change Terms of service to say that I use one cookie
|
[X] Change Terms of service to say that I use one cookie
|
||||||
[X] Change the lastSelectedLLMs, 2 users can't use the same time...
|
[X] Change the lastSelectedLLMs, 2 users can't use the same time...
|
||||||
[X] CTRL + Enter not working
|
[X] CTRL + Enter not working
|
||||||
[ ] Add all Together AI models
|
[X] Add all Together AI models
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
[X] SSE to WebSocket
|
[X] SSE to WebSocket
|
||||||
@ -19,7 +19,7 @@
|
|||||||
[ ] Add login with email and password
|
[ ] Add login with email and password
|
||||||
[ ] Add login with AppleID
|
[ ] Add login with AppleID
|
||||||
[ ] Better temperature settings. (Anthropic from 0-1, OpenAI from 0-2, DeepSeek from -2-2, ect)
|
[ ] Better temperature settings. (Anthropic from 0-1, OpenAI from 0-2, DeepSeek from -2-2, ect)
|
||||||
[ ] Auto update the modelsInfos db (At least remove unavailable models and send me an email when new one arrive)
|
[X] Auto update the modelsInfos db (At least remove unavailable models and send me an email when new one arrive)
|
||||||
[ ] Encrypt the API keys
|
[ ] Encrypt the API keys
|
||||||
|
|
||||||
# Opti
|
# Opti
|
||||||
@ -28,7 +28,6 @@
|
|||||||
[ ] Look to reduce memory
|
[ ] Look to reduce memory
|
||||||
|
|
||||||
# Other
|
# Other
|
||||||
[ ] Remove all panic
|
|
||||||
[ ] Change the terms of service and enter keys page to an HTML
|
[ ] Change the terms of service and enter keys page to an HTML
|
||||||
[X] Use the normal RequestProvider function instead of TestProvider to remove TestProvider
|
[X] Use the normal RequestProvider function instead of TestProvider to remove TestProvider
|
||||||
[ ] Implement the JADE_IN_DEV env variable to dev locally on my laptop
|
[ ] Implement the JADE_IN_DEV env variable to dev locally on my laptop
|
||||||
|
3
main.go
3
main.go
@ -123,6 +123,9 @@ func main() {
|
|||||||
app.Get("/ws", websocket.New(handleWebSocket))
|
app.Get("/ws", websocket.New(handleWebSocket))
|
||||||
app.Get("/errorLogs", ErrorCodeLogsHandler)
|
app.Get("/errorLogs", ErrorCodeLogsHandler)
|
||||||
|
|
||||||
|
// Update models routes
|
||||||
|
app.Get("/models/together", UpdateTogetherModelsHandler)
|
||||||
|
|
||||||
// Start server
|
// Start server
|
||||||
if err := app.Listen(":8080"); err != nil {
|
if err := app.Listen(":8080"); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user