feat: check server type in chat (#13875)

This commit is contained in:
DarkSky
2025-11-06 20:55:32 +08:00
committed by GitHub
parent c9a4129a3e
commit d33df659f8
11 changed files with 76 additions and 9 deletions

View File

@@ -1,4 +1,5 @@
import type { AIToolsConfigService } from '@affine/core/modules/ai-button';
import type { ServerService } from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { AppThemeService } from '@affine/core/modules/theme';
@@ -94,6 +95,9 @@ export class AIChatPanelTitle extends SignalWatcher(
@property({ attribute: false })
accessor extensions!: ExtensionType[];
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineFeatureFlagService!: FeatureFlagService;
@@ -145,6 +149,7 @@ export class AIChatPanelTitle extends SignalWatcher(
.searchMenuConfig=${this.searchMenuConfig}
.docDisplayConfig=${this.docDisplayConfig}
.extensions=${this.extensions}
.serverService=${this.serverService}
.affineFeatureFlagService=${this.affineFeatureFlagService}
.affineThemeService=${this.affineThemeService}
.notificationService=${this.notificationService}

View File

@@ -3,7 +3,10 @@ import type {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { PeekViewService } from '@affine/core/modules/peek-view';
@@ -107,6 +110,9 @@ export class ChatPanel extends SignalWatcher(
@property({ attribute: false })
accessor extensions!: ExtensionType[];
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineFeatureFlagService!: FeatureFlagService;
@@ -429,6 +435,7 @@ export class ChatPanel extends SignalWatcher(
.searchMenuConfig=${this.searchMenuConfig}
.docDisplayConfig=${this.docDisplayConfig}
.extensions=${this.extensions}
.serverService=${this.serverService}
.affineFeatureFlagService=${this.affineFeatureFlagService}
.affineWorkspaceDialogService=${this.affineWorkspaceDialogService}
.affineThemeService=${this.affineThemeService}
@@ -456,6 +463,7 @@ export class ChatPanel extends SignalWatcher(
.searchMenuConfig=${this.searchMenuConfig}
.docDisplayConfig=${this.docDisplayConfig}
.extensions=${this.extensions}
.serverService=${this.serverService}
.affineFeatureFlagService=${this.affineFeatureFlagService}
.affineWorkspaceDialogService=${this.affineWorkspaceDialogService}
.affineThemeService=${this.affineThemeService}

View File

@@ -5,7 +5,10 @@ import type {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type {
ContextEmbedStatus,
@@ -128,6 +131,9 @@ export class AIChatComposer extends SignalWatcher(
@property({ attribute: false })
accessor portalContainer: HTMLElement | null = null;
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineWorkspaceDialogService!: WorkspaceDialogService;
@@ -197,6 +203,7 @@ export class AIChatComposer extends SignalWatcher(
.reasoningConfig=${this.reasoningConfig}
.docDisplayConfig=${this.docDisplayConfig}
.searchMenuConfig=${this.searchMenuConfig}
.serverService=${this.serverService}
.affineFeatureFlagService=${this.affineFeatureFlagService}
.aiDraftService=${this.aiDraftService}
.aiToolsConfigService=${this.aiToolsConfigService}

View File

@@ -4,7 +4,10 @@ import type {
} from '@affine/core/modules/ai-button';
import type { AIDraftState } from '@affine/core/modules/ai-button/services/ai-draft';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { PeekViewService } from '@affine/core/modules/peek-view';
@@ -151,6 +154,9 @@ export class AIChatContent extends SignalWatcher(
@property({ attribute: false })
accessor extensions!: ExtensionType[];
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineFeatureFlagService!: FeatureFlagService;
@@ -472,6 +478,7 @@ export class AIChatContent extends SignalWatcher(
.reasoningConfig=${this.reasoningConfig}
.docDisplayConfig=${this.docDisplayConfig}
.searchMenuConfig=${this.searchMenuConfig}
.serverService=${this.serverService}
.affineWorkspaceDialogService=${this.affineWorkspaceDialogService}
.notificationService=${this.notificationService}
.aiDraftService=${this.aiDraftService}

View File

@@ -3,7 +3,10 @@ import type {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { CopilotChatHistoryFragment } from '@affine/graphql';
import { SignalWatcher, WithDisposable } from '@blocksuite/affine/global/lit';
@@ -359,6 +362,9 @@ export class AIChatInput extends SignalWatcher(
@property({ attribute: false })
accessor searchMenuConfig!: SearchMenuConfig;
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor aiDraftService: AIDraftService | undefined;
@@ -533,6 +539,7 @@ export class AIChatInput extends SignalWatcher(
.networkSearchVisible=${!!this.networkSearchConfig.visible.value}
.isNetworkActive=${this._isNetworkActive}
.onNetworkActiveChange=${this._toggleNetworkSearch}
.serverService=${this.serverService}
.toolsConfigService=${this.aiToolsConfigService}
.notificationService=${this.notificationService}
.subscriptionService=${this.subscriptionService}

View File

@@ -1,8 +1,12 @@
import type { AIToolsConfigService } from '@affine/core/modules/ai-button';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import {
type CopilotChatHistoryFragment,
ServerDeploymentType,
SubscriptionStatus,
} from '@affine/graphql';
import {
@@ -110,6 +114,9 @@ export class ChatInputPreference extends SignalWatcher(
| undefined;
// --------- search props end ---------
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor toolsConfigService!: AIToolsConfigService;
@@ -153,6 +160,9 @@ export class ChatInputPreference extends SignalWatcher(
options: {
items: this.aiModelService.models.value.map(model => {
const isSelected = model.id === this.model.value?.id;
const isSelfHosted =
this.serverService.server.config$.value?.type ===
ServerDeploymentType.Selfhosted;
const status =
this.subscriptionService.subscription.ai$.value?.status;
const isSubscribed = status === SubscriptionStatus.Active;
@@ -172,7 +182,7 @@ export class ChatInputPreference extends SignalWatcher(
</div>
`,
select: () => {
if (model.isPro && !isSubscribed) {
if (model.isPro && !isSelfHosted && !isSubscribed) {
this.notificationService.toast(
`Pro models require an AFFiNE AI subscription.`
);

View File

@@ -1,4 +1,5 @@
import type { AIToolsConfigService } from '@affine/core/modules/ai-button';
import type { ServerService } from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { AppThemeService } from '@affine/core/modules/theme';
@@ -167,6 +168,9 @@ export class PlaygroundChat extends SignalWatcher(
@property({ attribute: false })
accessor extensions!: ExtensionType[];
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineFeatureFlagService!: FeatureFlagService;
@@ -373,6 +377,7 @@ export class PlaygroundChat extends SignalWatcher(
.playgroundConfig=${this.playgroundConfig}
.docDisplayConfig=${this.docDisplayConfig}
.searchMenuConfig=${this.searchMenuConfig}
.serverService=${this.serverService}
.notificationService=${this.notificationService}
.aiToolsConfigService=${this.aiToolsConfigService}
.affineWorkspaceDialogService=${this.affineWorkspaceDialogService}

View File

@@ -1,4 +1,5 @@
import type { AIToolsConfigService } from '@affine/core/modules/ai-button';
import type { ServerService } from '@affine/core/modules/cloud';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { AppThemeService } from '@affine/core/modules/theme';
import type { CopilotChatHistoryFragment } from '@affine/graphql';
@@ -84,6 +85,9 @@ export class PlaygroundContent extends SignalWatcher(
@property({ attribute: false })
accessor extensions!: ExtensionType[];
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor affineFeatureFlagService!: FeatureFlagService;
@@ -348,6 +352,7 @@ export class PlaygroundContent extends SignalWatcher(
.searchMenuConfig=${this.searchMenuConfig}
.docDisplayConfig=${this.docDisplayConfig}
.extensions=${this.extensions}
.serverService=${this.serverService}
.affineFeatureFlagService=${this.affineFeatureFlagService}
.affineThemeService=${this.affineThemeService}
.notificationService=${this.notificationService}

View File

@@ -3,7 +3,10 @@ import type {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import type { AIModelService } from '@affine/core/modules/ai-button/services/models';
import type { SubscriptionService } from '@affine/core/modules/cloud';
import type {
ServerService,
SubscriptionService,
} from '@affine/core/modules/cloud';
import type { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import type { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type {
@@ -624,6 +627,7 @@ export class AIChatBlockPeekView extends LitElement {
}}
.portalContainer=${this.parentElement}
.reasoningConfig=${this.reasoningConfig}
.serverService=${this.serverService}
.subscriptionService=${this.subscriptionService}
.aiModelService=${this.aiModelService}
.onAISubscribe=${this.onAISubscribe}
@@ -646,6 +650,9 @@ export class AIChatBlockPeekView extends LitElement {
@property({ attribute: false })
accessor reasoningConfig!: AIReasoningConfig;
@property({ attribute: false })
accessor serverService!: ServerService;
@property({ attribute: false })
accessor docDisplayConfig!: DocDisplayConfig;
@@ -708,6 +715,7 @@ export const AIChatBlockPeekViewTemplate = (
searchMenuConfig: SearchMenuConfig,
networkSearchConfig: AINetworkSearchConfig,
reasoningConfig: AIReasoningConfig,
serverService: ServerService,
affineFeatureFlagService: FeatureFlagService,
affineWorkspaceDialogService: WorkspaceDialogService,
aiDraftService: AIDraftService,
@@ -723,6 +731,7 @@ export const AIChatBlockPeekViewTemplate = (
.docDisplayConfig=${docDisplayConfig}
.searchMenuConfig=${searchMenuConfig}
.reasoningConfig=${reasoningConfig}
.serverService=${serverService}
.affineFeatureFlagService=${affineFeatureFlagService}
.affineWorkspaceDialogService=${affineWorkspaceDialogService}
.aiDraftService=${aiDraftService}

View File

@@ -10,7 +10,7 @@ import {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import { AIModelService } from '@affine/core/modules/ai-button/services/models';
import { SubscriptionService } from '@affine/core/modules/cloud';
import { ServerService, SubscriptionService } from '@affine/core/modules/cloud';
import { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import { PeekViewService } from '@affine/core/modules/peek-view';
@@ -92,6 +92,7 @@ export const EditorChatPanel = forwardRef(function EditorChatPanel(
chatPanelRef.current.reasoningConfig = reasoningConfig;
chatPanelRef.current.playgroundConfig = playgroundConfig;
chatPanelRef.current.extensions = specs;
chatPanelRef.current.serverService = framework.get(ServerService);
chatPanelRef.current.affineFeatureFlagService =
framework.get(FeatureFlagService);
chatPanelRef.current.affineWorkspaceDialogService = framework.get(

View File

@@ -8,7 +8,7 @@ import {
AIToolsConfigService,
} from '@affine/core/modules/ai-button';
import { AIModelService } from '@affine/core/modules/ai-button/services/models';
import { SubscriptionService } from '@affine/core/modules/cloud';
import { ServerService, SubscriptionService } from '@affine/core/modules/cloud';
import { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import type { EditorHost } from '@blocksuite/affine/std';
@@ -32,6 +32,7 @@ export const AIChatBlockPeekView = ({
} = useAIChatConfig();
const framework = useFramework();
const serverService = framework.get(ServerService);
const affineFeatureFlagService = framework.get(FeatureFlagService);
const affineWorkspaceDialogService = framework.get(WorkspaceDialogService);
const aiDraftService = framework.get(AIDraftService);
@@ -48,6 +49,7 @@ export const AIChatBlockPeekView = ({
searchMenuConfig,
networkSearchConfig,
reasoningConfig,
serverService,
affineFeatureFlagService,
affineWorkspaceDialogService,
aiDraftService,
@@ -64,6 +66,7 @@ export const AIChatBlockPeekView = ({
searchMenuConfig,
networkSearchConfig,
reasoningConfig,
serverService,
affineFeatureFlagService,
affineWorkspaceDialogService,
aiDraftService,