imspsycho's picture
Initial upload from Google Colab
98c9143 verified
Raw
History Blame Contribute Delete
1.41 kB
import { Hono } from "hono"
import {
getTokenUsageDailySummary,
getTokenUsageEventsPage,
getTokenUsageSummary,
type TokenUsagePeriod,
} from "~/lib/token-usage"
export const tokenUsageRoute = new Hono()
const periods = new Set<TokenUsagePeriod>(["day", "week", "month"])
const DEFAULT_EVENTS_PAGE_SIZE = 20
function parsePeriod(value: string | undefined): TokenUsagePeriod {
return periods.has(value as TokenUsagePeriod) ?
(value as TokenUsagePeriod)
: "day"
}
function parsePositiveInt(value: string | undefined, fallback: number): number {
const parsed = Number.parseInt(value ?? "", 10)
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback
}
tokenUsageRoute.get("/", async (c) => {
const period = parsePeriod(c.req.query("period"))
const summary = await getTokenUsageSummary(period)
return c.json(summary)
})
tokenUsageRoute.get("/daily", async (c) => {
const period = parsePeriod(c.req.query("period"))
const summary = await getTokenUsageDailySummary(period)
return c.json(summary)
})
tokenUsageRoute.get("/events", async (c) => {
const period = parsePeriod(c.req.query("period"))
const page = parsePositiveInt(c.req.query("page"), 1)
const pageSize = parsePositiveInt(
c.req.query("page_size"),
DEFAULT_EVENTS_PAGE_SIZE,
)
const eventsPage = await getTokenUsageEventsPage({ page, pageSize, period })
return c.json(eventsPage)
})