@librechat/agents 4.0.1 → 4.0.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/cjs/agents/AgentContext.cjs +3 -2
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/decisions/deadline.cjs +52 -0
- package/dist/cjs/decisions/deadline.cjs.map +1 -0
- package/dist/cjs/decisions/dialect.cjs +88 -0
- package/dist/cjs/decisions/dialect.cjs.map +1 -0
- package/dist/cjs/decisions/http.cjs +77 -0
- package/dist/cjs/decisions/http.cjs.map +1 -0
- package/dist/cjs/decisions/index.cjs +7 -0
- package/dist/cjs/decisions/presets.cjs +82 -0
- package/dist/cjs/decisions/presets.cjs.map +1 -0
- package/dist/cjs/decisions/questions.cjs +70 -0
- package/dist/cjs/decisions/questions.cjs.map +1 -0
- package/dist/cjs/decisions/structuredChat.cjs +172 -0
- package/dist/cjs/decisions/structuredChat.cjs.map +1 -0
- package/dist/cjs/decisions/structuredOutput.cjs +18 -0
- package/dist/cjs/decisions/structuredOutput.cjs.map +1 -0
- package/dist/cjs/decisions/traceMarker.cjs +6 -0
- package/dist/cjs/decisions/traceMarker.cjs.map +1 -0
- package/dist/cjs/decisions/transport.cjs +166 -0
- package/dist/cjs/decisions/transport.cjs.map +1 -0
- package/dist/cjs/decisions/types.cjs +44 -0
- package/dist/cjs/decisions/types.cjs.map +1 -0
- package/dist/cjs/graphs/Graph.cjs +28 -9
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +6 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +1 -1
- package/dist/cjs/llm/invoke.cjs +34 -12
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +7 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/providerTextBoundary.cjs +355 -0
- package/dist/cjs/llm/providerTextBoundary.cjs.map +1 -0
- package/dist/cjs/llm/providerTextChunk.cjs +14 -0
- package/dist/cjs/llm/providerTextChunk.cjs.map +1 -0
- package/dist/cjs/llm/providerTextControls.cjs +236 -0
- package/dist/cjs/llm/providerTextControls.cjs.map +1 -0
- package/dist/cjs/llm/stream/smoother.cjs +2 -1
- package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
- package/dist/cjs/main.cjs +49 -1
- package/dist/cjs/protection/providerText.cjs +224 -0
- package/dist/cjs/protection/providerText.cjs.map +1 -0
- package/dist/cjs/protection/providerTextInput.cjs +25 -0
- package/dist/cjs/protection/providerTextInput.cjs.map +1 -0
- package/dist/cjs/rerank/index.cjs +2 -0
- package/dist/cjs/rerank/search.cjs +45 -0
- package/dist/cjs/rerank/search.cjs.map +1 -0
- package/dist/cjs/rerank/systemone.cjs +70 -0
- package/dist/cjs/rerank/systemone.cjs.map +1 -0
- package/dist/cjs/run.cjs +11 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +42 -14
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +26 -8
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +11 -3
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +6 -5
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +1 -0
- package/dist/cjs/tools/search/search.cjs +3 -3
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +4 -3
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +13 -2
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +149 -26
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentReplay.cjs +4 -2
- package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
- package/dist/cjs/tools/subagent/childGraphConfig.cjs +3 -1
- package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
- package/dist/cjs/tools/subagent/diagnostics.cjs +88 -2
- package/dist/cjs/tools/subagent/diagnostics.cjs.map +1 -1
- package/dist/cjs/tools/subagent/hostArgs.cjs +214 -0
- package/dist/cjs/tools/subagent/hostArgs.cjs.map +1 -0
- package/dist/cjs/tools/subagent/index.cjs +2 -0
- package/dist/cjs/tools/toolErrorContent.cjs +1 -1
- package/dist/esm/agents/AgentContext.mjs +3 -2
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/decisions/deadline.mjs +52 -0
- package/dist/esm/decisions/deadline.mjs.map +1 -0
- package/dist/esm/decisions/dialect.mjs +87 -0
- package/dist/esm/decisions/dialect.mjs.map +1 -0
- package/dist/esm/decisions/http.mjs +75 -0
- package/dist/esm/decisions/http.mjs.map +1 -0
- package/dist/esm/decisions/index.mjs +8 -0
- package/dist/esm/decisions/presets.mjs +77 -0
- package/dist/esm/decisions/presets.mjs.map +1 -0
- package/dist/esm/decisions/questions.mjs +67 -0
- package/dist/esm/decisions/questions.mjs.map +1 -0
- package/dist/esm/decisions/structuredChat.mjs +172 -0
- package/dist/esm/decisions/structuredChat.mjs.map +1 -0
- package/dist/esm/decisions/structuredOutput.mjs +18 -0
- package/dist/esm/decisions/structuredOutput.mjs.map +1 -0
- package/dist/esm/decisions/traceMarker.mjs +6 -0
- package/dist/esm/decisions/traceMarker.mjs.map +1 -0
- package/dist/esm/decisions/transport.mjs +164 -0
- package/dist/esm/decisions/transport.mjs.map +1 -0
- package/dist/esm/decisions/types.mjs +39 -0
- package/dist/esm/decisions/types.mjs.map +1 -0
- package/dist/esm/graphs/Graph.mjs +28 -9
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +6 -1
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +1 -1
- package/dist/esm/llm/invoke.mjs +34 -12
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +7 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/providerTextBoundary.mjs +355 -0
- package/dist/esm/llm/providerTextBoundary.mjs.map +1 -0
- package/dist/esm/llm/providerTextChunk.mjs +13 -0
- package/dist/esm/llm/providerTextChunk.mjs.map +1 -0
- package/dist/esm/llm/providerTextControls.mjs +230 -0
- package/dist/esm/llm/providerTextControls.mjs.map +1 -0
- package/dist/esm/llm/stream/smoother.mjs +2 -1
- package/dist/esm/llm/stream/smoother.mjs.map +1 -1
- package/dist/esm/main.mjs +16 -2
- package/dist/esm/protection/providerText.mjs +218 -0
- package/dist/esm/protection/providerText.mjs.map +1 -0
- package/dist/esm/protection/providerTextInput.mjs +24 -0
- package/dist/esm/protection/providerTextInput.mjs.map +1 -0
- package/dist/esm/rerank/index.mjs +3 -0
- package/dist/esm/rerank/search.mjs +45 -0
- package/dist/esm/rerank/search.mjs.map +1 -0
- package/dist/esm/rerank/systemone.mjs +70 -0
- package/dist/esm/rerank/systemone.mjs.map +1 -0
- package/dist/esm/run.mjs +11 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +42 -14
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +26 -8
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +11 -3
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +6 -5
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +1 -1
- package/dist/esm/tools/search/search.mjs +3 -3
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +4 -3
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +13 -2
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +149 -26
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs +4 -2
- package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
- package/dist/esm/tools/subagent/childGraphConfig.mjs +3 -1
- package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
- package/dist/esm/tools/subagent/diagnostics.mjs +84 -3
- package/dist/esm/tools/subagent/diagnostics.mjs.map +1 -1
- package/dist/esm/tools/subagent/hostArgs.mjs +207 -0
- package/dist/esm/tools/subagent/hostArgs.mjs.map +1 -0
- package/dist/esm/tools/subagent/index.mjs +2 -0
- package/dist/esm/tools/toolErrorContent.mjs +1 -1
- package/dist/types/decisions/deadline.d.ts +3 -0
- package/dist/types/decisions/dialect.d.ts +11 -0
- package/dist/types/decisions/http.d.ts +22 -0
- package/dist/types/decisions/index.d.ts +10 -0
- package/dist/types/decisions/presets.d.ts +17 -0
- package/dist/types/decisions/questions.d.ts +8 -0
- package/dist/types/decisions/structuredChat.d.ts +17 -0
- package/dist/types/decisions/structuredOutput.d.ts +4 -0
- package/dist/types/decisions/traceMarker.d.ts +2 -0
- package/dist/types/decisions/transport.d.ts +29 -0
- package/dist/types/decisions/types.d.ts +119 -0
- package/dist/types/graphs/Graph.d.ts +7 -3
- package/dist/types/index.d.ts +4 -0
- package/dist/types/llm/invoke.d.ts +4 -1
- package/dist/types/llm/providerTextBoundary.d.ts +4 -0
- package/dist/types/llm/providerTextChunk.d.ts +7 -0
- package/dist/types/llm/providerTextControls.d.ts +18 -0
- package/dist/types/protection/providerText.d.ts +77 -0
- package/dist/types/protection/providerTextInput.d.ts +3 -0
- package/dist/types/rerank/index.d.ts +4 -0
- package/dist/types/rerank/search.d.ts +7 -0
- package/dist/types/rerank/systemone.d.ts +13 -0
- package/dist/types/rerank/types.d.ts +24 -0
- package/dist/types/run.d.ts +2 -0
- package/dist/types/tools/BashExecutor.d.ts +4 -0
- package/dist/types/tools/CodeExecutor.d.ts +4 -0
- package/dist/types/tools/ReadFile.d.ts +4 -0
- package/dist/types/tools/SkillTool.d.ts +4 -0
- package/dist/types/tools/SubagentTool.d.ts +2 -0
- package/dist/types/tools/ToolSearch.d.ts +4 -0
- package/dist/types/tools/search/schema.d.ts +4 -0
- package/dist/types/tools/search/types.d.ts +3 -1
- package/dist/types/tools/subagent/SubagentExecutionRegistry.d.ts +6 -0
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +22 -1
- package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -1
- package/dist/types/tools/subagent/diagnostics.d.ts +56 -8
- package/dist/types/tools/subagent/hostArgs.d.ts +57 -0
- package/dist/types/tools/subagent/index.d.ts +3 -0
- package/dist/types/types/graph.d.ts +39 -0
- package/dist/types/types/run.d.ts +6 -2
- package/dist/types/types/tools.d.ts +2 -0
- package/package.json +4 -4
- package/src/agents/AgentContext.ts +3 -2
- package/src/decisions/deadline.ts +92 -0
- package/src/decisions/dialect.ts +200 -0
- package/src/decisions/http.ts +175 -0
- package/src/decisions/index.ts +14 -0
- package/src/decisions/presets.ts +111 -0
- package/src/decisions/questions.ts +128 -0
- package/src/decisions/structuredChat.ts +358 -0
- package/src/decisions/structuredOutput.ts +25 -0
- package/src/decisions/traceMarker.ts +2 -0
- package/src/decisions/transport.ts +335 -0
- package/src/decisions/types.ts +193 -0
- package/src/graphs/Graph.ts +57 -9
- package/src/index.ts +9 -0
- package/src/langfuseToolOutputTracing.ts +8 -1
- package/src/llm/invoke.ts +48 -7
- package/src/llm/openai/index.ts +8 -0
- package/src/llm/providerTextBoundary.ts +446 -0
- package/src/llm/providerTextChunk.ts +15 -0
- package/src/llm/providerTextControls.ts +173 -0
- package/src/llm/stream/smoother.ts +4 -2
- package/src/protection/providerText.ts +325 -0
- package/src/protection/providerTextInput.ts +21 -0
- package/src/rerank/index.ts +4 -0
- package/src/rerank/search.ts +85 -0
- package/src/rerank/systemone.ts +140 -0
- package/src/rerank/types.ts +28 -0
- package/src/run.ts +13 -0
- package/src/stream.ts +33 -7
- package/src/summarization/node.ts +32 -14
- package/src/tools/SubagentTool.ts +14 -3
- package/src/tools/ToolNode.ts +7 -3
- package/src/tools/search/search.ts +4 -4
- package/src/tools/search/tool.ts +27 -25
- package/src/tools/search/types.ts +4 -1
- package/src/tools/subagent/SubagentExecutionRegistry.ts +27 -2
- package/src/tools/subagent/SubagentExecutor.ts +323 -28
- package/src/tools/subagent/SubagentReplay.ts +10 -3
- package/src/tools/subagent/childGraphConfig.ts +12 -1
- package/src/tools/subagent/diagnostics.ts +180 -9
- package/src/tools/subagent/hostArgs.ts +413 -0
- package/src/tools/subagent/index.ts +20 -0
- package/src/types/graph.ts +44 -0
- package/src/types/run.ts +6 -2
- package/src/types/tools.ts +6 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
const require_traceMarker = require("./traceMarker.cjs");
|
|
2
|
+
const require_types = require("./types.cjs");
|
|
3
|
+
const require_questions = require("./questions.cjs");
|
|
4
|
+
const require_deadline = require("./deadline.cjs");
|
|
5
|
+
const require_transport = require("./transport.cjs");
|
|
6
|
+
const require_structuredOutput = require("./structuredOutput.cjs");
|
|
7
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
8
|
+
//#region src/decisions/structuredChat.ts
|
|
9
|
+
const MAX_QUESTIONS = 32;
|
|
10
|
+
const MAX_CHOICE_OPTIONS = 128;
|
|
11
|
+
const DEFAULT_TIMEOUT_MS = 2e4;
|
|
12
|
+
const PROVIDER_ID = "structured-chat";
|
|
13
|
+
function readChatUsage(raw) {
|
|
14
|
+
if (!require_types.isDecisionObject(raw)) return null;
|
|
15
|
+
const usage = require_types.readDecisionUsage(raw.usage_metadata);
|
|
16
|
+
const response = require_types.isDecisionObject(raw.response_metadata) ? raw.response_metadata : null;
|
|
17
|
+
const nested = require_types.isDecisionObject(response?.metadata) ? response.metadata : null;
|
|
18
|
+
const bedrock = require_types.isDecisionObject(nested?.usage) ? nested.usage : response?.usage;
|
|
19
|
+
if (usage?.inputTokens === void 0 || !require_types.isDecisionObject(bedrock) || usage.inputTokens !== bedrock.inputTokens) return usage;
|
|
20
|
+
const read = bedrock.cacheReadInputTokens;
|
|
21
|
+
const write = bedrock.cacheWriteInputTokens;
|
|
22
|
+
if (read != null && (typeof read !== "number" || !Number.isSafeInteger(read) || read < 0) || write != null && (typeof write !== "number" || !Number.isSafeInteger(write) || write < 0)) return usage;
|
|
23
|
+
const inputTokens = usage.inputTokens + (typeof read === "number" ? read : 0) + (typeof write === "number" ? write : 0);
|
|
24
|
+
return Number.isSafeInteger(inputTokens) ? {
|
|
25
|
+
...usage,
|
|
26
|
+
inputTokens
|
|
27
|
+
} : usage;
|
|
28
|
+
}
|
|
29
|
+
function providerFailure(error, provider) {
|
|
30
|
+
const details = require_types.isDecisionObject(error) ? error : null;
|
|
31
|
+
const metadata = require_types.isDecisionObject(details?.$metadata) ? details.$metadata : null;
|
|
32
|
+
const rawStatus = details?.status ?? details?.statusCode ?? metadata?.httpStatusCode;
|
|
33
|
+
const status = typeof rawStatus === "number" && Number.isInteger(rawStatus) && rawStatus >= 100 && rawStatus <= 599 ? rawStatus : void 0;
|
|
34
|
+
const failure = new require_types.DecisionError(status == null ? "network" : require_transport.failureForStatus(status), "structured decision model request failed", {
|
|
35
|
+
provider,
|
|
36
|
+
status
|
|
37
|
+
});
|
|
38
|
+
const headers = details?.headers;
|
|
39
|
+
if (headers instanceof Headers) failure.retryAfterMs = require_transport.retryAfterMs(headers.get("retry-after"));
|
|
40
|
+
return failure;
|
|
41
|
+
}
|
|
42
|
+
function decisionSchema(entries) {
|
|
43
|
+
const properties = Object.create(null);
|
|
44
|
+
for (const [id, question] of entries) {
|
|
45
|
+
if (question.type === "boolean") {
|
|
46
|
+
properties[id] = {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: { decision: { type: "boolean" } },
|
|
49
|
+
required: ["decision"],
|
|
50
|
+
additionalProperties: false
|
|
51
|
+
};
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
properties[id] = {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: { choice: {
|
|
57
|
+
type: "string",
|
|
58
|
+
enum: Object.keys(question.criteria)
|
|
59
|
+
} },
|
|
60
|
+
required: ["choice"],
|
|
61
|
+
additionalProperties: false
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
type: "object",
|
|
66
|
+
properties: { answers: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties,
|
|
69
|
+
required: entries.map(([id]) => id),
|
|
70
|
+
additionalProperties: false
|
|
71
|
+
} },
|
|
72
|
+
required: ["answers"],
|
|
73
|
+
additionalProperties: false
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function readDecisions(parsed, entries, provider) {
|
|
77
|
+
const invalid = () => new require_types.DecisionError("malformed_response", "invalid structured decision model answer", { provider });
|
|
78
|
+
if (!require_types.isDecisionObject(parsed) || Object.keys(parsed).length !== 1 || !require_types.isDecisionObject(parsed.answers) || Object.keys(parsed.answers).length !== entries.length) throw invalid();
|
|
79
|
+
const answers = Object.create(null);
|
|
80
|
+
for (const [id, question] of entries) {
|
|
81
|
+
if (!Object.hasOwn(parsed.answers, id)) throw invalid();
|
|
82
|
+
const raw = parsed.answers[id];
|
|
83
|
+
if (!require_types.isDecisionObject(raw) || Object.keys(raw).length !== 1) throw invalid();
|
|
84
|
+
if (question.type === "boolean") {
|
|
85
|
+
if (typeof raw.decision !== "boolean") throw invalid();
|
|
86
|
+
answers[id] = {
|
|
87
|
+
type: "boolean",
|
|
88
|
+
decision: raw.decision,
|
|
89
|
+
probability: null
|
|
90
|
+
};
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (question.type !== "choice" || typeof raw.choice !== "string" || !Object.hasOwn(question.criteria, raw.choice)) throw invalid();
|
|
94
|
+
answers[id] = {
|
|
95
|
+
type: "choice",
|
|
96
|
+
choice: raw.choice,
|
|
97
|
+
confidence: null,
|
|
98
|
+
probabilities: null
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return answers;
|
|
102
|
+
}
|
|
103
|
+
function questionsForChat(questions, provider, maxQuestions) {
|
|
104
|
+
const entries = require_questions.validateDecisionQuestions(questions, provider);
|
|
105
|
+
let choices = 0;
|
|
106
|
+
for (const [, question] of entries) {
|
|
107
|
+
if (question.type === "score") throw new require_types.DecisionError("unsupported_question", "chat decision cannot score expected values", { provider });
|
|
108
|
+
if (question.type === "choice") choices += Object.keys(question.criteria).length;
|
|
109
|
+
}
|
|
110
|
+
if (entries.length > maxQuestions || choices > MAX_CHOICE_OPTIONS) throw new require_types.DecisionError("unsupported_question", "decision model question batch too large", { provider });
|
|
111
|
+
return entries;
|
|
112
|
+
}
|
|
113
|
+
function createStructuredChatDecisionModel(options) {
|
|
114
|
+
const provider = options.providerId ?? PROVIDER_ID;
|
|
115
|
+
if (!["jsonSchema", "functionCalling"].includes(options.method)) throw new require_types.DecisionError("unsupported_mode", "unsupported structured decision model mode", { provider });
|
|
116
|
+
if (!options.modelId.trim()) throw new require_types.DecisionError("bad_request", "decision model requires a model id", { provider });
|
|
117
|
+
const maxQuestions = options.maxQuestions ?? MAX_QUESTIONS;
|
|
118
|
+
if (!Number.isSafeInteger(maxQuestions) || maxQuestions < 1 || maxQuestions > MAX_QUESTIONS) throw new require_types.DecisionError("bad_request", "invalid decision model question limit", { provider });
|
|
119
|
+
const { model, method } = options;
|
|
120
|
+
const modelId = options.modelId.trim();
|
|
121
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
122
|
+
const onAnswered = options.onAnswered;
|
|
123
|
+
return {
|
|
124
|
+
id: provider,
|
|
125
|
+
model: modelId,
|
|
126
|
+
async decide(request) {
|
|
127
|
+
const started = performance.now();
|
|
128
|
+
return require_deadline.withDecisionDeadline(provider, request.timeoutMs ?? timeoutMs, request.signal, async (signal, waitFor) => {
|
|
129
|
+
let entries;
|
|
130
|
+
let input;
|
|
131
|
+
try {
|
|
132
|
+
entries = questionsForChat(request.questions, provider, maxQuestions);
|
|
133
|
+
input = require_traceMarker.DECISION_PROMPT_PREFIX + JSON.stringify({
|
|
134
|
+
state: request.state,
|
|
135
|
+
questions: Object.fromEntries(entries)
|
|
136
|
+
});
|
|
137
|
+
} catch (error) {
|
|
138
|
+
if (error instanceof require_types.DecisionError) throw error;
|
|
139
|
+
throw new require_types.DecisionError("bad_request", "invalid decision model request", { provider });
|
|
140
|
+
}
|
|
141
|
+
let structured;
|
|
142
|
+
try {
|
|
143
|
+
structured = require_structuredOutput.withDecisionStructuredOutput(model, decisionSchema(entries), method);
|
|
144
|
+
} catch {
|
|
145
|
+
throw new require_types.DecisionError("unsupported_mode", "model cannot enforce the requested strict mode", { provider });
|
|
146
|
+
}
|
|
147
|
+
await waitFor(Promise.resolve());
|
|
148
|
+
let output;
|
|
149
|
+
try {
|
|
150
|
+
output = await waitFor(structured.invoke([new _langchain_core_messages.SystemMessage("Classify the state using the questions. Return only the required decisions. Do not estimate probabilities, confidence, or token usage."), new _langchain_core_messages.HumanMessage(input)], { signal }));
|
|
151
|
+
} catch (error) {
|
|
152
|
+
if (error instanceof require_types.DecisionError) throw error;
|
|
153
|
+
throw providerFailure(error, provider);
|
|
154
|
+
}
|
|
155
|
+
const result = {
|
|
156
|
+
model: modelId,
|
|
157
|
+
answers: readDecisions(output.parsed, entries, provider),
|
|
158
|
+
usage: readChatUsage(output.raw)
|
|
159
|
+
};
|
|
160
|
+
await waitFor(Promise.resolve());
|
|
161
|
+
try {
|
|
162
|
+
onAnswered?.(request.label ?? "decide", performance.now() - started);
|
|
163
|
+
} catch {}
|
|
164
|
+
return result;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//#endregion
|
|
170
|
+
exports.createStructuredChatDecisionModel = createStructuredChatDecisionModel;
|
|
171
|
+
|
|
172
|
+
//# sourceMappingURL=structuredChat.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredChat.cjs","names":["isDecisionObject","readDecisionUsage","DecisionError","failureForStatus","retryAfterMs","validateDecisionQuestions","withDecisionDeadline","DECISION_PROMPT_PREFIX","withDecisionStructuredOutput","SystemMessage","HumanMessage"],"sources":["../../../src/decisions/structuredChat.ts"],"mappings":";;;;;;;;AAgBA,MAAM,gBAAgB;AACtB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,cAAc;AAEpB,SAAgB,cAAc,KAAuC;CACnE,IAAI,CAACA,cAAAA,iBAAiB,GAAG,GACvB,OAAO;CAET,MAAM,QAAQC,cAAAA,kBAAkB,IAAI,cAAc;CAClD,MAAM,WAAWD,cAAAA,iBAAiB,IAAI,iBAAiB,IACnD,IAAI,oBACJ;CACJ,MAAM,SAASA,cAAAA,iBAAiB,UAAU,QAAQ,IAC9C,SAAS,WACT;CACJ,MAAM,UAAUA,cAAAA,iBAAiB,QAAQ,KAAK,IAC1C,OAAO,QACP,UAAU;CACd,IACE,OAAO,gBAAgB,KAAA,KACvB,CAACA,cAAAA,iBAAiB,OAAO,KACzB,MAAM,gBAAgB,QAAQ,aAE9B,OAAO;CAET,MAAM,OAAO,QAAQ;CACrB,MAAM,QAAQ,QAAQ;CACtB,IACG,QAAQ,SACN,OAAO,SAAS,YAAY,CAAC,OAAO,cAAc,IAAI,KAAK,OAAO,MACpE,SAAS,SACP,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,IAExE,OAAO;CAET,MAAM,cACJ,MAAM,eACL,OAAO,SAAS,WAAW,OAAO,MAClC,OAAO,UAAU,WAAW,QAAQ;CACvC,OAAO,OAAO,cAAc,WAAW,IAAI;EAAE,GAAG;EAAO;CAAY,IAAI;AACzE;AAEA,SAAS,gBAAgB,OAAgB,UAAiC;CACxE,MAAM,UAAUA,cAAAA,iBAAiB,KAAK,IAAI,QAAQ;CAClD,MAAM,WAAWA,cAAAA,iBAAiB,SAAS,SAAS,IAChD,QAAQ,YACR;CACJ,MAAM,YACJ,SAAS,UAAU,SAAS,cAAc,UAAU;CACtD,MAAM,SACJ,OAAO,cAAc,YACrB,OAAO,UAAU,SAAS,KAC1B,aAAa,OACb,aAAa,MACT,YACA,KAAA;CACN,MAAM,UAAU,IAAIE,cAAAA,cAClB,UAAU,OAAO,YAAYC,kBAAAA,iBAAiB,MAAM,GACpD,4CACA;EAAE;EAAU;CAAO,CACrB;CACA,MAAM,UAAU,SAAS;CACzB,IAAI,mBAAmB,SACrB,QAAQ,eAAeC,kBAAAA,aAAa,QAAQ,IAAI,aAAa,CAAC;CAEhE,OAAO;AACT;AAcA,SAAS,eACP,SACyB;CACzB,MAAM,aAAqC,OAAO,OAAO,IAAI;CAC7D,KAAK,MAAM,CAAC,IAAI,aAAa,SAAS;EACpC,IAAI,SAAS,SAAS,WAAW;GAC/B,WAAW,MAAM;IACf,MAAM;IACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,EAAE;IAC5C,UAAU,CAAC,UAAU;IACrB,sBAAsB;GACxB;GACA;EACF;EACA,WAAW,MAAM;GACf,MAAM;GACN,YAAY,EACV,QAAQ;IAAE,MAAM;IAAU,MAAM,OAAO,KAAK,SAAS,QAAQ;GAAE,EACjE;GACA,UAAU,CAAC,QAAQ;GACnB,sBAAsB;EACxB;CACF;CACA,OAAO;EACL,MAAM;EACN,YAAY,EACV,SAAS;GACP,MAAM;GACN;GACA,UAAU,QAAQ,KAAK,CAAC,QAAQ,EAAE;GAClC,sBAAsB;EACxB,EACF;EACA,UAAU,CAAC,SAAS;EACpB,sBAAsB;CACxB;AACF;AAGA,SAAS,cACP,QACA,SACA,UAC2B;CAC3B,MAAM,gBACJ,IAAIF,cAAAA,cACF,sBACA,4CACA,EACE,SACF,CACF;CACF,IACE,CAACF,cAAAA,iBAAiB,MAAM,KACxB,OAAO,KAAK,MAAM,CAAC,CAAC,WAAW,KAC/B,CAACA,cAAAA,iBAAiB,OAAO,OAAO,KAChC,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC,WAAW,QAAQ,QAE/C,MAAM,QAAQ;CAEhB,MAAM,UAAqC,OAAO,OAAO,IAAI;CAC7D,KAAK,MAAM,CAAC,IAAI,aAAa,SAAS;EACpC,IAAI,CAAC,OAAO,OAAO,OAAO,SAAS,EAAE,GACnC,MAAM,QAAQ;EAEhB,MAAM,MAAM,OAAO,QAAQ;EAC3B,IAAI,CAACA,cAAAA,iBAAiB,GAAG,KAAK,OAAO,KAAK,GAAG,CAAC,CAAC,WAAW,GACxD,MAAM,QAAQ;EAEhB,IAAI,SAAS,SAAS,WAAW;GAC/B,IAAI,OAAO,IAAI,aAAa,WAC1B,MAAM,QAAQ;GAEhB,QAAQ,MAAM;IACZ,MAAM;IACN,UAAU,IAAI;IACd,aAAa;GACf;GACA;EACF;EACA,IACE,SAAS,SAAS,YAClB,OAAO,IAAI,WAAW,YACtB,CAAC,OAAO,OAAO,SAAS,UAAU,IAAI,MAAM,GAE5C,MAAM,QAAQ;EAEhB,QAAQ,MAAM;GACZ,MAAM;GACN,QAAQ,IAAI;GACZ,YAAY;GACZ,eAAe;EACjB;CACF;CACA,OAAO;AACT;AAEA,SAAS,iBACP,WACA,UACA,cACmC;CACnC,MAAM,UAAUK,kBAAAA,0BAA0B,WAAW,QAAQ;CAC7D,IAAI,UAAU;CACd,KAAK,MAAM,GAAG,aAAa,SAAS;EAClC,IAAI,SAAS,SAAS,SACpB,MAAM,IAAIH,cAAAA,cACR,wBACA,8CACA,EAAE,SAAS,CACb;EAEF,IAAI,SAAS,SAAS,UACpB,WAAW,OAAO,KAAK,SAAS,QAAQ,CAAC,CAAC;CAE9C;CACA,IAAI,QAAQ,SAAS,gBAAgB,UAAU,oBAC7C,MAAM,IAAIA,cAAAA,cACR,wBACA,2CACA,EAAE,SAAS,CACb;CAEF,OAAO;AACT;AAGA,SAAgB,kCACd,SACe;CACf,MAAM,WAAW,QAAQ,cAAc;CACvC,IAAI,CAAC,CAAC,cAAc,iBAAiB,CAAC,CAAC,SAAS,QAAQ,MAAM,GAC5D,MAAM,IAAIA,cAAAA,cACR,oBACA,8CACA,EACE,SACF,CACF;CAEF,IAAI,CAAC,QAAQ,QAAQ,KAAK,GACxB,MAAM,IAAIA,cAAAA,cACR,eACA,sCACA,EACE,SACF,CACF;CAEF,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,IACE,CAAC,OAAO,cAAc,YAAY,KAClC,eAAe,KACf,eAAe,eAEf,MAAM,IAAIA,cAAAA,cACR,eACA,yCACA,EACE,SACF,CACF;CAEF,MAAM,EAAE,OAAO,WAAW;CAC1B,MAAM,UAAU,QAAQ,QAAQ,KAAK;CACrC,MAAM,YAAY,QAAQ,aAAa;CACvC,MAAM,aAAa,QAAQ;CAE3B,OAAO;EACL,IAAI;EACJ,OAAO;EACP,MAAM,OAAO,SAAmD;GAC9D,MAAM,UAAU,YAAY,IAAI;GAChC,OAAOI,iBAAAA,qBACL,UACA,QAAQ,aAAa,WACrB,QAAQ,QACR,OAAO,QAAQ,YAAY;IACzB,IAAI;IACJ,IAAI;IACJ,IAAI;KACF,UAAU,iBACR,QAAQ,WACR,UACA,YACF;KACA,QACEC,oBAAAA,yBACA,KAAK,UAAU;MACb,OAAO,QAAQ;MACf,WAAW,OAAO,YAAY,OAAO;KACvC,CAAC;IACL,SAAS,OAAO;KACd,IAAI,iBAAiBL,cAAAA,eACnB,MAAM;KAER,MAAM,IAAIA,cAAAA,cACR,eACA,kCACA,EACE,SACF,CACF;IACF;IACA,IAAI;IACJ,IAAI;KACF,aAAaM,yBAAAA,6BACX,OACA,eAAe,OAAO,GACtB,MACF;IACF,QAAQ;KACN,MAAM,IAAIN,cAAAA,cACR,oBACA,kDACA,EACE,SACF,CACF;IACF;IACA,MAAM,QAAQ,QAAQ,QAAQ,CAAC;IAC/B,IAAI;IACJ,IAAI;KACF,SAAS,MAAM,QACb,WAAW,OACT,CACE,IAAIO,yBAAAA,cACF,wIACF,GACA,IAAIC,yBAAAA,aAAa,KAAK,CACxB,GACA,EAAE,OAAO,CACX,CACF;IACF,SAAS,OAAO;KACd,IAAI,iBAAiBR,cAAAA,eACnB,MAAM;KAER,MAAM,gBAAgB,OAAO,QAAQ;IACvC;IAEA,MAAM,SAAyB;KAC7B,OAAO;KACP,SAHc,cAAc,OAAO,QAAQ,SAAS,QAG9C;KACN,OAAO,cAAc,OAAO,GAAG;IACjC;IACA,MAAM,QAAQ,QAAQ,QAAQ,CAAC;IAC/B,IAAI;KACF,aACE,QAAQ,SAAS,UACjB,YAAY,IAAI,IAAI,OACtB;IACF,QAAQ,CAER;IACA,OAAO;GACT,CACF;EACF;CACF;AACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/decisions/structuredOutput.ts
|
|
2
|
+
function withDecisionStructuredOutput(model, schema, method) {
|
|
3
|
+
const options = {
|
|
4
|
+
name: "DecideQuestions",
|
|
5
|
+
method,
|
|
6
|
+
includeRaw: true
|
|
7
|
+
};
|
|
8
|
+
const adapter = model._llmType();
|
|
9
|
+
if (adapter === "openai" || adapter === "azure_openai" || adapter === "anthropic" && method === "functionCalling") return model.withStructuredOutput(schema, {
|
|
10
|
+
...options,
|
|
11
|
+
strict: true
|
|
12
|
+
});
|
|
13
|
+
throw new Error("unverified strict decision model adapter");
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
exports.withDecisionStructuredOutput = withDecisionStructuredOutput;
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=structuredOutput.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredOutput.cjs","names":[],"sources":["../../../src/decisions/structuredOutput.ts"],"mappings":";AAKA,SAAgB,6BACd,OACA,QACA,QACmD;CACnD,MAAM,UAAU;EACd,MAAM;EACN;EACA,YAAY;CACd;CACA,MAAM,UAAU,MAAM,SAAS;CAC/B,IACE,YAAY,YACZ,YAAY,kBACX,YAAY,eAAe,WAAW,mBAEvC,OAAO,MAAM,qBAAqB,QAAQ;EAAE,GAAG;EAAS,QAAQ;CAAK,CAAC;CAExE,MAAM,IAAI,MAAM,0CAA0C;AAC5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceMarker.cjs","names":[],"sources":["../../../src/decisions/traceMarker.ts"],"mappings":";AACA,MAAa,yBAAyB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
const require_types = require("./types.cjs");
|
|
2
|
+
const require_deadline = require("./deadline.cjs");
|
|
3
|
+
//#region src/decisions/transport.ts
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 4e3;
|
|
5
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
6
|
+
const MAX_RESPONSE_BYTES = 256 * 1024;
|
|
7
|
+
const BACKOFF_MS = [
|
|
8
|
+
250,
|
|
9
|
+
750,
|
|
10
|
+
1500,
|
|
11
|
+
3e3,
|
|
12
|
+
6e3
|
|
13
|
+
];
|
|
14
|
+
const MAX_RETRY_AFTER_MS = 1e4;
|
|
15
|
+
function failureForStatus(status) {
|
|
16
|
+
if (status === 401 || status === 403) return "unauthorized";
|
|
17
|
+
if (status === 429) return "rate_limited";
|
|
18
|
+
if (status >= 500) return "server_error";
|
|
19
|
+
return "bad_request";
|
|
20
|
+
}
|
|
21
|
+
function retryAfterMs(header) {
|
|
22
|
+
if (header == null || header === "") return;
|
|
23
|
+
const seconds = Number(header);
|
|
24
|
+
if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1e3, MAX_RETRY_AFTER_MS);
|
|
25
|
+
const at = Date.parse(header);
|
|
26
|
+
return Number.isFinite(at) ? Math.min(Math.max(at - Date.now(), 0), MAX_RETRY_AFTER_MS) : void 0;
|
|
27
|
+
}
|
|
28
|
+
function defaultSleep(ms, signal) {
|
|
29
|
+
if (signal?.aborted === true) return Promise.resolve();
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
const done = () => {
|
|
32
|
+
clearTimeout(timer);
|
|
33
|
+
signal?.removeEventListener("abort", done);
|
|
34
|
+
resolve();
|
|
35
|
+
};
|
|
36
|
+
const timer = setTimeout(done, ms);
|
|
37
|
+
signal?.addEventListener("abort", done, { once: true });
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
async function readResponse(body, waitFor, provider) {
|
|
41
|
+
if (!body) return "";
|
|
42
|
+
const reader = body.getReader();
|
|
43
|
+
const decoder = new TextDecoder();
|
|
44
|
+
let bytes = 0;
|
|
45
|
+
let text = "";
|
|
46
|
+
try {
|
|
47
|
+
for (;;) {
|
|
48
|
+
const chunk = await waitFor(reader.read());
|
|
49
|
+
if (chunk.done) return text + decoder.decode();
|
|
50
|
+
bytes += chunk.value.byteLength;
|
|
51
|
+
if (bytes > MAX_RESPONSE_BYTES) throw new require_types.DecisionError("malformed_response", "decision model response too large", { provider });
|
|
52
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
reader.cancel().catch(() => {});
|
|
56
|
+
throw error;
|
|
57
|
+
} finally {
|
|
58
|
+
try {
|
|
59
|
+
reader.releaseLock();
|
|
60
|
+
} catch {}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function createTransport(options) {
|
|
64
|
+
const { providerId } = options;
|
|
65
|
+
const credential = options.apiKey;
|
|
66
|
+
if (options.requiresAuth !== false && (credential == null || typeof credential === "string" && credential.trim() === "")) throw new require_types.DecisionError("unauthorized", "decision model requires an API key", { provider: providerId });
|
|
67
|
+
const endpoint = options.endpoint.trim();
|
|
68
|
+
if (!endpoint) throw new require_types.DecisionError("bad_request", "decision model requires an endpoint", { provider: providerId });
|
|
69
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
70
|
+
const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
71
|
+
const sleep = options.sleep ?? defaultSleep;
|
|
72
|
+
const onAnswered = options.onAnswered;
|
|
73
|
+
if (!Number.isSafeInteger(maxRetries) || maxRetries < 0 || maxRetries > 5) throw new require_types.DecisionError("bad_request", "invalid decision model retry limit", { provider: providerId });
|
|
74
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
75
|
+
if (typeof fetchImpl !== "function") throw new require_types.DecisionError("network", "no fetch implementation available", { provider: providerId });
|
|
76
|
+
async function resolveKey(refresh, signal) {
|
|
77
|
+
if (typeof credential === "string") return credential.trim() || null;
|
|
78
|
+
if (!credential) return null;
|
|
79
|
+
const minted = await credential({
|
|
80
|
+
refresh,
|
|
81
|
+
signal
|
|
82
|
+
});
|
|
83
|
+
const token = typeof minted === "string" ? minted.trim() : "";
|
|
84
|
+
if (!token) throw new require_types.DecisionError("unauthorized", "credential function returned no token", { provider: providerId });
|
|
85
|
+
return token;
|
|
86
|
+
}
|
|
87
|
+
return async function send(prepare, callerSignal, label, timeoutOverrideMs) {
|
|
88
|
+
const started = performance.now();
|
|
89
|
+
return require_deadline.withDecisionDeadline(providerId, timeoutOverrideMs ?? timeoutMs, callerSignal, async (signal, waitFor) => {
|
|
90
|
+
let prepared;
|
|
91
|
+
try {
|
|
92
|
+
prepared = prepare();
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (error instanceof require_types.DecisionError) throw error;
|
|
95
|
+
throw new require_types.DecisionError("bad_request", "invalid decision model request", { provider: providerId });
|
|
96
|
+
}
|
|
97
|
+
const { payload, parse } = prepared;
|
|
98
|
+
await waitFor(Promise.resolve());
|
|
99
|
+
const wasAborted = () => signal.aborted;
|
|
100
|
+
const interrupted = () => new require_types.DecisionError(callerSignal?.aborted === true ? "aborted" : "timeout", "decision model request interrupted", { provider: providerId });
|
|
101
|
+
let refreshed = false;
|
|
102
|
+
let key;
|
|
103
|
+
let lastError;
|
|
104
|
+
for (let attemptNo = 0; attemptNo <= maxRetries; attemptNo++) {
|
|
105
|
+
if (wasAborted()) throw interrupted();
|
|
106
|
+
try {
|
|
107
|
+
if (key === void 0) key = await waitFor(resolveKey(refreshed, signal));
|
|
108
|
+
const response = await waitFor(fetchImpl(endpoint, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: {
|
|
111
|
+
...key !== null ? { Authorization: `Bearer ${key}` } : {},
|
|
112
|
+
"Content-Type": "application/json"
|
|
113
|
+
},
|
|
114
|
+
body: payload,
|
|
115
|
+
signal,
|
|
116
|
+
redirect: "error"
|
|
117
|
+
}));
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
response.body?.cancel().catch(() => {});
|
|
120
|
+
const error = new require_types.DecisionError(failureForStatus(response.status), `decision model returned HTTP ${response.status}`, {
|
|
121
|
+
provider: providerId,
|
|
122
|
+
status: response.status
|
|
123
|
+
});
|
|
124
|
+
error.retryAfterMs = retryAfterMs(response.headers.get("retry-after"));
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
const body = await readResponse(response.body, waitFor, providerId);
|
|
128
|
+
const result = await waitFor(Promise.resolve(parse(body)));
|
|
129
|
+
try {
|
|
130
|
+
onAnswered?.(label, performance.now() - started);
|
|
131
|
+
} catch {}
|
|
132
|
+
return result;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
if (wasAborted()) throw interrupted();
|
|
135
|
+
if (error instanceof require_types.DecisionError) lastError = error;
|
|
136
|
+
else lastError = new require_types.DecisionError("network", "decision model request failed", { provider: providerId });
|
|
137
|
+
if (lastError.status === 401 && typeof credential === "function" && !refreshed) {
|
|
138
|
+
refreshed = true;
|
|
139
|
+
key = void 0;
|
|
140
|
+
attemptNo -= 1;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (attemptNo === maxRetries || ![
|
|
144
|
+
"rate_limited",
|
|
145
|
+
"server_error",
|
|
146
|
+
"network"
|
|
147
|
+
].includes(lastError.failure)) break;
|
|
148
|
+
const wait = lastError.retryAfterMs ?? BACKOFF_MS[Math.min(attemptNo, BACKOFF_MS.length - 1)];
|
|
149
|
+
try {
|
|
150
|
+
await waitFor(sleep(wait, signal));
|
|
151
|
+
} catch (error) {
|
|
152
|
+
if (error instanceof require_types.DecisionError) throw error;
|
|
153
|
+
throw new require_types.DecisionError("network", "decision model backoff failed", { provider: providerId });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
throw lastError ?? new require_types.DecisionError("network", "decision model request failed", { provider: providerId });
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//#endregion
|
|
162
|
+
exports.createTransport = createTransport;
|
|
163
|
+
exports.failureForStatus = failureForStatus;
|
|
164
|
+
exports.retryAfterMs = retryAfterMs;
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=transport.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.cjs","names":["DecisionError","withDecisionDeadline"],"sources":["../../../src/decisions/transport.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/decisions/types.ts
|
|
2
|
+
var DecisionError = class extends Error {
|
|
3
|
+
failure;
|
|
4
|
+
provider;
|
|
5
|
+
status;
|
|
6
|
+
retryAfterMs;
|
|
7
|
+
constructor(failure, message, options) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "DecisionError";
|
|
10
|
+
this.failure = failure;
|
|
11
|
+
this.provider = options?.provider ?? "unknown";
|
|
12
|
+
this.status = options?.status;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
function isDecisionObject(value) {
|
|
16
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function readDecisionUsage(raw) {
|
|
19
|
+
if (!isDecisionObject(raw)) return null;
|
|
20
|
+
const input = raw.input_tokens;
|
|
21
|
+
const output = raw.output_tokens;
|
|
22
|
+
const usage = {};
|
|
23
|
+
if (typeof input === "number" && Number.isSafeInteger(input) && input >= 0) usage.inputTokens = input;
|
|
24
|
+
if (typeof output === "number" && Number.isSafeInteger(output) && output >= 0) usage.outputTokens = output;
|
|
25
|
+
return Object.keys(usage).length > 0 ? usage : null;
|
|
26
|
+
}
|
|
27
|
+
function isBooleanAnswer(answer) {
|
|
28
|
+
return answer?.type === "boolean";
|
|
29
|
+
}
|
|
30
|
+
function isChoiceAnswer(answer) {
|
|
31
|
+
return answer?.type === "choice";
|
|
32
|
+
}
|
|
33
|
+
function isScoreAnswer(answer) {
|
|
34
|
+
return answer?.type === "score";
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.DecisionError = DecisionError;
|
|
38
|
+
exports.isBooleanAnswer = isBooleanAnswer;
|
|
39
|
+
exports.isChoiceAnswer = isChoiceAnswer;
|
|
40
|
+
exports.isDecisionObject = isDecisionObject;
|
|
41
|
+
exports.isScoreAnswer = isScoreAnswer;
|
|
42
|
+
exports.readDecisionUsage = readDecisionUsage;
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","names":[],"sources":["../../../src/decisions/types.ts"],"mappings":";AAkIA,IAAa,gBAAb,cAAmC,MAAM;CACvC;CACA;CACA;CACA;CAEA,YACE,SACA,SACA,SACA;EACA,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,WAAW,SAAS,YAAY;EACrC,KAAK,SAAS,SAAS;CACzB;AACF;AAGA,SAAgB,iBACd,OACqC;CACrC,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAgB,kBAAkB,KAAoC;CACpE,IAAI,CAAC,iBAAiB,GAAG,GACvB,OAAO;CAET,MAAM,QAAQ,IAAI;CAClB,MAAM,SAAS,IAAI;CACnB,MAAM,QAAuB,CAAC;CAC9B,IAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GACvE,MAAM,cAAc;CAEtB,IACE,OAAO,WAAW,YAClB,OAAO,cAAc,MAAM,KAC3B,UAAU,GAEV,MAAM,eAAe;CAEvB,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,QAAQ;AACjD;AAEA,SAAgB,gBACd,QACyB;CACzB,OAAO,QAAQ,SAAS;AAC1B;AAEA,SAAgB,eACd,QACwB;CACxB,OAAO,QAAQ,SAAS;AAC1B;AAEA,SAAgB,cACd,QACuB;CACvB,OAAO,QAAQ,SAAS;AAC1B"}
|
|
@@ -16,10 +16,13 @@ const require_core = require("../messages/core.cjs");
|
|
|
16
16
|
const require_preempt = require("../llm/preempt.cjs");
|
|
17
17
|
const require_callbacks = require("../utils/callbacks.cjs");
|
|
18
18
|
const require_langfuse = require("../langfuse.cjs");
|
|
19
|
-
const require_fading = require("../messages/fading.cjs");
|
|
20
19
|
const require_runStepResume = require("../tools/runStepResume.cjs");
|
|
20
|
+
const require_fading = require("../messages/fading.cjs");
|
|
21
21
|
const require_SubagentReplay = require("../tools/subagent/SubagentReplay.cjs");
|
|
22
22
|
const require_applyGraphRuntimeConfig = require("./applyGraphRuntimeConfig.cjs");
|
|
23
|
+
const require_preparedSubagents = require("../tools/preparedSubagents.cjs");
|
|
24
|
+
const require_streamLimits = require("../llm/streamLimits.cjs");
|
|
25
|
+
const require_providerText = require("../protection/providerText.cjs");
|
|
23
26
|
const require_tokens = require("../utils/tokens.cjs");
|
|
24
27
|
const require_llm = require("../utils/llm.cjs");
|
|
25
28
|
const require_executeHooks = require("../hooks/executeHooks.cjs");
|
|
@@ -43,14 +46,13 @@ const require_recency = require("../messages/recency.cjs");
|
|
|
43
46
|
const require_assistantPhase = require("../messages/assistantPhase.cjs");
|
|
44
47
|
require("../messages/index.cjs");
|
|
45
48
|
const require_graph = require("../utils/graph.cjs");
|
|
46
|
-
const require_streamLimits = require("../llm/streamLimits.cjs");
|
|
47
49
|
const require_handlers = require("../tools/handlers.cjs");
|
|
48
50
|
const require_acceptedModelResponse = require("./acceptedModelResponse.cjs");
|
|
49
51
|
const require_toolOutputReferences = require("../tools/toolOutputReferences.cjs");
|
|
50
|
-
const require_preparedSubagents = require("../tools/preparedSubagents.cjs");
|
|
51
52
|
const require_events$1 = require("../events.cjs");
|
|
52
53
|
const require_run = require("../utils/run.cjs");
|
|
53
54
|
require("../utils/index.cjs");
|
|
55
|
+
const require_hostArgs = require("../tools/subagent/hostArgs.cjs");
|
|
54
56
|
const require_childGraphConfig = require("../tools/subagent/childGraphConfig.cjs");
|
|
55
57
|
const require_SubagentExecutor = require("../tools/subagent/SubagentExecutor.cjs");
|
|
56
58
|
require("../tools/subagent/index.cjs");
|
|
@@ -558,8 +560,10 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
558
560
|
subagentTasks;
|
|
559
561
|
subagentExecutionContext;
|
|
560
562
|
subagentContext;
|
|
563
|
+
onSubagentResolutionFailure;
|
|
561
564
|
preemption;
|
|
562
565
|
streamLimits;
|
|
566
|
+
providerTextProtection;
|
|
563
567
|
streamedToolCallArgTallies = /* @__PURE__ */ new Map();
|
|
564
568
|
streamDeltaEventCounts = /* @__PURE__ */ new Map();
|
|
565
569
|
streamLimitChargeCredits;
|
|
@@ -571,8 +575,8 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
571
575
|
});
|
|
572
576
|
activeStreamLimitGenerations;
|
|
573
577
|
resolveTrippedBreakerReason(breakerSignal = this.breakerAbort.signal) {
|
|
574
|
-
if (breakerSignal.aborted && (breakerSignal.reason instanceof require_streamLimits.StreamLimitExceededError || breakerSignal.reason instanceof require_preparedSubagents.PreparedSubagentError)) return breakerSignal.reason;
|
|
575
|
-
if (this.signal?.aborted === true && (this.signal.reason instanceof require_streamLimits.StreamLimitExceededError || this.signal.reason instanceof require_preparedSubagents.PreparedSubagentError)) return this.signal.reason;
|
|
578
|
+
if (breakerSignal.aborted && (breakerSignal.reason instanceof require_streamLimits.StreamLimitExceededError || breakerSignal.reason instanceof require_preparedSubagents.PreparedSubagentError || breakerSignal.reason instanceof require_providerText.ProviderTextProtectionError)) return breakerSignal.reason;
|
|
579
|
+
if (this.signal?.aborted === true && (this.signal.reason instanceof require_streamLimits.StreamLimitExceededError || this.signal.reason instanceof require_preparedSubagents.PreparedSubagentError || this.signal.reason instanceof require_providerText.ProviderTextProtectionError)) return this.signal.reason;
|
|
576
580
|
}
|
|
577
581
|
preemptSealBudgetUsed = 0;
|
|
578
582
|
preemptSealCount = 0;
|
|
@@ -585,7 +589,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
585
589
|
preemptHaltReason;
|
|
586
590
|
pendingPreemptReturn = /* @__PURE__ */ new Set();
|
|
587
591
|
preemptRestartPending = /* @__PURE__ */ new Set();
|
|
588
|
-
constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, fadingTier, fadingTiers, subagentUsageSink, subagentTasks, subagentScope, subagentExecutionContext, subagentContext, preemption, streamLimits, toolExecution, clientDelegatedToolNames }, dependencies) {
|
|
592
|
+
constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, fadingTier, fadingTiers, subagentUsageSink, subagentTasks, subagentScope, subagentExecutionContext, subagentContext, onSubagentResolutionFailure, preemption, streamLimits, providerTextProtection, toolExecution, clientDelegatedToolNames }, dependencies) {
|
|
589
593
|
super();
|
|
590
594
|
this.supportsMultiAgentChildren = dependencies != null;
|
|
591
595
|
this.graphFactory = dependencies?.graphFactory ?? ((request) => {
|
|
@@ -601,8 +605,11 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
601
605
|
this.subagentScope = subagentScope === true;
|
|
602
606
|
this.subagentExecutionContext = subagentExecutionContext;
|
|
603
607
|
this.subagentContext = subagentContext;
|
|
608
|
+
this.onSubagentResolutionFailure = onSubagentResolutionFailure;
|
|
604
609
|
this.preemption = preemption;
|
|
605
610
|
this.streamLimits = require_streamLimits.resolveStreamLimits(streamLimits);
|
|
611
|
+
if (providerTextProtection != null) require_providerText.validateProviderTextProtection(providerTextProtection);
|
|
612
|
+
this.providerTextProtection = providerTextProtection;
|
|
606
613
|
this.toolExecution = toolExecution;
|
|
607
614
|
if (clientDelegatedToolNames != null && clientDelegatedToolNames.length > 0) {
|
|
608
615
|
if (agents.length !== 1) throw new Error("Client tool delegation requires a single-agent graph");
|
|
@@ -1820,7 +1827,10 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1820
1827
|
graph: this,
|
|
1821
1828
|
metadata
|
|
1822
1829
|
});
|
|
1823
|
-
if (primaryError instanceof require_acceptedModelResponse.InvalidModelToolCallError
|
|
1830
|
+
if (primaryError instanceof require_acceptedModelResponse.InvalidModelToolCallError || primaryError instanceof require_providerText.ProviderTextProtectionError) {
|
|
1831
|
+
if (primaryError instanceof require_providerText.ProviderTextProtectionError) attemptBreaker.abort(primaryError);
|
|
1832
|
+
throw primaryError;
|
|
1833
|
+
}
|
|
1824
1834
|
if (primaryError instanceof require_streamLimits.StreamLimitExceededError || primaryError instanceof require_preparedSubagents.PreparedSubagentError) {
|
|
1825
1835
|
attemptBreaker.abort(primaryError);
|
|
1826
1836
|
throw primaryError;
|
|
@@ -1966,7 +1976,10 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1966
1976
|
}
|
|
1967
1977
|
}));
|
|
1968
1978
|
} catch (fallbackError) {
|
|
1969
|
-
if (fallbackError instanceof require_acceptedModelResponse.InvalidModelToolCallError
|
|
1979
|
+
if (fallbackError instanceof require_acceptedModelResponse.InvalidModelToolCallError || fallbackError instanceof require_providerText.ProviderTextProtectionError) {
|
|
1980
|
+
if (fallbackError instanceof require_providerText.ProviderTextProtectionError) attemptBreaker.abort(fallbackError);
|
|
1981
|
+
throw fallbackError;
|
|
1982
|
+
}
|
|
1970
1983
|
if (fallbackError instanceof require_streamLimits.StreamLimitExceededError || fallbackError instanceof require_preparedSubagents.PreparedSubagentError) {
|
|
1971
1984
|
attemptBreaker.abort(fallbackError);
|
|
1972
1985
|
throw fallbackError;
|
|
@@ -2235,7 +2248,9 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2235
2248
|
usageSink: this.subagentUsageSink,
|
|
2236
2249
|
taskConfig: this.subagentTasks,
|
|
2237
2250
|
subagentContext: this.subagentContext,
|
|
2251
|
+
onResolutionFailure: this.onSubagentResolutionFailure,
|
|
2238
2252
|
streamLimits: this.streamLimits,
|
|
2253
|
+
providerTextProtection: this.providerTextProtection,
|
|
2239
2254
|
humanInTheLoop: this.humanInTheLoop,
|
|
2240
2255
|
checkpointer: this.compileOptions?.checkpointer,
|
|
2241
2256
|
maxDepth: effectiveSubagentDepth,
|
|
@@ -2247,8 +2262,11 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2247
2262
|
createDetachedChildGraphFactory: (parentHandlerRegistry) => snapshotChildGraphFactory(parentHandlerRegistry)
|
|
2248
2263
|
});
|
|
2249
2264
|
this.registerSubagentExecutor(executor);
|
|
2265
|
+
const hostArgNames = require_hostArgs.collectSubagentHostArgNames(executableConfigs);
|
|
2250
2266
|
const subagentTool = (0, _langchain_core_tools.tool)(async (rawInput, config) => {
|
|
2251
2267
|
const input = rawInput;
|
|
2268
|
+
const hostArgInput = require_hostArgs.pickSubagentHostArgInput(input, hostArgNames);
|
|
2269
|
+
if (!hostArgInput.ok) return hostArgInput.message;
|
|
2252
2270
|
const description = typeof input.description === "string" && input.description.trim().length > 0 ? input.description : require_SubagentExecutor.DEFAULT_SUBAGENT_DESCRIPTION;
|
|
2253
2271
|
const subagentType = typeof input.subagent_type === "string" ? input.subagent_type : "";
|
|
2254
2272
|
const subagentThreadId = typeof input.subagent_thread_id === "string" && input.subagent_thread_id.trim() !== "" ? input.subagent_thread_id.trim() : void 0;
|
|
@@ -2266,7 +2284,8 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2266
2284
|
signal: config.signal,
|
|
2267
2285
|
parentToolCallId,
|
|
2268
2286
|
breaker: batchScope?.controller,
|
|
2269
|
-
parentConfigurable: config.configurable
|
|
2287
|
+
parentConfigurable: config.configurable,
|
|
2288
|
+
...hostArgInput.hostArgs == null ? {} : { hostArgs: hostArgInput.hostArgs }
|
|
2270
2289
|
};
|
|
2271
2290
|
if (input.run_in_background === true) return executor.executeInBackground({
|
|
2272
2291
|
...executeParams,
|