fetcher_deepseek.go

v0.7.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/provider/deepseek"
8
)
9
10
type deepseekFetcher struct {
11
	apiKey string
12
}
13
14
func (f deepseekFetcher) ProviderKey() string { return "deepseek" }
15
16
func (f deepseekFetcher) FetchAndCategorize(cdb *cache.DB) (CategorizedResult, error) {
17
	var models []deepseek.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 = deepseek.ListModels(f.apiKey)
32
		if err != nil {
33
			return CategorizedResult{}, err
34
		}
35
		saveCacheModels(cdb, f.ProviderKey(), models)
36
	}
37
38
	categories, grouped := deepseek.CategorizeModels(models)
39
	items := make(map[string][]PickerItem)
40
	for cat, dms := range grouped {
41
		for _, dm := range dms {
42
			items[cat] = append(items[cat], PickerItem{ID: dm.ID, Name: dm.DisplayName()})
43
		}
44
	}
45
46
	result := CategorizedResult{
47
		Families:    categories,
48
		Items:       items,
49
		AllModelIDs: deepseek.AllModelIDs(models),
50
	}
51
52
	prependRecentModels(cdb, f.ProviderKey(), &result)
53
54
	return result, nil
55
}
56

Source Files