@@ -43,7 +43,12 @@ void ParseGguf(const DownloadItem& ggufDownloadItem,
4343 }
4444
4545 auto url_obj = url_parser::FromUrlString (ggufDownloadItem.downloadUrl );
46- auto branch = url_obj.pathParams [3 ];
46+ if (url_obj.has_error ()) {
47+ CTL_WRN (" Error parsing url: " << ggufDownloadItem.downloadUrl );
48+ return ;
49+ }
50+
51+ auto branch = url_obj->pathParams [3 ];
4752 CTL_INF (" Adding model to modellist with branch: " << branch);
4853
4954 auto rel = file_manager_utils::ToRelativeCortexDataPath (yaml_name);
@@ -66,11 +71,10 @@ cpp::result<DownloadTask, std::string> GetDownloadTask(
6671 const std::string& modelId, const std::string& branch = " main" ) {
6772 url_parser::Url url = {
6873 .protocol = " https" ,
69- .host = ModelService:: kHuggingFaceHost ,
74+ .host = kHuggingFaceHost ,
7075 .pathParams = {" api" , " models" , " cortexso" , modelId, " tree" , branch}};
7176
7277 httplib::Client cli (url.GetProtocolAndHost ());
73- // TODO: namh add header here
7478 auto result = curl_utils::SimpleGetJson (url.ToFullPath ());
7579 if (result.has_error ()) {
7680 return cpp::fail (" Model " + modelId + " not found" );
@@ -89,7 +93,7 @@ cpp::result<DownloadTask, std::string> GetDownloadTask(
8993 }
9094 url_parser::Url download_url = {
9195 .protocol = " https" ,
92- .host = ModelService:: kHuggingFaceHost ,
96+ .host = kHuggingFaceHost ,
9397 .pathParams = {" cortexso" , modelId, " resolve" , branch, path}};
9498
9599 auto local_path = model_container_path / path;
@@ -221,21 +225,24 @@ std::optional<config::ModelConfig> ModelService::GetDownloadedModel(
221225cpp::result<DownloadTask, std::string> ModelService::HandleDownloadUrlAsync (
222226 const std::string& url, std::optional<std::string> temp_model_id) {
223227 auto url_obj = url_parser::FromUrlString (url);
228+ if (url_obj.has_error ()) {
229+ return cpp::fail (" Invalid url: " + url);
230+ }
224231
225- if (url_obj. host == kHuggingFaceHost ) {
226- if (url_obj. pathParams [2 ] == " blob" ) {
227- url_obj. pathParams [2 ] = " resolve" ;
232+ if (url_obj-> host == kHuggingFaceHost ) {
233+ if (url_obj-> pathParams [2 ] == " blob" ) {
234+ url_obj-> pathParams [2 ] = " resolve" ;
228235 }
229236 }
230- auto author{url_obj. pathParams [0 ]};
231- auto model_id{url_obj. pathParams [1 ]};
232- auto file_name{url_obj. pathParams .back ()};
237+ auto author{url_obj-> pathParams [0 ]};
238+ auto model_id{url_obj-> pathParams [1 ]};
239+ auto file_name{url_obj-> pathParams .back ()};
233240
234241 if (author == " cortexso" ) {
235242 return DownloadModelFromCortexsoAsync (model_id);
236243 }
237244
238- if (url_obj. pathParams .size () < 5 ) {
245+ if (url_obj-> pathParams .size () < 5 ) {
239246 return cpp::fail (" Invalid url: " + url);
240247 }
241248
@@ -255,7 +262,7 @@ cpp::result<DownloadTask, std::string> ModelService::HandleDownloadUrlAsync(
255262 }
256263
257264 auto local_path{file_manager_utils::GetModelsContainerPath () /
258- " huggingface.co " / author / model_id / file_name};
265+ kHuggingFaceHost / author / model_id / file_name};
259266
260267 try {
261268 std::filesystem::create_directories (local_path.parent_path ());
@@ -265,7 +272,7 @@ cpp::result<DownloadTask, std::string> ModelService::HandleDownloadUrlAsync(
265272 std::filesystem::create_directories (local_path.parent_path ());
266273 }
267274
268- auto download_url = url_parser::FromUrl (url_obj);
275+ auto download_url = url_parser::FromUrl (url_obj. value () );
269276 // this assume that the model being downloaded is a single gguf file
270277 auto downloadTask{DownloadTask{.id = model_id,
271278 .type = DownloadType::Model,
@@ -287,22 +294,25 @@ cpp::result<DownloadTask, std::string> ModelService::HandleDownloadUrlAsync(
287294cpp::result<std::string, std::string> ModelService::HandleUrl (
288295 const std::string& url) {
289296 auto url_obj = url_parser::FromUrlString (url);
297+ if (url_obj.has_error ()) {
298+ return cpp::fail (" Invalid url: " + url);
299+ }
290300
291- if (url_obj. host == kHuggingFaceHost ) {
292- if (url_obj. pathParams [2 ] == " blob" ) {
293- url_obj. pathParams [2 ] = " resolve" ;
301+ if (url_obj-> host == kHuggingFaceHost ) {
302+ if (url_obj-> pathParams [2 ] == " blob" ) {
303+ url_obj-> pathParams [2 ] = " resolve" ;
294304 }
295305 }
296- auto author{url_obj. pathParams [0 ]};
297- auto model_id{url_obj. pathParams [1 ]};
298- auto file_name{url_obj. pathParams .back ()};
306+ auto author{url_obj-> pathParams [0 ]};
307+ auto model_id{url_obj-> pathParams [1 ]};
308+ auto file_name{url_obj-> pathParams .back ()};
299309
300310 if (author == " cortexso" ) {
301311 return DownloadModelFromCortexso (model_id);
302312 }
303313
304- if (url_obj. pathParams .size () < 5 ) {
305- if (url_obj. pathParams .size () < 2 ) {
314+ if (url_obj-> pathParams .size () < 5 ) {
315+ if (url_obj-> pathParams .size () < 2 ) {
306316 return cpp::fail (" Invalid url: " + url);
307317 }
308318 return DownloadHuggingFaceGgufModel (author, model_id, std::nullopt );
@@ -320,7 +330,7 @@ cpp::result<std::string, std::string> ModelService::HandleUrl(
320330 }
321331
322332 auto local_path{file_manager_utils::GetModelsContainerPath () /
323- " huggingface.co " / author / model_id / file_name};
333+ kHuggingFaceHost / author / model_id / file_name};
324334
325335 try {
326336 std::filesystem::create_directories (local_path.parent_path ());
@@ -330,7 +340,7 @@ cpp::result<std::string, std::string> ModelService::HandleUrl(
330340 std::filesystem::create_directories (local_path.parent_path ());
331341 }
332342
333- auto download_url = url_parser::FromUrl (url_obj);
343+ auto download_url = url_parser::FromUrl (url_obj. value () );
334344 // this assume that the model being downloaded is a single gguf file
335345 auto downloadTask{DownloadTask{.id = model_id,
336346 .type = DownloadType::Model,
0 commit comments