@docsearch/js 5.0.0-beta.3 → 5.0.0
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/esm/docsearch.d.ts +1 -1
- package/dist/esm/docsearch.js +2 -2
- package/dist/esm/docsearch.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +208 -36
- package/dist/esm/index.js.map +1 -1
- package/dist/umd/docsearch.js +2 -2
- package/dist/umd/docsearch.js.map +1 -1
- package/dist/umd/index.js +14 -14
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @docsearch/js 5.0.0
|
|
1
|
+
/*! @docsearch/js 5.0.0 (UNRELEASED 0c5978a) | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
|
|
2
2
|
import { InitialAskAiMessage } from "@docsearch/core";
|
|
3
3
|
import { HitComponentProps, ResultsFooterComponentProps } from "@docsearch/react";
|
|
4
4
|
import { DocSearchAIProps as DocSearchAIProps$1 } from "@docsearch/react/docsearchAi";
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @docsearch/js 5.0.0
|
|
1
|
+
/*! @docsearch/js 5.0.0 (UNRELEASED 0c5978a) | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
|
|
2
2
|
//#region \0rolldown/runtime.js
|
|
3
3
|
var __create = Object.create;
|
|
4
4
|
var __defProp$1 = Object.defineProperty;
|
|
@@ -1188,7 +1188,7 @@ function DocSearchButtonKey({ reactsToKey, children }) {
|
|
|
1188
1188
|
|
|
1189
1189
|
//#endregion
|
|
1190
1190
|
//#region ../docsearch-react/dist/esm/version.js
|
|
1191
|
-
const version$2 = "5.0.0
|
|
1191
|
+
const version$2 = "5.0.0";
|
|
1192
1192
|
|
|
1193
1193
|
//#endregion
|
|
1194
1194
|
//#region \0@oxc-project+runtime@0.139.0/helpers/esm/OverloadYield.js
|
|
@@ -27404,7 +27404,7 @@ function useChat(_ref2 = {}) {
|
|
|
27404
27404
|
}
|
|
27405
27405
|
|
|
27406
27406
|
//#endregion
|
|
27407
|
-
//#region ../docsearch-react/dist/esm/useSuggestedQuestions-
|
|
27407
|
+
//#region ../docsearch-react/dist/esm/useSuggestedQuestions-BjSZvxwr.js
|
|
27408
27408
|
init_compat();
|
|
27409
27409
|
function AlertIcon(props) {
|
|
27410
27410
|
return /* @__PURE__ */ En.createElement("svg", _objectSpread2$2({
|
|
@@ -27860,6 +27860,85 @@ function SourcesPanel({ links, titleText = "Source", pluralTitleText = "Sources"
|
|
|
27860
27860
|
rel: "noopener noreferrer"
|
|
27861
27861
|
}, /* @__PURE__ */ En.createElement(ContentIcon, null), /* @__PURE__ */ En.createElement("span", { className: "DocSearch-AskAiScreen-Sources-source-title" }, l.title || l.url)))))));
|
|
27862
27862
|
}
|
|
27863
|
+
const PROMPT_BLOCKING_CODES = /* @__PURE__ */ new Set([
|
|
27864
|
+
"AI-203",
|
|
27865
|
+
"AI-205",
|
|
27866
|
+
"AI-224",
|
|
27867
|
+
"AI-225"
|
|
27868
|
+
]);
|
|
27869
|
+
function readStringField(value, key) {
|
|
27870
|
+
for (const [field, fieldValue] of Object.entries(value)) if (field.toLowerCase() === key.toLowerCase() && typeof fieldValue === "string" && fieldValue.trim() !== "") return fieldValue.trim();
|
|
27871
|
+
}
|
|
27872
|
+
function extractErrorCode(message) {
|
|
27873
|
+
const directMatch = /\b(AI-\d{3})\b/i.exec(message);
|
|
27874
|
+
if (directMatch) return directMatch[1].toUpperCase();
|
|
27875
|
+
}
|
|
27876
|
+
function parseJson(message) {
|
|
27877
|
+
try {
|
|
27878
|
+
const parsed = JSON.parse(message);
|
|
27879
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
|
|
27880
|
+
} catch (_unused) {}
|
|
27881
|
+
return null;
|
|
27882
|
+
}
|
|
27883
|
+
function matchesDomainBlock(message) {
|
|
27884
|
+
return /\brequest blocked for this domain\b/.test(message) || /\bblocked for this domain\b/.test(message);
|
|
27885
|
+
}
|
|
27886
|
+
function matchesRateLimit(message) {
|
|
27887
|
+
return /\b429\b/.test(message) || /\brate\s*limit/.test(message) || /\bretry\s+after\s+\d+/.test(message) || /\btoo\s+many\s+attempts\b/.test(message) || /\btoo_many_requests\b/.test(message);
|
|
27888
|
+
}
|
|
27889
|
+
function matchesTokenOutputLimit(message) {
|
|
27890
|
+
return /\btokenoutputlimiterror\b/.test(message) || /could not complete response due to token output limits/.test(message);
|
|
27891
|
+
}
|
|
27892
|
+
function matchesAccessOrLimit(message) {
|
|
27893
|
+
return /\bwhitelist(?:ed)?\b/.test(message) || /\bnot\s+allowed\s+for\s+this\s+domain\b/.test(message) || /\bcontext\s+length\b/.test(message) || /\b(?:max|maximum)\s+tokens?\b/.test(message) || /\btoken\s+limit\b/.test(message) || /\btoken\s+output\b/.test(message) || /\boutput\s+limits?\b/.test(message) || /\bstep\s+limit\b/.test(message) || /\b(?:max|maximum)(?:\s+agent)?\s+steps?\b/.test(message);
|
|
27894
|
+
}
|
|
27895
|
+
function jsonImpliesCostControl(value) {
|
|
27896
|
+
var _readStringField, _readStringField2, _readStringField3;
|
|
27897
|
+
const type = (_readStringField = readStringField(value, "type")) !== null && _readStringField !== void 0 ? _readStringField : "";
|
|
27898
|
+
const error = (_readStringField2 = readStringField(value, "error")) !== null && _readStringField2 !== void 0 ? _readStringField2 : "";
|
|
27899
|
+
const message = (_readStringField3 = readStringField(value, "message")) !== null && _readStringField3 !== void 0 ? _readStringField3 : "";
|
|
27900
|
+
return /tokenoutput|outputlimit|steplimit|maxstep|ratelimit|domainnotallowed/i.test(type) || error.toUpperCase() === "TOO_MANY_REQUESTS" || matchesRateLimit(`${error} ${message}`.toLowerCase()) || matchesAccessOrLimit(`${error} ${message}`.toLowerCase());
|
|
27901
|
+
}
|
|
27902
|
+
const BLOCKING_MATCHERS = [
|
|
27903
|
+
{ matches: ({ code }) => Boolean(code && PROMPT_BLOCKING_CODES.has(code)) },
|
|
27904
|
+
{
|
|
27905
|
+
matches: ({ parsedJson }) => {
|
|
27906
|
+
var _readStringField4;
|
|
27907
|
+
return Boolean(parsedJson && matchesDomainBlock(((_readStringField4 = readStringField(parsedJson, "message")) !== null && _readStringField4 !== void 0 ? _readStringField4 : "").toLowerCase()));
|
|
27908
|
+
},
|
|
27909
|
+
showNewConversationLink: false
|
|
27910
|
+
},
|
|
27911
|
+
{ matches: ({ parsedJson }) => Boolean(parsedJson && jsonImpliesCostControl(parsedJson)) },
|
|
27912
|
+
{
|
|
27913
|
+
matches: ({ messageLower }) => matchesTokenOutputLimit(messageLower),
|
|
27914
|
+
showNewConversationLink: false
|
|
27915
|
+
},
|
|
27916
|
+
{ matches: ({ messageLower }) => matchesRateLimit(messageLower) },
|
|
27917
|
+
{
|
|
27918
|
+
matches: ({ messageLower }) => matchesDomainBlock(messageLower),
|
|
27919
|
+
showNewConversationLink: false
|
|
27920
|
+
},
|
|
27921
|
+
{ matches: ({ messageLower }) => matchesAccessOrLimit(messageLower) }
|
|
27922
|
+
];
|
|
27923
|
+
function resolvePromptBlockingError(error) {
|
|
27924
|
+
var _error$message;
|
|
27925
|
+
const message = (_error$message = error.message) !== null && _error$message !== void 0 ? _error$message : "";
|
|
27926
|
+
const context = {
|
|
27927
|
+
message,
|
|
27928
|
+
messageLower: message.toLowerCase(),
|
|
27929
|
+
parsedJson: parseJson(message),
|
|
27930
|
+
code: extractErrorCode(message)
|
|
27931
|
+
};
|
|
27932
|
+
const matches = BLOCKING_MATCHERS.filter((matcher) => matcher.matches(context));
|
|
27933
|
+
return {
|
|
27934
|
+
blocking: matches.length > 0,
|
|
27935
|
+
showNewConversationLink: matches.every((matcher) => matcher.showNewConversationLink !== false)
|
|
27936
|
+
};
|
|
27937
|
+
}
|
|
27938
|
+
function isTokenOutputLimitError(error) {
|
|
27939
|
+
var _error$message2;
|
|
27940
|
+
return Boolean(error && matchesTokenOutputLimit(((_error$message2 = error.message) !== null && _error$message2 !== void 0 ? _error$message2 : "").toLowerCase()));
|
|
27941
|
+
}
|
|
27863
27942
|
/** Escapes HTML special characters for safe interpolation into HTML strings. */
|
|
27864
27943
|
function escapeHtml(unsafe) {
|
|
27865
27944
|
return unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
@@ -27974,6 +28053,51 @@ function isThreadDepthError(error) {
|
|
|
27974
28053
|
if (!error) return false;
|
|
27975
28054
|
return /(?:ai-217|conversation\s+depth)/i.test((_error$message = error.message) !== null && _error$message !== void 0 ? _error$message : "");
|
|
27976
28055
|
}
|
|
28056
|
+
function isAskAiPromptBlockingError(error) {
|
|
28057
|
+
return Boolean(error && (isThreadDepthError(error) || resolvePromptBlockingError(error).blocking));
|
|
28058
|
+
}
|
|
28059
|
+
function isAgentStudioTokenOutputLimitError(error) {
|
|
28060
|
+
return isTokenOutputLimitError(error);
|
|
28061
|
+
}
|
|
28062
|
+
function showAskAiBlockingBannerNewConversationLink(error) {
|
|
28063
|
+
if (!error || isThreadDepthError(error)) return true;
|
|
28064
|
+
return resolvePromptBlockingError(error).showNewConversationLink;
|
|
28065
|
+
}
|
|
28066
|
+
function extractAgentStudioErrorFieldMessage(raw) {
|
|
28067
|
+
let value = raw.trim();
|
|
28068
|
+
for (let iteration = 0; iteration < 10 && value; iteration++) try {
|
|
28069
|
+
var _exec, _fieldMatch$;
|
|
28070
|
+
const parsed = JSON.parse(value);
|
|
28071
|
+
if (typeof parsed === "string") {
|
|
28072
|
+
value = parsed.trim();
|
|
28073
|
+
continue;
|
|
28074
|
+
}
|
|
28075
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
28076
|
+
const record = parsed;
|
|
28077
|
+
const message = readStringField(record, "message");
|
|
28078
|
+
const error = readStringField(record, "error");
|
|
28079
|
+
if (message) return message;
|
|
28080
|
+
if (error) return error;
|
|
28081
|
+
}
|
|
28082
|
+
const fieldMatch = (_exec = /"message"\s*:\s*"((?:[^"\\]|\\.)*)"/.exec(value)) !== null && _exec !== void 0 ? _exec : /"error"\s*:\s*"((?:[^"\\]|\\.)*)"/.exec(value);
|
|
28083
|
+
return fieldMatch === null || fieldMatch === void 0 || (_fieldMatch$ = fieldMatch[1]) === null || _fieldMatch$ === void 0 ? void 0 : _fieldMatch$.replace(/\\"/g, "\"").replace(/\\\\/g, "\\").trim();
|
|
28084
|
+
} catch (_unused) {
|
|
28085
|
+
if (value.includes("\\\"")) {
|
|
28086
|
+
value = value.replace(/\\"/g, "\"").replace(/\\\\/g, "\\").trim();
|
|
28087
|
+
continue;
|
|
28088
|
+
}
|
|
28089
|
+
return;
|
|
28090
|
+
}
|
|
28091
|
+
}
|
|
28092
|
+
function getAskAiBlockingBannerMessage(error) {
|
|
28093
|
+
var _error$message2;
|
|
28094
|
+
if (!error) return;
|
|
28095
|
+
const extracted = extractAgentStudioErrorFieldMessage((_error$message2 = error.message) !== null && _error$message2 !== void 0 ? _error$message2 : "");
|
|
28096
|
+
if (isThreadDepthError(error) && (/^\s*AI-217\s*$/i.test(error.message) || /^\s*\{.*\}\s*$/.test(error.message) && !extracted)) return;
|
|
28097
|
+
const message = (extracted !== null && extracted !== void 0 ? extracted : error.message.replace(/\s*\(AI-\d{3}\)\s*$/i, "")).trim();
|
|
28098
|
+
if (message && !(message.startsWith("{") && message.endsWith("}"))) return message;
|
|
28099
|
+
if (isAgentStudioTokenOutputLimitError(error)) return "Could not complete response due to token output limits";
|
|
28100
|
+
}
|
|
27977
28101
|
const EMPTY_TOOLS = Object.freeze({});
|
|
27978
28102
|
function isAIToolPart(part) {
|
|
27979
28103
|
return part.type.startsWith("tool-");
|
|
@@ -28296,17 +28420,40 @@ function MenuItem(_ref) {
|
|
|
28296
28420
|
Menu.Item = MenuItem;
|
|
28297
28421
|
const agentStudioBaseUrl = (appId) => `https://${appId}.algolia.net/agent-studio/1`;
|
|
28298
28422
|
const getAgentStudioErrorMessage = (error) => {
|
|
28299
|
-
|
|
28423
|
+
var _parsedError$code;
|
|
28424
|
+
const raw = error.message;
|
|
28425
|
+
let parsed;
|
|
28300
28426
|
try {
|
|
28301
|
-
|
|
28302
|
-
|
|
28303
|
-
|
|
28304
|
-
|
|
28305
|
-
|
|
28306
|
-
|
|
28307
|
-
|
|
28308
|
-
|
|
28309
|
-
|
|
28427
|
+
parsed = JSON.parse(raw);
|
|
28428
|
+
} catch (_unused) {
|
|
28429
|
+
return new Error(raw);
|
|
28430
|
+
}
|
|
28431
|
+
let iterations = 0;
|
|
28432
|
+
while (typeof parsed === "string" && iterations < 10) {
|
|
28433
|
+
iterations += 1;
|
|
28434
|
+
const serializedError = parsed.trim();
|
|
28435
|
+
try {
|
|
28436
|
+
parsed = JSON.parse(serializedError);
|
|
28437
|
+
} catch (_unused2) {
|
|
28438
|
+
return new Error(serializedError);
|
|
28439
|
+
}
|
|
28440
|
+
}
|
|
28441
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return new Error(raw);
|
|
28442
|
+
const parsedRecord = parsed;
|
|
28443
|
+
const parsedError = parsed;
|
|
28444
|
+
let errorMessage = raw;
|
|
28445
|
+
if (parsedError.name === "ValidationError") {
|
|
28446
|
+
const validationError = parsedError;
|
|
28447
|
+
if (validationError.detail && validationError.detail.length > 0) {
|
|
28448
|
+
const { msg, loc } = validationError.detail[0];
|
|
28449
|
+
errorMessage = `${msg}: ${loc.at(-1)}`;
|
|
28450
|
+
}
|
|
28451
|
+
} else {
|
|
28452
|
+
var _ref, _readStringField;
|
|
28453
|
+
errorMessage = (_ref = (_readStringField = readStringField(parsedRecord, "message")) !== null && _readStringField !== void 0 ? _readStringField : readStringField(parsedRecord, "error")) !== null && _ref !== void 0 ? _ref : raw;
|
|
28454
|
+
}
|
|
28455
|
+
const code = (_parsedError$code = parsedError.code) !== null && _parsedError$code !== void 0 ? _parsedError$code : parsedError.errorCode;
|
|
28456
|
+
if (typeof code === "string" && code.trim() && !errorMessage.toUpperCase().includes(code.trim().toUpperCase())) errorMessage = `${errorMessage} (${code.trim()})`;
|
|
28310
28457
|
return new Error(errorMessage);
|
|
28311
28458
|
};
|
|
28312
28459
|
const postAgentStudioFeedback = ({ agentId, vote, messageId, appId, apiKey, abortSignal, notes, tags }) => {
|
|
@@ -31308,7 +31455,7 @@ function createAutocomplete(options) {
|
|
|
31308
31455
|
}
|
|
31309
31456
|
|
|
31310
31457
|
//#endregion
|
|
31311
|
-
//#region ../docsearch-react/dist/esm/DocSearchAskAiModal-
|
|
31458
|
+
//#region ../docsearch-react/dist/esm/DocSearchAskAiModal-ByqIW5ZA.js
|
|
31312
31459
|
init_compat();
|
|
31313
31460
|
function MessageIcon() {
|
|
31314
31461
|
return /* @__PURE__ */ En.createElement("svg", {
|
|
@@ -31370,7 +31517,7 @@ function AskAiExchangeCard({ exchange, askAiError, isLastExchange, loadingStatus
|
|
|
31370
31517
|
const { userMessage, assistantMessage } = exchange;
|
|
31371
31518
|
const { stoppedStreamingText = "You stopped this response", errorTitleText = "Chat error", relatedSourcesText, relatedSourcesTextPlural, suggestedPromptsTitleText = "Suggested prompts" } = translations;
|
|
31372
31519
|
const toolCallTranslations = q$2(() => toToolCallTranslations(translations), [translations]);
|
|
31373
|
-
const
|
|
31520
|
+
const isPromptBlockingError = isAskAiPromptBlockingError(askAiError);
|
|
31374
31521
|
const assistantContent = q$2(() => getMessageContent(assistantMessage), [assistantMessage]);
|
|
31375
31522
|
const userContent = q$2(() => getMessageContent(userMessage), [userMessage]);
|
|
31376
31523
|
const urlsToDisplay = En.useMemo(() => extractLinksFromMessage(assistantMessage), [assistantMessage]);
|
|
@@ -31385,7 +31532,7 @@ function AskAiExchangeCard({ exchange, askAiError, isLastExchange, loadingStatus
|
|
|
31385
31532
|
const showActions = !wasStopped && (!isLastExchange || isLastExchange && loadingStatus === "ready" && Boolean(assistantMessage));
|
|
31386
31533
|
const isThinking = ["submitted", "streaming"].includes(loadingStatus) && isLastExchange && !displayParts.some((part) => part.type !== "step-start");
|
|
31387
31534
|
const messageId = (assistantMessage === null || assistantMessage === void 0 ? void 0 : assistantMessage.id) || exchange.id;
|
|
31388
|
-
return /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Response-Container" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Response" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--user" }, /* @__PURE__ */ En.createElement("p", { className: "DocSearch-AskAiScreen-Query" }, userContent !== null && userContent !== void 0 ? userContent : "")), /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--assistant" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-MessageContent" }, loadingStatus === "error" && askAiError && isLastExchange && !
|
|
31535
|
+
return /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Response-Container" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Response" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--user" }, /* @__PURE__ */ En.createElement("p", { className: "DocSearch-AskAiScreen-Query" }, userContent !== null && userContent !== void 0 ? userContent : "")), /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Message DocSearch-AskAiScreen-Message--assistant" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-MessageContent" }, loadingStatus === "error" && askAiError && isLastExchange && !isPromptBlockingError && /* @__PURE__ */ En.createElement("div", {
|
|
31389
31536
|
className: "DocSearch-AskAiScreen-Error",
|
|
31390
31537
|
role: "alert"
|
|
31391
31538
|
}, /* @__PURE__ */ En.createElement(AlertIcon, { "aria-hidden": "true" }), /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Error-Content" }, /* @__PURE__ */ En.createElement("h4", { className: "DocSearch-AskAiScreen-Error-Title" }, errorTitleText), /* @__PURE__ */ En.createElement(MemoizedMarkdown, {
|
|
@@ -31452,9 +31599,11 @@ function AskAiScreen(_ref) {
|
|
|
31452
31599
|
let { translations = {} } = _ref, props = _objectWithoutProperties$6(_ref, _excluded$6);
|
|
31453
31600
|
const { disclaimerText = "Answers are generated with AI which can make mistakes.", threadDepthExceededMessage = "This conversation is now closed to keep responses accurate.", startNewConversationButtonText = "Start a new conversation" } = translations;
|
|
31454
31601
|
const { messages, tools, askAiError, status, memoryEnabled } = props;
|
|
31455
|
-
const
|
|
31456
|
-
return status === "error" &&
|
|
31602
|
+
const hasPromptBlockingError = q$2(() => {
|
|
31603
|
+
return status === "error" && isAskAiPromptBlockingError(askAiError);
|
|
31457
31604
|
}, [status, askAiError]);
|
|
31605
|
+
const blockingMessage = q$2(() => getAskAiBlockingBannerMessage(askAiError), [askAiError]);
|
|
31606
|
+
const showNewConversationLink = showAskAiBlockingBannerNewConversationLink(askAiError);
|
|
31458
31607
|
const exchanges = q$2(() => {
|
|
31459
31608
|
const grouped = [];
|
|
31460
31609
|
for (let i = 0; i < messages.length; i++) if (messages[i].role === "user") {
|
|
@@ -31468,21 +31617,21 @@ function AskAiScreen(_ref) {
|
|
|
31468
31617
|
});
|
|
31469
31618
|
if (assistantMessage) i++;
|
|
31470
31619
|
}
|
|
31471
|
-
if (hasThreadDepthError && grouped.length > 0) {
|
|
31472
|
-
if (!grouped[grouped.length - 1].assistantMessage) grouped.pop();
|
|
31473
|
-
}
|
|
31474
31620
|
return grouped;
|
|
31475
|
-
}, [messages
|
|
31621
|
+
}, [messages]);
|
|
31476
31622
|
const handleSearchQueryClick = (query) => {
|
|
31477
31623
|
props.onAskAiToggle(false);
|
|
31478
31624
|
props.setQuery(query);
|
|
31479
31625
|
};
|
|
31480
|
-
const
|
|
31481
|
-
return /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen DocSearch-AskAiScreen-Container" },
|
|
31626
|
+
const showBlockingBanner = hasPromptBlockingError && (!isThreadDepthError(askAiError) || messages.some((message) => message.role === "assistant"));
|
|
31627
|
+
return /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen DocSearch-AskAiScreen-Container" }, /* @__PURE__ */ En.createElement("div", {
|
|
31628
|
+
id: props.promptBlockingErrorId,
|
|
31629
|
+
role: "alert"
|
|
31630
|
+
}, showBlockingBanner && /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-MessageContent DocSearch-AskAiScreen-Error DocSearch-AskAiScreen-Error--ThreadDepth" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Error-Content" }, /* @__PURE__ */ En.createElement("p", { className: "DocSearch-AskAiScreen-Error-Title" }, blockingMessage !== null && blockingMessage !== void 0 ? blockingMessage : isThreadDepthError(askAiError) ? threadDepthExceededMessage : "This conversation cannot continue."), showNewConversationLink && /* @__PURE__ */ En.createElement("p", null, /* @__PURE__ */ En.createElement("button", {
|
|
31482
31631
|
type: "button",
|
|
31483
31632
|
className: "DocSearch-ThreadDepthError-Link",
|
|
31484
31633
|
onClick: props.onNewConversation
|
|
31485
|
-
}, startNewConversationButtonText), " ", "to continue."))), /* @__PURE__ */ En.createElement(AskAiScreenDisclaimer, { disclaimerText }), /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Body" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-ExchangesList" }, exchanges.slice().reverse().map((exchange, index) => /* @__PURE__ */ En.createElement(AskAiExchangeCard, {
|
|
31634
|
+
}, startNewConversationButtonText), " ", "to continue.")))), /* @__PURE__ */ En.createElement(AskAiScreenDisclaimer, { disclaimerText }), /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-Body" }, /* @__PURE__ */ En.createElement("div", { className: "DocSearch-AskAiScreen-ExchangesList" }, exchanges.slice().reverse().map((exchange, index) => /* @__PURE__ */ En.createElement(AskAiExchangeCard, {
|
|
31486
31635
|
key: exchange.id,
|
|
31487
31636
|
exchange,
|
|
31488
31637
|
askAiError: props.askAiError,
|
|
@@ -31627,10 +31776,10 @@ function AskAiSearchBox(_ref) {
|
|
|
31627
31776
|
const origOnChange = baseInputProps.onChange;
|
|
31628
31777
|
const isAskAiStreaming = props.askAiStatus === "streaming" || props.askAiStatus === "submitted";
|
|
31629
31778
|
const renderMoreOptions = props.isAskAiActive && askAiState !== "conversation-history";
|
|
31630
|
-
const
|
|
31779
|
+
const isPromptBlocked = Boolean(props.promptBlockingChrome);
|
|
31631
31780
|
let searchPlaceholder = props.placeholder;
|
|
31632
31781
|
if (askAiState === "new-conversation") searchPlaceholder = newConversationPlaceholder;
|
|
31633
|
-
if (
|
|
31782
|
+
if (props.promptBlockingChrome === "full" && props.isAskAiActive) searchPlaceholder = threadDepthErrorPlaceholder;
|
|
31634
31783
|
let heading = null;
|
|
31635
31784
|
if (isAskAiStreaming) heading = placeholderTextAskAiStreaming;
|
|
31636
31785
|
if (askAiState === "conversation-history") heading = conversationHistoryTitle;
|
|
@@ -31648,6 +31797,11 @@ function AskAiSearchBox(_ref) {
|
|
|
31648
31797
|
const inputProps = {
|
|
31649
31798
|
enterKeyHint: props.isAskAiActive ? "enter" : "search",
|
|
31650
31799
|
onKeyDown: (e) => {
|
|
31800
|
+
if (isPromptBlocked && props.isAskAiActive && blockedKeys.has(e.key)) {
|
|
31801
|
+
e.preventDefault();
|
|
31802
|
+
e.stopPropagation();
|
|
31803
|
+
return;
|
|
31804
|
+
}
|
|
31651
31805
|
let askAiHandled = false;
|
|
31652
31806
|
if (props.isAskAiActive && blockedKeys.has(e.key)) {
|
|
31653
31807
|
if (e.key === "Enter" && !isAskAiStreaming && !isQueryEmpty(props.state.query)) props.onAskAgain(props.state.query);
|
|
@@ -31661,6 +31815,10 @@ function AskAiSearchBox(_ref) {
|
|
|
31661
31815
|
origOnKeyDown === null || origOnKeyDown === void 0 || origOnKeyDown(e);
|
|
31662
31816
|
},
|
|
31663
31817
|
onChange: (e) => {
|
|
31818
|
+
if (isPromptBlocked && props.isAskAiActive) {
|
|
31819
|
+
e.preventDefault();
|
|
31820
|
+
return;
|
|
31821
|
+
}
|
|
31664
31822
|
if (props.isAskAiActive) {
|
|
31665
31823
|
props.setQuery(e.currentTarget.value);
|
|
31666
31824
|
e.preventDefault();
|
|
@@ -31669,10 +31827,13 @@ function AskAiSearchBox(_ref) {
|
|
|
31669
31827
|
}
|
|
31670
31828
|
origOnChange === null || origOnChange === void 0 || origOnChange(e);
|
|
31671
31829
|
},
|
|
31672
|
-
disabled: isAskAiStreaming
|
|
31830
|
+
disabled: isAskAiStreaming,
|
|
31831
|
+
readOnly: isPromptBlocked && props.isAskAiActive,
|
|
31832
|
+
"aria-disabled": isPromptBlocked && props.isAskAiActive,
|
|
31833
|
+
"aria-describedby": isPromptBlocked && props.isAskAiActive ? props.promptBlockingErrorId : void 0
|
|
31673
31834
|
};
|
|
31674
31835
|
const handleAskAiBackClick = En.useCallback(() => {
|
|
31675
|
-
if (
|
|
31836
|
+
if (isPromptBlocked) {
|
|
31676
31837
|
props.onNewConversation();
|
|
31677
31838
|
return;
|
|
31678
31839
|
}
|
|
@@ -31684,7 +31845,7 @@ function AskAiSearchBox(_ref) {
|
|
|
31684
31845
|
onAskAiToggle(false);
|
|
31685
31846
|
}, [
|
|
31686
31847
|
askAiState,
|
|
31687
|
-
|
|
31848
|
+
isPromptBlocked,
|
|
31688
31849
|
onAskAiToggle,
|
|
31689
31850
|
setAskAiState,
|
|
31690
31851
|
props
|
|
@@ -31693,8 +31854,8 @@ function AskAiSearchBox(_ref) {
|
|
|
31693
31854
|
type: "button",
|
|
31694
31855
|
tabIndex: 0,
|
|
31695
31856
|
className: "DocSearch-Action DocSearch-AskAi-Return",
|
|
31696
|
-
title: backToKeywordSearchButtonText,
|
|
31697
|
-
"aria-label": backToKeywordSearchButtonAriaLabel,
|
|
31857
|
+
title: isPromptBlocked ? startNewConversationText : backToKeywordSearchButtonText,
|
|
31858
|
+
"aria-label": isPromptBlocked ? startNewConversationText : backToKeywordSearchButtonAriaLabel,
|
|
31698
31859
|
onClick: handleAskAiBackClick
|
|
31699
31860
|
}, /* @__PURE__ */ En.createElement(BackIcon, null)) : void 0;
|
|
31700
31861
|
const inputOverlay = heading ? /* @__PURE__ */ En.createElement(ModalHeading, {
|
|
@@ -31885,6 +32046,7 @@ function DocSearchAskAiModal(_ref) {
|
|
|
31885
32046
|
placeholder = (translations === null || translations === void 0 || (_translations$searchB3 = translations.searchBox) === null || _translations$searchB3 === void 0 ? void 0 : _translations$searchB3.placeholderTextAskAi) || "Ask another question...";
|
|
31886
32047
|
}
|
|
31887
32048
|
const { containerRef, modalRef, formElementRef, dropdownRef, inputRef } = useModalRefs();
|
|
32049
|
+
const promptBlockingErrorId = En.useId();
|
|
31888
32050
|
const { initialQuery, initialQueryFromSelection } = useInitialModalQuery(initialQueryFromProp);
|
|
31889
32051
|
const searchClient = useSearchClient(appId, apiKey, transformSearchClient);
|
|
31890
32052
|
const askAiConfig = typeof askAi === "object" ? askAi : null;
|
|
@@ -31941,9 +32103,17 @@ function DocSearchAskAiModal(_ref) {
|
|
|
31941
32103
|
stoppedStream,
|
|
31942
32104
|
chatId
|
|
31943
32105
|
]);
|
|
31944
|
-
const
|
|
31945
|
-
return status === "error" &&
|
|
31946
|
-
}, [status, askAiError]);
|
|
32106
|
+
const shouldBlockPrompt = En.useMemo(() => {
|
|
32107
|
+
return status === "error" && isAskAiPromptBlockingError(askAiError);
|
|
32108
|
+
}, [status, askAiError]) && (!isThreadDepthError(askAiError) || messages.some((message) => message.role === "assistant"));
|
|
32109
|
+
const promptBlockingChrome = En.useMemo(() => {
|
|
32110
|
+
if (!shouldBlockPrompt || askAiState === "new-conversation" || askAiState === "conversation-history") return;
|
|
32111
|
+
return isAgentStudioTokenOutputLimitError(askAiError) ? "minimal" : "full";
|
|
32112
|
+
}, [
|
|
32113
|
+
askAiError,
|
|
32114
|
+
askAiState,
|
|
32115
|
+
shouldBlockPrompt
|
|
32116
|
+
]);
|
|
31947
32117
|
const saveRecentSearch = useSaveRecentSearch({
|
|
31948
32118
|
favoriteSearches,
|
|
31949
32119
|
recentSearches,
|
|
@@ -32133,7 +32303,8 @@ function DocSearchAskAiModal(_ref) {
|
|
|
32133
32303
|
askAiError,
|
|
32134
32304
|
askAiState,
|
|
32135
32305
|
setAskAiState,
|
|
32136
|
-
|
|
32306
|
+
promptBlockingChrome,
|
|
32307
|
+
promptBlockingErrorId,
|
|
32137
32308
|
onClose,
|
|
32138
32309
|
onAskAiToggle,
|
|
32139
32310
|
onAskAgain: (query) => {
|
|
@@ -32175,6 +32346,7 @@ function DocSearchAskAiModal(_ref) {
|
|
|
32175
32346
|
selectSuggestedQuestion,
|
|
32176
32347
|
memoryEnabled,
|
|
32177
32348
|
resultBadgeKey: props.resultBadgeKey,
|
|
32349
|
+
promptBlockingErrorId,
|
|
32178
32350
|
onAskAiToggle,
|
|
32179
32351
|
onNewConversation: handleNewConversation,
|
|
32180
32352
|
onItemClick: (item, event) => {
|