fetcher_lmstudio.go

v0.5.0
Doc Versions Source
1
package tui
2
3
import (
4
	"encoding/json"
5
6
	"sourcecraft.dev/bigbes/claudio/cache"
7
	"sourcecraft.dev/bigbes/claudio/lmstudio"
8
)
9
10
type lmstudioFetcher struct {
11
	baseURL string
12
}
13
14
func (f lmstudioFetcher) ProviderKey() string { return "lmstudio" }
15
16
func (f lmstudioFetcher) FetchAndCategorize(cdb *cache.DB) (CategorizedResult, error) {
17
	var models []lmstudio.Model
18
19
	// Try cache.
20
	if cdb != nil {
21
		if data, ok := cdb.GetModels(f.ProviderKey()); ok {
22
			if json.Unmarshal(data, &models) != nil {
23
				models = nil
24
			}
25
		}
26
	}
27
28
	// Fetch from API on cache miss.
29
	if models == nil {
30
		var err error
31
		models, err = lmstudio.ListModels(f.baseURL)
32
		if err != nil {
33
			return CategorizedResult{}, err
34
		}
35
		saveCacheModels(cdb, f.ProviderKey(), models)
36
	}
37
38
	families := []string{"Models"}
39
	items := make(map[string][]PickerItem)
40
	for _, lm := range models {
41
		items["Models"] = append(items["Models"], PickerItem{ID: lm.ID, Name: lm.DisplayName()})
42
	}
43
44
	result := CategorizedResult{Families: families, Items: items}
45
	prependRecentModels(cdb, f.ProviderKey(), &result)
46
47
	return result, nil
48
}
49

Source Files