llm-advanced-tools 0.1.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/README.md +402 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/openai.d.ts +38 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +170 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/vercel-ai.d.ts +46 -0
- package/dist/adapters/vercel-ai.d.ts.map +1 -0
- package/dist/adapters/vercel-ai.js +228 -0
- package/dist/adapters/vercel-ai.js.map +1 -0
- package/dist/core/client.d.ts +36 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +188 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +64 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +169 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/executor/base.d.ts +35 -0
- package/dist/executor/base.d.ts.map +1 -0
- package/dist/executor/base.js +85 -0
- package/dist/executor/base.js.map +1 -0
- package/dist/executor/index.d.ts +3 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +9 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/vm.d.ts +18 -0
- package/dist/executor/vm.d.ts.map +1 -0
- package/dist/executor/vm.js +106 -0
- package/dist/executor/vm.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/search/base.d.ts +32 -0
- package/dist/search/base.d.ts.map +1 -0
- package/dist/search/base.js +28 -0
- package/dist/search/base.js.map +1 -0
- package/dist/search/bm25.d.ts +16 -0
- package/dist/search/bm25.d.ts.map +1 -0
- package/dist/search/bm25.js +84 -0
- package/dist/search/bm25.js.map +1 -0
- package/dist/search/index.d.ts +4 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +10 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/regex.d.ts +12 -0
- package/dist/search/regex.d.ts.map +1 -0
- package/dist/search/regex.js +57 -0
- package/dist/search/regex.js.map +1 -0
- package/dist/types/index.d.ts +186 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +52 -0
- package/plan.md +576 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/openai.ts +195 -0
- package/src/adapters/vercel-ai.ts +270 -0
- package/src/core/client.ts +232 -0
- package/src/core/index.ts +2 -0
- package/src/core/registry.ts +198 -0
- package/src/executor/base.ts +122 -0
- package/src/executor/index.ts +2 -0
- package/src/executor/vm.ts +87 -0
- package/src/index.ts +26 -0
- package/src/search/base.ts +63 -0
- package/src/search/bm25.ts +64 -0
- package/src/search/index.ts +3 -0
- package/src/search/regex.ts +66 -0
- package/src/types/index.ts +221 -0
- package/test-advanced.ts +212 -0
- package/test-simple.ts +91 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BM25SearchStrategy = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
const natural = __importStar(require("natural"));
|
|
39
|
+
/**
|
|
40
|
+
* BM25-based search strategy
|
|
41
|
+
* Better relevance ranking, handles synonyms and term frequency
|
|
42
|
+
*/
|
|
43
|
+
class BM25SearchStrategy extends base_1.BaseSearchStrategy {
|
|
44
|
+
constructor(maxResults = 10, threshold = 0.0) {
|
|
45
|
+
super(maxResults, threshold);
|
|
46
|
+
this.tokenizer = new natural.WordTokenizer();
|
|
47
|
+
this.tfidf = new natural.TfIdf();
|
|
48
|
+
this.toolsIndex = new Map();
|
|
49
|
+
}
|
|
50
|
+
async search(query, tools, maxResults) {
|
|
51
|
+
// Rebuild index for current tool set
|
|
52
|
+
this.buildIndex(tools);
|
|
53
|
+
// Search using TF-IDF
|
|
54
|
+
const results = [];
|
|
55
|
+
this.tfidf.tfidfs(query, (i, measure) => {
|
|
56
|
+
const tool = this.toolsIndex.get(i);
|
|
57
|
+
if (tool && measure >= this.threshold) {
|
|
58
|
+
results.push({ tool, score: measure });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// Sort by score (descending)
|
|
62
|
+
results.sort((a, b) => b.score - a.score);
|
|
63
|
+
// Return top results
|
|
64
|
+
const limit = maxResults ?? this.maxResults;
|
|
65
|
+
return results.slice(0, limit).map(({ tool }) => tool);
|
|
66
|
+
}
|
|
67
|
+
scoreRelevance(query, tool) {
|
|
68
|
+
// This is handled by TF-IDF in the search method
|
|
69
|
+
// This method is not used for BM25 but required by base class
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
buildIndex(tools) {
|
|
73
|
+
this.tfidf = new natural.TfIdf();
|
|
74
|
+
this.toolsIndex.clear();
|
|
75
|
+
tools.forEach((tool, index) => {
|
|
76
|
+
// Combine name (with higher weight) and description for indexing
|
|
77
|
+
const document = `${tool.name} ${tool.name} ${tool.name} ${tool.description}`;
|
|
78
|
+
this.tfidf.addDocument(document);
|
|
79
|
+
this.toolsIndex.set(index, tool);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.BM25SearchStrategy = BM25SearchStrategy;
|
|
84
|
+
//# sourceMappingURL=bm25.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iCAA4C;AAC5C,iDAAmC;AAEnC;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,yBAAkB;IAKxD,YAAY,UAAU,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG;QAC1C,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,KAAuB,EACvB,UAAmB;QAEnB,qCAAqC;QACrC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvB,sBAAsB;QACtB,MAAM,OAAO,GAAmD,EAAE,CAAC;QAEnE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE1C,qBAAqB;QACrB,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAES,cAAc,CAAC,KAAa,EAAE,IAAoB;QAC1D,iDAAiD;QACjD,8DAA8D;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,UAAU,CAAC,KAAuB;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,iEAAiE;YACjE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvDD,gDAuDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BM25SearchStrategy = exports.RegexSearchStrategy = exports.BaseSearchStrategy = void 0;
|
|
4
|
+
var base_1 = require("./base");
|
|
5
|
+
Object.defineProperty(exports, "BaseSearchStrategy", { enumerable: true, get: function () { return base_1.BaseSearchStrategy; } });
|
|
6
|
+
var regex_1 = require("./regex");
|
|
7
|
+
Object.defineProperty(exports, "RegexSearchStrategy", { enumerable: true, get: function () { return regex_1.RegexSearchStrategy; } });
|
|
8
|
+
var bm25_1 = require("./bm25");
|
|
9
|
+
Object.defineProperty(exports, "BM25SearchStrategy", { enumerable: true, get: function () { return bm25_1.BM25SearchStrategy; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4D;AAAnC,0GAAA,kBAAkB,OAAA;AAC3C,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA;AAC5B,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ToolDefinition } from '../types';
|
|
2
|
+
import { BaseSearchStrategy } from './base';
|
|
3
|
+
/**
|
|
4
|
+
* Regex-based search strategy
|
|
5
|
+
* Fast and simple, good for exact matches
|
|
6
|
+
*/
|
|
7
|
+
export declare class RegexSearchStrategy extends BaseSearchStrategy {
|
|
8
|
+
search(query: string, tools: ToolDefinition[], maxResults?: number): Promise<ToolDefinition[]>;
|
|
9
|
+
protected scoreRelevance(query: string, tool: ToolDefinition): number;
|
|
10
|
+
private escapeRegex;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../src/search/regex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB;IACnD,MAAM,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC;IAI5B,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM;IA8CrE,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RegexSearchStrategy = void 0;
|
|
4
|
+
const base_1 = require("./base");
|
|
5
|
+
/**
|
|
6
|
+
* Regex-based search strategy
|
|
7
|
+
* Fast and simple, good for exact matches
|
|
8
|
+
*/
|
|
9
|
+
class RegexSearchStrategy extends base_1.BaseSearchStrategy {
|
|
10
|
+
async search(query, tools, maxResults) {
|
|
11
|
+
return this.rankTools(query, tools, maxResults);
|
|
12
|
+
}
|
|
13
|
+
scoreRelevance(query, tool) {
|
|
14
|
+
const normalizedQuery = query.toLowerCase();
|
|
15
|
+
const toolName = tool.name.toLowerCase();
|
|
16
|
+
const toolDesc = tool.description.toLowerCase();
|
|
17
|
+
let score = 0;
|
|
18
|
+
// Exact name match gets highest score
|
|
19
|
+
if (toolName === normalizedQuery) {
|
|
20
|
+
score += 100;
|
|
21
|
+
}
|
|
22
|
+
// Name contains query
|
|
23
|
+
if (toolName.includes(normalizedQuery)) {
|
|
24
|
+
score += 50;
|
|
25
|
+
}
|
|
26
|
+
// Query matches word boundary in name
|
|
27
|
+
const nameWordBoundary = new RegExp(`\\b${this.escapeRegex(normalizedQuery)}`, 'i');
|
|
28
|
+
if (nameWordBoundary.test(toolName)) {
|
|
29
|
+
score += 30;
|
|
30
|
+
}
|
|
31
|
+
// Description contains query
|
|
32
|
+
if (toolDesc.includes(normalizedQuery)) {
|
|
33
|
+
score += 20;
|
|
34
|
+
}
|
|
35
|
+
// Query matches word boundary in description
|
|
36
|
+
const descWordBoundary = new RegExp(`\\b${this.escapeRegex(normalizedQuery)}`, 'i');
|
|
37
|
+
if (descWordBoundary.test(toolDesc)) {
|
|
38
|
+
score += 10;
|
|
39
|
+
}
|
|
40
|
+
// Check for individual query words
|
|
41
|
+
const queryWords = normalizedQuery.split(/\s+/);
|
|
42
|
+
queryWords.forEach(word => {
|
|
43
|
+
if (word.length > 2) {
|
|
44
|
+
if (toolName.includes(word))
|
|
45
|
+
score += 5;
|
|
46
|
+
if (toolDesc.includes(word))
|
|
47
|
+
score += 2;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return score;
|
|
51
|
+
}
|
|
52
|
+
escapeRegex(str) {
|
|
53
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.RegexSearchStrategy = RegexSearchStrategy;
|
|
57
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.js","sourceRoot":"","sources":["../../src/search/regex.ts"],"names":[],"mappings":";;;AACA,iCAA4C;AAE5C;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,yBAAkB;IACzD,KAAK,CAAC,MAAM,CACV,KAAa,EACb,KAAuB,EACvB,UAAmB;QAEnB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAES,cAAc,CAAC,KAAa,EAAE,IAAoB;QAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,sCAAsC;QACtC,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,sBAAsB;QACtB,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpF,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpF,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,mCAAmC;QACnC,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;gBACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACF;AA1DD,kDA0DC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a tool definition with support for advanced features
|
|
4
|
+
*/
|
|
5
|
+
export interface ToolDefinition<TInput = any, TOutput = any> {
|
|
6
|
+
/** Tool name (must be unique in registry) */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Human-readable description of what the tool does */
|
|
9
|
+
description: string;
|
|
10
|
+
/** JSON Schema defining input parameters */
|
|
11
|
+
inputSchema: z.ZodSchema<TInput> | Record<string, any>;
|
|
12
|
+
/** Example invocations showing proper usage */
|
|
13
|
+
inputExamples?: TInput[];
|
|
14
|
+
/** Whether to defer loading until explicitly requested (for Tool Search) */
|
|
15
|
+
deferLoading?: boolean;
|
|
16
|
+
/** Which callers can invoke this tool programmatically */
|
|
17
|
+
allowedCallers?: string[];
|
|
18
|
+
/** The actual implementation function */
|
|
19
|
+
handler: (input: TInput) => Promise<TOutput> | TOutput;
|
|
20
|
+
/** Optional metadata */
|
|
21
|
+
metadata?: Record<string, any>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Represents a tool call from the LLM
|
|
25
|
+
*/
|
|
26
|
+
export interface ToolCall {
|
|
27
|
+
/** Unique identifier for this tool call */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Name of the tool being called */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Arguments passed to the tool */
|
|
32
|
+
input: Record<string, any>;
|
|
33
|
+
/** Optional caller information (for programmatic calling) */
|
|
34
|
+
caller?: {
|
|
35
|
+
type: string;
|
|
36
|
+
toolId: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Result of a tool execution
|
|
41
|
+
*/
|
|
42
|
+
export interface ToolResult<T = any> {
|
|
43
|
+
/** ID of the tool call this result corresponds to */
|
|
44
|
+
toolCallId: string;
|
|
45
|
+
/** The result data */
|
|
46
|
+
data?: T;
|
|
47
|
+
/** Error if execution failed */
|
|
48
|
+
error?: {
|
|
49
|
+
message: string;
|
|
50
|
+
code?: string;
|
|
51
|
+
details?: any;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Message format (provider-agnostic)
|
|
56
|
+
*/
|
|
57
|
+
export interface Message {
|
|
58
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
59
|
+
content: string | Array<{
|
|
60
|
+
type: 'text' | 'tool_use' | 'tool_result';
|
|
61
|
+
[key: string]: any;
|
|
62
|
+
}>;
|
|
63
|
+
toolCalls?: ToolCall[];
|
|
64
|
+
toolResults?: ToolResult[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Chat completion request
|
|
68
|
+
*/
|
|
69
|
+
export interface ChatRequest {
|
|
70
|
+
messages: Message[];
|
|
71
|
+
tools?: ToolDefinition[];
|
|
72
|
+
maxTokens?: number;
|
|
73
|
+
temperature?: number;
|
|
74
|
+
stream?: boolean;
|
|
75
|
+
[key: string]: any;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Chat completion response
|
|
79
|
+
*/
|
|
80
|
+
export interface ChatResponse {
|
|
81
|
+
message: Message;
|
|
82
|
+
usage?: {
|
|
83
|
+
inputTokens: number;
|
|
84
|
+
outputTokens: number;
|
|
85
|
+
totalTokens: number;
|
|
86
|
+
};
|
|
87
|
+
stopReason?: 'end_turn' | 'max_tokens' | 'tool_use' | 'stop_sequence';
|
|
88
|
+
toolCalls?: ToolCall[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Search strategy for tool discovery
|
|
92
|
+
* - 'smart': Relevance-based ranking (best for most cases)
|
|
93
|
+
* - 'keyword': Fast keyword matching
|
|
94
|
+
* - 'semantic': Meaning-based search using embeddings
|
|
95
|
+
* - 'custom': Your own search function
|
|
96
|
+
*
|
|
97
|
+
* Legacy names (for backward compatibility):
|
|
98
|
+
* - 'bm25': alias for 'smart'
|
|
99
|
+
* - 'regex': alias for 'keyword'
|
|
100
|
+
*/
|
|
101
|
+
export type SearchStrategy = 'smart' | 'keyword' | 'semantic' | 'custom' | 'bm25' | 'regex';
|
|
102
|
+
/**
|
|
103
|
+
* Configuration for tool search
|
|
104
|
+
*/
|
|
105
|
+
export interface SearchConfig {
|
|
106
|
+
strategy: SearchStrategy;
|
|
107
|
+
maxResults?: number;
|
|
108
|
+
threshold?: number;
|
|
109
|
+
customSearchFn?: (query: string, tools: ToolDefinition[]) => Promise<ToolDefinition[]>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Code execution result
|
|
113
|
+
*/
|
|
114
|
+
export interface ExecutionResult {
|
|
115
|
+
success: boolean;
|
|
116
|
+
stdout?: string;
|
|
117
|
+
stderr?: string;
|
|
118
|
+
returnValue?: any;
|
|
119
|
+
error?: {
|
|
120
|
+
message: string;
|
|
121
|
+
stack?: string;
|
|
122
|
+
};
|
|
123
|
+
toolCalls?: ToolCall[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Code executor configuration
|
|
127
|
+
*/
|
|
128
|
+
export interface ExecutorConfig {
|
|
129
|
+
timeout?: number;
|
|
130
|
+
memoryLimit?: string;
|
|
131
|
+
environment?: Record<string, string>;
|
|
132
|
+
allowedPackages?: string[];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Provider capabilities
|
|
136
|
+
*/
|
|
137
|
+
export interface ProviderCapabilities {
|
|
138
|
+
supportsNativeToolSearch: boolean;
|
|
139
|
+
supportsNativeCodeExecution: boolean;
|
|
140
|
+
supportsNativeExamples: boolean;
|
|
141
|
+
supportsStreaming: boolean;
|
|
142
|
+
supportsParallelToolCalls: boolean;
|
|
143
|
+
maxToolsPerRequest?: number;
|
|
144
|
+
maxTokens?: number;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Base provider adapter interface
|
|
148
|
+
*/
|
|
149
|
+
export interface ProviderAdapter {
|
|
150
|
+
/** Provider name (e.g., 'openai', 'anthropic') */
|
|
151
|
+
readonly name: string;
|
|
152
|
+
/** Provider capabilities */
|
|
153
|
+
readonly capabilities: ProviderCapabilities;
|
|
154
|
+
/**
|
|
155
|
+
* Format a tool definition for this provider's API
|
|
156
|
+
*/
|
|
157
|
+
formatTool(tool: ToolDefinition): Record<string, any>;
|
|
158
|
+
/**
|
|
159
|
+
* Create a chat completion request
|
|
160
|
+
*/
|
|
161
|
+
chat(request: ChatRequest): Promise<ChatResponse>;
|
|
162
|
+
/**
|
|
163
|
+
* Parse tool calls from provider response
|
|
164
|
+
*/
|
|
165
|
+
parseToolCalls(response: any): ToolCall[];
|
|
166
|
+
/**
|
|
167
|
+
* Format tool results for provider
|
|
168
|
+
*/
|
|
169
|
+
formatToolResults(results: ToolResult[]): any;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Client configuration
|
|
173
|
+
*/
|
|
174
|
+
export interface ClientConfig {
|
|
175
|
+
/** Provider adapter to use */
|
|
176
|
+
adapter: ProviderAdapter;
|
|
177
|
+
/** Enable tool search feature */
|
|
178
|
+
enableToolSearch?: boolean;
|
|
179
|
+
/** Enable programmatic tool calling */
|
|
180
|
+
enableProgrammaticCalling?: boolean;
|
|
181
|
+
/** Search configuration */
|
|
182
|
+
searchConfig?: SearchConfig;
|
|
183
|
+
/** Code executor configuration */
|
|
184
|
+
executorConfig?: ExecutorConfig;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACzD,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,4CAA4C;IAC5C,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvD,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,yCAAyC;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAEvD,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IAEX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B,6DAA6D;IAC7D,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IAEnB,sBAAsB;IACtB,IAAI,CAAC,EAAE,CAAC,CAAC;IAET,gCAAgC;IAChC,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;QAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC;IACtE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAC3C,MAAM,GAAG,OAAO,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CACxF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,2BAA2B,EAAE,OAAO,CAAC;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAElD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;IAE1C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,eAAe,CAAC;IAEzB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,uCAAuC;IACvC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,2BAA2B;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,kCAAkC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "llm-advanced-tools",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Provider-agnostic advanced tool use library for LLMs",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc --watch",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"test:watch": "jest --watch",
|
|
12
|
+
"test:coverage": "jest --coverage",
|
|
13
|
+
"test:unit": "jest --testPathPattern=tests/unit",
|
|
14
|
+
"test:e2e": "jest --testPathPattern=tests/e2e",
|
|
15
|
+
"lint": "eslint src --ext .ts",
|
|
16
|
+
"format": "prettier --write \"src/**/*.ts\""
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"llm",
|
|
20
|
+
"tools",
|
|
21
|
+
"openai",
|
|
22
|
+
"anthropic",
|
|
23
|
+
"google",
|
|
24
|
+
"gemini",
|
|
25
|
+
"function-calling",
|
|
26
|
+
"agent"
|
|
27
|
+
],
|
|
28
|
+
"author": "",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"openai": "^4.0.0",
|
|
32
|
+
"@anthropic-ai/sdk": "^0.27.0",
|
|
33
|
+
"ai": "^4.0.0",
|
|
34
|
+
"@ai-sdk/openai": "^1.0.0",
|
|
35
|
+
"@ai-sdk/anthropic": "^1.0.0",
|
|
36
|
+
"zod": "^3.22.0",
|
|
37
|
+
"natural": "^6.0.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.0.0",
|
|
41
|
+
"@types/jest": "^29.0.0",
|
|
42
|
+
"@types/natural": "^5.1.0",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
44
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
45
|
+
"eslint": "^8.0.0",
|
|
46
|
+
"jest": "^29.0.0",
|
|
47
|
+
"prettier": "^3.0.0",
|
|
48
|
+
"ts-jest": "^29.0.0",
|
|
49
|
+
"ts-node": "^10.0.0",
|
|
50
|
+
"typescript": "^5.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|