diff --git a/api/ee/src/core/entitlements/types.py b/api/ee/src/core/entitlements/types.py index 791ddfd024..5c09172b6a 100644 --- a/api/ee/src/core/entitlements/types.py +++ b/api/ee/src/core/entitlements/types.py @@ -61,8 +61,8 @@ class Probe(BaseModel): }, "features": [ "2 prompts", - "5k traces/month", "20 evaluations/month", + "5k traces/month", "2 seats", ], }, @@ -109,44 +109,66 @@ class Probe(BaseModel): }, "features": [ "Unlimited prompts", - "10k traces/month", "Unlimited evaluations", - "3 seats included", + "10k free traces/month", + "3 free seats", "Up to 10 seats", ], }, - # { - # "title": "Business", - # "description": "For scale, security, and support.", - # "type": "standard", - # "price": { - # "base": { - # "type": "flat", - # "currency": "USD", - # "amount": 399.00, - # "starting_at": True, - # }, - # }, - # "features": [ - # "Unlimited prompts", - # "Unlimited traces", - # "Unlimited evaluations", - # "Unlimited seats", - # ], - # }, { - "title": "Enterprise", - "description": "For large organizations or custom needs.", + "title": "Business", + "description": "For scale, security, and support.", "type": "standard", + "plan": Plan.CLOUD_V0_BUSINESS.value, + "price": { + "base": { + "type": "flat", + "currency": "USD", + "amount": 399.00, + }, + "traces": { + "type": "tiered", + "currency": "USD", + "tiers": [ + { + "limit": 1_000_000, + "amount": 0.00, + }, + { + "amount": 5.00, + "rate": 10_000, + }, + ], + }, + }, "features": [ "Everything in Pro", "Unlimited seats", + "1M free traces/month", + "Multiple workspaces [soon]", + "Roles and RBAC", + "SSO and MFA [soon]", "SOC 2 reports", + "HIPAA BAA [soon]", + "Private Slack Channel", + "Business SLA", + ], + }, + { + "title": "Enterprise", + "description": "For large organizations or custom needs.", + "type": "standard", + "features": [ + "Everything in Business", + "Custom roles", + "Enterprise SSO", + "Audit logs", + "Self-hosting options", + "Bring Your Own Cloud (BYOC)", "Security reviews", "Dedicated support", - "Custom SLAs", + "Custom SLA", "Custom terms", - "Self-hosted deployment options", ], }, { @@ -207,6 +229,20 @@ class Probe(BaseModel): Gauge.APPLICATIONS: Quota(strict=True), }, }, + Plan.CLOUD_V0_BUSINESS: { + Tracker.FLAGS: { + Flag.HOOKS: True, + Flag.RBAC: True, + }, + Tracker.COUNTERS: { + Counter.TRACES: Quota(monthly=True, free=1_000_000), + Counter.EVALUATIONS: Quota(monthly=True, strict=True), + }, + Tracker.GAUGES: { + Gauge.USERS: Quota(strict=True), + Gauge.APPLICATIONS: Quota(strict=True), + }, + }, Plan.CLOUD_V0_HUMANITY_LABS: { Tracker.FLAGS: { Flag.HOOKS: True, diff --git a/api/ee/src/core/subscriptions/types.py b/api/ee/src/core/subscriptions/types.py index 1f55dbe386..719133b654 100644 --- a/api/ee/src/core/subscriptions/types.py +++ b/api/ee/src/core/subscriptions/types.py @@ -11,6 +11,7 @@ class Plan(str, Enum): CLOUD_V0_HOBBY = "cloud_v0_hobby" CLOUD_V0_PRO = "cloud_v0_pro" + CLOUD_V0_BUSINESS = "cloud_v0_business" # CLOUD_V0_HUMANITY_LABS = "cloud_v0_humanity_labs" CLOUD_V0_X_LABS = "cloud_v0_x_labs" diff --git a/api/pyproject.toml b/api/pyproject.toml index 5a43a2867a..241f316ffc 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "api" -version = "0.59.2" +version = "0.59.3" description = "Agenta API" authors = [ { name = "Mahmoud Mabrouk", email = "mahmoud@agenta.ai" }, diff --git a/sdk/pyproject.toml b/sdk/pyproject.toml index c86fc0947d..fd19935298 100644 --- a/sdk/pyproject.toml +++ b/sdk/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "agenta" -version = "0.59.2" +version = "0.59.3" description = "The SDK for agenta is an open-source LLMOps platform." readme = "README.md" authors = [ diff --git a/web/ee/package.json b/web/ee/package.json index ed70a8d15a..983b7d62b2 100644 --- a/web/ee/package.json +++ b/web/ee/package.json @@ -1,6 +1,6 @@ { "name": "@agenta/ee", - "version": "0.59.2", + "version": "0.59.3", "private": true, "engines": { "node": ">=18" diff --git a/web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/PricingCard/index.tsx b/web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/PricingCard/index.tsx index 31d60e6dda..0c9f98ba30 100644 --- a/web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/PricingCard/index.tsx +++ b/web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/PricingCard/index.tsx @@ -8,14 +8,25 @@ import {PricingCardProps} from "../types" const PricingCard = ({plan, currentPlan, onOptionClick, isLoading}: PricingCardProps) => { const _isLoading = isLoading === plan.plan - const isDisabled = useMemo( - () => - (isLoading !== null && isLoading !== plan.plan) || - currentPlan?.plan == plan.plan || - currentPlan?.plan == Plan.Business || - currentPlan?.plan == Plan.Enterprise, - [isLoading, currentPlan, plan], - ) + const isDisabled = useMemo(() => { + if (isLoading !== null && isLoading !== plan.plan) { + return true + } + + if (currentPlan?.plan === plan.plan) { + return true + } + + if (currentPlan?.plan === Plan.Enterprise) { + return true + } + + if (currentPlan?.plan === Plan.Business && plan.plan === Plan.Pro) { + return true + } + + return false + }, [isLoading, currentPlan?.plan, plan.plan]) return ( window.open("https://cal.com/mahmoud-mabrouk-ogzgey/demo", "_blank") } > - {currentPlan?.plan == Plan.Business || currentPlan?.plan == Plan.Enterprise - ? "Current plan" - : "Talk to us"} + {currentPlan?.plan == Plan.Enterprise ? "Current plan" : "Talk to us"} ) : (