some fixes and binary build optimization

This commit is contained in:
2026-01-20 11:34:07 +03:00
parent c5671add06
commit 2355623c38
7 changed files with 57 additions and 56 deletions

View File

@@ -7,7 +7,7 @@ COPY ./laniakea ./laniakea
COPY ./plugins ./plugins COPY ./plugins ./plugins
COPY ./utils ./utils COPY ./utils ./utils
COPY ./main.go ./ COPY ./main.go ./
RUN --mount=type=cache,target=/go/pkg/mod go build -trimpath -o /usr/local/bin/kurumi ./ RUN --mount=type=cache,target=/go/pkg/mod CGO_ENABLED=0 go build -trimpath -ldflags="-s -w -X utils.BuildTime=$(date -u +%Y-%m-%d_%H:%M:%S)" -v -o /usr/local/bin/kurumi ./
FROM alpine:3.23 AS runner FROM alpine:3.23 AS runner
WORKDIR /app WORKDIR /app

View File

@@ -1,3 +1,4 @@
build: build:
go mod tidy
docker build -t git.nix13.pw/scuroneko/kurumibotgo:latest -t git.nix13.pw/scuroneko/kurumibotgo:0.2.0 -f ./Dockerfile . docker build -t git.nix13.pw/scuroneko/kurumibotgo:latest -t git.nix13.pw/scuroneko/kurumibotgo:0.2.0 -f ./Dockerfile .
docker push git.nix13.pw/scuroneko/kurumibotgo --all-tags docker push git.nix13.pw/scuroneko/kurumibotgo --all-tags

10
go.sum
View File

@@ -20,10 +20,6 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
@@ -34,8 +30,8 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/muir/sqltoken v0.1.0 h1:edosEGsOClOZNfgGQNQSgxR9O6LiVefm2rDRqp2InuI= github.com/muir/sqltoken v0.1.0 h1:edosEGsOClOZNfgGQNQSgxR9O6LiVefm2rDRqp2InuI=
github.com/muir/sqltoken v0.1.0/go.mod h1:lgOIORnKekMsuc/ZwdPOfwz/PtWLPCke43cEbT3uDuY= github.com/muir/sqltoken v0.1.0/go.mod h1:lgOIORnKekMsuc/ZwdPOfwz/PtWLPCke43cEbT3uDuY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -93,5 +89,3 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg=
gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=

View File

