Skip to content

Commit 703344e

Browse files
committed
feat: simplify safetensors model creation by removing config archive dependency
1 parent 902cb3c commit 703344e

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

cmd/mdltool/main.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -283,16 +283,21 @@ func cmdPackage(args []string) int {
283283
// Create builder based on model type
284284
var b *builder.Builder
285285
if isSafetensors {
286+
fmt.Println("Creating safetensors model")
287+
b, err = builder.FromSafetensors(safetensorsPaths)
288+
if err != nil {
289+
fmt.Fprintf(os.Stderr, "Error creating model from safetensors: %v\n", err)
290+
return 1
291+
}
292+
293+
// Add config archive if provided
286294
if configArchive != "" {
287-
fmt.Printf("Creating safetensors model with config archive: %s\n", configArchive)
288-
b, err = builder.FromSafetensorsWithConfig(safetensorsPaths, configArchive)
295+
fmt.Printf("Adding config archive: %s\n", configArchive)
296+
b, err = b.WithConfigArchive(configArchive)
289297
if err != nil {
290-
fmt.Fprintf(os.Stderr, "Error creating model from safetensors with config: %v\n", err)
298+
fmt.Fprintf(os.Stderr, "Error adding config archive: %v\n", err)
291299
return 1
292300
}
293-
} else {
294-
fmt.Fprintf(os.Stderr, "Error: config archive is required for safetensors models\n")
295-
return 1
296301
}
297302
} else {
298303
b, err = builder.FromGGUF(source)

pkg/distribution/builder/builder.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ func FromGGUF(path string) (*Builder, error) {
2828
}, nil
2929
}
3030

31-
// FromSafetensorsWithConfig returns a *Builder that builds model artifacts from safetensors files with a config archive
32-
func FromSafetensorsWithConfig(safetensorsPaths []string, configArchivePath string) (*Builder, error) {
33-
mdl, err := safetensors.NewModelWithConfigArchive(safetensorsPaths, configArchivePath)
31+
// FromSafetensors returns a *Builder that builds model artifacts from safetensors files
32+
func FromSafetensors(safetensorsPaths []string) (*Builder, error) {
33+
mdl, err := safetensors.NewModel(safetensorsPaths)
3434
if err != nil {
3535
return nil, err
3636
}
@@ -80,6 +80,19 @@ func (b *Builder) WithChatTemplateFile(path string) (*Builder, error) {
8080

8181
// WithConfigArchive adds a config archive (tar) file to the artifact
8282
func (b *Builder) WithConfigArchive(path string) (*Builder, error) {
83+
// Check if config archive already exists
84+
layers, err := b.model.Layers()
85+
if err != nil {
86+
return nil, fmt.Errorf("get model layers: %w", err)
87+
}
88+
89+
for _, layer := range layers {
90+
mediaType, err := layer.MediaType()
91+
if err == nil && mediaType == types.MediaTypeVLLMConfigArchive {
92+
return nil, fmt.Errorf("model already has a config archive layer")
93+
}
94+
}
95+
8396
configLayer, err := partial.NewLayer(path, types.MediaTypeVLLMConfigArchive)
8497
if err != nil {
8598
return nil, fmt.Errorf("config archive layer from %q: %w", path, err)

0 commit comments

Comments
 (0)