mirror of
https://github.com/mudler/LocalAI.git
synced 2025-05-20 10:35:01 +00:00
fix: drop racy code, refactor and group API schema (#931)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
parent
28db83e17b
commit
cc060a283d
55 changed files with 239 additions and 317 deletions
52
pkg/grpc/base/singlethread.go
Normal file
52
pkg/grpc/base/singlethread.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
package base
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
pb "github.com/go-skynet/LocalAI/pkg/grpc/proto"
|
||||
)
|
||||
|
||||
// SingleThread are backends that does not support multiple requests.
|
||||
// There will be only one request being served at the time.
|
||||
// This is useful for models that are not thread safe and cannot run
|
||||
// multiple requests at the same time.
|
||||
type SingleThread struct {
|
||||
Base
|
||||
backendBusy sync.Mutex
|
||||
}
|
||||
|
||||
// Locking returns true if the backend needs to lock resources
|
||||
func (llm *SingleThread) Locking() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (llm *SingleThread) Lock() {
|
||||
llm.backendBusy.Lock()
|
||||
}
|
||||
|
||||
func (llm *SingleThread) Unlock() {
|
||||
llm.backendBusy.Unlock()
|
||||
}
|
||||
|
||||
func (llm *SingleThread) Busy() bool {
|
||||
r := llm.backendBusy.TryLock()
|
||||
if r {
|
||||
llm.backendBusy.Unlock()
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
// backends may wish to call this to capture the gopsutil info, then enhance with additional memory usage details?
|
||||
func (llm *SingleThread) Status() (pb.StatusResponse, error) {
|
||||
mud := memoryUsage()
|
||||
|
||||
state := pb.StatusResponse_READY
|
||||
if llm.Busy() {
|
||||
state = pb.StatusResponse_BUSY
|
||||
}
|
||||
|
||||
return pb.StatusResponse{
|
||||
State: state,
|
||||
Memory: mud,
|
||||
}, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue