network-ai 5.10.1 → 5.11.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/README.md +5 -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,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RLM Adapter — Recursive Language Model integration
|
|
4
|
+
*
|
|
5
|
+
* Connects the SwarmOrchestrator to any RLM-compatible HTTP endpoint
|
|
6
|
+
* (see arxiv 2512.24601 / alexzhang13/rlm). BYOC — bring your own client.
|
|
7
|
+
*
|
|
8
|
+
* The adapter serialises each `AgentPayload` into a prompt string and POST it
|
|
9
|
+
* to `<endpoint>/completion`. The server responds with a JSON body whose
|
|
10
|
+
* `text` (or `content`) field becomes the agent result data.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const adapter = new RLMAdapter();
|
|
15
|
+
* adapter.registerAgent('rlm-planner', {
|
|
16
|
+
* endpoint: 'http://localhost:8080',
|
|
17
|
+
* model: 'rlm-7b',
|
|
18
|
+
* maxDepth: 3,
|
|
19
|
+
* });
|
|
20
|
+
* await adapter.initialize({});
|
|
21
|
+
* const result = await adapter.executeAgent('rlm-planner', payload, ctx);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @module RLMAdapter
|
|
25
|
+
* @version 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.RLMAdapter = void 0;
|
|
29
|
+
const base_adapter_1 = require("./base-adapter");
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Adapter
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/**
|
|
34
|
+
* Adapter for RLM-compatible recursive language-model servers.
|
|
35
|
+
*/
|
|
36
|
+
class RLMAdapter extends base_adapter_1.BaseAdapter {
|
|
37
|
+
name = 'rlm';
|
|
38
|
+
version = '1.0.0';
|
|
39
|
+
agentConfigs = new Map();
|
|
40
|
+
get capabilities() {
|
|
41
|
+
return {
|
|
42
|
+
streaming: false,
|
|
43
|
+
parallel: true,
|
|
44
|
+
bidirectional: false,
|
|
45
|
+
discovery: false,
|
|
46
|
+
authentication: false,
|
|
47
|
+
statefulSessions: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async initialize(config) {
|
|
51
|
+
await super.initialize(config);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register an agent backed by an RLM endpoint.
|
|
55
|
+
*
|
|
56
|
+
* @param agentId Unique agent identifier used when calling `executeAgent`.
|
|
57
|
+
* @param config Per-agent RLM configuration.
|
|
58
|
+
*/
|
|
59
|
+
registerAgent(agentId, config) {
|
|
60
|
+
if (!agentId || typeof agentId !== 'string') {
|
|
61
|
+
throw new TypeError('RLMAdapter.registerAgent: agentId must be a non-empty string');
|
|
62
|
+
}
|
|
63
|
+
if (!config.endpoint || typeof config.endpoint !== 'string') {
|
|
64
|
+
throw new TypeError('RLMAdapter.registerAgent: config.endpoint must be a non-empty string');
|
|
65
|
+
}
|
|
66
|
+
this.agentConfigs.set(agentId, { config });
|
|
67
|
+
this.registerLocalAgent({
|
|
68
|
+
id: agentId,
|
|
69
|
+
name: agentId,
|
|
70
|
+
description: `RLM agent at ${config.endpoint}`,
|
|
71
|
+
capabilities: ['completion'],
|
|
72
|
+
status: 'available',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async executeAgent(agentId, payload, context) {
|
|
76
|
+
this.ensureReady();
|
|
77
|
+
const stored = this.agentConfigs.get(agentId);
|
|
78
|
+
if (!stored) {
|
|
79
|
+
return this.errorResult('AGENT_NOT_FOUND', `RLMAdapter: no agent registered with id "${agentId}"`, false);
|
|
80
|
+
}
|
|
81
|
+
const { config } = stored;
|
|
82
|
+
const startMs = Date.now();
|
|
83
|
+
try {
|
|
84
|
+
const prompt = this._buildPrompt(config.systemPrompt, payload);
|
|
85
|
+
const requestBody = {
|
|
86
|
+
prompt,
|
|
87
|
+
model: config.model ?? 'rlm-default',
|
|
88
|
+
max_depth: config.maxDepth ?? 1,
|
|
89
|
+
agent_id: agentId,
|
|
90
|
+
task_id: context.taskId,
|
|
91
|
+
session_id: context.sessionId,
|
|
92
|
+
metadata: context.metadata,
|
|
93
|
+
};
|
|
94
|
+
const responseBody = await this._post(config, `${config.endpoint}/completion`, requestBody);
|
|
95
|
+
const text = typeof responseBody['text'] === 'string'
|
|
96
|
+
? responseBody['text']
|
|
97
|
+
: typeof responseBody['content'] === 'string'
|
|
98
|
+
? responseBody['content']
|
|
99
|
+
: JSON.stringify(responseBody);
|
|
100
|
+
return this.successResult({ text, raw: responseBody }, Date.now() - startMs);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
return this.errorResult('RLM_REQUEST_FAILED', err instanceof Error ? err.message : String(err), true, err);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// --------------------------------------------------------------------------
|
|
107
|
+
// Private helpers
|
|
108
|
+
// --------------------------------------------------------------------------
|
|
109
|
+
/** Build a plain-text prompt from the agent config + payload. */
|
|
110
|
+
_buildPrompt(systemPrompt, payload) {
|
|
111
|
+
const parts = [];
|
|
112
|
+
if (systemPrompt)
|
|
113
|
+
parts.push(systemPrompt);
|
|
114
|
+
parts.push(`Action: ${payload.action}`);
|
|
115
|
+
if (payload.params && Object.keys(payload.params).length > 0) {
|
|
116
|
+
try {
|
|
117
|
+
parts.push(`Params: ${JSON.stringify(payload.params)}`);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
parts.push('Params: [unserializable]');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (payload.handoff) {
|
|
124
|
+
parts.push(`Instruction: ${payload.handoff.instruction ?? ''}`);
|
|
125
|
+
}
|
|
126
|
+
return parts.join('\n');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Send a POST request using the BYOC client when provided,
|
|
130
|
+
* otherwise fall back to the built-in `fetch`-based transport.
|
|
131
|
+
*/
|
|
132
|
+
async _post(config, url, body) {
|
|
133
|
+
const timeoutMs = config.timeoutMs ?? 60_000;
|
|
134
|
+
if (config.client) {
|
|
135
|
+
const result = await config.client.post(url, body, {
|
|
136
|
+
headers: config.headers,
|
|
137
|
+
timeoutMs,
|
|
138
|
+
});
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
// Built-in fetch transport with timeout via AbortController
|
|
142
|
+
const controller = new AbortController();
|
|
143
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
144
|
+
try {
|
|
145
|
+
const headers = {
|
|
146
|
+
'Content-Type': 'application/json',
|
|
147
|
+
...(config.headers ?? {}),
|
|
148
|
+
};
|
|
149
|
+
const response = await fetch(url, {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
headers,
|
|
152
|
+
body: JSON.stringify(body),
|
|
153
|
+
signal: controller.signal,
|
|
154
|
+
});
|
|
155
|
+
if (!response.ok) {
|
|
156
|
+
throw new Error(`RLM HTTP ${response.status}: ${response.statusText}`);
|
|
157
|
+
}
|
|
158
|
+
const json = await response.json();
|
|
159
|
+
return json;
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
clearTimeout(timer);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.RLMAdapter = RLMAdapter;
|
|
167
|
+
//# sourceMappingURL=rlm-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rlm-adapter.js","sourceRoot":"","sources":["../../../adapters/rlm-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic Kernel Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates Microsoft Semantic Kernel agents and functions with the
|
|
6
|
+
* SwarmOrchestrator. Semantic Kernel is Microsoft's enterprise SDK for
|
|
7
|
+
* building AI-powered apps with plugins, planners, and memory.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new SemanticKernelAdapter();
|
|
11
|
+
* adapter.registerKernel("planner", myKernel);
|
|
12
|
+
* adapter.registerFunction("summarise", mySKFunction);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "semantic-kernel:planner", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module SemanticKernelAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.SemanticKernelAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class SemanticKernelAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'semantic-kernel';
|
|
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: true,
|
|
35
|
+
statefulSessions: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// --- Registration ---
|
|
39
|
+
registerKernel(agentId, kernel, metadata) {
|
|
40
|
+
this.entries.set(agentId, { type: 'kernel', kernel });
|
|
41
|
+
this.registerLocalAgent({
|
|
42
|
+
id: agentId,
|
|
43
|
+
name: agentId,
|
|
44
|
+
description: metadata?.description ?? `Semantic Kernel: ${agentId}`,
|
|
45
|
+
capabilities: metadata?.capabilities ?? ['planner', 'plugins', 'prompt'],
|
|
46
|
+
status: 'available',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
registerFunction(agentId, fn, metadata) {
|
|
50
|
+
this.entries.set(agentId, { type: 'function', fn });
|
|
51
|
+
this.registerLocalAgent({
|
|
52
|
+
id: agentId,
|
|
53
|
+
name: fn.name || agentId,
|
|
54
|
+
description: metadata?.description ?? `SK Function: ${fn.name || agentId}`,
|
|
55
|
+
capabilities: metadata?.capabilities ?? ['function'],
|
|
56
|
+
status: 'available',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// --- Execution ---
|
|
60
|
+
async executeAgent(agentId, payload, context) {
|
|
61
|
+
this.ensureReady();
|
|
62
|
+
const entry = this.entries.get(agentId);
|
|
63
|
+
if (!entry) {
|
|
64
|
+
return this.errorResult('AGENT_NOT_FOUND', `Semantic Kernel entry "${agentId}" is not registered`, false);
|
|
65
|
+
}
|
|
66
|
+
const startTime = Date.now();
|
|
67
|
+
try {
|
|
68
|
+
if (entry.type === 'function') {
|
|
69
|
+
return await this.executeSKFunction(entry.fn, payload, startTime);
|
|
70
|
+
}
|
|
71
|
+
return await this.executeKernel(entry.kernel, payload, startTime);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return this.errorResult('SK_ERROR', error instanceof Error ? error.message : 'Semantic Kernel execution failed', true, error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// --- Private helpers ---
|
|
78
|
+
async executeSKFunction(fn, payload, startTime) {
|
|
79
|
+
const args = this.buildArgs(payload);
|
|
80
|
+
const result = await fn.invoke(args);
|
|
81
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
82
|
+
}
|
|
83
|
+
async executeKernel(kernel, payload, startTime) {
|
|
84
|
+
const goal = payload.handoff?.instruction || JSON.stringify(payload.params);
|
|
85
|
+
const args = this.buildArgs(payload);
|
|
86
|
+
// Strategy 1: Use planner if available and we have a goal
|
|
87
|
+
if (kernel.runPlan && payload.handoff?.instruction) {
|
|
88
|
+
const plan = await kernel.runPlan(goal, args);
|
|
89
|
+
return this.successResult({
|
|
90
|
+
response: plan.result,
|
|
91
|
+
steps: plan.steps,
|
|
92
|
+
error: plan.error,
|
|
93
|
+
}, Date.now() - startTime);
|
|
94
|
+
}
|
|
95
|
+
// Strategy 2: Invoke a named function
|
|
96
|
+
if (kernel.invokeFunction && payload.params?.functionName) {
|
|
97
|
+
const result = await kernel.invokeFunction(String(payload.params.functionName), args);
|
|
98
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
99
|
+
}
|
|
100
|
+
// Strategy 3: Invoke a prompt directly
|
|
101
|
+
if (kernel.invokePrompt) {
|
|
102
|
+
const result = await kernel.invokePrompt(goal, args);
|
|
103
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
104
|
+
}
|
|
105
|
+
return this.errorResult('NO_METHOD', 'Kernel has no callable method (runPlan, invokeFunction, invokePrompt)', false);
|
|
106
|
+
}
|
|
107
|
+
buildArgs(payload) {
|
|
108
|
+
const args = { ...payload.params };
|
|
109
|
+
if (payload.handoff?.instruction)
|
|
110
|
+
args.input = payload.handoff.instruction;
|
|
111
|
+
if (payload.blackboardSnapshot)
|
|
112
|
+
args.context = payload.blackboardSnapshot;
|
|
113
|
+
return args;
|
|
114
|
+
}
|
|
115
|
+
normalizeResult(result) {
|
|
116
|
+
return {
|
|
117
|
+
response: result.value ?? result.toString?.() ?? '',
|
|
118
|
+
metadata: result.metadata,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.SemanticKernelAdapter = SemanticKernelAdapter;
|
|
123
|
+
//# sourceMappingURL=semantic-kernel-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-kernel-adapter.js","sourceRoot":"","sources":["../../../adapters/semantic-kernel-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StreamingBaseAdapter — Abstract base for all streaming-capable adapters.
|
|
4
|
+
*
|
|
5
|
+
* Extends {@link BaseAdapter} with a default `executeAgentStream()` that wraps
|
|
6
|
+
* the non-streaming `executeAgent()` result as a single `StreamingChunk`.
|
|
7
|
+
* Subclasses override `executeAgentStream()` and/or `supportsStreaming()` to
|
|
8
|
+
* provide genuine incremental streaming.
|
|
9
|
+
*
|
|
10
|
+
* @module StreamingBaseAdapter
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.StreamingBaseAdapter = void 0;
|
|
15
|
+
exports.collectStream = collectStream;
|
|
16
|
+
const base_adapter_1 = require("./base-adapter");
|
|
17
|
+
class StreamingBaseAdapter extends base_adapter_1.BaseAdapter {
|
|
18
|
+
/**
|
|
19
|
+
* Returns `true` when the named agent has a real streaming implementation.
|
|
20
|
+
* Default: `false` (fallback single-chunk wrapper is used).
|
|
21
|
+
* Override in subclasses that register streaming agents.
|
|
22
|
+
*/
|
|
23
|
+
supportsStreaming(_agentId) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default streaming implementation — wraps `executeAgent()` as a single chunk.
|
|
28
|
+
*
|
|
29
|
+
* Subclasses that support genuine streaming should override this method.
|
|
30
|
+
* The overriding implementation should:
|
|
31
|
+
* 1. yield partial text chunks as they arrive
|
|
32
|
+
* 2. yield a final chunk with `done: true` and `text: ''`
|
|
33
|
+
*
|
|
34
|
+
* **Permission-check semantics:** Permission is checked once at the start of
|
|
35
|
+
* the stream (when `executeAgent` / the overriding implementation begins),
|
|
36
|
+
* not per-chunk. A stream is treated as a single logical operation. Keep
|
|
37
|
+
* stream lifetimes short and request the narrowest permission scope possible
|
|
38
|
+
* to minimise the window between the initial check and stream completion.
|
|
39
|
+
*/
|
|
40
|
+
async *executeAgentStream(agentId, payload, context) {
|
|
41
|
+
const result = await this.executeAgent(agentId, payload, context);
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
// Propagate the error as a single done-chunk with error text
|
|
44
|
+
const msg = result.error?.message ?? 'Agent execution failed';
|
|
45
|
+
yield { text: msg, done: true, metadata: { error: true, code: result.error?.code } };
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Flatten data to a string for the streaming consumer
|
|
49
|
+
const data = result.data;
|
|
50
|
+
const text = typeof data === 'string' ? data :
|
|
51
|
+
data != null ? JSON.stringify(data) :
|
|
52
|
+
'';
|
|
53
|
+
yield { text, done: false, metadata: result.metadata };
|
|
54
|
+
yield { text: '', done: true, metadata: { adapter: this.name } };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.StreamingBaseAdapter = StreamingBaseAdapter;
|
|
58
|
+
/**
|
|
59
|
+
* Utility: drain a streaming adapter into a single accumulated result.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* const { output } = await collectStream(adapter.executeAgentStream('my-agent', payload, ctx));
|
|
63
|
+
*/
|
|
64
|
+
async function collectStream(stream) {
|
|
65
|
+
const chunks = [];
|
|
66
|
+
let output = '';
|
|
67
|
+
for await (const chunk of stream) {
|
|
68
|
+
chunks.push(chunk);
|
|
69
|
+
if (chunk.text)
|
|
70
|
+
output += chunk.text;
|
|
71
|
+
}
|
|
72
|
+
return { output, chunks };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=streaming-base-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-base-adapter.js","sourceRoot":"","sources":["../../../adapters/streaming-base-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AA+DH,sCAUC;AArED,iDAA6C;AAE7C,MAAsB,oBAAqB,SAAQ,0BAAW;IAE5D;;;;OAIG;IACH,iBAAiB,CAAC,QAAgB;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,CAAC,kBAAkB,CACvB,OAAe,EACf,OAAqB,EACrB,OAAqB;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAElE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,6DAA6D;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC;YAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YACrF,OAAO;QACT,CAAC;QAED,sDAAsD;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,CAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtB,EAAE,CAAC;QAEhC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACnE,CAAC;CACF;AAjDD,oDAiDC;AAED;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CACjC,MAAqC;IAErC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vertex AI Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates Google Vertex AI (Gemini models, PaLM, custom endpoints)
|
|
6
|
+
* with the SwarmOrchestrator.
|
|
7
|
+
*
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Gemini chat/generation (via user-supplied client)
|
|
10
|
+
* - Function calling / tool use
|
|
11
|
+
* - Multi-modal inputs (text + images)
|
|
12
|
+
* - Custom Vertex AI endpoints
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* const adapter = new VertexAIAdapter();
|
|
16
|
+
* adapter.registerModel('analyst', {
|
|
17
|
+
* client: myVertexClient,
|
|
18
|
+
* model: 'gemini-2.0-flash',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* @module VertexAIAdapter
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.VertexAIAdapter = void 0;
|
|
26
|
+
const base_adapter_1 = require("./base-adapter");
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Adapter
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Adapter for Google Vertex AI (Gemini, PaLM, custom endpoints).
|
|
32
|
+
*
|
|
33
|
+
* Each registered model is exposed as a named agent. Supports
|
|
34
|
+
* multi-turn tool use loops when functions are configured.
|
|
35
|
+
*/
|
|
36
|
+
class VertexAIAdapter extends base_adapter_1.BaseAdapter {
|
|
37
|
+
name = 'vertex-ai';
|
|
38
|
+
version = '1.0.0';
|
|
39
|
+
models = new Map();
|
|
40
|
+
get capabilities() {
|
|
41
|
+
return {
|
|
42
|
+
streaming: false,
|
|
43
|
+
parallel: true,
|
|
44
|
+
bidirectional: false,
|
|
45
|
+
discovery: true,
|
|
46
|
+
authentication: true,
|
|
47
|
+
statefulSessions: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// -----------------------------------------------------------------------
|
|
51
|
+
// Registration
|
|
52
|
+
// -----------------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* Register a Vertex AI model as a named agent.
|
|
55
|
+
*/
|
|
56
|
+
registerModel(agentId, config) {
|
|
57
|
+
this.models.set(agentId, config);
|
|
58
|
+
this.registerLocalAgent({
|
|
59
|
+
id: agentId,
|
|
60
|
+
name: agentId,
|
|
61
|
+
status: 'available',
|
|
62
|
+
capabilities: [
|
|
63
|
+
'generation',
|
|
64
|
+
...(config.functions?.length ? ['tool-use'] : []),
|
|
65
|
+
],
|
|
66
|
+
metadata: {
|
|
67
|
+
adapter: 'vertex-ai',
|
|
68
|
+
model: config.model ?? 'gemini-2.0-flash',
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// -----------------------------------------------------------------------
|
|
73
|
+
// Execution
|
|
74
|
+
// -----------------------------------------------------------------------
|
|
75
|
+
async executeAgent(agentId, payload, _context) {
|
|
76
|
+
this.ensureReady();
|
|
77
|
+
const config = this.models.get(agentId);
|
|
78
|
+
if (!config) {
|
|
79
|
+
return this.errorResult('VERTEX_AGENT_NOT_FOUND', `No model registered as '${agentId}'`);
|
|
80
|
+
}
|
|
81
|
+
const instruction = payload.handoff?.instruction
|
|
82
|
+
?? payload.params?.instruction
|
|
83
|
+
?? payload.action;
|
|
84
|
+
const timeoutMs = config.timeoutMs ?? 60_000;
|
|
85
|
+
const maxIterations = config.maxIterations ?? 10;
|
|
86
|
+
const start = Date.now();
|
|
87
|
+
// Build initial contents
|
|
88
|
+
const userParts = [{ text: instruction }];
|
|
89
|
+
// Add image if provided
|
|
90
|
+
const imageData = payload.params?.image;
|
|
91
|
+
const imageMime = payload.params?.imageMimeType ?? 'image/png';
|
|
92
|
+
if (imageData) {
|
|
93
|
+
userParts.push({ inlineData: { mimeType: imageMime, data: imageData } });
|
|
94
|
+
}
|
|
95
|
+
const contents = [
|
|
96
|
+
{ role: 'user', parts: userParts },
|
|
97
|
+
];
|
|
98
|
+
const systemInstruction = config.systemInstruction
|
|
99
|
+
? { parts: [{ text: config.systemInstruction }] }
|
|
100
|
+
: undefined;
|
|
101
|
+
const tools = config.functions?.length
|
|
102
|
+
? [{ functionDeclarations: config.functions }]
|
|
103
|
+
: undefined;
|
|
104
|
+
let iterations = 0;
|
|
105
|
+
let totalTokens = 0;
|
|
106
|
+
try {
|
|
107
|
+
while (iterations < maxIterations) {
|
|
108
|
+
iterations++;
|
|
109
|
+
const result = await Promise.race([
|
|
110
|
+
config.client.generateContent({ contents, systemInstruction, tools }),
|
|
111
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Vertex AI invocation timed out')), timeoutMs)),
|
|
112
|
+
]);
|
|
113
|
+
const response = result.response;
|
|
114
|
+
if (response.usageMetadata) {
|
|
115
|
+
totalTokens += response.usageMetadata.totalTokenCount;
|
|
116
|
+
}
|
|
117
|
+
// If no function calls or no executor, return text result
|
|
118
|
+
if (!response.functionCalls?.length || !config.functionExecutor) {
|
|
119
|
+
const durationMs = Date.now() - start;
|
|
120
|
+
return this.successResult({
|
|
121
|
+
text: response.text,
|
|
122
|
+
finishReason: response.finishReason,
|
|
123
|
+
tokensUsed: totalTokens,
|
|
124
|
+
safetyRatings: response.safetyRatings,
|
|
125
|
+
iterations,
|
|
126
|
+
}, durationMs);
|
|
127
|
+
}
|
|
128
|
+
// Execute function calls
|
|
129
|
+
contents.push({
|
|
130
|
+
role: 'model',
|
|
131
|
+
parts: response.functionCalls.map((fc) => ({
|
|
132
|
+
text: JSON.stringify({ functionCall: { name: fc.name, args: fc.args } }),
|
|
133
|
+
})),
|
|
134
|
+
});
|
|
135
|
+
const functionResults = [];
|
|
136
|
+
for (const fc of response.functionCalls) {
|
|
137
|
+
const fnResult = await config.functionExecutor(fc.name, fc.args);
|
|
138
|
+
functionResults.push({
|
|
139
|
+
text: JSON.stringify({ functionResponse: { name: fc.name, response: fnResult } }),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
contents.push({ role: 'function', parts: functionResults });
|
|
143
|
+
}
|
|
144
|
+
// Max iterations
|
|
145
|
+
const durationMs = Date.now() - start;
|
|
146
|
+
return this.successResult({
|
|
147
|
+
text: 'Max function-call iterations reached',
|
|
148
|
+
tokensUsed: totalTokens,
|
|
149
|
+
iterations,
|
|
150
|
+
exhausted: true,
|
|
151
|
+
}, durationMs);
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
return this.errorResult('VERTEX_EXECUTION_FAILED', err instanceof Error ? err.message : String(err));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// -----------------------------------------------------------------------
|
|
158
|
+
// Lifecycle
|
|
159
|
+
// -----------------------------------------------------------------------
|
|
160
|
+
async shutdown() {
|
|
161
|
+
this.models.clear();
|
|
162
|
+
await super.shutdown();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.VertexAIAdapter = VertexAIAdapter;
|
|
166
|
+
//# sourceMappingURL=vertex-ai-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-adapter.js","sourceRoot":"","sources":["../../../adapters/vertex-ai-adapter.ts"],"names":[],"mappings":"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"}
|