show ggml modelinfo through the show api

This commit is contained in:
Patrick Devine 2024-04-24 18:53:00 -07:00
parent 6e76348df7
commit 686178b6c5
3 changed files with 52 additions and 2 deletions

View File

@ -207,6 +207,7 @@ type ShowResponse struct {
System string `json:"system,omitempty"`
Details ModelDetails `json:"details,omitempty"`
Messages []Message `json:"messages,omitempty"`
ModelInfo string `json:"modelinfo,omitempty"`
}
type CopyRequest struct {

View File

@ -191,7 +191,7 @@ func (l Layer) size() (size uint64) {
type Tensor struct {
Name string `json:"name"`
Kind uint32 `json:"kind"`
Offset uint64 `json:"-"`
Offset uint64 `json:"offset"`
// Shape is the number of elements in each dimension
Shape []uint64 `json:"shape"`

View File

@ -721,12 +721,61 @@ func GetModelInfo(req api.ShowRequest) (*api.ShowResponse, error) {
if err != nil {
return nil, err
}
resp.Modelfile = mf
ggmlData, err := getGGMLData(model)
if err != nil {
return nil, err
}
resp.ModelInfo = string(ggmlData)
return resp, nil
}
func getGGMLData(model *Model) ([]byte, error) {
f, err := os.Open(model.ModelPath)
if err != nil {
return nil, err
}
ggml, _, err := llm.DecodeGGML(f)
if err != nil {
return nil, err
}
kv := ggml.KV()
var keys []string
for k := range kv {
keys = append(keys, k)
}
kvMap := make(map[string]any)
for _, k := range keys {
v := kv[k]
switch v.(type) {
case []interface{}:
if len(v.([]interface{})) > 5 {
kvMap[k] = []string{}
continue
}
}
kvMap[k] = v
}
ggmlMap := make(map[string]any)
ggmlMap["kv"] = kvMap
ggmlMap["tensors"] = ggml.Tensors()
ggmlJson, err := json.Marshal(ggmlMap)
if err != nil {
return nil, err
}
return ggmlJson, nil
}
func (s *Server) ListModelsHandler(c *gin.Context) {
models := make([]api.ModelResponse, 0)
manifestsPath, err := GetManifestPath()