@@ -103,14 +103,20 @@ type PepyResponse = {
103103 total_downloads ?: number ;
104104} ;
105105
106+ type HuggingFaceModelResponse = {
107+ downloads ?: number ;
108+ } ;
109+
106110const PEPY_API_KEY = import . meta. env . PEPY_API_KEY ;
107111const GITHUB_TOKEN = import . meta. env . MINISH_GITHUB_TOKEN ;
108112const REQUEST_HEADERS = {
109113 Accept : 'application/json' ,
110114 'User-Agent' : 'minish-docs-build' ,
111115} ;
116+ const HUGGING_FACE_AUTHOR = 'minishlab' ;
112117
113118let homepageMetricsPromise : Promise < HomepagePackageMetrics [ ] > | undefined ;
119+ let huggingFaceMonthlyDownloadsPromise : Promise < number | undefined > | undefined ;
114120
115121async function fetchJson < T > ( url : string , extraHeaders : Record < string , string > = { } ) {
116122 const response = await fetch ( url , {
@@ -153,6 +159,19 @@ async function fetchDownloads(source: DownloadSource) {
153159 return typeof data . total_downloads === 'number' ? data . total_downloads : undefined ;
154160}
155161
162+ async function fetchHuggingFaceMonthlyDownloads ( ) {
163+ const params = new URLSearchParams ( {
164+ author : HUGGING_FACE_AUTHOR ,
165+ limit : '100' ,
166+ full : 'true' ,
167+ } ) ;
168+ const models = await fetchJson < HuggingFaceModelResponse [ ] > (
169+ `https://huggingface.co/api/models?${ params . toString ( ) } ` ,
170+ ) ;
171+
172+ return models . reduce ( ( sum , model ) => sum + ( model . downloads ?? 0 ) , 0 ) ;
173+ }
174+
156175async function resolvePackageMetrics ( pkg : HomepagePackageDefinition ) : Promise < HomepagePackageMetrics > {
157176 const [ stars , downloads ] = await Promise . all ( [
158177 fetchGithubStars ( pkg . githubRepo ) . catch ( ( ) => undefined ) ,
@@ -172,13 +191,23 @@ export async function getHomepagePackageMetrics() {
172191}
173192
174193export async function getHomepageTotals ( ) {
175- const packages = await getHomepagePackageMetrics ( ) ;
194+ const [ packages , monthlyModelDownloads ] = await Promise . all ( [
195+ getHomepagePackageMetrics ( ) ,
196+ ( huggingFaceMonthlyDownloadsPromise ??=
197+ fetchHuggingFaceMonthlyDownloads ( ) . catch ( ( ) => undefined ) ) ,
198+ ] ) ;
199+
176200 return packages . reduce (
177201 ( totals , pkg ) => ( {
178202 stars : totals . stars + pkg . stars ,
179203 downloads : totals . downloads + pkg . downloads ,
204+ monthlyModelDownloads : totals . monthlyModelDownloads ,
180205 } ) ,
181- { stars : 0 , downloads : 0 } ,
206+ {
207+ stars : 0 ,
208+ downloads : 0 ,
209+ monthlyModelDownloads,
210+ } ,
182211 ) ;
183212}
184213
0 commit comments