Skip to content

Commit d562d8b

Browse files
authored
usage cards (#5468)
* usage cards * added labels * fixes * fix build
1 parent 336bf26 commit d562d8b

File tree

27 files changed

+1760
-98
lines changed

27 files changed

+1760
-98
lines changed

.claude/settings.local.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,5 @@
106106
"deny": []
107107
},
108108
"enableAllProjectMcpServers": true,
109-
"enabledMcpjsonServers": [
110-
"playwright"
111-
]
109+
"enabledMcpjsonServers": ["playwright"]
112110
}

bifrost/app/components/templates/pricing/PricingComparisonTable.tsx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ import {
1111
} from "@/components/ui/table";
1212
import { Button } from "@/components/ui/button";
1313
import { useState, Fragment } from "react";
14+
import {
15+
GB_PRICING_TIERS,
16+
REQUEST_PRICING_TIERS,
17+
} from "@helicone-package/pricing";
1418

1519
interface PricingTier {
1620
name: string;
@@ -33,23 +37,19 @@ interface FeatureGroup {
3337
features: Feature[];
3438
}
3539

36-
const USAGE_PRICING_GB = [
37-
{ label: "First 30 GB", rate: "$3.25/GB" },
38-
{ label: "31-80 GB", rate: "$2.00/GB" },
39-
{ label: "81-200 GB", rate: "$1.25/GB" },
40-
{ label: "201-450 GB", rate: "$0.75/GB" },
41-
{ label: "450+ GB", rate: "$0.50/GB" },
42-
];
40+
// Derive display data from shared pricing tiers
41+
const USAGE_PRICING_GB = GB_PRICING_TIERS.map((tier) => ({
42+
label: tier.label,
43+
rate: `$${tier.ratePerGB.toFixed(2)}/GB`,
44+
}));
4345

44-
const USAGE_PRICING_REQUESTS = [
45-
{ label: "First 10,000", rate: "Free" },
46-
{ label: "10,001-30,000", rate: "$0.00070" },
47-
{ label: "30,001-90,000", rate: "$0.00035" },
48-
{ label: "90,001-250,000", rate: "$0.000175" },
49-
{ label: "250,001-800,000", rate: "$0.0000875" },
50-
{ label: "800,001-2,500,000", rate: "$0.00004375" },
51-
{ label: "2,500,000+", rate: "$0.00002" },
52-
];
46+
const USAGE_PRICING_REQUESTS = REQUEST_PRICING_TIERS.map((tier) => ({
47+
label: tier.label,
48+
rate:
49+
tier.ratePerLog === 0
50+
? "Free"
51+
: `$${tier.ratePerLog.toFixed(8).replace(/0+$/, "")}`,
52+
}));
5353

5454
const tiers: PricingTier[] = [
5555
{

bifrost/lib/clients/jawnTypes/private.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ export interface paths {
120120
"/v1/stripe/payment-methods/{paymentMethodId}": {
121121
delete: operations["RemovePaymentMethod"];
122122
};
123+
"/v1/stripe/subscription/usage-stats": {
124+
get: operations["GetUsageStats"];
125+
};
123126
"/v1/organization": {
124127
get: operations["GetOrganizations"];
125128
};
@@ -981,6 +984,46 @@ export interface components {
981984
CreateSetupSessionRequest: {
982985
returnUrl?: string;
983986
};
987+
DailyUsageDataPoint: {
988+
date: string;
989+
/** Format: double */
990+
requests: number;
991+
/** Format: double */
992+
bytes: number;
993+
};
994+
UsageStatsResponse: {
995+
billingPeriod: {
996+
/** Format: double */
997+
daysTotal: number;
998+
/** Format: double */
999+
daysElapsed: number;
1000+
end: string;
1001+
start: string;
1002+
};
1003+
usage: {
1004+
/** Format: double */
1005+
totalGB: number;
1006+
/** Format: double */
1007+
totalBytes: number;
1008+
/** Format: double */
1009+
totalRequests: number;
1010+
};
1011+
dailyData: components["schemas"]["DailyUsageDataPoint"][];
1012+
estimatedCost: {
1013+
/** Format: double */
1014+
projectedMonthlyTotalCost: number;
1015+
/** Format: double */
1016+
projectedMonthlyGBCost: number;
1017+
/** Format: double */
1018+
projectedMonthlyRequestsCost: number;
1019+
/** Format: double */
1020+
totalCost: number;
1021+
/** Format: double */
1022+
gbCost: number;
1023+
/** Format: double */
1024+
requestsCost: number;
1025+
};
1026+
};
9841027
Json: JsonObject;
9851028
"ResultSuccess__40_Database-at-public_91_Tables_93_-at-organization_91_Row_93_-and-_role-string__41_-Array_": {
9861029
data: (({
@@ -17333,6 +17376,16 @@ export interface operations {
1733317376
};
1733417377
};
1733517378
};
17379+
GetUsageStats: {
17380+
responses: {
17381+
/** @description Ok */
17382+
200: {
17383+
content: {
17384+
"application/json": components["schemas"]["UsageStatsResponse"] | null;
17385+
};
17386+
};
17387+
};
17388+
};
1733617389
GetOrganizations: {
1733717390
responses: {
1733817391
/** @description Ok */

bifrost/lib/clients/jawnTypes/public.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,9 @@ export interface paths {
304304
"/v1/stripe/payment-methods/{paymentMethodId}": {
305305
delete: operations["RemovePaymentMethod"];
306306
};
307+
"/v1/stripe/subscription/usage-stats": {
308+
get: operations["GetUsageStats"];
309+
};
307310
"/v1/integration": {
308311
get: operations["GetIntegrations"];
309312
post: operations["CreateIntegration"];
@@ -1665,6 +1668,46 @@ Json: JsonObject;
16651668
CreateSetupSessionRequest: {
16661669
returnUrl?: string;
16671670
};
1671+
DailyUsageDataPoint: {
1672+
date: string;
1673+
/** Format: double */
1674+
requests: number;
1675+
/** Format: double */
1676+
bytes: number;
1677+
};
1678+
UsageStatsResponse: {
1679+
billingPeriod: {
1680+
/** Format: double */
1681+
daysTotal: number;
1682+
/** Format: double */
1683+
daysElapsed: number;
1684+
end: string;
1685+
start: string;
1686+
};
1687+
usage: {
1688+
/** Format: double */
1689+
totalGB: number;
1690+
/** Format: double */
1691+
totalBytes: number;
1692+
/** Format: double */
1693+
totalRequests: number;
1694+
};
1695+
dailyData: components["schemas"]["DailyUsageDataPoint"][];
1696+
estimatedCost: {
1697+
/** Format: double */
1698+
projectedMonthlyTotalCost: number;
1699+
/** Format: double */
1700+
projectedMonthlyGBCost: number;
1701+
/** Format: double */
1702+
projectedMonthlyRequestsCost: number;
1703+
/** Format: double */
1704+
totalCost: number;
1705+
/** Format: double */
1706+
gbCost: number;
1707+
/** Format: double */
1708+
requestsCost: number;
1709+
};
1710+
};
16681711
IntegrationCreateParams: {
16691712
integration_name: string;
16701713
settings?: components["schemas"]["Json"];
@@ -6313,6 +6356,16 @@ export interface operations {
63136356
};
63146357
};
63156358
};
6359+
GetUsageStats: {
6360+
responses: {
6361+
/** @description Ok */
6362+
200: {
6363+
content: {
6364+
"application/json": components["schemas"]["UsageStatsResponse"] | null;
6365+
};
6366+
};
6367+
};
6368+
};
63166369
GetIntegrations: {
63176370
responses: {
63186371
/** @description Ok */

bifrost/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
},
1313
"dependencies": {
1414
"@calcom/embed-react": "^1.5.0",
15+
"@helicone-package/pricing": "*",
1516
"@headlessui/react": "^2.0.4",
1617
"@heroicons/react": "^2.1.3",
1718
"@mdx-js/loader": "^3.1.0",

docs/swagger.json

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3594,6 +3594,130 @@
35943594
"type": "object",
35953595
"additionalProperties": false
35963596
},
3597+
"DailyUsageDataPoint": {
3598+
"properties": {
3599+
"date": {
3600+
"type": "string"
3601+
},
3602+
"requests": {
3603+
"type": "number",
3604+
"format": "double"
3605+
},
3606+
"bytes": {
3607+
"type": "number",
3608+
"format": "double"
3609+
}
3610+
},
3611+
"required": [
3612+
"date",
3613+
"requests",
3614+
"bytes"
3615+
],
3616+
"type": "object",
3617+
"additionalProperties": false
3618+
},
3619+
"UsageStatsResponse": {
3620+
"properties": {
3621+
"billingPeriod": {
3622+
"properties": {
3623+
"daysTotal": {
3624+
"type": "number",
3625+
"format": "double"
3626+
},
3627+
"daysElapsed": {
3628+
"type": "number",
3629+
"format": "double"
3630+
},
3631+
"end": {
3632+
"type": "string"
3633+
},
3634+
"start": {
3635+
"type": "string"
3636+
}
3637+
},
3638+
"required": [
3639+
"daysTotal",
3640+
"daysElapsed",
3641+
"end",
3642+
"start"
3643+
],
3644+
"type": "object"
3645+
},
3646+
"usage": {
3647+
"properties": {
3648+
"totalGB": {
3649+
"type": "number",
3650+
"format": "double"
3651+
},
3652+
"totalBytes": {
3653+
"type": "number",
3654+
"format": "double"
3655+
},
3656+
"totalRequests": {
3657+
"type": "number",
3658+
"format": "double"
3659+
}
3660+
},
3661+
"required": [
3662+
"totalGB",
3663+
"totalBytes",
3664+
"totalRequests"
3665+
],
3666+
"type": "object"
3667+
},
3668+
"dailyData": {
3669+
"items": {
3670+
"$ref": "#/components/schemas/DailyUsageDataPoint"
3671+
},
3672+
"type": "array"
3673+
},
3674+
"estimatedCost": {
3675+
"properties": {
3676+
"projectedMonthlyTotalCost": {
3677+
"type": "number",
3678+
"format": "double"
3679+
},
3680+
"projectedMonthlyGBCost": {
3681+
"type": "number",
3682+
"format": "double"
3683+
},
3684+
"projectedMonthlyRequestsCost": {
3685+
"type": "number",
3686+
"format": "double"
3687+
},
3688+
"totalCost": {
3689+
"type": "number",
3690+
"format": "double"
3691+
},
3692+
"gbCost": {
3693+
"type": "number",
3694+
"format": "double"
3695+
},
3696+
"requestsCost": {
3697+
"type": "number",
3698+
"format": "double"
3699+
}
3700+
},
3701+
"required": [
3702+
"projectedMonthlyTotalCost",
3703+
"projectedMonthlyGBCost",
3704+
"projectedMonthlyRequestsCost",
3705+
"totalCost",
3706+
"gbCost",
3707+
"requestsCost"
3708+
],
3709+
"type": "object"
3710+
}
3711+
},
3712+
"required": [
3713+
"billingPeriod",
3714+
"usage",
3715+
"dailyData",
3716+
"estimatedCost"
3717+
],
3718+
"type": "object",
3719+
"additionalProperties": false
3720+
},
35973721
"IntegrationCreateParams": {
35983722
"properties": {
35993723
"integration_name": {
@@ -18505,6 +18629,37 @@
1850518629
]
1850618630
}
1850718631
},
18632+
"/v1/stripe/subscription/usage-stats": {
18633+
"get": {
18634+
"operationId": "GetUsageStats",
18635+
"responses": {
18636+
"200": {
18637+
"description": "Ok",
18638+
"content": {
18639+
"application/json": {
18640+
"schema": {
18641+
"allOf": [
18642+
{
18643+
"$ref": "#/components/schemas/UsageStatsResponse"
18644+
}
18645+
],
18646+
"nullable": true
18647+
}
18648+
}
18649+
}
18650+
}
18651+
},
18652+
"tags": [
18653+
"Stripe"
18654+
],
18655+
"security": [
18656+
{
18657+
"api_key": []
18658+
}
18659+
],
18660+
"parameters": []
18661+
}
18662+
},
1850818663
"/v1/integration": {
1850918664
"post": {
1851018665
"operationId": "CreateIntegration",

0 commit comments

Comments
 (0)