Files
LocalAI/pkg/model/store.go
Ettore Di Giacinto 59108fbe32 feat: add distributed mode (#9124)
* 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>
2026-03-30 00:47:27 +02:00

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
}
}
}