@reverbia/sdk 1.0.0-next.20251208093930 → 1.0.0-next.20251208094446
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.
|
@@ -16,27 +16,54 @@ Task: "${userMessage}"
|
|
|
16
16
|
|
|
17
17
|
Best tool:`;
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function buildParamExtractionPrompt(userMessage, paramName, paramDescription) {
|
|
20
|
+
const desc = paramDescription ? ` (${paramDescription})` : "";
|
|
21
|
+
return `Extract the value for "${paramName}"${desc} from the user message. Reply with ONLY the extracted value, nothing else.
|
|
22
|
+
|
|
23
|
+
User message: "${userMessage}"
|
|
24
|
+
|
|
25
|
+
Value for ${paramName}:`;
|
|
26
|
+
}
|
|
27
|
+
async function extractParams(userMessage, tool, options) {
|
|
20
28
|
const params = {};
|
|
21
|
-
if (!tool.parameters) return params;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
if (!tool.parameters || tool.parameters.length === 0) return params;
|
|
30
|
+
const { model, device } = options;
|
|
31
|
+
try {
|
|
32
|
+
const pipeline = await getTextGenerationPipeline({
|
|
33
|
+
model,
|
|
34
|
+
device,
|
|
35
|
+
dtype: "q4"
|
|
36
|
+
});
|
|
37
|
+
for (const param of tool.parameters) {
|
|
38
|
+
const prompt = buildParamExtractionPrompt(
|
|
39
|
+
userMessage,
|
|
40
|
+
param.name,
|
|
41
|
+
param.description
|
|
29
42
|
);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
const output = await pipeline(prompt, {
|
|
44
|
+
max_new_tokens: 32,
|
|
45
|
+
// Allow reasonable length for parameter values
|
|
46
|
+
temperature: 0,
|
|
47
|
+
do_sample: false,
|
|
48
|
+
return_full_text: false
|
|
49
|
+
});
|
|
50
|
+
const generatedText = output?.[0]?.generated_text || output?.generated_text || "";
|
|
51
|
+
const extractedValue = generatedText.trim().split("\n")[0].trim();
|
|
52
|
+
console.log(
|
|
53
|
+
`[Tool Selector] Extracted param "${param.name}":`,
|
|
54
|
+
extractedValue
|
|
55
|
+
);
|
|
56
|
+
params[param.name] = extractedValue || userMessage;
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error("[Tool Selector] Error extracting params:", error);
|
|
60
|
+
for (const param of tool.parameters) {
|
|
34
61
|
params[param.name] = userMessage;
|
|
35
62
|
}
|
|
36
63
|
}
|
|
37
64
|
return params;
|
|
38
65
|
}
|
|
39
|
-
function parseToolSelectionResponse(response, tools, userMessage) {
|
|
66
|
+
async function parseToolSelectionResponse(response, tools, userMessage, options) {
|
|
40
67
|
console.log("[Tool Selector] Raw response:", response);
|
|
41
68
|
const cleaned = response.toLowerCase().trim().split(/[\s\n,.]+/)[0].replace(/[^a-z0-9_-]/g, "");
|
|
42
69
|
console.log("[Tool Selector] Parsed tool name:", cleaned);
|
|
@@ -51,7 +78,7 @@ function parseToolSelectionResponse(response, tools, userMessage) {
|
|
|
51
78
|
);
|
|
52
79
|
if (fuzzyTool) {
|
|
53
80
|
console.log(`[Tool Selector] Fuzzy matched tool: ${fuzzyTool.name}`);
|
|
54
|
-
const params2 = extractParams(userMessage, fuzzyTool);
|
|
81
|
+
const params2 = await extractParams(userMessage, fuzzyTool, options);
|
|
55
82
|
return {
|
|
56
83
|
toolSelected: true,
|
|
57
84
|
toolName: fuzzyTool.name,
|
|
@@ -62,7 +89,7 @@ function parseToolSelectionResponse(response, tools, userMessage) {
|
|
|
62
89
|
console.warn(`[Tool Selector] Unknown tool: ${cleaned}`);
|
|
63
90
|
return { toolSelected: false };
|
|
64
91
|
}
|
|
65
|
-
const params = extractParams(userMessage, selectedTool);
|
|
92
|
+
const params = await extractParams(userMessage, selectedTool, options);
|
|
66
93
|
console.log(`[Tool Selector] Selected tool: ${selectedTool.name}`, params);
|
|
67
94
|
return {
|
|
68
95
|
toolSelected: true,
|
|
@@ -103,7 +130,10 @@ async function selectTool(userMessage, tools, options = {}) {
|
|
|
103
130
|
return { toolSelected: false };
|
|
104
131
|
}
|
|
105
132
|
const generatedText = output?.[0]?.generated_text || output?.generated_text || "";
|
|
106
|
-
return parseToolSelectionResponse(generatedText, tools, userMessage
|
|
133
|
+
return await parseToolSelectionResponse(generatedText, tools, userMessage, {
|
|
134
|
+
model,
|
|
135
|
+
device
|
|
136
|
+
});
|
|
107
137
|
} catch (error) {
|
|
108
138
|
console.error("[Tool Selector] Error:", error);
|
|
109
139
|
return { toolSelected: false };
|
package/dist/react/index.cjs
CHANGED
|
@@ -47215,27 +47215,54 @@ Task: "${userMessage}"
|
|
|
47215
47215
|
|
|
47216
47216
|
Best tool:`;
|
|
47217
47217
|
}
|
|
47218
|
-
function
|
|
47218
|
+
function buildParamExtractionPrompt(userMessage, paramName, paramDescription) {
|
|
47219
|
+
const desc = paramDescription ? ` (${paramDescription})` : "";
|
|
47220
|
+
return `Extract the value for "${paramName}"${desc} from the user message. Reply with ONLY the extracted value, nothing else.
|
|
47221
|
+
|
|
47222
|
+
User message: "${userMessage}"
|
|
47223
|
+
|
|
47224
|
+
Value for ${paramName}:`;
|
|
47225
|
+
}
|
|
47226
|
+
async function extractParams(userMessage, tool, options) {
|
|
47219
47227
|
const params = {};
|
|
47220
|
-
if (!tool.parameters) return params;
|
|
47221
|
-
|
|
47222
|
-
|
|
47223
|
-
|
|
47224
|
-
|
|
47225
|
-
|
|
47226
|
-
|
|
47227
|
-
|
|
47228
|
+
if (!tool.parameters || tool.parameters.length === 0) return params;
|
|
47229
|
+
const { model, device } = options;
|
|
47230
|
+
try {
|
|
47231
|
+
const pipeline = await getTextGenerationPipeline({
|
|
47232
|
+
model,
|
|
47233
|
+
device,
|
|
47234
|
+
dtype: "q4"
|
|
47235
|
+
});
|
|
47236
|
+
for (const param of tool.parameters) {
|
|
47237
|
+
const prompt = buildParamExtractionPrompt(
|
|
47238
|
+
userMessage,
|
|
47239
|
+
param.name,
|
|
47240
|
+
param.description
|
|
47228
47241
|
);
|
|
47229
|
-
|
|
47230
|
-
|
|
47231
|
-
|
|
47232
|
-
|
|
47242
|
+
const output = await pipeline(prompt, {
|
|
47243
|
+
max_new_tokens: 32,
|
|
47244
|
+
// Allow reasonable length for parameter values
|
|
47245
|
+
temperature: 0,
|
|
47246
|
+
do_sample: false,
|
|
47247
|
+
return_full_text: false
|
|
47248
|
+
});
|
|
47249
|
+
const generatedText = output?.[0]?.generated_text || output?.generated_text || "";
|
|
47250
|
+
const extractedValue = generatedText.trim().split("\n")[0].trim();
|
|
47251
|
+
console.log(
|
|
47252
|
+
`[Tool Selector] Extracted param "${param.name}":`,
|
|
47253
|
+
extractedValue
|
|
47254
|
+
);
|
|
47255
|
+
params[param.name] = extractedValue || userMessage;
|
|
47256
|
+
}
|
|
47257
|
+
} catch (error) {
|
|
47258
|
+
console.error("[Tool Selector] Error extracting params:", error);
|
|
47259
|
+
for (const param of tool.parameters) {
|
|
47233
47260
|
params[param.name] = userMessage;
|
|
47234
47261
|
}
|
|
47235
47262
|
}
|
|
47236
47263
|
return params;
|
|
47237
47264
|
}
|
|
47238
|
-
function parseToolSelectionResponse(response, tools, userMessage) {
|
|
47265
|
+
async function parseToolSelectionResponse(response, tools, userMessage, options) {
|
|
47239
47266
|
console.log("[Tool Selector] Raw response:", response);
|
|
47240
47267
|
const cleaned = response.toLowerCase().trim().split(/[\s\n,.]+/)[0].replace(/[^a-z0-9_-]/g, "");
|
|
47241
47268
|
console.log("[Tool Selector] Parsed tool name:", cleaned);
|
|
@@ -47250,7 +47277,7 @@ function parseToolSelectionResponse(response, tools, userMessage) {
|
|
|
47250
47277
|
);
|
|
47251
47278
|
if (fuzzyTool) {
|
|
47252
47279
|
console.log(`[Tool Selector] Fuzzy matched tool: ${fuzzyTool.name}`);
|
|
47253
|
-
const params2 = extractParams(userMessage, fuzzyTool);
|
|
47280
|
+
const params2 = await extractParams(userMessage, fuzzyTool, options);
|
|
47254
47281
|
return {
|
|
47255
47282
|
toolSelected: true,
|
|
47256
47283
|
toolName: fuzzyTool.name,
|
|
@@ -47261,7 +47288,7 @@ function parseToolSelectionResponse(response, tools, userMessage) {
|
|
|
47261
47288
|
console.warn(`[Tool Selector] Unknown tool: ${cleaned}`);
|
|
47262
47289
|
return { toolSelected: false };
|
|
47263
47290
|
}
|
|
47264
|
-
const params = extractParams(userMessage, selectedTool);
|
|
47291
|
+
const params = await extractParams(userMessage, selectedTool, options);
|
|
47265
47292
|
console.log(`[Tool Selector] Selected tool: ${selectedTool.name}`, params);
|
|
47266
47293
|
return {
|
|
47267
47294
|
toolSelected: true,
|
|
@@ -47302,7 +47329,10 @@ async function selectTool(userMessage, tools, options = {}) {
|
|
|
47302
47329
|
return { toolSelected: false };
|
|
47303
47330
|
}
|
|
47304
47331
|
const generatedText = output?.[0]?.generated_text || output?.generated_text || "";
|
|
47305
|
-
return parseToolSelectionResponse(generatedText, tools, userMessage
|
|
47332
|
+
return await parseToolSelectionResponse(generatedText, tools, userMessage, {
|
|
47333
|
+
model,
|
|
47334
|
+
device
|
|
47335
|
+
});
|
|
47306
47336
|
} catch (error) {
|
|
47307
47337
|
console.error("[Tool Selector] Error:", error);
|
|
47308
47338
|
return { toolSelected: false };
|
package/dist/react/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
DEFAULT_TOOL_SELECTOR_MODEL,
|
|
3
3
|
executeTool,
|
|
4
4
|
selectTool
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BG7SZT33.mjs";
|
|
6
6
|
import "./chunk-Q6FVPTTV.mjs";
|
|
7
7
|
import "./chunk-FBCDBTKJ.mjs";
|
|
8
8
|
|
|
@@ -862,7 +862,7 @@ var webFeatures = null;
|
|
|
862
862
|
var webFeaturesPromise = isReactNative ? Promise.resolve(null) : Promise.all([
|
|
863
863
|
import("./generation-NG4QVPCR.mjs"),
|
|
864
864
|
import("./constants-WUGUGYE3.mjs"),
|
|
865
|
-
import("./selector-
|
|
865
|
+
import("./selector-XMR5KL3E.mjs")
|
|
866
866
|
]).then(([generation, constants, selector]) => {
|
|
867
867
|
webFeatures = {
|
|
868
868
|
generateLocalChatCompletion: generation.generateLocalChatCompletion,
|