mirror of
https://github.com/mudler/LocalAI.git
synced 2026-08-07 05:43:30 -04:00
fix: make sure to close on errors (#7521)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
1 parent
72621a1d1c
commit
5dde7e9ac6
2 files changed
+20
-5
No files matched your search
@@ -15,3 +15,9 @@ func allExcept(s string) GRPCProcessFilter {
|
|||||||
return id != s
|
return id != s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func only(s string) GRPCProcessFilter {
|
||||||
|
return func(id string, p *process.Process) bool {
|
||||||
|
return id == s
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -173,6 +173,10 @@ func (ml *ModelLoader) backendLoader(opts ...Option) (client grpc.Backend, err e
|
|||||||
|
|
||||||
model, err := ml.LoadModel(o.modelID, o.model, ml.grpcModel(backend, o))
|
model, err := ml.LoadModel(o.modelID, o.model, ml.grpcModel(backend, o))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err := ml.StopGRPC(only(o.modelID))
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Str("model", o.modelID).Msg("error stopping model")
|
||||||
|
}
|
||||||
log.Error().Str("modelID", o.modelID).Err(err).Msgf("Failed to load model %s with backend %s", o.modelID, o.backendString)
|
log.Error().Str("modelID", o.modelID).Err(err).Msgf("Failed to load model %s with backend %s", o.modelID, o.backendString)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -180,8 +184,8 @@ func (ml *ModelLoader) backendLoader(opts ...Option) (client grpc.Backend, err e
|
|||||||
return model.GRPC(o.parallelRequests, ml.wd), nil
|
return model.GRPC(o.parallelRequests, ml.wd), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ml *ModelLoader) stopActiveBackends(modelID string, singleActiveBackend bool) {
|
func (ml *ModelLoader) stopActiveBackends(modelID string) {
|
||||||
if !singleActiveBackend {
|
if !ml.singletonMode {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,15 +222,19 @@ func (ml *ModelLoader) Load(opts ...Option) (grpc.Backend, error) {
|
|||||||
// (avoid looping through all the backends)
|
// (avoid looping through all the backends)
|
||||||
if m := ml.CheckIsLoaded(o.modelID); m != nil {
|
if m := ml.CheckIsLoaded(o.modelID); m != nil {
|
||||||
log.Debug().Msgf("Model '%s' already loaded", o.modelID)
|
log.Debug().Msgf("Model '%s' already loaded", o.modelID)
|
||||||
|
|
||||||
return m.GRPC(o.parallelRequests, ml.wd), nil
|
return m.GRPC(o.parallelRequests, ml.wd), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
ml.stopActiveBackends(o.modelID, ml.singletonMode)
|
ml.stopActiveBackends(o.modelID)
|
||||||
|
|
||||||
// if a backend is defined, return the loader directly
|
// if a backend is defined, return the loader directly
|
||||||
if o.backendString != "" {
|
if o.backendString != "" {
|
||||||
return ml.backendLoader(opts...)
|
client, err := ml.backendLoader(opts...)
|
||||||
|
if err != nil {
|
||||||
|
ml.Close()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return client, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise scan for backends in the asset directory
|
// Otherwise scan for backends in the asset directory
|
||||||
@@ -242,6 +250,7 @@ func (ml *ModelLoader) Load(opts ...Option) (grpc.Backend, error) {
|
|||||||
|
|
||||||
if len(autoLoadBackends) == 0 {
|
if len(autoLoadBackends) == 0 {
|
||||||
log.Error().Msg("No backends found")
|
log.Error().Msg("No backends found")
|
||||||
|
ml.Close()
|
||||||
return nil, fmt.Errorf("no backends found")
|
return nil, fmt.Errorf("no backends found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user