@@ -23,7 +23,6 @@ import (
2323 "os"
2424 "path/filepath"
2525
26- retry "github.com/avast/retry-go/v4"
2726 modelspec "github.com/modelpack/model-spec/specs-go/v1"
2827 ocispec "github.com/opencontainers/image-spec/specs-go/v1"
2928 "github.com/sirupsen/logrus"
@@ -35,6 +34,7 @@ import (
3534 "github.com/modelpack/modctl/pkg/backend/processor"
3635 "github.com/modelpack/modctl/pkg/config"
3736 "github.com/modelpack/modctl/pkg/modelfile"
37+ "github.com/modelpack/modctl/pkg/retrypolicy"
3838 "github.com/modelpack/modctl/pkg/source"
3939)
4040
@@ -123,8 +123,8 @@ func (b *backend) Build(ctx context.Context, modelfilePath, workDir, target stri
123123
124124 var configDesc ocispec.Descriptor
125125 // Build the model config.
126- if err := retry .Do (func () error {
127- configDesc , err = builder .BuildConfig (ctx , config , hooks .NewHooks (
126+ if err := retrypolicy .Do (ctx , func (rctx context. Context ) error {
127+ configDesc , err = builder .BuildConfig (rctx , config , hooks .NewHooks (
128128 hooks .WithOnStart (func (name string , size int64 , reader io.Reader ) io.Reader {
129129 return pb .Add (internalpb .NormalizePrompt ("Building config" ), name , size , reader )
130130 }),
@@ -136,13 +136,17 @@ func (b *backend) Build(ctx context.Context, modelfilePath, workDir, target stri
136136 }),
137137 ))
138138 return err
139- }, append (defaultRetryOpts , retry .Context (ctx ))... ); err != nil {
139+ }, retrypolicy.DoOpts {
140+ FileSize : 0 , // config is small
141+ FileName : "config" ,
142+ Config : & cfg .RetryConfig ,
143+ }); err != nil {
140144 return fmt .Errorf ("failed to build model config: %w" , err )
141145 }
142146
143147 // Build the model manifest.
144- if err := retry .Do (func () error {
145- _ , err = builder .BuildManifest (ctx , layers , configDesc , manifestAnnotation (modelfile ), hooks .NewHooks (
148+ if err := retrypolicy .Do (ctx , func (rctx context. Context ) error {
149+ _ , err = builder .BuildManifest (rctx , layers , configDesc , manifestAnnotation (modelfile ), hooks .NewHooks (
146150 hooks .WithOnStart (func (name string , size int64 , reader io.Reader ) io.Reader {
147151 return pb .Add (internalpb .NormalizePrompt ("Building manifest" ), name , size , reader )
148152 }),
@@ -154,7 +158,11 @@ func (b *backend) Build(ctx context.Context, modelfilePath, workDir, target stri
154158 }),
155159 ))
156160 return err
157- }, append (defaultRetryOpts , retry .Context (ctx ))... ); err != nil {
161+ }, retrypolicy.DoOpts {
162+ FileSize : 0 , // manifest is small
163+ FileName : "manifest" ,
164+ Config : & cfg .RetryConfig ,
165+ }); err != nil {
158166 return fmt .Errorf ("failed to build model manifest: %w" , err )
159167 }
160168
@@ -204,7 +212,7 @@ func (b *backend) getProcessors(modelfile modelfile.Modelfile, cfg *config.Build
204212func (b * backend ) process (ctx context.Context , builder build.Builder , workDir string , pb * internalpb.ProgressBar , cfg * config.Build , processors ... processor.Processor ) ([]ocispec.Descriptor , error ) {
205213 descriptors := []ocispec.Descriptor {}
206214 for _ , p := range processors {
207- descs , err := p .Process (ctx , builder , workDir , processor .WithConcurrency (cfg .Concurrency ), processor .WithProgressTracker (pb ))
215+ descs , err := p .Process (ctx , builder , workDir , processor .WithConcurrency (cfg .Concurrency ), processor .WithProgressTracker (pb ), processor . WithRetryConfig ( cfg . RetryConfig ) )
208216 if err != nil {
209217 return nil , err
210218 }
0 commit comments