Skip to content

Commit fbd04ae

Browse files
committed
fix(bundle): create model subdirectory upfront for unpack operations
1 parent 7a4391f commit fbd04ae

1 file changed

Lines changed: 6 additions & 25 deletions

File tree

pkg/distribution/internal/bundle/unpack.go

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ func Unpack(dir string, model types.Model) (*Bundle, error) {
1818
dir: dir,
1919
}
2020

21+
// Create model subdirectory upfront - all unpack operations will use it
22+
modelDir := filepath.Join(bundle.dir, ModelSubdir)
23+
if err := os.MkdirAll(modelDir, 0755); err != nil {
24+
return nil, fmt.Errorf("create model directory: %w", err)
25+
}
26+
2127
// Inspect layers to determine what to unpack
2228
modelFormat := detectModelFormat(model)
2329

@@ -102,11 +108,6 @@ func unpackRuntimeConfig(bundle *Bundle, mdl types.Model) error {
102108
if err != nil {
103109
return err
104110
}
105-
// Create model subdirectory if it doesn't exist
106-
modelDir := filepath.Join(bundle.dir, ModelSubdir)
107-
if err := os.MkdirAll(modelDir, 0755); err != nil {
108-
return fmt.Errorf("create model directory: %w", err)
109-
}
110111

111112
// Runtime config stays at bundle root
112113
f, err := os.Create(filepath.Join(bundle.dir, "config.json"))
@@ -127,11 +128,7 @@ func unpackGGUFs(bundle *Bundle, mdl types.Model) error {
127128
return fmt.Errorf("get GGUF files for model: %w", err)
128129
}
129130

130-
// Ensure model directory exists
131131
modelDir := filepath.Join(bundle.dir, ModelSubdir)
132-
if err := os.MkdirAll(modelDir, 0755); err != nil {
133-
return fmt.Errorf("create model directory: %w", err)
134-
}
135132

136133
if len(ggufPaths) == 1 {
137134
if err := unpackFile(filepath.Join(modelDir, "model.gguf"), ggufPaths[0]); err != nil {
@@ -158,11 +155,7 @@ func unpackMultiModalProjector(bundle *Bundle, mdl types.Model) error {
158155
return nil // no such file
159156
}
160157

161-
// Ensure model directory exists
162158
modelDir := filepath.Join(bundle.dir, ModelSubdir)
163-
if err := os.MkdirAll(modelDir, 0755); err != nil {
164-
return fmt.Errorf("create model directory: %w", err)
165-
}
166159

167160
if err = unpackFile(filepath.Join(modelDir, "model.mmproj"), path); err != nil {
168161
return err
@@ -177,11 +170,7 @@ func unpackTemplate(bundle *Bundle, mdl types.Model) error {
177170
return nil // no such file
178171
}
179172

180-
// Ensure model directory exists
181173
modelDir := filepath.Join(bundle.dir, ModelSubdir)
182-
if err := os.MkdirAll(modelDir, 0755); err != nil {
183-
return fmt.Errorf("create model directory: %w", err)
184-
}
185174

186175
if err = unpackFile(filepath.Join(modelDir, "template.jinja"), path); err != nil {
187176
return err
@@ -200,11 +189,7 @@ func unpackSafetensors(bundle *Bundle, mdl types.Model) error {
200189
return fmt.Errorf("no safetensors files found")
201190
}
202191

203-
// Ensure model directory exists
204192
modelDir := filepath.Join(bundle.dir, ModelSubdir)
205-
if err := os.MkdirAll(modelDir, 0755); err != nil {
206-
return fmt.Errorf("create model directory: %w", err)
207-
}
208193

209194
if len(safetensorsPaths) == 1 {
210195
if err := unpackFile(filepath.Join(modelDir, "model.safetensors"), safetensorsPaths[0]); err != nil {
@@ -234,11 +219,7 @@ func unpackConfigArchive(bundle *Bundle, mdl types.Model) error {
234219
return fmt.Errorf("get config archive path: %w", err)
235220
}
236221

237-
// Ensure model directory exists
238222
modelDir := filepath.Join(bundle.dir, ModelSubdir)
239-
if err := os.MkdirAll(modelDir, 0755); err != nil {
240-
return fmt.Errorf("create model directory: %w", err)
241-
}
242223

243224
// Extract the tar archive into the model subdirectory
244225
// This prevents config.json conflicts with the runtime config at bundle root

0 commit comments

Comments
 (0)