fetcher_nvidia.go

v0.6.1
Doc Versions Source
1
package tui
2
3
import (
4
	"encoding/json"
5
6
	"sourcecraft.dev/bigbes/claudio/cache"
7
	"sourcecraft.dev/bigbes/claudio/provider/nvidia"
8
)
9
10
type nvidiaFetcher struct {
11
	apiKey string
12
}
13
14
func (f nvidiaFetcher) ProviderKey() string { return "nvidia" }
15
16
func (f nvidiaFetcher) FetchAndCategorize(cdb *cache.DB) (CategorizedResult, error) {
17
	var models []nvidia.NIMModel
18
19
	// Try cache (apply post-cache filter).
20
	if cdb != nil {
21
		if data, ok := cdb.GetModels(f.ProviderKey()); ok {
22
			if json.Unmarshal(data, &models) != nil {
23
				models = nil
24
			} else {
25
				models = nvidia.FilterChatModels(models)
26
			}
27
		}
28
	}
29
30
	// Fetch from API on cache miss.
31
	if models == nil {
32
		var err error
33
		models, err = nvidia.ListModels(f.apiKey)
34
		if err != nil {
35
			return CategorizedResult{}, err
36
		}
37
		saveCacheModels(cdb, f.ProviderKey(), models)
38
	}
39
40
	categories, grouped := nvidia.CategorizeModels(models)
41
	items := make(map[string][]PickerItem)
42
	for cat, nms := range grouped {
43
		for _, nm := range nms {
44
			items[cat] = append(items[cat], PickerItem{ID: nm.ID, Name: nm.DisplayName()})
45
		}
46
	}
47
48
	result := CategorizedResult{
49
		Families: categories,
50
		Items:    items,
51
	}
52
53
	// Prepend "Recent" from provider-scoped table.
54
	prependRecentModels(cdb, f.ProviderKey(), &result)
55
56
	// Popular provider drill-down.
57
	provNames, provGrouped := nvidia.GroupPopularByProvider(models)
58
	provItems := make(map[string][]PickerItem)
59
	for prov, nms := range provGrouped {
60
		for _, nm := range nms {
61
			provItems[prov] = append(provItems[prov], PickerItem{ID: nm.ID, Name: nm.DisplayName()})
62
		}
63
	}
64
	result.PopularProviders = provNames
65
	result.PopularProviderModels = provItems
66
	result.AllModelIDs = nvidia.AllModelIDs(models)
67
68
	return result, nil
69
}
70

Source Files