88import Foundation
99
1010public struct HubApi {
11- let endpoint = " https://huggingface.co/api "
1211 var downloadBase : URL
13- var hfToken : String ? = nil
12+ var hfToken : String ?
13+ var endpoint : String
1414
1515 public typealias RepoType = Hub . RepoType
1616 public typealias Repo = Hub . Repo
1717
18- public init ( downloadBase: URL ? = nil , hfToken: String ? = nil ) {
18+ public init ( downloadBase: URL ? = nil , hfToken: String ? = nil , endpoint : String = " https://huggingface.co " ) {
1919 if downloadBase == nil {
2020 let documents = FileManager . default. urls ( for: . documentDirectory, in: . userDomainMask) . first!
2121 self . downloadBase = documents. appending ( component: " huggingface " )
2222 } else {
2323 self . downloadBase = downloadBase!
2424 }
2525 self . hfToken = hfToken
26+ self . endpoint = endpoint
2627 }
2728
2829 static let shared = HubApi ( )
@@ -51,15 +52,15 @@ public extension HubApi {
5152 switch response. statusCode {
5253 case 200 ..< 300 : break
5354 case 400 ..< 500 : throw Hub . HubClientError. authorizationRequired
54- default : throw Hub . HubClientError. httpStatusCode ( response. statusCode)
55+ default : throw Hub . HubClientError. httpStatusCode ( response. statusCode)
5556 }
5657
5758 return ( data, response)
5859 }
5960
6061 func getFilenames( from repo: Repo , matching globs: [ String ] = [ ] ) async throws -> [ String ] {
6162 // Read repo info and only parse "siblings"
62- let url = URL ( string: " \( endpoint) / \( repo. type) / \( repo. id) " ) !
63+ let url = URL ( string: " \( endpoint) /api/ \( repo. type) / \( repo. id) " ) !
6364 let ( data, _) = try await httpGet ( for: url)
6465 let response = try JSONDecoder ( ) . decode ( SiblingsResponse . self, from: data)
6566 let filenames = response. siblings. map { $0. rfilename }
@@ -103,7 +104,7 @@ public extension HubApi {
103104 func whoami( ) async throws -> Config {
104105 guard hfToken != nil else { throw Hub . HubClientError. authorizationRequired }
105106
106- let url = URL ( string: " \( endpoint) /whoami-v2 " ) !
107+ let url = URL ( string: " \( endpoint) /api/ whoami-v2 " ) !
107108 let ( data, _) = try await httpGet ( for: url)
108109
109110 let parsed = try JSONSerialization . jsonObject ( with: data, options: [ ] )
@@ -123,15 +124,16 @@ public extension HubApi {
123124 let repoDestination : URL
124125 let relativeFilename : String
125126 let hfToken : String ?
127+ let endpoint : String ?
126128
127129 var source : URL {
128130 // https://huggingface.co/coreml-projects/Llama-2-7b-chat-coreml/resolve/main/tokenizer.json?download=true
129- var url = URL ( string: " https://huggingface.co " ) !
131+ var url = URL ( string: endpoint ?? " https://huggingface.co " ) !
130132 if repo. type != . models {
131133 url = url. appending ( component: repo. type. rawValue)
132134 }
133135 url = url. appending ( path: repo. id)
134- url = url. appending ( path: " resolve/main " ) // TODO: revisions
136+ url = url. appending ( path: " resolve/main " ) // TODO: revisions
135137 url = url. appending ( path: relativeFilename)
136138 return url
137139 }
@@ -177,7 +179,7 @@ public extension HubApi {
177179 let repoDestination = localRepoLocation ( repo)
178180 for filename in filenames {
179181 let fileProgress = Progress ( totalUnitCount: 100 , parent: progress, pendingUnitCount: 1 )
180- let downloader = HubFileDownloader ( repo: repo, repoDestination: repoDestination, relativeFilename: filename, hfToken: hfToken)
182+ let downloader = HubFileDownloader ( repo: repo, repoDestination: repoDestination, relativeFilename: filename, hfToken: hfToken, endpoint : endpoint )
181183 try await downloader. download { fractionDownloaded in
182184 fileProgress. completedUnitCount = Int64 ( 100 * fractionDownloaded)
183185 progressHandler ( progress)
@@ -243,9 +245,8 @@ public extension Hub {
243245 }
244246}
245247
246- public extension Array < String > {
248+ public extension [ String ] {
247249 func matching( glob: String ) -> [ String ] {
248- self . filter { fnmatch ( glob, $0, 0 ) == 0 }
250+ filter { fnmatch ( glob, $0, 0 ) == 0 }
249251 }
250252}
251-
0 commit comments