Files
rag-local/kb/dao/model_config_dao.go
T
2026-08-05 10:28:44 +08:00

111 lines
3.3 KiB
Go

package dao
import (
"context"
"database/sql"
"errors"
"rag-local/common"
"rag-local/kb/consts"
"rag-local/kb/model/entity"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv"
)
var ModelConfig = &modelConfigDao{}
type modelConfigDao struct{}
func init() {
ctx := context.Background()
_, err := g.DB(consts.DbGroupSystem).Exec(ctx, `CREATE TABLE IF NOT EXISTS `+consts.TableNameModelConfig+` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL DEFAULT '',
model_type TEXT NOT NULL DEFAULT 'chat',
model_name TEXT NOT NULL DEFAULT '',
endpoint_url TEXT NOT NULL DEFAULT '',
api_key TEXT NOT NULL DEFAULT '',
dimension INTEGER NOT NULL DEFAULT 1024,
extra TEXT NOT NULL DEFAULT '',
created_at DATETIME DEFAULT (datetime('now','localtime')),
updated_at DATETIME DEFAULT (datetime('now','localtime'))
)`)
if err != nil {
g.Log().Warningf(ctx, "create model_config table failed: %v", err)
}
}
func (d *modelConfigDao) GetOne(ctx context.Context, id int64) (*entity.ModelConfig, error) {
var m entity.ModelConfig
err := g.DB(consts.DbGroupSystem).Model(consts.TableNameModelConfig).Ctx(ctx).
Cache(gdb.CacheOption{Duration: common.CacheTTL(), Name: "model_config_GetOne_" + gconv.String(id)}).
Where("id", id).Scan(&m)
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
if err != nil {
return nil, err
}
return &m, nil
}
func (d *modelConfigDao) List(ctx context.Context, modelType string) ([]*entity.ModelConfig, error) {
var list []*entity.ModelConfig
m := g.DB(consts.DbGroupSystem).Model(consts.TableNameModelConfig).Ctx(ctx).OrderAsc("id")
if modelType != "" {
m = m.Where("model_type", modelType)
}
err := m.Scan(&list)
return list, err
}
func (d *modelConfigDao) Insert(ctx context.Context, data *entity.ModelConfig) (int64, error) {
now := gtime.Now().Format("Y-m-d H:i:s")
r, err := g.DB(consts.DbGroupSystem).Model(consts.TableNameModelConfig).Ctx(ctx).Data(g.Map{
"name": data.Name,
"model_type": data.ModelType,
"model_name": data.ModelName,
"endpoint_url": data.EndpointUrl,
"api_key": data.ApiKey,
"dimension": data.Dimension,
"extra": data.Extra,
"created_at": now,
"updated_at": now,
}).Insert()
if err != nil {
return 0, err
}
return r.LastInsertId()
}
func (d *modelConfigDao) Update(ctx context.Context, data *entity.ModelConfig) error {
_, err := g.DB(consts.DbGroupSystem).Model(consts.TableNameModelConfig).Ctx(ctx).Data(g.Map{
"name": data.Name,
"model_type": data.ModelType,
"model_name": data.ModelName,
"endpoint_url": data.EndpointUrl,
"api_key": data.ApiKey,
"dimension": data.Dimension,
"extra": data.Extra,
"updated_at": gtime.Now().Format("Y-m-d H:i:s"),
}).Where("id", data.Id).Update()
if err != nil {
return err
}
_, _ = gcache.Remove(ctx, "model_config_GetOne_"+gconv.String(data.Id))
return nil
}
func (d *modelConfigDao) Delete(ctx context.Context, id int64) error {
_, err := g.DB(consts.DbGroupSystem).Model(consts.TableNameModelConfig).Ctx(ctx).Where("id", id).Delete()
if err != nil {
return err
}
_, _ = gcache.Remove(ctx, "model_config_GetOne_"+gconv.String(id))
return nil
}