network-ai 4.15.2 → 5.0.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 +11 -4
- package/QUICKSTART.md +31 -4
- package/README.md +37 -15
- package/bin/dashboard.ts +146 -0
- package/bin/mcp-server.ts +3 -2
- package/dist/adapters/adapter-registry.d.ts +33 -1
- package/dist/adapters/adapter-registry.d.ts.map +1 -1
- package/dist/adapters/adapter-registry.js +49 -0
- package/dist/adapters/adapter-registry.js.map +1 -1
- package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
- package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
- package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/adapters/browser-agent-adapter.d.ts +121 -0
- package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
- package/dist/adapters/browser-agent-adapter.js +219 -0
- package/dist/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/adapters/copilot-adapter.d.ts +59 -0
- package/dist/adapters/copilot-adapter.d.ts.map +1 -0
- package/dist/adapters/copilot-adapter.js +132 -0
- package/dist/adapters/copilot-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +15 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +22 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/langgraph-adapter.d.ts +70 -0
- package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
- package/dist/adapters/langgraph-adapter.js +119 -0
- package/dist/adapters/langgraph-adapter.js.map +1 -0
- package/dist/adapters/openai-agents-adapter.d.ts +100 -0
- package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-agents-adapter.js +118 -0
- package/dist/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
- package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
- package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
- package/dist/adapters/vertex-ai-adapter.js +166 -0
- package/dist/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/bin/dashboard.d.ts +11 -0
- package/dist/bin/dashboard.d.ts.map +1 -0
- package/dist/bin/dashboard.js +135 -0
- package/dist/bin/dashboard.js.map +1 -0
- package/dist/bin/mcp-server.js +3 -2
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/index.d.ts +103 -559
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +295 -1074
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter-test-harness.d.ts +88 -0
- package/dist/lib/adapter-test-harness.d.ts.map +1 -0
- package/dist/lib/adapter-test-harness.js +118 -0
- package/dist/lib/adapter-test-harness.js.map +1 -0
- package/dist/lib/agent-conversation.d.ts +115 -0
- package/dist/lib/agent-conversation.d.ts.map +1 -0
- package/dist/lib/agent-conversation.js +155 -0
- package/dist/lib/agent-conversation.js.map +1 -0
- package/dist/lib/agent-debate.d.ts +115 -0
- package/dist/lib/agent-debate.d.ts.map +1 -0
- package/dist/lib/agent-debate.js +146 -0
- package/dist/lib/agent-debate.js.map +1 -0
- package/dist/lib/agent-memory.d.ts +157 -0
- package/dist/lib/agent-memory.d.ts.map +1 -0
- package/dist/lib/agent-memory.js +336 -0
- package/dist/lib/agent-memory.js.map +1 -0
- package/dist/lib/agent-vcr.d.ts +133 -0
- package/dist/lib/agent-vcr.d.ts.map +1 -0
- package/dist/lib/agent-vcr.js +218 -0
- package/dist/lib/agent-vcr.js.map +1 -0
- package/dist/lib/anomaly-detector.d.ts +112 -0
- package/dist/lib/anomaly-detector.d.ts.map +1 -0
- package/dist/lib/anomaly-detector.js +178 -0
- package/dist/lib/anomaly-detector.js.map +1 -0
- package/dist/lib/approval-inbox.d.ts +147 -0
- package/dist/lib/approval-inbox.d.ts.map +1 -0
- package/dist/lib/approval-inbox.js +385 -0
- package/dist/lib/approval-inbox.js.map +1 -0
- package/dist/lib/auth-guardian.d.ts +170 -0
- package/dist/lib/auth-guardian.d.ts.map +1 -0
- package/dist/lib/auth-guardian.js +604 -0
- package/dist/lib/auth-guardian.js.map +1 -0
- package/dist/lib/auth-validator.d.ts +70 -0
- package/dist/lib/auth-validator.d.ts.map +1 -0
- package/dist/lib/auth-validator.js +32 -0
- package/dist/lib/auth-validator.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +56 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -1
- package/dist/lib/blackboard-validator.js +181 -4
- package/dist/lib/blackboard-validator.js.map +1 -1
- package/dist/lib/comparison-runner.d.ts +99 -0
- package/dist/lib/comparison-runner.d.ts.map +1 -0
- package/dist/lib/comparison-runner.js +138 -0
- package/dist/lib/comparison-runner.js.map +1 -0
- package/dist/lib/config-watcher.d.ts +109 -0
- package/dist/lib/config-watcher.d.ts.map +1 -0
- package/dist/lib/config-watcher.js +215 -0
- package/dist/lib/config-watcher.js.map +1 -0
- package/dist/lib/cost-governor.d.ts +105 -0
- package/dist/lib/cost-governor.d.ts.map +1 -0
- package/dist/lib/cost-governor.js +128 -0
- package/dist/lib/cost-governor.js.map +1 -0
- package/dist/lib/cost-heatmap.d.ts +104 -0
- package/dist/lib/cost-heatmap.d.ts.map +1 -0
- package/dist/lib/cost-heatmap.js +161 -0
- package/dist/lib/cost-heatmap.js.map +1 -0
- package/dist/lib/coverage-reporter.d.ts +92 -0
- package/dist/lib/coverage-reporter.d.ts.map +1 -0
- package/dist/lib/coverage-reporter.js +177 -0
- package/dist/lib/coverage-reporter.js.map +1 -0
- package/dist/lib/dashboard-server.d.ts +71 -0
- package/dist/lib/dashboard-server.d.ts.map +1 -0
- package/dist/lib/dashboard-server.js +403 -0
- package/dist/lib/dashboard-server.js.map +1 -0
- package/dist/lib/dry-run.d.ts +73 -0
- package/dist/lib/dry-run.d.ts.map +1 -0
- package/dist/lib/dry-run.js +130 -0
- package/dist/lib/dry-run.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +38 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/event-bus.d.ts +167 -0
- package/dist/lib/event-bus.d.ts.map +1 -0
- package/dist/lib/event-bus.js +229 -0
- package/dist/lib/event-bus.js.map +1 -0
- package/dist/lib/explainability.d.ts +85 -0
- package/dist/lib/explainability.d.ts.map +1 -0
- package/dist/lib/explainability.js +102 -0
- package/dist/lib/explainability.js.map +1 -0
- package/dist/lib/goal-dsl.d.ts +157 -0
- package/dist/lib/goal-dsl.d.ts.map +1 -0
- package/dist/lib/goal-dsl.js +392 -0
- package/dist/lib/goal-dsl.js.map +1 -0
- package/dist/lib/job-queue.d.ts +183 -0
- package/dist/lib/job-queue.d.ts.map +1 -0
- package/dist/lib/job-queue.js +310 -0
- package/dist/lib/job-queue.js.map +1 -0
- package/dist/lib/learning-loop.d.ts +113 -0
- package/dist/lib/learning-loop.d.ts.map +1 -0
- package/dist/lib/learning-loop.js +181 -0
- package/dist/lib/learning-loop.js.map +1 -0
- package/dist/lib/lifecycle-hooks.d.ts +116 -0
- package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
- package/dist/lib/lifecycle-hooks.js +148 -0
- package/dist/lib/lifecycle-hooks.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -1
- package/dist/lib/locked-blackboard.js +9 -5
- package/dist/lib/locked-blackboard.js.map +1 -1
- package/dist/lib/mcp-tool-consumer.d.ts +153 -0
- package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
- package/dist/lib/mcp-tool-consumer.js +320 -0
- package/dist/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/lib/metrics.d.ts +119 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +284 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/orchestrator-types.d.ts +309 -0
- package/dist/lib/orchestrator-types.d.ts.map +1 -0
- package/dist/lib/orchestrator-types.js +61 -0
- package/dist/lib/orchestrator-types.js.map +1 -0
- package/dist/lib/otel-bridge.d.ts +74 -0
- package/dist/lib/otel-bridge.d.ts.map +1 -0
- package/dist/lib/otel-bridge.js +167 -0
- package/dist/lib/otel-bridge.js.map +1 -0
- package/dist/lib/playground.d.ts +76 -0
- package/dist/lib/playground.d.ts.map +1 -0
- package/dist/lib/playground.js +224 -0
- package/dist/lib/playground.js.map +1 -0
- package/dist/lib/quadtree.d.ts +114 -0
- package/dist/lib/quadtree.d.ts.map +1 -0
- package/dist/lib/quadtree.js +259 -0
- package/dist/lib/quadtree.js.map +1 -0
- package/dist/lib/shared-blackboard.d.ts +101 -0
- package/dist/lib/shared-blackboard.d.ts.map +1 -0
- package/dist/lib/shared-blackboard.js +249 -0
- package/dist/lib/shared-blackboard.js.map +1 -0
- package/dist/lib/speculative-executor.d.ts +89 -0
- package/dist/lib/speculative-executor.d.ts.map +1 -0
- package/dist/lib/speculative-executor.js +107 -0
- package/dist/lib/speculative-executor.js.map +1 -0
- package/dist/lib/swarm-transport.d.ts +150 -0
- package/dist/lib/swarm-transport.d.ts.map +1 -0
- package/dist/lib/swarm-transport.js +307 -0
- package/dist/lib/swarm-transport.js.map +1 -0
- package/dist/lib/task-decomposer.d.ts +41 -0
- package/dist/lib/task-decomposer.d.ts.map +1 -0
- package/dist/lib/task-decomposer.js +272 -0
- package/dist/lib/task-decomposer.js.map +1 -0
- package/dist/lib/timeline-scrubber.d.ts +84 -0
- package/dist/lib/timeline-scrubber.d.ts.map +1 -0
- package/dist/lib/timeline-scrubber.js +173 -0
- package/dist/lib/timeline-scrubber.js.map +1 -0
- package/dist/lib/topology.d.ts +361 -0
- package/dist/lib/topology.d.ts.map +1 -0
- package/dist/lib/topology.js +591 -0
- package/dist/lib/topology.js.map +1 -0
- package/dist/security.d.ts +95 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +267 -5
- package/dist/security.js.map +1 -1
- package/package.json +7 -5
- package/types/agent-adapter.d.ts +5 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Agents SDK Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates the OpenAI Agents SDK (Python-first, but JS-compatible API)
|
|
6
|
+
* with the SwarmOrchestrator.
|
|
7
|
+
*
|
|
8
|
+
* The OpenAI Agents SDK provides:
|
|
9
|
+
* - Agent definition with instructions + tools
|
|
10
|
+
* - Handoff between agents
|
|
11
|
+
* - Guardrails (input/output validation)
|
|
12
|
+
* - Tracing
|
|
13
|
+
*
|
|
14
|
+
* This adapter wraps user-supplied agent runners or HTTP endpoints
|
|
15
|
+
* that expose the Agents SDK interface. No hard dependency on the SDK.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* const adapter = new OpenAIAgentsAdapter();
|
|
19
|
+
* adapter.registerAgentRunner('researcher', {
|
|
20
|
+
* runner: myAgentRunner,
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* @module OpenAIAgentsAdapter
|
|
24
|
+
* @version 1.0.0
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.OpenAIAgentsAdapter = void 0;
|
|
28
|
+
const base_adapter_1 = require("./base-adapter");
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Adapter
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Adapter for the OpenAI Agents SDK.
|
|
34
|
+
*
|
|
35
|
+
* Wraps agent runners that implement the OAIAgentRunner interface.
|
|
36
|
+
* Supports tool use, handoffs, and guardrails via the SDK's execution model.
|
|
37
|
+
*/
|
|
38
|
+
class OpenAIAgentsAdapter extends base_adapter_1.BaseAdapter {
|
|
39
|
+
name = 'openai-agents';
|
|
40
|
+
version = '1.0.0';
|
|
41
|
+
runners = new Map();
|
|
42
|
+
get capabilities() {
|
|
43
|
+
return {
|
|
44
|
+
streaming: false,
|
|
45
|
+
parallel: true,
|
|
46
|
+
bidirectional: false,
|
|
47
|
+
discovery: true,
|
|
48
|
+
authentication: true,
|
|
49
|
+
statefulSessions: false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// -----------------------------------------------------------------------
|
|
53
|
+
// Registration
|
|
54
|
+
// -----------------------------------------------------------------------
|
|
55
|
+
/**
|
|
56
|
+
* Register an OpenAI Agent runner as a named agent.
|
|
57
|
+
*/
|
|
58
|
+
registerAgentRunner(agentId, config) {
|
|
59
|
+
this.runners.set(agentId, config);
|
|
60
|
+
this.registerLocalAgent({
|
|
61
|
+
id: agentId,
|
|
62
|
+
name: agentId,
|
|
63
|
+
status: 'available',
|
|
64
|
+
capabilities: ['tool-use', 'handoff', ...(config.tools?.map((t) => t.name) ?? [])],
|
|
65
|
+
metadata: {
|
|
66
|
+
adapter: 'openai-agents',
|
|
67
|
+
model: config.model ?? 'gpt-4o',
|
|
68
|
+
handoffsEnabled: config.handoffsEnabled ?? false,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// -----------------------------------------------------------------------
|
|
73
|
+
// Execution
|
|
74
|
+
// -----------------------------------------------------------------------
|
|
75
|
+
async executeAgent(agentId, payload, _context) {
|
|
76
|
+
this.ensureReady();
|
|
77
|
+
const config = this.runners.get(agentId);
|
|
78
|
+
if (!config) {
|
|
79
|
+
return this.errorResult('OAI_AGENTS_NOT_FOUND', `No agent runner registered as '${agentId}'`);
|
|
80
|
+
}
|
|
81
|
+
const input = payload.handoff?.instruction
|
|
82
|
+
?? payload.params?.instruction
|
|
83
|
+
?? payload.params?.input
|
|
84
|
+
?? payload.action;
|
|
85
|
+
const runContext = {
|
|
86
|
+
...payload.params,
|
|
87
|
+
...payload.handoff?.context,
|
|
88
|
+
};
|
|
89
|
+
const timeoutMs = config.timeoutMs ?? 120_000;
|
|
90
|
+
const start = Date.now();
|
|
91
|
+
try {
|
|
92
|
+
const result = await Promise.race([
|
|
93
|
+
config.runner.run(input, runContext),
|
|
94
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('OpenAI Agent execution timed out')), timeoutMs)),
|
|
95
|
+
]);
|
|
96
|
+
const durationMs = Date.now() - start;
|
|
97
|
+
return this.successResult({
|
|
98
|
+
output: result.output,
|
|
99
|
+
toolCalls: result.toolCalls,
|
|
100
|
+
handoffs: result.handoffs,
|
|
101
|
+
guardrailTriggered: result.guardrailTriggered,
|
|
102
|
+
usage: result.usage,
|
|
103
|
+
}, durationMs);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return this.errorResult('OAI_AGENTS_EXECUTION_FAILED', err instanceof Error ? err.message : String(err));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// -----------------------------------------------------------------------
|
|
110
|
+
// Lifecycle
|
|
111
|
+
// -----------------------------------------------------------------------
|
|
112
|
+
async shutdown() {
|
|
113
|
+
this.runners.clear();
|
|
114
|
+
await super.shutdown();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.OpenAIAgentsAdapter = OpenAIAgentsAdapter;
|
|
118
|
+
//# sourceMappingURL=openai-agents-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agents-adapter.js","sourceRoot":"","sources":["../../adapters/openai-agents-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAEH,iDAA6C;AAiE7C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAa,mBAAoB,SAAQ,0BAAW;IACzC,IAAI,GAAG,eAAe,CAAC;IACvB,OAAO,GAAG,OAAO,CAAC;IAEnB,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAErD,IAAI,YAAY;QACd,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,eAAe;IACf,0EAA0E;IAE1E;;OAEG;IACH,mBAAmB,CAAC,OAAe,EAAE,MAAuB;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC;YACtB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,WAAW;YACnB,YAAY,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,QAAQ,EAAE;gBACR,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;aACjD;SACF,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,YAAY;IACZ,0EAA0E;IAE1E,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAqB,EAAE,QAAsB;QAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,kCAAkC,OAAO,GAAG,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW;eACpC,OAAO,CAAC,MAAM,EAAE,WAAsB;eACtC,OAAO,CAAC,MAAM,EAAE,KAAgB;eACjC,OAAO,CAAC,MAAM,CAAC;QAEpB,MAAM,UAAU,GAA4B;YAC1C,GAAI,OAAO,CAAC,MAA8C;YAC1D,GAAI,OAAO,CAAC,OAAO,EAAE,OAA+C;SACrE,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,EAAE,SAAS,CAAC,CACnF;aACF,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEtC,OAAO,IAAI,CAAC,aAAa,CAAC;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,EAAE,UAAU,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,WAAW,CACrB,6BAA6B,EAC7B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,YAAY;IACZ,0EAA0E;IAE1E,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;CACF;AAjGD,kDAiGC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pydantic AI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates Pydantic AI (type-safe Python agent framework) with the
|
|
5
|
+
* SwarmOrchestrator via user-supplied runner functions.
|
|
6
|
+
*
|
|
7
|
+
* Pydantic AI provides structured, validated agent responses with
|
|
8
|
+
* dependency injection, streaming, and multi-step tool use. Since
|
|
9
|
+
* it's Python-native, this adapter wraps either:
|
|
10
|
+
* - A JS-compatible runner interface (for interop bridges)
|
|
11
|
+
* - An HTTP endpoint that fronts a Pydantic AI agent
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* const adapter = new PydanticAIAdapter();
|
|
15
|
+
* adapter.registerAgent('data-analyst', {
|
|
16
|
+
* runner: myPydanticRunner,
|
|
17
|
+
* resultSchema: { type: 'object', properties: { answer: { type: 'string' } } },
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* @module PydanticAIAdapter
|
|
21
|
+
* @version 1.0.0
|
|
22
|
+
*/
|
|
23
|
+
import { BaseAdapter } from './base-adapter';
|
|
24
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
25
|
+
/** Pydantic AI run result */
|
|
26
|
+
export interface PydanticAIRunResult {
|
|
27
|
+
/** Structured data output (validated against resultSchema) */
|
|
28
|
+
data: unknown;
|
|
29
|
+
/** Raw text output if available */
|
|
30
|
+
text?: string;
|
|
31
|
+
/** Tool calls made during execution */
|
|
32
|
+
toolCalls?: Array<{
|
|
33
|
+
tool: string;
|
|
34
|
+
args: Record<string, unknown>;
|
|
35
|
+
result: unknown;
|
|
36
|
+
}>;
|
|
37
|
+
/** Message history */
|
|
38
|
+
messages?: Array<{
|
|
39
|
+
role: string;
|
|
40
|
+
content: string;
|
|
41
|
+
}>;
|
|
42
|
+
/** Token usage */
|
|
43
|
+
usage?: {
|
|
44
|
+
requestTokens: number;
|
|
45
|
+
responseTokens: number;
|
|
46
|
+
totalTokens: number;
|
|
47
|
+
};
|
|
48
|
+
/** Whether validation succeeded */
|
|
49
|
+
validated: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Runner interface for a Pydantic AI agent.
|
|
53
|
+
* Wraps `agent.run()` or an HTTP call to a Pydantic AI server.
|
|
54
|
+
*/
|
|
55
|
+
export interface PydanticAIRunner {
|
|
56
|
+
run(prompt: string, deps?: Record<string, unknown>): Promise<PydanticAIRunResult>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* HTTP-based runner configuration.
|
|
60
|
+
* Sends POST requests to a Pydantic AI HTTP endpoint.
|
|
61
|
+
*/
|
|
62
|
+
export interface PydanticAIHttpConfig {
|
|
63
|
+
/** Base URL of the Pydantic AI server */
|
|
64
|
+
baseUrl: string;
|
|
65
|
+
/** Auth header value (e.g. 'Bearer xxx') */
|
|
66
|
+
authorization?: string;
|
|
67
|
+
/** Additional headers */
|
|
68
|
+
headers?: Record<string, string>;
|
|
69
|
+
}
|
|
70
|
+
/** Configuration for a registered Pydantic AI agent */
|
|
71
|
+
export interface PydanticAIAgentConfig {
|
|
72
|
+
/** Direct runner instance */
|
|
73
|
+
runner?: PydanticAIRunner;
|
|
74
|
+
/** HTTP configuration (alternative to runner) */
|
|
75
|
+
http?: PydanticAIHttpConfig;
|
|
76
|
+
/** JSON schema for expected result structure */
|
|
77
|
+
resultSchema?: Record<string, unknown>;
|
|
78
|
+
/** Model name (for metadata) */
|
|
79
|
+
model?: string;
|
|
80
|
+
/** Dependencies to inject into each run */
|
|
81
|
+
defaultDeps?: Record<string, unknown>;
|
|
82
|
+
/** Per-invocation timeout in ms (default: 60000) */
|
|
83
|
+
timeoutMs?: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Adapter for Pydantic AI structured agent framework.
|
|
87
|
+
*
|
|
88
|
+
* Supports both direct runners (for JS/Python bridges) and
|
|
89
|
+
* HTTP endpoints (for remote Pydantic AI servers).
|
|
90
|
+
*/
|
|
91
|
+
export declare class PydanticAIAdapter extends BaseAdapter {
|
|
92
|
+
readonly name = "pydantic-ai";
|
|
93
|
+
readonly version = "1.0.0";
|
|
94
|
+
private agents;
|
|
95
|
+
get capabilities(): AdapterCapabilities;
|
|
96
|
+
/**
|
|
97
|
+
* Register a Pydantic AI agent (runner or HTTP-backed).
|
|
98
|
+
*/
|
|
99
|
+
registerPydanticAgent(agentId: string, config: PydanticAIAgentConfig): void;
|
|
100
|
+
executeAgent(agentId: string, payload: AgentPayload, _context: AgentContext): Promise<AgentResult>;
|
|
101
|
+
private executeHttp;
|
|
102
|
+
shutdown(): Promise<void>;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=pydantic-ai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pydantic-ai-adapter.d.ts","sourceRoot":"","sources":["../../adapters/pydantic-ai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAEV,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAMhC,6BAA6B;AAC7B,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpF,sBAAsB;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,kBAAkB;IAClB,KAAK,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CACD,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,iDAAiD;IACjD,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,MAAM,CAA4C;IAE1D,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAMD;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAsBrE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;YA2D1F,WAAW;IA6CnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pydantic AI Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates Pydantic AI (type-safe Python agent framework) with the
|
|
6
|
+
* SwarmOrchestrator via user-supplied runner functions.
|
|
7
|
+
*
|
|
8
|
+
* Pydantic AI provides structured, validated agent responses with
|
|
9
|
+
* dependency injection, streaming, and multi-step tool use. Since
|
|
10
|
+
* it's Python-native, this adapter wraps either:
|
|
11
|
+
* - A JS-compatible runner interface (for interop bridges)
|
|
12
|
+
* - An HTTP endpoint that fronts a Pydantic AI agent
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* const adapter = new PydanticAIAdapter();
|
|
16
|
+
* adapter.registerAgent('data-analyst', {
|
|
17
|
+
* runner: myPydanticRunner,
|
|
18
|
+
* resultSchema: { type: 'object', properties: { answer: { type: 'string' } } },
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* @module PydanticAIAdapter
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.PydanticAIAdapter = void 0;
|
|
26
|
+
const base_adapter_1 = require("./base-adapter");
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Adapter
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Adapter for Pydantic AI structured agent framework.
|
|
32
|
+
*
|
|
33
|
+
* Supports both direct runners (for JS/Python bridges) and
|
|
34
|
+
* HTTP endpoints (for remote Pydantic AI servers).
|
|
35
|
+
*/
|
|
36
|
+
class PydanticAIAdapter extends base_adapter_1.BaseAdapter {
|
|
37
|
+
name = 'pydantic-ai';
|
|
38
|
+
version = '1.0.0';
|
|
39
|
+
agents = 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 Pydantic AI agent (runner or HTTP-backed).
|
|
55
|
+
*/
|
|
56
|
+
registerPydanticAgent(agentId, config) {
|
|
57
|
+
if (!config.runner && !config.http) {
|
|
58
|
+
throw new Error('PydanticAIAgentConfig requires either runner or http');
|
|
59
|
+
}
|
|
60
|
+
this.agents.set(agentId, config);
|
|
61
|
+
this.registerLocalAgent({
|
|
62
|
+
id: agentId,
|
|
63
|
+
name: agentId,
|
|
64
|
+
status: 'available',
|
|
65
|
+
capabilities: ['structured-output', 'validation', 'tool-use'],
|
|
66
|
+
metadata: {
|
|
67
|
+
adapter: 'pydantic-ai',
|
|
68
|
+
model: config.model,
|
|
69
|
+
mode: config.runner ? 'direct' : 'http',
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// -----------------------------------------------------------------------
|
|
74
|
+
// Execution
|
|
75
|
+
// -----------------------------------------------------------------------
|
|
76
|
+
async executeAgent(agentId, payload, _context) {
|
|
77
|
+
this.ensureReady();
|
|
78
|
+
const config = this.agents.get(agentId);
|
|
79
|
+
if (!config) {
|
|
80
|
+
return this.errorResult('PYDANTIC_AGENT_NOT_FOUND', `No agent registered as '${agentId}'`);
|
|
81
|
+
}
|
|
82
|
+
const prompt = payload.handoff?.instruction
|
|
83
|
+
?? payload.params?.instruction
|
|
84
|
+
?? payload.params?.prompt
|
|
85
|
+
?? payload.action;
|
|
86
|
+
const deps = {
|
|
87
|
+
...config.defaultDeps,
|
|
88
|
+
...payload.params,
|
|
89
|
+
...payload.handoff?.context,
|
|
90
|
+
};
|
|
91
|
+
const timeoutMs = config.timeoutMs ?? 60_000;
|
|
92
|
+
const start = Date.now();
|
|
93
|
+
try {
|
|
94
|
+
let result;
|
|
95
|
+
if (config.runner) {
|
|
96
|
+
result = await Promise.race([
|
|
97
|
+
config.runner.run(prompt, deps),
|
|
98
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Pydantic AI execution timed out')), timeoutMs)),
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
else if (config.http) {
|
|
102
|
+
result = await this.executeHttp(config.http, prompt, deps, timeoutMs);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return this.errorResult('PYDANTIC_NO_RUNNER', 'No runner or HTTP config available');
|
|
106
|
+
}
|
|
107
|
+
const durationMs = Date.now() - start;
|
|
108
|
+
return this.successResult({
|
|
109
|
+
data: result.data,
|
|
110
|
+
text: result.text,
|
|
111
|
+
validated: result.validated,
|
|
112
|
+
toolCalls: result.toolCalls,
|
|
113
|
+
usage: result.usage,
|
|
114
|
+
}, durationMs);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
return this.errorResult('PYDANTIC_EXECUTION_FAILED', err instanceof Error ? err.message : String(err));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// -----------------------------------------------------------------------
|
|
121
|
+
// HTTP runner
|
|
122
|
+
// -----------------------------------------------------------------------
|
|
123
|
+
async executeHttp(httpConfig, prompt, deps, timeoutMs) {
|
|
124
|
+
const url = `${httpConfig.baseUrl.replace(/\/$/, '')}/run`;
|
|
125
|
+
const headers = {
|
|
126
|
+
'Content-Type': 'application/json',
|
|
127
|
+
...httpConfig.headers,
|
|
128
|
+
};
|
|
129
|
+
if (httpConfig.authorization) {
|
|
130
|
+
headers['Authorization'] = httpConfig.authorization;
|
|
131
|
+
}
|
|
132
|
+
const body = JSON.stringify({ prompt, deps });
|
|
133
|
+
// Use dynamic import for fetch (Node 18+) or global
|
|
134
|
+
const controller = new AbortController();
|
|
135
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
136
|
+
try {
|
|
137
|
+
const response = await fetch(url, {
|
|
138
|
+
method: 'POST',
|
|
139
|
+
headers,
|
|
140
|
+
body,
|
|
141
|
+
signal: controller.signal,
|
|
142
|
+
});
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
const text = await response.text();
|
|
145
|
+
throw new Error(`HTTP ${response.status}: ${text}`);
|
|
146
|
+
}
|
|
147
|
+
const data = await response.json();
|
|
148
|
+
return data;
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
clearTimeout(timer);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// -----------------------------------------------------------------------
|
|
155
|
+
// Lifecycle
|
|
156
|
+
// -----------------------------------------------------------------------
|
|
157
|
+
async shutdown() {
|
|
158
|
+
this.agents.clear();
|
|
159
|
+
await super.shutdown();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.PydanticAIAdapter = PydanticAIAdapter;
|
|
163
|
+
//# sourceMappingURL=pydantic-ai-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pydantic-ai-adapter.js","sourceRoot":"","sources":["../../adapters/pydantic-ai-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertex AI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates Google Vertex AI (Gemini models, PaLM, custom endpoints)
|
|
5
|
+
* with the SwarmOrchestrator.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Gemini chat/generation (via user-supplied client)
|
|
9
|
+
* - Function calling / tool use
|
|
10
|
+
* - Multi-modal inputs (text + images)
|
|
11
|
+
* - Custom Vertex AI endpoints
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* const adapter = new VertexAIAdapter();
|
|
15
|
+
* adapter.registerModel('analyst', {
|
|
16
|
+
* client: myVertexClient,
|
|
17
|
+
* model: 'gemini-2.0-flash',
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* @module VertexAIAdapter
|
|
21
|
+
* @version 1.0.0
|
|
22
|
+
*/
|
|
23
|
+
import { BaseAdapter } from './base-adapter';
|
|
24
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
25
|
+
/** Vertex AI function declaration for tool use */
|
|
26
|
+
export interface VertexFunctionDeclaration {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
parameters: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
/** A content part (text or inline data) */
|
|
32
|
+
export interface VertexContentPart {
|
|
33
|
+
text?: string;
|
|
34
|
+
inlineData?: {
|
|
35
|
+
mimeType: string;
|
|
36
|
+
data: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Response from Vertex AI */
|
|
40
|
+
export interface VertexGenerateResponse {
|
|
41
|
+
/** Generated text content */
|
|
42
|
+
text: string;
|
|
43
|
+
/** Function calls requested by the model */
|
|
44
|
+
functionCalls?: Array<{
|
|
45
|
+
name: string;
|
|
46
|
+
args: Record<string, unknown>;
|
|
47
|
+
}>;
|
|
48
|
+
/** Safety ratings */
|
|
49
|
+
safetyRatings?: Array<{
|
|
50
|
+
category: string;
|
|
51
|
+
probability: string;
|
|
52
|
+
}>;
|
|
53
|
+
/** Token usage */
|
|
54
|
+
usageMetadata?: {
|
|
55
|
+
promptTokenCount: number;
|
|
56
|
+
candidatesTokenCount: number;
|
|
57
|
+
totalTokenCount: number;
|
|
58
|
+
};
|
|
59
|
+
/** Finish reason */
|
|
60
|
+
finishReason?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Minimal interface for a Vertex AI generative model client.
|
|
64
|
+
* Compatible with `@google-cloud/vertexai` GenerativeModel.
|
|
65
|
+
*/
|
|
66
|
+
export interface VertexGenerativeClient {
|
|
67
|
+
generateContent(request: {
|
|
68
|
+
contents: Array<{
|
|
69
|
+
role: string;
|
|
70
|
+
parts: VertexContentPart[];
|
|
71
|
+
}>;
|
|
72
|
+
systemInstruction?: {
|
|
73
|
+
parts: VertexContentPart[];
|
|
74
|
+
};
|
|
75
|
+
tools?: Array<{
|
|
76
|
+
functionDeclarations: VertexFunctionDeclaration[];
|
|
77
|
+
}>;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
response: VertexGenerateResponse;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Function executor for tool use.
|
|
84
|
+
* Called when Gemini requests a function call.
|
|
85
|
+
*/
|
|
86
|
+
export type VertexFunctionExecutor = (name: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
87
|
+
/** Configuration for a registered Vertex AI agent */
|
|
88
|
+
export interface VertexAIAgentConfig {
|
|
89
|
+
/** The Vertex AI client instance */
|
|
90
|
+
client: VertexGenerativeClient;
|
|
91
|
+
/** Model name (default: 'gemini-2.0-flash') */
|
|
92
|
+
model?: string;
|
|
93
|
+
/** System instruction */
|
|
94
|
+
systemInstruction?: string;
|
|
95
|
+
/** Function declarations for tool use */
|
|
96
|
+
functions?: VertexFunctionDeclaration[];
|
|
97
|
+
/** Function executor for tool calls */
|
|
98
|
+
functionExecutor?: VertexFunctionExecutor;
|
|
99
|
+
/** Maximum tool-use loop iterations (default: 10) */
|
|
100
|
+
maxIterations?: number;
|
|
101
|
+
/** Per-invocation timeout in ms (default: 60000) */
|
|
102
|
+
timeoutMs?: number;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Adapter for Google Vertex AI (Gemini, PaLM, custom endpoints).
|
|
106
|
+
*
|
|
107
|
+
* Each registered model is exposed as a named agent. Supports
|
|
108
|
+
* multi-turn tool use loops when functions are configured.
|
|
109
|
+
*/
|
|
110
|
+
export declare class VertexAIAdapter extends BaseAdapter {
|
|
111
|
+
readonly name = "vertex-ai";
|
|
112
|
+
readonly version = "1.0.0";
|
|
113
|
+
private models;
|
|
114
|
+
get capabilities(): AdapterCapabilities;
|
|
115
|
+
/**
|
|
116
|
+
* Register a Vertex AI model as a named agent.
|
|
117
|
+
*/
|
|
118
|
+
registerModel(agentId: string, config: VertexAIAgentConfig): void;
|
|
119
|
+
executeAgent(agentId: string, payload: AgentPayload, _context: AgentContext): Promise<AgentResult>;
|
|
120
|
+
shutdown(): Promise<void>;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=vertex-ai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-adapter.d.ts","sourceRoot":"","sources":["../../adapters/vertex-ai-adapter.ts"],"names":[],"mappings":"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"}
|