diff --git a/.github/workflows/ci-ai-catalog-sync.yaml b/.github/workflows/ci-ai-catalog-sync.yaml new file mode 100644 index 00000000000..19b4fe9ac69 --- /dev/null +++ b/.github/workflows/ci-ai-catalog-sync.yaml @@ -0,0 +1,63 @@ +name: AI Catalog Sync + +on: + schedule: + - cron: '0 6 * * *' # Daily at 6 AM UTC + workflow_dispatch: # Allow manual trigger + +permissions: + contents: write + pull-requests: write + +jobs: + sync-catalog: + runs-on: ubuntu-latest + timeout-minutes: 10 + env: + NODE_OPTIONS: '--max-old-space-size=4096' + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: main + + - name: Install dependencies + uses: ./.github/actions/yarn-install + + - name: Build dependencies + run: npx nx build twenty-shared + + - name: Build twenty-server + run: npx nx build twenty-server + + - name: Run catalog sync + run: npx nx run twenty-server:command-no-deps ai:sync-models-dev + + - name: Check for changes + id: changes + run: | + if git diff --quiet packages/twenty-server/src/engine/metadata-modules/ai/ai-models/ai-providers.json; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + + - name: Create pull request + if: steps.changes.outputs.changed == 'true' + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: 'chore: sync AI model catalog from models.dev' + title: 'chore: sync AI model catalog from models.dev' + body: | + Automated daily sync of `ai-providers.json` from [models.dev](https://models.dev). + + This PR updates pricing, context windows, and model availability based on the latest data. + New models meeting inclusion criteria (tool calling, pricing data, context limits) are added automatically. + Deprecated models are detected based on cost-efficiency within the same model family. + + **Please review before merging** — verify no critical models were incorrectly deprecated. + branch: chore/ai-catalog-sync + base: main + labels: ai, automated + delete-branch: true diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index e3372ecbc4b..53466fdd360 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -44,19 +44,29 @@ export type AddQuerySubscriptionInput = { export type AdminAiModelConfig = { __typename?: 'AdminAIModelConfig'; - deprecated?: Maybe; - inferenceProvider: InferenceProvider; + contextWindowTokens?: Maybe; + dataResidency?: Maybe; + inputCostPerMillionTokens?: Maybe; isAdminEnabled: Scalars['Boolean']; isAvailable: Scalars['Boolean']; + isDeprecated?: Maybe; isRecommended?: Maybe; label: Scalars['String']; + maxOutputTokens?: Maybe; modelFamily?: Maybe; + modelFamilyLabel?: Maybe; modelId: Scalars['String']; + name?: Maybe; + outputCostPerMillionTokens?: Maybe; + providerLabel?: Maybe; + providerName?: Maybe; + sdkPackage?: Maybe; }; export type AdminAiModels = { __typename?: 'AdminAIModels'; - autoEnableNewModels: Scalars['Boolean']; + defaultFastModelId?: Maybe; + defaultSmartModelId?: Maybe; models: Array; }; @@ -247,6 +257,11 @@ export enum AggregateOperations { SUM = 'SUM' } +export enum AiModelRole { + FAST = 'FAST', + SMART = 'SMART' +} + export enum AllMetadataName { agent = 'agent', commandMenuItem = 'commandMenuItem', @@ -840,15 +855,18 @@ export type CheckUserExist = { export type ClientAiModelConfig = { __typename?: 'ClientAIModelConfig'; - deprecated?: Maybe; - inferenceProvider: InferenceProvider; + dataResidency?: Maybe; inputCostPerMillionTokensInCredits: Scalars['Float']; + isDeprecated?: Maybe; isRecommended?: Maybe; label: Scalars['String']; modelFamily?: Maybe; + modelFamilyLabel?: Maybe; modelId: Scalars['String']; nativeCapabilities?: Maybe; outputCostPerMillionTokensInCredits: Scalars['Float']; + providerName?: Maybe; + sdkPackage?: Maybe; }; export type ClientConfig = { @@ -937,6 +955,7 @@ export enum ConfigVariableType { ARRAY = 'ARRAY', BOOLEAN = 'BOOLEAN', ENUM = 'ENUM', + JSON = 'JSON', NUMBER = 'NUMBER', STRING = 'STRING' } @@ -2090,18 +2109,6 @@ export enum IndexType { GIN = 'GIN' } -export enum InferenceProvider { - ANTHROPIC = 'ANTHROPIC', - BEDROCK = 'BEDROCK', - GOOGLE = 'GOOGLE', - GROQ = 'GROQ', - MISTRAL = 'MISTRAL', - NONE = 'NONE', - OPENAI = 'OPENAI', - OPENAI_COMPATIBLE = 'OPENAI_COMPATIBLE', - XAI = 'XAI' -} - export type InitiateTwoFactorAuthenticationProvisioning = { __typename?: 'InitiateTwoFactorAuthenticationProvisioning'; uri: Scalars['String']; @@ -2492,17 +2499,40 @@ export type MinimalView = { }; export enum ModelFamily { - ANTHROPIC = 'ANTHROPIC', - GOOGLE = 'GOOGLE', - MISTRAL = 'MISTRAL', - OPENAI = 'OPENAI', - XAI = 'XAI' + CLAUDE = 'CLAUDE', + GEMINI = 'GEMINI', + GPT = 'GPT', + GROK = 'GROK', + MISTRAL = 'MISTRAL' } +export type ModelsDevModelSuggestion = { + __typename?: 'ModelsDevModelSuggestion'; + cacheCreationCostPerMillionTokens?: Maybe; + cachedInputCostPerMillionTokens?: Maybe; + contextWindowTokens: Scalars['Float']; + inputCostPerMillionTokens: Scalars['Float']; + maxOutputTokens: Scalars['Float']; + modalities: Array; + modelId: Scalars['String']; + name: Scalars['String']; + outputCostPerMillionTokens: Scalars['Float']; + supportsReasoning: Scalars['Boolean']; +}; + +export type ModelsDevProviderSuggestion = { + __typename?: 'ModelsDevProviderSuggestion'; + id: Scalars['String']; + modelCount: Scalars['Float']; + npm: Scalars['String']; +}; + export type Mutation = { __typename?: 'Mutation'; activateSkill: Skill; activateWorkspace: Workspace; + addAiProvider: Scalars['Boolean']; + addModelToProvider: Scalars['Boolean']; addQueryToEventStream: Scalars['Boolean']; assignRoleToAgent: Scalars['Boolean']; assignRoleToApiKey: Scalars['Boolean']; @@ -2612,6 +2642,8 @@ export type Mutation = { installApplication: Scalars['Boolean']; installMarketplaceApp: Scalars['Boolean']; refreshEnterpriseValidityToken: Scalars['Boolean']; + removeAiProvider: Scalars['Boolean']; + removeModelFromProvider: Scalars['Boolean']; removeQueryFromEventStream: Scalars['Boolean']; removeRoleFromAgent: Scalars['Boolean']; renewApplicationToken: ApplicationTokenPair; @@ -2626,6 +2658,8 @@ export type Mutation = { saveImapSmtpCaldavAccount: ImapSmtpCaldavConnectionSuccess; sendInvitations: SendInvitations; setAdminAiModelEnabled: Scalars['Boolean']; + setAdminAiModelRecommended: Scalars['Boolean']; + setAdminDefaultAiModel: Scalars['Boolean']; setEnterpriseKey: EnterpriseLicenseInfoDto; setMeteredSubscriptionPrice: BillingUpdate; signIn: AvailableWorkspacesAndAccessTokens; @@ -2710,6 +2744,18 @@ export type MutationActivateWorkspaceArgs = { }; +export type MutationAddAiProviderArgs = { + providerConfig: Scalars['JSON']; + providerName: Scalars['String']; +}; + + +export type MutationAddModelToProviderArgs = { + modelConfig: Scalars['JSON']; + providerName: Scalars['String']; +}; + + export type MutationAddQueryToEventStreamArgs = { input: AddQuerySubscriptionInput; }; @@ -3221,6 +3267,17 @@ export type MutationInstallMarketplaceAppArgs = { }; +export type MutationRemoveAiProviderArgs = { + providerName: Scalars['String']; +}; + + +export type MutationRemoveModelFromProviderArgs = { + modelName: Scalars['String']; + providerName: Scalars['String']; +}; + + export type MutationRemoveQueryFromEventStreamArgs = { input: RemoveQueryFromEventStreamInput; }; @@ -3299,6 +3356,18 @@ export type MutationSetAdminAiModelEnabledArgs = { }; +export type MutationSetAdminAiModelRecommendedArgs = { + modelId: Scalars['String']; + recommended: Scalars['Boolean']; +}; + + +export type MutationSetAdminDefaultAiModelArgs = { + modelId: Scalars['String']; + role: AiModelRole; +}; + + export type MutationSetEnterpriseKeyArgs = { enterpriseKey: Scalars['String']; }; @@ -4164,6 +4233,7 @@ export type Query = { getAISystemPromptPreview: AiSystemPromptPreview; getAddressDetails: PlaceDetailsResult; getAdminAiModels: AdminAiModels; + getAiProviders: Scalars['JSON']; getApprovedAccessDomains: Array; getAutoCompleteAddress: Array; getAvailablePackages: Scalars['JSON']; @@ -4174,6 +4244,8 @@ export type Query = { getIndicatorHealthStatus: AdminPanelHealthServiceData; getLogicFunctionSourceCode?: Maybe; getMeteredProductsUsage: Array; + getModelsDevProviders: Array; + getModelsDevSuggestions: Array; getPageLayout?: Maybe; getPageLayoutTab: PageLayoutTab; getPageLayoutTabs: Array; @@ -4406,6 +4478,11 @@ export type QueryGetLogicFunctionSourceCodeArgs = { }; +export type QueryGetModelsDevSuggestionsArgs = { + providerType: Scalars['String']; +}; + + export type QueryGetPageLayoutArgs = { id: Scalars['String']; }; @@ -5426,10 +5503,8 @@ export type UpdateWebhookInputUpdates = { export type UpdateWorkspaceInput = { aiAdditionalInstructions?: InputMaybe; allowImpersonation?: InputMaybe; - autoEnableNewAiModels?: InputMaybe; customDomain?: InputMaybe; defaultRoleId?: InputMaybe; - disabledAiModelIds?: InputMaybe>; displayName?: InputMaybe; editableProfileFields?: InputMaybe>; enabledAiModelIds?: InputMaybe>; @@ -5876,7 +5951,6 @@ export type Workspace = { activationStatus: WorkspaceActivationStatus; aiAdditionalInstructions?: Maybe; allowImpersonation: Scalars['Boolean']; - autoEnableNewAiModels: Scalars['Boolean']; billingEntitlements: Array; billingSubscriptions: Array; createdAt: Scalars['DateTime']; @@ -5886,7 +5960,6 @@ export type Workspace = { databaseUrl: Scalars['String']; defaultRole?: Maybe; deletedAt?: Maybe; - disabledAiModelIds?: Maybe>; displayName?: Maybe; editableProfileFields?: Maybe>; enabledAiModelIds?: Maybe>; @@ -6909,6 +6982,37 @@ export type MyMessageFoldersQueryVariables = Exact<{ export type MyMessageFoldersQuery = { __typename?: 'Query', myMessageFolders: Array<{ __typename?: 'MessageFolder', id: string, name?: string | null, isSynced: boolean, isSentFolder: boolean, parentFolderId?: string | null, externalId?: string | null, messageChannelId: string, createdAt: string, updatedAt: string }> }; +export type AddAiProviderMutationVariables = Exact<{ + providerName: Scalars['String']; + providerConfig: Scalars['JSON']; +}>; + + +export type AddAiProviderMutation = { __typename?: 'Mutation', addAiProvider: boolean }; + +export type AddModelToProviderMutationVariables = Exact<{ + providerName: Scalars['String']; + modelConfig: Scalars['JSON']; +}>; + + +export type AddModelToProviderMutation = { __typename?: 'Mutation', addModelToProvider: boolean }; + +export type RemoveAiProviderMutationVariables = Exact<{ + providerName: Scalars['String']; +}>; + + +export type RemoveAiProviderMutation = { __typename?: 'Mutation', removeAiProvider: boolean }; + +export type RemoveModelFromProviderMutationVariables = Exact<{ + providerName: Scalars['String']; + modelName: Scalars['String']; +}>; + + +export type RemoveModelFromProviderMutation = { __typename?: 'Mutation', removeModelFromProvider: boolean }; + export type SetAdminAiModelEnabledMutationVariables = Exact<{ modelId: Scalars['String']; enabled: Scalars['Boolean']; @@ -6917,10 +7021,43 @@ export type SetAdminAiModelEnabledMutationVariables = Exact<{ export type SetAdminAiModelEnabledMutation = { __typename?: 'Mutation', setAdminAiModelEnabled: boolean }; +export type SetAdminAiModelRecommendedMutationVariables = Exact<{ + modelId: Scalars['String']; + recommended: Scalars['Boolean']; +}>; + + +export type SetAdminAiModelRecommendedMutation = { __typename?: 'Mutation', setAdminAiModelRecommended: boolean }; + +export type SetAdminDefaultAiModelMutationVariables = Exact<{ + role: AiModelRole; + modelId: Scalars['String']; +}>; + + +export type SetAdminDefaultAiModelMutation = { __typename?: 'Mutation', setAdminDefaultAiModel: boolean }; + export type GetAdminAiModelsQueryVariables = Exact<{ [key: string]: never; }>; -export type GetAdminAiModelsQuery = { __typename?: 'Query', getAdminAiModels: { __typename?: 'AdminAIModels', autoEnableNewModels: boolean, models: Array<{ __typename?: 'AdminAIModelConfig', modelId: string, label: string, modelFamily?: ModelFamily | null, inferenceProvider: InferenceProvider, isAvailable: boolean, isAdminEnabled: boolean, deprecated?: boolean | null, isRecommended?: boolean | null }> } }; +export type GetAdminAiModelsQuery = { __typename?: 'Query', getAdminAiModels: { __typename?: 'AdminAIModels', defaultSmartModelId?: string | null, defaultFastModelId?: string | null, models: Array<{ __typename?: 'AdminAIModelConfig', modelId: string, label: string, modelFamily?: ModelFamily | null, sdkPackage?: string | null, isAvailable: boolean, isAdminEnabled: boolean, isDeprecated?: boolean | null, isRecommended?: boolean | null, contextWindowTokens?: number | null, maxOutputTokens?: number | null, inputCostPerMillionTokens?: number | null, outputCostPerMillionTokens?: number | null, providerName?: string | null, providerLabel?: string | null, name?: string | null, dataResidency?: string | null }> } }; + +export type GetAiProvidersQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetAiProvidersQuery = { __typename?: 'Query', getAiProviders: any }; + +export type GetModelsDevProvidersQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetModelsDevProvidersQuery = { __typename?: 'Query', getModelsDevProviders: Array<{ __typename?: 'ModelsDevProviderSuggestion', id: string, modelCount: number, npm: string }> }; + +export type GetModelsDevSuggestionsQueryVariables = Exact<{ + providerType: Scalars['String']; +}>; + + +export type GetModelsDevSuggestionsQuery = { __typename?: 'Query', getModelsDevSuggestions: Array<{ __typename?: 'ModelsDevModelSuggestion', modelId: string, name: string, inputCostPerMillionTokens: number, outputCostPerMillionTokens: number, cachedInputCostPerMillionTokens?: number | null, cacheCreationCostPerMillionTokens?: number | null, contextWindowTokens: number, maxOutputTokens: number, modalities: Array, supportsReasoning: boolean }> }; export type FindAllApplicationRegistrationsQueryVariables = Exact<{ [key: string]: never; }>; @@ -7437,7 +7574,7 @@ export type BillingSubscriptionFragmentFragment = { __typename?: 'BillingSubscri export type CurrentBillingSubscriptionFragmentFragment = { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null }; -export type UserQueryFragmentFragment = { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, autoEnableNewAiModels: boolean, disabledAiModelIds?: Array | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } }; +export type UserQueryFragmentFragment = { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } }; export type WorkspaceUrlsFragmentFragment = { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }; @@ -7456,7 +7593,7 @@ export type DeleteUserWorkspaceMutation = { __typename?: 'Mutation', deleteUserF export type GetCurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, autoEnableNewAiModels: boolean, disabledAiModelIds?: Array | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } } }; +export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } } }; export type ViewFieldFragmentFragment = { __typename?: 'ViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, viewFieldGroupId?: string | null, isOverridden: boolean, createdAt: string, updatedAt: string, deletedAt?: string | null }; @@ -7896,7 +8033,7 @@ export const BillingSubscriptionFragmentFragmentDoc = {"kind":"Document","defini export const RoleFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}}]} as unknown as DocumentNode; export const AvailableWorkspaceFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; export const AvailableWorkspacesFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; -export const UserQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"autoEnableNewAiModels"}},{"kind":"Field","name":{"kind":"Name","value":"disabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}}]} as unknown as DocumentNode; +export const UserQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}}]} as unknown as DocumentNode; export const ViewFieldFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const ViewFieldGroupFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFieldGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}},{"kind":"Field","name":{"kind":"Name","value":"viewFields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const ViewFilterFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFilterFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFilter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"viewFilterGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInViewFilterGroup"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; @@ -8022,8 +8159,17 @@ export const MyCalendarChannelsDocument = {"kind":"Document","definitions":[{"ki export const MyConnectedAccountsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyConnectedAccounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myConnectedAccounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"provider"}},{"kind":"Field","name":{"kind":"Name","value":"authFailedAt"}},{"kind":"Field","name":{"kind":"Name","value":"scopes"}},{"kind":"Field","name":{"kind":"Name","value":"handleAliases"}},{"kind":"Field","name":{"kind":"Name","value":"lastSignedInAt"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const MyMessageChannelsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyMessageChannels"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"connectedAccountId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myMessageChannels"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"connectedAccountId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"connectedAccountId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"handle"}},{"kind":"Field","name":{"kind":"Name","value":"visibility"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"isContactAutoCreationEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"contactAutoCreationPolicy"}},{"kind":"Field","name":{"kind":"Name","value":"messageFolderImportPolicy"}},{"kind":"Field","name":{"kind":"Name","value":"excludeNonProfessionalEmails"}},{"kind":"Field","name":{"kind":"Name","value":"excludeGroupEmails"}},{"kind":"Field","name":{"kind":"Name","value":"isSyncEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"syncStage"}},{"kind":"Field","name":{"kind":"Name","value":"syncStageStartedAt"}},{"kind":"Field","name":{"kind":"Name","value":"connectedAccountId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const MyMessageFoldersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MyMessageFolders"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"messageChannelId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"myMessageFolders"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"messageChannelId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"messageChannelId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"isSynced"}},{"kind":"Field","name":{"kind":"Name","value":"isSentFolder"}},{"kind":"Field","name":{"kind":"Name","value":"parentFolderId"}},{"kind":"Field","name":{"kind":"Name","value":"externalId"}},{"kind":"Field","name":{"kind":"Name","value":"messageChannelId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const AddAiProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddAiProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerConfig"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"JSON"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addAiProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"providerName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"providerConfig"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerConfig"}}}]}]}}]} as unknown as DocumentNode; +export const AddModelToProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddModelToProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"modelConfig"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"JSON"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addModelToProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"providerName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"modelConfig"},"value":{"kind":"Variable","name":{"kind":"Name","value":"modelConfig"}}}]}]}}]} as unknown as DocumentNode; +export const RemoveAiProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RemoveAiProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"removeAiProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"providerName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}}}]}]}}]} as unknown as DocumentNode; +export const RemoveModelFromProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RemoveModelFromProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"modelName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"removeModelFromProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"providerName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"modelName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"modelName"}}}]}]}}]} as unknown as DocumentNode; export const SetAdminAiModelEnabledDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetAdminAiModelEnabled"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"enabled"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setAdminAiModelEnabled"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"modelId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}}},{"kind":"Argument","name":{"kind":"Name","value":"enabled"},"value":{"kind":"Variable","name":{"kind":"Name","value":"enabled"}}}]}]}}]} as unknown as DocumentNode; -export const GetAdminAiModelsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAdminAiModels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getAdminAiModels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"autoEnableNewModels"}},{"kind":"Field","name":{"kind":"Name","value":"models"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"modelFamily"}},{"kind":"Field","name":{"kind":"Name","value":"inferenceProvider"}},{"kind":"Field","name":{"kind":"Name","value":"isAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"isAdminEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"deprecated"}},{"kind":"Field","name":{"kind":"Name","value":"isRecommended"}}]}}]}}]}}]} as unknown as DocumentNode; +export const SetAdminAiModelRecommendedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetAdminAiModelRecommended"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"recommended"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setAdminAiModelRecommended"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"modelId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}}},{"kind":"Argument","name":{"kind":"Name","value":"recommended"},"value":{"kind":"Variable","name":{"kind":"Name","value":"recommended"}}}]}]}}]} as unknown as DocumentNode; +export const SetAdminDefaultAiModelDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetAdminDefaultAiModel"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"role"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AiModelRole"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setAdminDefaultAiModel"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"role"},"value":{"kind":"Variable","name":{"kind":"Name","value":"role"}}},{"kind":"Argument","name":{"kind":"Name","value":"modelId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"modelId"}}}]}]}}]} as unknown as DocumentNode; +export const GetAdminAiModelsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAdminAiModels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getAdminAiModels"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"defaultSmartModelId"}},{"kind":"Field","name":{"kind":"Name","value":"defaultFastModelId"}},{"kind":"Field","name":{"kind":"Name","value":"models"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"modelFamily"}},{"kind":"Field","name":{"kind":"Name","value":"sdkPackage"}},{"kind":"Field","name":{"kind":"Name","value":"isAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"isAdminEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isDeprecated"}},{"kind":"Field","name":{"kind":"Name","value":"isRecommended"}},{"kind":"Field","name":{"kind":"Name","value":"contextWindowTokens"}},{"kind":"Field","name":{"kind":"Name","value":"maxOutputTokens"}},{"kind":"Field","name":{"kind":"Name","value":"inputCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"outputCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"providerName"}},{"kind":"Field","name":{"kind":"Name","value":"providerLabel"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"dataResidency"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetAiProvidersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAiProviders"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getAiProviders"}}]}}]} as unknown as DocumentNode; +export const GetModelsDevProvidersDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetModelsDevProviders"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getModelsDevProviders"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"modelCount"}},{"kind":"Field","name":{"kind":"Name","value":"npm"}}]}}]}}]} as unknown as DocumentNode; +export const GetModelsDevSuggestionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetModelsDevSuggestions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"providerType"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getModelsDevSuggestions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"providerType"},"value":{"kind":"Variable","name":{"kind":"Name","value":"providerType"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"inputCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"outputCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"cachedInputCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"cacheCreationCostPerMillionTokens"}},{"kind":"Field","name":{"kind":"Name","value":"contextWindowTokens"}},{"kind":"Field","name":{"kind":"Name","value":"maxOutputTokens"}},{"kind":"Field","name":{"kind":"Name","value":"modalities"}},{"kind":"Field","name":{"kind":"Name","value":"supportsReasoning"}}]}}]}}]} as unknown as DocumentNode; export const FindAllApplicationRegistrationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindAllApplicationRegistrations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findAllApplicationRegistrations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationRegistrationFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationRegistrationFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApplicationRegistration"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}},{"kind":"Field","name":{"kind":"Name","value":"author"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthClientId"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthRedirectUris"}},{"kind":"Field","name":{"kind":"Name","value":"oAuthScopes"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"sourcePackage"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"websiteUrl"}},{"kind":"Field","name":{"kind":"Name","value":"termsUrl"}},{"kind":"Field","name":{"kind":"Name","value":"isListed"}},{"kind":"Field","name":{"kind":"Name","value":"isFeatured"}},{"kind":"Field","name":{"kind":"Name","value":"ownerWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const CreateDatabaseConfigVariableDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateDatabaseConfigVariable"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"key"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"value"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"JSON"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createDatabaseConfigVariable"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"key"},"value":{"kind":"Variable","name":{"kind":"Name","value":"key"}}},{"kind":"Argument","name":{"kind":"Name","value":"value"},"value":{"kind":"Variable","name":{"kind":"Name","value":"value"}}}]}]}}]} as unknown as DocumentNode; export const DeleteDatabaseConfigVariableDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteDatabaseConfigVariable"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"key"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteDatabaseConfigVariable"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"key"},"value":{"kind":"Variable","name":{"kind":"Name","value":"key"}}}]}]}}]} as unknown as DocumentNode; @@ -8098,7 +8244,7 @@ export const GetSsoIdentityProvidersDocument = {"kind":"Document","definitions": export const VerifyTwoFactorAuthenticationMethodForAuthenticatedUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"verifyTwoFactorAuthenticationMethodForAuthenticatedUser"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"otp"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"verifyTwoFactorAuthenticationMethodForAuthenticatedUser"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"otp"},"value":{"kind":"Variable","name":{"kind":"Name","value":"otp"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; export const DeleteUserAccountDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteUserAccount"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const DeleteUserWorkspaceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteUserWorkspace"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberIdToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteUserFromWorkspace"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceMemberIdToDelete"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberIdToDelete"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const GetCurrentUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserQueryFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"autoEnableNewAiModels"}},{"kind":"Field","name":{"kind":"Name","value":"disabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}}]} as unknown as DocumentNode; +export const GetCurrentUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserQueryFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}}]} as unknown as DocumentNode; export const CreateManyViewFieldGroupsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewFieldGroups"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewFieldGroupInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewFieldGroups"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFieldGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}},{"kind":"Field","name":{"kind":"Name","value":"viewFields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}}]} as unknown as DocumentNode; export const CreateManyViewFieldsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewFields"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewFieldInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewFields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isOverridden"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const CreateManyViewGroupsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewGroups"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewGroupInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewGroups"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"fieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; diff --git a/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx b/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx index 5732232a664..1779b5a9ab1 100644 --- a/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx +++ b/packages/twenty-front/src/modules/ai/components/internal/AIChatContextUsageButton.tsx @@ -16,6 +16,7 @@ import { import { SettingsBillingLabelValueItem } from '@/billing/components/internal/SettingsBillingLabelValueItem'; import { useAtomComponentSelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentSelectorValue'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { formatNumber } from '~/utils/format/formatNumber'; const StyledContainer = styled.div` position: relative; @@ -77,19 +78,6 @@ const StyledSectionTitle = styled.span` padding-bottom: ${themeCssVariables.spacing[2]}; `; -const formatTokenCount = (count: number): string => { - if (count >= 1_000_000_000) { - return `${(count / 1_000_000_000).toFixed(1)}B`; - } - if (count >= 1_000_000) { - return `${(count / 1_000_000).toFixed(1)}M`; - } - if (count >= 1_000) { - return `${(count / 1_000).toFixed(1)}K`; - } - return count.toString(); -}; - const formatCredits = (credits: number): string => { if (Number.isInteger(credits)) { return credits.toLocaleString(); @@ -164,8 +152,15 @@ export const AIChatContextUsageButton = () => { {formattedPercentage}% - {formatTokenCount(agentChatUsage.conversationSize)} /{' '} - {formatTokenCount(agentChatUsage.contextWindowTokens)}{' '} + {formatNumber(agentChatUsage.conversationSize, { + abbreviate: true, + decimals: 1, + })}{' '} + /{' '} + {formatNumber(agentChatUsage.contextWindowTokens, { + abbreviate: true, + decimals: 1, + })}{' '} {t`tokens`} @@ -193,11 +188,17 @@ export const AIChatContextUsageButton = () => { {t`Last message`} { {t`Conversation`} [] => { +export const useAiModelOptions = (): SelectOption[] => { const aiModels = useAtomStateValue(aiModelsState); const { isModelEnabled } = useWorkspaceAiModelAvailability(); return aiModels .filter( - (model) => - (includeDeprecated || !model.deprecated) && - isModelEnabled(model.modelId, model), + (model) => !model.isDeprecated && isModelEnabled(model.modelId, model), ) .map((model) => ({ value: model.modelId, @@ -25,7 +20,9 @@ export const useAiModelOptions = ( model.modelId === DEFAULT_FAST_MODEL || model.modelId === DEFAULT_SMART_MODEL ? model.label - : `${model.label} (${getModelProviderLabel(model.modelFamily) || model.inferenceProvider})`, + : model.modelFamilyLabel + ? `${model.label} (${model.modelFamilyLabel})` + : model.label, })) .sort((a, b) => a.label.localeCompare(b.label)); }; @@ -54,5 +51,7 @@ export const useAiModelLabel = ( return model.label; } - return `${model.label} (${getModelProviderLabel(model.modelFamily) || model.inferenceProvider})`; + return model.modelFamilyLabel + ? `${model.label} (${model.modelFamilyLabel})` + : model.label; }; diff --git a/packages/twenty-front/src/modules/ai/hooks/useWorkspaceAiModelAvailability.ts b/packages/twenty-front/src/modules/ai/hooks/useWorkspaceAiModelAvailability.ts index 4e6b52ecb42..4680a1567ce 100644 --- a/packages/twenty-front/src/modules/ai/hooks/useWorkspaceAiModelAvailability.ts +++ b/packages/twenty-front/src/modules/ai/hooks/useWorkspaceAiModelAvailability.ts @@ -17,8 +17,6 @@ export const useWorkspaceAiModelAvailability = () => { const currentWorkspace = useAtomStateValue(currentWorkspaceState); const useRecommendedModels = currentWorkspace?.useRecommendedModels ?? true; - const autoEnableNewAiModels = currentWorkspace?.autoEnableNewAiModels ?? true; - const disabledAiModelIds = currentWorkspace?.disabledAiModelIds ?? []; const enabledAiModelIds = currentWorkspace?.enabledAiModelIds ?? []; const isModelEnabled = ( @@ -33,13 +31,11 @@ export const useWorkspaceAiModelAvailability = () => { return model?.isRecommended === true; } - return autoEnableNewAiModels - ? !disabledAiModelIds.includes(modelId) - : enabledAiModelIds.includes(modelId); + return enabledAiModelIds.includes(modelId); }; const realModels = aiModels.filter( - (model) => !isVirtualModel(model.modelId) && !model.deprecated, + (model) => !isVirtualModel(model.modelId) && !model.isDeprecated, ); const enabledModels = realModels.filter((model) => @@ -57,8 +53,6 @@ export const useWorkspaceAiModelAvailability = () => { realModels, allModelsWithAvailability, useRecommendedModels, - autoEnableNewAiModels, - disabledAiModelIds, enabledAiModelIds, }; }; diff --git a/packages/twenty-front/src/modules/ai/utils/extractUIToolCallParts.ts b/packages/twenty-front/src/modules/ai/utils/extractUIToolCallParts.ts index 8550ee405c3..4dfe0474ef1 100644 --- a/packages/twenty-front/src/modules/ai/utils/extractUIToolCallParts.ts +++ b/packages/twenty-front/src/modules/ai/utils/extractUIToolCallParts.ts @@ -1,14 +1,18 @@ import { type AgentChatMessageUIToolCallPart } from '@/ai/types/AgentChatMessageUIToolCallPart'; -import { type UIMessagePart } from 'ai'; +import { type UIDataTypes, type UIMessagePart, type UITools } from 'ai'; + +const isNavigateAppToolCallPart = ( + part: UIMessagePart, +): boolean => + part.type === 'tool-execute_tool' && + typeof part.input === 'object' && + part.input !== null && + 'toolName' in part.input && + (part.input as { toolName?: string }).toolName === 'navigate_app'; export const extractUIToolCallParts = ( - messageParts: UIMessagePart[], -): AgentChatMessageUIToolCallPart[] => { - const uiToolCallParts = messageParts.filter( - (probablePart) => - probablePart.type === 'tool-execute_tool' && - probablePart.input?.toolName === 'navigate_app', + messageParts: UIMessagePart[], +): AgentChatMessageUIToolCallPart[] => + messageParts.filter( + isNavigateAppToolCallPart, ) as unknown as AgentChatMessageUIToolCallPart[]; - - return uiToolCallParts; -}; diff --git a/packages/twenty-front/src/modules/ai/utils/isUIToolCallMessage.ts b/packages/twenty-front/src/modules/ai/utils/isUIToolCallMessage.ts index 56b66648361..8175072f3a7 100644 --- a/packages/twenty-front/src/modules/ai/utils/isUIToolCallMessage.ts +++ b/packages/twenty-front/src/modules/ai/utils/isUIToolCallMessage.ts @@ -1,9 +1,15 @@ import { type ExtendedUIMessage } from 'twenty-shared/ai'; +type ToolCallInput = { toolName?: string }; + +const isToolCallInput = (value: unknown): value is ToolCallInput => + typeof value === 'object' && value !== null && 'toolName' in value; + export const isUIToolCallMessage = (message: ExtendedUIMessage) => { return message.parts.some( (part) => part.type === 'tool-execute_tool' && - (part.input as any)?.toolName === 'navigate_app', + isToolCallInput(part.input) && + part.input.toolName === 'navigate_app', ); }; diff --git a/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts b/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts index 21102e15b37..1d7f029277d 100644 --- a/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts +++ b/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts @@ -74,8 +74,6 @@ const mockWorkspace = { fastModel: DEFAULT_FAST_MODEL, smartModel: DEFAULT_SMART_MODEL, routerModel: 'auto', - autoEnableNewAiModels: true, - disabledAiModelIds: [], enabledAiModelIds: [], useRecommendedModels: true, workspaceCustomApplication: CUSTOM_WORKSPACE_APPLICATION_MOCK, diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx index 0c989b05210..1b6b2ac5801 100644 --- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx +++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx @@ -380,6 +380,30 @@ const SettingsAdminConfigVariableDetails = lazy(() => })), ); +const SettingsAdminNewAiProvider = lazy(() => + import('~/pages/settings/admin-panel/SettingsAdminNewAiProvider').then( + (module) => ({ + default: module.SettingsAdminNewAiProvider, + }), + ), +); + +const SettingsAdminAiProviderDetail = lazy(() => + import('~/pages/settings/admin-panel/SettingsAdminAiProviderDetail').then( + (module) => ({ + default: module.SettingsAdminAiProviderDetail, + }), + ), +); + +const SettingsAdminNewAiModel = lazy(() => + import('~/pages/settings/admin-panel/SettingsAdminNewAiModel').then( + (module) => ({ + default: module.SettingsAdminNewAiModel, + }), + ), +); + const SettingsUpdates = lazy(() => import('~/pages/settings/updates/SettingsUpdates').then((module) => ({ default: module.SettingsUpdates, @@ -700,6 +724,18 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => ( path={SettingsPath.AdminPanelConfigVariableDetails} element={} /> + } + /> + } + /> + } + /> )} diff --git a/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts b/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts index 9b70764f3ed..5be7e451e06 100644 --- a/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts @@ -40,8 +40,6 @@ export type CurrentWorkspace = Pick< | 'smartModel' | 'aiAdditionalInstructions' | 'editableProfileFields' - | 'autoEnableNewAiModels' - | 'disabledAiModelIds' | 'enabledAiModelIds' | 'useRecommendedModels' > & { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts index a9f28316bb6..9b7cde3a7e1 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromObjectMetadata.test.ts @@ -70,8 +70,6 @@ describe('useColumnDefinitionsFromObjectMetadata', () => { eventLogRetentionDays: 365 * 3, fastModel: DEFAULT_FAST_MODEL, smartModel: DEFAULT_SMART_MODEL, - autoEnableNewAiModels: true, - disabledAiModelIds: [], enabledAiModelIds: [], useRecommendedModels: true, }); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/ModelsDevProviderLogo.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/ModelsDevProviderLogo.tsx new file mode 100644 index 00000000000..ba99d171b14 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/ModelsDevProviderLogo.tsx @@ -0,0 +1,45 @@ +import { styled } from '@linaria/react'; +import { type IconComponentProps } from 'twenty-ui/display'; + +type ModelsDevProviderLogoProps = { + logoUrl: string; +} & Pick; + +const resolvePixelSize = ( + size: IconComponentProps['size'] | undefined, +): number => { + if (typeof size === 'number') { + return size; + } + if (typeof size === 'string') { + const parsed = parseInt(size, 10); + + return Number.isNaN(parsed) ? 16 : parsed; + } + + return 16; +}; + +const StyledLogo = styled.img` + object-fit: contain; +`; + +export const ModelsDevProviderLogo = ({ + logoUrl, + size, + className, + style, +}: ModelsDevProviderLogoProps) => { + const pixelSize = resolvePixelSize(size); + + return ( + + ); +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx index e9e27c9e3df..f1429d34b59 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx @@ -1,206 +1,223 @@ -import { useState } from 'react'; +import { useMemo } from 'react'; + +import { useMutation, useQuery } from '@apollo/client/react'; +import { t } from '@lingui/core/macro'; +import { H2Title, IconBolt, IconLock, IconRobot } from 'twenty-ui/display'; +import { Card, Section } from 'twenty-ui/layout'; +import { Tag } from 'twenty-ui/components'; import { useClientConfig } from '@/client-config/hooks/useClientConfig'; +import { billingState } from '@/client-config/states/billingState'; +import { AI_PROVIDER_SOURCE } from '@/settings/admin-panel/ai/constants/AiProviderSource'; +import { SettingsAdminTabSkeletonLoader } from '@/settings/admin-panel/components/SettingsAdminTabSkeletonLoader'; +import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect'; +import { Select } from '@/ui/input/components/Select'; +import { SettingsAdminAiModelsTable } from '@/settings/admin-panel/ai/components/SettingsAdminAiModelsTable'; +import { SettingsAdminAiProviderListCard } from '@/settings/admin-panel/ai/components/SettingsAdminAiProviderListCard'; import { GET_ADMIN_AI_MODELS } from '@/settings/admin-panel/ai/graphql/queries/getAdminAiModels'; -import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; +import { GET_AI_PROVIDERS } from '@/settings/admin-panel/ai/graphql/queries/getAiProviders'; +import { type GetAiProvidersResult } from '@/settings/admin-panel/ai/types/GetAiProvidersResult'; +import { parseProviderItems } from '@/settings/admin-panel/ai/utils/parseProviderItems'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; -import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; -import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; -import { t } from '@lingui/core/macro'; -import { H2Title, IconArchive, IconPlug, IconRobot } from 'twenty-ui/display'; -import { SearchInput } from 'twenty-ui/input'; -import { Card, Section } from 'twenty-ui/layout'; -import { MenuItemToggle } from 'twenty-ui/navigation'; -import { useMutation, useQuery } from '@apollo/client/react'; +import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth'; +import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { SET_ADMIN_AI_MODEL_RECOMMENDED } from '@/settings/admin-panel/ai/graphql/mutations/setAdminAiModelRecommended'; +import { SET_ADMIN_DEFAULT_AI_MODEL } from '@/settings/admin-panel/ai/graphql/mutations/setAdminDefaultAiModel'; +import { getModelIcon } from '@/settings/admin-panel/ai/utils/getModelIcon'; import { - CreateDatabaseConfigVariableDocument, - GetAdminAiModelsDocument, - SetAdminAiModelEnabledDocument, + AiModelRole, + type AdminAiModelConfig, } from '~/generated-metadata/graphql'; -import { getModelIcon } from '~/pages/settings/ai/utils/getModelIcon'; -import { getModelProviderLabel } from '~/pages/settings/ai/utils/getModelProviderLabel'; export const SettingsAdminAI = () => { const { enqueueErrorSnackBar } = useSnackBar(); - const [searchQuery, setSearchQuery] = useState(''); - const [showUnconfigured, setShowUnconfigured] = useState(false); - const [showDeprecated, setShowDeprecated] = useState(false); + const billing = useAtomStateValue(billingState); + const isBillingEnabled = billing?.isBillingEnabled ?? false; const { refetch: refetchClientConfig } = useClientConfig(); - const { data } = useQuery(GetAdminAiModelsDocument); - const [createConfigVariable] = useMutation( - CreateDatabaseConfigVariableDocument, - ); - const [setModelEnabled] = useMutation(SetAdminAiModelEnabledDocument); + const { data, loading: isLoadingModels } = useQuery<{ + getAdminAiModels: { + defaultSmartModelId?: string | null; + defaultFastModelId?: string | null; + models: AdminAiModelConfig[]; + }; + }>(GET_ADMIN_AI_MODELS); - const autoEnableNewModels = - data?.getAdminAiModels?.autoEnableNewModels ?? true; + const [setModelRecommended] = useMutation(SET_ADMIN_AI_MODEL_RECOMMENDED); + const [setDefaultModel] = useMutation(SET_ADMIN_DEFAULT_AI_MODEL); + + const { data: providersData, loading: isLoadingProviders } = + useQuery(GET_AI_PROVIDERS, { + skip: isBillingEnabled, + }); const models = data?.getAdminAiModels?.models ?? []; - const handleAutoEnableToggle = async (checked: boolean) => { - try { - await createConfigVariable({ - variables: { - key: 'AI_AUTO_ENABLE_NEW_MODELS', - value: checked, - }, - refetchQueries: [{ query: GET_ADMIN_AI_MODELS }], - }); + const providerItems = useMemo( + () => parseProviderItems(providersData?.getAiProviders ?? {}), + [providersData], + ); - await refetchClientConfig(); - } catch { - enqueueErrorSnackBar({ - message: t`Failed to update auto-enable setting`, - }); - } - }; + const catalogProviders = useMemo( + () => + providerItems + .filter((provider) => provider.source === AI_PROVIDER_SOURCE.CATALOG) + .sort((a, b) => (a.label ?? a.id).localeCompare(b.label ?? b.id)), + [providerItems], + ); - const handleModelToggle = async ( + const customProviders = providerItems.filter( + (provider) => provider.source === AI_PROVIDER_SOURCE.CUSTOM, + ); + + if (isLoadingProviders || isLoadingModels) { + return ; + } + + const handleRecommendedToggle = async ( modelId: string, - isCurrentlyEnabled: boolean, + isCurrentlyRecommended: boolean, ) => { try { - await setModelEnabled({ - variables: { - modelId, - enabled: !isCurrentlyEnabled, - }, + await setModelRecommended({ + variables: { modelId, recommended: !isCurrentlyRecommended }, refetchQueries: [{ query: GET_ADMIN_AI_MODELS }], }); - await refetchClientConfig(); } catch { enqueueErrorSnackBar({ - message: t`Failed to update model availability`, + message: t`Failed to update model recommendation`, }); } }; - let filteredModels = models; + const defaultSmartModelId = data?.getAdminAiModels?.defaultSmartModelId; + const defaultFastModelId = data?.getAdminAiModels?.defaultFastModelId; - if (!showUnconfigured) { - filteredModels = filteredModels.filter((model) => model.isAvailable); - } + const enabledModels = models.filter( + (model) => model.isAvailable && model.isAdminEnabled && !model.isDeprecated, + ); - if (!showDeprecated) { - filteredModels = filteredModels.filter((model) => !model.deprecated); - } + const availableModelOptions = enabledModels.map((model) => ({ + value: model.modelId, + label: model.label, + Icon: getModelIcon(model.modelFamily, model.providerName), + })); - if (searchQuery.trim().length > 0) { - const query = searchQuery.toLowerCase(); - - filteredModels = filteredModels.filter( - (model) => - model.label.toLowerCase().includes(query) || - (model.modelFamily?.toLowerCase().includes(query) ?? false) || - model.inferenceProvider.toLowerCase().includes(query), - ); - } - - const getModelDescription = ( - modelFamily: string | null | undefined, - isAvailable: boolean, - isDeprecated: boolean | null | undefined, + const handleDefaultModelChange = async ( + role: AiModelRole, + modelId: string, ) => { - const providerLabel = getModelProviderLabel(modelFamily); - - if (isDeprecated === true) { - return providerLabel ? t`${providerLabel} — Deprecated` : t`Deprecated`; + try { + await setDefaultModel({ + variables: { role, modelId }, + refetchQueries: [{ query: GET_ADMIN_AI_MODELS }], + }); + await refetchClientConfig(); + } catch { + enqueueErrorSnackBar({ + message: t`Failed to update default model`, + }); } - - if (!isAvailable) { - return providerLabel - ? t`${providerLabel} — API key not configured` - : t`API key not configured`; - } - - return providerLabel; }; return ( <> -
- + {!isBillingEnabled && ( + <> +
+ - - +
+ +
+ + } + /> + + +
+ + )} + + {availableModelOptions.length > 0 && ( +
+ - -
-
- + + + + handleDefaultModelChange(AiModelRole.FAST, value) + } + options={availableModelOptions} + selectSizeVariant="small" + dropdownWidth={GenericDropdownContentWidth.ExtraLarge} + /> + + +
+ )} - ( - - - - setShowUnconfigured(!showUnconfigured) - } - toggled={showUnconfigured} - text={t`Unconfigured models`} - toggleSize="small" - /> - setShowDeprecated(!showDeprecated)} - toggled={showDeprecated} - text={t`Deprecated models`} - toggleSize="small" - /> - - - } - /> - )} - /> + {enabledModels.length > 0 && ( +
+ - - {filteredModels.map((model, index) => ( - - handleModelToggle(model.modelId, model.isAdminEnabled) - } - disabled={!model.isAvailable || model.deprecated === true} - divider={index < filteredModels.length - 1} - /> - ))} - -
+ +
+ )} ); }; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelHoverCard.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelHoverCard.tsx new file mode 100644 index 00000000000..bde2dfe0500 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelHoverCard.tsx @@ -0,0 +1,149 @@ +import { styled } from '@linaria/react'; +import { t } from '@lingui/core/macro'; +import { + IconBolt, + IconCoins, + IconFileText, + IconFlag, + IconServer, + IconTag, +} from 'twenty-ui/display'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; + +import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard'; +import { getDataResidencyDisplay } from '@/settings/admin-panel/ai/utils/getDataResidencyDisplay'; +import { getModelIcon } from '@/settings/admin-panel/ai/utils/getModelIcon'; +import { type ModelFamily } from '~/generated-metadata/graphql'; +import { formatNumber } from '~/utils/format/formatNumber'; + +const StyledNameValue = styled.span` + align-items: center; + display: flex; + gap: 4px; +`; + +const StyledHoverCardWrapper = styled.div` + border-radius: ${themeCssVariables.border.radius.md}; + box-shadow: ${themeCssVariables.boxShadow.strong}; + overflow: hidden; +`; + +type SettingsAdminAiModelHoverCardProps = { + label: string; + modelFamily?: ModelFamily | null; + providerName?: string | null; + providerLabel: string; + contextWindowTokens?: number | null; + maxOutputTokens?: number | null; + inputCostPerMillionTokens?: number | null; + outputCostPerMillionTokens?: number | null; + dataResidency?: string | null; +}; + +const formatCost = ( + inputCost?: number | null, + outputCost?: number | null, +): string => { + if (inputCost == null && outputCost == null) { + return '—'; + } + + const parts: string[] = []; + + if (inputCost != null) { + parts.push(`$${inputCost} in`); + } + + if (outputCost != null) { + parts.push(`$${outputCost} out`); + } + + return parts.join(' / '); +}; + +export const SettingsAdminAiModelHoverCard = ({ + label, + modelFamily, + providerName, + providerLabel, + contextWindowTokens, + maxOutputTokens, + inputCostPerMillionTokens, + outputCostPerMillionTokens, + dataResidency, +}: SettingsAdminAiModelHoverCardProps) => { + const ModelIcon = getModelIcon(modelFamily, providerName); + + const items = [ + { + Icon: IconTag, + label: t`Name`, + value: ( + + + {label} + + ), + }, + { + Icon: IconServer, + label: t`Provider`, + value: providerLabel || '—', + }, + ...(inputCostPerMillionTokens != null || outputCostPerMillionTokens != null + ? [ + { + Icon: IconCoins, + label: t`Cost / 1M`, + value: formatCost( + inputCostPerMillionTokens, + outputCostPerMillionTokens, + ), + }, + ] + : []), + ...(contextWindowTokens != null + ? [ + { + Icon: IconFileText, + label: t`Context`, + value: `${formatNumber(contextWindowTokens, { + abbreviate: true, + decimals: 1, + })} tokens`, + }, + ] + : []), + ...(maxOutputTokens != null + ? [ + { + Icon: IconBolt, + label: t`Max output`, + value: `${formatNumber(maxOutputTokens, { + abbreviate: true, + decimals: 1, + })} tokens`, + }, + ] + : []), + ...(dataResidency + ? [ + { + Icon: IconFlag, + label: t`Data residency`, + value: getDataResidencyDisplay(dataResidency), + }, + ] + : []), + ]; + + return ( + + + + ); +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelsTable.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelsTable.tsx new file mode 100644 index 00000000000..6d904851e41 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiModelsTable.tsx @@ -0,0 +1,245 @@ +import { useContext, useState } from 'react'; + +import { css } from '@linaria/core'; +import { styled } from '@linaria/react'; +import { Trans } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared/utils'; +import { AppTooltip, IconTrash, TooltipDelay } from 'twenty-ui/display'; +import { Checkbox, IconButton } from 'twenty-ui/input'; +import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants'; + +import { SettingsAdminAiModelHoverCard } from '@/settings/admin-panel/ai/components/SettingsAdminAiModelHoverCard'; +import { type AdminAiModelConfig } from '~/generated-metadata/graphql'; +import { Table } from '@/ui/layout/table/components/Table'; +import { TableBody } from '@/ui/layout/table/components/TableBody'; +import { TableCell } from '@/ui/layout/table/components/TableCell'; +import { TableHeader } from '@/ui/layout/table/components/TableHeader'; +import { TableRow } from '@/ui/layout/table/components/TableRow'; +import { getModelIcon } from '@/settings/admin-panel/ai/utils/getModelIcon'; + +const getProviderDisplayLabel = ( + model: Pick, +): string => model.providerLabel ?? model.providerName ?? ''; + +const formatCost = ( + model: Pick< + AdminAiModelConfig, + 'inputCostPerMillionTokens' | 'outputCostPerMillionTokens' + >, +): string => { + const input = model.inputCostPerMillionTokens; + const output = model.outputCostPerMillionTokens; + + if (!isDefined(input) && !isDefined(output)) { + return '—'; + } + + const formatValue = (value: number | null | undefined) => + isDefined(value) ? `$${value}` : '—'; + + return `${formatValue(input)} / ${formatValue(output)}`; +}; + +type SecondaryColumn = 'provider' | 'cost'; + +const GRID_TEMPLATE_COLUMNS: Record = { + provider: '1fr 120px 40px', + cost: '1fr 140px 40px', +}; + +const GRID_TEMPLATE_COLUMNS_WITH_REMOVE: Record = { + provider: '1fr 120px 40px 32px', + cost: '1fr 140px 40px 32px', +}; + +const StyledModelNameCell = styled.div` + align-items: center; + display: flex; + gap: ${themeCssVariables.spacing[2]}; + overflow: hidden; +`; + +const StyledModelLabel = styled.span` + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +`; + +const StyledDeprecatedSuffix = styled.span` + color: ${themeCssVariables.font.color.light}; +`; + +const hoverCardTooltipClass = css` + background-color: transparent !important; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + padding: 0 !important; +`; + +const sanitizeIdForSelector = (id: string): string => + id.replace(/[^a-zA-Z0-9-_]/g, '_'); + +type SettingsAdminAiModelsTableProps = { + models: AdminAiModelConfig[]; + onToggle: (modelId: string, currentValue: boolean) => void; + checkedField: 'isAdminEnabled' | 'isRecommended'; + anchorPrefix: string; + showDisabledState?: boolean; + onRemove?: (model: AdminAiModelConfig) => void; + secondaryColumn?: SecondaryColumn; +}; + +export const SettingsAdminAiModelsTable = ({ + models, + onToggle, + checkedField, + anchorPrefix, + showDisabledState = false, + onRemove, + secondaryColumn = 'provider', +}: SettingsAdminAiModelsTableProps) => { + const [hoveredModelId, setHoveredModelId] = useState(null); + const { theme } = useContext(ThemeContext); + + const hoveredModel = models.find((model) => model.modelId === hoveredModelId); + const hasRemove = isDefined(onRemove); + const gridColumns = hasRemove + ? GRID_TEMPLATE_COLUMNS_WITH_REMOVE[secondaryColumn] + : GRID_TEMPLATE_COLUMNS[secondaryColumn]; + + return ( + <> + + + + Name + + + {secondaryColumn === 'provider' ? ( + Provider + ) : ( + Cost / 1M tokens + )} + + + {hasRemove && } + + + {models.map((model) => { + const ModelIcon = getModelIcon( + model.modelFamily, + model.providerName, + ); + const displayLabel = getProviderDisplayLabel(model); + const safeId = sanitizeIdForSelector(model.modelId); + const isChecked = model[checkedField] === true; + const isDisabled = + showDisabledState && + (!model.isAvailable || model.isDeprecated === true); + + return ( +
setHoveredModelId(model.modelId)} + onMouseLeave={() => setHoveredModelId(null)} + > + onToggle(model.modelId, isChecked) + } + > + + + + {model.label} + {showDisabledState && model.isDeprecated && ( + + · Deprecated + + )} + + + + {secondaryColumn === 'provider' + ? displayLabel + : formatCost(model)} + + event.stopPropagation()} + > + onToggle(model.modelId, isChecked)} + /> + + {hasRemove && ( + + { + event.stopPropagation(); + onRemove(model); + }} + /> + + )} + +
+ ); + })} +
+
+ + {hoveredModel && ( + + + + )} + + ); +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiProviderListCard.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiProviderListCard.tsx new file mode 100644 index 00000000000..5218967b48f --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAiProviderListCard.tsx @@ -0,0 +1,91 @@ +import { Link, useNavigate } from 'react-router-dom'; + +import { styled } from '@linaria/react'; +import { t } from '@lingui/core/macro'; +import { SettingsPath } from 'twenty-shared/types'; +import { getSettingsPath } from 'twenty-shared/utils'; +import { IconPlug, Status } from 'twenty-ui/display'; + +import { type AiProviderItem } from '@/settings/admin-panel/ai/types/AiProviderItem'; +import { getProviderIcon } from '@/settings/admin-panel/ai/utils/getProviderIcon'; +import { SettingsCard } from '@/settings/components/SettingsCard'; +import { SettingsListCard } from '@/settings/components/SettingsListCard'; + +const StyledLinkContainer = styled.div` + > a { + text-decoration: none; + } +`; + +type SettingsAdminAiProviderListCardProps = { + providers: AiProviderItem[]; + showAddButton?: boolean; +}; + +const getProviderDescription = (provider: AiProviderItem): string => { + const parts: string[] = []; + + if (provider.region) { + parts.push(provider.region); + } + + if (provider.baseUrl) { + parts.push(provider.baseUrl); + } + + if (provider.apiKey) { + parts.push(t`API key configured`); + } else if (provider.hasAccessKey) { + parts.push(t`IAM credentials`); + } + + return parts.join(' · '); +}; + +export const SettingsAdminAiProviderListCard = ({ + providers, + showAddButton = true, +}: SettingsAdminAiProviderListCardProps) => { + const navigate = useNavigate(); + + if (providers.length === 0 && showAddButton) { + return ( + + + } /> + + + ); + } + + if (providers.length === 0) { + return null; + } + + return ( + getProviderIcon(provider.name ?? provider.id)} + getItemLabel={(provider) => provider.label ?? provider.id} + getItemDescription={getProviderDescription} + RowRightComponent={({ item: provider }) => + provider.apiKey || provider.hasAccessKey ? ( + + ) : ( + + ) + } + to={(provider) => + getSettingsPath(SettingsPath.AdminPanelAiProviderDetail, { + providerName: provider.id, + }) + } + hasFooter={showAddButton} + footerButtonLabel={t`Add Custom Provider`} + onFooterButtonClick={() => + navigate(getSettingsPath(SettingsPath.AdminPanelNewAiProvider)) + } + /> + ); +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiAdminPath.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiAdminPath.ts new file mode 100644 index 00000000000..5cea962c5b7 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiAdminPath.ts @@ -0,0 +1,9 @@ +import { SettingsPath } from 'twenty-shared/types'; +import { getSettingsPath } from 'twenty-shared/utils'; + +export const AI_ADMIN_PATH = getSettingsPath( + SettingsPath.AdminPanel, + undefined, + undefined, + 'ai', +); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiProviderSource.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiProviderSource.ts new file mode 100644 index 00000000000..6544515dbf4 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/AiProviderSource.ts @@ -0,0 +1,4 @@ +export const AI_PROVIDER_SOURCE = { + CATALOG: 'catalog', + CUSTOM: 'custom', +} as const; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyConfig.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyConfig.ts new file mode 100644 index 00000000000..c004e704c39 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyConfig.ts @@ -0,0 +1,17 @@ +import { type DataResidency } from 'twenty-shared/ai'; + +export const DATA_RESIDENCY_CONFIG: Record< + DataResidency, + { label: string; flag: string } +> = { + us: { label: 'United States', flag: '🇺🇸' }, + eu: { label: 'European Union', flag: '🇪🇺' }, + global: { label: 'Global', flag: '🌐' }, + uk: { label: 'United Kingdom', flag: '🇬🇧' }, + ap: { label: 'Asia Pacific', flag: '🌏' }, + jp: { label: 'Japan', flag: '🇯🇵' }, + au: { label: 'Australia', flag: '🇦🇺' }, + ca: { label: 'Canada', flag: '🇨🇦' }, + de: { label: 'Germany', flag: '🇩🇪' }, + fr: { label: 'France', flag: '🇫🇷' }, +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyOptions.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyOptions.ts new file mode 100644 index 00000000000..e99cb1a9f2f --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/DataResidencyOptions.ts @@ -0,0 +1,10 @@ +import { type DataResidency } from 'twenty-shared/ai'; + +import { DATA_RESIDENCY_CONFIG } from '@/settings/admin-panel/ai/constants/DataResidencyConfig'; + +export const DATA_RESIDENCY_OPTIONS = ( + Object.keys(DATA_RESIDENCY_CONFIG) as DataResidency[] +).map((key) => ({ + value: key, + label: `${DATA_RESIDENCY_CONFIG[key].flag} ${DATA_RESIDENCY_CONFIG[key].label}`, +})); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ModelIconConfig.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ModelIconConfig.ts new file mode 100644 index 00000000000..09dfbac04c0 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ModelIconConfig.ts @@ -0,0 +1,22 @@ +import { + IconBrandGemini, + IconBrandMistral, + IconBrandXai, + IconModelClaude, + IconProviderOpenai, + IconRobot, + type IconComponent, +} from 'twenty-ui/display'; + +import { ModelFamily } from '~/generated-metadata/graphql'; + +export type ModelIconConfigKey = ModelFamily | 'FALLBACK'; + +export const MODEL_ICON_CONFIG: Record = { + [ModelFamily.GPT]: IconProviderOpenai, + [ModelFamily.CLAUDE]: IconModelClaude, + [ModelFamily.GEMINI]: IconBrandGemini, + [ModelFamily.MISTRAL]: IconBrandMistral, + [ModelFamily.GROK]: IconBrandXai, + FALLBACK: IconRobot, +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ProviderConfig.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ProviderConfig.ts new file mode 100644 index 00000000000..cfd7cb9ede0 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/constants/ProviderConfig.ts @@ -0,0 +1,19 @@ +import { + IconBrandAnthropic, + IconBrandMistral, + IconBrandXai, + IconGoogle, + IconProviderOpenai, + IconRobot, + type IconComponent, +} from 'twenty-ui/display'; + +export const PROVIDER_ICON_CONFIG: Record = { + openai: { Icon: IconProviderOpenai }, + anthropic: { Icon: IconBrandAnthropic }, + bedrock: { Icon: IconRobot }, + google: { Icon: IconGoogle }, + mistral: { Icon: IconBrandMistral }, + xai: { Icon: IconBrandXai }, + 'openai-compatible': { Icon: IconProviderOpenai }, +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addAiProvider.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addAiProvider.ts new file mode 100644 index 00000000000..e8469c6b699 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addAiProvider.ts @@ -0,0 +1,7 @@ +import { gql } from '@apollo/client'; + +export const ADD_AI_PROVIDER = gql` + mutation AddAiProvider($providerName: String!, $providerConfig: JSON!) { + addAiProvider(providerName: $providerName, providerConfig: $providerConfig) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addModelToProvider.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addModelToProvider.ts new file mode 100644 index 00000000000..6e866fdfc4b --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/addModelToProvider.ts @@ -0,0 +1,7 @@ +import { gql } from '@apollo/client'; + +export const ADD_MODEL_TO_PROVIDER = gql` + mutation AddModelToProvider($providerName: String!, $modelConfig: JSON!) { + addModelToProvider(providerName: $providerName, modelConfig: $modelConfig) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeAiProvider.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeAiProvider.ts new file mode 100644 index 00000000000..68b13467fd5 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeAiProvider.ts @@ -0,0 +1,7 @@ +import { gql } from '@apollo/client'; + +export const REMOVE_AI_PROVIDER = gql` + mutation RemoveAiProvider($providerName: String!) { + removeAiProvider(providerName: $providerName) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeModelFromProvider.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeModelFromProvider.ts new file mode 100644 index 00000000000..ec220f8dd55 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/removeModelFromProvider.ts @@ -0,0 +1,10 @@ +import { gql } from '@apollo/client'; + +export const REMOVE_MODEL_FROM_PROVIDER = gql` + mutation RemoveModelFromProvider( + $providerName: String! + $modelName: String! + ) { + removeModelFromProvider(providerName: $providerName, modelName: $modelName) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminAiModelRecommended.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminAiModelRecommended.ts new file mode 100644 index 00000000000..7be68348b5e --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminAiModelRecommended.ts @@ -0,0 +1,10 @@ +import { gql } from '@apollo/client'; + +export const SET_ADMIN_AI_MODEL_RECOMMENDED = gql` + mutation SetAdminAiModelRecommended( + $modelId: String! + $recommended: Boolean! + ) { + setAdminAiModelRecommended(modelId: $modelId, recommended: $recommended) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminDefaultAiModel.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminDefaultAiModel.ts new file mode 100644 index 00000000000..2bae314b4e8 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/mutations/setAdminDefaultAiModel.ts @@ -0,0 +1,7 @@ +import { gql } from '@apollo/client'; + +export const SET_ADMIN_DEFAULT_AI_MODEL = gql` + mutation SetAdminDefaultAiModel($role: AiModelRole!, $modelId: String!) { + setAdminDefaultAiModel(role: $role, modelId: $modelId) + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAdminAiModels.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAdminAiModels.ts index 0a5845e9711..aed76832d35 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAdminAiModels.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAdminAiModels.ts @@ -3,16 +3,25 @@ import { gql } from '@apollo/client'; export const GET_ADMIN_AI_MODELS = gql` query GetAdminAiModels { getAdminAiModels { - autoEnableNewModels + defaultSmartModelId + defaultFastModelId models { modelId label modelFamily - inferenceProvider + sdkPackage isAvailable isAdminEnabled - deprecated + isDeprecated isRecommended + contextWindowTokens + maxOutputTokens + inputCostPerMillionTokens + outputCostPerMillionTokens + providerName + providerLabel + name + dataResidency } } } diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAiProviders.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAiProviders.ts new file mode 100644 index 00000000000..d86a1c8955b --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getAiProviders.ts @@ -0,0 +1,7 @@ +import { gql } from '@apollo/client'; + +export const GET_AI_PROVIDERS = gql` + query GetAiProviders { + getAiProviders + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevProviders.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevProviders.ts new file mode 100644 index 00000000000..f3947fe5625 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevProviders.ts @@ -0,0 +1,11 @@ +import { gql } from '@apollo/client'; + +export const GET_MODELS_DEV_PROVIDERS = gql` + query GetModelsDevProviders { + getModelsDevProviders { + id + modelCount + npm + } + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevSuggestions.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevSuggestions.ts new file mode 100644 index 00000000000..a079687ab77 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/graphql/queries/getModelsDevSuggestions.ts @@ -0,0 +1,18 @@ +import { gql } from '@apollo/client'; + +export const GET_MODELS_DEV_SUGGESTIONS = gql` + query GetModelsDevSuggestions($providerType: String!) { + getModelsDevSuggestions(providerType: $providerType) { + modelId + name + inputCostPerMillionTokens + outputCostPerMillionTokens + cachedInputCostPerMillionTokens + cacheCreationCostPerMillionTokens + contextWindowTokens + maxOutputTokens + modalities + supportsReasoning + } + } +`; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderItem.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderItem.ts new file mode 100644 index 00000000000..52a6fa9b680 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderItem.ts @@ -0,0 +1,23 @@ +import { type AiSdkPackage, type DataResidency } from 'twenty-shared/ai'; + +import { type AiProviderSource } from '@/settings/admin-panel/ai/types/AiProviderSource'; + +// AiProviderItem = RawAiProviderConfig (from the backend's Record) enriched with the `id` key (same as the Record key). +// Fields are defined here; RawAiProviderConfig is Omit. +export type AiProviderItem = { + id: string; + npm: AiSdkPackage; + // Optional provider display/catalog name from config (not a model name; models use `models[].name` on the backend). + name?: string; + label?: string; + source?: AiProviderSource; + baseUrl?: string; + region?: string; + dataResidency?: DataResidency; + apiKey?: string; + apiKeyConfigVariable?: string; + accessKeyId?: string; + secretAccessKey?: string; + hasAccessKey?: boolean; +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderSource.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderSource.ts new file mode 100644 index 00000000000..a5ccb90ae86 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/AiProviderSource.ts @@ -0,0 +1 @@ +export type AiProviderSource = 'catalog' | 'custom'; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/types/GetAiProvidersResult.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/GetAiProvidersResult.ts new file mode 100644 index 00000000000..d729bbb395e --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/GetAiProvidersResult.ts @@ -0,0 +1,5 @@ +import { type RawAiProviderConfig } from '@/settings/admin-panel/ai/types/RawAiProviderConfig'; + +export type GetAiProvidersResult = { + getAiProviders: Record; +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/types/RawAiProviderConfig.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/RawAiProviderConfig.ts new file mode 100644 index 00000000000..fae3546c539 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/types/RawAiProviderConfig.ts @@ -0,0 +1,5 @@ +import { type AiProviderItem } from '@/settings/admin-panel/ai/types/AiProviderItem'; + +// Backend stores providers as Record; the id is the +// record key, not a field on the value. Same shape as AiProviderItem minus `id`. +export type RawAiProviderConfig = Omit; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getDataResidencyDisplay.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getDataResidencyDisplay.ts new file mode 100644 index 00000000000..0d55f5929d2 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getDataResidencyDisplay.ts @@ -0,0 +1,13 @@ +import { isDataResidency } from 'twenty-shared/ai'; + +import { DATA_RESIDENCY_CONFIG } from '@/settings/admin-panel/ai/constants/DataResidencyConfig'; + +export const getDataResidencyDisplay = (residency: string): string => { + if (isDataResidency(residency)) { + const entry = DATA_RESIDENCY_CONFIG[residency]; + + return `${entry.flag} ${entry.label}`; + } + + return `🌐 ${residency.toUpperCase()}`; +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelIcon.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelIcon.ts new file mode 100644 index 00000000000..74a340dc810 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelIcon.ts @@ -0,0 +1,22 @@ +import { type IconComponent } from 'twenty-ui/display'; + +import { MODEL_ICON_CONFIG } from '@/settings/admin-panel/ai/constants/ModelIconConfig'; +import { isModelIconKey } from '@/settings/admin-panel/ai/utils/isModelIconKey'; +import { getProviderIcon } from '@/settings/admin-panel/ai/utils/getProviderIcon'; + +import { type ModelFamily } from '~/generated-metadata/graphql'; + +export const getModelIcon = ( + modelFamily: ModelFamily | null | undefined, + providerName?: string | null, +): IconComponent => { + if (modelFamily && isModelIconKey(modelFamily)) { + return MODEL_ICON_CONFIG[modelFamily]; + } + + if (providerName) { + return getProviderIcon(providerName); + } + + return MODEL_ICON_CONFIG.FALLBACK; +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelsDevLogoIcon.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelsDevLogoIcon.tsx new file mode 100644 index 00000000000..606bacfda84 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getModelsDevLogoIcon.tsx @@ -0,0 +1,34 @@ +import { type IconComponent, type IconComponentProps } from 'twenty-ui/display'; + +import { ModelsDevProviderLogo } from '@/settings/admin-panel/ai/components/ModelsDevProviderLogo'; + +const MODELS_DEV_LOGO_BASE = 'https://models.dev/logos'; + +const logoIconCache = new Map(); + +type LogoIconProps = IconComponentProps; + +export const getModelsDevLogoIcon = (providerId: string): IconComponent => { + const cached = logoIconCache.get(providerId); + + if (cached) { + return cached; + } + + const logoUrl = `${MODELS_DEV_LOGO_BASE}/${providerId}.svg`; + + const LogoIcon = ({ size = 16, className, style }: LogoIconProps) => ( + + ); + + LogoIcon.displayName = `ModelsDevLogo(${providerId})`; + + logoIconCache.set(providerId, LogoIcon); + + return LogoIcon; +}; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getProviderIcon.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getProviderIcon.ts new file mode 100644 index 00000000000..aee6472dcb5 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/getProviderIcon.ts @@ -0,0 +1,10 @@ +import { type IconComponent } from 'twenty-ui/display'; + +import { PROVIDER_ICON_CONFIG } from '@/settings/admin-panel/ai/constants/ProviderConfig'; +import { isKnownProviderId } from '@/settings/admin-panel/ai/utils/isKnownProviderId'; +import { getModelsDevLogoIcon } from '@/settings/admin-panel/ai/utils/getModelsDevLogoIcon'; + +export const getProviderIcon = (providerType: string): IconComponent => + isKnownProviderId(providerType) + ? PROVIDER_ICON_CONFIG[providerType].Icon + : getModelsDevLogoIcon(providerType); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isKnownProviderId.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isKnownProviderId.ts new file mode 100644 index 00000000000..5e6a51d9abd --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isKnownProviderId.ts @@ -0,0 +1,6 @@ +import { PROVIDER_ICON_CONFIG } from '@/settings/admin-panel/ai/constants/ProviderConfig'; + +export type KnownProviderId = keyof typeof PROVIDER_ICON_CONFIG; + +export const isKnownProviderId = (id: string): id is KnownProviderId => + id in PROVIDER_ICON_CONFIG; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isModelIconKey.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isModelIconKey.ts new file mode 100644 index 00000000000..4cf49b6e826 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/isModelIconKey.ts @@ -0,0 +1,7 @@ +import { + MODEL_ICON_CONFIG, + type ModelIconConfigKey, +} from '@/settings/admin-panel/ai/constants/ModelIconConfig'; + +export const isModelIconKey = (key: string): key is ModelIconConfigKey => + key in MODEL_ICON_CONFIG; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/parseProviderItems.ts b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/parseProviderItems.ts new file mode 100644 index 00000000000..63dbf6ef11e --- /dev/null +++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/utils/parseProviderItems.ts @@ -0,0 +1,10 @@ +import { type AiProviderItem } from '@/settings/admin-panel/ai/types/AiProviderItem'; +import { type RawAiProviderConfig } from '@/settings/admin-panel/ai/types/RawAiProviderConfig'; + +export const parseProviderItems = ( + rawProviders: Record, +): AiProviderItem[] => + Object.entries(rawProviders).map(([key, config]) => ({ + ...config, + id: key, + })); diff --git a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx index 63dbf68df6a..ee9a5d95243 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx @@ -5,17 +5,34 @@ import { TextInput } from '@/ui/input/components/TextInput'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; +import { styled } from '@linaria/react'; import { t } from '@lingui/core/macro'; import { type ConfigVariableValue } from 'twenty-shared/types'; import { CustomError } from 'twenty-shared/utils'; +import { CodeEditor } from 'twenty-ui/input'; import { MenuItemMultiSelect } from 'twenty-ui/navigation'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; import { ConfigVariableType } from '~/generated-metadata/graphql'; import { type ConfigVariableOptions } from '@/settings/admin-panel/config-variables/types/ConfigVariableOptions'; +const StyledJsonEditorContainer = styled.div` + display: flex; + flex-direction: column; + width: 100%; +`; + +const StyledJsonEditorLabel = styled.span` + color: ${themeCssVariables.font.color.light}; + display: block; + font-size: ${themeCssVariables.font.size.xs}; + font-weight: ${themeCssVariables.font.weight.semiBold}; + margin-bottom: ${themeCssVariables.spacing[1]}; +`; + type ConfigVariableDatabaseInputProps = { label: string; value: ConfigVariableValue; - onChange: (value: string | number | boolean | string[] | null) => void; + onChange: (value: ConfigVariableValue) => void; type: ConfigVariableType; options?: ConfigVariableOptions; disabled?: boolean; @@ -190,6 +207,34 @@ export const ConfigVariableDatabaseInput = ({ /> ); + case ConfigVariableType.JSON: + return ( + + {label} + { + try { + onChange(JSON.parse(text) as Record); + } catch { + onChange(text as unknown as ConfigVariableValue); + } + }} + /> + + ); + default: throw new CustomError(`Unsupported type: ${type}`, 'UNSUPPORTED_TYPE'); } diff --git a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableValueInput.tsx b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableValueInput.tsx index 5de37dffa97..fe24ce1bf0e 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableValueInput.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/ConfigVariableValueInput.tsx @@ -11,7 +11,7 @@ import { ConfigVariableDatabaseInput } from './ConfigVariableDatabaseInput'; type ConfigVariableValueInputProps = { variable: ConfigVariable; value: ConfigVariableValue; - onChange: (value: string | number | boolean | string[] | null) => void; + onChange: (value: ConfigVariableValue) => void; disabled?: boolean; }; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/SettingsAdminConfigVariablesRow.tsx b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/SettingsAdminConfigVariablesRow.tsx index 10efaf630da..35239a6df2d 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/SettingsAdminConfigVariablesRow.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/components/SettingsAdminConfigVariablesRow.tsx @@ -40,7 +40,9 @@ export const SettingsAdminConfigVariablesRow = ({ ? variable.value ? 'true' : 'false' - : variable.value; + : typeof variable.value === 'object' && variable.value !== null + ? JSON.stringify(variable.value) + : variable.value; return ( diff --git a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/hooks/useConfigVariableForm.ts b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/hooks/useConfigVariableForm.ts index 4fdd2e4a28c..5c4a57504a4 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/config-variables/hooks/useConfigVariableForm.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/config-variables/hooks/useConfigVariableForm.ts @@ -16,6 +16,7 @@ export const useConfigVariableForm = (variable?: ConfigVariable) => { z.number(), z.boolean(), z.array(z.string()), + z.record(z.string(), z.unknown()), z.null(), ]), }); @@ -39,7 +40,10 @@ export const useConfigVariableForm = (variable?: ConfigVariable) => { ((typeof currentValue === 'string' && currentValue.trim() !== '') || typeof currentValue === 'boolean' || typeof currentValue === 'number' || - (Array.isArray(currentValue) && currentValue.length > 0)) + (Array.isArray(currentValue) && currentValue.length > 0) || + (typeof currentValue === 'object' && + currentValue !== null && + !Array.isArray(currentValue))) ); return { diff --git a/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts b/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts index 3d990ec4893..e9a9fa2e44a 100644 --- a/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts +++ b/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts @@ -92,8 +92,6 @@ export const USER_QUERY_FRAGMENT = gql` fastModel smartModel aiAdditionalInstructions - autoEnableNewAiModels - disabledAiModelIds enabledAiModelIds useRecommendedModels isTwoFactorAuthenticationEnforced diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx new file mode 100644 index 00000000000..5bee9ebc098 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx @@ -0,0 +1,394 @@ +import { useMemo, useState } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; + +import { useMutation, useQuery } from '@apollo/client/react'; +import { t } from '@lingui/core/macro'; +import { SettingsPath } from 'twenty-shared/types'; +import { getSettingsPath, isDefined } from 'twenty-shared/utils'; + +import { AI_ADMIN_PATH } from '@/settings/admin-panel/ai/constants/AiAdminPath'; +import { AI_PROVIDER_SOURCE } from '@/settings/admin-panel/ai/constants/AiProviderSource'; +import { + H2Title, + type IconComponent, + IconFlag, + IconKey, + IconPlug, + IconPlus, + IconServer, + IconTag, + IconTrash, + IconWorld, +} from 'twenty-ui/display'; +import { Button, SearchInput } from 'twenty-ui/input'; +import { Section } from 'twenty-ui/layout'; +import { RoundedLink, UndecoratedLink } from 'twenty-ui/navigation'; + +import { useClientConfig } from '@/client-config/hooks/useClientConfig'; +import { SettingsSkeletonLoader } from '@/settings/components/SettingsSkeletonLoader'; +import { SettingsAdminAiModelsTable } from '@/settings/admin-panel/ai/components/SettingsAdminAiModelsTable'; +import { REMOVE_AI_PROVIDER } from '@/settings/admin-panel/ai/graphql/mutations/removeAiProvider'; +import { REMOVE_MODEL_FROM_PROVIDER } from '@/settings/admin-panel/ai/graphql/mutations/removeModelFromProvider'; +import { GET_ADMIN_AI_MODELS } from '@/settings/admin-panel/ai/graphql/queries/getAdminAiModels'; +import { GET_AI_PROVIDERS } from '@/settings/admin-panel/ai/graphql/queries/getAiProviders'; +import { type GetAiProvidersResult } from '@/settings/admin-panel/ai/types/GetAiProvidersResult'; +import { getDataResidencyDisplay } from '@/settings/admin-panel/ai/utils/getDataResidencyDisplay'; +import { SettingsAdminTableCard } from '@/settings/admin-panel/components/SettingsAdminTableCard'; +import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; +import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; +import { useModal } from '@/ui/layout/modal/hooks/useModal'; +import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; +import { + type AdminAiModelConfig, + SetAdminAiModelEnabledDocument, +} from '~/generated-metadata/graphql'; + +const REMOVE_PROVIDER_MODAL_ID = 'settings-ai-provider-remove'; +const REMOVE_MODEL_MODAL_ID = 'settings-ai-model-remove'; + +export const SettingsAdminAiProviderDetail = () => { + const { providerName } = useParams<{ providerName: string }>(); + const navigate = useNavigate(); + const { enqueueErrorSnackBar, enqueueSuccessSnackBar } = useSnackBar(); + const { refetch: refetchClientConfig } = useClientConfig(); + const { openModal } = useModal(); + const [searchQuery, setSearchQuery] = useState(''); + const [modelToRemove, setModelToRemove] = useState<{ + modelId: string; + label: string; + name: string; + } | null>(null); + + const { data: providersData, loading: isLoadingProviders } = + useQuery(GET_AI_PROVIDERS); + + const { data: modelsData, loading: isLoadingModels } = useQuery<{ + getAdminAiModels: { + models: AdminAiModelConfig[]; + }; + }>(GET_ADMIN_AI_MODELS); + + const [setModelEnabled] = useMutation(SetAdminAiModelEnabledDocument); + const [removeAiProvider] = useMutation(REMOVE_AI_PROVIDER); + const [removeModelFromProvider] = useMutation(REMOVE_MODEL_FROM_PROVIDER); + + const handleRemoveProvider = async () => { + if (!providerName) { + return; + } + + try { + await removeAiProvider({ + variables: { providerName }, + refetchQueries: [ + { query: GET_AI_PROVIDERS }, + { query: GET_ADMIN_AI_MODELS }, + ], + }); + enqueueSuccessSnackBar({ + message: t`Provider "${provider?.label ?? providerName}" removed`, + }); + navigate(AI_ADMIN_PATH); + } catch { + enqueueErrorSnackBar({ + message: t`Failed to remove provider`, + }); + } + }; + + const handleRemoveModel = async () => { + if (!providerName || !modelToRemove) { + return; + } + + try { + await removeModelFromProvider({ + variables: { + providerName, + modelName: modelToRemove.name, + }, + refetchQueries: [ + { query: GET_AI_PROVIDERS }, + { query: GET_ADMIN_AI_MODELS }, + ], + }); + await refetchClientConfig(); + enqueueSuccessSnackBar({ + message: t`Model "${modelToRemove.label}" removed`, + }); + setModelToRemove(null); + } catch { + enqueueErrorSnackBar({ + message: t`Failed to remove model`, + }); + } + }; + + const providerConfig = + providerName && providersData?.getAiProviders + ? providersData.getAiProviders[providerName] + : undefined; + + const provider = useMemo( + () => + providerName && isDefined(providerConfig) + ? { id: providerName, ...providerConfig } + : undefined, + [providerName, providerConfig], + ); + + const isCustomProvider = provider?.source === AI_PROVIDER_SOURCE.CUSTOM; + + const providerModels = useMemo(() => { + const allModels = modelsData?.getAdminAiModels?.models ?? []; + + return allModels.filter((model) => model.providerName === providerName); + }, [modelsData, providerName]); + + const filteredModels = + searchQuery.trim().length === 0 + ? providerModels + : providerModels.filter((model) => { + const query = searchQuery.toLowerCase(); + + return ( + model.label.toLowerCase().includes(query) || + model.modelId.toLowerCase().includes(query) + ); + }); + + const handleModelToggle = async ( + modelId: string, + isCurrentlyEnabled: boolean, + ) => { + try { + await setModelEnabled({ + variables: { modelId, enabled: !isCurrentlyEnabled }, + refetchQueries: [{ query: GET_ADMIN_AI_MODELS }], + }); + await refetchClientConfig(); + } catch { + enqueueErrorSnackBar({ + message: t`Failed to update model availability`, + }); + } + }; + + const handleModelRemoveClick = (model: AdminAiModelConfig) => { + setModelToRemove({ + modelId: model.modelId, + label: model.label, + name: model.name ?? model.modelId, + }); + openModal(REMOVE_MODEL_MODAL_ID); + }; + + const providerInfoItems = useMemo(() => { + if (!provider) { + return []; + } + + const items: Array<{ + Icon: IconComponent; + label: string; + value: string | React.ReactNode; + }> = [ + { + Icon: IconTag, + label: t`Name`, + value: provider.label ?? provider.id, + }, + { + Icon: IconPlug, + label: t`SDK`, + value: provider.npm, + }, + ]; + + if (provider.apiKeyConfigVariable) { + const envVar = provider.apiKeyConfigVariable; + const configPath = getSettingsPath( + SettingsPath.AdminPanelConfigVariableDetails, + { variableName: envVar }, + ); + + items.push({ + Icon: IconKey, + label: t`API Key`, + value: ( + { + event.preventDefault(); + navigate(configPath); + }} + /> + ), + }); + } else if (provider.apiKey) { + items.push({ + Icon: IconKey, + label: t`API Key`, + value: provider.apiKey, + }); + } + + if (provider.baseUrl) { + items.push({ + Icon: IconWorld, + label: t`Base URL`, + value: provider.baseUrl, + }); + } + + if (provider.region) { + items.push({ + Icon: IconServer, + label: t`Region`, + value: provider.region, + }); + } + + if (provider.hasAccessKey) { + items.push({ + Icon: IconKey, + label: t`Credentials`, + value: t`IAM credentials configured`, + }); + } + + if (isCustomProvider && provider.dataResidency) { + items.push({ + Icon: IconFlag, + label: t`Data Residency`, + value: getDataResidencyDisplay(provider.dataResidency), + }); + } + + return items; + }, [provider, navigate, isCustomProvider]); + + const newModelPath = providerName + ? getSettingsPath(SettingsPath.AdminPanelNewAiModel, { providerName }) + : undefined; + + if (isLoadingProviders || isLoadingModels) { + return ; + } + + return ( + + +
+ + + {provider && ( + + )} +
+ +
+ + + {providerModels.length > 3 && ( + + )} + + {filteredModels.length > 0 && ( + + )} + + {isCustomProvider && newModelPath && ( + +
+ + {isCustomProvider && ( +
+ +
+ )} +
+ + + + +
+ ); +}; diff --git a/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx new file mode 100644 index 00000000000..b8bd3595300 --- /dev/null +++ b/packages/twenty-front/src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx @@ -0,0 +1,536 @@ +import { useMemo, useState } from 'react'; + +import { styled } from '@linaria/react'; +import { useMutation, useQuery } from '@apollo/client/react'; +import { t } from '@lingui/core/macro'; +import { Trans, useLingui } from '@lingui/react/macro'; +import { Controller, useForm } from 'react-hook-form'; +import { useNavigate, useParams } from 'react-router-dom'; +import { SettingsPath } from 'twenty-shared/types'; +import { getSettingsPath, isDefined } from 'twenty-shared/utils'; +import { H2Title, IconPlus } from 'twenty-ui/display'; +import { Section } from 'twenty-ui/layout'; +import { themeCssVariables } from 'twenty-ui/theme-constants'; + +import { ADD_MODEL_TO_PROVIDER } from '@/settings/admin-panel/ai/graphql/mutations/addModelToProvider'; +import { GET_ADMIN_AI_MODELS } from '@/settings/admin-panel/ai/graphql/queries/getAdminAiModels'; +import { GET_AI_PROVIDERS } from '@/settings/admin-panel/ai/graphql/queries/getAiProviders'; +import { GET_MODELS_DEV_SUGGESTIONS } from '@/settings/admin-panel/ai/graphql/queries/getModelsDevSuggestions'; +import { type GetAiProvidersResult } from '@/settings/admin-panel/ai/types/GetAiProvidersResult'; +import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; +import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; +import { Select } from '@/ui/input/components/Select'; +import { TextInput } from '@/ui/input/components/TextInput'; +import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; +import { Checkbox, Toggle } from 'twenty-ui/input'; + +const StyledComboInputContainer = styled.div` + display: flex; + flex-direction: row; + gap: ${themeCssVariables.spacing[4]}; +`; + +const MODALITY_OPTIONS = [ + { value: 'image', label: t`Image` }, + { value: 'pdf', label: t`PDF` }, + { value: 'audio', label: t`Audio` }, + { value: 'video', label: t`Video` }, +]; + +const StyledCheckboxRow = styled.div` + align-items: center; + cursor: pointer; + display: flex; + gap: ${themeCssVariables.spacing[2]}; + padding: ${themeCssVariables.spacing[1]} 0; +`; + +const StyledModalitiesContainer = styled.div` + display: flex; + flex-direction: column; +`; + +type ModelSuggestion = { + modelId: string; + name: string; + inputCostPerMillionTokens: number; + outputCostPerMillionTokens: number; + cachedInputCostPerMillionTokens?: number; + cacheCreationCostPerMillionTokens?: number; + contextWindowTokens: number; + maxOutputTokens: number; + modalities: string[]; + supportsReasoning: boolean; +}; + +type FormValues = { + name: string; + label: string; + inputCostPerMillionTokens: string; + outputCostPerMillionTokens: string; + cachedInputCostPerMillionTokens: string; + cacheCreationCostPerMillionTokens: string; + contextWindowTokens: string; + maxOutputTokens: string; + modalities: string[]; + supportsReasoning: boolean; +}; + +export const SettingsAdminNewAiModel = () => { + const { providerName } = useParams<{ providerName: string }>(); + const navigate = useNavigate(); + const { t } = useLingui(); + const { enqueueSuccessSnackBar, enqueueErrorSnackBar } = useSnackBar(); + const [isSubmitting, setIsSubmitting] = useState(false); + const [isCustomModelId, setIsCustomModelId] = useState(false); + + const { data: providersData } = + useQuery(GET_AI_PROVIDERS); + + const provider = + providerName && providersData?.getAiProviders + ? providersData.getAiProviders[providerName] + : undefined; + + const modelsDevName = provider?.name; + + const { data: suggestionsData } = useQuery<{ + getModelsDevSuggestions: ModelSuggestion[]; + }>(GET_MODELS_DEV_SUGGESTIONS, { + variables: { providerType: modelsDevName ?? '' }, + skip: !modelsDevName, + }); + + const suggestions = useMemo( + () => suggestionsData?.getModelsDevSuggestions ?? [], + [suggestionsData?.getModelsDevSuggestions], + ); + + const suggestionsByModelId = useMemo(() => { + const map = new Map(); + + for (const suggestion of suggestions) { + map.set(suggestion.modelId, suggestion); + } + + return map; + }, [suggestions]); + + const modelIdOptions = suggestions.map((suggestion) => ({ + value: suggestion.modelId, + label: `${suggestion.name} (${suggestion.modelId})`, + })); + + const [addModelToProvider] = useMutation(ADD_MODEL_TO_PROVIDER); + + const form = useForm({ + mode: 'onSubmit', + defaultValues: { + name: '', + label: '', + inputCostPerMillionTokens: '', + outputCostPerMillionTokens: '', + cachedInputCostPerMillionTokens: '', + cacheCreationCostPerMillionTokens: '', + contextWindowTokens: '', + maxOutputTokens: '', + modalities: [], + supportsReasoning: false, + }, + }); + + const providerDetailPath = providerName + ? getSettingsPath(SettingsPath.AdminPanelAiProviderDetail, { + providerName, + }) + : getSettingsPath(SettingsPath.AdminPanel); + + const handleModelIdSelected = (modelId: string) => { + form.setValue('name', modelId); + const suggestion = suggestionsByModelId.get(modelId); + + if (isDefined(suggestion)) { + form.setValue('label', suggestion.name); + form.setValue( + 'inputCostPerMillionTokens', + String(suggestion.inputCostPerMillionTokens), + ); + form.setValue( + 'outputCostPerMillionTokens', + String(suggestion.outputCostPerMillionTokens), + ); + form.setValue( + 'cachedInputCostPerMillionTokens', + isDefined(suggestion.cachedInputCostPerMillionTokens) + ? String(suggestion.cachedInputCostPerMillionTokens) + : '', + ); + form.setValue( + 'cacheCreationCostPerMillionTokens', + isDefined(suggestion.cacheCreationCostPerMillionTokens) + ? String(suggestion.cacheCreationCostPerMillionTokens) + : '', + ); + form.setValue( + 'contextWindowTokens', + String(suggestion.contextWindowTokens), + ); + form.setValue('maxOutputTokens', String(suggestion.maxOutputTokens)); + form.setValue('modalities', suggestion.modalities ?? []); + form.setValue('supportsReasoning', suggestion.supportsReasoning); + } + }; + + const handleSave = async () => { + if (!providerName) { + return; + } + + const values = form.getValues(); + + if (!values.name.trim()) { + form.setError('name', { + type: 'manual', + message: t`Model ID is required`, + }); + + return; + } + + if (!values.label.trim()) { + form.setError('label', { + type: 'manual', + message: t`Label is required`, + }); + + return; + } + + const cachedInput = parseFloat( + values.cachedInputCostPerMillionTokens || '', + ); + const cacheCreation = parseFloat( + values.cacheCreationCostPerMillionTokens || '', + ); + + const modelConfig = { + name: values.name.trim(), + label: values.label.trim(), + inputCostPerMillionTokens: parseFloat( + values.inputCostPerMillionTokens || '0', + ), + outputCostPerMillionTokens: parseFloat( + values.outputCostPerMillionTokens || '0', + ), + ...(isFinite(cachedInput) && { + cachedInputCostPerMillionTokens: cachedInput, + }), + ...(isFinite(cacheCreation) && { + cacheCreationCostPerMillionTokens: cacheCreation, + }), + contextWindowTokens: parseInt(values.contextWindowTokens || '0', 10), + maxOutputTokens: parseInt(values.maxOutputTokens || '0', 10), + ...(values.modalities.length > 0 && { + modalities: values.modalities, + }), + supportsReasoning: values.supportsReasoning, + }; + + setIsSubmitting(true); + + try { + await addModelToProvider({ + variables: { + providerName, + modelConfig, + }, + refetchQueries: [ + { query: GET_AI_PROVIDERS }, + { query: GET_ADMIN_AI_MODELS }, + ], + }); + + enqueueSuccessSnackBar({ + message: t`Model "${values.label.trim()}" added`, + }); + navigate(providerDetailPath); + } catch { + enqueueErrorSnackBar({ + message: t`Failed to add model`, + }); + } finally { + setIsSubmitting(false); + } + }; + + const hasSuggestions = modelIdOptions.length > 0; + const showModelSelect = hasSuggestions && !isCustomModelId; + + return ( +
+ Admin Panel, + href: getSettingsPath(SettingsPath.AdminPanel), + }, + { + children: provider?.label ?? providerName ?? '', + href: providerDetailPath, + }, + { children: New Model }, + ]} + actionButton={ + navigate(providerDetailPath)} + isSaveDisabled={isSubmitting} + onSave={handleSave} + /> + } + > + +
+ + {showModelSelect ? ( + ( + +
+ + {isModelsDevWithoutNativeSdk && ( + + )} + + {hasSelected && ( + <> +
+ + ( + + )} + /> +
+ + {needsApiKey && ( +
+ + ( + + )} + /> +
+ )} + + {isOpenAICompatible && ( +
+ + ( + + )} + /> +
+ )} + +
+ + ( +