@open-multi-agent/core 1.4.2 → 1.6.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/README.md +135 -79
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +5 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/runner.d.ts +12 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +48 -12
- package/dist/agent/runner.js.map +1 -1
- package/dist/cli/oma.d.ts +10 -2
- package/dist/cli/oma.d.ts.map +1 -1
- package/dist/cli/oma.js +12 -5
- package/dist/cli/oma.js.map +1 -1
- package/dist/dashboard/render-team-run-dashboard.d.ts.map +1 -1
- package/dist/dashboard/render-team-run-dashboard.js +177 -84
- package/dist/dashboard/render-team-run-dashboard.js.map +1 -1
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/adapter.d.ts +5 -1
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +16 -0
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/ai-sdk.d.ts +2 -1
- package/dist/llm/ai-sdk.d.ts.map +1 -1
- package/dist/llm/ai-sdk.js +48 -13
- package/dist/llm/ai-sdk.js.map +1 -1
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +27 -13
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/azure-openai.d.ts.map +1 -1
- package/dist/llm/azure-openai.js +5 -2
- package/dist/llm/azure-openai.js.map +1 -1
- package/dist/llm/bedrock.d.ts.map +1 -1
- package/dist/llm/bedrock.js +32 -19
- package/dist/llm/bedrock.js.map +1 -1
- package/dist/llm/copilot.d.ts.map +1 -1
- package/dist/llm/copilot.js +5 -2
- package/dist/llm/copilot.js.map +1 -1
- package/dist/llm/deepseek.d.ts +9 -2
- package/dist/llm/deepseek.d.ts.map +1 -1
- package/dist/llm/deepseek.js +21 -2
- package/dist/llm/deepseek.js.map +1 -1
- package/dist/llm/doubao.d.ts +21 -0
- package/dist/llm/doubao.d.ts.map +1 -0
- package/dist/llm/doubao.js +24 -0
- package/dist/llm/doubao.js.map +1 -0
- package/dist/llm/gemini.d.ts.map +1 -1
- package/dist/llm/gemini.js +35 -18
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/hunyuan.d.ts +40 -0
- package/dist/llm/hunyuan.d.ts.map +1 -0
- package/dist/llm/hunyuan.js +59 -0
- package/dist/llm/hunyuan.js.map +1 -0
- package/dist/llm/mimo.d.ts +24 -0
- package/dist/llm/mimo.d.ts.map +1 -0
- package/dist/llm/mimo.js +30 -0
- package/dist/llm/mimo.js.map +1 -0
- package/dist/llm/openai-common.d.ts +10 -17
- package/dist/llm/openai-common.d.ts.map +1 -1
- package/dist/llm/openai-common.js +92 -43
- package/dist/llm/openai-common.js.map +1 -1
- package/dist/llm/openai.d.ts +22 -1
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +51 -7
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/reasoning-fallback.d.ts +80 -15
- package/dist/llm/reasoning-fallback.d.ts.map +1 -1
- package/dist/llm/reasoning-fallback.js +45 -12
- package/dist/llm/reasoning-fallback.js.map +1 -1
- package/dist/llm/validate.d.ts +26 -0
- package/dist/llm/validate.d.ts.map +1 -0
- package/dist/llm/validate.js +55 -0
- package/dist/llm/validate.js.map +1 -0
- package/dist/memory/shared.d.ts +14 -7
- package/dist/memory/shared.d.ts.map +1 -1
- package/dist/memory/shared.js +97 -14
- package/dist/memory/shared.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +22 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +155 -32
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/tool/built-in/bash.d.ts +1 -1
- package/dist/tool/built-in/bash.d.ts.map +1 -1
- package/dist/tool/built-in/bash.js +60 -7
- package/dist/tool/built-in/bash.js.map +1 -1
- package/dist/tool/built-in/file-edit.d.ts.map +1 -1
- package/dist/tool/built-in/file-edit.js +13 -8
- package/dist/tool/built-in/file-edit.js.map +1 -1
- package/dist/tool/built-in/file-read.d.ts.map +1 -1
- package/dist/tool/built-in/file-read.js +9 -4
- package/dist/tool/built-in/file-read.js.map +1 -1
- package/dist/tool/built-in/file-write.d.ts.map +1 -1
- package/dist/tool/built-in/file-write.js +11 -6
- package/dist/tool/built-in/file-write.js.map +1 -1
- package/dist/tool/built-in/fs-walk.d.ts.map +1 -1
- package/dist/tool/built-in/fs-walk.js +6 -3
- package/dist/tool/built-in/fs-walk.js.map +1 -1
- package/dist/tool/built-in/glob.d.ts.map +1 -1
- package/dist/tool/built-in/glob.js +10 -4
- package/dist/tool/built-in/glob.js.map +1 -1
- package/dist/tool/built-in/grep.d.ts.map +1 -1
- package/dist/tool/built-in/grep.js +15 -6
- package/dist/tool/built-in/grep.js.map +1 -1
- package/dist/tool/built-in/path-safety.d.ts +30 -0
- package/dist/tool/built-in/path-safety.d.ts.map +1 -0
- package/dist/tool/built-in/path-safety.js +106 -0
- package/dist/tool/built-in/path-safety.js.map +1 -0
- package/dist/tool/mcp.d.ts.map +1 -1
- package/dist/tool/mcp.js +58 -33
- package/dist/tool/mcp.js.map +1 -1
- package/dist/types.d.ts +151 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/redaction.d.ts +4 -0
- package/dist/utils/redaction.d.ts.map +1 -0
- package/dist/utils/redaction.js +78 -0
- package/dist/utils/redaction.js.map +1 -0
- package/package.json +7 -4
- package/docs/DECISIONS.md +0 -49
- package/docs/cli.md +0 -265
- package/docs/context-management.md +0 -64
- package/docs/featured-partner.md +0 -28
- package/docs/observability.md +0 -56
- package/docs/providers/minimax.md +0 -75
- package/docs/providers.md +0 -80
- package/docs/shared-memory.md +0 -27
- package/docs/tool-configuration.md +0 -152
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* duplicated across adapters.
|
|
7
7
|
*/
|
|
8
8
|
import { extractToolCallsFromText } from '../tool/text-tool-extractor.js';
|
|
9
|
-
|
|
9
|
+
import { reasoningBlockToInlineText, resolveReasoningOutboundMaxChars } from './reasoning-fallback.js';
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
// Framework → OpenAI
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
@@ -51,36 +51,6 @@ export function getOpenAIReasoningText(source) {
|
|
|
51
51
|
return '';
|
|
52
52
|
return extractReasoningText(source['reasoning_content']);
|
|
53
53
|
}
|
|
54
|
-
function resolveReasoningReplayMaxChars(value) {
|
|
55
|
-
if (value === undefined)
|
|
56
|
-
return DEFAULT_REASONING_REPLAY_MAX_CHARS;
|
|
57
|
-
if (!Number.isFinite(value))
|
|
58
|
-
return 1;
|
|
59
|
-
const floored = Math.floor(value);
|
|
60
|
-
if (floored < 1)
|
|
61
|
-
return 1;
|
|
62
|
-
return floored;
|
|
63
|
-
}
|
|
64
|
-
function truncateReasoningForReplay(text, maxChars) {
|
|
65
|
-
if (text.length <= maxChars)
|
|
66
|
-
return text;
|
|
67
|
-
const marker = '...[truncated]...';
|
|
68
|
-
if (marker.length >= maxChars)
|
|
69
|
-
return text.slice(0, maxChars);
|
|
70
|
-
const budget = maxChars - marker.length;
|
|
71
|
-
const head = Math.ceil(budget * 0.7);
|
|
72
|
-
const tail = budget - head;
|
|
73
|
-
return `${text.slice(0, head)}${marker}${text.slice(text.length - tail)}`;
|
|
74
|
-
}
|
|
75
|
-
function reasoningBlockToThinkingText(block, maxChars) {
|
|
76
|
-
if (typeof block.redactedData === 'string' && block.redactedData.length > 0) {
|
|
77
|
-
return '<thinking>[redacted]</thinking>';
|
|
78
|
-
}
|
|
79
|
-
if (block.text.length === 0)
|
|
80
|
-
return '';
|
|
81
|
-
const bounded = truncateReasoningForReplay(block.text, maxChars);
|
|
82
|
-
return `<thinking>${bounded}</thinking>`;
|
|
83
|
-
}
|
|
84
54
|
/**
|
|
85
55
|
* Determine whether a framework message contains any `tool_result` content
|
|
86
56
|
* blocks, which must be serialised as separate OpenAI `tool`-role messages.
|
|
@@ -106,11 +76,21 @@ function hasToolResults(msg) {
|
|
|
106
76
|
* runner's loop-detection warning injection (see {@link AgentRunner}, which
|
|
107
77
|
* appends a text warning to a tool_result message when a loop is detected).
|
|
108
78
|
*/
|
|
109
|
-
export function toOpenAIMessages(messages,
|
|
79
|
+
export function toOpenAIMessages(messages, outboundOptions) {
|
|
110
80
|
const result = [];
|
|
81
|
+
// Per DeepSeek V4 thinking-mode spec, when a conversation involves any
|
|
82
|
+
// tool call, ALL intermediate assistant messages must echo
|
|
83
|
+
// `reasoning_content` — not just the one that emitted the tool_use.
|
|
84
|
+
// Omitting reasoning on the final synthesis turn (tool_calls=None) 400s
|
|
85
|
+
// on the next user message. We approximate "tool-calling conversation"
|
|
86
|
+
// as "any tool_use anywhere in history"; non-tool conversations skip
|
|
87
|
+
// the echo entirely (per spec, reasoning would be ignored but still
|
|
88
|
+
// bloat context). See:
|
|
89
|
+
// https://api-docs.deepseek.com/zh-cn/guides/thinking_mode
|
|
90
|
+
const conversationHasToolUse = messages.some((m) => m.content.some((b) => b.type === 'tool_use'));
|
|
111
91
|
for (const msg of messages) {
|
|
112
92
|
if (msg.role === 'assistant') {
|
|
113
|
-
const assistantMsg = toOpenAIAssistantMessage(msg,
|
|
93
|
+
const assistantMsg = toOpenAIAssistantMessage(msg, outboundOptions, conversationHasToolUse);
|
|
114
94
|
if (assistantMsg !== null) {
|
|
115
95
|
result.push(assistantMsg);
|
|
116
96
|
}
|
|
@@ -170,12 +150,19 @@ function toOpenAIUserMessage(msg) {
|
|
|
170
150
|
* Convert an `assistant`-role framework message into an OpenAI assistant message.
|
|
171
151
|
* `tool_use` blocks become `tool_calls`; `text` blocks become message content.
|
|
172
152
|
*/
|
|
173
|
-
function toOpenAIAssistantMessage(msg,
|
|
153
|
+
function toOpenAIAssistantMessage(msg, outboundOptions, conversationHasToolUse = false) {
|
|
174
154
|
const toolCalls = [];
|
|
175
155
|
const textParts = [];
|
|
176
156
|
const pendingThinkingParts = [];
|
|
177
|
-
const
|
|
178
|
-
const
|
|
157
|
+
const echoProvider = outboundOptions?.nativeReasoningEchoProvider;
|
|
158
|
+
const enableReasoningReplay = outboundOptions?.preserveReasoningAsText === true;
|
|
159
|
+
const resolvedMaxChars = resolveReasoningOutboundMaxChars(outboundOptions);
|
|
160
|
+
// Collected only when an `echoProvider` is configured. Emitted as a
|
|
161
|
+
// `reasoning_content` field on the assistant payload below, gated by
|
|
162
|
+
// `conversationHasToolUse` (DeepSeek V4 rule: applies to every assistant
|
|
163
|
+
// message in a tool-calling conversation, including the final synthesis
|
|
164
|
+
// message that has no tool_calls of its own).
|
|
165
|
+
const echoEligibleReasoning = [];
|
|
179
166
|
for (const block of msg.content) {
|
|
180
167
|
if (block.type === 'tool_use') {
|
|
181
168
|
toolCalls.push({
|
|
@@ -187,10 +174,33 @@ function toOpenAIAssistantMessage(msg, replayOptions) {
|
|
|
187
174
|
},
|
|
188
175
|
});
|
|
189
176
|
}
|
|
190
|
-
else if (block.type === 'reasoning'
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
177
|
+
else if (block.type === 'reasoning') {
|
|
178
|
+
// Path A: native echo (adapter wired with nativeReasoningEchoProvider
|
|
179
|
+
// and the block's provenance matches). The block is queued for
|
|
180
|
+
// attachment as `reasoning_content`; gating by tool_use happens after
|
|
181
|
+
// the loop so we don't emit it on non-tool turns.
|
|
182
|
+
if (echoProvider !== undefined && block.provenance === echoProvider) {
|
|
183
|
+
const isRedacted = typeof block.redactedData === 'string' && block.redactedData.length > 0;
|
|
184
|
+
if (!isRedacted && block.text.length > 0) {
|
|
185
|
+
echoEligibleReasoning.push(block.text);
|
|
186
|
+
}
|
|
187
|
+
// Either way, don't double-emit via the text-replay path below.
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
// Path B: `<thinking>` text fallback for foreign-provenance blocks
|
|
191
|
+
// (or any block when this adapter doesn't support native echo) when
|
|
192
|
+
// `preserveReasoningAsText` is on. OpenAI-family adapters are
|
|
193
|
+
// capability `'never'` by default, so every reasoning block hits this
|
|
194
|
+
// branch in plain OpenAI use; DeepSeek (`'tool-use-only'`) hits this
|
|
195
|
+
// only for foreign-provenance blocks since its own-provenance ones
|
|
196
|
+
// are claimed by Path A above.
|
|
197
|
+
if (enableReasoningReplay) {
|
|
198
|
+
const serialized = resolvedMaxChars === undefined
|
|
199
|
+
? reasoningBlockToInlineText(block)
|
|
200
|
+
: reasoningBlockToInlineText(block, { maxChars: resolvedMaxChars });
|
|
201
|
+
if (serialized.length > 0) {
|
|
202
|
+
pendingThinkingParts.push(serialized);
|
|
203
|
+
}
|
|
194
204
|
}
|
|
195
205
|
}
|
|
196
206
|
else if (block.type === 'text') {
|
|
@@ -216,11 +226,48 @@ function toOpenAIAssistantMessage(msg, replayOptions) {
|
|
|
216
226
|
if (toolCalls.length > 0) {
|
|
217
227
|
assistantMsg.tool_calls = toolCalls;
|
|
218
228
|
}
|
|
229
|
+
// DeepSeek V4 (thinking mode) returns 400 on follow-up requests if any
|
|
230
|
+
// intermediate assistant message in a tool-calling conversation drops
|
|
231
|
+
// `reasoning_content` — including the final synthesis message that has
|
|
232
|
+
// no tool_calls of its own. The gate is on the whole conversation, not
|
|
233
|
+
// this single message. Non-tool conversations skip the attachment (per
|
|
234
|
+
// spec, reasoning is ignored there but would still bloat context).
|
|
235
|
+
//
|
|
236
|
+
// The field is not declared on the upstream SDK type, so we attach it
|
|
237
|
+
// via an indexed cast; the SDK serialises arbitrary own properties.
|
|
238
|
+
if (conversationHasToolUse && echoEligibleReasoning.length > 0) {
|
|
239
|
+
const reasoningContent = echoEligibleReasoning.join('');
|
|
240
|
+
assistantMsg
|
|
241
|
+
.reasoning_content = reasoningContent;
|
|
242
|
+
}
|
|
219
243
|
return assistantMsg;
|
|
220
244
|
}
|
|
221
245
|
// ---------------------------------------------------------------------------
|
|
222
246
|
// OpenAI → Framework
|
|
223
247
|
// ---------------------------------------------------------------------------
|
|
248
|
+
/**
|
|
249
|
+
* Repair malformed single-string tool-call arguments after `JSON.parse` fails.
|
|
250
|
+
* Local models frequently break single-parameter tools with unescaped quotes or
|
|
251
|
+
* Python-style triple quotes (`"""`/`'''`). Returns the repaired argument object,
|
|
252
|
+
* or null when the input doesn't match the single-parameter `{"name": value}` shape.
|
|
253
|
+
*/
|
|
254
|
+
export function repairToolArgs(raw) {
|
|
255
|
+
const args = raw.trim();
|
|
256
|
+
const match = args.match(/\{\s*"([^"]+)"\s*:\s*([\s\S]*?)\s*\}$/);
|
|
257
|
+
if (match) {
|
|
258
|
+
const paramName = match[1];
|
|
259
|
+
let val = match[2].trim();
|
|
260
|
+
if (val.startsWith('"""') && val.endsWith('"""'))
|
|
261
|
+
val = val.slice(3, -3);
|
|
262
|
+
else if (val.startsWith("'''") && val.endsWith("'''"))
|
|
263
|
+
val = val.slice(3, -3);
|
|
264
|
+
else if (val.startsWith('"') && val.endsWith('"')) {
|
|
265
|
+
val = val.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
266
|
+
}
|
|
267
|
+
return { [paramName]: val };
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
224
271
|
/**
|
|
225
272
|
* Convert an OpenAI {@link ChatCompletion} into a framework {@link LLMResponse}.
|
|
226
273
|
*
|
|
@@ -267,7 +314,9 @@ export function fromOpenAICompletion(completion, knownToolNames, provenance) {
|
|
|
267
314
|
}
|
|
268
315
|
}
|
|
269
316
|
catch {
|
|
270
|
-
|
|
317
|
+
const repaired = repairToolArgs(toolCall.function.arguments);
|
|
318
|
+
if (repaired)
|
|
319
|
+
parsedInput = repaired;
|
|
271
320
|
}
|
|
272
321
|
const toolUseBlock = {
|
|
273
322
|
type: 'tool_use',
|
|
@@ -338,12 +387,12 @@ export function normalizeFinishReason(reason) {
|
|
|
338
387
|
* Prepend a system message when `systemPrompt` is provided, then append the
|
|
339
388
|
* converted conversation messages.
|
|
340
389
|
*/
|
|
341
|
-
export function buildOpenAIMessageList(messages, systemPrompt,
|
|
390
|
+
export function buildOpenAIMessageList(messages, systemPrompt, outboundOptions) {
|
|
342
391
|
const result = [];
|
|
343
392
|
if (systemPrompt !== undefined && systemPrompt.length > 0) {
|
|
344
393
|
result.push({ role: 'system', content: systemPrompt });
|
|
345
394
|
}
|
|
346
|
-
result.push(...toOpenAIMessages(messages,
|
|
395
|
+
result.push(...toOpenAIMessages(messages, outboundOptions));
|
|
347
396
|
return result;
|
|
348
397
|
}
|
|
349
398
|
//# sourceMappingURL=openai-common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-common.js","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openai-common.js","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/openai.d.ts
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
import type { ContentBlock, LLMAdapter, LLMChatOptions, LLMMessage, LLMResponse, LLMStreamOptions, LLMToolDef, StreamEvent } from '../types.js';
|
|
33
|
+
import type { ReasoningOutboundOptions } from './reasoning-fallback.js';
|
|
33
34
|
/**
|
|
34
35
|
* LLM adapter backed by the OpenAI Chat Completions API.
|
|
35
36
|
*
|
|
@@ -39,9 +40,29 @@ export declare class OpenAIAdapter implements LLMAdapter {
|
|
|
39
40
|
#private;
|
|
40
41
|
readonly name: string;
|
|
41
42
|
readonly capabilities: {
|
|
42
|
-
echoesReasoning:
|
|
43
|
+
readonly echoesReasoning: 'never' | 'own-issued' | 'tool-use-only';
|
|
43
44
|
};
|
|
44
45
|
constructor(apiKey?: string, baseURL?: string);
|
|
46
|
+
/**
|
|
47
|
+
* Build the per-call options forwarded to {@link buildOpenAIMessageList}.
|
|
48
|
+
*
|
|
49
|
+
* Composes two orthogonal mechanisms:
|
|
50
|
+
* 1. **`nativeReasoningEchoProvider`** — set when this adapter's
|
|
51
|
+
* capability is `'tool-use-only'` (DeepSeek). Triggers native
|
|
52
|
+
* `reasoning_content` echo on assistant messages whose reasoning
|
|
53
|
+
* blocks carry matching provenance AND the conversation contains
|
|
54
|
+
* `tool_use`. See PR #251 / DeepSeek V4 thinking-mode spec.
|
|
55
|
+
* 2. **`preserveReasoningAsText` / `compressReasoningText`** — opt-in
|
|
56
|
+
* `<thinking>` text fallback from the user's `AgentConfig`. Applies
|
|
57
|
+
* to foreign-provenance reasoning AND to all reasoning on `'never'`
|
|
58
|
+
* adapters. See #223 Phase 2.
|
|
59
|
+
*
|
|
60
|
+
* The two paths are mutually exclusive per block: native echo claims
|
|
61
|
+
* own-provenance blocks first; text fallback claims everything else.
|
|
62
|
+
* Subclasses inherit `chat()` / `stream()` and so automatically pick up
|
|
63
|
+
* both behaviours; no subclass override needed.
|
|
64
|
+
*/
|
|
65
|
+
protected buildMessageOptions(options: LLMChatOptions): ReasoningOutboundOptions | undefined;
|
|
45
66
|
/**
|
|
46
67
|
* Send a synchronous (non-streaming) chat request and return the complete
|
|
47
68
|
* {@link LLMResponse}.
|
package/dist/llm/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EAGZ,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EAGZ,MAAM,aAAa,CAAA;AAWpB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAOvE;;;;GAIG;AACH,qBAAa,aAAc,YAAW,UAAU;;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;IAchC,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,YAAY,GAAG,eAAe,CAAA;KAAE,CAE5F;gBAIW,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAO7C;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,wBAAwB,GAAG,SAAS;IAe5F;;;;;;OAMG;IACG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCjF;;;;;;;;;OASG;IACI,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,gBAAgB,GACxB,aAAa,CAAC,WAAW,CAAC;CA+K9B;AAGD,YAAY,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAA"}
|
package/dist/llm/openai.js
CHANGED
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
import OpenAI from 'openai';
|
|
33
|
-
import { toOpenAITool, fromOpenAICompletion, normalizeFinishReason, buildOpenAIMessageList, getOpenAIReasoningText, } from './openai-common.js';
|
|
33
|
+
import { toOpenAITool, fromOpenAICompletion, normalizeFinishReason, buildOpenAIMessageList, getOpenAIReasoningText, repairToolArgs, } from './openai-common.js';
|
|
34
|
+
import { assertValidMessages } from './validate.js';
|
|
34
35
|
import { extractToolCallsFromText } from '../tool/text-tool-extractor.js';
|
|
35
36
|
// ---------------------------------------------------------------------------
|
|
36
37
|
// Adapter implementation
|
|
@@ -42,10 +43,19 @@ import { extractToolCallsFromText } from '../tool/text-tool-extractor.js';
|
|
|
42
43
|
*/
|
|
43
44
|
export class OpenAIAdapter {
|
|
44
45
|
name = 'openai';
|
|
46
|
+
// The field type is intentionally widened to the full union (rather than
|
|
47
|
+
// narrowed to `'never'` via `as const`) so subclasses can override with a
|
|
48
|
+
// different value — DeepSeek currently uses `'tool-use-only'` for native
|
|
49
|
+
// `reasoning_content` echo on tool-use turns (per PR #251).
|
|
50
|
+
//
|
|
51
|
+
// OpenAI itself stays `'never'`: Chat Completions does not accept
|
|
52
|
+
// `reasoning_content` on input under any circumstance. When the user sets
|
|
53
|
+
// `AgentConfig.preserveReasoningAsText` (PR #260 / #223 Phase 2), the
|
|
54
|
+
// outbound conversion in `toOpenAIMessages` downgrades each reasoning
|
|
55
|
+
// block to inline `<thinking>` text via the shared helper in
|
|
56
|
+
// `reasoning-fallback.ts`. Without the opt-in, reasoning blocks are
|
|
57
|
+
// dropped silently on outbound.
|
|
45
58
|
capabilities = {
|
|
46
|
-
// OpenAI Chat Completions does not accept `reasoning_content` on input;
|
|
47
|
-
// any reasoning replay must go through the `<thinking>` text fallback
|
|
48
|
-
// already shipped in #234 (see openai-common.ts replay options).
|
|
49
59
|
echoesReasoning: 'never',
|
|
50
60
|
};
|
|
51
61
|
#client;
|
|
@@ -55,6 +65,36 @@ export class OpenAIAdapter {
|
|
|
55
65
|
baseURL,
|
|
56
66
|
});
|
|
57
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Build the per-call options forwarded to {@link buildOpenAIMessageList}.
|
|
70
|
+
*
|
|
71
|
+
* Composes two orthogonal mechanisms:
|
|
72
|
+
* 1. **`nativeReasoningEchoProvider`** — set when this adapter's
|
|
73
|
+
* capability is `'tool-use-only'` (DeepSeek). Triggers native
|
|
74
|
+
* `reasoning_content` echo on assistant messages whose reasoning
|
|
75
|
+
* blocks carry matching provenance AND the conversation contains
|
|
76
|
+
* `tool_use`. See PR #251 / DeepSeek V4 thinking-mode spec.
|
|
77
|
+
* 2. **`preserveReasoningAsText` / `compressReasoningText`** — opt-in
|
|
78
|
+
* `<thinking>` text fallback from the user's `AgentConfig`. Applies
|
|
79
|
+
* to foreign-provenance reasoning AND to all reasoning on `'never'`
|
|
80
|
+
* adapters. See #223 Phase 2.
|
|
81
|
+
*
|
|
82
|
+
* The two paths are mutually exclusive per block: native echo claims
|
|
83
|
+
* own-provenance blocks first; text fallback claims everything else.
|
|
84
|
+
* Subclasses inherit `chat()` / `stream()` and so automatically pick up
|
|
85
|
+
* both behaviours; no subclass override needed.
|
|
86
|
+
*/
|
|
87
|
+
buildMessageOptions(options) {
|
|
88
|
+
const wantsNativeEcho = this.capabilities.echoesReasoning === 'tool-use-only';
|
|
89
|
+
const wantsTextFallback = options.preserveReasoningAsText === true;
|
|
90
|
+
if (!wantsNativeEcho && !wantsTextFallback)
|
|
91
|
+
return undefined;
|
|
92
|
+
return {
|
|
93
|
+
preserveReasoningAsText: options.preserveReasoningAsText,
|
|
94
|
+
compressReasoningText: options.compressReasoningText,
|
|
95
|
+
nativeReasoningEchoProvider: wantsNativeEcho ? this.name : undefined,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
58
98
|
// -------------------------------------------------------------------------
|
|
59
99
|
// chat()
|
|
60
100
|
// -------------------------------------------------------------------------
|
|
@@ -66,7 +106,8 @@ export class OpenAIAdapter {
|
|
|
66
106
|
* handle these (e.g. rate limits, context length exceeded).
|
|
67
107
|
*/
|
|
68
108
|
async chat(messages, options) {
|
|
69
|
-
|
|
109
|
+
assertValidMessages(messages);
|
|
110
|
+
const openAIMessages = buildOpenAIMessageList(messages, options.systemPrompt, this.buildMessageOptions(options));
|
|
70
111
|
const completion = await this.#client.chat.completions.create({
|
|
71
112
|
// Sampling params first so extraBody can override them. Structural
|
|
72
113
|
// fields (model/messages/tools/stream) come after extraBody so users
|
|
@@ -108,7 +149,8 @@ export class OpenAIAdapter {
|
|
|
108
149
|
* - Exactly one terminal event: `done` or `error`
|
|
109
150
|
*/
|
|
110
151
|
async *stream(messages, options) {
|
|
111
|
-
|
|
152
|
+
assertValidMessages(messages);
|
|
153
|
+
const openAIMessages = buildOpenAIMessageList(messages, options.systemPrompt, this.buildMessageOptions(options));
|
|
112
154
|
// We request usage in the final chunk so we can include it in the `done` event.
|
|
113
155
|
const streamResponse = await this.#client.chat.completions.create({
|
|
114
156
|
// See chat() above for the rationale behind this field ordering.
|
|
@@ -204,7 +246,9 @@ export class OpenAIAdapter {
|
|
|
204
246
|
}
|
|
205
247
|
}
|
|
206
248
|
catch {
|
|
207
|
-
|
|
249
|
+
const repaired = repairToolArgs(buf.argsJson);
|
|
250
|
+
if (repaired)
|
|
251
|
+
parsedInput = repaired;
|
|
208
252
|
}
|
|
209
253
|
const toolUseBlock = {
|
|
210
254
|
type: 'tool_use',
|
package/dist/llm/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAoB3B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,34 +19,99 @@
|
|
|
19
19
|
* produced from native API extraction (and always stamped with
|
|
20
20
|
* `provenance`), never from text parsing.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* outbound path to call this helper when appropriate.
|
|
30
|
-
* - Fold the OpenAI-family private helper added in #234 into this one
|
|
31
|
-
* so there is a single source of truth.
|
|
22
|
+
* Wiring (post #223 Phase 2): every adapter outbound path consults
|
|
23
|
+
* {@link ReasoningOutboundOptions} resolved from
|
|
24
|
+
* {@link AgentConfig.preserveReasoningAsText} +
|
|
25
|
+
* {@link AgentConfig.compressReasoningText}. When opt-in is off, reasoning
|
|
26
|
+
* blocks that can't be native-echoed are dropped silently (preserving
|
|
27
|
+
* pre-Phase-2 behaviour). When opt-in is on, they pass through
|
|
28
|
+
* {@link reasoningBlockToInlineText} and become inline `<thinking>` text.
|
|
32
29
|
*/
|
|
33
30
|
import type { ReasoningBlock } from '../types.js';
|
|
34
31
|
/**
|
|
35
32
|
* Default maximum character budget per `<thinking>` block after truncation.
|
|
36
33
|
* Aligned with the value used by the OpenAI-family private replay helper
|
|
37
|
-
* shipped in #234
|
|
38
|
-
* behaviour-preserving.
|
|
34
|
+
* shipped in #234 so the Phase 2 consolidation is behaviour-preserving.
|
|
39
35
|
*/
|
|
40
36
|
export declare const DEFAULT_REASONING_FALLBACK_MAX_CHARS = 1200;
|
|
37
|
+
/**
|
|
38
|
+
* Sentinel value the resolver returns when the caller explicitly disables
|
|
39
|
+
* truncation (`compressReasoningText: false`). Exported so the special-case
|
|
40
|
+
* branch in {@link resolveMaxChars} stays searchable — removing the branch
|
|
41
|
+
* would silently re-introduce truncation for users who opted out.
|
|
42
|
+
*
|
|
43
|
+
* Equal to `Number.POSITIVE_INFINITY`; the resolver maps it to
|
|
44
|
+
* `Number.MAX_SAFE_INTEGER` so `text.length <= maxChars` is always true.
|
|
45
|
+
*/
|
|
46
|
+
export declare const NO_TRUNCATION: number;
|
|
41
47
|
export interface ReasoningFallbackOptions {
|
|
42
48
|
/**
|
|
43
49
|
* Hard upper bound on the inner text length (the `<thinking>` wrapper
|
|
44
|
-
* itself is not counted).
|
|
45
|
-
*
|
|
46
|
-
* {@link
|
|
50
|
+
* itself is not counted). Special values:
|
|
51
|
+
* - `undefined` → defaults to {@link DEFAULT_REASONING_FALLBACK_MAX_CHARS}.
|
|
52
|
+
* - {@link NO_TRUNCATION} (`Number.POSITIVE_INFINITY`) → no truncation;
|
|
53
|
+
* the entire reasoning text passes through unchanged. This is the
|
|
54
|
+
* sentinel returned by {@link resolveReasoningOutboundMaxChars} when
|
|
55
|
+
* the caller sets `compressReasoningText: false`.
|
|
56
|
+
* - Any other non-finite value (`NaN`, `-Infinity`) → clamped to 1
|
|
57
|
+
* (defensive — these values are invalid input).
|
|
58
|
+
* - Finite values below 1 → clamped to 1.
|
|
59
|
+
* - Finite values ≥ 1 → used as-is (floored).
|
|
47
60
|
*/
|
|
48
61
|
readonly maxChars?: number;
|
|
49
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Outbound-conversion options derived from {@link AgentConfig}'s reasoning
|
|
65
|
+
* fields. Threaded through every adapter's outbound IR-to-native conversion
|
|
66
|
+
* so each can opt the user into the cross-provider `<thinking>` text
|
|
67
|
+
* fallback (see #223). Internal to the LLM layer — adapters pick the values
|
|
68
|
+
* out of {@link LLMChatOptions} themselves.
|
|
69
|
+
*/
|
|
70
|
+
export interface ReasoningOutboundOptions {
|
|
71
|
+
/** Mirrors {@link LLMChatOptions.preserveReasoningAsText}. */
|
|
72
|
+
readonly preserveReasoningAsText?: boolean;
|
|
73
|
+
/** Mirrors {@link LLMChatOptions.compressReasoningText}. */
|
|
74
|
+
readonly compressReasoningText?: boolean | {
|
|
75
|
+
readonly minChars?: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Adapter name to use for native `reasoning_content` echo on outbound
|
|
79
|
+
* assistant messages inside a tool-calling conversation. Wired by adapters
|
|
80
|
+
* whose {@link LLMAdapter.capabilities.echoesReasoning} is `'tool-use-only'`
|
|
81
|
+
* (currently DeepSeek V4 thinking-mode — see PR #251 / DeepSeek API spec).
|
|
82
|
+
*
|
|
83
|
+
* When set, each assistant message is scanned for {@link ReasoningBlock}s
|
|
84
|
+
* whose {@link ReasoningBlock.provenance} matches this value. The collected
|
|
85
|
+
* reasoning is attached as a `reasoning_content` field on the outbound
|
|
86
|
+
* payload (a non-standard OpenAI-compat field) IF AND ONLY IF the overall
|
|
87
|
+
* conversation contains at least one `tool_use` block somewhere in its
|
|
88
|
+
* history. Non-tool conversations skip the attachment entirely.
|
|
89
|
+
*
|
|
90
|
+
* Foreign-provenance blocks fall through to the {@link preserveReasoningAsText}
|
|
91
|
+
* `<thinking>` text path when that flag is on, so the two mechanisms
|
|
92
|
+
* compose: native echo for own-provenance + tool-use; text fallback for
|
|
93
|
+
* everything else.
|
|
94
|
+
*
|
|
95
|
+
* Adapters that don't need this leave it unset (default `'never'` and
|
|
96
|
+
* `'own-issued'` capability paths).
|
|
97
|
+
*/
|
|
98
|
+
readonly nativeReasoningEchoProvider?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolve {@link ReasoningOutboundOptions} to the `maxChars` value accepted
|
|
102
|
+
* by {@link reasoningBlockToInlineText}. Encodes the
|
|
103
|
+
* default-on-when-preserve-on semantics documented in #223:
|
|
104
|
+
*
|
|
105
|
+
* - `preserve=false` → returns `undefined` (fallback never runs;
|
|
106
|
+
* callers must check `preserve` themselves)
|
|
107
|
+
* - `compress=undefined`/`true`→ returns `undefined` so the helper applies
|
|
108
|
+
* its own default head+tail budget
|
|
109
|
+
* - `compress=false` → returns {@link NO_TRUNCATION}; the helper
|
|
110
|
+
* treats this as a no-op cap (full text)
|
|
111
|
+
* - `compress={minChars: N}` → `N` (the threshold value also serves as
|
|
112
|
+
* the truncation cap)
|
|
113
|
+
*/
|
|
114
|
+
export declare function resolveReasoningOutboundMaxChars(options: ReasoningOutboundOptions | undefined): number | undefined;
|
|
50
115
|
/**
|
|
51
116
|
* Convert a {@link ReasoningBlock} into its `<thinking>...</thinking>` text
|
|
52
117
|
* representation for outbound replay through adapters that cannot natively
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-fallback.d.ts","sourceRoot":"","sources":["../../src/llm/reasoning-fallback.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reasoning-fallback.d.ts","sourceRoot":"","sources":["../../src/llm/reasoning-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,OAAO,CAAA;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,QAA2B,CAAA;AAQrD,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAA;CAC9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,wBAAwB,GAAG,SAAS,GAC5C,MAAM,GAAG,SAAS,CAQpB;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,MAAM,CAOR"}
|
|
@@ -19,31 +19,64 @@
|
|
|
19
19
|
* produced from native API extraction (and always stamped with
|
|
20
20
|
* `provenance`), never from text parsing.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* outbound path to call this helper when appropriate.
|
|
30
|
-
* - Fold the OpenAI-family private helper added in #234 into this one
|
|
31
|
-
* so there is a single source of truth.
|
|
22
|
+
* Wiring (post #223 Phase 2): every adapter outbound path consults
|
|
23
|
+
* {@link ReasoningOutboundOptions} resolved from
|
|
24
|
+
* {@link AgentConfig.preserveReasoningAsText} +
|
|
25
|
+
* {@link AgentConfig.compressReasoningText}. When opt-in is off, reasoning
|
|
26
|
+
* blocks that can't be native-echoed are dropped silently (preserving
|
|
27
|
+
* pre-Phase-2 behaviour). When opt-in is on, they pass through
|
|
28
|
+
* {@link reasoningBlockToInlineText} and become inline `<thinking>` text.
|
|
32
29
|
*/
|
|
33
30
|
/**
|
|
34
31
|
* Default maximum character budget per `<thinking>` block after truncation.
|
|
35
32
|
* Aligned with the value used by the OpenAI-family private replay helper
|
|
36
|
-
* shipped in #234
|
|
37
|
-
* behaviour-preserving.
|
|
33
|
+
* shipped in #234 so the Phase 2 consolidation is behaviour-preserving.
|
|
38
34
|
*/
|
|
39
35
|
export const DEFAULT_REASONING_FALLBACK_MAX_CHARS = 1200;
|
|
36
|
+
/**
|
|
37
|
+
* Sentinel value the resolver returns when the caller explicitly disables
|
|
38
|
+
* truncation (`compressReasoningText: false`). Exported so the special-case
|
|
39
|
+
* branch in {@link resolveMaxChars} stays searchable — removing the branch
|
|
40
|
+
* would silently re-introduce truncation for users who opted out.
|
|
41
|
+
*
|
|
42
|
+
* Equal to `Number.POSITIVE_INFINITY`; the resolver maps it to
|
|
43
|
+
* `Number.MAX_SAFE_INTEGER` so `text.length <= maxChars` is always true.
|
|
44
|
+
*/
|
|
45
|
+
export const NO_TRUNCATION = Number.POSITIVE_INFINITY;
|
|
40
46
|
/** Marker inserted between head and tail when reasoning text is truncated. */
|
|
41
47
|
const TRUNCATION_MARKER = '...[truncated]...';
|
|
42
48
|
/** Placeholder emitted in place of opaque encrypted (redacted) reasoning. */
|
|
43
49
|
const REDACTED_PLACEHOLDER = '<thinking>[redacted]</thinking>';
|
|
50
|
+
/**
|
|
51
|
+
* Resolve {@link ReasoningOutboundOptions} to the `maxChars` value accepted
|
|
52
|
+
* by {@link reasoningBlockToInlineText}. Encodes the
|
|
53
|
+
* default-on-when-preserve-on semantics documented in #223:
|
|
54
|
+
*
|
|
55
|
+
* - `preserve=false` → returns `undefined` (fallback never runs;
|
|
56
|
+
* callers must check `preserve` themselves)
|
|
57
|
+
* - `compress=undefined`/`true`→ returns `undefined` so the helper applies
|
|
58
|
+
* its own default head+tail budget
|
|
59
|
+
* - `compress=false` → returns {@link NO_TRUNCATION}; the helper
|
|
60
|
+
* treats this as a no-op cap (full text)
|
|
61
|
+
* - `compress={minChars: N}` → `N` (the threshold value also serves as
|
|
62
|
+
* the truncation cap)
|
|
63
|
+
*/
|
|
64
|
+
export function resolveReasoningOutboundMaxChars(options) {
|
|
65
|
+
if (options?.preserveReasoningAsText !== true)
|
|
66
|
+
return undefined;
|
|
67
|
+
const compress = options.compressReasoningText;
|
|
68
|
+
if (compress === false)
|
|
69
|
+
return NO_TRUNCATION;
|
|
70
|
+
if (compress === undefined || compress === true) {
|
|
71
|
+
return undefined; // helper applies its own default when maxChars omitted
|
|
72
|
+
}
|
|
73
|
+
return compress.minChars; // undefined → helper default, number → that cap
|
|
74
|
+
}
|
|
44
75
|
function resolveMaxChars(value) {
|
|
45
76
|
if (value === undefined)
|
|
46
77
|
return DEFAULT_REASONING_FALLBACK_MAX_CHARS;
|
|
78
|
+
if (value === NO_TRUNCATION)
|
|
79
|
+
return Number.MAX_SAFE_INTEGER;
|
|
47
80
|
if (!Number.isFinite(value))
|
|
48
81
|
return 1;
|
|
49
82
|
const floored = Math.floor(value);
|