hash 检查

This commit is contained in:
2023-07-08 11:24:59 +08:00
parent cc4d268c29
commit f8a51382f5
2 changed files with 51 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"main/configs"
"net/http"
"path/filepath"
@@ -93,6 +94,14 @@ func InitDefaultServer() (err error) {
// 初始化服务器中的模型列表
func (server *Server) InitModels() (err error) {
// 先让服务器更新模型列表 /sdapi/v1/reload-checkpoint
resp_update, err := http.Post(fmt.Sprintf("http://%s:%d/sdapi/v1/refresh-checkpoints", server.IP, server.Port), "application/json", nil)
if err != nil {
return fmt.Errorf("更新服务器中的模型列表失败: %v", err)
}
defer resp_update.Body.Close()
log.Println("更新服务器中的模型列表:", resp_update.Status)
// 获取服务器中的模型列表(Lora)
resp_lora, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/loras", server.IP, server.Port))
if err != nil {
@@ -109,8 +118,8 @@ func (server *Server) InitModels() (err error) {
// 从数据库检查此模型hash是否存在
for _, item := range data_lora {
// 打印为格式化的JSON
b, _ := json.MarshalIndent(item, "", " ")
fmt.Println(string(b))
//b, _ := json.MarshalIndent(item, "", " ")
//fmt.Println(string(b))
var model Model
if err := configs.ORMDB().Where("hash = ?", item["path"].(string)).First(&model).Error; err != nil {
@@ -137,6 +146,28 @@ func (server *Server) InitModels() (err error) {
return fmt.Errorf("更新数据库失败: %v", err)
}
// 模型HASH生成
dexs := []struct {
Name string `json:"model_name"`
Hash string `json:"sha256"`
ModelCheckpoint string `json:"title"`
ModelPath string `json:"filename"`
}{}
if err = goreq.Post(fmt.Sprintf("http://%s:%d/sdapi/v1/refresh-checkpoints", server.IP, server.Port)).Do().BindJSON(&dexs); err != nil {
return fmt.Errorf("获取服务器中的模型列表失败: %v", err)
}
for _, item := range dexs {
// 如果hash为空, 则逐一加载这些模型使其生成hash
if item.Hash == "" {
if err := goreq.Post(fmt.Sprintf("http://%s:%d/sdapi/v1/options", server.IP, server.Port)).SetJsonBody(map[string]interface{}{
"sd_model_checkpoint": item.ModelCheckpoint,
"CLIP_stop_at_last_layers": 2,
}).Do().Error(); err != nil {
return fmt.Errorf("加载模型失败: %v", err)
}
}
}
// 获取服务器中的模型列表(ckp)
resp, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/sd-models", server.IP, server.Port))
if err != nil {
@@ -150,6 +181,9 @@ func (server *Server) InitModels() (err error) {
return err
}
// 如果hash为空, 则逐一加载这些模型使其生成hash
// 然后再次更新服务器中的模型列表
// 从数据库检查此模型hash是否存在
for _, item := range data {
// 打印为格式化的JSON