From e84d7c5605dadca2191128448cdd9a890acf2a19 Mon Sep 17 00:00:00 2001 From: Robert Lin Date: Mon, 1 May 2023 13:08:01 -0700 Subject: [PATCH] dotcom: add llm-proxy access state (#51242) Implements tracking for LLM-proxy access state for #50726: 1. New database fields for tracking access enabled, rate limit, and rate limit interval 2. GraphQL queries and mutations for LLM-proxy access state 3. Ability to hardcode defaults for rate limits based on active license plan 4. Super-simple UI for showing LLM-proxy access state, behind feature flag `llm-proxy-management-ui` (the access token component from #51074 are now behind this flag too) Supsersedes #51075 ## Test plan Some lightweight tests, and some manual testing: image ![image](https://user-images.githubusercontent.com/23356519/235026164-01358b66-5b7f-43a4-9da9-26a808cd2cb1.png) --- .../SiteAdminProductSubscriptionPage.test.tsx | 5 + .../SiteAdminProductSubscriptionPage.tsx | 29 +- ...AdminProductSubscriptionPage.test.tsx.snap | 43 ++ client/web/src/featureFlags/featureFlags.ts | 1 + cmd/frontend/graphqlbackend/dotcom.go | 27 + cmd/frontend/graphqlbackend/dotcom.graphql | 92 ++- .../dotcom/productsubscription/BUILD.bazel | 4 + .../productsubscription/llmproxy_graphql.go | 48 ++ .../llmproxy_graphql_test.go | 70 ++ .../dotcom/productsubscription/mock_db.go | 2 + .../productsubscription/subscriptions_db.go | 46 +- .../subscriptions_db_test.go | 213 +++--- .../subscriptions_graphql.go | 48 +- enterprise/internal/licensing/BUILD.bazel | 1 + enterprise/internal/licensing/llmproxy.go | 26 + enterprise/internal/licensing/plans.go | 39 +- internal/database/schema.json | 39 + internal/database/schema.md | 27 +- migrations/BUILD.bazel | 3 + .../down.sql | 4 + .../metadata.yaml | 2 + .../up.sql | 20 + migrations/frontend/squashed.sql | 11 +- pnpm-lock.yaml | 675 ++++++------------ 24 files changed, 876 insertions(+), 599 deletions(-) create mode 100644 enterprise/cmd/frontend/internal/dotcom/productsubscription/llmproxy_graphql.go create mode 100644 enterprise/cmd/frontend/internal/dotcom/productsubscription/llmproxy_graphql_test.go create mode 100644 enterprise/internal/licensing/llmproxy.go create mode 100644 migrations/frontend/1682626931_subscription_llm_proxy_state/down.sql create mode 100644 migrations/frontend/1682626931_subscription_llm_proxy_state/metadata.yaml create mode 100644 migrations/frontend/1682626931_subscription_llm_proxy_state/up.sql diff --git a/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.test.tsx b/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.test.tsx index 220855156a4..d8c4a8a3df9 100644 --- a/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.test.tsx +++ b/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.test.tsx @@ -53,6 +53,11 @@ describe('SiteAdminProductSubscriptionPage', () => { pageInfo: { hasNextPage: false }, }, activeLicense: null, + llmProxyAccess: { + __typename: 'LLMProxyAccess', + enabled: false, + rateLimit: null, + }, }) } _queryProductLicenses={() => diff --git a/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.tsx b/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.tsx index 8c9d77ac264..570520e37d4 100644 --- a/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.tsx +++ b/client/web/src/enterprise/site-admin/dotcom/productSubscriptions/SiteAdminProductSubscriptionPage.tsx @@ -22,12 +22,15 @@ import { H2, ErrorAlert, Text, + Checkbox, + H3, } from '@sourcegraph/wildcard' import { queryGraphQL, requestGraphQL } from '../../../../backend/graphql' import { CopyableText } from '../../../../components/CopyableText' import { FilteredConnection } from '../../../../components/FilteredConnection' import { PageTitle } from '../../../../components/PageTitle' +import { useFeatureFlag } from '../../../../featureFlags/useFeatureFlag' import { ArchiveProductSubscriptionResult, ArchiveProductSubscriptionVariables, @@ -136,6 +139,9 @@ export const SiteAdminProductSubscriptionPage: React.FunctionComponent = { showSubscription: false, } @@ -199,7 +205,7 @@ export const SiteAdminProductSubscriptionPage: React.FunctionComponent - +