mirror of
https://github.com/mudler/LocalAI.git
synced 2024-12-25 07:11:03 +00:00
fa5c98549a
* chore(refactor): track grpcProcess in the model structure This avoids to have to handle in two parts the data relative to the same model. It makes it easier to track and use mutex with. This also fixes races conditions while accessing to the model. Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * chore(tests): run protogen-go before starting aio tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * chore(tests): install protoc in aio tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
45 lines
740 B
Go
45 lines
740 B
Go
package model
|
|
|
|
import (
|
|
"sync"
|
|
|
|
grpc "github.com/mudler/LocalAI/pkg/grpc"
|
|
process "github.com/mudler/go-processmanager"
|
|
)
|
|
|
|
type Model struct {
|
|
ID string `json:"id"`
|
|
address string
|
|
client grpc.Backend
|
|
process *process.Process
|
|
sync.Mutex
|
|
}
|
|
|
|
func NewModel(ID, address string, process *process.Process) *Model {
|
|
return &Model{
|
|
ID: ID,
|
|
address: address,
|
|
process: process,
|
|
}
|
|
}
|
|
|
|
func (m *Model) Process() *process.Process {
|
|
return m.process
|
|
}
|
|
|
|
func (m *Model) GRPC(parallel bool, wd *WatchDog) grpc.Backend {
|
|
if m.client != nil {
|
|
return m.client
|
|
}
|
|
|
|
enableWD := false
|
|
if wd != nil {
|
|
enableWD = true
|
|
}
|
|
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
m.client = grpc.NewClient(m.address, parallel, wd, enableWD)
|
|
return m.client
|
|
}
|