@@ -1,9 +1,11 @@
package main package main
import ( import (
"fmt"
"kurumibot/database" "kurumibot/database"
"kurumibot/laniakea" "kurumibot/laniakea"
"kurumibot/plugins" "kurumibot/plugins"
"kurumibot/utils"
"log" "log"
"github.com/joho/godotenv" "github.com/joho/godotenv"
@@ -40,6 +42,8 @@ func main() {
plugins.RegisterAdmin(bot) plugins.RegisterAdmin(bot)
plugins.RegisterRP(bot) plugins.RegisterRP(bot)
fmt.Printf("Build time: %s", utils.BuildTime)
defer bot.Close() defer bot.Close()
bot.Run() bot.Run()
} }

View File

@@ -6,6 +6,7 @@ import (
"kurumibot/utils" "kurumibot/utils"
"math" "math"
"math/rand/v2" "math/rand/v2"
"runtime"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -36,8 +37,9 @@ func RegisterEconomy(bot *laniakea.Bot) {
func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) { func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
out := []string{ out := []string{
fmt.Sprintf("Go: %s", "1.25.5"), fmt.Sprintf("Go: %s", runtime.Version()),
fmt.Sprintf("Версия laniakea: %s", laniakea.VersionString), fmt.Sprintf("Время сборки: %s", utils.BuildTime),
fmt.Sprintf("Версия Laniakea: %s", laniakea.VersionString),
} }
ctx.Answer(strings.Join(out, "\n")) ctx.Answer(strings.Join(out, "\n"))
} }

View File

@@ -71,11 +71,13 @@ func NewOpenAIAPI(baseURL, token, model string) *OpenAIAPI {
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
} }
t := &http.Transport{}
if proxy.Host != "" {
t.Proxy = http.ProxyURL(proxy)
}
client := &http.Client{ client := &http.Client{
Timeout: 15 * time.Second, Timeout: 5 * time.Minute,
Transport: &http.Transport{ Transport: t,
Proxy: http.ProxyURL(proxy),
},
} }
return &OpenAIAPI{ return &OpenAIAPI{
Token: token, Token: token,
@@ -97,36 +99,53 @@ type CreateCompletionReq struct {
MaxCompletionTokens int `json:"max_completition_tokens,omitempty"` MaxCompletionTokens int `json:"max_completition_tokens,omitempty"`
} }
func (o *OpenAIAPI) CreateCompletion(request CreateCompletionReq) (*OpenAIResponse, error) { func (o *OpenAIAPI) DoRequest(url string, params any) ([]byte, error) {
u := fmt.Sprintf("%s/v1/chat/completions", o.BaseURL) responseBody := make([]byte, 0)
request.Model = o.Model data, err := json.Marshal(params)
data, err := json.Marshal(request)
o.Logger.Debug("REQ", u, string(data))
if err != nil { if err != nil {
return nil, err return responseBody, err
} }
buf := bytes.NewBuffer(data) req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
req, err := http.NewRequest("POST", u, buf)
if err != nil { if err != nil {
return nil, err return responseBody, err
} }
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
if o.Token != "" { if o.Token != "" {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", o.Token)) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", o.Token))
} }
resp, err := http.DefaultClient.Do(req) res, err := o.client.Do(req)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer resp.Body.Close() defer res.Body.Close()
body, err := io.ReadAll(resp.Body) if res.StatusCode == 504 || res.StatusCode == 400 {
time.Sleep(5 * time.Second)
return o.DoRequest(url, params)
}
responseBody, err = io.ReadAll(res.Body)
if err != nil {
return responseBody, err
}
return responseBody, err
}
func (o *OpenAIAPI) CreateCompletion(request CreateCompletionReq) (*OpenAIResponse, error) {
u := fmt.Sprintf("%s/v1/chat/completions", o.BaseURL)
request.Model = o.Model
data, err := json.Marshal(request)
if err != nil {
return nil, err
}
o.Logger.Debug("REQ", u, string(data))
body, err := o.DoRequest(u, request)
if err != nil { if err != nil {
return nil, err return nil, err
} }
o.Logger.Debug("RES", u, string(body)) o.Logger.Debug("RES", u, string(body))
response := new(OpenAIResponse) response := new(OpenAIResponse)
err = json.Unmarshal(body, response) err = json.Unmarshal(body, response)
return response, err return response, err
@@ -144,39 +163,17 @@ func (o *OpenAIAPI) CompressChat(history []Message) (*OpenAIResponse, error) {
} }
u := fmt.Sprintf("%s/v1/chat/completions", o.BaseURL) u := fmt.Sprintf("%s/v1/chat/completions", o.BaseURL)
data, err := json.Marshal(request) data, err := json.Marshal(request)
if err != nil {
return nil, err
}
o.Logger.Debug("COMPRESS REQ", u, string(data)) o.Logger.Debug("COMPRESS REQ", u, string(data))
if err != nil { body, err := o.DoRequest(u, request)
return nil, err
}
buf := bytes.NewBuffer(data)
req, err := http.NewRequest("POST", u, buf)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
if o.Token != "" {
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", o.Token))
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
if resp.StatusCode == 504 || resp.StatusCode == 400 {
time.Sleep(5 * time.Second)
resp, err = http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, err return nil, err
} }
o.Logger.Debug("COMPRESS RES", u, string(body)) o.Logger.Debug("COMPRESS RES", u, string(body))
response := new(OpenAIResponse) response := new(OpenAIResponse)
err = json.Unmarshal(body, response) err = json.Unmarshal(body, response)
return response, err return response, err

3
utils/constants.go Normal file
View File

@@ -0,0 +1,3 @@
package utils
var BuildTime = ""