Spaces:
Runtime error
Runtime error
| package cache | |
| import ( | |
| "encoding/json" | |
| "os" | |
| "path/filepath" | |
| "time" | |
| ) | |
| // ModelMetadata is the metadata.json persisted alongside a cached model. | |
| type ModelMetadata struct { | |
| Model string `json:"model"` | |
| Namespace string `json:"namespace"` | |
| Name string `json:"name"` | |
| Revision string `json:"revision"` | |
| Source string `json:"source"` | |
| CachedAt time.Time `json:"cached_at"` | |
| Extra map[string]any `json:"extra,omitempty"` | |
| } | |
| // WriteModelMetadata creates the model cache directory and writes metadata.json. | |
| func (l *Layout) WriteModelMetadata(meta ModelMetadata) (string, error) { | |
| dir := l.ModelDir(meta.Namespace, meta.Name) | |
| if err := os.MkdirAll(filepath.Join(dir, "snapshots"), 0o755); err != nil { | |
| return "", err | |
| } | |
| if meta.CachedAt.IsZero() { | |
| meta.CachedAt = time.Now().UTC() | |
| } | |
| b, err := json.MarshalIndent(meta, "", " ") | |
| if err != nil { | |
| return "", err | |
| } | |
| path := filepath.Join(dir, "metadata.json") | |
| if err := os.WriteFile(path, b, 0o644); err != nil { | |
| return "", err | |
| } | |
| return dir, nil | |
| } | |
| // ReadModelMetadata loads metadata.json for a cached model, if present. | |
| func (l *Layout) ReadModelMetadata(namespace, name string) (*ModelMetadata, error) { | |
| path := filepath.Join(l.ModelDir(namespace, name), "metadata.json") | |
| b, err := os.ReadFile(path) | |
| if err != nil { | |
| return nil, err | |
| } | |
| var m ModelMetadata | |
| if err := json.Unmarshal(b, &m); err != nil { | |
| return nil, err | |
| } | |
| return &m, nil | |
| } | |