@@ -154,7 +154,8 @@ ModelSourceService::GetModelSources() {
154154 std::unordered_map<std::string, ModelSource> ms;
155155 for (auto const & m : models) {
156156 auto meta_json = json_helper::ParseJsonString (m.metadata );
157- ms[m.model_source ].models .push_back ({m.model , meta_json[" size" ].asUInt64 ()});
157+ ms[m.model_source ].models .push_back (
158+ {m.model , meta_json[" size" ].asUInt64 ()});
158159 meta_json.removeMember (" size" );
159160 if (ms[m.model_source ].metadata .empty ()) {
160161 ms[m.model_source ].metadata = json_helper::DumpJsonString (meta_json);
@@ -165,6 +166,28 @@ ModelSourceService::GetModelSources() {
165166 return ms;
166167}
167168
169+ cpp::result<ModelSource, std::string> ModelSourceService::GetModelSource (
170+ const std::string& src) {
171+ auto res = db_service_->GetModels (src);
172+ if (res.has_error ()) {
173+ return cpp::fail (res.error ());
174+ }
175+
176+ auto & models = res.value ();
177+ ModelSource ms;
178+ for (auto const & m : models) {
179+ auto meta_json = json_helper::ParseJsonString (m.metadata );
180+ ms.models .push_back ({m.model , meta_json[" size" ].asUInt64 ()});
181+ meta_json.removeMember (" size" );
182+ if (ms.metadata .empty ()) {
183+ ms.metadata = json_helper::DumpJsonString (meta_json);
184+ }
185+ ms.id = m.model_source ;
186+ LOG_INFO << m.model ;
187+ }
188+ return ms;
189+ }
190+
168191cpp::result<bool , std::string> ModelSourceService::AddHfOrg (
169192 const std::string& model_source, const std::string& author) {
170193 auto res = curl_utils::SimpleGet (" https://huggingface.co/api/models?author=" +
@@ -196,8 +219,8 @@ cpp::result<bool, std::string> ModelSourceService::AddHfRepo(
196219 const std::string& model_name) {
197220 // Get models from db
198221
199- auto model_list_before =
200- db_service_-> GetModels (model_source) .value_or (std::vector<std::string >{});
222+ auto model_list_before = db_service_-> GetModels (model_source)
223+ .value_or (std::vector<cortex::db::ModelEntry >{});
201224 std::unordered_set<std::string> updated_model_list;
202225 auto add_res = AddRepoSiblings (model_source, author, model_name);
203226 if (add_res.has_error ()) {
@@ -206,8 +229,8 @@ cpp::result<bool, std::string> ModelSourceService::AddHfRepo(
206229 updated_model_list = add_res.value ();
207230 }
208231 for (auto const & mid : model_list_before) {
209- if (updated_model_list.find (mid) == updated_model_list.end ()) {
210- if (auto del_res = db_service_->DeleteModelEntry (mid);
232+ if (updated_model_list.find (mid. model ) == updated_model_list.end ()) {
233+ if (auto del_res = db_service_->DeleteModelEntry (mid. model );
211234 del_res.has_error ()) {
212235 CTL_INF (del_res.error ());
213236 }
@@ -331,16 +354,22 @@ cpp::result<bool, std::string> ModelSourceService::AddCortexsoRepo(
331354 if (repo_info.has_error ()) {
332355 return cpp::fail (repo_info.error ());
333356 }
357+
358+ auto readme = hu::GetReadMe (author, model_name);
359+ std::string desc;
360+ if (!readme.has_error ()) {
361+ desc = readme.value ();
362+ }
334363 // Get models from db
335364
336- auto model_list_before =
337- db_service_-> GetModels (model_source) .value_or (std::vector<std::string >{});
365+ auto model_list_before = db_service_-> GetModels (model_source)
366+ .value_or (std::vector<cortex::db::ModelEntry >{});
338367 std::unordered_set<std::string> updated_model_list;
339368
340369 for (auto const & [branch, _] : branches.value ()) {
341370 CTL_INF (branch);
342371 auto add_res = AddCortexsoRepoBranch (model_source, author, model_name,
343- branch, repo_info->metadata )
372+ branch, repo_info->metadata , desc )
344373 .value_or (std::unordered_set<std::string>{});
345374 for (auto const & a : add_res) {
346375 updated_model_list.insert (a);
@@ -349,8 +378,8 @@ cpp::result<bool, std::string> ModelSourceService::AddCortexsoRepo(
349378
350379 // Clean up
351380 for (auto const & mid : model_list_before) {
352- if (updated_model_list.find (mid) == updated_model_list.end ()) {
353- if (auto del_res = db_service_->DeleteModelEntry (mid);
381+ if (updated_model_list.find (mid. model ) == updated_model_list.end ()) {
382+ if (auto del_res = db_service_->DeleteModelEntry (mid. model );
354383 del_res.has_error ()) {
355384 CTL_INF (del_res.error ());
356385 }
@@ -364,7 +393,8 @@ ModelSourceService::AddCortexsoRepoBranch(const std::string& model_source,
364393 const std::string& author,
365394 const std::string& model_name,
366395 const std::string& branch,
367- const std::string& metadata) {
396+ const std::string& metadata,
397+ const std::string& desc) {
368398 std::unordered_set<std::string> res;
369399
370400 url_parser::Url url = {
@@ -393,6 +423,7 @@ ModelSourceService::AddCortexsoRepoBranch(const std::string& model_source,
393423 } else {
394424 auto meta_json = json_helper::ParseJsonString (metadata);
395425 meta_json[" size" ] = model_size;
426+ meta_json[" description" ] = desc;
396427 std::string model_id = model_name + " :" + branch;
397428 cortex::db::ModelEntry e = {
398429 .model = model_id,
0 commit comments