yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
model_registry.cc
Go to the documentation of this file.
2
3#include <algorithm>
4#include <chrono>
5
6namespace {
7
8constexpr std::chrono::seconds kModelCacheTtl(30);
9
10} // namespace
11
12namespace yaze {
13namespace cli {
14
16 static ModelRegistry instance;
17 return instance;
18}
19
20void ModelRegistry::RegisterService(std::shared_ptr<AIService> service) {
21 std::lock_guard<std::mutex> lock(mutex_);
22 services_.push_back(service);
24}
25
27 std::lock_guard<std::mutex> lock(mutex_);
28 services_.clear();
30}
31
36
37absl::StatusOr<std::vector<ModelInfo>> ModelRegistry::ListAllModels(
38 bool force_refresh) {
39 std::lock_guard<std::mutex> lock(mutex_);
40 const auto now = std::chrono::steady_clock::now();
41 if (!force_refresh && cache_valid_ &&
42 (now - cache_timestamp_) < kModelCacheTtl) {
43 return cached_models_;
44 }
45 std::vector<ModelInfo> all_models;
46
47 for (const auto& service : services_) {
48 auto models_or = service->ListAvailableModels();
49 if (models_or.ok()) {
50 auto& models = *models_or;
51 all_models.insert(all_models.end(),
52 std::make_move_iterator(models.begin()),
53 std::make_move_iterator(models.end()));
54 }
55 }
56
57 // Sort by name
58 std::sort(
59 all_models.begin(), all_models.end(),
60 [](const ModelInfo& a, const ModelInfo& b) { return a.name < b.name; });
61
62 for (auto& model : all_models) {
63 if (model.display_name.empty()) {
64 model.display_name = model.name;
65 }
66 }
67
68 cached_models_ = all_models;
69 cache_timestamp_ = now;
70 cache_valid_ = true;
71
72 return all_models;
73}
74
75} // namespace cli
76} // namespace yaze
static ModelRegistry & GetInstance()
void RegisterService(std::shared_ptr< AIService > service)
std::vector< ModelInfo > cached_models_
std::chrono::steady_clock::time_point cache_timestamp_
absl::StatusOr< std::vector< ModelInfo > > ListAllModels(bool force_refresh=false)
std::vector< std::shared_ptr< AIService > > services_
constexpr std::chrono::seconds kModelCacheTtl(30)