@peers-app/peers-device 0.16.2 → 0.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-functional.d.ts +37 -0
- package/dist/agent-functional.js +177 -0
- package/dist/agent-functional.js.map +1 -0
- package/dist/agent-functional.test.d.ts +1 -0
- package/dist/agent-functional.test.js +458 -0
- package/dist/agent-functional.test.js.map +1 -0
- package/dist/default-assistant-runner.d.ts +21 -0
- package/dist/default-assistant-runner.js +256 -0
- package/dist/default-assistant-runner.js.map +1 -0
- package/dist/default-assistant-runner.test.d.ts +1 -0
- package/dist/default-assistant-runner.test.js +199 -0
- package/dist/default-assistant-runner.test.js.map +1 -0
- package/dist/embeddings-client.d.ts +25 -0
- package/dist/embeddings-client.js +96 -0
- package/dist/embeddings-client.js.map +1 -0
- package/dist/embeddings-client.test.d.ts +1 -0
- package/dist/embeddings-client.test.js +124 -0
- package/dist/embeddings-client.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/similar-tools.d.ts +10 -0
- package/dist/similar-tools.js +25 -0
- package/dist/similar-tools.js.map +1 -0
- package/dist/similar-tools.test.d.ts +1 -0
- package/dist/similar-tools.test.js +101 -0
- package/dist/similar-tools.test.js.map +1 -0
- package/dist/tool-loader.d.ts +14 -18
- package/dist/tool-loader.js +34 -90
- package/dist/tool-loader.js.map +1 -1
- package/dist/tool-search.d.ts +1 -0
- package/dist/tool-search.js +43 -0
- package/dist/tool-search.js.map +1 -0
- package/dist/tracked-data-source.test.js +1 -1
- package/dist/tracked-data-source.test.js.map +1 -1
- package/dist/workflow-processor.d.ts +1 -15
- package/dist/workflow-processor.js +14 -14
- package/dist/workflow-processor.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const embeddings_client_1 = require("./embeddings-client");
|
|
4
|
+
// ── Mock peers-sdk ──────────────────────────────────────────────────────────
|
|
5
|
+
const mockFindOne = jest.fn();
|
|
6
|
+
const mockSave = jest.fn();
|
|
7
|
+
jest.mock("@peers-app/peers-sdk", () => ({
|
|
8
|
+
Embeddings: () => ({ findOne: mockFindOne, save: mockSave }),
|
|
9
|
+
hashValue: (v) => `hash:${v}`,
|
|
10
|
+
newid: () => "mock-new-id-0000000000000",
|
|
11
|
+
}));
|
|
12
|
+
// ── Mock global fetch ───────────────────────────────────────────────────────
|
|
13
|
+
const mockFetch = jest.fn();
|
|
14
|
+
globalThis.fetch = mockFetch;
|
|
15
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
16
|
+
function makeContext(token = "test-token") {
|
|
17
|
+
return {
|
|
18
|
+
getVariable: jest.fn().mockResolvedValue(token),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function okEmbeddingResponse(embedding = [0.1, 0.2, 0.3]) {
|
|
22
|
+
return new Response(JSON.stringify({ data: [{ index: 0, embedding }], usage: { totalTokens: 10 } }), { status: 200, headers: { "Content-Type": "application/json" } });
|
|
23
|
+
}
|
|
24
|
+
// ── Tests ───────────────────────────────────────────────────────────────────
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
jest.clearAllMocks();
|
|
27
|
+
// Clear the inflight promise cache between tests by reimporting would be
|
|
28
|
+
// heavy; instead we rely on unique text per test to avoid collisions.
|
|
29
|
+
});
|
|
30
|
+
describe("cosineSimilarity", () => {
|
|
31
|
+
it("returns 1 for identical unit vectors", () => {
|
|
32
|
+
expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [1, 0])).toBeCloseTo(1);
|
|
33
|
+
});
|
|
34
|
+
it("returns 0 for orthogonal vectors", () => {
|
|
35
|
+
expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [0, 1])).toBeCloseTo(0);
|
|
36
|
+
});
|
|
37
|
+
it("returns -1 for opposite vectors", () => {
|
|
38
|
+
expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [-1, 0])).toBeCloseTo(-1);
|
|
39
|
+
});
|
|
40
|
+
it("returns 0 when either vector is the zero vector", () => {
|
|
41
|
+
expect((0, embeddings_client_1.cosineSimilarity)([0, 0], [1, 2])).toBe(0);
|
|
42
|
+
});
|
|
43
|
+
it("throws when vectors have different lengths", () => {
|
|
44
|
+
expect(() => (0, embeddings_client_1.cosineSimilarity)([1], [1, 2])).toThrow("same length");
|
|
45
|
+
});
|
|
46
|
+
it("handles non-unit vectors correctly", () => {
|
|
47
|
+
const sim = (0, embeddings_client_1.cosineSimilarity)([3, 4], [6, 8]);
|
|
48
|
+
expect(sim).toBeCloseTo(1);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("getEmbeddings", () => {
|
|
52
|
+
it("returns cached embedding on cache hit", async () => {
|
|
53
|
+
const cached = {
|
|
54
|
+
embeddingId: "cached-id",
|
|
55
|
+
textHash: "h",
|
|
56
|
+
embedding: [0.1],
|
|
57
|
+
embeddingType: "text-embedding-3-large",
|
|
58
|
+
metadata: {},
|
|
59
|
+
};
|
|
60
|
+
mockFindOne.mockResolvedValueOnce(cached);
|
|
61
|
+
const result = await (0, embeddings_client_1.getEmbeddings)(makeContext(), "cache-hit-text-unique");
|
|
62
|
+
expect(result).toBe(cached);
|
|
63
|
+
expect(mockFetch).not.toHaveBeenCalled();
|
|
64
|
+
});
|
|
65
|
+
it("calls the API on cache miss and saves to cache", async () => {
|
|
66
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
67
|
+
mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.5, 0.6]));
|
|
68
|
+
const savedObj = { embeddingId: "mock-new-id-0000000000000", embedding: [0.5, 0.6] };
|
|
69
|
+
mockSave.mockResolvedValueOnce(savedObj);
|
|
70
|
+
const ctx = makeContext();
|
|
71
|
+
const result = await (0, embeddings_client_1.getEmbeddings)(ctx, "api-call-text-unique");
|
|
72
|
+
expect(ctx.getVariable).toHaveBeenCalledWith("PEERS_SERVICES_TOKEN");
|
|
73
|
+
expect(mockFetch).toHaveBeenCalledTimes(1);
|
|
74
|
+
const [url, opts] = mockFetch.mock.calls[0];
|
|
75
|
+
expect(url).toContain("/api/v1/embeddings/embed");
|
|
76
|
+
expect(opts.method).toBe("POST");
|
|
77
|
+
expect(JSON.parse(opts.body)).toMatchObject({
|
|
78
|
+
provider: "openai",
|
|
79
|
+
model: "text-embedding-3-large",
|
|
80
|
+
input: "api-call-text-unique",
|
|
81
|
+
});
|
|
82
|
+
expect(opts.headers.Authorization).toBe("Bearer test-token");
|
|
83
|
+
expect(mockSave).toHaveBeenCalledTimes(1);
|
|
84
|
+
expect(result).toBe(savedObj);
|
|
85
|
+
});
|
|
86
|
+
it("throws when no token is available", async () => {
|
|
87
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
88
|
+
await expect((0, embeddings_client_1.getEmbeddings)(makeContext(null), "no-token-text-unique")).rejects.toThrow("PEERS_SERVICES_TOKEN not set");
|
|
89
|
+
});
|
|
90
|
+
it("throws a helpful message on 402 (insufficient balance)", async () => {
|
|
91
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
92
|
+
mockFetch.mockResolvedValueOnce(new Response("out of funds", { status: 402 }));
|
|
93
|
+
await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "balance-text-unique")).rejects.toThrow("Insufficient Peers Services balance");
|
|
94
|
+
});
|
|
95
|
+
it("throws on generic API error", async () => {
|
|
96
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
97
|
+
mockFetch.mockResolvedValueOnce(new Response("bad request", { status: 400 }));
|
|
98
|
+
await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "error-text-unique")).rejects.toThrow("Embeddings API error (400)");
|
|
99
|
+
});
|
|
100
|
+
it("throws when API returns no embedding data", async () => {
|
|
101
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
102
|
+
mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ data: [] }), {
|
|
103
|
+
status: 200,
|
|
104
|
+
headers: { "Content-Type": "application/json" },
|
|
105
|
+
}));
|
|
106
|
+
await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "empty-data-text-unique")).rejects.toThrow("No embedding returned");
|
|
107
|
+
});
|
|
108
|
+
it("passes custom dimensions to the API", async () => {
|
|
109
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
110
|
+
mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.1]));
|
|
111
|
+
mockSave.mockResolvedValueOnce({ embedding: [0.1] });
|
|
112
|
+
await (0, embeddings_client_1.getEmbeddings)(makeContext(), "dims-text-unique", { dimensions: 256 });
|
|
113
|
+
const body = JSON.parse(mockFetch.mock.calls[0][1].body);
|
|
114
|
+
expect(body.dimensions).toBe(256);
|
|
115
|
+
});
|
|
116
|
+
it("uses dimensions in the cache key", async () => {
|
|
117
|
+
mockFindOne.mockResolvedValueOnce(null);
|
|
118
|
+
mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.1]));
|
|
119
|
+
mockSave.mockResolvedValueOnce({ embedding: [0.1] });
|
|
120
|
+
await (0, embeddings_client_1.getEmbeddings)(makeContext(), "dims-cache-key-text", { dimensions: 512 });
|
|
121
|
+
expect(mockFindOne).toHaveBeenCalledWith(expect.objectContaining({ embeddingType: "text-embedding-3-large:512" }));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=embeddings-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings-client.test.js","sourceRoot":"","sources":["../src/embeddings-client.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
|
+
export * from "./agent-functional";
|
|
1
2
|
export * from "./chunk-download-manager";
|
|
2
3
|
export * from "./connection-manager/connection-manager";
|
|
3
4
|
export * from "./connection-manager/device-message-handler.types";
|
|
4
5
|
export * from "./connection-manager/group-invite-messages";
|
|
5
6
|
export * from "./connection-manager/network-manager";
|
|
6
7
|
export * from "./connection-manager/protocol-manager.interface";
|
|
8
|
+
export * from "./default-assistant-runner";
|
|
9
|
+
export * from "./embeddings-client";
|
|
7
10
|
export * from "./machine-stats";
|
|
8
11
|
export * from "./main";
|
|
9
12
|
export * from "./message-processor";
|
|
10
13
|
export * from "./pvars.tracked-data-source";
|
|
11
14
|
export * from "./services-client";
|
|
15
|
+
export * from "./similar-tools";
|
|
12
16
|
export * from "./sync-group";
|
|
13
17
|
export * from "./system-tools";
|
|
14
18
|
export * from "./tool-call-processor";
|
|
15
19
|
export * from "./tool-loader";
|
|
20
|
+
import "./tool-search";
|
|
16
21
|
export * from "./tracked-data-source";
|
|
17
22
|
export * from "./websocket-client";
|
|
18
23
|
export * from "./workflow-processor";
|
package/dist/index.js
CHANGED
|
@@ -14,21 +14,26 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./agent-functional"), exports);
|
|
17
18
|
__exportStar(require("./chunk-download-manager"), exports);
|
|
18
19
|
__exportStar(require("./connection-manager/connection-manager"), exports);
|
|
19
20
|
__exportStar(require("./connection-manager/device-message-handler.types"), exports);
|
|
20
21
|
__exportStar(require("./connection-manager/group-invite-messages"), exports);
|
|
21
22
|
__exportStar(require("./connection-manager/network-manager"), exports);
|
|
22
23
|
__exportStar(require("./connection-manager/protocol-manager.interface"), exports);
|
|
24
|
+
__exportStar(require("./default-assistant-runner"), exports);
|
|
25
|
+
__exportStar(require("./embeddings-client"), exports);
|
|
23
26
|
__exportStar(require("./machine-stats"), exports);
|
|
24
27
|
__exportStar(require("./main"), exports);
|
|
25
28
|
__exportStar(require("./message-processor"), exports);
|
|
26
29
|
__exportStar(require("./pvars.tracked-data-source"), exports);
|
|
27
30
|
__exportStar(require("./services-client"), exports);
|
|
31
|
+
__exportStar(require("./similar-tools"), exports);
|
|
28
32
|
__exportStar(require("./sync-group"), exports);
|
|
29
33
|
__exportStar(require("./system-tools"), exports);
|
|
30
34
|
__exportStar(require("./tool-call-processor"), exports);
|
|
31
35
|
__exportStar(require("./tool-loader"), exports);
|
|
36
|
+
require("./tool-search");
|
|
32
37
|
__exportStar(require("./tracked-data-source"), exports);
|
|
33
38
|
__exportStar(require("./websocket-client"), exports);
|
|
34
39
|
__exportStar(require("./workflow-processor"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,0EAAwD;AACxD,oFAAkE;AAClE,6EAA2D;AAC3D,uEAAqD;AACrD,kFAAgE;AAChE,kDAAgC;AAChC,yCAAuB;AACvB,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,+CAA6B;AAC7B,iDAA+B;AAC/B,wDAAsC;AACtC,gDAA8B;AAC9B,wDAAsC;AACtC,qDAAmC;AACnC,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,2DAAyC;AACzC,0EAAwD;AACxD,oFAAkE;AAClE,6EAA2D;AAC3D,uEAAqD;AACrD,kFAAgE;AAChE,6DAA2C;AAC3C,sDAAoC;AACpC,kDAAgC;AAChC,yCAAuB;AACvB,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,wDAAsC;AACtC,gDAA8B;AAC9B,yBAAuB;AAEvB,wDAAsC;AACtC,qDAAmC;AACnC,uDAAqC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ITool, type IWorkflowRunContext } from "@peers-app/peers-sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Find tools whose embedding is similar to the given text, ranked by cosine similarity.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getSimilarTools(args: {
|
|
6
|
+
context: IWorkflowRunContext;
|
|
7
|
+
text: string;
|
|
8
|
+
similarityThreshold?: number;
|
|
9
|
+
maxCount?: number;
|
|
10
|
+
}): Promise<ITool[]>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSimilarTools = getSimilarTools;
|
|
4
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
5
|
+
const embeddings_client_1 = require("./embeddings-client");
|
|
6
|
+
/**
|
|
7
|
+
* Find tools whose embedding is similar to the given text, ranked by cosine similarity.
|
|
8
|
+
*/
|
|
9
|
+
async function getSimilarTools(args) {
|
|
10
|
+
const { context, text, similarityThreshold = 0.2, maxCount = 5 } = args;
|
|
11
|
+
const textEmbedding = await (0, embeddings_client_1.getEmbeddings)(context, text);
|
|
12
|
+
const allTools = await (0, peers_sdk_1.Tools)().list();
|
|
13
|
+
let allToolEmbeddings = await Promise.all(allTools.map(async (tool) => {
|
|
14
|
+
const toolText = `${tool.name}\n\n${tool.usageDescription}\n\n${tool.detailedDescription}`.trim();
|
|
15
|
+
const toolEmbeddings = await (0, embeddings_client_1.getEmbeddings)(context, toolText);
|
|
16
|
+
return {
|
|
17
|
+
tool,
|
|
18
|
+
similarity: (0, embeddings_client_1.cosineSimilarity)(toolEmbeddings.embedding, textEmbedding.embedding),
|
|
19
|
+
};
|
|
20
|
+
}));
|
|
21
|
+
allToolEmbeddings = allToolEmbeddings.sort((a, b) => b.similarity - a.similarity);
|
|
22
|
+
const similarTools = allToolEmbeddings.filter((tool) => tool.similarity >= similarityThreshold);
|
|
23
|
+
return similarTools.slice(0, maxCount).map((tool) => tool.tool);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=similar-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar-tools.js","sourceRoot":"","sources":["../src/similar-tools.ts"],"names":[],"mappings":";;AAMA,0CAwBC;AA9BD,oDAAmF;AACnF,2DAAsE;AAEtE;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,IAKrC;IACC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAExE,MAAM,aAAa,GAAG,MAAM,IAAA,iCAAa,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAK,GAAE,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,QAAQ,GACZ,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,gBAAgB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,cAAc,GAAG,MAAM,IAAA,iCAAa,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,IAAA,oCAAgB,EAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;SAChF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC;IAChG,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const similar_tools_1 = require("./similar-tools");
|
|
4
|
+
// ── Mock embeddings-client ──────────────────────────────────────────────────
|
|
5
|
+
const mockGetEmbeddings = jest.fn();
|
|
6
|
+
jest.mock("./embeddings-client", () => ({
|
|
7
|
+
getEmbeddings: (...args) => mockGetEmbeddings(...args),
|
|
8
|
+
cosineSimilarity: jest.requireActual("./embeddings-client").cosineSimilarity,
|
|
9
|
+
}));
|
|
10
|
+
// ── Mock peers-sdk ──────────────────────────────────────────────────────────
|
|
11
|
+
const mockToolsList = jest.fn();
|
|
12
|
+
jest.mock("@peers-app/peers-sdk", () => ({
|
|
13
|
+
Tools: () => ({ list: mockToolsList }),
|
|
14
|
+
}));
|
|
15
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
16
|
+
function fakeEmbedding(vec) {
|
|
17
|
+
return { embedding: vec };
|
|
18
|
+
}
|
|
19
|
+
function fakeTool(name) {
|
|
20
|
+
return {
|
|
21
|
+
toolId: `id-${name}`,
|
|
22
|
+
name,
|
|
23
|
+
usageDescription: `${name} usage`,
|
|
24
|
+
detailedDescription: `${name} detail`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const context = { getVariable: jest.fn() };
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
jest.clearAllMocks();
|
|
30
|
+
});
|
|
31
|
+
// ── Tests ───────────────────────────────────────────────────────────────────
|
|
32
|
+
describe("getSimilarTools", () => {
|
|
33
|
+
it("returns tools sorted by similarity above the threshold", async () => {
|
|
34
|
+
const toolA = fakeTool("alpha");
|
|
35
|
+
const toolB = fakeTool("bravo");
|
|
36
|
+
const toolC = fakeTool("charlie");
|
|
37
|
+
mockToolsList.mockResolvedValueOnce([toolA, toolB, toolC]);
|
|
38
|
+
// Query embedding: unit vector [1, 0]
|
|
39
|
+
// alpha -> [1, 0] -> similarity 1.0
|
|
40
|
+
// bravo -> [0.7, 0.7] -> similarity ~0.707
|
|
41
|
+
// charlie -> [0, 1] -> similarity 0.0 (below threshold)
|
|
42
|
+
mockGetEmbeddings
|
|
43
|
+
.mockResolvedValueOnce(fakeEmbedding([1, 0])) // query text
|
|
44
|
+
.mockResolvedValueOnce(fakeEmbedding([1, 0])) // alpha
|
|
45
|
+
.mockResolvedValueOnce(fakeEmbedding([0.7, 0.7])) // bravo
|
|
46
|
+
.mockResolvedValueOnce(fakeEmbedding([0, 1])); // charlie
|
|
47
|
+
const result = await (0, similar_tools_1.getSimilarTools)({
|
|
48
|
+
context,
|
|
49
|
+
text: "search query",
|
|
50
|
+
similarityThreshold: 0.2,
|
|
51
|
+
});
|
|
52
|
+
expect(result).toHaveLength(2);
|
|
53
|
+
expect(result[0].name).toBe("alpha");
|
|
54
|
+
expect(result[1].name).toBe("bravo");
|
|
55
|
+
});
|
|
56
|
+
it("respects maxCount", async () => {
|
|
57
|
+
const tools = Array.from({ length: 5 }, (_, i) => fakeTool(`tool-${i}`));
|
|
58
|
+
mockToolsList.mockResolvedValueOnce(tools);
|
|
59
|
+
// All tools are close to the query
|
|
60
|
+
mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0])); // query
|
|
61
|
+
for (const _ of tools) {
|
|
62
|
+
mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([0.9, 0.1]));
|
|
63
|
+
}
|
|
64
|
+
const result = await (0, similar_tools_1.getSimilarTools)({
|
|
65
|
+
context,
|
|
66
|
+
text: "query",
|
|
67
|
+
maxCount: 2,
|
|
68
|
+
});
|
|
69
|
+
expect(result).toHaveLength(2);
|
|
70
|
+
});
|
|
71
|
+
it("returns empty array when no tools exceed the threshold", async () => {
|
|
72
|
+
mockToolsList.mockResolvedValueOnce([fakeTool("x")]);
|
|
73
|
+
mockGetEmbeddings
|
|
74
|
+
.mockResolvedValueOnce(fakeEmbedding([1, 0])) // query
|
|
75
|
+
.mockResolvedValueOnce(fakeEmbedding([0, 1])); // tool (orthogonal)
|
|
76
|
+
const result = await (0, similar_tools_1.getSimilarTools)({
|
|
77
|
+
context,
|
|
78
|
+
text: "query",
|
|
79
|
+
similarityThreshold: 0.5,
|
|
80
|
+
});
|
|
81
|
+
expect(result).toHaveLength(0);
|
|
82
|
+
});
|
|
83
|
+
it("returns empty array when there are no tools", async () => {
|
|
84
|
+
mockToolsList.mockResolvedValueOnce([]);
|
|
85
|
+
mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0]));
|
|
86
|
+
const result = await (0, similar_tools_1.getSimilarTools)({ context, text: "query" });
|
|
87
|
+
expect(result).toHaveLength(0);
|
|
88
|
+
});
|
|
89
|
+
it("uses default threshold=0.2 and maxCount=5", async () => {
|
|
90
|
+
const tools = Array.from({ length: 8 }, (_, i) => fakeTool(`t${i}`));
|
|
91
|
+
mockToolsList.mockResolvedValueOnce(tools);
|
|
92
|
+
// query = [1, 0]. All tools get [0.9, 0.4] => similarity ~0.91, all above 0.2
|
|
93
|
+
mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0]));
|
|
94
|
+
for (const _ of tools) {
|
|
95
|
+
mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([0.9, 0.4]));
|
|
96
|
+
}
|
|
97
|
+
const result = await (0, similar_tools_1.getSimilarTools)({ context, text: "q" });
|
|
98
|
+
expect(result).toHaveLength(5); // default maxCount
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=similar-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similar-tools.test.js","sourceRoot":"","sources":["../src/similar-tools.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-loader.d.ts
CHANGED
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
import { type ITool, type IToolInstance, type IWorkflowRunContext } from "@peers-app/peers-sdk";
|
|
2
|
-
|
|
3
|
-
* Injects the function that returns the root application data directory
|
|
4
|
-
* (where tool code is cached on disk). Must be called once during app
|
|
5
|
-
* initialisation before any tool is loaded via {@link initTool}.
|
|
6
|
-
*/
|
|
7
|
-
export declare function setPeersAppDir(fn: () => string): void;
|
|
8
|
-
/**
|
|
9
|
-
* Derives a unique filesystem-safe identifier for a tool, combining its
|
|
10
|
-
* human-readable name with the last 5 characters of its ID.
|
|
11
|
-
*/
|
|
12
|
-
export declare function getToolUniqueIdentifier(tool: ITool): string;
|
|
2
|
+
import type { IAgentTool } from "./agent-functional";
|
|
13
3
|
/**
|
|
14
4
|
* Resolves an {@link ITool} definition into a runnable {@link IToolInstance}.
|
|
15
5
|
*
|
|
16
6
|
* Resolution order:
|
|
17
7
|
* 1. System-tool registry ({@link systemToolInstances})
|
|
18
8
|
* 2. Package-registered tool factory (`getRegisteredTool` from peers-sdk)
|
|
19
|
-
* 3. Write the tool's `code` to disk, `require()` it, and cache the result
|
|
20
9
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
10
|
+
* If neither registry contains the tool, an error is thrown.
|
|
11
|
+
*
|
|
12
|
+
* @param tool - The tool definition to initialize.
|
|
24
13
|
*/
|
|
25
|
-
export declare function initTool(tool: ITool
|
|
26
|
-
refresh: boolean;
|
|
27
|
-
}): Promise<IToolInstance>;
|
|
14
|
+
export declare function initTool(tool: ITool): Promise<IToolInstance>;
|
|
28
15
|
/**
|
|
29
16
|
* Loads a tool via {@link initTool} and wraps its `toolFn` so that every
|
|
30
17
|
* invocation is automatically logged to the {@link WorkflowLogs} table
|
|
@@ -39,3 +26,12 @@ export declare function initWrappedTool(tool: ITool, context: IWorkflowRunContex
|
|
|
39
26
|
* and returns the corresponding {@link ITool} records.
|
|
40
27
|
*/
|
|
41
28
|
export declare function getLinkedTools(markdown: string): Promise<ITool[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Wraps a peers {@link ITool} into the {@link IAgentTool} format expected by
|
|
31
|
+
* the inference-based agent.
|
|
32
|
+
*
|
|
33
|
+
* Resolves the tool instance (with logging and error handling from
|
|
34
|
+
* {@link initWrappedTool}), converts the Zod input schema to JSON Schema
|
|
35
|
+
* for the inference API, and returns an executable {@link IAgentTool}.
|
|
36
|
+
*/
|
|
37
|
+
export declare function toAgentTool(tool: ITool, context: IWorkflowRunContext): Promise<IAgentTool>;
|
package/dist/tool-loader.js
CHANGED
|
@@ -1,51 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.setPeersAppDir = setPeersAppDir;
|
|
7
|
-
exports.getToolUniqueIdentifier = getToolUniqueIdentifier;
|
|
8
3
|
exports.initTool = initTool;
|
|
9
4
|
exports.initWrappedTool = initWrappedTool;
|
|
10
5
|
exports.getLinkedTools = getLinkedTools;
|
|
11
|
-
|
|
12
|
-
const promises_1 = require("node:fs/promises");
|
|
13
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
6
|
+
exports.toAgentTool = toAgentTool;
|
|
14
7
|
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
15
8
|
const lodash_1 = require("lodash");
|
|
9
|
+
const zod_to_json_schema_1 = require("zod-to-json-schema");
|
|
16
10
|
const system_tools_1 = require("./system-tools");
|
|
17
|
-
let _getPeersAppDir;
|
|
18
|
-
/**
|
|
19
|
-
* Injects the function that returns the root application data directory
|
|
20
|
-
* (where tool code is cached on disk). Must be called once during app
|
|
21
|
-
* initialisation before any tool is loaded via {@link initTool}.
|
|
22
|
-
*/
|
|
23
|
-
function setPeersAppDir(fn) {
|
|
24
|
-
_getPeersAppDir = fn;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Derives a unique filesystem-safe identifier for a tool, combining its
|
|
28
|
-
* human-readable name with the last 5 characters of its ID.
|
|
29
|
-
*/
|
|
30
|
-
function getToolUniqueIdentifier(tool) {
|
|
31
|
-
// TODO there is probably a better way to solve name collisions
|
|
32
|
-
return `${tool.name}_${tool.toolId.slice(20)}`;
|
|
33
|
-
}
|
|
34
|
-
const toolCodeCache = {};
|
|
35
|
-
const toolCodeCacheSha = {};
|
|
36
11
|
/**
|
|
37
12
|
* Resolves an {@link ITool} definition into a runnable {@link IToolInstance}.
|
|
38
13
|
*
|
|
39
14
|
* Resolution order:
|
|
40
15
|
* 1. System-tool registry ({@link systemToolInstances})
|
|
41
16
|
* 2. Package-registered tool factory (`getRegisteredTool` from peers-sdk)
|
|
42
|
-
* 3. Write the tool's `code` to disk, `require()` it, and cache the result
|
|
43
17
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
18
|
+
* If neither registry contains the tool, an error is thrown.
|
|
19
|
+
*
|
|
20
|
+
* @param tool - The tool definition to initialize.
|
|
47
21
|
*/
|
|
48
|
-
async function initTool(tool
|
|
22
|
+
async function initTool(tool) {
|
|
49
23
|
const sysToolInstance = (0, system_tools_1.systemToolInstances)(tool.toolId);
|
|
50
24
|
if (sysToolInstance) {
|
|
51
25
|
return sysToolInstance;
|
|
@@ -54,63 +28,8 @@ async function initTool(tool, opts = { refresh: false }) {
|
|
|
54
28
|
if (registeredToolInstance) {
|
|
55
29
|
return registeredToolInstance;
|
|
56
30
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const refresh = opts.refresh || toolCodeCacheSha[toolUID] !== codeHash;
|
|
60
|
-
if (toolCodeCache[toolUID] && !refresh) {
|
|
61
|
-
return toolCodeCache[toolUID];
|
|
62
|
-
}
|
|
63
|
-
delete toolCodeCache[toolUID];
|
|
64
|
-
delete toolCodeCacheSha[toolUID];
|
|
65
|
-
if (!_getPeersAppDir) {
|
|
66
|
-
throw new Error("setPeersAppDir must be called before initTool");
|
|
67
|
-
}
|
|
68
|
-
const rootDir = _getPeersAppDir();
|
|
69
|
-
const toolDir = node_path_1.default.join(rootDir, "tools", toolUID);
|
|
70
|
-
const cacheKeys = Object.keys(require.cache);
|
|
71
|
-
for (const cacheKey of cacheKeys) {
|
|
72
|
-
const requireCache = require.cache[cacheKey];
|
|
73
|
-
const cachePath = requireCache?.path;
|
|
74
|
-
if (cachePath) {
|
|
75
|
-
if (cachePath.toLowerCase().startsWith(toolDir.toLowerCase())) {
|
|
76
|
-
delete require.cache[cacheKey];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
await (0, promises_1.mkdir)(toolDir, { recursive: true });
|
|
81
|
-
const toolFilePath = node_path_1.default.join(toolDir, "index.js");
|
|
82
|
-
let toolCode = tool.code;
|
|
83
|
-
toolCode = toolCode.trim();
|
|
84
|
-
if (toolCode.startsWith("```") && toolCode.endsWith("```")) {
|
|
85
|
-
toolCode = toolCode.slice(3, -3);
|
|
86
|
-
}
|
|
87
|
-
await (0, promises_1.writeFile)(toolFilePath, toolCode);
|
|
88
|
-
let toolModule = require(toolFilePath);
|
|
89
|
-
let toolInstance = {
|
|
90
|
-
tool,
|
|
91
|
-
toolFn: (...args) => "Error: toolFn was not set",
|
|
92
|
-
};
|
|
93
|
-
if (toolModule.default) {
|
|
94
|
-
toolInstance = {
|
|
95
|
-
...toolInstance,
|
|
96
|
-
...toolModule,
|
|
97
|
-
};
|
|
98
|
-
toolModule = toolModule.default;
|
|
99
|
-
}
|
|
100
|
-
if (typeof toolModule === "function") {
|
|
101
|
-
toolInstance.toolFn = toolModule;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
toolInstance = {
|
|
105
|
-
...toolInstance,
|
|
106
|
-
toolFn: () => `Error: the module built from the tool code did not return a tool function. The module should export a function named "toolFn" or make the default export a function.`,
|
|
107
|
-
...toolModule,
|
|
108
|
-
tool,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
toolCodeCacheSha[toolUID] = codeHash;
|
|
112
|
-
toolCodeCache[toolUID] = toolInstance;
|
|
113
|
-
return toolCodeCache[toolUID];
|
|
31
|
+
throw new Error(`Tool "${tool.name}" (${tool.toolId}) is not registered as a system tool or package tool. ` +
|
|
32
|
+
`Inline code execution is no longer supported.`);
|
|
114
33
|
}
|
|
115
34
|
/**
|
|
116
35
|
* Loads a tool via {@link initTool} and wraps its `toolFn` so that every
|
|
@@ -123,7 +42,7 @@ async function initTool(tool, opts = { refresh: false }) {
|
|
|
123
42
|
async function initWrappedTool(tool, context) {
|
|
124
43
|
const { logger } = context;
|
|
125
44
|
let toolInstance = {
|
|
126
|
-
toolFn: (
|
|
45
|
+
toolFn: () => "toolFn placeholder",
|
|
127
46
|
tool,
|
|
128
47
|
};
|
|
129
48
|
try {
|
|
@@ -183,4 +102,29 @@ async function getLinkedTools(markdown) {
|
|
|
183
102
|
});
|
|
184
103
|
return fixedTools;
|
|
185
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Wraps a peers {@link ITool} into the {@link IAgentTool} format expected by
|
|
107
|
+
* the inference-based agent.
|
|
108
|
+
*
|
|
109
|
+
* Resolves the tool instance (with logging and error handling from
|
|
110
|
+
* {@link initWrappedTool}), converts the Zod input schema to JSON Schema
|
|
111
|
+
* for the inference API, and returns an executable {@link IAgentTool}.
|
|
112
|
+
*/
|
|
113
|
+
async function toAgentTool(tool, context) {
|
|
114
|
+
const toolInstance = await initWrappedTool(tool, context);
|
|
115
|
+
const zodSchema = toolInstance.inputSchema || (0, peers_sdk_1.fieldsToSchema)(tool.inputSchema.fields);
|
|
116
|
+
const jsonSchema = (0, zod_to_json_schema_1.zodToJsonSchema)(zodSchema);
|
|
117
|
+
return {
|
|
118
|
+
name: tool.name,
|
|
119
|
+
description: tool.usageDescription,
|
|
120
|
+
parameters: jsonSchema,
|
|
121
|
+
execute: async (args) => {
|
|
122
|
+
let result = await toolInstance.toolFn(args);
|
|
123
|
+
if ((0, lodash_1.isObject)(result)) {
|
|
124
|
+
result = JSON.stringify(result, null, 2);
|
|
125
|
+
}
|
|
126
|
+
return String(result);
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
186
130
|
//# sourceMappingURL=tool-loader.js.map
|
package/dist/tool-loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
4
|
+
const similar_tools_1 = require("./similar-tools");
|
|
5
|
+
const system_tools_1 = require("./system-tools");
|
|
6
|
+
(0, system_tools_1.registerSystemTool)({
|
|
7
|
+
toolId: "000peers0tool00toolsearch",
|
|
8
|
+
name: "tool-search",
|
|
9
|
+
usageDescription: "Search existing tools. Pass 'all' to get all tools. Sometimes a user asks what tools are available. This tool can be used to answer that question.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: peers_sdk_1.IOSchemaType.complex,
|
|
12
|
+
fields: [
|
|
13
|
+
{
|
|
14
|
+
name: "searchText",
|
|
15
|
+
type: peers_sdk_1.FieldType.string,
|
|
16
|
+
description: "The text to search for tools with. Pass 'all' or nothing to get all the tools",
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
}, {
|
|
21
|
+
toolFn: async (args, context) => {
|
|
22
|
+
const { searchText } = args;
|
|
23
|
+
let tools;
|
|
24
|
+
if (args.searchText === "all" || !args.searchText?.trim()) {
|
|
25
|
+
tools = await (0, peers_sdk_1.Tools)().list();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
tools = await (0, similar_tools_1.getSimilarTools)({ context, text: searchText });
|
|
29
|
+
}
|
|
30
|
+
const toolsStr = tools
|
|
31
|
+
.map((t) => [
|
|
32
|
+
`toolId: ${t.toolId}`,
|
|
33
|
+
`name: ${t.name}`,
|
|
34
|
+
`${t.usageDescription}`,
|
|
35
|
+
`\n${t.detailedDescription || ""}`,
|
|
36
|
+
]
|
|
37
|
+
.join("\n")
|
|
38
|
+
.trim())
|
|
39
|
+
.join("\n\n\n");
|
|
40
|
+
return toolsStr || "No tools found";
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=tool-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-search.js","sourceRoot":"","sources":["../src/tool-search.ts"],"names":[],"mappings":";;AAAA,oDAM8B;AAC9B,mDAAkD;AAClD,iDAAoD;AAEpD,IAAA,iCAAkB,EAChB;IACE,MAAM,EAAE,2BAA2B;IACnC,IAAI,EAAE,aAAa;IACnB,gBAAgB,EACd,oJAAoJ;IACtJ,WAAW,EAAE;QACX,IAAI,EAAE,wBAAY,CAAC,OAAO;QAC1B,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,WAAW,EACT,gFAAgF;aACnF;SACF;KACF;CACF,EACD;IACE,MAAM,EAAE,KAAK,EAAE,IAAS,EAAE,OAA4B,EAAE,EAAE;QACxD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,KAAc,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1D,KAAK,GAAG,MAAM,IAAA,iBAAK,GAAE,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,IAAA,+BAAe,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT;YACE,WAAW,CAAC,CAAC,MAAM,EAAE;YACrB,SAAS,CAAC,CAAC,IAAI,EAAE;YACjB,GAAG,CAAC,CAAC,gBAAgB,EAAE;YACvB,KAAK,CAAC,CAAC,mBAAmB,IAAI,EAAE,EAAE;SACnC;aACE,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,EAAE,CACV;aACA,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,QAAQ,IAAI,gBAAgB,CAAC;IACtC,CAAC;CACF,CACF,CAAC"}
|