@illuma-ai/agents 1.1.20 → 1.1.22
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/graphs/Graph.cjs +12 -1
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +85 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +14 -0
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +20 -9
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +12 -1
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +85 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +14 -0
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/run.mjs +20 -9
- package/dist/esm/run.mjs.map +1 -1
- package/dist/types/graphs/MultiAgentGraph.d.ts +17 -0
- package/package.json +1 -1
- package/src/graphs/Graph.ts +12 -1
- package/src/graphs/MultiAgentGraph.ts +105 -1
- package/src/graphs/__tests__/multi-agent-delegate.test.ts +191 -0
- package/src/llm/bedrock/index.ts +17 -0
- package/src/run.ts +20 -11
- package/src/scripts/test-bedrock-handoff-autonomous.ts +231 -0
- package/src/agents/AgentContext.js +0 -782
- package/src/agents/AgentContext.test.js +0 -421
- package/src/agents/__tests__/AgentContext.test.js +0 -678
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js +0 -117
- package/src/common/enum.js +0 -192
- package/src/common/index.js +0 -3
- package/src/events.js +0 -166
- package/src/graphs/Graph.js +0 -1857
- package/src/graphs/MultiAgentGraph.js +0 -1092
- package/src/graphs/__tests__/structured-output.integration.test.js +0 -624
- package/src/graphs/__tests__/structured-output.test.js +0 -144
- package/src/graphs/contextManagement.e2e.test.js +0 -718
- package/src/graphs/contextManagement.test.js +0 -485
- package/src/graphs/handoffValidation.test.js +0 -276
- package/src/graphs/index.js +0 -3
- package/src/index.js +0 -28
- package/src/instrumentation.js +0 -21
- package/src/llm/anthropic/index.js +0 -319
- package/src/llm/anthropic/types.js +0 -46
- package/src/llm/anthropic/utils/message_inputs.js +0 -627
- package/src/llm/anthropic/utils/message_outputs.js +0 -290
- package/src/llm/anthropic/utils/output_parsers.js +0 -89
- package/src/llm/anthropic/utils/tools.js +0 -25
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js +0 -392
- package/src/llm/bedrock/index.js +0 -303
- package/src/llm/bedrock/types.js +0 -2
- package/src/llm/bedrock/utils/index.js +0 -6
- package/src/llm/bedrock/utils/message_inputs.js +0 -463
- package/src/llm/bedrock/utils/message_outputs.js +0 -269
- package/src/llm/fake.js +0 -92
- package/src/llm/google/index.js +0 -215
- package/src/llm/google/types.js +0 -12
- package/src/llm/google/utils/common.js +0 -670
- package/src/llm/google/utils/tools.js +0 -111
- package/src/llm/google/utils/zod_to_genai_parameters.js +0 -47
- package/src/llm/openai/index.js +0 -1033
- package/src/llm/openai/types.js +0 -2
- package/src/llm/openai/utils/index.js +0 -756
- package/src/llm/openai/utils/isReasoningModel.test.js +0 -79
- package/src/llm/openrouter/index.js +0 -261
- package/src/llm/openrouter/reasoning.test.js +0 -181
- package/src/llm/providers.js +0 -36
- package/src/llm/text.js +0 -65
- package/src/llm/vertexai/index.js +0 -402
- package/src/messages/__tests__/tools.test.js +0 -392
- package/src/messages/cache.js +0 -404
- package/src/messages/cache.test.js +0 -1167
- package/src/messages/content.js +0 -48
- package/src/messages/content.test.js +0 -314
- package/src/messages/core.js +0 -359
- package/src/messages/ensureThinkingBlock.test.js +0 -997
- package/src/messages/format.js +0 -973
- package/src/messages/formatAgentMessages.test.js +0 -2278
- package/src/messages/formatAgentMessages.tools.test.js +0 -362
- package/src/messages/formatMessage.test.js +0 -608
- package/src/messages/ids.js +0 -18
- package/src/messages/index.js +0 -9
- package/src/messages/labelContentByAgent.test.js +0 -725
- package/src/messages/prune.js +0 -438
- package/src/messages/reducer.js +0 -60
- package/src/messages/shiftIndexTokenCountMap.test.js +0 -63
- package/src/messages/summarize.js +0 -146
- package/src/messages/summarize.test.js +0 -332
- package/src/messages/tools.js +0 -90
- package/src/mockStream.js +0 -81
- package/src/prompts/collab.js +0 -7
- package/src/prompts/index.js +0 -3
- package/src/prompts/taskmanager.js +0 -58
- package/src/run.js +0 -427
- package/src/schemas/index.js +0 -3
- package/src/schemas/schema-preparation.test.js +0 -370
- package/src/schemas/validate.js +0 -314
- package/src/schemas/validate.test.js +0 -264
- package/src/scripts/abort.js +0 -127
- package/src/scripts/ant_web_search.js +0 -130
- package/src/scripts/ant_web_search_edge_case.js +0 -133
- package/src/scripts/ant_web_search_error_edge_case.js +0 -119
- package/src/scripts/args.js +0 -41
- package/src/scripts/bedrock-cache-debug.js +0 -186
- package/src/scripts/bedrock-content-aggregation-test.js +0 -195
- package/src/scripts/bedrock-merge-test.js +0 -80
- package/src/scripts/bedrock-parallel-tools-test.js +0 -150
- package/src/scripts/caching.js +0 -106
- package/src/scripts/cli.js +0 -152
- package/src/scripts/cli2.js +0 -119
- package/src/scripts/cli3.js +0 -163
- package/src/scripts/cli4.js +0 -165
- package/src/scripts/cli5.js +0 -165
- package/src/scripts/code_exec.js +0 -171
- package/src/scripts/code_exec_files.js +0 -180
- package/src/scripts/code_exec_multi_session.js +0 -185
- package/src/scripts/code_exec_ptc.js +0 -265
- package/src/scripts/code_exec_session.js +0 -217
- package/src/scripts/code_exec_simple.js +0 -120
- package/src/scripts/content.js +0 -111
- package/src/scripts/empty_input.js +0 -125
- package/src/scripts/handoff-test.js +0 -96
- package/src/scripts/image.js +0 -138
- package/src/scripts/memory.js +0 -83
- package/src/scripts/multi-agent-chain.js +0 -271
- package/src/scripts/multi-agent-conditional.js +0 -185
- package/src/scripts/multi-agent-document-review-chain.js +0 -171
- package/src/scripts/multi-agent-hybrid-flow.js +0 -264
- package/src/scripts/multi-agent-parallel-start.js +0 -214
- package/src/scripts/multi-agent-parallel.js +0 -346
- package/src/scripts/multi-agent-sequence.js +0 -184
- package/src/scripts/multi-agent-supervisor.js +0 -324
- package/src/scripts/multi-agent-test.js +0 -147
- package/src/scripts/parallel-asymmetric-tools-test.js +0 -202
- package/src/scripts/parallel-full-metadata-test.js +0 -176
- package/src/scripts/parallel-tools-test.js +0 -256
- package/src/scripts/programmatic_exec.js +0 -277
- package/src/scripts/programmatic_exec_agent.js +0 -168
- package/src/scripts/search.js +0 -118
- package/src/scripts/sequential-full-metadata-test.js +0 -143
- package/src/scripts/simple.js +0 -174
- package/src/scripts/single-agent-metadata-test.js +0 -152
- package/src/scripts/stream.js +0 -113
- package/src/scripts/test-custom-prompt-key.js +0 -132
- package/src/scripts/test-handoff-input.js +0 -143
- package/src/scripts/test-handoff-preamble.js +0 -227
- package/src/scripts/test-handoff-steering.js +0 -353
- package/src/scripts/test-multi-agent-list-handoff.js +0 -318
- package/src/scripts/test-parallel-agent-labeling.js +0 -253
- package/src/scripts/test-parallel-handoffs.js +0 -229
- package/src/scripts/test-thinking-handoff-bedrock.js +0 -132
- package/src/scripts/test-thinking-handoff.js +0 -132
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js +0 -140
- package/src/scripts/test-tool-before-handoff-role-order.js +0 -223
- package/src/scripts/test-tools-before-handoff.js +0 -187
- package/src/scripts/test_code_api.js +0 -263
- package/src/scripts/thinking-bedrock.js +0 -128
- package/src/scripts/thinking-vertexai.js +0 -130
- package/src/scripts/thinking.js +0 -134
- package/src/scripts/tool_search.js +0 -114
- package/src/scripts/tools.js +0 -125
- package/src/specs/agent-handoffs-bedrock.integration.test.js +0 -280
- package/src/specs/agent-handoffs.test.js +0 -924
- package/src/specs/anthropic.simple.test.js +0 -287
- package/src/specs/azure.simple.test.js +0 -381
- package/src/specs/cache.simple.test.js +0 -282
- package/src/specs/custom-event-await.test.js +0 -148
- package/src/specs/deepseek.simple.test.js +0 -189
- package/src/specs/emergency-prune.test.js +0 -308
- package/src/specs/moonshot.simple.test.js +0 -237
- package/src/specs/observability.integration.test.js +0 -1337
- package/src/specs/openai.simple.test.js +0 -233
- package/src/specs/openrouter.simple.test.js +0 -202
- package/src/specs/prune.test.js +0 -733
- package/src/specs/reasoning.test.js +0 -144
- package/src/specs/spec.utils.js +0 -4
- package/src/specs/thinking-handoff.test.js +0 -486
- package/src/specs/thinking-prune.test.js +0 -600
- package/src/specs/token-distribution-edge-case.test.js +0 -246
- package/src/specs/token-memoization.test.js +0 -32
- package/src/specs/tokens.test.js +0 -49
- package/src/specs/tool-error.test.js +0 -139
- package/src/splitStream.js +0 -204
- package/src/splitStream.test.js +0 -504
- package/src/stream.js +0 -650
- package/src/stream.test.js +0 -225
- package/src/test/mockTools.js +0 -340
- package/src/tools/BrowserTools.js +0 -245
- package/src/tools/Calculator.js +0 -38
- package/src/tools/Calculator.test.js +0 -225
- package/src/tools/CodeExecutor.js +0 -233
- package/src/tools/ProgrammaticToolCalling.js +0 -602
- package/src/tools/StreamingToolCallBuffer.js +0 -179
- package/src/tools/ToolNode.js +0 -930
- package/src/tools/ToolSearch.js +0 -904
- package/src/tools/__tests__/BrowserTools.test.js +0 -306
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js +0 -276
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js +0 -807
- package/src/tools/__tests__/StreamingToolCallBuffer.test.js +0 -175
- package/src/tools/__tests__/ToolApproval.test.js +0 -675
- package/src/tools/__tests__/ToolNode.recovery.test.js +0 -200
- package/src/tools/__tests__/ToolNode.session.test.js +0 -319
- package/src/tools/__tests__/ToolSearch.integration.test.js +0 -125
- package/src/tools/__tests__/ToolSearch.test.js +0 -812
- package/src/tools/__tests__/handlers.test.js +0 -799
- package/src/tools/__tests__/truncation-recovery.integration.test.js +0 -362
- package/src/tools/handlers.js +0 -306
- package/src/tools/schema.js +0 -25
- package/src/tools/search/anthropic.js +0 -34
- package/src/tools/search/content.js +0 -116
- package/src/tools/search/content.test.js +0 -133
- package/src/tools/search/firecrawl.js +0 -173
- package/src/tools/search/format.js +0 -198
- package/src/tools/search/highlights.js +0 -241
- package/src/tools/search/index.js +0 -3
- package/src/tools/search/jina-reranker.test.js +0 -106
- package/src/tools/search/rerankers.js +0 -165
- package/src/tools/search/schema.js +0 -102
- package/src/tools/search/search.js +0 -561
- package/src/tools/search/serper-scraper.js +0 -126
- package/src/tools/search/test.js +0 -129
- package/src/tools/search/tool.js +0 -453
- package/src/tools/search/types.js +0 -2
- package/src/tools/search/utils.js +0 -59
- package/src/types/graph.js +0 -24
- package/src/types/graph.test.js +0 -192
- package/src/types/index.js +0 -7
- package/src/types/llm.js +0 -2
- package/src/types/messages.js +0 -2
- package/src/types/run.js +0 -2
- package/src/types/stream.js +0 -2
- package/src/types/tools.js +0 -2
- package/src/utils/contextAnalytics.js +0 -79
- package/src/utils/contextAnalytics.test.js +0 -166
- package/src/utils/events.js +0 -26
- package/src/utils/graph.js +0 -11
- package/src/utils/handlers.js +0 -65
- package/src/utils/index.js +0 -10
- package/src/utils/llm.js +0 -21
- package/src/utils/llmConfig.js +0 -205
- package/src/utils/logging.js +0 -37
- package/src/utils/misc.js +0 -51
- package/src/utils/run.js +0 -69
- package/src/utils/schema.js +0 -21
- package/src/utils/title.js +0 -119
- package/src/utils/tokens.js +0 -92
- package/src/utils/toonFormat.js +0 -379
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { config } from 'dotenv';
|
|
2
|
-
config();
|
|
3
|
-
import { HumanMessage } from '@langchain/core/messages';
|
|
4
|
-
import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
|
|
5
|
-
import { Providers, GraphEvents } from '@/common';
|
|
6
|
-
import { sleep } from '@/utils/run';
|
|
7
|
-
import { Run } from '@/run';
|
|
8
|
-
const conversationHistory = [];
|
|
9
|
-
/**
|
|
10
|
-
* Dump ALL metadata for SEQUENTIAL execution to compare with parallel
|
|
11
|
-
*/
|
|
12
|
-
async function testSequentialMetadata() {
|
|
13
|
-
console.log('Dumping FULL metadata for SEQUENTIAL execution...\n');
|
|
14
|
-
const { contentParts, aggregateContent } = createContentAggregator();
|
|
15
|
-
const allMetadata = [];
|
|
16
|
-
const startTime = Date.now();
|
|
17
|
-
// Sequential chain: agent_a -> agent_b
|
|
18
|
-
const agents = [
|
|
19
|
-
{
|
|
20
|
-
agentId: 'agent_a',
|
|
21
|
-
provider: Providers.ANTHROPIC,
|
|
22
|
-
clientOptions: {
|
|
23
|
-
modelName: 'claude-haiku-4-5',
|
|
24
|
-
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
25
|
-
},
|
|
26
|
-
instructions: `You are Agent A. Just say "Hello from A" in one sentence.`,
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
agentId: 'agent_b',
|
|
30
|
-
provider: Providers.ANTHROPIC,
|
|
31
|
-
clientOptions: {
|
|
32
|
-
modelName: 'claude-haiku-4-5',
|
|
33
|
-
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
34
|
-
},
|
|
35
|
-
instructions: `You are Agent B. Just say "Hello from B" in one sentence.`,
|
|
36
|
-
},
|
|
37
|
-
];
|
|
38
|
-
// Sequential edge: A -> B (using edgeType not type)
|
|
39
|
-
const edges = [
|
|
40
|
-
{ from: 'agent_a', to: 'agent_b', edgeType: 'sequence' },
|
|
41
|
-
];
|
|
42
|
-
const captureMetadata = (eventName, metadata) => {
|
|
43
|
-
if (metadata) {
|
|
44
|
-
allMetadata.push({
|
|
45
|
-
event: eventName,
|
|
46
|
-
timestamp: Date.now() - startTime,
|
|
47
|
-
metadata: { ...metadata },
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
const customHandlers = {
|
|
52
|
-
[GraphEvents.CHAT_MODEL_END]: {
|
|
53
|
-
handle: (_event, _data, metadata) => {
|
|
54
|
-
captureMetadata('CHAT_MODEL_END', metadata);
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
[GraphEvents.CHAT_MODEL_START]: {
|
|
58
|
-
handle: (_event, _data, metadata) => {
|
|
59
|
-
captureMetadata('CHAT_MODEL_START', metadata);
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
[GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
|
|
63
|
-
[GraphEvents.ON_RUN_STEP]: {
|
|
64
|
-
handle: (event, data, metadata) => {
|
|
65
|
-
captureMetadata('ON_RUN_STEP', metadata);
|
|
66
|
-
aggregateContent({ event, data: data });
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
[GraphEvents.ON_RUN_STEP_DELTA]: {
|
|
70
|
-
handle: (event, data, metadata) => {
|
|
71
|
-
aggregateContent({ event, data: data });
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
[GraphEvents.ON_MESSAGE_DELTA]: {
|
|
75
|
-
handle: (event, data, metadata) => {
|
|
76
|
-
aggregateContent({ event, data: data });
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
const runConfig = {
|
|
81
|
-
runId: `sequential-metadata-${Date.now()}`,
|
|
82
|
-
graphConfig: {
|
|
83
|
-
type: 'multi-agent',
|
|
84
|
-
agents,
|
|
85
|
-
edges,
|
|
86
|
-
},
|
|
87
|
-
customHandlers,
|
|
88
|
-
returnContent: true,
|
|
89
|
-
skipCleanup: true,
|
|
90
|
-
};
|
|
91
|
-
try {
|
|
92
|
-
const run = await Run.create(runConfig);
|
|
93
|
-
const userMessage = `Hi`;
|
|
94
|
-
conversationHistory.push(new HumanMessage(userMessage));
|
|
95
|
-
const config = {
|
|
96
|
-
configurable: {
|
|
97
|
-
thread_id: 'sequential-metadata-test-1',
|
|
98
|
-
},
|
|
99
|
-
streamMode: 'values',
|
|
100
|
-
version: 'v2',
|
|
101
|
-
};
|
|
102
|
-
await run.processStream({ messages: conversationHistory }, config);
|
|
103
|
-
// Print ALL CHAT_MODEL_START metadata (don't dedupe)
|
|
104
|
-
console.log('\n\n========== ALL CHAT_MODEL_START EVENTS (SEQUENTIAL) ==========\n');
|
|
105
|
-
for (const entry of allMetadata) {
|
|
106
|
-
if (entry.event === 'CHAT_MODEL_START') {
|
|
107
|
-
const node = entry.metadata.langgraph_node;
|
|
108
|
-
console.log(`\n--- ${node} (at ${entry.timestamp}ms) ---`);
|
|
109
|
-
console.dir(entry.metadata, { depth: null });
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
console.log('\n\n========== ALL EVENTS ==========\n');
|
|
113
|
-
for (const entry of allMetadata) {
|
|
114
|
-
console.log(`[${entry.timestamp}ms] ${entry.event}: ${entry.metadata.langgraph_node}`);
|
|
115
|
-
}
|
|
116
|
-
// Key comparison
|
|
117
|
-
console.log('\n\n========== KEY FIELDS COMPARISON (SEQUENTIAL) ==========\n');
|
|
118
|
-
const agentMetadataMap = new Map();
|
|
119
|
-
for (const entry of allMetadata) {
|
|
120
|
-
if (entry.event === 'CHAT_MODEL_START') {
|
|
121
|
-
const node = entry.metadata.langgraph_node;
|
|
122
|
-
if (!agentMetadataMap.has(node)) {
|
|
123
|
-
agentMetadataMap.set(node, entry.metadata);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
for (const [node, meta] of agentMetadataMap) {
|
|
128
|
-
console.log(`${node}:`);
|
|
129
|
-
console.log(` langgraph_step: ${meta.langgraph_step}`);
|
|
130
|
-
console.log(` langgraph_triggers: ${JSON.stringify(meta.langgraph_triggers)}`);
|
|
131
|
-
console.log(` checkpoint_ns: ${meta.checkpoint_ns}`);
|
|
132
|
-
console.log(` __pregel_task_id: ${meta.__pregel_task_id}`);
|
|
133
|
-
console.log(` langgraph_path: ${JSON.stringify(meta.langgraph_path)}`);
|
|
134
|
-
console.log();
|
|
135
|
-
}
|
|
136
|
-
await sleep(1000);
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
console.error('Error:', error);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
testSequentialMetadata();
|
|
143
|
-
//# sourceMappingURL=sequential-full-metadata-test.js.map
|
package/src/scripts/simple.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
// src/scripts/cli.ts
|
|
2
|
-
import { config } from 'dotenv';
|
|
3
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
-
config();
|
|
5
|
-
import { HumanMessage, } from '@langchain/core/messages';
|
|
6
|
-
import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
|
|
7
|
-
import { ToolEndHandler, ModelEndHandler, createMetadataAggregator, } from '@/events';
|
|
8
|
-
import { GraphEvents, Providers } from '@/common';
|
|
9
|
-
import { getLLMConfig } from '@/utils/llmConfig';
|
|
10
|
-
import { getArgs } from '@/scripts/args';
|
|
11
|
-
import { sleep } from '@/utils/run';
|
|
12
|
-
import { Run } from '@/run';
|
|
13
|
-
const conversationHistory = [];
|
|
14
|
-
let _contentParts = [];
|
|
15
|
-
let collectedUsage = [];
|
|
16
|
-
async function testStandardStreaming() {
|
|
17
|
-
const { userName, location, provider: _provider, currentDate, } = await getArgs();
|
|
18
|
-
const { contentParts, aggregateContent } = createContentAggregator();
|
|
19
|
-
_contentParts = contentParts;
|
|
20
|
-
const customHandlers = {
|
|
21
|
-
[GraphEvents.TOOL_END]: new ToolEndHandler(),
|
|
22
|
-
[GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(collectedUsage),
|
|
23
|
-
[GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
|
|
24
|
-
[GraphEvents.ON_RUN_STEP_COMPLETED]: {
|
|
25
|
-
handle: (event, data) => {
|
|
26
|
-
console.log('====== ON_RUN_STEP_COMPLETED ======');
|
|
27
|
-
console.dir(data, { depth: null });
|
|
28
|
-
aggregateContent({
|
|
29
|
-
event,
|
|
30
|
-
data: data,
|
|
31
|
-
});
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
[GraphEvents.ON_RUN_STEP]: {
|
|
35
|
-
handle: (event, data) => {
|
|
36
|
-
console.log('====== ON_RUN_STEP ======');
|
|
37
|
-
console.dir(data, { depth: null });
|
|
38
|
-
aggregateContent({ event, data: data });
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
[GraphEvents.ON_RUN_STEP_DELTA]: {
|
|
42
|
-
handle: (event, data) => {
|
|
43
|
-
console.log('====== ON_RUN_STEP_DELTA ======');
|
|
44
|
-
console.dir(data, { depth: null });
|
|
45
|
-
aggregateContent({ event, data: data });
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
[GraphEvents.ON_MESSAGE_DELTA]: {
|
|
49
|
-
handle: (event, data) => {
|
|
50
|
-
console.log('====== ON_MESSAGE_DELTA ======');
|
|
51
|
-
console.dir(data, { depth: null });
|
|
52
|
-
aggregateContent({ event, data: data });
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
[GraphEvents.ON_REASONING_DELTA]: {
|
|
56
|
-
handle: (event, data) => {
|
|
57
|
-
console.log('====== ON_REASONING_DELTA ======');
|
|
58
|
-
console.dir(data, { depth: null });
|
|
59
|
-
aggregateContent({ event, data: data });
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
[GraphEvents.TOOL_START]: {
|
|
63
|
-
handle: (_event, data, metadata) => {
|
|
64
|
-
console.log('====== TOOL_START ======');
|
|
65
|
-
// console.dir(data, { depth: null });
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
const llmConfig = getLLMConfig(_provider);
|
|
70
|
-
if ('configuration' in llmConfig &&
|
|
71
|
-
llmConfig.configuration != null) {
|
|
72
|
-
const openAIConfig = llmConfig;
|
|
73
|
-
if (openAIConfig.configuration) {
|
|
74
|
-
openAIConfig.configuration.fetch = (url, init) => {
|
|
75
|
-
console.log('Fetching:', url);
|
|
76
|
-
return fetch(url, init);
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const provider = llmConfig.provider;
|
|
81
|
-
if (provider === Providers.ANTHROPIC) {
|
|
82
|
-
llmConfig.clientOptions = {
|
|
83
|
-
defaultHeaders: {
|
|
84
|
-
'anthropic-beta': 'token-efficient-tools-2025-02-19,output-128k-2025-02-19,prompt-caching-2024-07-31',
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
const run = await Run.create({
|
|
89
|
-
runId: uuidv4(),
|
|
90
|
-
graphConfig: {
|
|
91
|
-
type: 'standard',
|
|
92
|
-
llmConfig,
|
|
93
|
-
// tools: [],
|
|
94
|
-
// reasoningKey: 'reasoning',
|
|
95
|
-
instructions: 'You are a friendly AI assistant. Always address the user by their name.',
|
|
96
|
-
additional_instructions: `The user's name is ${userName} and they are located in ${location}.`,
|
|
97
|
-
},
|
|
98
|
-
returnContent: true,
|
|
99
|
-
skipCleanup: true,
|
|
100
|
-
customHandlers,
|
|
101
|
-
});
|
|
102
|
-
const config = {
|
|
103
|
-
runId: uuidv4(),
|
|
104
|
-
configurable: {
|
|
105
|
-
user_id: 'user-123',
|
|
106
|
-
thread_id: 'conversation-num-1',
|
|
107
|
-
},
|
|
108
|
-
streamMode: 'values',
|
|
109
|
-
version: 'v2',
|
|
110
|
-
};
|
|
111
|
-
console.log('Test 1: Simple message test');
|
|
112
|
-
const userMessage = `hi`;
|
|
113
|
-
conversationHistory.push(new HumanMessage(userMessage));
|
|
114
|
-
const inputs = {
|
|
115
|
-
messages: conversationHistory,
|
|
116
|
-
};
|
|
117
|
-
const finalContentParts = await run.processStream(inputs, config);
|
|
118
|
-
const finalMessages = run.getRunMessages();
|
|
119
|
-
if (finalMessages) {
|
|
120
|
-
conversationHistory.push(...finalMessages);
|
|
121
|
-
console.dir(conversationHistory, { depth: null });
|
|
122
|
-
}
|
|
123
|
-
// console.dir(finalContentParts, { depth: null });
|
|
124
|
-
console.log('\n\n====================\n\n');
|
|
125
|
-
console.dir(contentParts, { depth: null });
|
|
126
|
-
const { handleLLMEnd, collected } = createMetadataAggregator();
|
|
127
|
-
const titleOptions = {
|
|
128
|
-
provider,
|
|
129
|
-
inputText: userMessage,
|
|
130
|
-
contentParts,
|
|
131
|
-
// titleMethod: TitleMethod.STRUCTURED,
|
|
132
|
-
chainOptions: {
|
|
133
|
-
configurable: {
|
|
134
|
-
user_id: 'user-123',
|
|
135
|
-
thread_id: 'conversation-num-1',
|
|
136
|
-
},
|
|
137
|
-
callbacks: [
|
|
138
|
-
{
|
|
139
|
-
handleLLMEnd,
|
|
140
|
-
},
|
|
141
|
-
],
|
|
142
|
-
},
|
|
143
|
-
};
|
|
144
|
-
if (provider === Providers.ANTHROPIC) {
|
|
145
|
-
titleOptions.clientOptions = {
|
|
146
|
-
model: 'claude-haiku-4-5',
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
const titleResult = await run.generateTitle(titleOptions);
|
|
150
|
-
console.log('Collected usage metadata:', collectedUsage);
|
|
151
|
-
console.log('Generated Title:', titleResult);
|
|
152
|
-
console.log('Collected title usage metadata:', collected);
|
|
153
|
-
await sleep(5000);
|
|
154
|
-
}
|
|
155
|
-
process.on('unhandledRejection', (reason, promise) => {
|
|
156
|
-
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
157
|
-
console.log('Conversation history:');
|
|
158
|
-
console.dir(conversationHistory, { depth: null });
|
|
159
|
-
console.log('Content parts:');
|
|
160
|
-
console.dir(_contentParts, { depth: null });
|
|
161
|
-
process.exit(1);
|
|
162
|
-
});
|
|
163
|
-
process.on('uncaughtException', (err) => {
|
|
164
|
-
console.error('Uncaught Exception:', err);
|
|
165
|
-
});
|
|
166
|
-
testStandardStreaming().catch((err) => {
|
|
167
|
-
console.error(err);
|
|
168
|
-
console.log('Conversation history:');
|
|
169
|
-
console.dir(conversationHistory, { depth: null });
|
|
170
|
-
console.log('Content parts:');
|
|
171
|
-
console.dir(_contentParts, { depth: null });
|
|
172
|
-
process.exit(1);
|
|
173
|
-
});
|
|
174
|
-
//# sourceMappingURL=simple.js.map
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { config } from 'dotenv';
|
|
2
|
-
config();
|
|
3
|
-
import { HumanMessage } from '@langchain/core/messages';
|
|
4
|
-
import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
|
|
5
|
-
import { ToolEndHandler } from '@/events';
|
|
6
|
-
import { Providers, GraphEvents } from '@/common';
|
|
7
|
-
import { sleep } from '@/utils/run';
|
|
8
|
-
import { Run } from '@/run';
|
|
9
|
-
const conversationHistory = [];
|
|
10
|
-
/**
|
|
11
|
-
* Single agent test with extensive metadata logging
|
|
12
|
-
* Compare with multi-agent-parallel-start.ts to see metadata differences
|
|
13
|
-
*/
|
|
14
|
-
async function testSingleAgent() {
|
|
15
|
-
console.log('Testing Single Agent with Metadata Logging...\n');
|
|
16
|
-
// Set up content aggregator
|
|
17
|
-
const { contentParts, aggregateContent, stepMap } = createContentAggregator();
|
|
18
|
-
const startTime = Date.now();
|
|
19
|
-
// Create custom handlers with extensive metadata logging
|
|
20
|
-
const customHandlers = {
|
|
21
|
-
[GraphEvents.TOOL_END]: new ToolEndHandler(),
|
|
22
|
-
[GraphEvents.CHAT_MODEL_END]: {
|
|
23
|
-
handle: (_event, _data, metadata) => {
|
|
24
|
-
console.log('\n====== CHAT_MODEL_END METADATA ======');
|
|
25
|
-
console.dir(metadata, { depth: null });
|
|
26
|
-
const elapsed = Date.now() - startTime;
|
|
27
|
-
console.log(`⏱️ COMPLETED at ${elapsed}ms`);
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
[GraphEvents.CHAT_MODEL_START]: {
|
|
31
|
-
handle: (_event, _data, metadata) => {
|
|
32
|
-
console.log('\n====== CHAT_MODEL_START METADATA ======');
|
|
33
|
-
console.dir(metadata, { depth: null });
|
|
34
|
-
const elapsed = Date.now() - startTime;
|
|
35
|
-
console.log(`⏱️ STARTED at ${elapsed}ms`);
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
[GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
|
|
39
|
-
[GraphEvents.ON_RUN_STEP_COMPLETED]: {
|
|
40
|
-
handle: (event, data, metadata) => {
|
|
41
|
-
console.log('\n====== ON_RUN_STEP_COMPLETED ======');
|
|
42
|
-
console.log('DATA:');
|
|
43
|
-
console.dir(data, { depth: null });
|
|
44
|
-
console.log('METADATA:');
|
|
45
|
-
console.dir(metadata, { depth: null });
|
|
46
|
-
aggregateContent({
|
|
47
|
-
event,
|
|
48
|
-
data: data,
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
[GraphEvents.ON_RUN_STEP]: {
|
|
53
|
-
handle: (event, data, metadata) => {
|
|
54
|
-
console.log('\n====== ON_RUN_STEP ======');
|
|
55
|
-
console.log('DATA:');
|
|
56
|
-
console.dir(data, { depth: null });
|
|
57
|
-
console.log('METADATA:');
|
|
58
|
-
console.dir(metadata, { depth: null });
|
|
59
|
-
aggregateContent({ event, data: data });
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
[GraphEvents.ON_RUN_STEP_DELTA]: {
|
|
63
|
-
handle: (event, data, metadata) => {
|
|
64
|
-
console.log('\n====== ON_RUN_STEP_DELTA ======');
|
|
65
|
-
console.log('DATA:');
|
|
66
|
-
console.dir(data, { depth: null });
|
|
67
|
-
console.log('METADATA:');
|
|
68
|
-
console.dir(metadata, { depth: null });
|
|
69
|
-
aggregateContent({ event, data: data });
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
[GraphEvents.ON_MESSAGE_DELTA]: {
|
|
73
|
-
handle: (event, data, metadata) => {
|
|
74
|
-
console.log('\n====== ON_MESSAGE_DELTA ======');
|
|
75
|
-
console.log('DATA:');
|
|
76
|
-
console.dir(data, { depth: null });
|
|
77
|
-
console.log('METADATA:');
|
|
78
|
-
console.dir(metadata, { depth: null });
|
|
79
|
-
aggregateContent({ event, data: data });
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
// Create single-agent run configuration (standard graph, not multi-agent)
|
|
84
|
-
const runConfig = {
|
|
85
|
-
runId: `single-agent-${Date.now()}`,
|
|
86
|
-
graphConfig: {
|
|
87
|
-
type: 'standard',
|
|
88
|
-
llmConfig: {
|
|
89
|
-
provider: Providers.ANTHROPIC,
|
|
90
|
-
modelName: 'claude-haiku-4-5',
|
|
91
|
-
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
92
|
-
},
|
|
93
|
-
instructions: `You are a helpful AI assistant. Keep your response concise (50-100 words).`,
|
|
94
|
-
},
|
|
95
|
-
customHandlers,
|
|
96
|
-
returnContent: true,
|
|
97
|
-
skipCleanup: true,
|
|
98
|
-
};
|
|
99
|
-
try {
|
|
100
|
-
// Create and execute the run
|
|
101
|
-
const run = await Run.create(runConfig);
|
|
102
|
-
// Debug: Log the graph structure
|
|
103
|
-
console.log('=== DEBUG: Graph Structure ===');
|
|
104
|
-
const graph = run.Graph;
|
|
105
|
-
console.log('Graph exists:', !!graph);
|
|
106
|
-
if (graph) {
|
|
107
|
-
console.log('Graph type:', graph.constructor.name);
|
|
108
|
-
console.log('AgentContexts exists:', !!graph.agentContexts);
|
|
109
|
-
if (graph.agentContexts) {
|
|
110
|
-
console.log('AgentContexts size:', graph.agentContexts.size);
|
|
111
|
-
for (const [agentId, context] of graph.agentContexts) {
|
|
112
|
-
console.log(`\nAgent: ${agentId}`);
|
|
113
|
-
console.log(`Tools: ${context.tools?.map((t) => t.name || 'unnamed').join(', ') || 'none'}`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
console.log('=== END DEBUG ===\n');
|
|
118
|
-
const userMessage = `What are the best approaches to learning a new programming language?`;
|
|
119
|
-
conversationHistory.push(new HumanMessage(userMessage));
|
|
120
|
-
console.log('Invoking single-agent graph...\n');
|
|
121
|
-
const config = {
|
|
122
|
-
configurable: {
|
|
123
|
-
thread_id: 'single-agent-conversation-1',
|
|
124
|
-
},
|
|
125
|
-
streamMode: 'values',
|
|
126
|
-
version: 'v2',
|
|
127
|
-
};
|
|
128
|
-
// Process with streaming
|
|
129
|
-
const inputs = {
|
|
130
|
-
messages: conversationHistory,
|
|
131
|
-
};
|
|
132
|
-
const finalContentParts = await run.processStream(inputs, config);
|
|
133
|
-
const finalMessages = run.getRunMessages();
|
|
134
|
-
if (finalMessages) {
|
|
135
|
-
conversationHistory.push(...finalMessages);
|
|
136
|
-
}
|
|
137
|
-
console.log('\n\n========== SUMMARY ==========');
|
|
138
|
-
console.log('Final content parts:', contentParts.length, 'parts');
|
|
139
|
-
console.log('\n=== Content Parts (clean, no metadata) ===');
|
|
140
|
-
console.dir(contentParts, { depth: null });
|
|
141
|
-
console.log('\n=== Step Map (should be empty for single-agent) ===');
|
|
142
|
-
console.dir(Object.fromEntries(stepMap), { depth: null });
|
|
143
|
-
console.log('====================================\n');
|
|
144
|
-
await sleep(3000);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
console.error('Error in single-agent test:', error);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// Run the test
|
|
151
|
-
testSingleAgent();
|
|
152
|
-
//# sourceMappingURL=single-agent-metadata-test.js.map
|
package/src/scripts/stream.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
// src/scripts/cli.ts
|
|
3
|
-
import { config } from 'dotenv';
|
|
4
|
-
config();
|
|
5
|
-
import { HumanMessage } from '@langchain/core/messages';
|
|
6
|
-
import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
|
|
7
|
-
import { ToolEndHandler } from '@/events';
|
|
8
|
-
import { getArgs } from '@/scripts/args';
|
|
9
|
-
import { Run } from '@/run';
|
|
10
|
-
import { GraphEvents } from '@/common';
|
|
11
|
-
import { getLLMConfig } from '@/utils/llmConfig';
|
|
12
|
-
const conversationHistory = [];
|
|
13
|
-
async function testStandardStreaming() {
|
|
14
|
-
const { userName, location, provider, currentDate } = await getArgs();
|
|
15
|
-
const { contentParts, aggregateContent } = createContentAggregator();
|
|
16
|
-
const customHandlers = {
|
|
17
|
-
[GraphEvents.TOOL_END]: new ToolEndHandler(),
|
|
18
|
-
// [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
|
|
19
|
-
[GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
|
|
20
|
-
[GraphEvents.ON_RUN_STEP_COMPLETED]: {
|
|
21
|
-
handle: (event, data) => {
|
|
22
|
-
console.log('====== ON_RUN_STEP_COMPLETED ======');
|
|
23
|
-
// console.dir(data, { depth: null });
|
|
24
|
-
aggregateContent({
|
|
25
|
-
event,
|
|
26
|
-
data: data,
|
|
27
|
-
});
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
[GraphEvents.ON_RUN_STEP]: {
|
|
31
|
-
handle: (event, data) => {
|
|
32
|
-
console.log('====== ON_RUN_STEP ======');
|
|
33
|
-
console.dir(data, { depth: null });
|
|
34
|
-
aggregateContent({ event, data: data });
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
[GraphEvents.ON_RUN_STEP_DELTA]: {
|
|
38
|
-
handle: (event, data) => {
|
|
39
|
-
console.log('====== ON_RUN_STEP_DELTA ======');
|
|
40
|
-
console.dir(data, { depth: null });
|
|
41
|
-
aggregateContent({ event, data: data });
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
[GraphEvents.ON_MESSAGE_DELTA]: {
|
|
45
|
-
handle: (event, data) => {
|
|
46
|
-
console.log('====== ON_MESSAGE_DELTA ======');
|
|
47
|
-
console.dir(data, { depth: null });
|
|
48
|
-
aggregateContent({ event, data: data });
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
[GraphEvents.TOOL_START]: {
|
|
52
|
-
handle: (_event, data, metadata) => {
|
|
53
|
-
console.log('====== TOOL_START ======');
|
|
54
|
-
// console.dir(data, { depth: null });
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
const llmConfig = getLLMConfig(provider);
|
|
59
|
-
const run = await Run.create({
|
|
60
|
-
runId: 'test-run-id',
|
|
61
|
-
graphConfig: {
|
|
62
|
-
type: 'standard',
|
|
63
|
-
llmConfig,
|
|
64
|
-
tools: [],
|
|
65
|
-
instructions: 'You are a friendly AI assistant. Always address the user by their name.',
|
|
66
|
-
additional_instructions: `The user's name is ${userName} and they are located in ${location}.`,
|
|
67
|
-
streamBuffer: 3000,
|
|
68
|
-
},
|
|
69
|
-
returnContent: true,
|
|
70
|
-
skipCleanup: true,
|
|
71
|
-
customHandlers,
|
|
72
|
-
});
|
|
73
|
-
const config = {
|
|
74
|
-
configurable: {
|
|
75
|
-
provider,
|
|
76
|
-
thread_id: 'conversation-num-1',
|
|
77
|
-
},
|
|
78
|
-
streamMode: 'values',
|
|
79
|
-
version: 'v2',
|
|
80
|
-
};
|
|
81
|
-
console.log('Test 1: Weather query (content parts test)');
|
|
82
|
-
const userMessage = `
|
|
83
|
-
Make a search for the weather in ${location} today, which is ${currentDate}.
|
|
84
|
-
Before making the search, please let me know what you're about to do, then immediately start searching without hesitation.
|
|
85
|
-
Make sure to always refer to me by name, which is ${userName}.
|
|
86
|
-
After giving me a thorough summary, tell me a joke about the weather forecast we went over.
|
|
87
|
-
`;
|
|
88
|
-
conversationHistory.push(new HumanMessage(userMessage));
|
|
89
|
-
const inputs = {
|
|
90
|
-
messages: conversationHistory,
|
|
91
|
-
};
|
|
92
|
-
const finalContentParts = await run.processStream(inputs, config);
|
|
93
|
-
const finalMessages = run.getRunMessages();
|
|
94
|
-
if (finalMessages) {
|
|
95
|
-
conversationHistory.push(...finalMessages);
|
|
96
|
-
console.dir(conversationHistory, { depth: null });
|
|
97
|
-
}
|
|
98
|
-
// console.dir(finalContentParts, { depth: null });
|
|
99
|
-
console.log('\n\n====================\n\n');
|
|
100
|
-
// console.dir(contentParts, { depth: null });
|
|
101
|
-
}
|
|
102
|
-
process.on('unhandledRejection', (reason, promise) => {
|
|
103
|
-
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
104
|
-
console.log('Conversation history:');
|
|
105
|
-
process.exit(1);
|
|
106
|
-
});
|
|
107
|
-
testStandardStreaming().catch((err) => {
|
|
108
|
-
console.error(err);
|
|
109
|
-
console.log('Conversation history:');
|
|
110
|
-
console.dir(conversationHistory, { depth: null });
|
|
111
|
-
process.exit(1);
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=stream.js.map
|