fetcher_kimi.go

v0.6.2
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/kimi"
8
)
9
10
type kimiFetcher struct {
11
	apiKey  string
12
	baseURL string
13
	provKey string
14
}
15
16
func (f kimiFetcher) ProviderKey() string { return f.provKey }
17
18
func (f kimiFetcher) FetchAndCategorize(cdb *cache.DB) (CategorizedResult, error) {
19
	var models []kimi.Model
20
21
	// Try cache.
22
	if cdb != nil {
23
		if data, ok := cdb.GetModels(f.provKey); ok {
24
			if json.Unmarshal(data, &models) != nil {
25
				models = nil
26
			}
27
		}
28
	}
29
30
	// Fetch from API on cache miss.
31
	if models == nil {
32
		var err error
33
		models, err = kimi.ListModels(f.baseURL, f.apiKey)
34
		if err != nil {
35
			return CategorizedResult{}, err
36
		}
37
		saveCacheModels(cdb, f.provKey, models)
38
	}
39
40
	families, grouped := kimi.CategorizeModels(models)
41
	items := make(map[string][]PickerItem)
42
	for fam, kms := range grouped {
43
		for _, km := range kms {
44
			items[fam] = append(items[fam], PickerItem{
45
				ID:            km.ID,
46
				Name:          km.GetName(),
47
				ContextLength: km.ContextLength,
48
			})
49
		}
50
	}
51
52
	result := CategorizedResult{Families: families, Items: items}
53
	prependRecentModels(cdb, f.provKey, &result)
54
55
	return result, nil
56
}
57

Source Files