network-ai 5.10.2 → 5.12.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/INTEGRATION_GUIDE.md +2 -2
- package/QUICKSTART.md +10 -0
- package/README.md +32 -3
- package/SKILL.md +3 -3
- package/dist/esm/adapters/a2a-adapter.js +235 -0
- package/dist/esm/adapters/a2a-adapter.js.map +1 -0
- package/dist/esm/adapters/adapter-registry.js +613 -0
- package/dist/esm/adapters/adapter-registry.js.map +1 -0
- package/dist/esm/adapters/agno-adapter.js +140 -0
- package/dist/esm/adapters/agno-adapter.js.map +1 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/esm/adapters/aps-adapter.js +289 -0
- package/dist/esm/adapters/aps-adapter.js.map +1 -0
- package/dist/esm/adapters/autogen-adapter.js +141 -0
- package/dist/esm/adapters/autogen-adapter.js.map +1 -0
- package/dist/esm/adapters/base-adapter.js +104 -0
- package/dist/esm/adapters/base-adapter.js.map +1 -0
- package/dist/esm/adapters/browser-agent-adapter.js +219 -0
- package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/esm/adapters/codex-adapter.js +318 -0
- package/dist/esm/adapters/codex-adapter.js.map +1 -0
- package/dist/esm/adapters/copilot-adapter.js +132 -0
- package/dist/esm/adapters/copilot-adapter.js.map +1 -0
- package/dist/esm/adapters/crewai-adapter.js +148 -0
- package/dist/esm/adapters/crewai-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-adapter.js +142 -0
- package/dist/esm/adapters/custom-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
- package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/dspy-adapter.js +127 -0
- package/dist/esm/adapters/dspy-adapter.js.map +1 -0
- package/dist/esm/adapters/haystack-adapter.js +149 -0
- package/dist/esm/adapters/haystack-adapter.js.map +1 -0
- package/dist/esm/adapters/hermes-adapter.js +217 -0
- package/dist/esm/adapters/hermes-adapter.js.map +1 -0
- package/dist/esm/adapters/index.js +109 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/langchain-adapter.js +134 -0
- package/dist/esm/adapters/langchain-adapter.js.map +1 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/langgraph-adapter.js +119 -0
- package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
- package/dist/esm/adapters/llamaindex-adapter.js +135 -0
- package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/esm/adapters/mcp-adapter.js +200 -0
- package/dist/esm/adapters/mcp-adapter.js.map +1 -0
- package/dist/esm/adapters/minimax-adapter.js +233 -0
- package/dist/esm/adapters/minimax-adapter.js.map +1 -0
- package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
- package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-agents-adapter.js +118 -0
- package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
- package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/esm/adapters/openclaw-adapter.js +107 -0
- package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/orchestrator-adapter.js +218 -0
- package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/esm/adapters/rlm-adapter.js +167 -0
- package/dist/esm/adapters/rlm-adapter.js.map +1 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/esm/adapters/streaming-base-adapter.js +74 -0
- package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
- package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
- package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/esm/demo-control-plane.js +147 -0
- package/dist/esm/demo-control-plane.js.map +1 -0
- package/dist/esm/demo-worktree-dashboard.js +131 -0
- package/dist/esm/demo-worktree-dashboard.js.map +1 -0
- package/dist/esm/examples/01-hello-swarm.js +165 -0
- package/dist/esm/examples/01-hello-swarm.js.map +1 -0
- package/dist/esm/examples/02-fsm-pipeline.js +189 -0
- package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
- package/dist/esm/examples/03-parallel-agents.js +192 -0
- package/dist/esm/examples/03-parallel-agents.js.map +1 -0
- package/dist/esm/examples/05-code-review-swarm.js +1177 -0
- package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
- package/dist/esm/examples/07-full-showcase.js +946 -0
- package/dist/esm/examples/07-full-showcase.js.map +1 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
- package/dist/esm/examples/09-real-langchain.js +231 -0
- package/dist/esm/examples/09-real-langchain.js.map +1 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
- package/dist/esm/examples/demo-runner.js +119 -0
- package/dist/esm/examples/demo-runner.js.map +1 -0
- package/dist/esm/index.js +1352 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/adapter-hooks.js +216 -0
- package/dist/esm/lib/adapter-hooks.js.map +1 -0
- package/dist/esm/lib/adapter-test-harness.js +118 -0
- package/dist/esm/lib/adapter-test-harness.js.map +1 -0
- package/dist/esm/lib/agent-conversation.js +155 -0
- package/dist/esm/lib/agent-conversation.js.map +1 -0
- package/dist/esm/lib/agent-debate.js +146 -0
- package/dist/esm/lib/agent-debate.js.map +1 -0
- package/dist/esm/lib/agent-memory.js +336 -0
- package/dist/esm/lib/agent-memory.js.map +1 -0
- package/dist/esm/lib/agent-runtime.js +818 -0
- package/dist/esm/lib/agent-runtime.js.map +1 -0
- package/dist/esm/lib/agent-vcr.js +218 -0
- package/dist/esm/lib/agent-vcr.js.map +1 -0
- package/dist/esm/lib/anomaly-detector.js +178 -0
- package/dist/esm/lib/anomaly-detector.js.map +1 -0
- package/dist/esm/lib/approval-inbox.js +385 -0
- package/dist/esm/lib/approval-inbox.js.map +1 -0
- package/dist/esm/lib/auth-guardian.js +692 -0
- package/dist/esm/lib/auth-guardian.js.map +1 -0
- package/dist/esm/lib/auth-validator.js +32 -0
- package/dist/esm/lib/auth-validator.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
- package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-redis.js +244 -0
- package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
- package/dist/esm/lib/blackboard-backend.js +141 -0
- package/dist/esm/lib/blackboard-backend.js.map +1 -0
- package/dist/esm/lib/blackboard-validator.js +985 -0
- package/dist/esm/lib/blackboard-validator.js.map +1 -0
- package/dist/esm/lib/circuit-breaker.js +164 -0
- package/dist/esm/lib/circuit-breaker.js.map +1 -0
- package/dist/esm/lib/claim-verifier.js +173 -0
- package/dist/esm/lib/claim-verifier.js.map +1 -0
- package/dist/esm/lib/comparison-runner.js +138 -0
- package/dist/esm/lib/comparison-runner.js.map +1 -0
- package/dist/esm/lib/compliance-monitor.js +261 -0
- package/dist/esm/lib/compliance-monitor.js.map +1 -0
- package/dist/esm/lib/confidence-filter.js +210 -0
- package/dist/esm/lib/confidence-filter.js.map +1 -0
- package/dist/esm/lib/config-watcher.js +215 -0
- package/dist/esm/lib/config-watcher.js.map +1 -0
- package/dist/esm/lib/consistency.js +274 -0
- package/dist/esm/lib/consistency.js.map +1 -0
- package/dist/esm/lib/console-ui.js +276 -0
- package/dist/esm/lib/console-ui.js.map +1 -0
- package/dist/esm/lib/context-throttler.js +171 -0
- package/dist/esm/lib/context-throttler.js.map +1 -0
- package/dist/esm/lib/control-plane.js +527 -0
- package/dist/esm/lib/control-plane.js.map +1 -0
- package/dist/esm/lib/cost-governor.js +128 -0
- package/dist/esm/lib/cost-governor.js.map +1 -0
- package/dist/esm/lib/cost-heatmap.js +161 -0
- package/dist/esm/lib/cost-heatmap.js.map +1 -0
- package/dist/esm/lib/coverage-gate.js +213 -0
- package/dist/esm/lib/coverage-gate.js.map +1 -0
- package/dist/esm/lib/coverage-reporter.js +177 -0
- package/dist/esm/lib/coverage-reporter.js.map +1 -0
- package/dist/esm/lib/crdt.js +141 -0
- package/dist/esm/lib/crdt.js.map +1 -0
- package/dist/esm/lib/dashboard-server.js +403 -0
- package/dist/esm/lib/dashboard-server.js.map +1 -0
- package/dist/esm/lib/dry-run.js +130 -0
- package/dist/esm/lib/dry-run.js.map +1 -0
- package/dist/esm/lib/env-manager.js +518 -0
- package/dist/esm/lib/env-manager.js.map +1 -0
- package/dist/esm/lib/errors.js +201 -0
- package/dist/esm/lib/errors.js.map +1 -0
- package/dist/esm/lib/event-bus.js +229 -0
- package/dist/esm/lib/event-bus.js.map +1 -0
- package/dist/esm/lib/explainability.js +102 -0
- package/dist/esm/lib/explainability.js.map +1 -0
- package/dist/esm/lib/fan-out.js +237 -0
- package/dist/esm/lib/fan-out.js.map +1 -0
- package/dist/esm/lib/federated-budget.js +322 -0
- package/dist/esm/lib/federated-budget.js.map +1 -0
- package/dist/esm/lib/fsm-journey.js +478 -0
- package/dist/esm/lib/fsm-journey.js.map +1 -0
- package/dist/esm/lib/goal-decomposer.js +698 -0
- package/dist/esm/lib/goal-decomposer.js.map +1 -0
- package/dist/esm/lib/goal-dsl.js +391 -0
- package/dist/esm/lib/goal-dsl.js.map +1 -0
- package/dist/esm/lib/job-queue.js +310 -0
- package/dist/esm/lib/job-queue.js.map +1 -0
- package/dist/esm/lib/landscape-agent.js +134 -0
- package/dist/esm/lib/landscape-agent.js.map +1 -0
- package/dist/esm/lib/learning-loop.js +181 -0
- package/dist/esm/lib/learning-loop.js.map +1 -0
- package/dist/esm/lib/lifecycle-hooks.js +148 -0
- package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
- package/dist/esm/lib/locked-blackboard.js +1295 -0
- package/dist/esm/lib/locked-blackboard.js.map +1 -0
- package/dist/esm/lib/logger.js +150 -0
- package/dist/esm/lib/logger.js.map +1 -0
- package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
- package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
- package/dist/esm/lib/mcp-bridge.js +357 -0
- package/dist/esm/lib/mcp-bridge.js.map +1 -0
- package/dist/esm/lib/mcp-tool-consumer.js +287 -0
- package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/esm/lib/mcp-tools-control.js +392 -0
- package/dist/esm/lib/mcp-tools-control.js.map +1 -0
- package/dist/esm/lib/mcp-tools-extended.js +371 -0
- package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
- package/dist/esm/lib/mcp-transport-http.js +528 -0
- package/dist/esm/lib/mcp-transport-http.js.map +1 -0
- package/dist/esm/lib/mcp-transport-sse.js +503 -0
- package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
- package/dist/esm/lib/metrics.js +284 -0
- package/dist/esm/lib/metrics.js.map +1 -0
- package/dist/esm/lib/orchestrator-types.js +66 -0
- package/dist/esm/lib/orchestrator-types.js.map +1 -0
- package/dist/esm/lib/otel-bridge.js +167 -0
- package/dist/esm/lib/otel-bridge.js.map +1 -0
- package/dist/esm/lib/partition-planner.js +246 -0
- package/dist/esm/lib/partition-planner.js.map +1 -0
- package/dist/esm/lib/phase-pipeline.js +367 -0
- package/dist/esm/lib/phase-pipeline.js.map +1 -0
- package/dist/esm/lib/playground.js +224 -0
- package/dist/esm/lib/playground.js.map +1 -0
- package/dist/esm/lib/qa-orchestrator.js +296 -0
- package/dist/esm/lib/qa-orchestrator.js.map +1 -0
- package/dist/esm/lib/quadtree.js +259 -0
- package/dist/esm/lib/quadtree.js.map +1 -0
- package/dist/esm/lib/route-classifier.js +217 -0
- package/dist/esm/lib/route-classifier.js.map +1 -0
- package/dist/esm/lib/semantic-search.js +235 -0
- package/dist/esm/lib/semantic-search.js.map +1 -0
- package/dist/esm/lib/shared-blackboard.js +249 -0
- package/dist/esm/lib/shared-blackboard.js.map +1 -0
- package/dist/esm/lib/skill-composer.js +190 -0
- package/dist/esm/lib/skill-composer.js.map +1 -0
- package/dist/esm/lib/speculative-executor.js +107 -0
- package/dist/esm/lib/speculative-executor.js.map +1 -0
- package/dist/esm/lib/strategy-agent.js +626 -0
- package/dist/esm/lib/strategy-agent.js.map +1 -0
- package/dist/esm/lib/swarm-transport.js +307 -0
- package/dist/esm/lib/swarm-transport.js.map +1 -0
- package/dist/esm/lib/swarm-utils.js +510 -0
- package/dist/esm/lib/swarm-utils.js.map +1 -0
- package/dist/esm/lib/task-decomposer.js +272 -0
- package/dist/esm/lib/task-decomposer.js.map +1 -0
- package/dist/esm/lib/telemetry-provider.js +207 -0
- package/dist/esm/lib/telemetry-provider.js.map +1 -0
- package/dist/esm/lib/timeline-scrubber.js +173 -0
- package/dist/esm/lib/timeline-scrubber.js.map +1 -0
- package/dist/esm/lib/topology.js +591 -0
- package/dist/esm/lib/topology.js.map +1 -0
- package/dist/esm/lib/transport-agent.js +366 -0
- package/dist/esm/lib/transport-agent.js.map +1 -0
- package/dist/esm/lib/work-tree-dashboard.js +583 -0
- package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
- package/dist/esm/lib/work-tree-ui.js +333 -0
- package/dist/esm/lib/work-tree-ui.js.map +1 -0
- package/dist/esm/lib/work-tree.js +480 -0
- package/dist/esm/lib/work-tree.js.map +1 -0
- package/dist/esm/run.js +144 -0
- package/dist/esm/run.js.map +1 -0
- package/dist/esm/security.js +1122 -0
- package/dist/esm/security.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mcp-transport-http.d.ts +203 -0
- package/dist/lib/mcp-transport-http.d.ts.map +1 -0
- package/dist/lib/mcp-transport-http.js +528 -0
- package/dist/lib/mcp-transport-http.js.map +1 -0
- package/dist/lib/phase-pipeline.d.ts +31 -0
- package/dist/lib/phase-pipeline.d.ts.map +1 -1
- package/dist/lib/phase-pipeline.js +93 -1
- package/dist/lib/phase-pipeline.js.map +1 -1
- package/dist/lib/semantic-search.d.ts +42 -6
- package/dist/lib/semantic-search.d.ts.map +1 -1
- package/dist/lib/semantic-search.js +87 -6
- package/dist/lib/semantic-search.js.map +1 -1
- package/package.json +24 -4
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Custom Agent Adapter — The simplest way to plug in any agent
|
|
4
|
+
*
|
|
5
|
+
* For agent systems that don't have a dedicated adapter, or for
|
|
6
|
+
* quick prototyping, this adapter lets you register plain async functions
|
|
7
|
+
* as agents. No framework dependency needed.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new CustomAdapter();
|
|
11
|
+
*
|
|
12
|
+
* // Register any async function as an agent
|
|
13
|
+
* adapter.registerHandler("my-agent", async (payload, context) => {
|
|
14
|
+
* // Your agent logic here
|
|
15
|
+
* return { analysis: "result data" };
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Register an HTTP-based agent
|
|
19
|
+
* adapter.registerHttpAgent("remote-agent", "https://api.example.com/agent");
|
|
20
|
+
*
|
|
21
|
+
* await registry.addAdapter(adapter);
|
|
22
|
+
*
|
|
23
|
+
* Then in the orchestrator:
|
|
24
|
+
* delegateTask({ targetAgent: "custom:my-agent", ... })
|
|
25
|
+
*
|
|
26
|
+
* @module CustomAdapter
|
|
27
|
+
* @version 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.CustomAdapter = void 0;
|
|
31
|
+
const base_adapter_1 = require("./base-adapter");
|
|
32
|
+
class CustomAdapter extends base_adapter_1.BaseAdapter {
|
|
33
|
+
name = 'custom';
|
|
34
|
+
version = '1.0.0';
|
|
35
|
+
handlers = new Map();
|
|
36
|
+
httpAgents = new Map();
|
|
37
|
+
get capabilities() {
|
|
38
|
+
return {
|
|
39
|
+
streaming: false,
|
|
40
|
+
parallel: true,
|
|
41
|
+
bidirectional: false,
|
|
42
|
+
discovery: true,
|
|
43
|
+
authentication: false,
|
|
44
|
+
statefulSessions: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Register a plain async function as an agent.
|
|
49
|
+
* This is the simplest way to add custom agent logic.
|
|
50
|
+
*/
|
|
51
|
+
registerHandler(agentId, handler, metadata) {
|
|
52
|
+
this.handlers.set(agentId, handler);
|
|
53
|
+
this.registerLocalAgent({
|
|
54
|
+
id: agentId,
|
|
55
|
+
name: agentId,
|
|
56
|
+
description: metadata?.description ?? `Custom agent: ${agentId}`,
|
|
57
|
+
capabilities: metadata?.capabilities,
|
|
58
|
+
status: 'available',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Register an HTTP endpoint as an agent.
|
|
63
|
+
* The orchestrator will POST task payloads to the URL.
|
|
64
|
+
*/
|
|
65
|
+
registerHttpAgent(agentId, urlOrConfig, metadata) {
|
|
66
|
+
const config = typeof urlOrConfig === 'string'
|
|
67
|
+
? { url: urlOrConfig }
|
|
68
|
+
: urlOrConfig;
|
|
69
|
+
this.httpAgents.set(agentId, config);
|
|
70
|
+
this.registerLocalAgent({
|
|
71
|
+
id: agentId,
|
|
72
|
+
name: agentId,
|
|
73
|
+
description: metadata?.description ?? `HTTP agent at ${config.url}`,
|
|
74
|
+
capabilities: metadata?.capabilities,
|
|
75
|
+
status: 'available',
|
|
76
|
+
metadata: { url: config.url },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async executeAgent(agentId, payload, context) {
|
|
80
|
+
this.ensureReady();
|
|
81
|
+
const startTime = Date.now();
|
|
82
|
+
// Check local handlers first
|
|
83
|
+
const handler = this.handlers.get(agentId);
|
|
84
|
+
if (handler) {
|
|
85
|
+
return this.executeHandler(handler, payload, context, startTime);
|
|
86
|
+
}
|
|
87
|
+
// Check HTTP agents
|
|
88
|
+
const httpConfig = this.httpAgents.get(agentId);
|
|
89
|
+
if (httpConfig) {
|
|
90
|
+
return this.executeHttpAgent(httpConfig, payload, context, startTime);
|
|
91
|
+
}
|
|
92
|
+
return this.errorResult('AGENT_NOT_FOUND', `Custom agent "${agentId}" is not registered. Use registerHandler() or registerHttpAgent().`, false);
|
|
93
|
+
}
|
|
94
|
+
async executeHandler(handler, payload, context, startTime) {
|
|
95
|
+
try {
|
|
96
|
+
const result = await handler(payload, context);
|
|
97
|
+
return this.successResult(result, Date.now() - startTime);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return this.errorResult('HANDLER_ERROR', error instanceof Error ? error.message : 'Custom handler failed', true, error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async executeHttpAgent(config, payload, context, startTime) {
|
|
104
|
+
try {
|
|
105
|
+
const body = config.transformRequest
|
|
106
|
+
? config.transformRequest(payload, context)
|
|
107
|
+
: { payload, context };
|
|
108
|
+
const controller = new AbortController();
|
|
109
|
+
const timeoutId = config.timeout
|
|
110
|
+
? setTimeout(() => controller.abort(), config.timeout)
|
|
111
|
+
: null;
|
|
112
|
+
const response = await fetch(config.url, {
|
|
113
|
+
method: config.method ?? 'POST',
|
|
114
|
+
headers: {
|
|
115
|
+
'Content-Type': 'application/json',
|
|
116
|
+
...config.headers,
|
|
117
|
+
},
|
|
118
|
+
body: JSON.stringify(body),
|
|
119
|
+
signal: controller.signal,
|
|
120
|
+
});
|
|
121
|
+
if (timeoutId)
|
|
122
|
+
clearTimeout(timeoutId);
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
return this.errorResult('HTTP_ERROR', `HTTP ${response.status}: ${response.statusText}`, response.status >= 500 // Server errors are recoverable
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
let result = await response.json();
|
|
128
|
+
if (config.transformResponse) {
|
|
129
|
+
result = config.transformResponse(result);
|
|
130
|
+
}
|
|
131
|
+
return this.successResult(result, Date.now() - startTime);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
135
|
+
return this.errorResult('TIMEOUT', `HTTP agent timed out after ${config.timeout}ms`, true);
|
|
136
|
+
}
|
|
137
|
+
return this.errorResult('HTTP_ERROR', error instanceof Error ? error.message : 'HTTP agent call failed', true, error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.CustomAdapter = CustomAdapter;
|
|
142
|
+
//# sourceMappingURL=custom-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-adapter.js","sourceRoot":"","sources":["../../../adapters/custom-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CustomStreamingAdapter — CustomAdapter with streaming support.
|
|
4
|
+
*
|
|
5
|
+
* Extends {@link CustomAdapter} so that handlers can yield incremental text
|
|
6
|
+
* by returning an `AsyncIterable<string>` or `AsyncIterable<StreamingChunk>`.
|
|
7
|
+
* Plain `Promise<unknown>` handlers work unchanged (single-chunk fallback).
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
*
|
|
11
|
+
* const adapter = new CustomStreamingAdapter();
|
|
12
|
+
*
|
|
13
|
+
* // Streaming handler — yields tokens incrementally
|
|
14
|
+
* adapter.registerHandler('writer', async function*(payload) {
|
|
15
|
+
* yield 'Once ';
|
|
16
|
+
* yield 'upon ';
|
|
17
|
+
* yield 'a time…';
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Non-streaming handler — works exactly as before
|
|
21
|
+
* adapter.registerHandler('analyze', async (payload) => ({ result: 'done' }));
|
|
22
|
+
*
|
|
23
|
+
* // Consume the stream
|
|
24
|
+
* for await (const chunk of adapter.executeAgentStream('writer', payload, ctx)) {
|
|
25
|
+
* process.stdout.write(chunk.text);
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* @module CustomStreamingAdapter
|
|
29
|
+
* @version 1.0.0
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.CustomStreamingAdapter = void 0;
|
|
33
|
+
const custom_adapter_1 = require("./custom-adapter");
|
|
34
|
+
/** Type guard — checks whether the return value of a handler is async-iterable. */
|
|
35
|
+
function isAsyncIterable(val) {
|
|
36
|
+
return (val != null &&
|
|
37
|
+
typeof val === 'object' &&
|
|
38
|
+
Symbol.asyncIterator in val);
|
|
39
|
+
}
|
|
40
|
+
/** Type guard — checks whether a `StreamingChunk`-shaped object was yielded. */
|
|
41
|
+
function isStreamingChunk(val) {
|
|
42
|
+
return (val !== null &&
|
|
43
|
+
typeof val === 'object' &&
|
|
44
|
+
typeof val.text === 'string' &&
|
|
45
|
+
typeof val.done === 'boolean');
|
|
46
|
+
}
|
|
47
|
+
class CustomStreamingAdapter extends custom_adapter_1.CustomAdapter {
|
|
48
|
+
streamingHandlers = new Set();
|
|
49
|
+
get capabilities() {
|
|
50
|
+
return {
|
|
51
|
+
...super.capabilities,
|
|
52
|
+
streaming: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Register a handler. Streaming handlers (functions returning `AsyncIterable`)
|
|
57
|
+
* are detected automatically and exposed through `executeAgentStream()`.
|
|
58
|
+
*/
|
|
59
|
+
registerHandler(agentId, handler, metadata) {
|
|
60
|
+
// Probe: call the handler with synthetic inputs and check if the return
|
|
61
|
+
// is async-iterable. We do this via a duck-typed try, falling back safely.
|
|
62
|
+
// Instead, infer from the handler's prototype / generator signature:
|
|
63
|
+
const isGenerator = handler.constructor?.name === 'AsyncGeneratorFunction' ||
|
|
64
|
+
(Object.prototype.toString.call(handler) === '[object AsyncGeneratorFunction]');
|
|
65
|
+
if (isGenerator) {
|
|
66
|
+
this.streamingHandlers.add(agentId);
|
|
67
|
+
}
|
|
68
|
+
// Cast to base AgentHandler — the broader type is compatible at runtime
|
|
69
|
+
super.registerHandler(agentId, handler, metadata);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Mark an already-registered handler as streaming.
|
|
73
|
+
* Useful when the handler function is not an async generator but returns
|
|
74
|
+
* an `AsyncIterable` (e.g. a closure around a separate generator).
|
|
75
|
+
*/
|
|
76
|
+
markStreaming(agentId) {
|
|
77
|
+
this.streamingHandlers.add(agentId);
|
|
78
|
+
}
|
|
79
|
+
supportsStreaming(agentId) {
|
|
80
|
+
return this.streamingHandlers.has(agentId);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Execute a handler with streaming support.
|
|
84
|
+
*
|
|
85
|
+
* - If the handler is registered as streaming (yields tokens), pipes the
|
|
86
|
+
* async iterable to `StreamingChunk` values.
|
|
87
|
+
* - Otherwise falls back to `executeAgent()` and wraps the result as a
|
|
88
|
+
* single chunk (same behaviour as the non-streaming `CustomAdapter`).
|
|
89
|
+
*/
|
|
90
|
+
async *executeAgentStream(agentId, payload, context) {
|
|
91
|
+
this.ensureReady();
|
|
92
|
+
// Access the internal handlers map stored in the parent class
|
|
93
|
+
const handlers = this.handlers;
|
|
94
|
+
const handler = handlers?.get(agentId);
|
|
95
|
+
if (!handler) {
|
|
96
|
+
// No handler — delegate to base executeAgent (which returns AGENT_NOT_FOUND)
|
|
97
|
+
const result = await this.executeAgent(agentId, payload, context);
|
|
98
|
+
yield {
|
|
99
|
+
text: result.error?.message ?? 'Agent not found',
|
|
100
|
+
done: true,
|
|
101
|
+
metadata: { error: true },
|
|
102
|
+
};
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Invoke the handler — may return a Promise or an AsyncIterable
|
|
106
|
+
let returnValue;
|
|
107
|
+
try {
|
|
108
|
+
returnValue = handler(payload, context);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
yield {
|
|
112
|
+
text: err instanceof Error ? err.message : 'Handler threw synchronously',
|
|
113
|
+
done: true,
|
|
114
|
+
metadata: { error: true },
|
|
115
|
+
};
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// If the return is a Promise, await it first
|
|
119
|
+
if (returnValue instanceof Promise) {
|
|
120
|
+
let resolved;
|
|
121
|
+
try {
|
|
122
|
+
resolved = await returnValue;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
yield {
|
|
126
|
+
text: err instanceof Error ? err.message : 'Handler rejected',
|
|
127
|
+
done: true,
|
|
128
|
+
metadata: { error: true },
|
|
129
|
+
};
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (isAsyncIterable(resolved)) {
|
|
133
|
+
// Resolved to an async iterable — pipe it through
|
|
134
|
+
yield* this._pipeIterable(resolved);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Plain resolved value — single chunk fallback
|
|
138
|
+
const text = typeof resolved === 'string' ? resolved :
|
|
139
|
+
resolved != null ? JSON.stringify(resolved) :
|
|
140
|
+
'';
|
|
141
|
+
yield { text, done: false };
|
|
142
|
+
yield { text: '', done: true };
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Returned an AsyncIterable directly (generator function, etc.)
|
|
146
|
+
if (isAsyncIterable(returnValue)) {
|
|
147
|
+
yield* this._pipeIterable(returnValue);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Fallback — single chunk from whatever value was returned
|
|
151
|
+
const text = typeof returnValue === 'string' ? returnValue :
|
|
152
|
+
returnValue != null ? JSON.stringify(returnValue) :
|
|
153
|
+
'';
|
|
154
|
+
yield { text, done: false };
|
|
155
|
+
yield { text: '', done: true };
|
|
156
|
+
}
|
|
157
|
+
/** Pipe an `AsyncIterable<string | StreamingChunk>` to `StreamingChunk` values. */
|
|
158
|
+
async *_pipeIterable(iterable) {
|
|
159
|
+
try {
|
|
160
|
+
for await (const item of iterable) {
|
|
161
|
+
if (isStreamingChunk(item)) {
|
|
162
|
+
yield item;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const text = typeof item === 'string' ? item : JSON.stringify(item);
|
|
166
|
+
yield { text, done: false };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
yield { text: '', done: true };
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
yield {
|
|
173
|
+
text: err instanceof Error ? err.message : 'Stream iteration failed',
|
|
174
|
+
done: true,
|
|
175
|
+
metadata: { error: true },
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.CustomStreamingAdapter = CustomStreamingAdapter;
|
|
181
|
+
//# sourceMappingURL=custom-streaming-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-streaming-adapter.js","sourceRoot":"","sources":["../../../adapters/custom-streaming-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DSPy Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates Stanford DSPy modules and programs with the SwarmOrchestrator.
|
|
6
|
+
* DSPy is a framework for algorithmically optimising LM prompts and weights,
|
|
7
|
+
* enabling systematic prompt engineering and agent compilation.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new DSPyAdapter();
|
|
11
|
+
* adapter.registerModule("classifier", myDSPyModule);
|
|
12
|
+
* adapter.registerProgram("rag-pipeline", myCompiledProgram);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "dspy:classifier", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module DSPyAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.DSPyAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class DSPyAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'dspy';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
entries = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: false,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: false,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: false,
|
|
35
|
+
statefulSessions: false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// --- Registration ---
|
|
39
|
+
registerModule(agentId, module, metadata) {
|
|
40
|
+
this.entries.set(agentId, { type: 'module', module });
|
|
41
|
+
this.registerLocalAgent({
|
|
42
|
+
id: agentId,
|
|
43
|
+
name: agentId,
|
|
44
|
+
description: metadata?.description ?? `DSPy Module: ${agentId}`,
|
|
45
|
+
capabilities: metadata?.capabilities ?? ['module', 'prompt-optimization'],
|
|
46
|
+
status: 'available',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
registerProgram(agentId, program, metadata) {
|
|
50
|
+
this.entries.set(agentId, { type: 'program', program });
|
|
51
|
+
this.registerLocalAgent({
|
|
52
|
+
id: agentId,
|
|
53
|
+
name: agentId,
|
|
54
|
+
description: metadata?.description ?? `DSPy Program: ${agentId}`,
|
|
55
|
+
capabilities: metadata?.capabilities ?? ['program', 'compiled', 'optimized'],
|
|
56
|
+
status: 'available',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
registerPredictor(agentId, predictor, metadata) {
|
|
60
|
+
this.entries.set(agentId, { type: 'predictor', predictor });
|
|
61
|
+
this.registerLocalAgent({
|
|
62
|
+
id: agentId,
|
|
63
|
+
name: agentId,
|
|
64
|
+
description: metadata?.description ?? `DSPy Predictor: ${agentId}`,
|
|
65
|
+
capabilities: metadata?.capabilities ?? ['predictor'],
|
|
66
|
+
status: 'available',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// --- Execution ---
|
|
70
|
+
async executeAgent(agentId, payload, context) {
|
|
71
|
+
this.ensureReady();
|
|
72
|
+
const entry = this.entries.get(agentId);
|
|
73
|
+
if (!entry) {
|
|
74
|
+
return this.errorResult('AGENT_NOT_FOUND', `DSPy entry "${agentId}" is not registered`, false);
|
|
75
|
+
}
|
|
76
|
+
const inputs = this.buildInputs(payload);
|
|
77
|
+
const startTime = Date.now();
|
|
78
|
+
try {
|
|
79
|
+
let prediction;
|
|
80
|
+
switch (entry.type) {
|
|
81
|
+
case 'module':
|
|
82
|
+
prediction = entry.module.__call__
|
|
83
|
+
? await entry.module.__call__(inputs)
|
|
84
|
+
: await entry.module.forward(inputs);
|
|
85
|
+
break;
|
|
86
|
+
case 'program':
|
|
87
|
+
prediction = await entry.program.run(inputs);
|
|
88
|
+
break;
|
|
89
|
+
case 'predictor':
|
|
90
|
+
prediction = await entry.predictor(inputs);
|
|
91
|
+
break;
|
|
92
|
+
default:
|
|
93
|
+
return this.errorResult('UNKNOWN_TYPE', 'Unknown DSPy entry type', false);
|
|
94
|
+
}
|
|
95
|
+
return this.successResult(this.normalizePrediction(prediction), Date.now() - startTime);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return this.errorResult('DSPY_ERROR', error instanceof Error ? error.message : 'DSPy execution failed', true, error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// --- Private helpers ---
|
|
102
|
+
buildInputs(payload) {
|
|
103
|
+
const inputs = { ...payload.params };
|
|
104
|
+
if (payload.handoff?.instruction) {
|
|
105
|
+
inputs.question = payload.handoff.instruction;
|
|
106
|
+
inputs.query = payload.handoff.instruction;
|
|
107
|
+
}
|
|
108
|
+
if (payload.blackboardSnapshot) {
|
|
109
|
+
inputs.context = payload.blackboardSnapshot;
|
|
110
|
+
}
|
|
111
|
+
return inputs;
|
|
112
|
+
}
|
|
113
|
+
normalizePrediction(prediction) {
|
|
114
|
+
// DSPy predictions have named output fields
|
|
115
|
+
const response = prediction.answer ??
|
|
116
|
+
prediction.response ??
|
|
117
|
+
prediction.rationale ??
|
|
118
|
+
'';
|
|
119
|
+
return {
|
|
120
|
+
response,
|
|
121
|
+
prediction: { ...prediction },
|
|
122
|
+
rationale: prediction.rationale,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.DSPyAdapter = DSPyAdapter;
|
|
127
|
+
//# sourceMappingURL=dspy-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dspy-adapter.js","sourceRoot":"","sources":["../../../adapters/dspy-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Haystack Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates deepset Haystack pipelines and agents with the SwarmOrchestrator.
|
|
6
|
+
* Haystack is a production-grade framework for building RAG and search
|
|
7
|
+
* pipelines with customisable components.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new HaystackAdapter();
|
|
11
|
+
* adapter.registerPipeline("search", myPipeline);
|
|
12
|
+
* adapter.registerAgent("qa-agent", myHaystackAgent);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "haystack:search", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module HaystackAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.HaystackAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class HaystackAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'haystack';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
entries = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: false,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: false,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: false,
|
|
35
|
+
statefulSessions: false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// --- Registration ---
|
|
39
|
+
registerPipeline(agentId, pipeline, metadata) {
|
|
40
|
+
this.entries.set(agentId, { type: 'pipeline', pipeline });
|
|
41
|
+
const pipelineMeta = pipeline.getMetadata?.();
|
|
42
|
+
this.registerLocalAgent({
|
|
43
|
+
id: agentId,
|
|
44
|
+
name: pipelineMeta?.name || agentId,
|
|
45
|
+
description: metadata?.description ?? `Haystack Pipeline: ${agentId}`,
|
|
46
|
+
capabilities: metadata?.capabilities ?? ['pipeline', 'rag'],
|
|
47
|
+
status: 'available',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
registerAgent(agentId, agent, metadata) {
|
|
51
|
+
this.entries.set(agentId, { type: 'agent', agent });
|
|
52
|
+
this.registerLocalAgent({
|
|
53
|
+
id: agentId,
|
|
54
|
+
name: agentId,
|
|
55
|
+
description: metadata?.description ?? `Haystack Agent: ${agentId}`,
|
|
56
|
+
capabilities: metadata?.capabilities ?? ['agent', 'qa'],
|
|
57
|
+
status: 'available',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
registerComponent(agentId, component, metadata) {
|
|
61
|
+
this.entries.set(agentId, { type: 'component', component });
|
|
62
|
+
this.registerLocalAgent({
|
|
63
|
+
id: agentId,
|
|
64
|
+
name: agentId,
|
|
65
|
+
description: metadata?.description ?? `Haystack Component: ${agentId}`,
|
|
66
|
+
capabilities: metadata?.capabilities ?? ['component'],
|
|
67
|
+
status: 'available',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// --- Execution ---
|
|
71
|
+
async executeAgent(agentId, payload, context) {
|
|
72
|
+
this.ensureReady();
|
|
73
|
+
const entry = this.entries.get(agentId);
|
|
74
|
+
if (!entry) {
|
|
75
|
+
return this.errorResult('AGENT_NOT_FOUND', `Haystack entry "${agentId}" is not registered`, false);
|
|
76
|
+
}
|
|
77
|
+
const startTime = Date.now();
|
|
78
|
+
try {
|
|
79
|
+
switch (entry.type) {
|
|
80
|
+
case 'pipeline':
|
|
81
|
+
return await this.executePipeline(entry.pipeline, payload, startTime);
|
|
82
|
+
case 'agent':
|
|
83
|
+
return await this.executeHaystackAgent(entry.agent, payload, startTime);
|
|
84
|
+
case 'component':
|
|
85
|
+
return await this.executeComponent(entry.component, payload, startTime);
|
|
86
|
+
default:
|
|
87
|
+
return this.errorResult('UNKNOWN_TYPE', 'Unknown entry type', false);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return this.errorResult('HAYSTACK_ERROR', error instanceof Error ? error.message : 'Haystack execution failed', true, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// --- Private helpers ---
|
|
95
|
+
async executePipeline(pipeline, payload, startTime) {
|
|
96
|
+
const inputs = this.buildPipelineInputs(payload);
|
|
97
|
+
const result = await pipeline.run(inputs);
|
|
98
|
+
return this.successResult(this.normalizePipelineResult(result), Date.now() - startTime);
|
|
99
|
+
}
|
|
100
|
+
async executeHaystackAgent(agent, payload, startTime) {
|
|
101
|
+
const query = payload.handoff?.instruction
|
|
102
|
+
|| payload.params?.query
|
|
103
|
+
|| JSON.stringify(payload.params);
|
|
104
|
+
const result = await agent.run(query, payload.params);
|
|
105
|
+
return this.successResult({
|
|
106
|
+
response: result.answer ?? '',
|
|
107
|
+
transcript: result.transcript,
|
|
108
|
+
documents: result.documents?.map((d) => ({
|
|
109
|
+
content: d.content?.slice(0, 300),
|
|
110
|
+
score: d.score,
|
|
111
|
+
meta: d.meta,
|
|
112
|
+
})),
|
|
113
|
+
}, Date.now() - startTime);
|
|
114
|
+
}
|
|
115
|
+
async executeComponent(component, payload, startTime) {
|
|
116
|
+
const inputs = this.buildPipelineInputs(payload);
|
|
117
|
+
const result = await component.run(inputs);
|
|
118
|
+
return this.successResult(result, Date.now() - startTime);
|
|
119
|
+
}
|
|
120
|
+
buildPipelineInputs(payload) {
|
|
121
|
+
const inputs = { ...payload.params };
|
|
122
|
+
if (payload.handoff?.instruction) {
|
|
123
|
+
inputs.query = payload.handoff.instruction;
|
|
124
|
+
}
|
|
125
|
+
if (payload.blackboardSnapshot) {
|
|
126
|
+
inputs.context = payload.blackboardSnapshot;
|
|
127
|
+
}
|
|
128
|
+
return inputs;
|
|
129
|
+
}
|
|
130
|
+
normalizePipelineResult(result) {
|
|
131
|
+
// Haystack pipeline results are keyed by component name.
|
|
132
|
+
// Try to find an answer/reply in the output.
|
|
133
|
+
const keys = Object.keys(result);
|
|
134
|
+
for (const key of keys) {
|
|
135
|
+
const component = result[key];
|
|
136
|
+
if (component && typeof component === 'object') {
|
|
137
|
+
if ('replies' in component)
|
|
138
|
+
return { response: component.replies, components: result };
|
|
139
|
+
if ('answers' in component)
|
|
140
|
+
return { response: component.answers, components: result };
|
|
141
|
+
if ('documents' in component)
|
|
142
|
+
return { documents: component.documents, components: result };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { response: result };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.HaystackAdapter = HaystackAdapter;
|
|
149
|
+
//# sourceMappingURL=haystack-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haystack-adapter.js","sourceRoot":"","sources":["../../../adapters/haystack-adapter.ts"],"names":[],"mappings":"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"}
|