agentx-sdk 0.3.1 → 0.3.3
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/core/compaction/autocompact.d.ts.map +1 -1
- package/dist/core/compaction/autocompact.js +13 -7
- package/dist/core/compaction/autocompact.js.map +1 -1
- package/dist/core/compaction/snip-compact.d.ts +3 -1
- package/dist/core/compaction/snip-compact.d.ts.map +1 -1
- package/dist/core/compaction/snip-compact.js +36 -34
- package/dist/core/compaction/snip-compact.js.map +1 -1
- package/dist/core/message-normalize.d.ts +3 -1
- package/dist/core/message-normalize.d.ts.map +1 -1
- package/dist/core/message-normalize.js +25 -19
- package/dist/core/message-normalize.js.map +1 -1
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +13 -5
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/llm/reasoning.d.ts +1 -6
- package/dist/llm/reasoning.d.ts.map +1 -1
- package/dist/llm/reasoning.js +9 -10
- package/dist/llm/reasoning.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocompact.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/autocompact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AASD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,SAAS,UAAU,EAAE,EAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"autocompact.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/autocompact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AASD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,SAAS,UAAU,EAAE,EAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmEnC"}
|
|
@@ -16,14 +16,20 @@ export async function autocompact(messages, client, options) {
|
|
|
16
16
|
const threshold = maxContextTokens * compactionThreshold;
|
|
17
17
|
if (currentTokens < threshold)
|
|
18
18
|
return null;
|
|
19
|
-
// Split
|
|
19
|
+
// Split into: system messages, a compactable region (early), and a protected
|
|
20
|
+
// tail. Pinned messages in the early region are preserved in their ORIGINAL
|
|
21
|
+
// position (not floated to the top) to keep assistant.tool_calls followed by
|
|
22
|
+
// their `tool` results — OpenAI rejects any other order.
|
|
20
23
|
const systemMessages = messages.filter(m => m.role === 'system');
|
|
21
24
|
const nonSystem = messages.filter(m => m.role !== 'system');
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const tailCount = Math.min(tailProtection, nonSystem.length);
|
|
26
|
+
const earlyNonSystem = nonSystem.slice(0, nonSystem.length - tailCount);
|
|
27
|
+
const tailMessages = nonSystem.slice(-tailCount);
|
|
28
|
+
// Within the early region, split into pinned (kept verbatim, in place) and
|
|
29
|
+
// compactable (summarized). The relative order of pinned messages to each
|
|
30
|
+
// other is preserved; they are emitted at the top of the early slot.
|
|
31
|
+
const earlyPinned = earlyNonSystem.filter(m => m._pinned === true);
|
|
32
|
+
const toCompact = earlyNonSystem.filter(m => m._pinned !== true);
|
|
27
33
|
if (toCompact.length === 0)
|
|
28
34
|
return null;
|
|
29
35
|
// Build conversation text for summarization
|
|
@@ -51,7 +57,7 @@ export async function autocompact(messages, client, options) {
|
|
|
51
57
|
};
|
|
52
58
|
const compactedMessages = [
|
|
53
59
|
...systemMessages,
|
|
54
|
-
...
|
|
60
|
+
...earlyPinned,
|
|
55
61
|
summaryMessage,
|
|
56
62
|
...tailMessages,
|
|
57
63
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocompact.js","sourceRoot":"","sources":["../../../src/core/compaction/autocompact.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAa9D,SAAS,sBAAsB,CAAC,QAA+B;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtF,OAAO,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAA+B,EAC/B,MAAiB,EACjB,OAA2B;IAE3B,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE1E,MAAM,aAAa,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAEzD,IAAI,aAAa,GAAG,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3C,
|
|
1
|
+
{"version":3,"file":"autocompact.js","sourceRoot":"","sources":["../../../src/core/compaction/autocompact.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,9 @@ export interface SnipCompactResult {
|
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Remove orphaned tool results from early messages.
|
|
19
|
-
* Preserves:
|
|
19
|
+
* Preserves: original message order (critical for OpenAI's invariant that a
|
|
20
|
+
* `tool` message must be preceded by an `assistant` message with matching
|
|
21
|
+
* `tool_calls`). Pinned messages and the tail window are immune to snipping.
|
|
20
22
|
*/
|
|
21
23
|
export declare function snipCompact(messages: readonly LLMMessage[], options: SnipCompactOptions): SnipCompactResult;
|
|
22
24
|
//# sourceMappingURL=snip-compact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snip-compact.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/snip-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"snip-compact.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/snip-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,SAAS,UAAU,EAAE,EAC/B,OAAO,EAAE,kBAAkB,GAC1B,iBAAiB,CAmDnB"}
|
|
@@ -8,54 +8,56 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* Remove orphaned tool results from early messages.
|
|
11
|
-
* Preserves:
|
|
11
|
+
* Preserves: original message order (critical for OpenAI's invariant that a
|
|
12
|
+
* `tool` message must be preceded by an `assistant` message with matching
|
|
13
|
+
* `tool_calls`). Pinned messages and the tail window are immune to snipping.
|
|
12
14
|
*/
|
|
13
15
|
export function snipCompact(messages, options) {
|
|
14
16
|
const { tailProtection } = options;
|
|
15
17
|
if (messages.length === 0)
|
|
16
18
|
return { messages: [], snippedCount: 0 };
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (early.length === 0) {
|
|
25
|
-
return { messages: [...messages], snippedCount: 0 };
|
|
19
|
+
// Determine tail boundary among non-system messages, walking from the end
|
|
20
|
+
// backwards. Anything with a smaller index than `tailStartIdx` is "early"
|
|
21
|
+
// (snipping-eligible). System messages are never in the tail count.
|
|
22
|
+
const nonSystemIndices = [];
|
|
23
|
+
for (let i = 0; i < messages.length; i++) {
|
|
24
|
+
if (messages[i].role !== 'system')
|
|
25
|
+
nonSystemIndices.push(i);
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
const tailStartIdx = nonSystemIndices.length <= tailProtection
|
|
28
|
+
? 0
|
|
29
|
+
: nonSystemIndices[nonSystemIndices.length - tailProtection];
|
|
30
|
+
// Collect tool_call ids that are referenced by any assistant in the conversation,
|
|
31
|
+
// plus tool_call_id references inside the tail window. Early tool results outside
|
|
32
|
+
// this set are orphans and get snipped.
|
|
28
33
|
const referencedIds = new Set();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (msg.tool_call_id)
|
|
32
|
-
referencedIds.add(msg.tool_call_id);
|
|
34
|
+
for (let i = 0; i < messages.length; i++) {
|
|
35
|
+
const msg = messages[i];
|
|
33
36
|
if (msg.tool_calls) {
|
|
34
|
-
for (const tc of msg.tool_calls)
|
|
37
|
+
for (const tc of msg.tool_calls)
|
|
35
38
|
referencedIds.add(tc.id);
|
|
36
|
-
}
|
|
37
39
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
for (const msg of early) {
|
|
41
|
-
if (msg.tool_calls) {
|
|
42
|
-
for (const tc of msg.tool_calls) {
|
|
43
|
-
referencedIds.add(tc.id);
|
|
44
|
-
}
|
|
40
|
+
if (i >= tailStartIdx && msg.tool_call_id) {
|
|
41
|
+
referencedIds.add(msg.tool_call_id);
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
|
-
//
|
|
44
|
+
// Walk in order; drop early orphaned tool results; keep everything else where it is.
|
|
48
45
|
let snippedCount = 0;
|
|
49
|
-
const
|
|
50
|
-
|
|
46
|
+
const result = [];
|
|
47
|
+
for (let i = 0; i < messages.length; i++) {
|
|
48
|
+
const msg = messages[i];
|
|
49
|
+
const isEarly = i < tailStartIdx && msg.role !== 'system';
|
|
50
|
+
const isPinned = msg._pinned === true;
|
|
51
|
+
if (isEarly &&
|
|
52
|
+
!isPinned &&
|
|
53
|
+
msg.role === 'tool' &&
|
|
54
|
+
msg.tool_call_id &&
|
|
55
|
+
!referencedIds.has(msg.tool_call_id)) {
|
|
51
56
|
snippedCount++;
|
|
52
|
-
|
|
57
|
+
continue;
|
|
53
58
|
}
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
messages: [...system, ...pinned, ...keptEarly, ...tail],
|
|
58
|
-
snippedCount,
|
|
59
|
-
};
|
|
59
|
+
result.push(msg);
|
|
60
|
+
}
|
|
61
|
+
return { messages: result, snippedCount };
|
|
60
62
|
}
|
|
61
63
|
//# sourceMappingURL=snip-compact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snip-compact.js","sourceRoot":"","sources":["../../../src/core/compaction/snip-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH
|
|
1
|
+
{"version":3,"file":"snip-compact.js","sourceRoot":"","sources":["../../../src/core/compaction/snip-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,QAA+B,EAC/B,OAA2B;IAE3B,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAEpE,0EAA0E;IAC1E,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,QAAQ;YAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,IAAI,cAAc;QAC5D,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAE,CAAC;IAEhE,kFAAkF;IAClF,kFAAkF;IAClF,wCAAwC;IACxC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACzB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACzB,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC1D,MAAM,QAAQ,GAAI,GAA0C,CAAC,OAAO,KAAK,IAAI,CAAC;QAC9E,IACE,OAAO;YACP,CAAC,QAAQ;YACT,GAAG,CAAC,IAAI,KAAK,MAAM;YACnB,GAAG,CAAC,YAAY;YAChB,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EACpC,CAAC;YACD,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import type { LLMMessage } from '../llm/message-types.js';
|
|
13
13
|
/**
|
|
14
14
|
* Normalize messages before sending to the LLM API.
|
|
15
|
-
* Removes orphaned tool results/calls and empty messages
|
|
15
|
+
* Removes orphaned tool results/calls and empty messages, and enforces the
|
|
16
|
+
* positional invariant that every `tool` message must be preceded (in order)
|
|
17
|
+
* by an `assistant` message that declared its tool_call_id via `tool_calls`.
|
|
16
18
|
*/
|
|
17
19
|
export declare function normalizeMessagesForAPI(messages: readonly LLMMessage[]): LLMMessage[];
|
|
18
20
|
//# sourceMappingURL=message-normalize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-normalize.d.ts","sourceRoot":"","sources":["../../src/core/message-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"message-normalize.d.ts","sourceRoot":"","sources":["../../src/core/message-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CA6DrF"}
|
|
@@ -11,52 +11,58 @@
|
|
|
11
11
|
*/
|
|
12
12
|
/**
|
|
13
13
|
* Normalize messages before sending to the LLM API.
|
|
14
|
-
* Removes orphaned tool results/calls and empty messages
|
|
14
|
+
* Removes orphaned tool results/calls and empty messages, and enforces the
|
|
15
|
+
* positional invariant that every `tool` message must be preceded (in order)
|
|
16
|
+
* by an `assistant` message that declared its tool_call_id via `tool_calls`.
|
|
15
17
|
*/
|
|
16
18
|
export function normalizeMessagesForAPI(messages) {
|
|
17
19
|
if (messages.length === 0)
|
|
18
20
|
return [];
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
+
// First pass: positional enforcement.
|
|
22
|
+
// Walk messages in order; a tool message is kept only if its tool_call_id has
|
|
23
|
+
// been declared in a prior assistant message's tool_calls. This catches upstream
|
|
24
|
+
// reordering bugs (e.g. a _pinned tool result floated to the top) that would
|
|
25
|
+
// otherwise violate OpenAI's invariant.
|
|
26
|
+
const seenToolCallIds = new Set();
|
|
27
|
+
const positionallyValid = [];
|
|
21
28
|
for (const msg of messages) {
|
|
22
29
|
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
23
|
-
for (const tc of msg.tool_calls)
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
for (const tc of msg.tool_calls)
|
|
31
|
+
seenToolCallIds.add(tc.id);
|
|
32
|
+
positionallyValid.push(msg);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (msg.role === 'tool' && msg.tool_call_id) {
|
|
36
|
+
if (!seenToolCallIds.has(msg.tool_call_id))
|
|
37
|
+
continue; // orphan-in-position
|
|
38
|
+
positionallyValid.push(msg);
|
|
39
|
+
continue;
|
|
26
40
|
}
|
|
41
|
+
positionallyValid.push(msg);
|
|
27
42
|
}
|
|
28
|
-
//
|
|
43
|
+
// Second pass: strip assistant tool_calls whose result is missing, and drop
|
|
44
|
+
// empty assistants without tool_calls.
|
|
29
45
|
const presentToolResultIds = new Set();
|
|
30
|
-
for (const msg of
|
|
46
|
+
for (const msg of positionallyValid) {
|
|
31
47
|
if (msg.role === 'tool' && msg.tool_call_id) {
|
|
32
48
|
presentToolResultIds.add(msg.tool_call_id);
|
|
33
49
|
}
|
|
34
50
|
}
|
|
35
51
|
const result = [];
|
|
36
|
-
for (const msg of
|
|
37
|
-
// Remove orphaned tool results (no matching tool_call in any assistant message)
|
|
38
|
-
if (msg.role === 'tool' && msg.tool_call_id) {
|
|
39
|
-
if (!declaredToolCallIds.has(msg.tool_call_id))
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
// Strip orphaned tool_calls from assistant (no matching tool result)
|
|
52
|
+
for (const msg of positionallyValid) {
|
|
43
53
|
if (msg.role === 'assistant' && msg.tool_calls) {
|
|
44
54
|
const validCalls = msg.tool_calls.filter(tc => presentToolResultIds.has(tc.id));
|
|
45
55
|
if (validCalls.length === 0) {
|
|
46
|
-
// No valid tool_calls — keep as text-only if has content
|
|
47
56
|
if (msg.content && typeof msg.content === 'string' && msg.content.trim()) {
|
|
48
57
|
result.push({ ...msg, tool_calls: undefined });
|
|
49
58
|
}
|
|
50
|
-
// Otherwise skip empty assistant with no valid tool_calls
|
|
51
59
|
continue;
|
|
52
60
|
}
|
|
53
61
|
if (validCalls.length < msg.tool_calls.length) {
|
|
54
|
-
// Partial: keep only valid tool_calls
|
|
55
62
|
result.push({ ...msg, tool_calls: validCalls });
|
|
56
63
|
continue;
|
|
57
64
|
}
|
|
58
65
|
}
|
|
59
|
-
// Remove empty assistant messages without tool_calls
|
|
60
66
|
if (msg.role === 'assistant' &&
|
|
61
67
|
!msg.tool_calls &&
|
|
62
68
|
(!msg.content || (typeof msg.content === 'string' && !msg.content.trim()))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-normalize.js","sourceRoot":"","sources":["../../src/core/message-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH
|
|
1
|
+
{"version":3,"file":"message-normalize.js","sourceRoot":"","sources":["../../src/core/message-normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,eAAe;IAM5B,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,eAAe;IAM5B,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,WAAW,CAAC;IAmCzE,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IA+D/C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAqBnD,QAAQ;YAoCP,cAAc;CA4G9B"}
|
package/dist/llm/llm-client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { retry } from '../utils/retry.js';
|
|
2
|
-
import { buildReasoningArgs, requiresNoSystemRole } from './reasoning.js';
|
|
2
|
+
import { buildReasoningArgs, isReasoningModel, requiresNoSystemRole } from './reasoning.js';
|
|
3
3
|
function isRetryableStatus(status) {
|
|
4
4
|
return status === 429 || status >= 500;
|
|
5
5
|
}
|
|
@@ -43,8 +43,12 @@ export class LLMClient {
|
|
|
43
43
|
body.response_format = params.responseFormat;
|
|
44
44
|
if (params.seed !== undefined)
|
|
45
45
|
body.seed = params.seed;
|
|
46
|
-
if (params.maxTokens !== undefined)
|
|
47
|
-
|
|
46
|
+
if (params.maxTokens !== undefined) {
|
|
47
|
+
if (isReasoningModel(model))
|
|
48
|
+
body.max_completion_tokens = params.maxTokens;
|
|
49
|
+
else
|
|
50
|
+
body.max_tokens = params.maxTokens;
|
|
51
|
+
}
|
|
48
52
|
const response = await retry(() => this.fetchAPI('/chat/completions', body, params.signal), { maxRetries: 3, initialDelay: 1000, isRetryable: (e) => e instanceof RetryableError });
|
|
49
53
|
yield* this.parseSSEStream(response, params.signal);
|
|
50
54
|
}
|
|
@@ -69,8 +73,12 @@ export class LLMClient {
|
|
|
69
73
|
body.response_format = params.responseFormat;
|
|
70
74
|
if (params.seed !== undefined)
|
|
71
75
|
body.seed = params.seed;
|
|
72
|
-
if (params.maxTokens !== undefined)
|
|
73
|
-
|
|
76
|
+
if (params.maxTokens !== undefined) {
|
|
77
|
+
if (isReasoningModel(model))
|
|
78
|
+
body.max_completion_tokens = params.maxTokens;
|
|
79
|
+
else
|
|
80
|
+
body.max_tokens = params.maxTokens;
|
|
81
|
+
}
|
|
74
82
|
const response = await retry(() => this.fetchAPI('/chat/completions', body, params.signal), { maxRetries: 3, initialDelay: 1000, isRetryable: (e) => e instanceof RetryableError });
|
|
75
83
|
let json;
|
|
76
84
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/reasoning.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { StreamChatParams } from './message-types.js';
|
|
2
|
-
|
|
3
|
-
* Adjusts chat parameters based on model family for reasoning support.
|
|
4
|
-
*/
|
|
2
|
+
export declare function isReasoningModel(model: string): boolean;
|
|
5
3
|
export declare function buildReasoningArgs(model: string): Partial<StreamChatParams>;
|
|
6
|
-
/**
|
|
7
|
-
* Checks if a model requires removing system messages (e.g. o1).
|
|
8
|
-
*/
|
|
9
4
|
export declare function requiresNoSystemRole(model: string): boolean;
|
|
10
5
|
//# sourceMappingURL=reasoning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../src/llm/reasoning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../src/llm/reasoning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAK3E;AAGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
package/dist/llm/reasoning.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// Matches reasoning families: o1, o3, o4, and gpt-5.x. Accepts optional
|
|
2
|
+
// "openai/" prefix so it works with both OpenRouter and direct OpenAI models.
|
|
3
|
+
const REASONING_MODEL_RE = /^(openai\/)?(o[134](-|$)|gpt-5(\.|-|$))/i;
|
|
4
|
+
export function isReasoningModel(model) {
|
|
5
|
+
return REASONING_MODEL_RE.test(model);
|
|
6
|
+
}
|
|
4
7
|
export function buildReasoningArgs(model) {
|
|
5
|
-
if (
|
|
6
|
-
// o1/o3 models: no temperature, no system role
|
|
8
|
+
if (isReasoningModel(model)) {
|
|
7
9
|
return { temperature: undefined };
|
|
8
10
|
}
|
|
9
|
-
// Default: no special adjustments
|
|
10
11
|
return {};
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
* Checks if a model requires removing system messages (e.g. o1).
|
|
14
|
-
*/
|
|
13
|
+
// Only the original o1 family rejects system role; o3+, o4, and gpt-5 accept it.
|
|
15
14
|
export function requiresNoSystemRole(model) {
|
|
16
|
-
return
|
|
15
|
+
return /^(openai\/)?o1(-|$)/i.test(model);
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=reasoning.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../src/llm/reasoning.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../src/llm/reasoning.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,8EAA8E;AAC9E,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AAEtE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED