@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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional agent that calls the Peers inference API (SSE streaming)
|
|
3
|
+
* and implements a tool-calling loop without LangChain.
|
|
4
|
+
*/
|
|
5
|
+
export interface IChatEntry {
|
|
6
|
+
role: "system" | "user" | "assistant" | "tool";
|
|
7
|
+
content?: string;
|
|
8
|
+
toolCalls?: {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
arguments: string;
|
|
12
|
+
}[];
|
|
13
|
+
toolCallId?: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface IAgentTool {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
parameters: Record<string, unknown>;
|
|
20
|
+
execute: (args: Record<string, any>) => Promise<string>;
|
|
21
|
+
}
|
|
22
|
+
interface IInvokeAgentOpts {
|
|
23
|
+
provider?: "openai" | "anthropic" | "google" | "groq";
|
|
24
|
+
model: string;
|
|
25
|
+
temperature?: number;
|
|
26
|
+
servicesUrl: string;
|
|
27
|
+
token: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Invoke the Peers inference API in a tool-calling loop.
|
|
31
|
+
*
|
|
32
|
+
* Sends messages to the hosted inference endpoint, parses the SSE stream,
|
|
33
|
+
* executes any tool calls the model requests, appends results, and repeats
|
|
34
|
+
* until the model produces a final text response or the iteration limit is hit.
|
|
35
|
+
*/
|
|
36
|
+
export declare function invokeAgent(input: string, chatEntries: IChatEntry[] | undefined, tools: IAgentTool[] | undefined, opts: IInvokeAgentOpts): Promise<string>;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Functional agent that calls the Peers inference API (SSE streaming)
|
|
4
|
+
* and implements a tool-calling loop without LangChain.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.invokeAgent = invokeAgent;
|
|
8
|
+
const MAX_TOOL_ITERATIONS = 10;
|
|
9
|
+
/**
|
|
10
|
+
* Invoke the Peers inference API in a tool-calling loop.
|
|
11
|
+
*
|
|
12
|
+
* Sends messages to the hosted inference endpoint, parses the SSE stream,
|
|
13
|
+
* executes any tool calls the model requests, appends results, and repeats
|
|
14
|
+
* until the model produces a final text response or the iteration limit is hit.
|
|
15
|
+
*/
|
|
16
|
+
async function invokeAgent(input, chatEntries = [], tools = [], opts) {
|
|
17
|
+
const { provider = "openai", model, temperature, servicesUrl, token } = opts;
|
|
18
|
+
if (!token) {
|
|
19
|
+
throw new Error("No Peers Services token available. Please register with Peers Services to use the hosted inference API.");
|
|
20
|
+
}
|
|
21
|
+
const messages = [...chatEntries, { role: "user", content: input.trim() || "" }];
|
|
22
|
+
const toolDefs = tools.length > 0
|
|
23
|
+
? tools.map((t) => ({
|
|
24
|
+
name: t.name,
|
|
25
|
+
description: t.description,
|
|
26
|
+
parameters: t.parameters,
|
|
27
|
+
}))
|
|
28
|
+
: undefined;
|
|
29
|
+
for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {
|
|
30
|
+
const { text, toolCalls, stopReason } = await callInferenceApi({ provider, model, temperature, messages, tools: toolDefs }, servicesUrl, token);
|
|
31
|
+
if (toolCalls.length === 0 || stopReason !== "tool_use") {
|
|
32
|
+
return text || "";
|
|
33
|
+
}
|
|
34
|
+
messages.push({
|
|
35
|
+
role: "assistant",
|
|
36
|
+
content: text || undefined,
|
|
37
|
+
toolCalls,
|
|
38
|
+
});
|
|
39
|
+
for (const call of toolCalls) {
|
|
40
|
+
const tool = tools.find((t) => t.name === call.name);
|
|
41
|
+
let result;
|
|
42
|
+
if (!tool) {
|
|
43
|
+
result = `Error: tool "${call.name}" not found`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
try {
|
|
47
|
+
const args = JSON.parse(call.arguments);
|
|
48
|
+
result = await tool.execute(args);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
result = `Error executing tool "${call.name}": ${err}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
messages.push({
|
|
55
|
+
role: "tool",
|
|
56
|
+
toolCallId: call.id,
|
|
57
|
+
name: call.name,
|
|
58
|
+
content: result,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return "Max tool-call iterations reached. The agent could not complete the task within the allowed number of steps.";
|
|
63
|
+
}
|
|
64
|
+
async function callInferenceApi(params, servicesUrl, token) {
|
|
65
|
+
const body = {
|
|
66
|
+
provider: params.provider,
|
|
67
|
+
model: params.model,
|
|
68
|
+
messages: params.messages,
|
|
69
|
+
};
|
|
70
|
+
if (params.temperature !== undefined) {
|
|
71
|
+
body.temperature = params.temperature;
|
|
72
|
+
}
|
|
73
|
+
if (params.tools && params.tools.length > 0) {
|
|
74
|
+
body.tools = params.tools;
|
|
75
|
+
body.toolChoice = "auto";
|
|
76
|
+
}
|
|
77
|
+
const url = `${servicesUrl}/api/v1/inference/chat`;
|
|
78
|
+
const payload = JSON.stringify(body);
|
|
79
|
+
const res = await fetch(url, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: {
|
|
82
|
+
"Content-Type": "application/json",
|
|
83
|
+
Authorization: `Bearer ${token}`,
|
|
84
|
+
},
|
|
85
|
+
body: payload,
|
|
86
|
+
});
|
|
87
|
+
if (!res.ok) {
|
|
88
|
+
const errBody = await res.text().catch(() => "");
|
|
89
|
+
if (res.status === 402) {
|
|
90
|
+
throw new Error("Insufficient Peers Services balance. Please add funds to continue.");
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`Inference API error (${res.status}): ${errBody || res.statusText}`);
|
|
93
|
+
}
|
|
94
|
+
return parseSseStream(res);
|
|
95
|
+
}
|
|
96
|
+
async function parseSseStream(res) {
|
|
97
|
+
let text = "";
|
|
98
|
+
const toolCalls = new Map();
|
|
99
|
+
let stopReason = "end_turn";
|
|
100
|
+
const reader = res.body?.getReader();
|
|
101
|
+
if (!reader) {
|
|
102
|
+
throw new Error("No response body from inference API");
|
|
103
|
+
}
|
|
104
|
+
const decoder = new TextDecoder("utf-8");
|
|
105
|
+
let buffer = "";
|
|
106
|
+
let currentEventType = "";
|
|
107
|
+
try {
|
|
108
|
+
while (true) {
|
|
109
|
+
const { done, value } = await reader.read();
|
|
110
|
+
if (done)
|
|
111
|
+
break;
|
|
112
|
+
buffer += decoder.decode(value, { stream: true });
|
|
113
|
+
const lines = buffer.split("\n");
|
|
114
|
+
buffer = lines.pop() || "";
|
|
115
|
+
for (const line of lines) {
|
|
116
|
+
if (line.startsWith("event: ")) {
|
|
117
|
+
currentEventType = line.slice(7).trim();
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (!line.startsWith("data: "))
|
|
121
|
+
continue;
|
|
122
|
+
const data = line.slice(6);
|
|
123
|
+
if (data === "[DONE]")
|
|
124
|
+
continue;
|
|
125
|
+
let parsed;
|
|
126
|
+
try {
|
|
127
|
+
parsed = JSON.parse(data);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
currentEventType = "";
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Support both SSE formats:
|
|
134
|
+
// 1. Separate event: line + data: {payload} (live server)
|
|
135
|
+
// 2. data: {event, data: payload} (embedded format)
|
|
136
|
+
const eventType = currentEventType || parsed.event;
|
|
137
|
+
const payload = currentEventType ? parsed : (parsed.data ?? parsed);
|
|
138
|
+
currentEventType = "";
|
|
139
|
+
switch (eventType) {
|
|
140
|
+
case "delta":
|
|
141
|
+
if (payload.type === "text_delta") {
|
|
142
|
+
text += payload.content;
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case "tool_call_start":
|
|
146
|
+
toolCalls.set(payload.index, {
|
|
147
|
+
id: payload.id,
|
|
148
|
+
name: payload.name,
|
|
149
|
+
arguments: "",
|
|
150
|
+
});
|
|
151
|
+
break;
|
|
152
|
+
case "tool_call_delta": {
|
|
153
|
+
const tc = toolCalls.get(payload.index);
|
|
154
|
+
if (tc) {
|
|
155
|
+
tc.arguments += payload.arguments;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case "message_stop":
|
|
160
|
+
stopReason = payload?.stop_reason || "end_turn";
|
|
161
|
+
break;
|
|
162
|
+
case "error":
|
|
163
|
+
throw new Error(`Inference stream error: ${payload?.message || "unknown"}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
reader.releaseLock();
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
text,
|
|
173
|
+
toolCalls: Array.from(toolCalls.values()),
|
|
174
|
+
stopReason,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=agent-functional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-functional.js","sourceRoot":"","sources":["../src/agent-functional.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|