@@ -2,7 +2,7 @@ import db from '@codebuff/internal/db'
22import * as schema from '@codebuff/internal/db/schema'
33import { unstable_cache } from 'next/cache'
44import { sql , eq , and , gte } from 'drizzle-orm'
5- import { buildAgentsData } from './agents-transform'
5+ import { buildAgentsData , buildAgentsDataLite } from './agents-transform'
66
77export interface AgentData {
88 id : string
@@ -156,6 +156,82 @@ export const fetchAgentsWithMetrics = async (): Promise<AgentData[]> => {
156156 } )
157157}
158158
159+ export const fetchAgentsWithMetricsLite = async ( ) : Promise < AgentData [ ] > => {
160+ const oneWeekAgo = new Date ( Date . now ( ) - 7 * 24 * 60 * 60 * 1000 )
161+
162+ const agentsPromise = db
163+ . select ( {
164+ id : schema . agentConfig . id ,
165+ version : schema . agentConfig . version ,
166+ data : schema . agentConfig . data ,
167+ created_at : schema . agentConfig . created_at ,
168+ publisher : {
169+ id : schema . publisher . id ,
170+ name : schema . publisher . name ,
171+ verified : schema . publisher . verified ,
172+ avatar_url : schema . publisher . avatar_url ,
173+ } ,
174+ } )
175+ . from ( schema . agentConfig )
176+ . innerJoin (
177+ schema . publisher ,
178+ eq ( schema . agentConfig . publisher_id , schema . publisher . id ) ,
179+ )
180+ . orderBy ( sql `${ schema . agentConfig . created_at } DESC` )
181+
182+ const usageMetricsPromise = db
183+ . select ( {
184+ publisher_id : schema . agentRun . publisher_id ,
185+ agent_name : schema . agentRun . agent_name ,
186+ total_invocations : sql < number > `COUNT(*)` ,
187+ total_dollars : sql < number > `COALESCE(SUM(${ schema . agentRun . total_credits } ) / 100.0, 0)` ,
188+ avg_cost_per_run : sql < number > `COALESCE(AVG(${ schema . agentRun . total_credits } ) / 100.0, 0)` ,
189+ unique_users : sql < number > `COUNT(DISTINCT ${ schema . agentRun . user_id } )` ,
190+ last_used : sql < Date > `MAX(${ schema . agentRun . created_at } )` ,
191+ } )
192+ . from ( schema . agentRun )
193+ . where (
194+ and (
195+ eq ( schema . agentRun . status , 'completed' ) ,
196+ sql `${ schema . agentRun . agent_id } != 'test-agent'` ,
197+ sql `${ schema . agentRun . publisher_id } IS NOT NULL` ,
198+ sql `${ schema . agentRun . agent_name } IS NOT NULL` ,
199+ ) ,
200+ )
201+ . groupBy ( schema . agentRun . publisher_id , schema . agentRun . agent_name )
202+
203+ const weeklyMetricsPromise = db
204+ . select ( {
205+ publisher_id : schema . agentRun . publisher_id ,
206+ agent_name : schema . agentRun . agent_name ,
207+ weekly_runs : sql < number > `COUNT(*)` ,
208+ weekly_dollars : sql < number > `COALESCE(SUM(${ schema . agentRun . total_credits } ) / 100.0, 0)` ,
209+ } )
210+ . from ( schema . agentRun )
211+ . where (
212+ and (
213+ eq ( schema . agentRun . status , 'completed' ) ,
214+ gte ( schema . agentRun . created_at , oneWeekAgo ) ,
215+ sql `${ schema . agentRun . agent_id } != 'test-agent'` ,
216+ sql `${ schema . agentRun . publisher_id } IS NOT NULL` ,
217+ sql `${ schema . agentRun . agent_name } IS NOT NULL` ,
218+ ) ,
219+ )
220+ . groupBy ( schema . agentRun . publisher_id , schema . agentRun . agent_name )
221+
222+ const [ agents , usageMetrics , weeklyMetrics ] = await Promise . all ( [
223+ agentsPromise ,
224+ usageMetricsPromise ,
225+ weeklyMetricsPromise ,
226+ ] )
227+
228+ return buildAgentsDataLite ( {
229+ agents,
230+ usageMetrics,
231+ weeklyMetrics,
232+ } )
233+ }
234+
159235export const getCachedAgents = unstable_cache (
160236 fetchAgentsWithMetrics ,
161237 [ 'agents-data' ] ,
@@ -164,3 +240,12 @@ export const getCachedAgents = unstable_cache(
164240 tags : [ 'agents' , 'api' , 'store' ] ,
165241 } ,
166242)
243+
244+ export const getCachedAgentsLite = unstable_cache (
245+ fetchAgentsWithMetricsLite ,
246+ [ 'agents-data-lite' ] ,
247+ {
248+ revalidate : 600 , // 10 minutes
249+ tags : [ 'agents' , 'store' ] ,
250+ } ,
251+ )
0 commit comments