mirror of
https://github.com/mudler/LocalAI.git
synced 2025-12-30 01:50:23 -05:00
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package services
|
|
|
|
import (
|
|
"github.com/mudler/LocalAI/core/config"
|
|
"github.com/mudler/LocalAI/pkg/xsync"
|
|
)
|
|
|
|
type GalleryOp[T any] struct {
|
|
ID string
|
|
GalleryElementName string
|
|
Delete bool
|
|
|
|
Req T
|
|
Galleries []config.Gallery
|
|
BackendGalleries []config.Gallery
|
|
}
|
|
|
|
type GalleryOpStatus struct {
|
|
Deletion bool `json:"deletion"` // Deletion is true if the operation is a deletion
|
|
FileName string `json:"file_name"`
|
|
Error error `json:"error"`
|
|
Processed bool `json:"processed"`
|
|
Message string `json:"message"`
|
|
Progress float64 `json:"progress"`
|
|
TotalFileSize string `json:"file_size"`
|
|
DownloadedFileSize string `json:"downloaded_size"`
|
|
GalleryElementName string `json:"gallery_element_name"`
|
|
}
|
|
|
|
type OpCache struct {
|
|
status *xsync.SyncedMap[string, string]
|
|
galleryService *GalleryService
|
|
}
|
|
|
|
func NewOpCache(galleryService *GalleryService) *OpCache {
|
|
return &OpCache{
|
|
status: xsync.NewSyncedMap[string, string](),
|
|
galleryService: galleryService,
|
|
}
|
|
}
|
|
|
|
func (m *OpCache) Set(key string, value string) {
|
|
m.status.Set(key, value)
|
|
}
|
|
|
|
func (m *OpCache) Get(key string) string {
|
|
return m.status.Get(key)
|
|
}
|
|
|
|
func (m *OpCache) DeleteUUID(uuid string) {
|
|
for _, k := range m.status.Keys() {
|
|
if m.status.Get(k) == uuid {
|
|
m.status.Delete(k)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (m *OpCache) Map() map[string]string {
|
|
return m.status.Map()
|
|
}
|
|
|
|
func (m *OpCache) Exists(key string) bool {
|
|
return m.status.Exists(key)
|
|
}
|
|
|
|
func (m *OpCache) GetStatus() (map[string]string, map[string]string) {
|
|
processingModelsData := m.Map()
|
|
|
|
taskTypes := map[string]string{}
|
|
|
|
for k, v := range processingModelsData {
|
|
status := m.galleryService.GetStatus(v)
|
|
taskTypes[k] = "Installation"
|
|
if status != nil && status.Deletion {
|
|
taskTypes[k] = "Deletion"
|
|
} else if status == nil {
|
|
taskTypes[k] = "Waiting"
|
|
}
|
|
}
|
|
|
|
return processingModelsData, taskTypes
|
|
}
|