mirror of
https://github.com/mudler/LocalAI.git
synced 2026-03-31 21:25:59 -04:00
* feat: add distributed mode (experimental) Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix data races, mutexes, transactions Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactorings Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fixups Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix events and tool stream in agent chat Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * use ginkgo Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(cron): compute correctly time boundaries avoiding re-triggering Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * enhancements, refactorings Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * do not flood of healthy checks Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * do not list obvious backends as text backends Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * tests fixups Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * refactoring and consolidation Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Drop redundant healthcheck Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * enhancements, refactorings Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package model
|
|
|
|
import "sync"
|
|
|
|
// ModelStore abstracts model tracking. Single-node mode uses an in-memory map;
|
|
// distributed mode backs this with PostgreSQL.
|
|
type ModelStore interface {
|
|
Get(id string) (*Model, bool)
|
|
Set(id string, m *Model)
|
|
Delete(id string)
|
|
Range(fn func(id string, m *Model) bool) // return false to stop
|
|
}
|
|
|
|
// InMemoryModelStore is the default ModelStore backed by a plain map.
|
|
type InMemoryModelStore struct {
|
|
mu sync.RWMutex
|
|
models map[string]*Model
|
|
}
|
|
|
|
func NewInMemoryModelStore() *InMemoryModelStore {
|
|
return &InMemoryModelStore{models: make(map[string]*Model)}
|
|
}
|
|
|
|
func (s *InMemoryModelStore) Get(id string) (*Model, bool) {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
m, ok := s.models[id]
|
|
return m, ok
|
|
}
|
|
|
|
func (s *InMemoryModelStore) Set(id string, m *Model) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.models[id] = m
|
|
}
|
|
|
|
func (s *InMemoryModelStore) Delete(id string) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
delete(s.models, id)
|
|
}
|
|
|
|
func (s *InMemoryModelStore) Range(fn func(string, *Model) bool) {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
for id, m := range s.models {
|
|
if !fn(id, m) {
|
|
return
|
|
}
|
|
}
|
|
}
|