@@ -7,6 +7,8 @@ const linkedRepos: Record<string, string[]> = {
7
7
'nuxt/nuxt' : [ 'vuejs/core' , 'vitejs/vite' , 'nitrojs/nitro' ] ,
8
8
}
9
9
10
+ const allowedRepos = [ 'nuxt/nuxt' , 'vuejs/vue' , 'vitejs/vite' , 'nitrojs/nitro' , 'danielroe/beasties' ]
11
+
10
12
export default defineCachedEventHandler ( async ( event ) => {
11
13
const [ owner , repo ] = getRouterParam ( event , 'repo' ) ?. split ( '/' ) || [ ]
12
14
if ( ! owner || ! repo ) {
@@ -17,11 +19,27 @@ export default defineCachedEventHandler(async (event) => {
17
19
}
18
20
19
21
const source = `${ owner } /${ repo } `
22
+
23
+ if ( ! allowedRepos . includes ( source ) ) {
24
+ throw createError ( {
25
+ status : 400 ,
26
+ message : 'Repository not allowed' ,
27
+ } )
28
+ }
29
+
20
30
const repos = [ source , ...linkedRepos [ source ] || [ ] ]
21
31
const issues = await Promise . all ( repos . map ( async repo => event . $fetch < Issue [ ] > ( `/api/issues/${ repo } ` ) ) )
22
32
. then ( r => r . flat ( ) )
23
33
24
- const embeddings = await Promise . all ( issues . map ( async issue => getEmbeddingsForIssue ( event , issue ) ) )
34
+ console . log ( 'fetched' , issues . length , 'issues' )
35
+
36
+ const embeddings : number [ ] [ ] = [ ]
37
+
38
+ do {
39
+ const batch = issues . splice ( 0 , 100 )
40
+ embeddings . push ( ...await Promise . all ( batch . map ( async issue => getEmbeddingsForIssue ( event , issue ) ) ) )
41
+ } while ( issues . length )
42
+
25
43
const clusters = clusterEmbeddings ( issues , embeddings )
26
44
return clusters . filter ( ( cluster ) => {
27
45
return cluster . some ( issue => issue . repository ?. owner ?. name === owner && issue . repository ?. name === repo )
0 commit comments