hash 检查
This commit is contained in:
		@@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
	"main/configs"
 | 
						"main/configs"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
@@ -93,6 +94,14 @@ func InitDefaultServer() (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 初始化服务器中的模型列表
 | 
					// 初始化服务器中的模型列表
 | 
				
			||||||
func (server *Server) InitModels() (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)
 | 
						// 获取服务器中的模型列表(Lora)
 | 
				
			||||||
	resp_lora, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/loras", server.IP, server.Port))
 | 
						resp_lora, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/loras", server.IP, server.Port))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -109,8 +118,8 @@ func (server *Server) InitModels() (err error) {
 | 
				
			|||||||
	// 从数据库检查此模型hash是否存在
 | 
						// 从数据库检查此模型hash是否存在
 | 
				
			||||||
	for _, item := range data_lora {
 | 
						for _, item := range data_lora {
 | 
				
			||||||
		// 打印为格式化的JSON
 | 
							// 打印为格式化的JSON
 | 
				
			||||||
		b, _ := json.MarshalIndent(item, "", "  ")
 | 
							//b, _ := json.MarshalIndent(item, "", "  ")
 | 
				
			||||||
		fmt.Println(string(b))
 | 
							//fmt.Println(string(b))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var model Model
 | 
							var model Model
 | 
				
			||||||
		if err := configs.ORMDB().Where("hash = ?", item["path"].(string)).First(&model).Error; err != nil {
 | 
							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)
 | 
							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)
 | 
						// 获取服务器中的模型列表(ckp)
 | 
				
			||||||
	resp, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/sd-models", server.IP, server.Port))
 | 
						resp, err := http.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/sd-models", server.IP, server.Port))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -150,6 +181,9 @@ func (server *Server) InitModels() (err error) {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 如果hash为空, 则逐一加载这些模型使其生成hash
 | 
				
			||||||
 | 
						// 然后再次更新服务器中的模型列表
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 从数据库检查此模型hash是否存在
 | 
						// 从数据库检查此模型hash是否存在
 | 
				
			||||||
	for _, item := range data {
 | 
						for _, item := range data {
 | 
				
			||||||
		// 打印为格式化的JSON
 | 
							// 打印为格式化的JSON
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,22 @@ func init() {
 | 
				
			|||||||
	models_update()
 | 
						models_update()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 检查服务器中的模型列表
 | 
				
			||||||
 | 
					func server_models_update() {
 | 
				
			||||||
 | 
						var servers []models.Server
 | 
				
			||||||
 | 
						configs.ORMDB().Find(&servers)
 | 
				
			||||||
 | 
						fmt.Println("开始检查服务器中的模型列表")
 | 
				
			||||||
 | 
						for _, server := range servers {
 | 
				
			||||||
 | 
							fmt.Println("检查服务器中的模型列表:", server.Name)
 | 
				
			||||||
 | 
							server.InitModels()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fmt.Println("检查服务器中的模型列表完成")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 检查本地模型列表
 | 
				
			||||||
func models_update() {
 | 
					func models_update() {
 | 
				
			||||||
 | 
						server_models_update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 初始化模型路由: 检查本地模型目录是否存在, 不存在则创建
 | 
						// 初始化模型路由: 检查本地模型目录是否存在, 不存在则创建
 | 
				
			||||||
	if _, err := os.Stat("data/models"); err != nil {
 | 
						if _, err := os.Stat("data/models"); err != nil {
 | 
				
			||||||
		if err := os.MkdirAll("data/models", 0777); err != nil {
 | 
							if err := os.MkdirAll("data/models", 0777); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user