@@ -33,12 +33,12 @@ export function AIMessageView(
mode: 'default',
contentContext: context,
wrapBlocksInSuspense: false,
- shouldRenderLinkPreviews: true,
+ withLinkPreviews,
}}
style="mt-2 space-y-4 empty:hidden"
/>
- {renderToolCalls && step.toolCalls && step.toolCalls.length > 0 ? (
+ {withToolCalls && step.toolCalls && step.toolCalls.length > 0 ? (
) : null}
diff --git a/packages/gitbook/src/components/AI/server-actions/chat.ts b/packages/gitbook/src/components/AI/server-actions/chat.ts
index ecfc519b69..8a81ffc805 100644
--- a/packages/gitbook/src/components/AI/server-actions/chat.ts
+++ b/packages/gitbook/src/components/AI/server-actions/chat.ts
@@ -1,4 +1,5 @@
'use server';
+import { getEmbeddableLinker } from '@/lib/embeddable';
import { getSiteURLDataFromMiddleware } from '@/lib/middleware';
import { getServerActionBaseContext } from '@/lib/server-actions';
import { traceErrorOnly } from '@/lib/tracing';
@@ -31,7 +32,11 @@ export async function* streamAIChatResponse({
options?: RenderAIMessageOptions;
}) {
const { stream } = await traceErrorOnly('AI.streamAIChatResponse', async () => {
- const context = await getServerActionBaseContext();
+ let context = await getServerActionBaseContext();
+ if (options?.asEmbeddable) {
+ context = { ...context, linker: getEmbeddableLinker(context.linker) };
+ }
+
const siteURLData = await getSiteURLDataFromMiddleware();
const api = await context.dataFetcher.api();
diff --git a/packages/gitbook/src/components/AI/server-actions/index.ts b/packages/gitbook/src/components/AI/server-actions/index.ts
index 51f681fc7e..be055934e9 100644
--- a/packages/gitbook/src/components/AI/server-actions/index.ts
+++ b/packages/gitbook/src/components/AI/server-actions/index.ts
@@ -1,3 +1,2 @@
export * from './types';
-export * from './responses';
export * from './chat';
diff --git a/packages/gitbook/src/components/AI/server-actions/responses.ts b/packages/gitbook/src/components/AI/server-actions/responses.ts
deleted file mode 100644
index 41b702ac4e..0000000000
--- a/packages/gitbook/src/components/AI/server-actions/responses.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-'use server';
-import { getSiteURLDataFromMiddleware } from '@/lib/middleware';
-import { getServerActionBaseContext } from '@/lib/server-actions';
-import { traceErrorOnly } from '@/lib/tracing';
-import { streamRenderAIMessage } from './api';
-import type { RenderAIMessageOptions } from './types';
-
-/**
- * Stream an existing AI responses.
- */
-export async function* streamAIResponseById({
- responseId,
- options,
-}: {
- responseId: string;
- options?: RenderAIMessageOptions;
-}) {
- const { stream } = await traceErrorOnly('AI.streamAIResponseById', async () => {
- const context = await getServerActionBaseContext();
- const siteURLData = await getSiteURLDataFromMiddleware();
-
- const api = await context.dataFetcher.api();
- const rawStream = api.orgs.streamExistingAiResponseInSite(
- siteURLData.organization,
- siteURLData.site,
- responseId
- );
- return await streamRenderAIMessage(context, rawStream, options);
- });
-
- for await (const output of stream) {
- yield output;
- }
-}
diff --git a/packages/gitbook/src/components/AI/server-actions/types.ts b/packages/gitbook/src/components/AI/server-actions/types.ts
index 8aef764a22..f16764ce76 100644
--- a/packages/gitbook/src/components/AI/server-actions/types.ts
+++ b/packages/gitbook/src/components/AI/server-actions/types.ts
@@ -16,5 +16,17 @@ export type RenderAIMessageOptions = {
* Render the tool calls.
* @default true
*/
- renderToolCalls?: boolean;
+ withToolCalls?: boolean;
+
+ /**
+ * Render the link previews.
+ * @default true
+ */
+ withLinkPreviews?: boolean;
+
+ /**
+ * Generate links in the context of an embeddable view.
+ * @default false
+ */
+ asEmbeddable?: boolean;
};
diff --git a/packages/gitbook/src/components/AI/useAI.tsx b/packages/gitbook/src/components/AI/useAI.tsx
index bb7038d955..834319f00b 100644
--- a/packages/gitbook/src/components/AI/useAI.tsx
+++ b/packages/gitbook/src/components/AI/useAI.tsx
@@ -77,7 +77,7 @@ export function useAI(): AIContext {
if (config.aiMode === CustomizationAIMode.Assistant) {
assistants.push({
id: 'gitbook-assistant',
- label: getAIChatName(config.trademark),
+ label: getAIChatName(language, config.trademark),
icon: (