agentfootprint 2.12.1 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/llm/AnthropicProvider.js +69 -2
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +110 -2
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/core/Agent.js +50 -1
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +112 -1
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +20 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/stages/callLLM.js +51 -1
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/prepareFinal.js +12 -1
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/reliabilityExecution.js +194 -9
- package/dist/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/core/agent/stages/seed.js +4 -0
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +7 -0
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/slots/buildThinkingSubflow.js +112 -0
- package/dist/core/slots/buildThinkingSubflow.js.map +1 -0
- package/dist/esm/adapters/llm/AnthropicProvider.js +69 -2
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +110 -2
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/core/Agent.js +50 -1
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.js +112 -1
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +20 -1
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/stages/callLLM.js +52 -2
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.js +12 -1
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.js +191 -8
- package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.js +4 -0
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +7 -0
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/slots/buildThinkingSubflow.js +108 -0
- package/dist/esm/core/slots/buildThinkingSubflow.js.map +1 -0
- package/dist/esm/events/registry.js +8 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/reliability/index.js +6 -0
- package/dist/esm/reliability/index.js.map +1 -1
- package/dist/esm/reliability/types.js.map +1 -1
- package/dist/esm/security/index.js +1 -0
- package/dist/esm/security/index.js.map +1 -1
- package/dist/esm/security/thinkingRedaction.js +66 -0
- package/dist/esm/security/thinkingRedaction.js.map +1 -0
- package/dist/esm/thinking/AnthropicThinkingHandler.js +111 -0
- package/dist/esm/thinking/AnthropicThinkingHandler.js.map +1 -0
- package/dist/esm/thinking/MockThinkingHandler.js +94 -0
- package/dist/esm/thinking/MockThinkingHandler.js.map +1 -0
- package/dist/esm/thinking/OpenAIThinkingHandler.js +72 -0
- package/dist/esm/thinking/OpenAIThinkingHandler.js.map +1 -0
- package/dist/esm/thinking/index.js +51 -0
- package/dist/esm/thinking/index.js.map +1 -0
- package/dist/esm/thinking/registry.js +46 -0
- package/dist/esm/thinking/registry.js.map +1 -0
- package/dist/esm/thinking/types.js +30 -0
- package/dist/esm/thinking/types.js.map +1 -0
- package/dist/events/registry.js +8 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/reliability/index.js +10 -1
- package/dist/reliability/index.js.map +1 -1
- package/dist/reliability/types.js.map +1 -1
- package/dist/security/index.js +4 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/thinkingRedaction.js +70 -0
- package/dist/security/thinkingRedaction.js.map +1 -0
- package/dist/thinking/AnthropicThinkingHandler.js +114 -0
- package/dist/thinking/AnthropicThinkingHandler.js.map +1 -0
- package/dist/thinking/MockThinkingHandler.js +99 -0
- package/dist/thinking/MockThinkingHandler.js.map +1 -0
- package/dist/thinking/OpenAIThinkingHandler.js +75 -0
- package/dist/thinking/OpenAIThinkingHandler.js.map +1 -0
- package/dist/thinking/index.js +61 -0
- package/dist/thinking/index.js.map +1 -0
- package/dist/thinking/registry.js +50 -0
- package/dist/thinking/registry.js.map +1 -0
- package/dist/thinking/types.js +31 -0
- package/dist/thinking/types.js.map +1 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts +11 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/types.d.ts +121 -0
- package/dist/types/adapters/types.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +16 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +99 -0
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +8 -0
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/stages/callLLM.d.ts +13 -0
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts +72 -2
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +12 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/slots/buildThinkingSubflow.d.ts +41 -0
- package/dist/types/core/slots/buildThinkingSubflow.d.ts.map +1 -0
- package/dist/types/events/payloads.d.ts +149 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +9 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/reliability/index.d.ts +2 -0
- package/dist/types/reliability/index.d.ts.map +1 -1
- package/dist/types/reliability/types.d.ts +72 -0
- package/dist/types/reliability/types.d.ts.map +1 -1
- package/dist/types/security/index.d.ts +1 -0
- package/dist/types/security/index.d.ts.map +1 -1
- package/dist/types/security/thinkingRedaction.d.ts +51 -0
- package/dist/types/security/thinkingRedaction.d.ts.map +1 -0
- package/dist/types/thinking/AnthropicThinkingHandler.d.ts +43 -0
- package/dist/types/thinking/AnthropicThinkingHandler.d.ts.map +1 -0
- package/dist/types/thinking/MockThinkingHandler.d.ts +51 -0
- package/dist/types/thinking/MockThinkingHandler.d.ts.map +1 -0
- package/dist/types/thinking/OpenAIThinkingHandler.d.ts +38 -0
- package/dist/types/thinking/OpenAIThinkingHandler.d.ts.map +1 -0
- package/dist/types/thinking/index.d.ts +52 -0
- package/dist/types/thinking/index.d.ts.map +1 -0
- package/dist/types/thinking/registry.d.ts +34 -0
- package/dist/types/thinking/registry.d.ts.map +1 -0
- package/dist/types/thinking/types.d.ts +163 -0
- package/dist/types/thinking/types.d.ts.map +1 -0
- package/package.json +6 -1
|
@@ -86,6 +86,27 @@ class AgentBuilder {
|
|
|
86
86
|
* rules. See `ReliabilityConfig` for the rule shape.
|
|
87
87
|
*/
|
|
88
88
|
reliabilityConfig;
|
|
89
|
+
/**
|
|
90
|
+
* Optional ThinkingHandler (v2.14+). Three states:
|
|
91
|
+
* - undefined (default): auto-wire by `provider.name` via
|
|
92
|
+
* `findThinkingHandler` from the registry
|
|
93
|
+
* - explicit handler: override the auto-wire
|
|
94
|
+
* - explicit `null`: opt out (no thinking handler mounted at all,
|
|
95
|
+
* even if the provider would auto-match)
|
|
96
|
+
*
|
|
97
|
+
* The framework wraps the configured handler in a real footprintjs
|
|
98
|
+
* sub-subflow at chart build time (see `buildThinkingSubflow`).
|
|
99
|
+
* Mounted as a stage AFTER CallLLM inside `sf-call-llm`. Build-time
|
|
100
|
+
* conditional — no stage when no handler resolves.
|
|
101
|
+
*/
|
|
102
|
+
thinkingHandlerValue;
|
|
103
|
+
/**
|
|
104
|
+
* v2.14+ — request-side thinking activation. When set, every LLM
|
|
105
|
+
* call carries `LLMRequest.thinking = { budget }`, asking the
|
|
106
|
+
* provider (Anthropic) to emit reasoning blocks. Independent from
|
|
107
|
+
* `.thinkingHandler()` (response-side normalization choice).
|
|
108
|
+
*/
|
|
109
|
+
thinkingBudgetValue;
|
|
89
110
|
constructor(opts) {
|
|
90
111
|
this.opts = opts;
|
|
91
112
|
// Cache layer: opts.caching === 'off' propagates to scope's
|
|
@@ -529,6 +550,96 @@ class AgentBuilder {
|
|
|
529
550
|
this.reliabilityConfig = config;
|
|
530
551
|
return this;
|
|
531
552
|
}
|
|
553
|
+
/**
|
|
554
|
+
* Wire a thinking handler (v2.14+). Three usage patterns:
|
|
555
|
+
*
|
|
556
|
+
* • OMITTED (default) — framework auto-wires by `provider.name` via
|
|
557
|
+
* `findThinkingHandler` from the registry. Most consumers using
|
|
558
|
+
* a shipped provider get thinking support for free.
|
|
559
|
+
*
|
|
560
|
+
* • EXPLICIT handler — override the auto-wire. For custom providers
|
|
561
|
+
* or for swapping in a custom Anthropic/OpenAI handler with
|
|
562
|
+
* different normalization (e.g. redacting blocks before they
|
|
563
|
+
* land).
|
|
564
|
+
*
|
|
565
|
+
* • EXPLICIT `null` — opt out entirely. The thinking subflow is NOT
|
|
566
|
+
* mounted even if the provider would auto-match. Use when you
|
|
567
|
+
* want to skip thinking parsing for this agent (cost / latency /
|
|
568
|
+
* UX reasons).
|
|
569
|
+
*
|
|
570
|
+
* Calling twice throws — same shape as `.reliability()` /
|
|
571
|
+
* `.outputSchema()` to enforce single-source intent.
|
|
572
|
+
*
|
|
573
|
+
* @example
|
|
574
|
+
* // Default — auto-wire AnthropicThinkingHandler for anthropic provider
|
|
575
|
+
* Agent.create({ provider: anthropic({...}), model: '...' }).build();
|
|
576
|
+
*
|
|
577
|
+
* @example
|
|
578
|
+
* // Custom handler that redacts thinking content
|
|
579
|
+
* Agent.create({...}).thinkingHandler(myRedactingHandler).build();
|
|
580
|
+
*
|
|
581
|
+
* @example
|
|
582
|
+
* // Opt out of thinking parsing entirely
|
|
583
|
+
* Agent.create({ provider: anthropic({...}), model: '...' })
|
|
584
|
+
* .thinkingHandler(null)
|
|
585
|
+
* .build();
|
|
586
|
+
*/
|
|
587
|
+
thinkingHandler(handler) {
|
|
588
|
+
if (this.thinkingHandlerValue !== undefined) {
|
|
589
|
+
throw new Error('AgentBuilder.thinkingHandler: already set. Each agent has at most one thinking-handler choice.');
|
|
590
|
+
}
|
|
591
|
+
this.thinkingHandlerValue = handler;
|
|
592
|
+
return this;
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* v2.14+ — REQUEST-side thinking activation. Tells the provider to
|
|
596
|
+
* emit reasoning blocks alongside its response.
|
|
597
|
+
*
|
|
598
|
+
* **What this does:** every LLM call carries
|
|
599
|
+
* `LLMRequest.thinking = { budget }`. The AnthropicProvider
|
|
600
|
+
* translates to `thinking: { type: 'enabled', budget_tokens: N }`
|
|
601
|
+
* on the wire. The model spends up to `budget` reasoning tokens
|
|
602
|
+
* before producing the visible response.
|
|
603
|
+
*
|
|
604
|
+
* **Distinct from `.thinkingHandler()`:**
|
|
605
|
+
* - `.thinking({ budget })` = ASK the model to think (request side)
|
|
606
|
+
* - `.thinkingHandler(h)` = NORMALIZE the response (response side)
|
|
607
|
+
*
|
|
608
|
+
* Most consumers want both; auto-wired handler covers the response
|
|
609
|
+
* side automatically when `.thinking()` is set on a thinking-capable
|
|
610
|
+
* provider. Setting `.thinking()` without `.thinkingHandler(null)`
|
|
611
|
+
* is the typical happy path.
|
|
612
|
+
*
|
|
613
|
+
* **Provider compatibility:**
|
|
614
|
+
* - Anthropic: requires claude-sonnet-4-5 / opus-4-5 (or newer).
|
|
615
|
+
* Older models reject with HTTP 400.
|
|
616
|
+
* - OpenAI: ignores. o1/o3 reasoning is selected at the model id
|
|
617
|
+
* level; this field is a no-op for OpenAIProvider.
|
|
618
|
+
*
|
|
619
|
+
* **Budget guidance:** Anthropic recommends 1024-32000 reasoning
|
|
620
|
+
* tokens. `budget` MUST be less than the request's `max_tokens`
|
|
621
|
+
* (defaults to 4096 in AnthropicProvider — bump via the request
|
|
622
|
+
* `maxTokens` if budget > ~3000).
|
|
623
|
+
*
|
|
624
|
+
* Calling twice throws — same shape as `.reliability()` /
|
|
625
|
+
* `.outputSchema()`.
|
|
626
|
+
*
|
|
627
|
+
* @example
|
|
628
|
+
* Agent.create({ provider: anthropic({...}), model: 'claude-sonnet-4-5' })
|
|
629
|
+
* .system('You are a careful reasoning agent.')
|
|
630
|
+
* .thinking({ budget: 5000 }) // ask Anthropic to think
|
|
631
|
+
* .build();
|
|
632
|
+
*/
|
|
633
|
+
thinking(opts) {
|
|
634
|
+
if (this.thinkingBudgetValue !== undefined) {
|
|
635
|
+
throw new Error('AgentBuilder.thinking: already set. Each agent has at most one thinking-budget choice.');
|
|
636
|
+
}
|
|
637
|
+
if (!Number.isFinite(opts.budget) || opts.budget <= 0) {
|
|
638
|
+
throw new Error(`AgentBuilder.thinking: budget must be a positive finite number, got ${String(opts.budget)}.`);
|
|
639
|
+
}
|
|
640
|
+
this.thinkingBudgetValue = opts.budget;
|
|
641
|
+
return this;
|
|
642
|
+
}
|
|
532
643
|
build() {
|
|
533
644
|
// Resolve the voice config: bundled defaults + consumer overrides.
|
|
534
645
|
// Templates flow through the same barrel exports the rest of the
|
|
@@ -541,7 +652,7 @@ class AgentBuilder {
|
|
|
541
652
|
const opts = this.maxIterationsOverride !== undefined
|
|
542
653
|
? { ...this.opts, maxIterations: this.maxIterationsOverride }
|
|
543
654
|
: this.opts;
|
|
544
|
-
const agent = new Agent_js_1.Agent(opts, this.systemPromptValue, this.registry, voice, this.injectionList, this.memoryList, this.outputSchemaParser, this.toolProviderRef, this.systemPromptCachePolicy, this.cachingDisabledValue, this.cacheStrategyOverride, this.outputFallbackCfg, this.reliabilityConfig);
|
|
655
|
+
const agent = new Agent_js_1.Agent(opts, this.systemPromptValue, this.registry, voice, this.injectionList, this.memoryList, this.outputSchemaParser, this.toolProviderRef, this.systemPromptCachePolicy, this.cachingDisabledValue, this.cacheStrategyOverride, this.outputFallbackCfg, this.reliabilityConfig, this.thinkingHandlerValue, this.thinkingBudgetValue);
|
|
545
656
|
// Attach builder-collected recorders so they receive events from
|
|
546
657
|
// the very first run. Mirrors what consumers would do post-build
|
|
547
658
|
// via `agent.attach(rec)`; the builder method is purely sugar.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../../src/core/agent/AgentBuilder.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,wDAI4B;AAC5B,4DAK8B;AAG9B,oGAA8F;
|
|
1
|
+
{"version":3,"file":"AgentBuilder.js","sourceRoot":"","sources":["../../../src/core/agent/AgentBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -192,7 +192,26 @@ function buildAgentChart(deps) {
|
|
|
192
192
|
}, 'Skip caching this iteration')
|
|
193
193
|
.end()
|
|
194
194
|
.addFunction('IterationStart', deps.iterationStart, 'iteration-start', 'Iteration begin marker')
|
|
195
|
-
.addFunction('CallLLM', deps.callLLM, conventions_js_1.STAGE_IDS.CALL_LLM, 'LLM invocation')
|
|
195
|
+
.addFunction('CallLLM', deps.callLLM, conventions_js_1.STAGE_IDS.CALL_LLM, 'LLM invocation');
|
|
196
|
+
// v2.14 — conditional NormalizeThinking sub-subflow. Mounted ONLY
|
|
197
|
+
// when a ThinkingHandler resolved (auto-wired by provider.name OR
|
|
198
|
+
// explicitly set via .thinkingHandler()). When undefined, the stage
|
|
199
|
+
// is NOT added — zero overhead for non-thinking agents
|
|
200
|
+
// (build-time conditional mount; matches the panel's design rule).
|
|
201
|
+
if (deps.thinkingSubflow) {
|
|
202
|
+
builder = builder.addSubFlowChartNext('sf-thinking', deps.thinkingSubflow, 'NormalizeThinking', {
|
|
203
|
+
inputMapper: (parent) => ({
|
|
204
|
+
rawThinking: parent.rawThinking,
|
|
205
|
+
iteration: parent.iteration,
|
|
206
|
+
}),
|
|
207
|
+
outputMapper: (sf) => ({
|
|
208
|
+
thinkingBlocks: sf.thinkingBlocks,
|
|
209
|
+
}),
|
|
210
|
+
// Replace not concatenate — fresh thinking per iteration
|
|
211
|
+
arrayMerge: advanced_1.ArrayMergeMode.Replace,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
builder = builder
|
|
196
215
|
.addDeciderFunction('Route', deps.routeDecider, conventions_js_1.SUBFLOW_IDS.ROUTE, 'ReAct routing')
|
|
197
216
|
.addPausableFunctionBranch('tool-calls', 'ToolCalls', deps.toolCallsHandler, 'Tool execution (pausable via pauseHere)')
|
|
198
217
|
.addSubFlowChartBranch('final', finalBranchChart, 'Final', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildAgentChart.js","sourceRoot":"","sources":["../../../src/core/agent/buildAgentChart.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;;;AAEH,mDAAsD;AACtD,6CAAwC;AAIxC,yDAA8D;AAG9D,kEAAkE;AAClE,sDAA+D;AAC/D,qFAA6F;AAC7F,0DAAyD;AACzD,8DAA6D;
|
|
1
|
+
{"version":3,"file":"buildAgentChart.js","sourceRoot":"","sources":["../../../src/core/agent/buildAgentChart.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.buildCallLLMStage = void 0;
|
|
24
24
|
const typedEmit_js_1 = require("../../../recorders/core/typedEmit.js");
|
|
25
25
|
const cost_js_1 = require("../../cost.js");
|
|
26
|
+
const outputSchema_js_1 = require("../../outputSchema.js");
|
|
26
27
|
const reliabilityExecution_js_1 = require("./reliabilityExecution.js");
|
|
27
28
|
/**
|
|
28
29
|
* Build the callLLM stage function. Captures the LLM provider + model
|
|
@@ -68,6 +69,9 @@ function buildCallLLMStage(deps) {
|
|
|
68
69
|
model: deps.model,
|
|
69
70
|
...(deps.temperature !== undefined && { temperature: deps.temperature }),
|
|
70
71
|
...(deps.maxTokens !== undefined && { maxTokens: deps.maxTokens }),
|
|
72
|
+
...(deps.thinkingBudget !== undefined && {
|
|
73
|
+
thinking: { budget: deps.thinkingBudget },
|
|
74
|
+
}),
|
|
71
75
|
};
|
|
72
76
|
// v2.6+ — call cache strategy to attach provider-specific cache
|
|
73
77
|
// hints. CacheGate has already routed (apply-markers / no-markers)
|
|
@@ -123,9 +127,47 @@ function buildCallLLMStage(deps) {
|
|
|
123
127
|
}
|
|
124
128
|
return resp;
|
|
125
129
|
};
|
|
130
|
+
// v2.13 — build the output-schema validator hook when both
|
|
131
|
+
// reliability + outputSchemaParser are configured. The reliability
|
|
132
|
+
// loop applies the validator only on terminal turns (toolCalls
|
|
133
|
+
// empty) so tool-using turns aren't rejected for failing the final-
|
|
134
|
+
// answer schema. ValidationFailure carries `stage` + `path` for the
|
|
135
|
+
// typed event payload.
|
|
136
|
+
let postValidate;
|
|
137
|
+
if (deps.outputSchemaParser !== undefined) {
|
|
138
|
+
const parser = deps.outputSchemaParser;
|
|
139
|
+
postValidate = (response) => {
|
|
140
|
+
try {
|
|
141
|
+
(0, outputSchema_js_1.applyOutputSchema)(response.content, parser);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
// applyOutputSchema throws OutputSchemaError with
|
|
145
|
+
// {stage, rawOutput, cause}. Convert to ValidationFailure for
|
|
146
|
+
// the gate's typed handling. Pull a `path` if the underlying
|
|
147
|
+
// cause exposes Zod-style issues. Use the cause's message
|
|
148
|
+
// (the actual parser error) when available, falling back to
|
|
149
|
+
// the wrapper's message for parsers without a cause.
|
|
150
|
+
const e = err;
|
|
151
|
+
let path;
|
|
152
|
+
const firstIssue = e.cause?.issues?.[0];
|
|
153
|
+
if (firstIssue?.path && firstIssue.path.length > 0) {
|
|
154
|
+
path = firstIssue.path.join('.');
|
|
155
|
+
}
|
|
156
|
+
// Use cause message when present (parsers like Zod attach the
|
|
157
|
+
// real error as cause); fall back to wrapper message.
|
|
158
|
+
const message = e.cause?.message ?? e.message;
|
|
159
|
+
throw new reliabilityExecution_js_1.ValidationFailure({
|
|
160
|
+
message,
|
|
161
|
+
stage: e.stage ?? 'schema-validate',
|
|
162
|
+
...(path !== undefined && { path }),
|
|
163
|
+
...(e.rawOutput !== undefined && { rawOutput: e.rawOutput }),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
126
168
|
let response;
|
|
127
169
|
if (deps.reliability) {
|
|
128
|
-
response = await (0, reliabilityExecution_js_1.executeWithReliability)(scope, llmRequest, deps.reliability, deps.provider, deps.provider.name, deps.model, singleProviderCall);
|
|
170
|
+
response = await (0, reliabilityExecution_js_1.executeWithReliability)(scope, llmRequest, deps.reliability, deps.provider, deps.provider.name, deps.model, singleProviderCall, postValidate);
|
|
129
171
|
// `executeWithReliability` returns `undefined` when it took the
|
|
130
172
|
// fail-fast path. It already wrote scope state and called
|
|
131
173
|
// `$break(reason)` — `Agent.run()` translates the propagated
|
|
@@ -142,6 +184,14 @@ function buildCallLLMStage(deps) {
|
|
|
142
184
|
scope.totalOutputTokens = scope.totalOutputTokens + response.usage.output;
|
|
143
185
|
scope.llmLatestContent = response.content;
|
|
144
186
|
scope.llmLatestToolCalls = response.toolCalls;
|
|
187
|
+
// v2.14 — hand provider-specific raw thinking data to the
|
|
188
|
+
// NormalizeThinking sub-subflow (the next stage in sf-call-llm
|
|
189
|
+
// when a ThinkingHandler is configured). Undefined when the
|
|
190
|
+
// provider has no thinking content for this call (most calls).
|
|
191
|
+
if (response.rawThinking !== undefined) {
|
|
192
|
+
scope.rawThinking =
|
|
193
|
+
response.rawThinking;
|
|
194
|
+
}
|
|
145
195
|
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.stream.llm_end', {
|
|
146
196
|
iteration,
|
|
147
197
|
content: response.content,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callLLM.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/callLLM.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAYH,uEAAiE;AAEjE,2CAA6C;AAE7C,
|
|
1
|
+
{"version":3,"file":"callLLM.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/callLLM.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAYH,uEAAiE;AAEjE,2CAA6C;AAE7C,2DAAmF;AACnF,uEAImC;AA8CnC;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,IAAsB;IAEtB,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,sBAAsB,GACzB,KAAK,CAAC,sBAAqD,IAAI,EAAE,CAAC;QACrE,4DAA4D;QAC5D,qEAAqE;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAElC,MAAM,YAAY,GAAG,sBAAsB;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,iEAAiE;QACjE,4DAA4D;QAC5D,kEAAkE;QAClE,mEAAmE;QACnE,gEAAgE;QAChE,qEAAqE;QACrE,MAAM,QAAQ,GAAI,KAAK,CAAC,OAA6C,IAAI,EAAE,CAAC;QAE5E,IAAA,wBAAS,EAAC,KAAK,EAAE,iCAAiC,EAAE;YAClD,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,iBAAiB,EAAE,YAAY,CAAC,MAAM;YACtC,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YACnC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;SACzE,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,kEAAkE;QAClE,iEAAiE;QACjE,kEAAkE;QAClE,0BAA0B;QAC1B,MAAM,iBAAiB,GACpB,KAAK,CAAC,kBAA2D,IAAI,IAAI,CAAC,WAAW,CAAC;QACzF,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YAChD,QAAQ;YACR,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACjE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI;gBACvC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE;aAC1C,CAAC;SACH,CAAC;QACF,gEAAgE;QAChE,mEAAmE;QACnE,wEAAwE;QACxE,uCAAuC;QACvC,MAAM,YAAY,GAAI,KAAK,CAAC,YAAmD,IAAI,EAAE,CAAC;QACtF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE;YACvF,SAAS;YACT,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAChE,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK;SAChD,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;QAEzC,8DAA8D;QAC9D,gEAAgE;QAChE,2DAA2D;QAC3D,8DAA8D;QAC9D,+DAA+D;QAC/D,gEAAgE;QAChE,4DAA4D;QAC5D,wCAAwC;QACxC,EAAE;QACF,8DAA8D;QAC9D,yEAAyE;QACzE,iEAAiE;QACjE,yBAAyB;QACzB,MAAM,kBAAkB,GAAG,KAAK,EAC9B,GAAe,EACf,KAAoC,EACd,EAAE;YACxB,IAAI,IAA6B,CAAC;YAClC,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBACf,IAAI,KAAK,CAAC,QAAQ;4BAAE,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;wBAC1C,MAAM;oBACR,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;4BACrB,eAAe,GAAG,IAAI,CAAC;4BACvB,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;wBACzB,CAAC;wBACD,IAAA,wBAAS,EAAC,KAAK,EAAE,6BAA6B,EAAE;4BAC9C,SAAS;4BACT,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;yBACvB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,+DAA+D;gBAC/D,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,2DAA2D;QAC3D,mEAAmE;QACnE,+DAA+D;QAC/D,oEAAoE;QACpE,oEAAoE;QACpE,uBAAuB;QACvB,IAAI,YAA+C,CAAC;QACpD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACvC,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC1B,IAAI,CAAC;oBACH,IAAA,mCAAiB,EAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC9C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,kDAAkD;oBAClD,8DAA8D;oBAC9D,6DAA6D;oBAC7D,0DAA0D;oBAC1D,4DAA4D;oBAC5D,qDAAqD;oBACrD,MAAM,CAAC,GAAG,GAQT,CAAC;oBACF,IAAI,IAAwB,CAAC;oBAC7B,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACnD,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnC,CAAC;oBACD,8DAA8D;oBAC9D,sDAAsD;oBACtD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;oBAC9C,MAAM,IAAI,2CAAiB,CAAC;wBAC1B,OAAO;wBACP,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,iBAAiB;wBACnC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;wBACnC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;qBAC7D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,QAAiC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,GAAG,MAAM,IAAA,gDAAsB,EACrC,KAAK,EACL,UAAU,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAClB,IAAI,CAAC,KAAK,EACV,kBAAkB,EAClB,YAAY,CACb,CAAC;YACF,gEAAgE;YAChE,0DAA0D;YAC1D,6DAA6D;YAC7D,+DAA+D;YAC/D,mEAAmE;YACnE,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO;QACrC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAExC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACvE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1E,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC1C,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC9C,0DAA0D;QAC1D,+DAA+D;QAC/D,4DAA4D;QAC5D,+DAA+D;QAC/D,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,KAA2D,CAAC,WAAW;gBACtE,QAAQ,CAAC,WAAW,CAAC;QACzB,CAAC;QAED,IAAA,wBAAS,EAAC,KAAK,EAAE,+BAA+B,EAAE;YAChD,SAAS;YACT,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;YACxC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,UAAU;SACX,CAAC,CAAC;QAEH,IAAA,sBAAY,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC;AACJ,CAAC;AA1MD,8CA0MC"}
|
|
@@ -21,11 +21,22 @@ const typedEmit_js_1 = require("../../../recorders/core/typedEmit.js");
|
|
|
21
21
|
const prepareFinalStage = (scope) => {
|
|
22
22
|
const iteration = scope.iteration;
|
|
23
23
|
scope.finalContent = scope.llmLatestContent;
|
|
24
|
+
// v2.14 — attach thinking blocks to the assistant final message
|
|
25
|
+
// (if any). For non-Anthropic providers this is informational; for
|
|
26
|
+
// Anthropic + extended-thinking-with-tool-use, signature round-trip
|
|
27
|
+
// requires the blocks to persist on the assistant turn even when
|
|
28
|
+
// it's the FINAL turn (continuation in the next user message).
|
|
29
|
+
const thinkingBlocks = scope.thinkingBlocks;
|
|
30
|
+
const hasThinking = thinkingBlocks !== undefined && thinkingBlocks.length > 0;
|
|
24
31
|
// The turn payload memory writes persist: the user's message
|
|
25
32
|
// paired with the agent's final answer.
|
|
26
33
|
scope.newMessages = [
|
|
27
34
|
{ role: 'user', content: scope.userMessage },
|
|
28
|
-
{
|
|
35
|
+
{
|
|
36
|
+
role: 'assistant',
|
|
37
|
+
content: scope.finalContent,
|
|
38
|
+
...(hasThinking && { thinkingBlocks }),
|
|
39
|
+
},
|
|
29
40
|
];
|
|
30
41
|
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.agent.iteration_end', {
|
|
31
42
|
turnIndex: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareFinal.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/prepareFinal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAGH,uEAAiE;AAG1D,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAQ,EAAE;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC5C,6DAA6D;IAC7D,wCAAwC;IACxC,KAAK,CAAC,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;QAC5C,
|
|
1
|
+
{"version":3,"file":"prepareFinal.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/prepareFinal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAGH,uEAAiE;AAG1D,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAQ,EAAE;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC5C,gEAAgE;IAChE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,+DAA+D;IAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,MAAM,WAAW,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,6DAA6D;IAC7D,wCAAwC;IACxC,KAAK,CAAC,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;QAC5C;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK,CAAC,YAAY;YAC3B,GAAG,CAAC,WAAW,IAAI,EAAE,cAAc,EAAE,CAAC;SACvC;KACF,CAAC;IAEF,IAAA,wBAAS,EAAC,KAAK,EAAE,oCAAoC,EAAE;QACrD,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,IAAA,wBAAS,EAAC,KAAK,EAAE,+BAA+B,EAAE;QAChD,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B"}
|
|
@@ -44,9 +44,30 @@
|
|
|
44
44
|
* agent's outer ReAct loop, which is not the intent.
|
|
45
45
|
*/
|
|
46
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.executeWithReliability = exports.MID_STREAM_KIND = void 0;
|
|
47
|
+
exports.defaultStuckLoopRule = exports.lastNValidationErrorsMatch = exports.executeWithReliability = exports.MID_STREAM_KIND = exports.ValidationFailure = void 0;
|
|
48
48
|
const CircuitBreaker_js_1 = require("../../../reliability/CircuitBreaker.js");
|
|
49
49
|
const classifyError_js_1 = require("../../../reliability/classifyError.js");
|
|
50
|
+
/**
|
|
51
|
+
* Sentinel error class thrown by an `OutputSchemaValidator` to signal
|
|
52
|
+
* a validation failure. Distinct subclass so the reliability loop can
|
|
53
|
+
* `instanceof` check and route to the schema-fail branch instead of
|
|
54
|
+
* treating it as a generic provider error.
|
|
55
|
+
*/
|
|
56
|
+
class ValidationFailure extends Error {
|
|
57
|
+
stage;
|
|
58
|
+
path;
|
|
59
|
+
rawOutput;
|
|
60
|
+
constructor(opts) {
|
|
61
|
+
super(opts.message);
|
|
62
|
+
this.name = 'ValidationFailure';
|
|
63
|
+
this.stage = opts.stage;
|
|
64
|
+
if (opts.path !== undefined)
|
|
65
|
+
this.path = opts.path;
|
|
66
|
+
if (opts.rawOutput !== undefined)
|
|
67
|
+
this.rawOutput = opts.rawOutput;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.ValidationFailure = ValidationFailure;
|
|
50
71
|
/** Sentinel kind written to scope on a mid-stream failure that the
|
|
51
72
|
* rules wanted to retry. Surfaces in `ReliabilityFailFastError.kind`. */
|
|
52
73
|
exports.MID_STREAM_KIND = 'mid-stream-not-retryable';
|
|
@@ -55,7 +76,20 @@ exports.MID_STREAM_KIND = 'mid-stream-not-retryable';
|
|
|
55
76
|
* on success; calls `scope.$break(reason)` and returns `undefined` on
|
|
56
77
|
* fail-fast (caller short-circuits when undefined is returned).
|
|
57
78
|
*/
|
|
58
|
-
async function executeWithReliability(scope, request, config, defaultProvider, defaultProviderName, defaultModel, callFn
|
|
79
|
+
async function executeWithReliability(scope, request, config, defaultProvider, defaultProviderName, defaultModel, callFn,
|
|
80
|
+
/** v2.13 — optional output-schema validator. When supplied, the loop
|
|
81
|
+
* invokes it after every successful LLM call WHERE
|
|
82
|
+
* `response.toolCalls.length === 0` (final-answer turn). Throws of
|
|
83
|
+
* type `ValidationFailure` signal schema-fail and route via
|
|
84
|
+
* PostDecide rules. Caller is responsible for guarding tool-call
|
|
85
|
+
* turns; this helper assumes the validator is already gated. */
|
|
86
|
+
postValidate) {
|
|
87
|
+
// v2.13 — mutable so feedbackForLLM can append ephemeral messages
|
|
88
|
+
// before retry. The reliabilityScope() helper captures `request` by
|
|
89
|
+
// reference; reassignment makes the next iteration's call see the
|
|
90
|
+
// updated messages array WITHOUT mutating the original (we always
|
|
91
|
+
// construct a new request object in applyFeedback below).
|
|
92
|
+
let mutableRequest = request;
|
|
59
93
|
const preRules = config.preCheck ?? [];
|
|
60
94
|
const postRules = config.postDecide ?? [];
|
|
61
95
|
const providers = config.providers ?? [];
|
|
@@ -67,11 +101,16 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
67
101
|
let firstChunkSeen = false;
|
|
68
102
|
const breakerStates = {};
|
|
69
103
|
const attemptsPerProvider = {};
|
|
104
|
+
// v2.13 — accumulating output-schema validation history. Pushed on every
|
|
105
|
+
// schema-fail outcome; rules read it via scope.validationErrorHistory.
|
|
106
|
+
const validationErrorHistory = [];
|
|
107
|
+
// v2.13 — current attempt's validation error detail (overwritten each loop).
|
|
108
|
+
let lastValidationError;
|
|
70
109
|
// Helper: build the reliability scope view rules read.
|
|
71
110
|
const reliabilityScope = () => {
|
|
72
111
|
const currentProvider = providerEntry().name;
|
|
73
112
|
return {
|
|
74
|
-
request,
|
|
113
|
+
request: mutableRequest,
|
|
75
114
|
providersCount: providers.length,
|
|
76
115
|
hasFallback: fallbackFn !== undefined,
|
|
77
116
|
attempt,
|
|
@@ -82,6 +121,8 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
82
121
|
error: lastError,
|
|
83
122
|
errorKind: lastErrorKind,
|
|
84
123
|
latencyMs: lastLatencyMs,
|
|
124
|
+
...(lastValidationError !== undefined && { validationError: lastValidationError }),
|
|
125
|
+
validationErrorHistory,
|
|
85
126
|
attemptsPerProvider,
|
|
86
127
|
breakerStates,
|
|
87
128
|
};
|
|
@@ -191,16 +232,68 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
191
232
|
// Fire the actual call (unless breaker pre-emptied above).
|
|
192
233
|
if (lastErrorKind !== 'circuit-open') {
|
|
193
234
|
const t0 = Date.now();
|
|
235
|
+
// Reset per-attempt validation state (overwritten below if this
|
|
236
|
+
// attempt produces a schema-fail).
|
|
237
|
+
lastValidationError = undefined;
|
|
194
238
|
try {
|
|
195
|
-
const response = await callFn(
|
|
239
|
+
const response = await callFn(mutableRequest, {
|
|
196
240
|
onFirstChunk: () => {
|
|
197
241
|
firstChunkSeen = true;
|
|
198
242
|
},
|
|
199
243
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (
|
|
244
|
+
// v2.13 — output-schema validation. MUST-FIX #1: only validate
|
|
245
|
+
// on terminal turns (no toolCalls). Tool-call turns aren't
|
|
246
|
+
// final answers; validating them would be premature.
|
|
247
|
+
if (postValidate !== undefined &&
|
|
248
|
+
(response.toolCalls === undefined || response.toolCalls.length === 0)) {
|
|
249
|
+
try {
|
|
250
|
+
postValidate(response);
|
|
251
|
+
// Validation passed — fall through to success branch.
|
|
252
|
+
lastResponse = response;
|
|
253
|
+
lastError = undefined;
|
|
254
|
+
lastErrorKind = 'ok';
|
|
255
|
+
}
|
|
256
|
+
catch (vErr) {
|
|
257
|
+
// Validation failed — treat as schema-fail. Capture detail
|
|
258
|
+
// for the typed event and for rules that read scope.validationError.
|
|
259
|
+
const vfailure = vErr instanceof ValidationFailure
|
|
260
|
+
? vErr
|
|
261
|
+
: new ValidationFailure({
|
|
262
|
+
message: vErr instanceof Error ? vErr.message : String(vErr),
|
|
263
|
+
stage: 'schema-validate',
|
|
264
|
+
});
|
|
265
|
+
lastResponse = undefined;
|
|
266
|
+
lastError = vfailure;
|
|
267
|
+
lastErrorKind = 'schema-fail';
|
|
268
|
+
lastValidationError = {
|
|
269
|
+
message: vfailure.message,
|
|
270
|
+
...(vfailure.path !== undefined && { path: vfailure.path }),
|
|
271
|
+
...(vfailure.rawOutput !== undefined && { rawOutput: vfailure.rawOutput }),
|
|
272
|
+
};
|
|
273
|
+
validationErrorHistory.push(vfailure.message);
|
|
274
|
+
// MUST-FIX #2: emit the typed event BEFORE PostDecide runs,
|
|
275
|
+
// so observability sees the failure even if a buggy rule
|
|
276
|
+
// routes to fail-fast or swallows it.
|
|
277
|
+
// MUST-FIX #3: payload includes attempt + cumulativeRetries.
|
|
278
|
+
scope.$emit('agentfootprint.agent.output_schema_validation_failed', {
|
|
279
|
+
message: vfailure.message,
|
|
280
|
+
stage: vfailure.stage,
|
|
281
|
+
...(vfailure.path !== undefined && { path: vfailure.path }),
|
|
282
|
+
...(vfailure.rawOutput !== undefined && { rawOutput: vfailure.rawOutput }),
|
|
283
|
+
attempt: attempt + 1, // 1-indexed; bump happens in finally
|
|
284
|
+
cumulativeRetries: validationErrorHistory.length,
|
|
285
|
+
});
|
|
286
|
+
// Validation-fail does NOT count toward circuit-breaker
|
|
287
|
+
// failures — the provider call itself succeeded.
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
// No validator configured, OR a tool-call turn (non-terminal).
|
|
292
|
+
lastResponse = response;
|
|
293
|
+
lastError = undefined;
|
|
294
|
+
lastErrorKind = 'ok';
|
|
295
|
+
}
|
|
296
|
+
if (lastErrorKind === 'ok' && breakerConfig !== undefined) {
|
|
204
297
|
breakerStates[cur.name] = (0, CircuitBreaker_js_1.recordSuccess)(breakerStates[cur.name] ?? (0, CircuitBreaker_js_1.initialBreakerState)(), breakerConfig);
|
|
205
298
|
}
|
|
206
299
|
}
|
|
@@ -252,10 +345,23 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
252
345
|
return failFast('post-decide', kind, label);
|
|
253
346
|
}
|
|
254
347
|
if (postBranch === 'retry') {
|
|
348
|
+
// v2.13 — when the matched rule supplies `feedbackForLLM`, append
|
|
349
|
+
// it as an ephemeral user message before the next iteration so
|
|
350
|
+
// the LLM sees the validation hint. The ephemeral marker keeps
|
|
351
|
+
// it out of scope.history / memory writes — visible in the
|
|
352
|
+
// request, not persisted long-term.
|
|
353
|
+
if (matchedRule?.feedbackForLLM !== undefined) {
|
|
354
|
+
mutableRequest = await applyFeedback(mutableRequest, matchedRule.feedbackForLLM, reliabilityScope());
|
|
355
|
+
}
|
|
255
356
|
// Loop continues; attempt was already bumped in finally.
|
|
256
357
|
continue;
|
|
257
358
|
}
|
|
258
359
|
if (postBranch === 'retry-other') {
|
|
360
|
+
// Same feedback application for retry-other — the new provider
|
|
361
|
+
// sees the same accumulated context.
|
|
362
|
+
if (matchedRule?.feedbackForLLM !== undefined) {
|
|
363
|
+
mutableRequest = await applyFeedback(mutableRequest, matchedRule.feedbackForLLM, reliabilityScope());
|
|
364
|
+
}
|
|
259
365
|
providerIdx += 1;
|
|
260
366
|
if (providerIdx >= Math.max(providers.length, 1)) {
|
|
261
367
|
// Walked past the last provider — convert to fail-fast.
|
|
@@ -268,7 +374,7 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
268
374
|
return failFast('post-decide', 'fallback-not-configured', 'rule wanted fallback but no fallback fn provided');
|
|
269
375
|
}
|
|
270
376
|
try {
|
|
271
|
-
const repaired = await fallbackFn(
|
|
377
|
+
const repaired = await fallbackFn(mutableRequest, lastError);
|
|
272
378
|
// Successful fallback — commit and exit.
|
|
273
379
|
return repaired;
|
|
274
380
|
}
|
|
@@ -288,4 +394,83 @@ async function executeWithReliability(scope, request, config, defaultProvider, d
|
|
|
288
394
|
return failFast('post-decide', 'max-loop-exceeded', `reliability loop exceeded ${MAX_LOOP} iterations`);
|
|
289
395
|
}
|
|
290
396
|
exports.executeWithReliability = executeWithReliability;
|
|
397
|
+
/**
|
|
398
|
+
* v2.13 — apply a `feedbackForLLM` value to the next request by
|
|
399
|
+
* appending an ephemeral user message. Resolves the value to a string
|
|
400
|
+
* (sync or async); returns a NEW LLMRequest with the appended message.
|
|
401
|
+
*
|
|
402
|
+
* The new message is marked `ephemeral: true` so:
|
|
403
|
+
* • LLM sees it (counts toward this turn's context window)
|
|
404
|
+
* • observability (recorders / narrative / typed events) sees it
|
|
405
|
+
* • scope.history / memory writes do NOT persist it long-term
|
|
406
|
+
*
|
|
407
|
+
* Errors thrown by a function-form `feedbackForLLM` are caught and
|
|
408
|
+
* swallowed (with a fallback to a generic message) — a buggy
|
|
409
|
+
* feedback callback MUST NOT abort the agent run that the gate is
|
|
410
|
+
* already retrying. This is the v2.13 7-panel review's
|
|
411
|
+
* "callback-throw safety" requirement (OpenAI reviewer).
|
|
412
|
+
*/
|
|
413
|
+
async function applyFeedback(request, feedback, scope) {
|
|
414
|
+
let content;
|
|
415
|
+
if (typeof feedback === 'string') {
|
|
416
|
+
content = feedback;
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
try {
|
|
420
|
+
const result = feedback(scope);
|
|
421
|
+
content = result instanceof Promise ? await result : result;
|
|
422
|
+
}
|
|
423
|
+
catch {
|
|
424
|
+
content = `Previous output failed validation. Return valid JSON conforming to the schema.`;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return {
|
|
428
|
+
...request,
|
|
429
|
+
messages: [...request.messages, { role: 'user', content, ephemeral: true }],
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* v2.13 — stuck-loop detection helper. Returns `true` when the last
|
|
434
|
+
* `n` validation errors are IDENTICAL — a hallucinating model that
|
|
435
|
+
* keeps making the same mistake won't make progress on more retries.
|
|
436
|
+
*
|
|
437
|
+
* Default rule template — spread into your `postDecide` to short-circuit
|
|
438
|
+
* stuck loops:
|
|
439
|
+
*
|
|
440
|
+
* ```ts
|
|
441
|
+
* postDecide: [
|
|
442
|
+
* defaultStuckLoopRule, // ← spread first; fail-fast on stuck
|
|
443
|
+
* { when: (s) => s.validationError !== undefined && s.attempt < 3, then: 'retry', ... },
|
|
444
|
+
* ]
|
|
445
|
+
* ```
|
|
446
|
+
*
|
|
447
|
+
* @param scope The reliability scope view passed to rule predicates.
|
|
448
|
+
* @param n How many trailing identical errors trigger detection. Default 2.
|
|
449
|
+
*/
|
|
450
|
+
function lastNValidationErrorsMatch(scope, n = 2) {
|
|
451
|
+
const h = scope.validationErrorHistory;
|
|
452
|
+
if (h.length < n)
|
|
453
|
+
return false;
|
|
454
|
+
const last = h[h.length - 1];
|
|
455
|
+
for (let i = h.length - n; i < h.length; i++) {
|
|
456
|
+
if (h[i] !== last)
|
|
457
|
+
return false;
|
|
458
|
+
}
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
exports.lastNValidationErrorsMatch = lastNValidationErrorsMatch;
|
|
462
|
+
/**
|
|
463
|
+
* v2.13 — drop-in PostDecide rule that fail-fasts when the last 2
|
|
464
|
+
* validation errors match. Spread into `postDecide` BEFORE retry
|
|
465
|
+
* rules so it short-circuits before another wasted attempt.
|
|
466
|
+
*
|
|
467
|
+
* The matched-rule kind `'schema-stuck-loop'` surfaces on
|
|
468
|
+
* `ReliabilityFailFastError.kind` for caller branching.
|
|
469
|
+
*/
|
|
470
|
+
exports.defaultStuckLoopRule = {
|
|
471
|
+
when: (s) => lastNValidationErrorsMatch(s, 2),
|
|
472
|
+
then: 'fail-fast',
|
|
473
|
+
kind: 'schema-stuck-loop',
|
|
474
|
+
label: 'model produced the same validation error twice in a row',
|
|
475
|
+
};
|
|
291
476
|
//# sourceMappingURL=reliabilityExecution.js.map
|