Eclipse
Boilit
BoilitBoilitBeta
Boilerplates

Boilerplate

Next.js with AI SDK and Model Usage Tracking

A full‑stack boilerplate using Next.js App Router with AI SDK for model calls and a persistent token usage tracker backed by PostgreSQL + Drizzle ORM. Every AI operation (e.g., chat, embeddings) is recorded with tokens, cost, provider, model, and latency, enabling accurate FinOps and observability from day one.

Features

  • AI SDK integration for server-side model calls (chat/completions/embeddings).
  • Usage tracking persisted to token_usages (tokens, cost, duration, operation).
  • Cost accounting with per‑provider/model price map (input/output/total).
  • Latency metrics (durationInMs) captured around each model call.
  • Indexed analytics (provider, model, operation, created_at) for fast queries.
  • Type-safe DB via Drizzle ORM on PostgreSQL.
  • Ready for dashboards (weekly/monthly cost, top models, $/request).

Technical Stack

  • Frontend: Next.js (App Router)
  • Server: Next.js (App Routes) with AI SDK
  • Database: PostgreSQL + Drizzle ORM (packages/db)
  • Language: TypeScript

Data Model

token_usages (Drizzle)

  • provider (tokenUsageProviderEnum)
  • model (tokenUsageModelEnum)
  • operation (tokenUsageOperationEnum) — e.g., chat, embed
  • inputTokens, outputTokens, totalTokens
  • inputCost, outputCost, totalCost (DECIMAL(10,6))
  • durationInMs
  • Timestamps (createdAt, updatedAt)
  • Indexes on provider, model, operation, createdAt

Drizzle ORM Table:

export const tokenUsages = pgTable( 'token_usages', { ...id, provider: tokenUsageProviderEnum('provider').notNull(), model: tokenUsageModelEnum('model').notNull(), operation: tokenUsageOperationEnum('operation').notNull(), inputTokens: integer('input_tokens').notNull(), outputTokens: integer('output_tokens').notNull(), totalTokens: integer('total_tokens').notNull(), inputCost: decimal('input_cost', { precision: 10, scale: 6 }).notNull(), outputCost: decimal('output_cost', { precision: 10, scale: 6 }).notNull(), totalCost: decimal('total_cost', { precision: 10, scale: 6 }).notNull(), durationInMs: integer('duration_in_ms').notNull(), ...timestamps, }, (t) => [ index('token_usage_provider_idx').on(t.provider), index('token_usage_model_idx').on(t.model), index('token_usage_operation_idx').on(t.operation), index('token_usage_created_at_idx').on(t.createdAt), ], )

How It Works

  1. Call the model via AI SDK in a App Route.
  2. Measure & extract: tokens (input/output), usage metadata, and elapsed time.
  3. Compute cost from a price map keyed by {provider, model} (input/output rates).
  4. Persist a row into token_usages with provider, model, operation, tokens, costs, and durationInMs.

Use Case

Perfect for teams who need transparent AI costs and reliable usage analytics in SaaS products. Track spend per customer/feature, compare models, and surface cost per request and latency to guide optimization and budgeting. 🚀

Boilerplate details

  • Last update


    1 month ago
  • Boilerplate age


    1 month ago
Login to download