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.
Files changed (80) hide show
  1. package/README.md +402 -0
  2. package/dist/adapters/index.d.ts +3 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +8 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/openai.d.ts +38 -0
  7. package/dist/adapters/openai.d.ts.map +1 -0
  8. package/dist/adapters/openai.js +170 -0
  9. package/dist/adapters/openai.js.map +1 -0
  10. package/dist/adapters/vercel-ai.d.ts +46 -0
  11. package/dist/adapters/vercel-ai.d.ts.map +1 -0
  12. package/dist/adapters/vercel-ai.js +228 -0
  13. package/dist/adapters/vercel-ai.js.map +1 -0
  14. package/dist/core/client.d.ts +36 -0
  15. package/dist/core/client.d.ts.map +1 -0
  16. package/dist/core/client.js +188 -0
  17. package/dist/core/client.js.map +1 -0
  18. package/dist/core/index.d.ts +3 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +8 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/registry.d.ts +64 -0
  23. package/dist/core/registry.d.ts.map +1 -0
  24. package/dist/core/registry.js +169 -0
  25. package/dist/core/registry.js.map +1 -0
  26. package/dist/executor/base.d.ts +35 -0
  27. package/dist/executor/base.d.ts.map +1 -0
  28. package/dist/executor/base.js +85 -0
  29. package/dist/executor/base.js.map +1 -0
  30. package/dist/executor/index.d.ts +3 -0
  31. package/dist/executor/index.d.ts.map +1 -0
  32. package/dist/executor/index.js +9 -0
  33. package/dist/executor/index.js.map +1 -0
  34. package/dist/executor/vm.d.ts +18 -0
  35. package/dist/executor/vm.d.ts.map +1 -0
  36. package/dist/executor/vm.js +106 -0
  37. package/dist/executor/vm.js.map +1 -0
  38. package/dist/index.d.ts +6 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +20 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/search/base.d.ts +32 -0
  43. package/dist/search/base.d.ts.map +1 -0
  44. package/dist/search/base.js +28 -0
  45. package/dist/search/base.js.map +1 -0
  46. package/dist/search/bm25.d.ts +16 -0
  47. package/dist/search/bm25.d.ts.map +1 -0
  48. package/dist/search/bm25.js +84 -0
  49. package/dist/search/bm25.js.map +1 -0
  50. package/dist/search/index.d.ts +4 -0
  51. package/dist/search/index.d.ts.map +1 -0
  52. package/dist/search/index.js +10 -0
  53. package/dist/search/index.js.map +1 -0
  54. package/dist/search/regex.d.ts +12 -0
  55. package/dist/search/regex.d.ts.map +1 -0
  56. package/dist/search/regex.js +57 -0
  57. package/dist/search/regex.js.map +1 -0
  58. package/dist/types/index.d.ts +186 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +3 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/package.json +52 -0
  63. package/plan.md +576 -0
  64. package/src/adapters/index.ts +2 -0
  65. package/src/adapters/openai.ts +195 -0
  66. package/src/adapters/vercel-ai.ts +270 -0
  67. package/src/core/client.ts +232 -0
  68. package/src/core/index.ts +2 -0
  69. package/src/core/registry.ts +198 -0
  70. package/src/executor/base.ts +122 -0
  71. package/src/executor/index.ts +2 -0
  72. package/src/executor/vm.ts +87 -0
  73. package/src/index.ts +26 -0
  74. package/src/search/base.ts +63 -0
  75. package/src/search/bm25.ts +64 -0
  76. package/src/search/index.ts +3 -0
  77. package/src/search/regex.ts +66 -0
  78. package/src/types/index.ts +221 -0
  79. package/test-advanced.ts +212 -0
  80. 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,4 @@
1
+ export { SearchStrategy, BaseSearchStrategy } from './base';
2
+ export { RegexSearchStrategy } from './regex';
3
+ export { BM25SearchStrategy } from './bm25';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -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
+ }