@burtson-labs/bandit-engine 2.0.51 → 2.0.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{aiProviderStore-3N3VE6D4.mjs → aiProviderStore-337QNQB3.mjs} +2 -2
- package/dist/{chat-W5IFNEUC.mjs → chat-U4SE4JQK.mjs} +6 -6
- package/dist/chat-provider.js +242 -17
- package/dist/chat-provider.js.map +1 -1
- package/dist/chat-provider.mjs +4 -4
- package/dist/{chunk-LXD3IV6Z.mjs → chunk-2BGORTWS.mjs} +4 -4
- package/dist/{chunk-IDH2YOW3.mjs → chunk-557E5VZ2.mjs} +198 -11
- package/dist/chunk-557E5VZ2.mjs.map +1 -0
- package/dist/{chunk-QFSEZAG6.mjs → chunk-AVV7HDGR.mjs} +34 -3
- package/dist/chunk-AVV7HDGR.mjs.map +1 -0
- package/dist/{chunk-N7RMUOFB.mjs → chunk-EULV5CHD.mjs} +2 -2
- package/dist/{chunk-STMXPFAQ.mjs → chunk-GNE4TTSI.mjs} +48 -15
- package/dist/chunk-GNE4TTSI.mjs.map +1 -0
- package/dist/{chunk-BENL3EF2.mjs → chunk-H3BYFEIE.mjs} +18 -10
- package/dist/chunk-H3BYFEIE.mjs.map +1 -0
- package/dist/{chunk-HETIHZ42.mjs → chunk-NZKLKZJT.mjs} +3 -3
- package/dist/{chunk-JBXNXSAH.mjs → chunk-O54PTFJM.mjs} +460 -181
- package/dist/chunk-O54PTFJM.mjs.map +1 -0
- package/dist/{chunk-EWUUF4GE.mjs → chunk-UFSEYVRS.mjs} +3 -3
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/{gateway-oScD5tvE.d.ts → gateway-C5T5FfCy.d.mts} +32 -0
- package/dist/{gateway-oScD5tvE.d.mts → gateway-C5T5FfCy.d.ts} +32 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +738 -202
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/management/management.js +708 -202
- package/dist/management/management.js.map +1 -1
- package/dist/management/management.mjs +7 -7
- package/dist/modals/chat-modal/chat-modal.js +214 -17
- package/dist/modals/chat-modal/chat-modal.js.map +1 -1
- package/dist/modals/chat-modal/chat-modal.mjs +4 -4
- package/dist/public-types.d.mts +1 -1
- package/dist/public-types.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-BENL3EF2.mjs.map +0 -1
- package/dist/chunk-IDH2YOW3.mjs.map +0 -1
- package/dist/chunk-JBXNXSAH.mjs.map +0 -1
- package/dist/chunk-QFSEZAG6.mjs.map +0 -1
- package/dist/chunk-STMXPFAQ.mjs.map +0 -1
- /package/dist/{aiProviderStore-3N3VE6D4.mjs.map → aiProviderStore-337QNQB3.mjs.map} +0 -0
- /package/dist/{chat-W5IFNEUC.mjs.map → chat-U4SE4JQK.mjs.map} +0 -0
- /package/dist/{chunk-LXD3IV6Z.mjs.map → chunk-2BGORTWS.mjs.map} +0 -0
- /package/dist/{chunk-N7RMUOFB.mjs.map → chunk-EULV5CHD.mjs.map} +0 -0
- /package/dist/{chunk-HETIHZ42.mjs.map → chunk-NZKLKZJT.mjs.map} +0 -0
- /package/dist/{chunk-EWUUF4GE.mjs.map → chunk-UFSEYVRS.mjs.map} +0 -0
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
} from "./chunk-ONQMRE2G.mjs";
|
|
4
4
|
import {
|
|
5
5
|
aiProviderInitService
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UFSEYVRS.mjs";
|
|
7
7
|
import {
|
|
8
8
|
useMCPToolsStore
|
|
9
9
|
} from "./chunk-EHNWQ4T3.mjs";
|
|
10
10
|
import {
|
|
11
|
+
AUTH_TOKEN_CHANGED_EVENT,
|
|
11
12
|
FeatureFlagProvider,
|
|
12
13
|
NotificationProvider,
|
|
13
14
|
authenticationService,
|
|
@@ -20,7 +21,7 @@ import {
|
|
|
20
21
|
useKnowledgeStore2,
|
|
21
22
|
useMemoryStore,
|
|
22
23
|
useProjectStore
|
|
23
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-557E5VZ2.mjs";
|
|
24
25
|
import {
|
|
25
26
|
indexedDBService_default,
|
|
26
27
|
useModelStore,
|
|
@@ -149,6 +150,36 @@ var ChatProvider = (props) => {
|
|
|
149
150
|
};
|
|
150
151
|
initializeAsync();
|
|
151
152
|
}, [props.packageSettings, loadDocuments]);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
const isPlaygroundRoute = typeof window !== "undefined" && window.location.pathname.includes("/playground");
|
|
155
|
+
const isPlaygroundMode = isPlaygroundRoute || props.packageSettings.playgroundMode === true;
|
|
156
|
+
if (isPlaygroundMode || !props.packageSettings.gatewayApiUrl) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const initializeSyncState = async () => {
|
|
160
|
+
try {
|
|
161
|
+
await useConversationSyncStore.getState().initialize();
|
|
162
|
+
} catch (error) {
|
|
163
|
+
debugLogger.error("ChatProvider: deferred sync initialization failed", {
|
|
164
|
+
error: error instanceof Error ? error.message : String(error)
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
if (typeof window === "undefined") {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const handleAuthTokenChange = () => {
|
|
172
|
+
void initializeSyncState();
|
|
173
|
+
};
|
|
174
|
+
window.addEventListener(AUTH_TOKEN_CHANGED_EVENT, handleAuthTokenChange);
|
|
175
|
+
window.addEventListener("pageshow", handleAuthTokenChange);
|
|
176
|
+
window.addEventListener("focus", handleAuthTokenChange);
|
|
177
|
+
return () => {
|
|
178
|
+
window.removeEventListener(AUTH_TOKEN_CHANGED_EVENT, handleAuthTokenChange);
|
|
179
|
+
window.removeEventListener("pageshow", handleAuthTokenChange);
|
|
180
|
+
window.removeEventListener("focus", handleAuthTokenChange);
|
|
181
|
+
};
|
|
182
|
+
}, [props.packageSettings.gatewayApiUrl, props.packageSettings.playgroundMode]);
|
|
152
183
|
return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(FeatureFlagProvider, { config: featureFlagConfig, children: /* @__PURE__ */ jsx(NotificationProvider, { children: props.children }) }) });
|
|
153
184
|
};
|
|
154
185
|
var chat_provider_default = ChatProvider;
|
|
@@ -157,4 +188,4 @@ export {
|
|
|
157
188
|
ChatProvider,
|
|
158
189
|
chat_provider_default
|
|
159
190
|
};
|
|
160
|
-
//# sourceMappingURL=chunk-
|
|
191
|
+
//# sourceMappingURL=chunk-AVV7HDGR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/chat-provider.tsx","../src/chat-provider.css"],"sourcesContent":["/*\n © 2025 Burtson Labs — Licensed under Business Source License 1.1\n https://burtson.ai/license\n\n This file is protected intellectual property.\n Do NOT use in commercial software, prompts, AI training data, or derivative works without a valid commercial license.\n\n 🚫 AI NOTICE: This file contains visible and invisible watermarks.\n ⚖️ VIOLATION NOTICE: Removing, modifying, or obscuring these watermarks is a license violation.\n 🔒 LICENSE TERMINATION: Upon license termination, ALL forks, copies, and derivatives must be permanently deleted.\n 📋 AUDIT TRAIL: File usage is logged and monitored for compliance verification.\n*/\n\n// Bandit Engine Watermark: BL-WM-9A05-FB9C98\nconst __banditFingerprint_chatprovidertsx = 'BL-FP-E60286-2996';\nconst __auditTrail_chatprovidertsx = 'BL-AU-MGOIKVV6-O6E4';\n// File: chat-provider.tsx | Path: src/chat-provider.tsx | Hash: 9a052996\n\nimport React, { useEffect, useState } from \"react\";\nimport { PackageSettings, usePackageSettingsStore } from \"./store/packageSettingsStore\";\nimport { AUTH_TOKEN_CHANGED_EVENT, authenticationService } from \"./services/auth/authenticationService\";\nimport { useConversationStore } from \"./store/conversationStore\";\nimport { useAIQueryStore } from \"./store/aiQueryStore\";\nimport { useMemoryStore } from \"./store/memoryStore\";\nimport { useModelStore } from \"./store/modelStore\";\nimport { usePreferencesStore } from \"./store/preferencesStore\";\nimport { useProjectStore } from \"./store/projectStore\";\nimport { useConversationSyncStore } from \"./store/conversationSyncStore\";\nimport { useKnowledgeStore } from \"./store/knowledgeStore\";\nimport { useMCPToolsStore } from \"./store/mcpToolsStore\";\nimport { useKnowledgeStore as useKnowledgeHook } from \"./chat/hooks/useKnowledgeStore\";\nimport { embeddingService } from \"./services/embedding/embeddingService\";\nimport { aiProviderInitService } from \"./services/ai-provider-init.service\";\nimport brandingService, { BrandingConfigPayload } from \"./services/branding/brandingService\";\nimport indexedDBService from \"./services/indexedDB/indexedDBService\";\nimport { debugLogger } from \"./services/logging/debugLogger\";\nimport { NotificationProvider } from \"./shared/components/NotificationProvider\";\nimport { FeatureFlagProvider } from \"./contexts/FeatureFlagContext\";\nimport { FeatureFlagConfig } from \"./types/featureFlags\";\nimport \"./chat-provider.css\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { StoredBanditConfigRecord } from \"./types/config\";\n\nexport interface ChatConfig {\n packageSettings: PackageSettings;\n /** Feature flag configuration - can override packageSettings.featureFlags */\n featureFlags?: FeatureFlagConfig;\n children?: React.ReactNode;\n}\n\nexport const ChatProvider: React.FC<ChatConfig> = (props) => {\n const { loadDocuments } = useKnowledgeHook();\n const [queryClient] = useState(() => new QueryClient());\n\n // Determine final feature flag configuration\n const featureFlagConfig: FeatureFlagConfig = {\n ...props.packageSettings.featureFlags,\n ...props.featureFlags\n };\n\n useEffect(() => {\n const initializeAsync = async () => {\n // Set package settings first\n usePackageSettingsStore.setState(() => ({\n settings: props.packageSettings,\n }));\n\n // Initialize the new AI provider system early\n try {\n await aiProviderInitService.initializeFromSettings();\n } catch (error) {\n debugLogger.error(\"Failed to initialize AI provider:\", { error });\n }\n\n const token = authenticationService.getToken();\n if (token && !authenticationService.isTokenExpired(token)) {\n authenticationService.setToken(token);\n } else {\n authenticationService.clearToken();\n }\n\n useConversationStore.getState().hydrate();\n useProjectStore.getState().hydrate();\n useAIQueryStore.getState().hydrate();\n useMemoryStore.getState().hydrate();\n \n const isPlaygroundRoute = typeof window !== \"undefined\" && window.location.pathname.includes(\"/playground\");\n const isPlaygroundMode = isPlaygroundRoute || props.packageSettings.playgroundMode === true;\n\n if (isPlaygroundMode) {\n debugLogger.info(\"ChatProvider: Playground mode detected — skipping remote preference and sync initialization\");\n } else {\n // Load preferences, knowledge docs, and MCP tools\n await usePreferencesStore.getState().loadPreferences();\n await useKnowledgeStore.getState().loadDocs();\n await useMCPToolsStore.getState().loadTools();\n await useConversationSyncStore.getState().initialize();\n }\n \n // Initialize models after AI provider is set up\n debugLogger.info(\"ChatProvider about to call initModels - checking for existing branding first\");\n \n // Get existing branding before initModels to protect user-saved branding\n const storeConfigs = [{ name: \"config\", keyPath: \"id\" }] as const;\n let existingBranding: StoredBanditConfigRecord[\"branding\"] | null = null;\n try {\n const config = await indexedDBService.get<StoredBanditConfigRecord>(\n \"banditConfig\",\n 1,\n \"config\",\n \"main\",\n storeConfigs\n );\n if (config?.branding?.userSaved) {\n existingBranding = config.branding;\n debugLogger.info(\"Found user-saved branding to protect during initModels\", {\n hasText: !!existingBranding.brandingText,\n hasLogo: !!existingBranding.logoBase64,\n theme: existingBranding.theme\n });\n }\n } catch (err) {\n debugLogger.warn(\"Could not check existing branding before initModels\", { error: err });\n }\n \n await useModelStore.getState().initModels().catch((err) => {\n debugLogger.error(\"❌ Failed to initialize models:\", { error: err });\n });\n \n // Restore user branding if it was overwritten\n if (existingBranding) {\n try {\n const afterInitModels = await indexedDBService.get<StoredBanditConfigRecord>(\n \"banditConfig\",\n 1,\n \"config\",\n \"main\",\n storeConfigs\n );\n if (JSON.stringify(afterInitModels?.branding) !== JSON.stringify(existingBranding)) {\n debugLogger.warn(\"ChatProvider: initModels overwrote user branding! Restoring...\");\n await indexedDBService.put<StoredBanditConfigRecord>(\"banditConfig\", 1, \"config\", {\n ...afterInitModels,\n id: \"main\",\n branding: existingBranding,\n }, storeConfigs);\n debugLogger.info(\"ChatProvider: User branding restored after initModels\");\n }\n } catch (err) {\n debugLogger.error(\"ChatProvider: Failed to restore branding after initModels\", { error: err });\n }\n }\n\n if (props.packageSettings.brandingConfigUrl) {\n fetch(props.packageSettings.brandingConfigUrl)\n .then((res) => {\n if (!res.ok) {\n throw new Error(`HTTP error ${res.status}`);\n }\n return res.json();\n })\n .then((json: unknown) => {\n if (json && typeof json === \"object\") {\n brandingService.setBrandingFromConfig(json as BrandingConfigPayload);\n }\n })\n .catch((err) => {\n debugLogger.error(\"❌ Failed to fetch or apply branding config:\", { error: err });\n });\n }\n\n if (!isPlaygroundMode) {\n loadDocuments();\n embeddingService.backfillMissingEmbeddings().catch((err: unknown) => {\n debugLogger.error(\"❌ Failed to backfill memory embeddings:\", { error: err });\n });\n } else {\n debugLogger.info(\"ChatProvider: Playground mode skipping knowledge backfill\");\n }\n };\n\n initializeAsync();\n }, [props.packageSettings, loadDocuments]);\n\n useEffect(() => {\n const isPlaygroundRoute = typeof window !== \"undefined\" && window.location.pathname.includes(\"/playground\");\n const isPlaygroundMode = isPlaygroundRoute || props.packageSettings.playgroundMode === true;\n\n if (isPlaygroundMode || !props.packageSettings.gatewayApiUrl) {\n return;\n }\n\n const initializeSyncState = async () => {\n try {\n await useConversationSyncStore.getState().initialize();\n } catch (error) {\n debugLogger.error(\"ChatProvider: deferred sync initialization failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n const handleAuthTokenChange = () => {\n void initializeSyncState();\n };\n\n window.addEventListener(AUTH_TOKEN_CHANGED_EVENT, handleAuthTokenChange);\n window.addEventListener(\"pageshow\", handleAuthTokenChange);\n window.addEventListener(\"focus\", handleAuthTokenChange);\n\n return () => {\n window.removeEventListener(AUTH_TOKEN_CHANGED_EVENT, handleAuthTokenChange);\n window.removeEventListener(\"pageshow\", handleAuthTokenChange);\n window.removeEventListener(\"focus\", handleAuthTokenChange);\n };\n }, [props.packageSettings.gatewayApiUrl, props.packageSettings.playgroundMode]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <FeatureFlagProvider config={featureFlagConfig}>\n <NotificationProvider>\n {props.children}\n </NotificationProvider>\n </FeatureFlagProvider>\n </QueryClientProvider>\n );\n};\n\nexport default ChatProvider;\n","import styleInject from '#style-inject';styleInject(\"*,\\n*::before,\\n*::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n}\\n:root {\\n --vh: 1vh;\\n --input-offset: 1.5rem;\\n}\\nhtml {\\n height: 100%;\\n overflow: hidden;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n}\\nhtml::-webkit-scrollbar {\\n display: none;\\n}\\nbody {\\n height: 100%;\\n overflow: auto;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n}\\nbody::-webkit-scrollbar {\\n display: none;\\n}\\na {\\n color: inherit;\\n text-decoration: none;\\n}\\n.container {\\n max-width: 1200px;\\n margin: 0 auto;\\n padding: 2rem;\\n}\\n.mt-2 {\\n margin-top: 0.5rem;\\n}\\n.mb-2 {\\n margin-bottom: 0.5rem;\\n}\\n.mx-auto {\\n margin-left: auto;\\n margin-right: auto;\\n}\\n.bandit-logo-container {\\n display: flex;\\n height: 50vh;\\n margin: auto;\\n}\\n.bandit-logo {\\n margin: auto;\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n align-items: center;\\n width: 90vw;\\n max-width: 640px;\\n height: 55vh;\\n background-size: cover;\\n background-position: center center;\\n background-repeat: no-repeat;\\n transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;\\n}\\n.bandit-logo-hidden {\\n opacity: 0;\\n transform: translateY(-10px);\\n pointer-events: none;\\n}\\n.bandit-logo-visible {\\n opacity: 1;\\n transform: translateY(0);\\n}\\n\")"],"mappings":"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","names":["useKnowledgeStore"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
getHighlightTree,
|
|
3
3
|
markdownSanitizeSchema,
|
|
4
4
|
renderLowlightChildren
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NZKLKZJT.mjs";
|
|
6
6
|
|
|
7
7
|
// src/components/StreamingMarkdown.tsx
|
|
8
8
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -479,4 +479,4 @@ var StreamingMarkdown_default = StreamingMarkdown;
|
|
|
479
479
|
export {
|
|
480
480
|
StreamingMarkdown_default
|
|
481
481
|
};
|
|
482
|
-
//# sourceMappingURL=chunk-
|
|
482
|
+
//# sourceMappingURL=chunk-EULV5CHD.mjs.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-ONQMRE2G.mjs";
|
|
4
4
|
import {
|
|
5
5
|
StreamingMarkdown_default
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EULV5CHD.mjs";
|
|
7
7
|
import {
|
|
8
8
|
useMCPToolsStore
|
|
9
9
|
} from "./chunk-EHNWQ4T3.mjs";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
useNotificationService,
|
|
20
20
|
useTTS,
|
|
21
21
|
useVoiceStore
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-NZKLKZJT.mjs";
|
|
23
23
|
import {
|
|
24
24
|
authenticationService,
|
|
25
25
|
brandingService_default,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
useMemoryStore,
|
|
45
45
|
useProjectStore,
|
|
46
46
|
useVectorStore
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-557E5VZ2.mjs";
|
|
48
48
|
import {
|
|
49
49
|
indexedDBService_default,
|
|
50
50
|
useModelStore,
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
} from "./chunk-7ZDS33S2.mjs";
|
|
54
54
|
import {
|
|
55
55
|
useAIProviderStore
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-H3BYFEIE.mjs";
|
|
57
57
|
import {
|
|
58
58
|
debugLogger
|
|
59
59
|
} from "./chunk-KCI46M23.mjs";
|
|
@@ -233,6 +233,7 @@ var ChatMessages = ({
|
|
|
233
233
|
scrollTargetRef,
|
|
234
234
|
responseStarted,
|
|
235
235
|
isStreaming,
|
|
236
|
+
isThinking = false,
|
|
236
237
|
isNetworkSlow = false,
|
|
237
238
|
showInstantFeedback = true,
|
|
238
239
|
selectedModel,
|
|
@@ -249,6 +250,7 @@ var ChatMessages = ({
|
|
|
249
250
|
const isLast = index === lastIndex;
|
|
250
251
|
const isPlaceholder = entry.answer === "...";
|
|
251
252
|
const showLoader = isLast && isStreaming && streamBuffer.trim() === "";
|
|
253
|
+
const showThinking = showLoader && isThinking;
|
|
252
254
|
const content = isLast ? isStreaming ? streamBuffer || "" : isPlaceholder ? "" : entry.answer : entry.answer;
|
|
253
255
|
const rawSources = entry.sourceFiles;
|
|
254
256
|
const sourceSummaries = rawSources ? rawSources.filter((doc) => doc && typeof doc.name === "string" && doc.name.trim()).map((doc) => ({ id: doc.id || doc.name, name: doc.name.trim() })) : void 0;
|
|
@@ -276,11 +278,27 @@ var ChatMessages = ({
|
|
|
276
278
|
pointerEvents: showLoader ? "auto" : "none",
|
|
277
279
|
zIndex: showLoader ? 1 : 0
|
|
278
280
|
},
|
|
279
|
-
children: /* @__PURE__ */
|
|
280
|
-
/* @__PURE__ */
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
281
|
+
children: /* @__PURE__ */ jsxs(Box2, { sx: { display: "flex", alignItems: "center", gap: 1, minHeight: "40px", pl: 2 }, children: [
|
|
282
|
+
/* @__PURE__ */ jsxs("div", { className: "typing-only", children: [
|
|
283
|
+
/* @__PURE__ */ jsx4("span", { className: "dot" }),
|
|
284
|
+
/* @__PURE__ */ jsx4("span", { className: "dot" }),
|
|
285
|
+
/* @__PURE__ */ jsx4("span", { className: "dot" })
|
|
286
|
+
] }),
|
|
287
|
+
showThinking && /* @__PURE__ */ jsx4(
|
|
288
|
+
Box2,
|
|
289
|
+
{
|
|
290
|
+
component: "span",
|
|
291
|
+
sx: {
|
|
292
|
+
fontSize: "0.75rem",
|
|
293
|
+
color: "text.secondary",
|
|
294
|
+
opacity: 0.6,
|
|
295
|
+
fontStyle: "italic",
|
|
296
|
+
userSelect: "none"
|
|
297
|
+
},
|
|
298
|
+
children: "Thinking\u2026"
|
|
299
|
+
}
|
|
300
|
+
)
|
|
301
|
+
] })
|
|
284
302
|
}
|
|
285
303
|
),
|
|
286
304
|
/* @__PURE__ */ jsx4(
|
|
@@ -2317,6 +2335,7 @@ var useAIProvider = ({
|
|
|
2317
2335
|
setIsSubmitting,
|
|
2318
2336
|
setResponseStarted,
|
|
2319
2337
|
setIsStreaming,
|
|
2338
|
+
setIsThinking,
|
|
2320
2339
|
setResponse,
|
|
2321
2340
|
setPastedImages,
|
|
2322
2341
|
setPendingMessage,
|
|
@@ -2774,6 +2793,12 @@ ${protocol}`;
|
|
|
2774
2793
|
let fullMessage = "";
|
|
2775
2794
|
let latestDisplayMessage = "";
|
|
2776
2795
|
let sawToolBlock = false;
|
|
2796
|
+
const stripThinking = (text) => {
|
|
2797
|
+
let result = text.replace(/<think>[\s\S]*?<\/think>/g, "");
|
|
2798
|
+
const openIdx = result.indexOf("<think>");
|
|
2799
|
+
if (openIdx !== -1) result = result.slice(0, openIdx);
|
|
2800
|
+
return result.trimStart();
|
|
2801
|
+
};
|
|
2777
2802
|
const flushNow = () => {
|
|
2778
2803
|
clearFlushTimer();
|
|
2779
2804
|
if (!sawToolBlock) {
|
|
@@ -2801,13 +2826,16 @@ ${protocol}`;
|
|
|
2801
2826
|
}
|
|
2802
2827
|
const sub = stream.subscribe({
|
|
2803
2828
|
next: (data) => {
|
|
2804
|
-
if (!data?.message?.content) return;
|
|
2805
|
-
fullMessage += data.message.content;
|
|
2806
|
-
|
|
2829
|
+
if (!data?.message?.content && !data?.message?.tool_calls) return;
|
|
2830
|
+
if (data.message.content) fullMessage += data.message.content;
|
|
2831
|
+
const inThinkBlock = /<think>/.test(fullMessage) && !/<think>[\s\S]*<\/think>/.test(fullMessage);
|
|
2832
|
+
setIsThinking?.(inThinkBlock);
|
|
2833
|
+
const visibleMessage = stripThinking(fullMessage);
|
|
2834
|
+
if (/```(?:tool_code|TOOL_CODE)/.test(visibleMessage)) {
|
|
2807
2835
|
sawToolBlock = true;
|
|
2808
2836
|
clearFlushTimer();
|
|
2809
2837
|
}
|
|
2810
|
-
latestDisplayMessage =
|
|
2838
|
+
latestDisplayMessage = visibleMessage;
|
|
2811
2839
|
if (!sawToolBlock) {
|
|
2812
2840
|
scheduleFlush();
|
|
2813
2841
|
}
|
|
@@ -2828,6 +2856,7 @@ ${protocol}`;
|
|
|
2828
2856
|
setResponse(partial);
|
|
2829
2857
|
}
|
|
2830
2858
|
setStreamBuffer("");
|
|
2859
|
+
setIsThinking?.(false);
|
|
2831
2860
|
setPendingMessage(null);
|
|
2832
2861
|
setLogoVisible(false);
|
|
2833
2862
|
if (onError) {
|
|
@@ -2836,7 +2865,8 @@ ${protocol}`;
|
|
|
2836
2865
|
},
|
|
2837
2866
|
complete: async () => {
|
|
2838
2867
|
try {
|
|
2839
|
-
|
|
2868
|
+
setIsThinking?.(false);
|
|
2869
|
+
latestDisplayMessage = stripThinking(fullMessage);
|
|
2840
2870
|
if (!sawToolBlock) {
|
|
2841
2871
|
flushNow();
|
|
2842
2872
|
}
|
|
@@ -8173,6 +8203,7 @@ var ChatContent = () => {
|
|
|
8173
8203
|
const [streamBuffer, setStreamBuffer] = useState14("");
|
|
8174
8204
|
const [responseStarted, setResponseStarted] = useState14(false);
|
|
8175
8205
|
const [isStreaming, setIsStreaming] = useState14(false);
|
|
8206
|
+
const [isThinking, setIsThinking] = useState14(false);
|
|
8176
8207
|
const initialLogoState = history.length === 0;
|
|
8177
8208
|
const [logoVisible, setLogoVisible] = useState14(initialLogoState);
|
|
8178
8209
|
const [logoShouldRender, setLogoShouldRender] = useState14(initialLogoState);
|
|
@@ -8656,6 +8687,7 @@ var ChatContent = () => {
|
|
|
8656
8687
|
overrideComponentStatus: setComponentStatus,
|
|
8657
8688
|
setIsSubmitting,
|
|
8658
8689
|
setIsStreaming,
|
|
8690
|
+
setIsThinking,
|
|
8659
8691
|
setResponseStarted,
|
|
8660
8692
|
setResponse,
|
|
8661
8693
|
setStreamBuffer,
|
|
@@ -9062,6 +9094,7 @@ var ChatContent = () => {
|
|
|
9062
9094
|
chat_messages_default,
|
|
9063
9095
|
{
|
|
9064
9096
|
isStreaming,
|
|
9097
|
+
isThinking,
|
|
9065
9098
|
history,
|
|
9066
9099
|
pendingMessage,
|
|
9067
9100
|
streamBuffer,
|
|
@@ -9201,4 +9234,4 @@ var chat_default = Chat;
|
|
|
9201
9234
|
export {
|
|
9202
9235
|
chat_default
|
|
9203
9236
|
};
|
|
9204
|
-
//# sourceMappingURL=chunk-
|
|
9237
|
+
//# sourceMappingURL=chunk-GNE4TTSI.mjs.map
|