+>(({ className, ...props }, ref) => (
+ [role=checkbox]]:translate-y-[2px]",
+ className
+ )}
+ {...props}
+ />
+))
+TableCell.displayName = "TableCell"
+
+const TableCaption = React.forwardRef<
+ HTMLTableCaptionElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+TableCaption.displayName = "TableCaption"
+
+export {
+ Table,
+ TableHeader,
+ TableBody,
+ TableFooter,
+ TableHead,
+ TableRow,
+ TableCell,
+ TableCaption,
+}
diff --git a/bifrost/lib/utils.ts b/bifrost/lib/utils.ts
new file mode 100644
index 0000000000..bd0c391ddd
--- /dev/null
+++ b/bifrost/lib/utils.ts
@@ -0,0 +1,6 @@
+import { clsx, type ClassValue } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/bifrost/package.json b/bifrost/package.json
index 7b8861fdc8..6c1d971dd1 100644
--- a/bifrost/package.json
+++ b/bifrost/package.json
@@ -15,14 +15,22 @@
"@headlessui/react": "^2.0.4",
"@heroicons/react": "^2.1.3",
"@mintlify/mdx": "^0.0.44",
+ "@radix-ui/react-icons": "^1.3.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.11",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "lucide-react": "^0.438.0",
"next": "14.2.3",
"next-sitemap": "^4.2.3",
"posthog-js": "^1.136.7",
"prism-react-renderer": "^2.3.1",
"react": "^18",
- "react-dom": "^18"
+ "react-dom": "^18",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.13",
diff --git a/bifrost/tailwind.config.ts b/bifrost/tailwind.config.ts
index cc1084e091..ceb1b6a72b 100644
--- a/bifrost/tailwind.config.ts
+++ b/bifrost/tailwind.config.ts
@@ -1,20 +1,67 @@
import type { Config } from "tailwindcss";
const config: Config = {
- content: [
+ darkMode: ["class"],
+ content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
- extend: {
- backgroundImage: {
- "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
- "gradient-conic":
- "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
- },
- },
+ extend: {
+ backgroundImage: {
+ 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
+ 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))'
+ },
+ borderRadius: {
+ lg: 'var(--radius)',
+ md: 'calc(var(--radius) - 2px)',
+ sm: 'calc(var(--radius) - 4px)'
+ },
+ colors: {
+ background: 'hsl(var(--background))',
+ foreground: 'hsl(var(--foreground))',
+ card: {
+ DEFAULT: 'hsl(var(--card))',
+ foreground: 'hsl(var(--card-foreground))'
+ },
+ popover: {
+ DEFAULT: 'hsl(var(--popover))',
+ foreground: 'hsl(var(--popover-foreground))'
+ },
+ primary: {
+ DEFAULT: 'hsl(var(--primary))',
+ foreground: 'hsl(var(--primary-foreground))'
+ },
+ secondary: {
+ DEFAULT: 'hsl(var(--secondary))',
+ foreground: 'hsl(var(--secondary-foreground))'
+ },
+ muted: {
+ DEFAULT: 'hsl(var(--muted))',
+ foreground: 'hsl(var(--muted-foreground))'
+ },
+ accent: {
+ DEFAULT: 'hsl(var(--accent))',
+ foreground: 'hsl(var(--accent-foreground))'
+ },
+ destructive: {
+ DEFAULT: 'hsl(var(--destructive))',
+ foreground: 'hsl(var(--destructive-foreground))'
+ },
+ border: 'hsl(var(--border))',
+ input: 'hsl(var(--input))',
+ ring: 'hsl(var(--ring))',
+ chart: {
+ '1': 'hsl(var(--chart-1))',
+ '2': 'hsl(var(--chart-2))',
+ '3': 'hsl(var(--chart-3))',
+ '4': 'hsl(var(--chart-4))',
+ '5': 'hsl(var(--chart-5))'
+ }
+ }
+ }
},
- plugins: [require("@tailwindcss/typography")],
+ plugins: [require("@tailwindcss/typography"), require("tailwindcss-animate")],
};
export default config;
diff --git a/bifrost/yarn.lock b/bifrost/yarn.lock
index f8a812c487..088e06c78a 100644
--- a/bifrost/yarn.lock
+++ b/bifrost/yarn.lock
@@ -318,6 +318,82 @@
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+"@radix-ui/primitive@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2"
+ integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==
+
+"@radix-ui/react-compose-refs@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74"
+ integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==
+
+"@radix-ui/react-context@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8"
+ integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==
+
+"@radix-ui/react-icons@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69"
+ integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==
+
+"@radix-ui/react-primitive@2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884"
+ integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==
+ dependencies:
+ "@radix-ui/react-slot" "1.1.0"
+
+"@radix-ui/react-slot@1.1.0", "@radix-ui/react-slot@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84"
+ integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.0"
+
+"@radix-ui/react-switch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.1.0.tgz#fcf8e778500f1d60d4b2bec2fc3fad77a7c118e3"
+ integrity sha512-OBzy5WAj641k0AOSpKQtreDMe+isX0MQJ1IVyF03ucdF3DunOnROVrjWs8zsXUxC3zfZ6JL9HFVCUlMghz9dJw==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.0"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+ "@radix-ui/react-use-previous" "1.1.0"
+ "@radix-ui/react-use-size" "1.1.0"
+
+"@radix-ui/react-use-callback-ref@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1"
+ integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==
+
+"@radix-ui/react-use-controllable-state@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0"
+ integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==
+ dependencies:
+ "@radix-ui/react-use-callback-ref" "1.1.0"
+
+"@radix-ui/react-use-layout-effect@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27"
+ integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==
+
+"@radix-ui/react-use-previous@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c"
+ integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==
+
+"@radix-ui/react-use-size@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b"
+ integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==
+ dependencies:
+ "@radix-ui/react-use-layout-effect" "1.1.0"
+
"@react-aria/focus@^3.16.2":
version "3.17.1"
resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.17.1.tgz#c796a188120421e2fedf438cadacdf463c77ad29"
@@ -926,12 +1002,24 @@ chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
+class-variance-authority@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522"
+ integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==
+ dependencies:
+ clsx "2.0.0"
+
client-only@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
-clsx@^2.0.0:
+clsx@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
+ integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
+
+clsx@^2.0.0, clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
@@ -2354,6 +2442,11 @@ lru-cache@^10.2.0:
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878"
integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==
+lucide-react@^0.438.0:
+ version "0.438.0"
+ resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.438.0.tgz#80cc2602c973416256ad65ded9872531626b4f70"
+ integrity sha512-uq6yCB+IzVfgIPMK8ibkecXSWTTSOMs9UjUgZigfrDCVqgdwkpIgYg1fSYnf0XXF2AoSyCJZhoZXQwzoai7VGw==
+
markdown-extensions@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
@@ -3756,7 +3849,16 @@ streamsearch@^1.1.0:
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -3828,7 +3930,14 @@ stringify-entities@^4.0.0:
character-entities-html4 "^2.0.0"
character-entities-legacy "^3.0.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -3896,6 +4005,16 @@ tabbable@^6.0.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+tailwind-merge@^2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.5.2.tgz#000f05a703058f9f9f3829c644235f81d4c08a1f"
+ integrity sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==
+
+tailwindcss-animate@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4"
+ integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==
+
tailwindcss@^3.4.1:
version "3.4.4"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.4.tgz#351d932273e6abfa75ce7d226b5bf3a6cb257c05"
From 44910ff22f48584e664368f5e0efefa74214f820 Mon Sep 17 00:00:00 2001
From: Justin
Date: Fri, 6 Sep 2024 10:56:00 -0700
Subject: [PATCH 02/14] more pricing fixes
---
.../templates/pricing/EnterpriseCard.tsx | 56 +++++--
.../templates/pricing/FeaturedItem.tsx | 16 ++
.../components/templates/pricing/FreeCard.tsx | 44 +++++
.../templates/pricing/GrowthCard.tsx | 74 --------
.../templates/pricing/ScaleCard.tsx | 158 ++++++------------
bifrost/app/pricing/page.tsx | 135 ++++++++++++---
.../templates/pricing/DeveloperCard.tsx | 24 +++
.../templates/pricing/EnterpriseCard.tsx | 24 +++
.../templates/pricing/ScaleCard.tsx | 24 +++
bifrost/components/ui/card.tsx | 76 +++++++++
bifrost/components/ui/tabs.tsx | 55 ++++++
bifrost/package.json | 1 +
bifrost/yarn.lock | 59 +++++++
.../templates/playground/playgroundPage.tsx | 56 +++++--
14 files changed, 562 insertions(+), 240 deletions(-)
create mode 100644 bifrost/app/components/templates/pricing/FeaturedItem.tsx
create mode 100644 bifrost/app/components/templates/pricing/FreeCard.tsx
delete mode 100644 bifrost/app/components/templates/pricing/GrowthCard.tsx
create mode 100644 bifrost/components/templates/pricing/DeveloperCard.tsx
create mode 100644 bifrost/components/templates/pricing/EnterpriseCard.tsx
create mode 100644 bifrost/components/templates/pricing/ScaleCard.tsx
create mode 100644 bifrost/components/ui/card.tsx
create mode 100644 bifrost/components/ui/tabs.tsx
diff --git a/bifrost/app/components/templates/pricing/EnterpriseCard.tsx b/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
index a07b7fb7fd..37bdaec3c0 100644
--- a/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
+++ b/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
@@ -1,24 +1,44 @@
-import BaseCard from "./BaseCard";
+import { Card } from "@/components/ui/card";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+import { CheckIcon } from "@heroicons/react/24/outline";
+import { FeatureItem } from "./FeaturedItem";
const EnterpriseCard: React.FC = () => {
- const features = [
- { name: "Observability and Analytics", included: true },
- { name: "Feature-Rich Tooling", included: true },
- { name: "Prompt Templates", included: true },
- { name: "Prompt Experiments", included: true },
- { name: "SOC-2 Compliance", included: true },
- { name: "On-Prem Deployment", included: true },
- ];
-
return (
- Get in touch}
- features={features}
- ctaText="Get in touch"
- ctaLink="/contact"
- />
+
+
+
+
+ Enterprise
+
+
+ Contact us
+
+ Everything to kickstart your AI project.
+
+ Everthing in Scale, plus:
+
+
+
+
+
+
+
+
+
+
);
};
diff --git a/bifrost/app/components/templates/pricing/FeaturedItem.tsx b/bifrost/app/components/templates/pricing/FeaturedItem.tsx
new file mode 100644
index 0000000000..eb55961a4a
--- /dev/null
+++ b/bifrost/app/components/templates/pricing/FeaturedItem.tsx
@@ -0,0 +1,16 @@
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+import { CheckIcon } from "@heroicons/react/24/outline";
+
+export const FeatureItem: React.FC<{ title: string; description: string }> = ({
+ title,
+ description,
+}) => (
+
+
+
+ {title}
+ {description}
+
+
+);
diff --git a/bifrost/app/components/templates/pricing/FreeCard.tsx b/bifrost/app/components/templates/pricing/FreeCard.tsx
new file mode 100644
index 0000000000..468c0f15ef
--- /dev/null
+++ b/bifrost/app/components/templates/pricing/FreeCard.tsx
@@ -0,0 +1,44 @@
+import { Card } from "@/components/ui/card";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+import { CheckIcon } from "@heroicons/react/24/outline";
+import { FeatureItem } from "./FeaturedItem";
+
+const FreeCard: React.FC = () => {
+ return (
+
+
+
+
+ Developer
+
+
+ Free
+
+ Everything to kickstart your AI project.
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default FreeCard;
diff --git a/bifrost/app/components/templates/pricing/GrowthCard.tsx b/bifrost/app/components/templates/pricing/GrowthCard.tsx
deleted file mode 100644
index 4d4af35a50..0000000000
--- a/bifrost/app/components/templates/pricing/GrowthCard.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import { useState } from "react";
-import BaseCard from "./BaseCard";
-import Slider from "./Slider";
-import { renderLogCost } from "@/app/utils/pricingUtils";
-
-const GrowthCard: React.FC = () => {
- const [requestLogs, setRequestLogs] = useState(0);
-
- const handleRequestLogChange = (newValue: number) => {
- setRequestLogs(newValue);
- };
-
- const features = [
- { name: "Observability and Analytics", included: true },
- { name: "10,000 requests", included: true },
- { name: "Core Tooling", included: true },
- { name: "1 month retention", included: true },
- { name: "No credit card required", included: true },
- { name: "Prompts", included: false },
- { name: "Experiments", included: false },
- { name: "Playground", included: false },
- { name: "Cache Stats", included: false },
- { name: "Rate Limit Stats", included: false },
- { name: "API Access", included: false },
- { name: "Evals", included: false },
- { name: "Connections", included: false },
- { name: "SOC-2 Compliance", included: false },
- { name: "On-Prem Deployment", included: false },
- ];
-
- return (
-
- {renderLogCost(requestLogs)}
- /month
- >
- }
- features={features}
- ctaText="Start building for free"
- ctaLink="https://us.helicone.ai/signup"
- ctaClassName="bg-sky-500 hover:bg-sky-600 border-2 border-sky-700 whitespace-nowrap rounded-md px-4 py-1.5 text-sm font-semibold text-white shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500 w-full flex items-center justify-center gap-2"
- >
-
-
-
- {new Intl.NumberFormat("us", {
- minimumFractionDigits: 0,
- maximumFractionDigits: 0,
- }).format(requestLogs)}
- requests / month
-
-
-
-
-
- );
-};
-
-export default GrowthCard;
diff --git a/bifrost/app/components/templates/pricing/ScaleCard.tsx b/bifrost/app/components/templates/pricing/ScaleCard.tsx
index 523bd34eb0..ad93210f02 100644
--- a/bifrost/app/components/templates/pricing/ScaleCard.tsx
+++ b/bifrost/app/components/templates/pricing/ScaleCard.tsx
@@ -1,118 +1,64 @@
-import { useState } from "react";
-import BaseCard from "./BaseCard";
-import Slider from "./Slider";
-import { renderLogCost } from "@/app/utils/pricingUtils";
+import { Card } from "@/components/ui/card";
import { Col } from "@/components/common/col";
-import { Button } from "@/components/ui/button";
-
-import { Switch } from "@/components/ui/switch";
-
-import {
- Table,
- TableBody,
- TableCaption,
- TableCell,
- TableHead,
- TableHeader,
- TableRow,
-} from "@/components/ui/table";
+import { Row } from "@/components/common/row";
+import { CheckIcon } from "@heroicons/react/24/outline";
+import { FeatureItem } from "./FeaturedItem";
const ScaleCard: React.FC = () => {
- const [requestLogs, setRequestLogs] = useState(0);
- const [promptCount, setPromptCount] = useState(0);
-
- const handleRequestLogChange = (newValue: number) => {
- setRequestLogs(newValue);
- };
-
- const handlePromptCountChange = (newValue: number) => {
- setPromptCount(newValue);
- };
-
- const calculatePromptCost = (count: number) => {
- if (count <= 3) return 0;
- return (count - 3) * 25;
- };
+ return (
+
+
+
+ Recommended
+
+ for serious AI developers
+
+
+
+
+
+
+ Team
+
+
+
+
+
+ $40
+
- const features = [
- { name: "Observability and Analytics", included: true },
- { name: "Feature-Rich Tooling", included: true },
- { name: "Prompt Templates", included: true },
- { name: "Prompt Experiments", included: true },
- { name: "SOC-2 Compliance", included: false },
- { name: "On-Prem Deployment", included: false },
- ];
+ /mo
+
- const totalCost =
- parseFloat(renderLogCost(requestLogs).replace(/[^0-9.-]+/g, "")) +
- calculatePromptCost(promptCount);
+
+ $50/mo
+
+
- return (
-
- ${totalCost.toFixed(2)}
- /month
- >
- }
- features={features}
- ctaText="Get started for free"
- ctaLink="https://us.helicone.ai/signup"
- >
-
-
- Scale
-
- Enable scaling
+
+ Everything to kickstart your AI project.
+
+
-
-
- {new Intl.NumberFormat("us", {
- minimumFractionDigits: 0,
- maximumFractionDigits: 0,
- }).format(requestLogs)}
- requests / month
-
-
+
-
-
-
-
- {promptCount}{" "}
- prompts
-
-
-
- First 3 prompts free, then $25/prompt
-
-
-
-
+
+
+
+
+
);
};
diff --git a/bifrost/app/pricing/page.tsx b/bifrost/app/pricing/page.tsx
index 3384f55828..fbdc3e52ff 100644
--- a/bifrost/app/pricing/page.tsx
+++ b/bifrost/app/pricing/page.tsx
@@ -20,10 +20,20 @@ import RequestLogTable, {
} from "@/components/templates/pricing/requestLogTable";
import FeatureTable from "@/components/templates/pricing/featureTable";
import ScaleCard from "../components/templates/pricing/ScaleCard";
-import GrowthCard from "../components/templates/pricing/GrowthCard";
+import FreeCard from "../components/templates/pricing/FreeCard";
import EnterpriseCard from "../components/templates/pricing/EnterpriseCard";
import { renderLogCost } from "@/app/utils/pricingUtils";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+import { Button } from "@/components/ui/button";
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
+import {
+ Card,
+ CardDescription,
+ CardHeader,
+ CardTitle,
+} from "@/components/ui/card";
const Slider = ({
min,
@@ -149,38 +159,109 @@ export default function Example() {
Get a demo
-
-
+
+
-
-
+
+
+
+
+
+ 386 hours saved by using cached responses.
+
+ LOGO
+
+
+ Developer
+
+
+
+
+
+
+
+
+ 2 days saved combing through requests.
+
+ LOGO
+
+
+ Scale
+
+
+
+
+
+
+
+
+ Critical bug detected, saved agent runtime by 30%.
+
+ LOGO
+
+
+ Enterprise
+
+
+
+
+
- {showPlans && (
- <>
-
-
- Request Log Table Rates
-
-
+
+
+ Compare plans
+
+
+
+
+
+ Developer
+ Team
+
+ {/* Add your content here */}
+
+ Additional information or controls
+
+
+
+
+ Developer
+
+ For most startups under two years old, we offer 50% off
+ for the first year.
+
+
+
+
+
+
+
+
+
+ Team plan
+
+
+ $50/mo
+
+
+
+ $40
+
-
- >
- )}
+ /mo
+
+
+
+
+
+
+
+
diff --git a/bifrost/components/templates/pricing/DeveloperCard.tsx b/bifrost/components/templates/pricing/DeveloperCard.tsx
new file mode 100644
index 0000000000..1e54de52da
--- /dev/null
+++ b/bifrost/components/templates/pricing/DeveloperCard.tsx
@@ -0,0 +1,24 @@
+import { Button } from "@/components/ui/button";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+
+const DeveloperCard = () => {
+ return (
+
+
+
+
+ 386 hours saved by using cached responses.
+
+ LOGO
+
+
+ Developer
+
+
+
+
+ );
+};
+
+export default DeveloperCard;
diff --git a/bifrost/components/templates/pricing/EnterpriseCard.tsx b/bifrost/components/templates/pricing/EnterpriseCard.tsx
new file mode 100644
index 0000000000..e7afc5c949
--- /dev/null
+++ b/bifrost/components/templates/pricing/EnterpriseCard.tsx
@@ -0,0 +1,24 @@
+import { Button } from "@/components/ui/button";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+
+const EnterpriseCard = () => {
+ return (
+
+
+
+
+ Critical bug detected, saved agent runtime by 30%.
+
+ LOGO
+
+
+ Enterprise
+
+
+
+
+ );
+};
+
+export default EnterpriseCard;
diff --git a/bifrost/components/templates/pricing/ScaleCard.tsx b/bifrost/components/templates/pricing/ScaleCard.tsx
new file mode 100644
index 0000000000..71fc86e0c6
--- /dev/null
+++ b/bifrost/components/templates/pricing/ScaleCard.tsx
@@ -0,0 +1,24 @@
+import { Button } from "@/components/ui/button";
+import { Col } from "@/components/common/col";
+import { Row } from "@/components/common/row";
+
+const ScaleCard = () => {
+ return (
+
+
+
+
+ 2 days saved combing through requests.
+
+ LOGO
+
+
+ Scale
+
+
+
+
+ );
+};
+
+export default ScaleCard;
diff --git a/bifrost/components/ui/card.tsx b/bifrost/components/ui/card.tsx
new file mode 100644
index 0000000000..77e9fb789b
--- /dev/null
+++ b/bifrost/components/ui/card.tsx
@@ -0,0 +1,76 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Card = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+Card.displayName = "Card"
+
+const CardHeader = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardHeader.displayName = "CardHeader"
+
+const CardTitle = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardTitle.displayName = "CardTitle"
+
+const CardDescription = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardDescription.displayName = "CardDescription"
+
+const CardContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardContent.displayName = "CardContent"
+
+const CardFooter = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardFooter.displayName = "CardFooter"
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
diff --git a/bifrost/components/ui/tabs.tsx b/bifrost/components/ui/tabs.tsx
new file mode 100644
index 0000000000..0f4caebb11
--- /dev/null
+++ b/bifrost/components/ui/tabs.tsx
@@ -0,0 +1,55 @@
+"use client"
+
+import * as React from "react"
+import * as TabsPrimitive from "@radix-ui/react-tabs"
+
+import { cn } from "@/lib/utils"
+
+const Tabs = TabsPrimitive.Root
+
+const TabsList = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+TabsList.displayName = TabsPrimitive.List.displayName
+
+const TabsTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
+
+const TabsContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+TabsContent.displayName = TabsPrimitive.Content.displayName
+
+export { Tabs, TabsList, TabsTrigger, TabsContent }
diff --git a/bifrost/package.json b/bifrost/package.json
index 6c1d971dd1..1482b98c3a 100644
--- a/bifrost/package.json
+++ b/bifrost/package.json
@@ -18,6 +18,7 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-switch": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.11",
"class-variance-authority": "^0.7.0",
diff --git a/bifrost/yarn.lock b/bifrost/yarn.lock
index 088e06c78a..d901084bb8 100644
--- a/bifrost/yarn.lock
+++ b/bifrost/yarn.lock
@@ -323,6 +323,16 @@
resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2"
integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==
+"@radix-ui/react-collection@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed"
+ integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.0"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-slot" "1.1.0"
+
"@radix-ui/react-compose-refs@1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74"
@@ -333,11 +343,31 @@
resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8"
integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==
+"@radix-ui/react-direction@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc"
+ integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==
+
"@radix-ui/react-icons@^1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69"
integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==
+"@radix-ui/react-id@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed"
+ integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==
+ dependencies:
+ "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-presence@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.0.tgz#227d84d20ca6bfe7da97104b1a8b48a833bfb478"
+ integrity sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.0"
+
"@radix-ui/react-primitive@2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884"
@@ -345,6 +375,21 @@
dependencies:
"@radix-ui/react-slot" "1.1.0"
+"@radix-ui/react-roving-focus@1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e"
+ integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-collection" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.0"
+ "@radix-ui/react-direction" "1.1.0"
+ "@radix-ui/react-id" "1.1.0"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-use-callback-ref" "1.1.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+
"@radix-ui/react-slot@1.1.0", "@radix-ui/react-slot@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84"
@@ -365,6 +410,20 @@
"@radix-ui/react-use-previous" "1.1.0"
"@radix-ui/react-use-size" "1.1.0"
+"@radix-ui/react-tabs@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz#0a6db1caed56776a1176aae68532060e301cc1c0"
+ integrity sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-context" "1.1.0"
+ "@radix-ui/react-direction" "1.1.0"
+ "@radix-ui/react-id" "1.1.0"
+ "@radix-ui/react-presence" "1.1.0"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-roving-focus" "1.1.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+
"@radix-ui/react-use-callback-ref@1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1"
diff --git a/web/components/templates/playground/playgroundPage.tsx b/web/components/templates/playground/playgroundPage.tsx
index 43f26a1fe5..ffacd25114 100644
--- a/web/components/templates/playground/playgroundPage.tsx
+++ b/web/components/templates/playground/playgroundPage.tsx
@@ -42,6 +42,7 @@ import React from "react";
import { useLocalStorage } from "../../../services/hooks/localStorage";
import Link from "next/link";
import { Row } from "../../layout/common";
+import { useQuery } from "@tanstack/react-query";
const PlaygroundPage = (props: PlaygroundPageProps) => {
const { request, showNewButton } = props;
@@ -59,14 +60,13 @@ const PlaygroundPage = (props: PlaygroundPageProps) => {
const [currentTools, setCurrentTools] = useState();
const [providerAPIKey, setProviderAPIKey] = useState();
- const memoedPlaygroundModels = useMemo(() => {
- return PLAYGROUND_MODELS.filter((model) => model.provider !== "AZURE").sort(
- (a, b) => a.name.localeCompare(b.name)
- );
- }, []);
- const [playgroundModels, setPlaygroundModels] = useState(
- memoedPlaygroundModels
- );
+ const fineTuneModels = useFineTuneModels(providerAPIKey);
+
+ const playgroundModels = useMemo(() => {
+ return PLAYGROUND_MODELS.filter((model) => model.provider !== "AZURE")
+ .concat(fineTuneModels.data || [])
+ .sort((a, b) => a.name.localeCompare(b.name));
+ }, [fineTuneModels]);
const singleRequest = data.length > 0 ? data[0] : null;
const singleModel = useMemo(
@@ -104,10 +104,6 @@ const PlaygroundPage = (props: PlaygroundPageProps) => {
}
}, [tools, requestId]);
- useEffect(() => {
- fetchFineTuneModels(providerAPIKey, setPlaygroundModels);
- }, [providerAPIKey]);
-
const [newPlaygroundOpen, setNewPlaygroundOpen] = useLocalStorage(
"newPlaygroundOpen",
false
@@ -335,9 +331,7 @@ const PlaygroundPage = (props: PlaygroundPageProps) => {
key={idx}
className="font-medium text-black"
>
-
- {model.name || ""}
-
+ {model.name || ""}
))}
@@ -671,3 +665,35 @@ export async function fetchFineTuneModels(
setPlaygroundModels((prev) => playgroundModels.concat(ftModels));
}
+
+export function useFineTuneModels(providerAPIKey: string | undefined) {
+ return useQuery({
+ queryKey: ["fine-tune-models", providerAPIKey],
+ queryFn: async (query) => {
+ const providerAPIKey = query.queryKey[1];
+ const res = await fetch("https://api.openai.com/v1/fine_tuning/jobs", {
+ headers: {
+ Authorization: `Bearer ${providerAPIKey}`,
+ "Content-Type": "application/json",
+ },
+ });
+ const ftJobsList = await res.json();
+ if (ftJobsList.error) return;
+
+ const ftJobs = ftJobsList.data as Array;
+
+ const ftModels = ftJobs
+ .map((job) => {
+ if (job.status === "succeeded") {
+ return {
+ name: job.fine_tuned_model,
+ provider: "OPENAI",
+ };
+ }
+ })
+ .filter((model) => model !== undefined) as PlaygroundModel[];
+
+ return ftModels;
+ },
+ });
+}
From 122db42c142168a0fa7b854c2fc1e8495d4a485d Mon Sep 17 00:00:00 2001
From: Justin
Date: Sun, 8 Sep 2024 16:23:45 -0600
Subject: [PATCH 03/14] comparision table
---
.../templates/pricing/EnterpriseCard.tsx | 6 +-
.../pricing/PricingComparisonTable.tsx | 180 ++++++++++++++++++
.../templates/pricing/ScaleCard.tsx | 2 +-
bifrost/app/pricing/page.tsx | 76 ++------
4 files changed, 197 insertions(+), 67 deletions(-)
create mode 100644 bifrost/app/components/templates/pricing/PricingComparisonTable.tsx
diff --git a/bifrost/app/components/templates/pricing/EnterpriseCard.tsx b/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
index 37bdaec3c0..69a27d3cd6 100644
--- a/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
+++ b/bifrost/app/components/templates/pricing/EnterpriseCard.tsx
@@ -17,7 +17,6 @@ const EnterpriseCard: React.FC = () => {
Everything to kickstart your AI project.
- Everthing in Scale, plus:
@@ -29,10 +28,7 @@ const EnterpriseCard: React.FC = () => {
title="On-prem support"
description="Custom HELM charts and work with SREs"
/>
-
+
-
+
-
+
-
+
+ LOGO
386 hours saved by using cached responses.
- LOGO
Developer
@@ -179,13 +183,13 @@ export default function Example() {
-
+
-
+
+ LOGO
2 days saved combing through requests.
- LOGO
Scale
@@ -195,13 +199,13 @@ export default function Example() {
-
+
-
+
+ LOGO
Critical bug detected, saved agent runtime by 30%.
- LOGO
Enterprise
@@ -211,58 +215,8 @@ export default function Example() {
-
-
- Compare plans
-
-
-
-
-
- Developer
- Team
-
- {/* Add your content here */}
-
- Additional information or controls
-
-
-
-
-
- Developer
-
- For most startups under two years old, we offer 50% off
- for the first year.
-
-
-
-
-
-
-
-
-
- Team plan
-
-
- $50/mo
-
-
-
- $40
-
+
- /mo
-
-
-
-
-
-
-
-
-
|