diff --git a/src/cli/service/ai/model_registry.cc b/src/cli/service/ai/model_registry.cc new file mode 100644 index 00000000..e1e2ea8f --- /dev/null +++ b/src/cli/service/ai/model_registry.cc @@ -0,0 +1,48 @@ +#include "cli/service/ai/model_registry.h" + +#include + +namespace yaze { +namespace cli { + +ModelRegistry& ModelRegistry::GetInstance() { + static ModelRegistry instance; + return instance; +} + +void ModelRegistry::RegisterService(std::shared_ptr service) { + std::lock_guard lock(mutex_); + services_.push_back(service); +} + +void ModelRegistry::ClearServices() { + std::lock_guard lock(mutex_); + services_.clear(); +} + +absl::StatusOr> ModelRegistry::ListAllModels() { + std::lock_guard lock(mutex_); + std::vector all_models; + + for (const auto& service : services_) { + auto models_or = service->ListAvailableModels(); + if (models_or.ok()) { + auto& models = *models_or; + all_models.insert(all_models.end(), + std::make_move_iterator(models.begin()), + std::make_move_iterator(models.end())); + } + } + + // Sort by name + std::sort(all_models.begin(), all_models.end(), + [](const ModelInfo& a, const ModelInfo& b) { + return a.name < b.name; + }); + + return all_models; +} + +} // namespace cli +} // namespace yaze + diff --git a/src/cli/service/ai/model_registry.h b/src/cli/service/ai/model_registry.h new file mode 100644 index 00000000..c4afaad1 --- /dev/null +++ b/src/cli/service/ai/model_registry.h @@ -0,0 +1,43 @@ +#ifndef YAZE_SRC_CLI_SERVICE_AI_MODEL_REGISTRY_H_ +#define YAZE_SRC_CLI_SERVICE_AI_MODEL_REGISTRY_H_ + +#include +#include +#include +#include + +#include "absl/status/statusor.h" +#include "cli/service/ai/ai_service.h" +#include "cli/service/ai/common.h" + +namespace yaze { +namespace cli { + +class ModelRegistry { + public: + static ModelRegistry& GetInstance(); + + // Register a service instance to be queried for models + void RegisterService(std::shared_ptr service); + + // Clear all registered services + void ClearServices(); + + // List models from all registered services + absl::StatusOr> ListAllModels(); + + private: + ModelRegistry() = default; + ~ModelRegistry() = default; + ModelRegistry(const ModelRegistry&) = delete; + ModelRegistry& operator=(const ModelRegistry&) = delete; + + std::vector> services_; + std::mutex mutex_; +}; + +} // namespace cli +} // namespace yaze + +#endif // YAZE_SRC_CLI_SERVICE_AI_MODEL_REGISTRY_H_ +