11import { and , Database , inArray } from "@opencode-ai/console-core/drizzle/index.js"
22import { ModelTpsRateLimitTable } from "@opencode-ai/console-core/schema/ip.sql.js"
33
4- type Entry = { provider : string ; model : string ; tps : number }
5- type Result = Record < string , { qualify : number ; unqualify : number } >
4+ type Result = Record < string , Record < number , { qualify : number ; unqualify : number } > >
65
76export default {
87 async fetch ( request : Request ) {
98 if ( request . method !== "POST" ) return new Response ( "Method Not Allowed" , { status : 405 } )
109
11- const entries = ( await request . json ( ) ) as Entry [ ]
12- if ( ! Array . isArray ( entries ) || entries . length === 0 ) return Response . json ( { } satisfies Result )
10+ const body = ( await request . json ( ) ) as { ids : string [ ] }
11+ const ids = body . ids
1312
14- const ids = entries . map ( ( e ) => ` ${ e . provider } / ${ e . model } / ${ e . tps } ` )
13+ if ( ids . length === 0 ) return Response . json ( { } satisfies Result )
1514
1615 const toInterval = ( date : Date ) =>
1716 parseInt (
@@ -21,19 +20,23 @@ export default {
2120 . substring ( 0 , 12 ) ,
2221 )
2322 const now = Date . now ( )
24- const intervals = Array . from ( { length : 5 } , ( _ , i ) => toInterval ( new Date ( now - i * 60 * 1000 ) ) )
23+ const intervals = Array . from ( { length : 30 } , ( _ , i ) => toInterval ( new Date ( now - i * 60 * 1000 ) ) )
2524
2625 const rows = await Database . use ( ( tx ) =>
2726 tx
2827 . select ( )
2928 . from ( ModelTpsRateLimitTable )
30- . where ( and ( inArray ( ModelTpsRateLimitTable . id , ids ) , inArray ( ModelTpsRateLimitTable . interval , intervals ) ) ) ,
29+ . where ( and ( inArray ( ModelTpsRateLimitTable . id , body . ids ) , inArray ( ModelTpsRateLimitTable . interval , intervals ) ) ) ,
3130 )
3231
33- const result : Result = Object . fromEntries ( ids . map ( ( id ) => [ id , { qualify : 0 , unqualify : 0 } ] ) )
32+ const result : Result = Object . fromEntries (
33+ body . ids . map ( ( id ) => [
34+ id ,
35+ Object . fromEntries ( intervals . map ( ( interval ) => [ interval , { qualify : 0 , unqualify : 0 } ] ) ) ,
36+ ] ) ,
37+ )
3438 for ( const row of rows ) {
35- result [ row . id ] . qualify += row . qualify
36- result [ row . id ] . unqualify += row . unqualify
39+ result [ row . id ] [ row . interval ] = { qualify : row . qualify , unqualify : row . unqualify }
3740 }
3841 return Response . json ( result )
3942 } ,
0 commit comments