@@ -674,36 +674,27 @@ class LlamaData {
674674    }
675675
676676    int  github_dl (const  std::string & model, const  std::string & bn) {
677-         std::string repository = model;
678-         std::string branch     = " main"  ;
679-         size_t        at_pos     = model.find (' @'  );
677+         std::string   repository = model;
678+         std::string   branch     = " main"  ;
679+         const   size_t  at_pos     = model.find (' @'  );
680680        if  (at_pos != std::string::npos) {
681681            repository = model.substr (0 , at_pos);
682682            branch     = model.substr (at_pos + 1 );
683683        }
684684
685-         std::vector<std::string> repo_parts;
686-         size_t                    start = 0 ;
687-         for  (size_t  end = 0 ; (end = repository.find (' /'  , start)) != std::string::npos; start = end + 1 ) {
688-             repo_parts.push_back (repository.substr (start, end - start));
689-         }
690- 
691-         repo_parts.push_back (repository.substr (start));
685+         const  std::vector<std::string> repo_parts = string_split (repository, " /"  );
692686        if  (repo_parts.size () < 3 ) {
693687            printe (" Invalid GitHub repository format\n "  );
694688            return  1 ;
695689        }
696690
697-         const  std::string org          = repo_parts[0 ];
698-         const  std::string project      = repo_parts[1 ];
699-         std::string       project_path = repo_parts[ 2 ] ;
700-         for  (size_t  i = 3 ; i < repo_parts.size (); ++i) {
701-             project_path  += " /"   + repo_parts[i];
691+         const  std::string &  org          = repo_parts[0 ];
692+         const  std::string &  project      = repo_parts[1 ];
693+         std::string         url          =  " https://raw.githubusercontent.com/ "  + org +  " / "  + project +  " / "  + branch ;
694+         for  (size_t  i = 2 ; i < repo_parts.size (); ++i) {
695+             url  += " /"   + repo_parts[i];
702696        }
703697
704-         const  std::string url =
705-             " https://raw.githubusercontent.com/"   + org + " /"   + project + " /"   + branch + " /"   + project_path;
706- 
707698        return  download (url, bn, true );
708699    }
709700
@@ -735,19 +726,20 @@ class LlamaData {
735726        }
736727
737728        const  std::string bn = basename (model_);
738-         if  (string_starts_with (model_, " hf://"  ) || string_starts_with (model_, " huggingface://"  )) {
739-             rm_until_substring (model_, " ://"  );
740-             ret = huggingface_dl (model_, bn);
741-         } else  if  (string_starts_with (model_, " hf.co/"  )) {
729+         if  (string_starts_with (model_, " hf://"  ) || string_starts_with (model_, " huggingface://"  ) ||
730+             string_starts_with (model_, " hf.co/"  )) {
742731            rm_until_substring (model_, " hf.co/"  );
732+             rm_until_substring (model_, " ://"  );
743733            ret = huggingface_dl (model_, bn);
744-         } else  if  (string_starts_with (model_, " https://"  ) || string_starts_with (model_, " http://"  )) {
734+         } else  if  ((string_starts_with (model_, " https://"  ) || string_starts_with (model_, " http://"  )) &&
735+                    !string_starts_with (model_, " https://ollama.com/library/"  )) {
745736            ret = download (model_, bn, true );
746737        } else  if  (string_starts_with (model_, " github:"  ) || string_starts_with (model_, " github://"  )) {
747-             rm_until_substring (model_, " github://"  );
748738            rm_until_substring (model_, " github:"  );
739+             rm_until_substring (model_, " ://"  );
749740            ret = github_dl (model_, bn);
750741        } else  {  //  ollama:// or nothing
742+             rm_until_substring (model_, " ollama.com/library/"  );
751743            rm_until_substring (model_, " ://"  );
752744            ret = ollama_dl (model_, bn);
753745        }
0 commit comments