@@ -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