diff --git a/packages/frontend/core/src/blocksuite/ai/actions/doc-handler.ts b/packages/frontend/core/src/blocksuite/ai/actions/doc-handler.ts index c1bb946196..55cc45d764 100644 --- a/packages/frontend/core/src/blocksuite/ai/actions/doc-handler.ts +++ b/packages/frontend/core/src/blocksuite/ai/actions/doc-handler.ts @@ -22,6 +22,7 @@ import { selectAboveBlocks, } from '../utils/selection-utils'; import type { AffineAIPanelWidget } from '../widgets/ai-panel/ai-panel'; +import type { AINetworkSearchConfig } from '../widgets/ai-panel/type'; import { actionToAnswerRenderer } from './answer-renderer'; export function bindTextStream( @@ -69,7 +70,8 @@ function actionToStream( Parameters[0], keyof BlockSuitePresets.AITextActionOptions >, - trackerOptions?: BlockSuitePresets.TrackerOptions + trackerOptions?: BlockSuitePresets.TrackerOptions, + networkConfig?: AINetworkSearchConfig ): BlockSuitePresets.TextStream | undefined { const action = AIProvider.actions[id]; if (!action || typeof action !== 'function') return; @@ -94,10 +96,11 @@ function actionToStream( const models = selectedBlocks?.map(block => block.model); const control = trackerOptions?.control ?? 'format-bar'; const where = trackerOptions?.where ?? 'ai-panel'; + const { visible, enabled } = networkConfig ?? {}; const options = { ...variants, attachments, - input: input ? `${markdown}\n${input}` : markdown, + input: input ? (markdown ? `${markdown}\n${input}` : input) : markdown, stream: true, host, models, @@ -106,6 +109,7 @@ function actionToStream( where, docId: host.doc.id, workspaceId: host.doc.workspace.id, + networkSearch: visible?.value && enabled?.value, } as Parameters[0]; // @ts-expect-error TODO(@Peng): maybe fix this stream = await action(options); @@ -122,7 +126,8 @@ function actionToGenerateAnswer( Parameters[0], keyof BlockSuitePresets.AITextActionOptions >, - trackerOptions?: BlockSuitePresets.TrackerOptions + trackerOptions?: BlockSuitePresets.TrackerOptions, + networkConfig?: AINetworkSearchConfig ) { return ({ input, @@ -143,7 +148,8 @@ function actionToGenerateAnswer( input, signal, variants, - trackerOptions + trackerOptions, + networkConfig ); if (!stream) return; bindTextStream(stream, { update, finish, signal }); @@ -171,7 +177,8 @@ function updateAIPanelConfig( host, id, variants, - trackerOptions + trackerOptions, + config.networkSearchConfig ); const ctx = new AIContext(); diff --git a/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts b/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts index f1fbce5a32..272d421f1d 100644 --- a/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts +++ b/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts @@ -36,6 +36,7 @@ import { getSelections, } from '../utils/selection-utils'; import type { AffineAIPanelWidget } from '../widgets/ai-panel/ai-panel'; +import type { AINetworkSearchConfig } from '../widgets/ai-panel/type'; import type { EdgelessCopilotWidget } from '../widgets/edgeless-copilot'; import { actionToAnswerRenderer } from './answer-renderer'; import { EXCLUDING_COPY_ACTIONS } from './consts'; @@ -168,7 +169,8 @@ function actionToStream( seed?: string; } | void>, trackerOptions?: BlockSuitePresets.TrackerOptions, - panelInput?: string + panelInput?: string, + networkConfig?: AINetworkSearchConfig ) { const action = AIProvider.actions[id]; @@ -182,6 +184,7 @@ function actionToStream( return { async *[Symbol.asyncIterator]() { const models = getCopilotSelectedElems(host); + const { visible, enabled } = networkConfig ?? {}; const options = { ...variants, signal, @@ -193,6 +196,7 @@ function actionToStream( host, docId: host.doc.id, workspaceId: host.doc.workspace.id, + networkSearch: visible?.value && enabled?.value, } as Parameters[0]; const content = ctx.get().content; @@ -259,7 +263,8 @@ function actionToGeneration( attachments?: (string | Blob)[]; seed?: string; } | void>, - trackerOptions?: BlockSuitePresets.TrackerOptions + trackerOptions?: BlockSuitePresets.TrackerOptions, + networkConfig?: AINetworkSearchConfig ) { return (host: EditorHost, ctx: AIContext) => { return ({ @@ -284,7 +289,8 @@ function actionToGeneration( variants, extract, trackerOptions, - input + input, + networkConfig )?.(host, ctx); if (!stream) return; @@ -325,7 +331,8 @@ function updateEdgelessAIPanelConfig< id, variants, customInput, - trackerOptions + trackerOptions, + config.networkSearchConfig )(host, ctx); config.finishStateConfig = actionToResponse(id, host, ctx, variants); config.generatingStateConfig = actionToGenerating(id, generatingIcon);