librechat-data-provider 0.8.509 → 0.8.521
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/{data-service-XTxx76uB.js → data-service-DOIF4BkW.js} +1195 -91
- package/dist/data-service-DOIF4BkW.js.map +1 -0
- package/dist/{data-service-BsdHkdKS.mjs → data-service-pwrlWjJs.mjs} +1046 -92
- package/dist/data-service-pwrlWjJs.mjs.map +1 -0
- package/dist/index.js +457 -57
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +425 -58
- package/dist/index.mjs.map +1 -1
- package/dist/react-query/index.js +1 -1
- package/dist/react-query/index.js.map +1 -1
- package/dist/react-query/index.mjs +1 -1
- package/dist/react-query/index.mjs.map +1 -1
- package/dist/types/actions.d.ts +1 -1
- package/dist/types/api-endpoints.d.ts +10 -2
- package/dist/types/bedrock.d.ts +52 -0
- package/dist/types/config.d.ts +4142 -183
- package/dist/types/data-service.d.ts +27 -14
- package/dist/types/feedback.d.ts +9 -1
- package/dist/types/file-config.d.ts +41 -5
- package/dist/types/generate.d.ts +6 -0
- package/dist/types/keys.d.ts +6 -2
- package/dist/types/mcp.d.ts +45 -24
- package/dist/types/messages.d.ts +8 -0
- package/dist/types/models.d.ts +108 -0
- package/dist/types/parameterSettings.d.ts +2 -2
- package/dist/types/parsers.d.ts +3 -1
- package/dist/types/react-query/react-query-service.d.ts +2 -7
- package/dist/types/request.d.ts +3 -1
- package/dist/types/schemas.d.ts +167 -8
- package/dist/types/types/agents.d.ts +211 -1
- package/dist/types/types/assistants.d.ts +77 -5
- package/dist/types/types/files.d.ts +18 -7
- package/dist/types/types/mcpServers.d.ts +25 -0
- package/dist/types/types/mutations.d.ts +1 -0
- package/dist/types/types/queries.d.ts +17 -3
- package/dist/types/types/runs.d.ts +114 -25
- package/dist/types/types/skills.d.ts +25 -6
- package/dist/types/types.d.ts +115 -2
- package/dist/types/upload.d.ts +2 -0
- package/package.json +4 -4
- package/dist/data-service-BsdHkdKS.mjs.map +0 -1
- package/dist/data-service-XTxx76uB.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_data_service = require("./data-service-
|
|
2
|
+
const require_data_service = require("./data-service-DOIF4BkW.js");
|
|
3
3
|
let zod = require("zod");
|
|
4
4
|
let dayjs = require("dayjs");
|
|
5
5
|
dayjs = require_data_service.__toESM(dayjs);
|
|
@@ -14,10 +14,13 @@ let crypto = require("crypto");
|
|
|
14
14
|
crypto = require_data_service.__toESM(crypto);
|
|
15
15
|
let js_yaml = require("js-yaml");
|
|
16
16
|
//#region src/bedrock.ts
|
|
17
|
-
const DEFAULT_ENABLED_MAX_TOKENS = 8192;
|
|
18
17
|
const DEFAULT_THINKING_BUDGET = 2e3;
|
|
18
|
+
const BEDROCK_CLAUDE_SONNET_4_6_MAX_OUTPUT = 64e3;
|
|
19
19
|
const BEDROCK_OUTPUT_128K_BETA = "output-128k-2025-02-19";
|
|
20
20
|
const BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14";
|
|
21
|
+
/** Betas LibreChat injects itself, safe to strip from persisted AMRF when a
|
|
22
|
+
* model no longer supports them; anything else in `anthropic_beta` is a user opt-in. */
|
|
23
|
+
const GENERATED_BEDROCK_BETAS = new Set([BEDROCK_OUTPUT_128K_BETA, BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA]);
|
|
21
24
|
const bedrockReasoningConfigValues = new Set(Object.values(require_data_service.BedrockReasoningConfig));
|
|
22
25
|
/**
|
|
23
26
|
* Resolves the final `thinking.display` value for an adaptive-thinking request.
|
|
@@ -62,14 +65,14 @@ function parseOpusVersion(model) {
|
|
|
62
65
|
return null;
|
|
63
66
|
}
|
|
64
67
|
/** Extracts sonnet major/minor version from both naming formats.
|
|
65
|
-
* Uses
|
|
68
|
+
* Uses bounded minor capture to avoid matching date suffixes (e.g., -20250514). */
|
|
66
69
|
function parseSonnetVersion(model) {
|
|
67
|
-
const nameFirst = model.match(/claude-sonnet[-.]?(\d+)(?:[-.](\d)(?!\d))?/);
|
|
70
|
+
const nameFirst = model.match(/claude-sonnet[-.]?(\d+)(?:[-.](\d{1,2})(?!\d))?/);
|
|
68
71
|
if (nameFirst) return {
|
|
69
72
|
major: parseInt(nameFirst[1], 10),
|
|
70
73
|
minor: nameFirst[2] != null ? parseInt(nameFirst[2], 10) : 0
|
|
71
74
|
};
|
|
72
|
-
const numFirst = model.match(/claude-(\d+)(?:[-.](\d)(?!\d))?-sonnet/);
|
|
75
|
+
const numFirst = model.match(/claude-(\d+)(?:[-.](\d{1,2})(?!\d))?-sonnet/);
|
|
73
76
|
if (numFirst) return {
|
|
74
77
|
major: parseInt(numFirst[1], 10),
|
|
75
78
|
minor: numFirst[2] != null ? parseInt(numFirst[2], 10) : 0
|
|
@@ -103,15 +106,80 @@ function supportsAdaptiveThinking(model) {
|
|
|
103
106
|
function omitsThinkingByDefault(model) {
|
|
104
107
|
const opus = parseOpusVersion(model);
|
|
105
108
|
if (opus && (opus.major > 4 || opus.major === 4 && opus.minor >= 7)) return true;
|
|
109
|
+
const sonnet = parseSonnetVersion(model);
|
|
110
|
+
if (sonnet != null && sonnet.major >= 5) return true;
|
|
106
111
|
if (require_data_service.isMythosClassModel(model)) return true;
|
|
107
112
|
return false;
|
|
108
113
|
}
|
|
109
114
|
function omitsSamplingParameters(model) {
|
|
110
115
|
const opus = parseOpusVersion(model);
|
|
111
116
|
if (opus && (opus.major > 4 || opus.major === 4 && opus.minor >= 7)) return true;
|
|
117
|
+
const sonnet = parseSonnetVersion(model);
|
|
118
|
+
if (sonnet != null && sonnet.major >= 5) return true;
|
|
112
119
|
if (require_data_service.isMythosClassModel(model)) return true;
|
|
113
120
|
return false;
|
|
114
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Whether disabling thinking requires sending an explicit `{ type: 'disabled' }`
|
|
124
|
+
* config rather than simply omitting the `thinking` field.
|
|
125
|
+
*
|
|
126
|
+
* Sonnet 5 and Opus 5 treat an omitted `thinking` field as adaptive thinking ON
|
|
127
|
+
* by default, so honoring a user who turns thinking off means sending the
|
|
128
|
+
* disabled config explicitly. Opus 4.7/4.8 run without thinking when the field
|
|
129
|
+
* is omitted, and Fable/Mythos reject an explicit disabled config (400,
|
|
130
|
+
* thinking always on), so both are excluded.
|
|
131
|
+
*
|
|
132
|
+
* See https://platform.claude.com/docs/en/about-claude/models/migration-guide#migrating-to-claude-sonnet-5
|
|
133
|
+
*/
|
|
134
|
+
function requiresExplicitThinkingDisabled(model) {
|
|
135
|
+
const sonnet = parseSonnetVersion(model);
|
|
136
|
+
if (sonnet != null && sonnet.major >= 5) return true;
|
|
137
|
+
const opus = parseOpusVersion(model);
|
|
138
|
+
return opus != null && opus.major >= 5;
|
|
139
|
+
}
|
|
140
|
+
/** Effort levels Opus 5 rejects while thinking is explicitly disabled. */
|
|
141
|
+
const EFFORTS_REJECTED_WHEN_THINKING_DISABLED = new Set(["xhigh", "max"]);
|
|
142
|
+
/**
|
|
143
|
+
* Whether the model caps `output_config.effort` while thinking is disabled.
|
|
144
|
+
*
|
|
145
|
+
* Opus 5 rejects `xhigh`/`max` in that combination with a 400: "output_config
|
|
146
|
+
* .effort 'xhigh' is not supported when thinking is disabled on this model. Use
|
|
147
|
+
* effort 'high' or below, or enable thinking." Opus 4.7/4.8, Sonnet 5, and
|
|
148
|
+
* Sonnet 4.6 accept every effort level they otherwise support with thinking
|
|
149
|
+
* off, so the cap is Opus 5+ only.
|
|
150
|
+
*/
|
|
151
|
+
function capsEffortWhenThinkingDisabled(model) {
|
|
152
|
+
const opus = parseOpusVersion(model);
|
|
153
|
+
return opus != null && opus.major >= 5;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Lowers an effort level the model would reject while thinking is disabled to
|
|
157
|
+
* the highest accepted value (`high`, which is also the API default). Returns
|
|
158
|
+
* the effort unchanged when the combination is valid.
|
|
159
|
+
*/
|
|
160
|
+
function clampEffortForDisabledThinking(model, effort) {
|
|
161
|
+
if (capsEffortWhenThinkingDisabled(model) && EFFORTS_REJECTED_WHEN_THINKING_DISABLED.has(effort)) return "high";
|
|
162
|
+
return effort;
|
|
163
|
+
}
|
|
164
|
+
/** An `output_config` container carrying a usable effort level. */
|
|
165
|
+
function hasStringEffort(value) {
|
|
166
|
+
if (typeof value !== "object" || value === null || !("effort" in value)) return false;
|
|
167
|
+
return typeof value.effort === "string";
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Clamps an `output_config.effort` in place when the model would reject it
|
|
171
|
+
* while thinking is disabled. No-op when the container carries no string
|
|
172
|
+
* effort, so callers can pass a possibly-absent config directly.
|
|
173
|
+
*/
|
|
174
|
+
function clampOutputConfigEffort(model, outputConfig) {
|
|
175
|
+
if (!hasStringEffort(outputConfig)) return;
|
|
176
|
+
outputConfig.effort = clampEffortForDisabledThinking(model, outputConfig.effort);
|
|
177
|
+
}
|
|
178
|
+
/** Whether a resolved thinking config is an explicit `{ type: 'disabled' }`. */
|
|
179
|
+
function isThinkingDisabled(thinking) {
|
|
180
|
+
if (typeof thinking !== "object" || thinking === null || !("type" in thinking)) return false;
|
|
181
|
+
return thinking.type === "disabled";
|
|
182
|
+
}
|
|
115
183
|
/** Checks if a model has a 1M context window (Sonnet 4.6+, Opus 4.6+, Opus 5+, Fable/Mythos) */
|
|
116
184
|
function supportsContext1m(model) {
|
|
117
185
|
const sonnet = parseSonnetVersion(model);
|
|
@@ -122,6 +190,19 @@ function supportsContext1m(model) {
|
|
|
122
190
|
return false;
|
|
123
191
|
}
|
|
124
192
|
/**
|
|
193
|
+
* A Bedrock Claude model ID may be prefixed (`anthropic.claude-*`,
|
|
194
|
+
* `us.anthropic.claude-*`, `global.anthropic.claude-*`) or bare (`claude-*`,
|
|
195
|
+
* used when the LibreChat model ID maps to an application inference profile).
|
|
196
|
+
* Match on the `claude` family token so every form is recognized — requiring
|
|
197
|
+
* the literal `anthropic.` prefix silently dropped thinking config, beta
|
|
198
|
+
* headers, and sampling handling for inference-profile deployments.
|
|
199
|
+
*/
|
|
200
|
+
const BEDROCK_CLAUDE_4PLUS_THINKING = /claude-(?:[4-9](?:\.\d+)?(?:-\d+)?-(?:sonnet|opus|haiku)|(?:sonnet|opus|haiku)-[4-9])/;
|
|
201
|
+
/** Whether a Bedrock model ID is an Anthropic Claude model (prefixed or bare). */
|
|
202
|
+
function isBedrockClaudeModel(model) {
|
|
203
|
+
return model.includes("claude");
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
125
206
|
* Gets the appropriate anthropic_beta headers for Bedrock Anthropic models.
|
|
126
207
|
* Bedrock uses `anthropic_beta` (with underscore) in additionalModelRequestFields.
|
|
127
208
|
*
|
|
@@ -132,19 +213,33 @@ function getBedrockAnthropicBetaHeaders(model) {
|
|
|
132
213
|
const betaHeaders = [];
|
|
133
214
|
/** Mythos-class (Fable/Mythos) is intentionally not matched: these betas are built-in/no-op for the
|
|
134
215
|
* 4.7+ generation (Fable has native 128K output), so omitting them on Bedrock is lossless. */
|
|
135
|
-
const isClaude4PlusModel =
|
|
136
|
-
if (model.includes("
|
|
216
|
+
const isClaude4PlusModel = BEDROCK_CLAUDE_4PLUS_THINKING.test(model);
|
|
217
|
+
if (model.includes("claude-3-7-sonnet") || isClaude4PlusModel) betaHeaders.push(BEDROCK_OUTPUT_128K_BETA);
|
|
137
218
|
if (isClaude4PlusModel) betaHeaders.push(BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA);
|
|
138
219
|
return betaHeaders;
|
|
139
220
|
}
|
|
221
|
+
/** Flatten an anthropic_beta value (array, single string, or comma-delimited
|
|
222
|
+
* string) into trimmed, non-empty header tokens. */
|
|
223
|
+
function normalizeBetaHeaders(value) {
|
|
224
|
+
let values = [];
|
|
225
|
+
if (Array.isArray(value)) values = value;
|
|
226
|
+
else if (typeof value === "string") values = [value];
|
|
227
|
+
const headers = [];
|
|
228
|
+
values.forEach((entry) => {
|
|
229
|
+
if (typeof entry !== "string") return;
|
|
230
|
+
entry.split(",").map((header) => header.trim()).filter(Boolean).forEach((header) => headers.push(header));
|
|
231
|
+
});
|
|
232
|
+
return headers;
|
|
233
|
+
}
|
|
140
234
|
function mergeBedrockAnthropicBetaHeaders(existing, generated) {
|
|
141
|
-
|
|
142
|
-
if (Array.isArray(existing)) existingValues = existing;
|
|
143
|
-
else if (typeof existing === "string") existingValues = [existing];
|
|
235
|
+
const generatedSet = new Set(generated);
|
|
144
236
|
const betaHeaders = /* @__PURE__ */ new Set();
|
|
145
|
-
[...
|
|
146
|
-
|
|
147
|
-
|
|
237
|
+
[...normalizeBetaHeaders(existing), ...generated].forEach((header) => {
|
|
238
|
+
/** Drop a generated beta carried over from a prior model that the current
|
|
239
|
+
* model does not generate (e.g. fine-grained-tool-streaming on a 3.7
|
|
240
|
+
* profile); user opt-ins are always preserved. */
|
|
241
|
+
if (GENERATED_BEDROCK_BETAS.has(header) && !generatedSet.has(header)) return;
|
|
242
|
+
betaHeaders.add(header);
|
|
148
243
|
});
|
|
149
244
|
return Array.from(betaHeaders);
|
|
150
245
|
}
|
|
@@ -178,7 +273,7 @@ const bedrockInputSchema = require_data_service.tConversationSchema.pick({
|
|
|
178
273
|
}).transform((obj) => {
|
|
179
274
|
if (obj.additionalModelRequestFields?.thinking != null) {
|
|
180
275
|
const thinking = obj.additionalModelRequestFields.thinking;
|
|
181
|
-
obj.thinking = !!thinking;
|
|
276
|
+
obj.thinking = typeof thinking === "object" && thinking !== null && thinking.type === "disabled" ? false : !!thinking;
|
|
182
277
|
obj.thinkingBudget = typeof thinking === "object" && "budget_tokens" in thinking ? thinking.budget_tokens : void 0;
|
|
183
278
|
if (obj.thinkingDisplay == null) {
|
|
184
279
|
const persistedDisplay = extractPersistedDisplay({ thinking });
|
|
@@ -245,16 +340,49 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
|
|
|
245
340
|
delete typedData[key];
|
|
246
341
|
}
|
|
247
342
|
});
|
|
248
|
-
/**
|
|
249
|
-
|
|
343
|
+
/**
|
|
344
|
+
* Persisted `model_parameters` can carry a prior "thinking off" only inside
|
|
345
|
+
* `additionalModelRequestFields.thinking = { type: 'disabled' }` (a known
|
|
346
|
+
* key that isn't spread into `additionalFields`). `initializeBedrock` feeds
|
|
347
|
+
* those params straight through this parser, so surface that as
|
|
348
|
+
* `thinking: false` — otherwise the disabled branch is skipped and the
|
|
349
|
+
* config rebuilds adaptive, flipping a user's Sonnet 5 setting back on.
|
|
350
|
+
*/
|
|
351
|
+
const persistedThinking = typedData.additionalModelRequestFields?.thinking;
|
|
352
|
+
if (additionalFields.thinking === void 0 && typeof persistedThinking === "object" && persistedThinking !== null && persistedThinking.type === "disabled") additionalFields.thinking = false;
|
|
353
|
+
/** Bedrock thinking-capable Claude models: 3.7 Sonnet, Claude 4+ (opus/sonnet/haiku), and Mythos-class (Fable/Mythos). */
|
|
354
|
+
const isThinkingModel = typeof typedData.model === "string" && (typedData.model.includes("claude-3-7-sonnet") || BEDROCK_CLAUDE_4PLUS_THINKING.test(typedData.model) || require_data_service.isMythosClassModel(typedData.model));
|
|
355
|
+
if (isThinkingModel) {
|
|
250
356
|
if (supportsAdaptiveThinking(typedData.model)) {
|
|
357
|
+
/** Persisted AMRF is spread into the final request, so clearing only
|
|
358
|
+
* `additionalFields` leaves a stale value from a prior selection. */
|
|
359
|
+
const persistedAmrf = typedData.additionalModelRequestFields;
|
|
360
|
+
const thinkingDisabled = additionalFields.thinking === false;
|
|
251
361
|
const effort = additionalFields.effort;
|
|
252
|
-
if (
|
|
362
|
+
if (typeof effort === "string" && effort !== "") additionalFields.output_config = { effort };
|
|
363
|
+
else if (effort !== void 0 && persistedAmrf)
|
|
364
|
+
/** Explicit unset ('' or null) clears the persisted effort. An absent
|
|
365
|
+
* effort (agent resume, where the prior llmConfig persisted
|
|
366
|
+
* `output_config` but no top-level `effort`) preserves it. */
|
|
367
|
+
delete persistedAmrf.output_config;
|
|
253
368
|
delete additionalFields.effort;
|
|
369
|
+
/**
|
|
370
|
+
* Opus 5 rejects `xhigh`/`max` effort while thinking is disabled, so
|
|
371
|
+
* clamp both the effort derived above and any effort still carried in
|
|
372
|
+
* persisted AMRF (agent resume sends `output_config` with no top-level
|
|
373
|
+
* `effort`, so the branch above leaves it untouched).
|
|
374
|
+
*/
|
|
375
|
+
if (thinkingDisabled) [additionalFields, persistedAmrf].forEach((target) => clampOutputConfigEffort(typedData.model, target?.output_config));
|
|
254
376
|
if (additionalFields.thinking === false) {
|
|
255
|
-
delete additionalFields.thinking;
|
|
256
377
|
delete additionalFields.thinkingBudget;
|
|
257
378
|
delete additionalFields.thinkingDisplay;
|
|
379
|
+
if (requiresExplicitThinkingDisabled(typedData.model)) additionalFields.thinking = { type: "disabled" };
|
|
380
|
+
else {
|
|
381
|
+
delete additionalFields.thinking;
|
|
382
|
+
/** Disable-by-omission models (Opus 4.7+): drop the persisted
|
|
383
|
+
* adaptive config so turning thinking off actually disables it. */
|
|
384
|
+
if (persistedAmrf) delete persistedAmrf.thinking;
|
|
385
|
+
}
|
|
258
386
|
} else {
|
|
259
387
|
/**
|
|
260
388
|
* Persisted agent `model_parameters` round-trip back through this
|
|
@@ -282,10 +410,18 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
|
|
|
282
410
|
if (additionalFields.thinking === true && additionalFields.thinkingBudget === void 0) additionalFields.thinkingBudget = DEFAULT_THINKING_BUDGET;
|
|
283
411
|
delete additionalFields.effort;
|
|
284
412
|
delete additionalFields.thinkingDisplay;
|
|
413
|
+
/** A bare non-adaptive thinking profile (e.g. `claude-3-7-sonnet`) must
|
|
414
|
+
* not inherit an adaptive/disabled thinking object or `output_config`
|
|
415
|
+
* persisted from another model; this branch's own fields are authoritative. */
|
|
416
|
+
const persistedAmrf = typedData.additionalModelRequestFields;
|
|
417
|
+
if (persistedAmrf) {
|
|
418
|
+
delete persistedAmrf.thinking;
|
|
419
|
+
delete persistedAmrf.output_config;
|
|
420
|
+
}
|
|
285
421
|
}
|
|
286
422
|
/** Anthropic uses 'effort' via output_config, not reasoning_config */
|
|
287
423
|
delete additionalFields.reasoning_effort;
|
|
288
|
-
if (typedData.model
|
|
424
|
+
if (isBedrockClaudeModel(typedData.model)) {
|
|
289
425
|
const betaHeaders = getBedrockAnthropicBetaHeaders(typedData.model);
|
|
290
426
|
if (betaHeaders.length > 0) {
|
|
291
427
|
const existingBetaHeaders = typedData.additionalModelRequestFields?.anthropic_beta;
|
|
@@ -303,7 +439,7 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
|
|
|
303
439
|
delete additionalFields.reasoning_effort;
|
|
304
440
|
if (typeof reasoningEffort === "string" && bedrockReasoningConfigValues.has(reasoningEffort)) additionalFields.reasoning_config = reasoningEffort;
|
|
305
441
|
}
|
|
306
|
-
const isAnthropicModel = typeof typedData.model === "string" && typedData.model
|
|
442
|
+
const isAnthropicModel = typeof typedData.model === "string" && isBedrockClaudeModel(typedData.model);
|
|
307
443
|
/** Strip stale fields from previously-persisted additionalModelRequestFields */
|
|
308
444
|
if (typeof typedData.additionalModelRequestFields === "object" && typedData.additionalModelRequestFields != null) {
|
|
309
445
|
const amrf = typedData.additionalModelRequestFields;
|
|
@@ -317,6 +453,22 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
|
|
|
317
453
|
} else {
|
|
318
454
|
delete amrf.reasoning_config;
|
|
319
455
|
delete amrf.reasoning_effort;
|
|
456
|
+
/** A Claude model that does not support Bedrock thinking (e.g. a bare
|
|
457
|
+
* `claude-3-5-sonnet` inference profile) must not carry stale thinking
|
|
458
|
+
* fields from a previously-selected thinking model. Drop only the
|
|
459
|
+
* LibreChat-generated betas (output-128k, fine-grained tool streaming);
|
|
460
|
+
* user opt-ins in `anthropic_beta` are preserved. */
|
|
461
|
+
if (!isThinkingModel) {
|
|
462
|
+
delete amrf.thinking;
|
|
463
|
+
delete amrf.thinkingBudget;
|
|
464
|
+
delete amrf.effort;
|
|
465
|
+
delete amrf.output_config;
|
|
466
|
+
if (amrf.anthropic_beta !== void 0) {
|
|
467
|
+
const kept = normalizeBetaHeaders(amrf.anthropic_beta).filter((header) => !GENERATED_BEDROCK_BETAS.has(header));
|
|
468
|
+
if (kept.length > 0) amrf.anthropic_beta = kept;
|
|
469
|
+
else delete amrf.anthropic_beta;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
320
472
|
}
|
|
321
473
|
if (shouldOmitSamplingParameters) {
|
|
322
474
|
delete amrf.temperature;
|
|
@@ -359,11 +511,37 @@ const bedrockInputParser = require_data_service.tConversationSchema.pick({
|
|
|
359
511
|
* @param data - The parsed Bedrock request options object
|
|
360
512
|
* @returns The object with thinking configured appropriately
|
|
361
513
|
*/
|
|
514
|
+
/**
|
|
515
|
+
* `anthropicSettings.maxOutputTokens.reset` only matches the canonical
|
|
516
|
+
* family-first id (`claude-sonnet-5`); Bedrock also accepts number-first
|
|
517
|
+
* aliases (`claude-5-sonnet`, `claude-4-7-sonnet`) that this file gates as
|
|
518
|
+
* thinking models. Canonicalize to family-first so those aliases resolve to the
|
|
519
|
+
* real ceiling instead of the 8192 fallback.
|
|
520
|
+
*/
|
|
521
|
+
function toFamilyFirstClaudeId(model) {
|
|
522
|
+
return model.replace(/claude-(\d+(?:[-.]\d+)?)-(sonnet|opus|haiku)/, "claude-$2-$1");
|
|
523
|
+
}
|
|
524
|
+
function isBedrockClaudeSonnet46(model) {
|
|
525
|
+
return /claude-sonnet[-.]?4[-.]?6(?=$|[^0-9])/.test(toFamilyFirstClaudeId(model));
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Thinking tokens share the `maxTokens` output budget with tool-call arguments
|
|
529
|
+
* (e.g. a `create_file` `content`), so a low default truncates large authored
|
|
530
|
+
* files mid-argument. Mirror the direct-Anthropic path and default to the
|
|
531
|
+
* model's full max output when the request does not set one explicitly.
|
|
532
|
+
*/
|
|
533
|
+
function resolveThinkingMaxTokens(data) {
|
|
534
|
+
const explicit = data.maxTokens ?? data.maxOutputTokens;
|
|
535
|
+
if (typeof explicit === "number" && explicit > 0) return explicit;
|
|
536
|
+
const model = typeof data.model === "string" ? data.model : "";
|
|
537
|
+
if (isBedrockClaudeSonnet46(model)) return BEDROCK_CLAUDE_SONNET_4_6_MAX_OUTPUT;
|
|
538
|
+
return require_data_service.anthropicSettings.maxOutputTokens.reset(toFamilyFirstClaudeId(model));
|
|
539
|
+
}
|
|
362
540
|
function configureThinking(data) {
|
|
363
541
|
const updatedData = { ...data };
|
|
364
542
|
const thinking = updatedData.additionalModelRequestFields?.thinking;
|
|
365
543
|
if (thinking === true) {
|
|
366
|
-
updatedData.maxTokens = updatedData
|
|
544
|
+
updatedData.maxTokens = resolveThinkingMaxTokens(updatedData);
|
|
367
545
|
delete updatedData.maxOutputTokens;
|
|
368
546
|
const thinkingConfig = {
|
|
369
547
|
type: "enabled",
|
|
@@ -373,12 +551,30 @@ function configureThinking(data) {
|
|
|
373
551
|
updatedData.additionalModelRequestFields.thinking = thinkingConfig;
|
|
374
552
|
delete updatedData.additionalModelRequestFields.thinkingBudget;
|
|
375
553
|
} else if (typeof thinking === "object" && thinking != null && thinking.type === "adaptive") {
|
|
376
|
-
|
|
554
|
+
updatedData.maxTokens = resolveThinkingMaxTokens(updatedData);
|
|
377
555
|
delete updatedData.maxOutputTokens;
|
|
378
556
|
delete updatedData.additionalModelRequestFields.thinkingBudget;
|
|
379
557
|
}
|
|
380
558
|
return updatedData;
|
|
381
559
|
}
|
|
560
|
+
/** Top-level Converse request fields (issue #14029: `system` from a preset).
|
|
561
|
+
* The input parser's catch-all routes unknown keys into
|
|
562
|
+
* additionalModelRequestFields, and Bedrock rejects any that collide with a
|
|
563
|
+
* field the request already sends (`messages`/`modelId` always,
|
|
564
|
+
* `inferenceConfig` whenever maxTokens is set, `toolConfig` for agents). */
|
|
565
|
+
const RESERVED_CONVERSE_FIELDS = [
|
|
566
|
+
"system",
|
|
567
|
+
"messages",
|
|
568
|
+
"modelId",
|
|
569
|
+
"toolConfig",
|
|
570
|
+
"inferenceConfig",
|
|
571
|
+
"guardrailConfig",
|
|
572
|
+
"promptVariables",
|
|
573
|
+
"requestMetadata",
|
|
574
|
+
"performanceConfig",
|
|
575
|
+
"additionalModelRequestFields",
|
|
576
|
+
"additionalModelResponseFieldPaths"
|
|
577
|
+
];
|
|
382
578
|
const bedrockOutputParser = (data) => {
|
|
383
579
|
const knownKeys = [
|
|
384
580
|
...Object.keys(require_data_service.tConversationSchema.shape),
|
|
@@ -397,7 +593,15 @@ const bedrockOutputParser = (data) => {
|
|
|
397
593
|
if (result.maxTokens !== void 0 && result.maxOutputTokens === void 0) result.maxOutputTokens = result.maxTokens;
|
|
398
594
|
else if (result.maxOutputTokens !== void 0 && result.maxTokens === void 0) result.maxTokens = result.maxOutputTokens;
|
|
399
595
|
result = configureThinking(result);
|
|
400
|
-
|
|
596
|
+
let amrf = result.additionalModelRequestFields;
|
|
597
|
+
if (amrf && typeof amrf === "object") {
|
|
598
|
+
const reserved = RESERVED_CONVERSE_FIELDS.filter((key) => key in (amrf ?? {}));
|
|
599
|
+
if (reserved.length > 0) {
|
|
600
|
+
amrf = { ...amrf };
|
|
601
|
+
for (const key of reserved) delete amrf[key];
|
|
602
|
+
result.additionalModelRequestFields = amrf;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
401
605
|
if (!amrf || Object.keys(amrf).length === 0) delete result.additionalModelRequestFields;
|
|
402
606
|
return result;
|
|
403
607
|
};
|
|
@@ -414,6 +618,8 @@ let ContentTypes = /* @__PURE__ */ function(ContentTypes) {
|
|
|
414
618
|
ContentTypes["INPUT_AUDIO"] = "input_audio";
|
|
415
619
|
ContentTypes["AGENT_UPDATE"] = "agent_update";
|
|
416
620
|
ContentTypes["SUMMARY"] = "summary";
|
|
621
|
+
ContentTypes["ACTIVITY_LABEL"] = "activity_label";
|
|
622
|
+
ContentTypes["STEER"] = "steer";
|
|
417
623
|
ContentTypes["ERROR"] = "error";
|
|
418
624
|
return ContentTypes;
|
|
419
625
|
}({});
|
|
@@ -442,6 +648,7 @@ let StepEvents = /* @__PURE__ */ function(StepEvents) {
|
|
|
442
648
|
StepEvents["ON_SUMMARIZE_DELTA"] = "on_summarize_delta";
|
|
443
649
|
StepEvents["ON_SUMMARIZE_COMPLETE"] = "on_summarize_complete";
|
|
444
650
|
StepEvents["ON_SUBAGENT_UPDATE"] = "on_subagent_update";
|
|
651
|
+
StepEvents["ON_SANDBOX_STARTING"] = "on_sandbox_starting";
|
|
445
652
|
return StepEvents;
|
|
446
653
|
}({});
|
|
447
654
|
/** Token-tracking event names streamed to the client (separate from StepEvents dispatch). */
|
|
@@ -451,6 +658,38 @@ let UsageEvents = /* @__PURE__ */ function(UsageEvents) {
|
|
|
451
658
|
return UsageEvents;
|
|
452
659
|
}({});
|
|
453
660
|
/**
|
|
661
|
+
* Human-in-the-loop event names. Streamed to live clients when a run pauses for
|
|
662
|
+
* tool approval (or an ask-user question). Reconnecting clients instead read the
|
|
663
|
+
* same record from `resumeState.pendingAction` on the sync event / status route.
|
|
664
|
+
*/
|
|
665
|
+
let ApprovalEvents = /* @__PURE__ */ function(ApprovalEvents) {
|
|
666
|
+
ApprovalEvents["ON_PENDING_ACTION"] = "on_pending_action";
|
|
667
|
+
return ApprovalEvents;
|
|
668
|
+
}({});
|
|
669
|
+
/**
|
|
670
|
+
* Steering event names. `on_steer_applied` streams to live clients when a
|
|
671
|
+
* queued steer message is injected at a tool-batch boundary; reconnecting
|
|
672
|
+
* clients recover injected steers from `aggregatedContent` and still-queued
|
|
673
|
+
* ones from `resumeState.pendingSteers`. Steers that never reach a boundary
|
|
674
|
+
* ride the final/abort events as `pendingSteers`.
|
|
675
|
+
*/
|
|
676
|
+
let SteerEvents = /* @__PURE__ */ function(SteerEvents) {
|
|
677
|
+
SteerEvents["ON_STEER_APPLIED"] = "on_steer_applied";
|
|
678
|
+
/** Durable capability correction for queued steers after HITL handover. */
|
|
679
|
+
SteerEvents["ON_STEER_UPDATED"] = "on_steer_updated";
|
|
680
|
+
return SteerEvents;
|
|
681
|
+
}({});
|
|
682
|
+
/**
|
|
683
|
+
* Activity-label event names. `on_activity_label` streams to live clients
|
|
684
|
+
* when a tool-batch or parent-phase label part is claimed and again when the
|
|
685
|
+
* fast-model label resolves; reconnecting clients recover applied labels
|
|
686
|
+
* from `aggregatedContent` like any other content part.
|
|
687
|
+
*/
|
|
688
|
+
let ActivityLabelEvents = /* @__PURE__ */ function(ActivityLabelEvents) {
|
|
689
|
+
ActivityLabelEvents["ON_ACTIVITY_LABEL"] = "on_activity_label";
|
|
690
|
+
return ActivityLabelEvents;
|
|
691
|
+
}({});
|
|
692
|
+
/**
|
|
454
693
|
* Full prompt token count for one completed model call — the EXACT context the
|
|
455
694
|
* model saw, provider-aware: additive providers (Bedrock) report `input_tokens`
|
|
456
695
|
* excluding cache, so cache reads/writes are added back; subset providers
|
|
@@ -657,19 +896,21 @@ const parseCompactConvo = ({ endpoint, endpointType, conversation, possibleValue
|
|
|
657
896
|
if (models && convo) convo.model = getFirstDefinedValue(models) ?? convo.model;
|
|
658
897
|
return convo;
|
|
659
898
|
};
|
|
660
|
-
function parseTextParts(contentParts, skipReasoning = false) {
|
|
899
|
+
function parseTextParts(contentParts, skipReasoning = false, options) {
|
|
661
900
|
let result = "";
|
|
901
|
+
const append = (textValue) => {
|
|
902
|
+
if (result.length > 0 && textValue.length > 0 && result[result.length - 1] !== " " && textValue[0] !== " ") result += " ";
|
|
903
|
+
result += textValue;
|
|
904
|
+
};
|
|
662
905
|
for (const part of contentParts) {
|
|
663
906
|
if (!part?.type) continue;
|
|
664
|
-
if (part.type === "text")
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
result += textValue;
|
|
672
|
-
}
|
|
907
|
+
if (part.type === "text") append((typeof part.text === "string" ? part.text : part.text?.value) || "");
|
|
908
|
+
else if (part.type === "steer" && options?.includeSteer === true)
|
|
909
|
+
/** Mid-run user speech: excluded by default so generic extraction (TTS
|
|
910
|
+
* reading assistant output) never speaks the user's own words — the
|
|
911
|
+
* full-record surfaces (search indexing, persisted abort text) opt in. */
|
|
912
|
+
append(typeof part.steer === "string" ? part.steer : "");
|
|
913
|
+
else if (part.type === "think" && !skipReasoning) append(typeof part.think === "string" ? part.think : "");
|
|
673
914
|
}
|
|
674
915
|
return result;
|
|
675
916
|
}
|
|
@@ -1015,14 +1256,27 @@ function mapGroupToAzureConfig({ groupName, groupMap }) {
|
|
|
1015
1256
|
}
|
|
1016
1257
|
//#endregion
|
|
1017
1258
|
//#region src/messages.ts
|
|
1259
|
+
/**
|
|
1260
|
+
* Builds the render tree from the flat messages array. Order-robust: live
|
|
1261
|
+
* stream/steer/preempt cache writes can momentarily place a child before its
|
|
1262
|
+
* parent, and a single-pass link would hoist such rows into phantom root
|
|
1263
|
+
* branches — folding the visible thread to one dangling branch until a
|
|
1264
|
+
* refetch restores creation order. Linking happens only after every message
|
|
1265
|
+
* is indexed, so array order never changes the tree shape.
|
|
1266
|
+
*/
|
|
1018
1267
|
function buildTree({ messages, fileMap }) {
|
|
1019
1268
|
if (messages === null) return null;
|
|
1020
1269
|
const messageMap = {};
|
|
1270
|
+
const orderedMessages = [];
|
|
1021
1271
|
const rootMessages = [];
|
|
1022
1272
|
const childrenCount = {};
|
|
1023
|
-
|
|
1024
|
-
if (!message)
|
|
1025
|
-
|
|
1273
|
+
for (const message of messages) {
|
|
1274
|
+
if (!message) continue;
|
|
1275
|
+
/** A self-parented row can never link under itself (it becomes a root),
|
|
1276
|
+
* so count it with the parentless group — charging its own id would
|
|
1277
|
+
* inflate the sibling indices of its real children past
|
|
1278
|
+
* `children.length`. */
|
|
1279
|
+
const parentId = message.parentMessageId === message.messageId ? "" : message.parentMessageId ?? "";
|
|
1026
1280
|
childrenCount[parentId] = (childrenCount[parentId] || 0) + 1;
|
|
1027
1281
|
const extendedMessage = {
|
|
1028
1282
|
...message,
|
|
@@ -1032,12 +1286,39 @@ function buildTree({ messages, fileMap }) {
|
|
|
1032
1286
|
};
|
|
1033
1287
|
if (message.files && fileMap) extendedMessage.files = message.files.map((file) => fileMap[file.file_id ?? ""] ?? file);
|
|
1034
1288
|
messageMap[message.messageId] = extendedMessage;
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1289
|
+
orderedMessages.push(extendedMessage);
|
|
1290
|
+
}
|
|
1291
|
+
for (const extendedMessage of orderedMessages) {
|
|
1292
|
+
const parentMessage = messageMap[extendedMessage.parentMessageId ?? ""];
|
|
1293
|
+
if (parentMessage && parentMessage !== extendedMessage) parentMessage.children.push(extendedMessage);
|
|
1294
|
+
else rootMessages.push(extendedMessage);
|
|
1295
|
+
}
|
|
1296
|
+
/** Depth comes from a roots-down walk (a child linked before its parent
|
|
1297
|
+
* can't inherit depth at link time). The `visited` set doubles as the
|
|
1298
|
+
* cycle guard: nodes on a corrupt parent cycle are unreachable from any
|
|
1299
|
+
* root, so they resurface as roots instead of disappearing. */
|
|
1300
|
+
const visited = /* @__PURE__ */ new Set();
|
|
1301
|
+
const assignDepths = (root) => {
|
|
1302
|
+
visited.add(root);
|
|
1303
|
+
const stack = [root];
|
|
1304
|
+
while (stack.length > 0) {
|
|
1305
|
+
const node = stack.pop();
|
|
1306
|
+
/** Every node has one parent, so this walk reaches each node once — an
|
|
1307
|
+
* already-visited child is a cycle back-edge. Sever it (not just skip
|
|
1308
|
+
* it) so consumers that recurse `children` terminate. */
|
|
1309
|
+
if (node.children.some((child) => visited.has(child))) node.children = node.children.filter((child) => !visited.has(child));
|
|
1310
|
+
for (const child of node.children) {
|
|
1311
|
+
child.depth = node.depth + 1;
|
|
1312
|
+
visited.add(child);
|
|
1313
|
+
stack.push(child);
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
};
|
|
1317
|
+
for (const root of rootMessages) assignDepths(root);
|
|
1318
|
+
for (const extendedMessage of orderedMessages) if (!visited.has(extendedMessage)) {
|
|
1319
|
+
rootMessages.push(extendedMessage);
|
|
1320
|
+
assignDepths(extendedMessage);
|
|
1321
|
+
}
|
|
1041
1322
|
return rootMessages;
|
|
1042
1323
|
}
|
|
1043
1324
|
//#endregion
|
|
@@ -4946,6 +5227,27 @@ function extractDomainFromUrl(url$2) {
|
|
|
4946
5227
|
throw new Error(`Invalid URL format: ${url$2}`);
|
|
4947
5228
|
}
|
|
4948
5229
|
}
|
|
5230
|
+
function getExplicitPort(value) {
|
|
5231
|
+
const normalizedValue = value.trim();
|
|
5232
|
+
const protocolSeparatorIndex = normalizedValue.indexOf("://");
|
|
5233
|
+
const hasProtocol = protocolSeparatorIndex !== -1;
|
|
5234
|
+
const authorityAndPath = hasProtocol ? normalizedValue.slice(protocolSeparatorIndex + 3) : normalizedValue;
|
|
5235
|
+
let port;
|
|
5236
|
+
try {
|
|
5237
|
+
const parsedUrl = new url.URL(hasProtocol ? normalizedValue : `https://${normalizedValue}`);
|
|
5238
|
+
port = parsedUrl.port;
|
|
5239
|
+
if (!port && (parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:")) port = new url.URL(`${parsedUrl.protocol === "http:" ? "https:" : "http:"}//${authorityAndPath}`).port;
|
|
5240
|
+
} catch {
|
|
5241
|
+
return null;
|
|
5242
|
+
}
|
|
5243
|
+
if (!port) return null;
|
|
5244
|
+
const parsedPort = Number(port);
|
|
5245
|
+
if (!Number.isInteger(parsedPort) || parsedPort < 1 || parsedPort > 65535) throw new Error(`Invalid port in domain: ${value}`);
|
|
5246
|
+
return String(parsedPort);
|
|
5247
|
+
}
|
|
5248
|
+
function getDefaultActionPort(protocol) {
|
|
5249
|
+
return protocol === "https:" ? "443" : "80";
|
|
5250
|
+
}
|
|
4949
5251
|
/**
|
|
4950
5252
|
* Validates client domain matches OpenAPI spec server URL domain (SSRF prevention).
|
|
4951
5253
|
* @param clientProvidedDomain - Domain from client (with/without protocol)
|
|
@@ -4966,6 +5268,7 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
|
|
|
4966
5268
|
/** Extract hostname from client domain if it's a full URL */
|
|
4967
5269
|
let clientHostname = clientProvidedDomain;
|
|
4968
5270
|
let clientHasProtocol = false;
|
|
5271
|
+
const clientExplicitPort = getExplicitPort(clientProvidedDomain);
|
|
4969
5272
|
if (clientProvidedDomain.includes("://")) {
|
|
4970
5273
|
if (!clientProvidedDomain.startsWith("http://") && !clientProvidedDomain.startsWith("https://")) return {
|
|
4971
5274
|
isValid: false,
|
|
@@ -4977,7 +5280,7 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
|
|
|
4977
5280
|
} catch {
|
|
4978
5281
|
clientHasProtocol = false;
|
|
4979
5282
|
}
|
|
4980
|
-
}
|
|
5283
|
+
} else if (clientExplicitPort !== null) clientHostname = new url.URL(`https://${clientProvidedDomain}`).hostname;
|
|
4981
5284
|
/** Normalize IPv6 addresses by removing brackets for comparison */
|
|
4982
5285
|
const normalizedClientHostname = clientHostname.replace(/^\[(.+)\]$/, "$1");
|
|
4983
5286
|
const normalizedSpecHostname = specHostname.replace(/^\[(.+)\]$/, "$1");
|
|
@@ -4990,14 +5293,23 @@ function validateActionDomain(clientProvidedDomain, specServerUrl) {
|
|
|
4990
5293
|
const hostname = isIP(normalizedClientHostname) === 6 && !clientHostname.startsWith("[") ? `[${normalizedClientHostname}]` : clientHostname;
|
|
4991
5294
|
normalizedClientDomain = `${specUrl.protocol}//${hostname}`;
|
|
4992
5295
|
} else normalizedClientDomain = `https://${clientHostname}`;
|
|
4993
|
-
if (normalizedSpecDomain === normalizedClientDomain || !clientHasProtocol && isIPAddress && normalizedClientHostname === normalizedSpecHostname) return {
|
|
4994
|
-
isValid:
|
|
5296
|
+
if (!(normalizedSpecDomain === normalizedClientDomain || !clientHasProtocol && isIPAddress && normalizedClientHostname === normalizedSpecHostname)) return {
|
|
5297
|
+
isValid: false,
|
|
5298
|
+
message: `Domain mismatch: Client provided '${clientProvidedDomain}', but spec uses '${specHostname}'`,
|
|
4995
5299
|
normalizedSpecDomain,
|
|
4996
5300
|
normalizedClientDomain
|
|
4997
5301
|
};
|
|
5302
|
+
if (clientExplicitPort !== null) {
|
|
5303
|
+
const specEffectivePort = specUrl.port || getDefaultActionPort(specUrl.protocol);
|
|
5304
|
+
if (clientExplicitPort !== specEffectivePort) return {
|
|
5305
|
+
isValid: false,
|
|
5306
|
+
message: `Port mismatch: Client provided '${clientProvidedDomain}', but spec uses effective port '${specEffectivePort}'`,
|
|
5307
|
+
normalizedSpecDomain,
|
|
5308
|
+
normalizedClientDomain
|
|
5309
|
+
};
|
|
5310
|
+
}
|
|
4998
5311
|
return {
|
|
4999
|
-
isValid:
|
|
5000
|
-
message: `Domain mismatch: Client provided '${clientProvidedDomain}', but spec uses '${specHostname}'`,
|
|
5312
|
+
isValid: true,
|
|
5001
5313
|
normalizedSpecDomain,
|
|
5002
5314
|
normalizedClientDomain
|
|
5003
5315
|
};
|
|
@@ -5072,7 +5384,7 @@ function getUserTimezone() {
|
|
|
5072
5384
|
}
|
|
5073
5385
|
}
|
|
5074
5386
|
function createPayload(submission) {
|
|
5075
|
-
const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills } = submission;
|
|
5387
|
+
const { isEdited, addedConvo, userMessage, isContinued, isTemporary, isRegenerate, conversation, editedContent, ephemeralAgent, endpointOption, manualSkills, clientRequestId, recoverySteerId, expectedPredecessorCreatedAt } = submission;
|
|
5076
5388
|
const { conversationId } = require_data_service.tConvoUpdateSchema.parse(conversation);
|
|
5077
5389
|
const { endpoint: _e, endpointType } = endpointOption;
|
|
5078
5390
|
const endpoint = _e;
|
|
@@ -5090,7 +5402,10 @@ function createPayload(submission) {
|
|
|
5090
5402
|
isContinued: !!(isEdited && isContinued),
|
|
5091
5403
|
ephemeralAgent: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : ephemeralAgent,
|
|
5092
5404
|
manualSkills: require_data_service.isAssistantsEndpoint(endpoint) ? void 0 : manualSkills,
|
|
5093
|
-
timezone: getUserTimezone()
|
|
5405
|
+
timezone: getUserTimezone(),
|
|
5406
|
+
clientRequestId,
|
|
5407
|
+
recoverySteerId,
|
|
5408
|
+
expectedPredecessorCreatedAt
|
|
5094
5409
|
};
|
|
5095
5410
|
return {
|
|
5096
5411
|
server,
|
|
@@ -5197,7 +5512,7 @@ const librechat = {
|
|
|
5197
5512
|
labelCode: true,
|
|
5198
5513
|
type: "number",
|
|
5199
5514
|
component: "input",
|
|
5200
|
-
placeholder: "
|
|
5515
|
+
placeholder: "com_endpoint_default",
|
|
5201
5516
|
placeholderCode: true,
|
|
5202
5517
|
description: "com_endpoint_context_info",
|
|
5203
5518
|
descriptionCode: true,
|
|
@@ -5234,7 +5549,7 @@ const librechat = {
|
|
|
5234
5549
|
labelCode: true,
|
|
5235
5550
|
description: "com_ui_file_token_limit_desc",
|
|
5236
5551
|
descriptionCode: true,
|
|
5237
|
-
placeholder: "
|
|
5552
|
+
placeholder: "com_endpoint_default",
|
|
5238
5553
|
placeholderCode: true,
|
|
5239
5554
|
type: "number",
|
|
5240
5555
|
component: "input",
|
|
@@ -5306,7 +5621,7 @@ const openAIParams = {
|
|
|
5306
5621
|
component: "input",
|
|
5307
5622
|
description: "com_endpoint_openai_max_tokens",
|
|
5308
5623
|
descriptionCode: true,
|
|
5309
|
-
placeholder: "
|
|
5624
|
+
placeholder: "com_endpoint_default",
|
|
5310
5625
|
placeholderCode: true,
|
|
5311
5626
|
optionType: "model",
|
|
5312
5627
|
columnSpan: 2
|
|
@@ -5327,7 +5642,8 @@ const openAIParams = {
|
|
|
5327
5642
|
"low",
|
|
5328
5643
|
"medium",
|
|
5329
5644
|
"high",
|
|
5330
|
-
"xhigh"
|
|
5645
|
+
"xhigh",
|
|
5646
|
+
"max"
|
|
5331
5647
|
],
|
|
5332
5648
|
enumMappings: {
|
|
5333
5649
|
[""]: "com_ui_auto",
|
|
@@ -5336,7 +5652,8 @@ const openAIParams = {
|
|
|
5336
5652
|
["low"]: "com_ui_low",
|
|
5337
5653
|
["medium"]: "com_ui_medium",
|
|
5338
5654
|
["high"]: "com_ui_high",
|
|
5339
|
-
["xhigh"]: "com_ui_xhigh"
|
|
5655
|
+
["xhigh"]: "com_ui_xhigh",
|
|
5656
|
+
["max"]: "com_ui_max"
|
|
5340
5657
|
},
|
|
5341
5658
|
optionType: "model",
|
|
5342
5659
|
columnSpan: 4
|
|
@@ -5391,6 +5708,52 @@ const openAIParams = {
|
|
|
5391
5708
|
optionType: "model",
|
|
5392
5709
|
columnSpan: 4
|
|
5393
5710
|
},
|
|
5711
|
+
reasoning_mode: {
|
|
5712
|
+
key: "reasoning_mode",
|
|
5713
|
+
label: "com_endpoint_reasoning_mode",
|
|
5714
|
+
labelCode: true,
|
|
5715
|
+
description: "com_endpoint_openai_reasoning_mode",
|
|
5716
|
+
descriptionCode: true,
|
|
5717
|
+
type: "enum",
|
|
5718
|
+
default: "",
|
|
5719
|
+
component: "slider",
|
|
5720
|
+
options: [
|
|
5721
|
+
"",
|
|
5722
|
+
"standard",
|
|
5723
|
+
"pro"
|
|
5724
|
+
],
|
|
5725
|
+
enumMappings: {
|
|
5726
|
+
[""]: "com_ui_unset",
|
|
5727
|
+
["standard"]: "com_ui_standard",
|
|
5728
|
+
["pro"]: "com_ui_pro"
|
|
5729
|
+
},
|
|
5730
|
+
optionType: "model",
|
|
5731
|
+
columnSpan: 4
|
|
5732
|
+
},
|
|
5733
|
+
reasoning_context: {
|
|
5734
|
+
key: "reasoning_context",
|
|
5735
|
+
label: "com_endpoint_reasoning_context",
|
|
5736
|
+
labelCode: true,
|
|
5737
|
+
description: "com_endpoint_openai_reasoning_context",
|
|
5738
|
+
descriptionCode: true,
|
|
5739
|
+
type: "enum",
|
|
5740
|
+
default: "",
|
|
5741
|
+
component: "slider",
|
|
5742
|
+
options: [
|
|
5743
|
+
"",
|
|
5744
|
+
"auto",
|
|
5745
|
+
"current_turn",
|
|
5746
|
+
"all_turns"
|
|
5747
|
+
],
|
|
5748
|
+
enumMappings: {
|
|
5749
|
+
[""]: "com_ui_unset",
|
|
5750
|
+
["auto"]: "com_ui_auto",
|
|
5751
|
+
["current_turn"]: "com_ui_current_turn",
|
|
5752
|
+
["all_turns"]: "com_ui_all_turns"
|
|
5753
|
+
},
|
|
5754
|
+
optionType: "model",
|
|
5755
|
+
columnSpan: 4
|
|
5756
|
+
},
|
|
5394
5757
|
verbosity: {
|
|
5395
5758
|
key: "verbosity",
|
|
5396
5759
|
label: "com_endpoint_verbosity",
|
|
@@ -5438,7 +5801,7 @@ const anthropic = {
|
|
|
5438
5801
|
component: "input",
|
|
5439
5802
|
description: "com_endpoint_anthropic_maxoutputtokens",
|
|
5440
5803
|
descriptionCode: true,
|
|
5441
|
-
placeholder: "
|
|
5804
|
+
placeholder: "com_endpoint_default",
|
|
5442
5805
|
placeholderCode: true,
|
|
5443
5806
|
range: {
|
|
5444
5807
|
min: require_data_service.anthropicSettings.maxOutputTokens.min,
|
|
@@ -5626,7 +5989,7 @@ const bedrock = {
|
|
|
5626
5989
|
component: "input",
|
|
5627
5990
|
description: "com_endpoint_anthropic_maxoutputtokens",
|
|
5628
5991
|
descriptionCode: true,
|
|
5629
|
-
placeholder: "
|
|
5992
|
+
placeholder: "com_endpoint_default",
|
|
5630
5993
|
placeholderCode: true,
|
|
5631
5994
|
optionType: "model",
|
|
5632
5995
|
columnSpan: 2
|
|
@@ -5799,7 +6162,7 @@ const google = {
|
|
|
5799
6162
|
component: "input",
|
|
5800
6163
|
description: "com_endpoint_google_maxoutputtokens",
|
|
5801
6164
|
descriptionCode: true,
|
|
5802
|
-
placeholder: "
|
|
6165
|
+
placeholder: "com_endpoint_default",
|
|
5803
6166
|
placeholderCode: true,
|
|
5804
6167
|
default: require_data_service.googleSettings.maxOutputTokens.default,
|
|
5805
6168
|
range: {
|
|
@@ -5945,6 +6308,8 @@ const openAI = [
|
|
|
5945
6308
|
openAIParams.reasoning_effort,
|
|
5946
6309
|
openAIParams.useResponsesApi,
|
|
5947
6310
|
openAIParams.reasoning_summary,
|
|
6311
|
+
openAIParams.reasoning_mode,
|
|
6312
|
+
openAIParams.reasoning_context,
|
|
5948
6313
|
openAIParams.verbosity,
|
|
5949
6314
|
openAIParams.disableStreaming,
|
|
5950
6315
|
librechat.fileTokenLimit
|
|
@@ -5971,6 +6336,8 @@ const openAICol2 = [
|
|
|
5971
6336
|
baseDefinitions.imageDetail,
|
|
5972
6337
|
openAIParams.reasoning_effort,
|
|
5973
6338
|
openAIParams.reasoning_summary,
|
|
6339
|
+
openAIParams.reasoning_mode,
|
|
6340
|
+
openAIParams.reasoning_context,
|
|
5974
6341
|
openAIParams.verbosity,
|
|
5975
6342
|
openAIParams.useResponsesApi,
|
|
5976
6343
|
openAIParams.web_search,
|
|
@@ -6307,11 +6674,14 @@ const CODE_ENV_KINDS = [
|
|
|
6307
6674
|
"user"
|
|
6308
6675
|
];
|
|
6309
6676
|
//#endregion
|
|
6677
|
+
exports.AUTH_USER_DOC_BY_ID_PREFIX = require_data_service.AUTH_USER_DOC_BY_ID_PREFIX;
|
|
6310
6678
|
exports.AccessRoleIds = require_data_service.AccessRoleIds;
|
|
6311
6679
|
exports.ActionRequest = ActionRequest;
|
|
6680
|
+
exports.ActivityLabelEvents = ActivityLabelEvents;
|
|
6312
6681
|
exports.AgentCapabilities = require_data_service.AgentCapabilities;
|
|
6313
6682
|
exports.AnnotationTypes = require_data_service.AnnotationTypes;
|
|
6314
6683
|
exports.AnthropicEffort = require_data_service.AnthropicEffort;
|
|
6684
|
+
exports.ApprovalEvents = ApprovalEvents;
|
|
6315
6685
|
exports.ArtifactModes = ArtifactModes;
|
|
6316
6686
|
exports.AssistantStreamEvents = require_data_service.AssistantStreamEvents;
|
|
6317
6687
|
exports.AuthKeys = require_data_service.AuthKeys;
|
|
@@ -6319,6 +6689,7 @@ exports.AuthType = require_data_service.AuthType;
|
|
|
6319
6689
|
exports.AuthTypeEnum = require_data_service.AuthTypeEnum;
|
|
6320
6690
|
exports.AuthorizationTypeEnum = require_data_service.AuthorizationTypeEnum;
|
|
6321
6691
|
exports.BASE_ONLY_CONFIG_SECTIONS = require_data_service.BASE_ONLY_CONFIG_SECTIONS;
|
|
6692
|
+
exports.BASE_PRINCIPAL_CONFIG_SECTIONS = require_data_service.BASE_PRINCIPAL_CONFIG_SECTIONS;
|
|
6322
6693
|
exports.BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA = BEDROCK_FINE_GRAINED_TOOL_STREAMING_BETA;
|
|
6323
6694
|
exports.BEDROCK_OUTPUT_128K_BETA = BEDROCK_OUTPUT_128K_BETA;
|
|
6324
6695
|
exports.BedrockProviders = require_data_service.BedrockProviders;
|
|
@@ -6364,6 +6735,7 @@ exports.MCPServerUserInputSchema = require_data_service.MCPServerUserInputSchema
|
|
|
6364
6735
|
exports.MCPServersSchema = require_data_service.MCPServersSchema;
|
|
6365
6736
|
exports.MCP_USER_INPUT_FIELDS = require_data_service.MCP_USER_INPUT_FIELDS;
|
|
6366
6737
|
exports.MYTHOS_CLASS_FAMILIES = require_data_service.MYTHOS_CLASS_FAMILIES;
|
|
6738
|
+
exports.MemoryScope = require_data_service.MemoryScope;
|
|
6367
6739
|
exports.MessageContentTypes = require_data_service.MessageContentTypes;
|
|
6368
6740
|
exports.MutationKeys = require_data_service.MutationKeys;
|
|
6369
6741
|
exports.OCRStrategy = require_data_service.OCRStrategy;
|
|
@@ -6379,7 +6751,9 @@ exports.Providers = require_data_service.Providers;
|
|
|
6379
6751
|
exports.QueryKeys = require_data_service.QueryKeys;
|
|
6380
6752
|
exports.REFILL_INTERVAL_UNITS = require_data_service.REFILL_INTERVAL_UNITS;
|
|
6381
6753
|
exports.RateLimitPrefix = require_data_service.RateLimitPrefix;
|
|
6754
|
+
exports.ReasoningContext = require_data_service.ReasoningContext;
|
|
6382
6755
|
exports.ReasoningEffort = require_data_service.ReasoningEffort;
|
|
6756
|
+
exports.ReasoningMode = require_data_service.ReasoningMode;
|
|
6383
6757
|
exports.ReasoningParameterFormat = require_data_service.ReasoningParameterFormat;
|
|
6384
6758
|
exports.ReasoningResponseKey = require_data_service.ReasoningResponseKey;
|
|
6385
6759
|
exports.ReasoningSummary = require_data_service.ReasoningSummary;
|
|
@@ -6408,6 +6782,7 @@ exports.SettingTypes = require_data_service.SettingTypes;
|
|
|
6408
6782
|
exports.SettingsTabValues = require_data_service.SettingsTabValues;
|
|
6409
6783
|
exports.SettingsViews = require_data_service.SettingsViews;
|
|
6410
6784
|
exports.StdioOptionsSchema = require_data_service.StdioOptionsSchema;
|
|
6785
|
+
exports.SteerEvents = SteerEvents;
|
|
6411
6786
|
exports.StepEvents = StepEvents;
|
|
6412
6787
|
exports.StepStatus = require_data_service.StepStatus;
|
|
6413
6788
|
exports.StepTypes = StepTypes;
|
|
@@ -6463,6 +6838,7 @@ exports.balanceSchema = require_data_service.balanceSchema;
|
|
|
6463
6838
|
exports.baseEndpointSchema = require_data_service.baseEndpointSchema;
|
|
6464
6839
|
exports.bedrockDocumentExtensions = require_data_service.bedrockDocumentExtensions;
|
|
6465
6840
|
exports.bedrockDocumentFormats = require_data_service.bedrockDocumentFormats;
|
|
6841
|
+
exports.bedrockDocumentMimeTypes = require_data_service.bedrockDocumentMimeTypes;
|
|
6466
6842
|
exports.bedrockEndpointSchema = require_data_service.bedrockEndpointSchema;
|
|
6467
6843
|
exports.bedrockGuardrailConfigSchema = require_data_service.bedrockGuardrailConfigSchema;
|
|
6468
6844
|
exports.bedrockInputParser = bedrockInputParser;
|
|
@@ -6472,14 +6848,20 @@ exports.bedrockOutputParser = bedrockOutputParser;
|
|
|
6472
6848
|
exports.bookmarkPermissionsSchema = bookmarkPermissionsSchema;
|
|
6473
6849
|
exports.breadcrumb = breadcrumb;
|
|
6474
6850
|
exports.buildLoginRedirectUrl = require_data_service.buildLoginRedirectUrl;
|
|
6851
|
+
exports.buildServerNameAliases = require_data_service.buildServerNameAliases;
|
|
6475
6852
|
exports.buildTree = buildTree;
|
|
6476
6853
|
exports.button = button;
|
|
6477
6854
|
exports.cacheSubsetProviders = require_data_service.cacheSubsetProviders;
|
|
6478
6855
|
exports.calendar = calendar;
|
|
6856
|
+
exports.capsEffortWhenThinkingDisabled = capsEffortWhenThinkingDisabled;
|
|
6479
6857
|
exports.card = card;
|
|
6480
6858
|
exports.carousel = carousel;
|
|
6481
6859
|
exports.checkOpenAIStorage = require_data_service.checkOpenAIStorage;
|
|
6482
6860
|
exports.checkbox = checkbox;
|
|
6861
|
+
exports.checkpointerSchema = require_data_service.checkpointerSchema;
|
|
6862
|
+
exports.checkpointerTypeSchema = require_data_service.checkpointerTypeSchema;
|
|
6863
|
+
exports.clampEffortForDisabledThinking = clampEffortForDisabledThinking;
|
|
6864
|
+
exports.clampOutputConfigEffort = clampOutputConfigEffort;
|
|
6483
6865
|
exports.cloudfrontConfigSchema = require_data_service.cloudfrontConfigSchema;
|
|
6484
6866
|
exports.codeInterpreterMimeTypes = require_data_service.codeInterpreterMimeTypes;
|
|
6485
6867
|
exports.codeInterpreterMimeTypesList = require_data_service.codeInterpreterMimeTypesList;
|
|
@@ -6521,7 +6903,9 @@ exports.dropdownMenu = dropdownMenu;
|
|
|
6521
6903
|
exports.eAnthropicEffortSchema = require_data_service.eAnthropicEffortSchema;
|
|
6522
6904
|
exports.eImageDetailSchema = require_data_service.eImageDetailSchema;
|
|
6523
6905
|
exports.eModelEndpointSchema = require_data_service.eModelEndpointSchema;
|
|
6906
|
+
exports.eReasoningContextSchema = require_data_service.eReasoningContextSchema;
|
|
6524
6907
|
exports.eReasoningEffortSchema = require_data_service.eReasoningEffortSchema;
|
|
6908
|
+
exports.eReasoningModeSchema = require_data_service.eReasoningModeSchema;
|
|
6525
6909
|
exports.eReasoningParameterFormatSchema = require_data_service.eReasoningParameterFormatSchema;
|
|
6526
6910
|
exports.eReasoningResponseKeySchema = require_data_service.eReasoningResponseKeySchema;
|
|
6527
6911
|
exports.eReasoningSummarySchema = require_data_service.eReasoningSummarySchema;
|
|
@@ -6559,6 +6943,7 @@ exports.generateDynamicSchema = require_data_service.generateDynamicSchema;
|
|
|
6559
6943
|
exports.generateGoogleSchema = require_data_service.generateGoogleSchema;
|
|
6560
6944
|
exports.generateOpenAISchema = require_data_service.generateOpenAISchema;
|
|
6561
6945
|
exports.getConfigDefaults = require_data_service.getConfigDefaults;
|
|
6946
|
+
exports.getConfiguredMimeAccept = require_data_service.getConfiguredMimeAccept;
|
|
6562
6947
|
exports.getDefaultParamsEndpoint = require_data_service.getDefaultParamsEndpoint;
|
|
6563
6948
|
exports.getEnabledEndpoints = getEnabledEndpoints;
|
|
6564
6949
|
exports.getEndpointField = require_data_service.getEndpointField;
|
|
@@ -6595,6 +6980,8 @@ exports.inputTokensIncludesCache = require_data_service.inputTokensIncludesCache
|
|
|
6595
6980
|
exports.interfaceSchema = require_data_service.interfaceSchema;
|
|
6596
6981
|
exports.isActionTool = require_data_service.isActionTool;
|
|
6597
6982
|
exports.isAgentsEndpoint = require_data_service.isAgentsEndpoint;
|
|
6983
|
+
exports.isAnthropicDocumentType = require_data_service.isAnthropicDocumentType;
|
|
6984
|
+
exports.isAnthropicTextDocumentType = require_data_service.isAnthropicTextDocumentType;
|
|
6598
6985
|
exports.isAssistantsEndpoint = require_data_service.isAssistantsEndpoint;
|
|
6599
6986
|
exports.isBedrockDocumentType = require_data_service.isBedrockDocumentType;
|
|
6600
6987
|
exports.isDocumentSupportedProvider = require_data_service.isDocumentSupportedProvider;
|
|
@@ -6607,8 +6994,10 @@ exports.isPermissiveMimeConfig = require_data_service.isPermissiveMimeConfig;
|
|
|
6607
6994
|
exports.isRemoteOidcUrlAllowed = require_data_service.isRemoteOidcUrlAllowed;
|
|
6608
6995
|
exports.isSensitiveEnvVar = require_data_service.isSensitiveEnvVar;
|
|
6609
6996
|
exports.isSystemRoleName = isSystemRoleName;
|
|
6997
|
+
exports.isThinkingDisabled = isThinkingDisabled;
|
|
6610
6998
|
exports.isUUID = require_data_service.isUUID;
|
|
6611
6999
|
exports.label = label;
|
|
7000
|
+
exports.langfuseConfigSchema = require_data_service.langfuseConfigSchema;
|
|
6612
7001
|
exports.librechat = librechat;
|
|
6613
7002
|
exports.loginPage = require_data_service.loginPage;
|
|
6614
7003
|
exports.mapGroupToAzureConfig = mapGroupToAzureConfig;
|
|
@@ -6630,6 +7019,8 @@ exports.modularEndpoints = require_data_service.modularEndpoints;
|
|
|
6630
7019
|
exports.multiConvoPermissionsSchema = multiConvoPermissionsSchema;
|
|
6631
7020
|
exports.navigationMenu = navigationMenu;
|
|
6632
7021
|
exports.normalizeEndpointName = require_data_service.normalizeEndpointName;
|
|
7022
|
+
exports.normalizeMCPToolKey = require_data_service.normalizeMCPToolKey;
|
|
7023
|
+
exports.normalizeServerName = require_data_service.normalizeServerName;
|
|
6633
7024
|
exports.ocrSchema = require_data_service.ocrSchema;
|
|
6634
7025
|
exports.omitsSamplingParameters = omitsSamplingParameters;
|
|
6635
7026
|
exports.omitsThinkingByDefault = omitsThinkingByDefault;
|
|
@@ -6666,10 +7057,12 @@ exports.remoteAgentsPermissionsSchema = remoteAgentsPermissionsSchema;
|
|
|
6666
7057
|
exports.removeNullishValues = require_data_service.removeNullishValues;
|
|
6667
7058
|
exports.replaceSpecialVars = replaceSpecialVars;
|
|
6668
7059
|
exports.request = require_data_service.request_default;
|
|
7060
|
+
exports.requiresExplicitThinkingDisabled = requiresExplicitThinkingDisabled;
|
|
6669
7061
|
exports.resolveEndpointType = require_data_service.resolveEndpointType;
|
|
6670
7062
|
exports.resolveRef = resolveRef;
|
|
6671
7063
|
exports.resolveThinkingDisplay = resolveThinkingDisplay;
|
|
6672
7064
|
exports.resourcePermissionsResponseSchema = require_data_service.resourcePermissionsResponseSchema;
|
|
7065
|
+
exports.retainRecentConfigSchema = require_data_service.retainRecentConfigSchema;
|
|
6673
7066
|
exports.retrievalMimeTypes = require_data_service.retrievalMimeTypes;
|
|
6674
7067
|
exports.retrievalMimeTypesList = require_data_service.retrievalMimeTypesList;
|
|
6675
7068
|
exports.roleDefaults = roleDefaults;
|
|
@@ -6678,6 +7071,8 @@ exports.runCodePermissionsSchema = runCodePermissionsSchema;
|
|
|
6678
7071
|
exports.select = select;
|
|
6679
7072
|
exports.separator = separator;
|
|
6680
7073
|
exports.setAcceptLanguageHeader = require_data_service.setAcceptLanguageHeader;
|
|
7074
|
+
exports.setFileConfigRegexCompiler = require_data_service.setFileConfigRegexCompiler;
|
|
7075
|
+
exports.setMessageFilterRegexValidator = require_data_service.setMessageFilterRegexValidator;
|
|
6681
7076
|
exports.setTokenHeader = require_data_service.setTokenHeader;
|
|
6682
7077
|
exports.sha1 = sha1;
|
|
6683
7078
|
exports.shadcnComponents = shadcnComponents;
|
|
@@ -6690,6 +7085,8 @@ exports.skillSyncGitHubSourceSchema = require_data_service.skillSyncGitHubSource
|
|
|
6690
7085
|
exports.slider = slider;
|
|
6691
7086
|
exports.specialVariables = require_data_service.specialVariables;
|
|
6692
7087
|
exports.specsConfigSchema = require_data_service.specsConfigSchema;
|
|
7088
|
+
exports.splitMCPToolKey = require_data_service.splitMCPToolKey;
|
|
7089
|
+
exports.splitToolCallName = require_data_service.splitToolCallName;
|
|
6693
7090
|
exports.stripAgentIdSuffix = stripAgentIdSuffix;
|
|
6694
7091
|
exports.summarizationConfigSchema = require_data_service.summarizationConfigSchema;
|
|
6695
7092
|
exports.summarizationTriggerSchema = require_data_service.summarizationTriggerSchema;
|
|
@@ -6722,6 +7119,9 @@ exports.toast = toast;
|
|
|
6722
7119
|
exports.toaster = toaster;
|
|
6723
7120
|
exports.toggle = toggle;
|
|
6724
7121
|
exports.toggleGroup = toggleGroup;
|
|
7122
|
+
exports.toolApprovalHookConfigSchema = require_data_service.toolApprovalHookConfigSchema;
|
|
7123
|
+
exports.toolApprovalModeSchema = require_data_service.toolApprovalModeSchema;
|
|
7124
|
+
exports.toolApprovalPolicySchema = require_data_service.toolApprovalPolicySchema;
|
|
6725
7125
|
exports.tooltip = tooltip;
|
|
6726
7126
|
exports.transactionsSchema = require_data_service.transactionsSchema;
|
|
6727
7127
|
exports.turnstileOptionsSchema = require_data_service.turnstileOptionsSchema;
|