llm-advanced-tools 0.1.2 → 0.1.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/README.md +83 -70
- package/dist/adapters/index.d.ts +1 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/vercel-ai.d.ts +15 -2
- package/dist/adapters/vercel-ai.d.ts.map +1 -1
- package/dist/adapters/vercel-ai.js +76 -42
- package/dist/adapters/vercel-ai.js.map +1 -1
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +5 -2
- package/dist/core/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/package.json +28 -11
- package/dist/adapters/openai.d.ts +0 -38
- package/dist/adapters/openai.d.ts.map +0 -1
- package/dist/adapters/openai.js +0 -170
- package/dist/adapters/openai.js.map +0 -1
- package/plan.md +0 -576
- package/src/adapters/index.ts +0 -2
- package/src/adapters/openai.ts +0 -195
- package/src/adapters/vercel-ai.ts +0 -281
- package/src/core/client.ts +0 -232
- package/src/core/index.ts +0 -2
- package/src/core/registry.ts +0 -198
- package/src/executor/base.ts +0 -122
- package/src/executor/index.ts +0 -2
- package/src/executor/vm.ts +0 -87
- package/src/index.ts +0 -26
- package/src/search/base.ts +0 -63
- package/src/search/bm25.ts +0 -64
- package/src/search/index.ts +0 -3
- package/src/search/regex.ts +0 -66
- package/src/types/index.ts +0 -221
- package/test-advanced.ts +0 -212
- package/test-simple.ts +0 -91
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-advanced-tools",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Provider-agnostic advanced tool use library for LLMs",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"test:unit": "jest --testPathPattern=tests/unit",
|
|
14
14
|
"test:e2e": "jest --testPathPattern=tests/e2e",
|
|
15
15
|
"lint": "eslint src --ext .ts",
|
|
16
|
-
"format": "prettier --write \"src/**/*.ts\""
|
|
16
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
17
18
|
},
|
|
18
19
|
"keywords": [
|
|
19
20
|
"llm",
|
|
@@ -23,19 +24,35 @@
|
|
|
23
24
|
"google",
|
|
24
25
|
"gemini",
|
|
25
26
|
"function-calling",
|
|
26
|
-
"agent"
|
|
27
|
+
"agent",
|
|
28
|
+
"vercel-ai",
|
|
29
|
+
"ai-sdk",
|
|
30
|
+
"gpt-5",
|
|
31
|
+
"claude"
|
|
27
32
|
],
|
|
28
|
-
"author": "",
|
|
33
|
+
"author": "Het Patel <hetkp8044@gmail.com>",
|
|
29
34
|
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/yourusername/llm-advanced-tools.git"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/yourusername/llm-advanced-tools/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/yourusername/llm-advanced-tools#readme",
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"README.md",
|
|
46
|
+
"LICENSE"
|
|
47
|
+
],
|
|
30
48
|
"dependencies": {
|
|
31
49
|
"natural": "^6.0.0",
|
|
32
|
-
"openai": "^4.0.0",
|
|
33
50
|
"zod": "^3.22.0"
|
|
34
51
|
},
|
|
35
52
|
"peerDependencies": {
|
|
36
|
-
"@ai-sdk/anthropic": "^
|
|
37
|
-
"@ai-sdk/openai": "^
|
|
38
|
-
"ai": "^
|
|
53
|
+
"@ai-sdk/anthropic": "^3.0.0",
|
|
54
|
+
"@ai-sdk/openai": "^3.0.0",
|
|
55
|
+
"ai": "^5.0.0 || ^6.0.0"
|
|
39
56
|
},
|
|
40
57
|
"peerDependenciesMeta": {
|
|
41
58
|
"ai": {
|
|
@@ -49,15 +66,15 @@
|
|
|
49
66
|
}
|
|
50
67
|
},
|
|
51
68
|
"devDependencies": {
|
|
52
|
-
"@ai-sdk/anthropic": "^
|
|
53
|
-
"@ai-sdk/openai": "^
|
|
69
|
+
"@ai-sdk/anthropic": "^3.0.0",
|
|
70
|
+
"@ai-sdk/openai": "^3.0.0",
|
|
54
71
|
"@anthropic-ai/sdk": "^0.27.0",
|
|
55
72
|
"@types/jest": "^29.0.0",
|
|
56
73
|
"@types/natural": "^5.1.0",
|
|
57
74
|
"@types/node": "^20.0.0",
|
|
58
75
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
59
76
|
"@typescript-eslint/parser": "^6.0.0",
|
|
60
|
-
"ai": "^
|
|
77
|
+
"ai": "^6.0.0",
|
|
61
78
|
"eslint": "^8.0.0",
|
|
62
79
|
"jest": "^29.0.0",
|
|
63
80
|
"prettier": "^3.0.0",
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import OpenAI from 'openai';
|
|
2
|
-
import { ProviderAdapter, ProviderCapabilities, ToolDefinition, ChatRequest, ChatResponse, ToolCall, ToolResult } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* OpenAI provider adapter
|
|
5
|
-
* Emulates advanced tool use features for OpenAI's API
|
|
6
|
-
*/
|
|
7
|
-
export declare class OpenAIAdapter implements ProviderAdapter {
|
|
8
|
-
readonly name = "openai";
|
|
9
|
-
readonly capabilities: ProviderCapabilities;
|
|
10
|
-
private client;
|
|
11
|
-
private model;
|
|
12
|
-
constructor(apiKey: string, model?: string);
|
|
13
|
-
/**
|
|
14
|
-
* Format a tool definition for OpenAI's function calling format
|
|
15
|
-
*/
|
|
16
|
-
formatTool(tool: ToolDefinition): Record<string, any>;
|
|
17
|
-
/**
|
|
18
|
-
* Convert our Message format to OpenAI's format
|
|
19
|
-
*/
|
|
20
|
-
private convertMessages;
|
|
21
|
-
/**
|
|
22
|
-
* Create a chat completion
|
|
23
|
-
*/
|
|
24
|
-
chat(request: ChatRequest): Promise<ChatResponse>;
|
|
25
|
-
/**
|
|
26
|
-
* Parse tool calls from OpenAI response
|
|
27
|
-
*/
|
|
28
|
-
parseToolCalls(toolCalls: OpenAI.ChatCompletionMessageToolCall[]): ToolCall[];
|
|
29
|
-
/**
|
|
30
|
-
* Format tool results for OpenAI
|
|
31
|
-
*/
|
|
32
|
-
formatToolResults(results: ToolResult[]): OpenAI.ChatCompletionMessageParam[];
|
|
33
|
-
/**
|
|
34
|
-
* Map OpenAI finish reason to our format
|
|
35
|
-
*/
|
|
36
|
-
private mapFinishReason;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EAEX,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAOzC;IAEF,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAwB;IAKzD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA6BrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0CvD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,6BAA6B,EAAE,GAAG,QAAQ,EAAE;IAQ7E;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,0BAA0B,EAAE;IAU7E;;OAEG;IACH,OAAO,CAAC,eAAe;CAcxB"}
|
package/dist/adapters/openai.js
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OpenAIAdapter = void 0;
|
|
7
|
-
const openai_1 = __importDefault(require("openai"));
|
|
8
|
-
/**
|
|
9
|
-
* OpenAI provider adapter
|
|
10
|
-
* Emulates advanced tool use features for OpenAI's API
|
|
11
|
-
*/
|
|
12
|
-
class OpenAIAdapter {
|
|
13
|
-
constructor(apiKey, model = 'gpt-4-turbo-preview') {
|
|
14
|
-
this.name = 'openai';
|
|
15
|
-
this.capabilities = {
|
|
16
|
-
supportsNativeToolSearch: false,
|
|
17
|
-
supportsNativeCodeExecution: false,
|
|
18
|
-
supportsNativeExamples: false,
|
|
19
|
-
supportsStreaming: true,
|
|
20
|
-
supportsParallelToolCalls: true,
|
|
21
|
-
maxTokens: 128000 // GPT-4 Turbo
|
|
22
|
-
};
|
|
23
|
-
this.client = new openai_1.default({ apiKey });
|
|
24
|
-
this.model = model;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Format a tool definition for OpenAI's function calling format
|
|
28
|
-
*/
|
|
29
|
-
formatTool(tool) {
|
|
30
|
-
// Extract schema from Zod or use as-is
|
|
31
|
-
let schema = tool.inputSchema;
|
|
32
|
-
if (typeof schema === 'object' && 'parse' in schema) {
|
|
33
|
-
// It's a Zod schema - we'd need to convert it
|
|
34
|
-
// For now, assume it's already JSON schema
|
|
35
|
-
schema = tool.inputSchema;
|
|
36
|
-
}
|
|
37
|
-
// Prepare description with examples if available
|
|
38
|
-
let description = tool.description;
|
|
39
|
-
if (tool.inputExamples && tool.inputExamples.length > 0) {
|
|
40
|
-
description += '\n\nExamples:';
|
|
41
|
-
tool.inputExamples.forEach((example, i) => {
|
|
42
|
-
description += `\n${i + 1}. ${JSON.stringify(example)}`;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
type: 'function',
|
|
47
|
-
function: {
|
|
48
|
-
name: tool.name,
|
|
49
|
-
description,
|
|
50
|
-
parameters: schema
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Convert our Message format to OpenAI's format
|
|
56
|
-
*/
|
|
57
|
-
convertMessages(messages) {
|
|
58
|
-
return messages.map(msg => {
|
|
59
|
-
if (msg.role === 'tool') {
|
|
60
|
-
// Tool result message
|
|
61
|
-
const toolResults = msg.toolResults || [];
|
|
62
|
-
return toolResults.map(result => ({
|
|
63
|
-
role: 'tool',
|
|
64
|
-
tool_call_id: result.toolCallId,
|
|
65
|
-
content: result.error
|
|
66
|
-
? `Error: ${result.error.message}`
|
|
67
|
-
: JSON.stringify(result.data)
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
if (msg.toolCalls && msg.toolCalls.length > 0) {
|
|
71
|
-
// Assistant message with tool calls
|
|
72
|
-
return {
|
|
73
|
-
role: 'assistant',
|
|
74
|
-
content: typeof msg.content === 'string' ? msg.content : null,
|
|
75
|
-
tool_calls: msg.toolCalls.map(tc => ({
|
|
76
|
-
id: tc.id,
|
|
77
|
-
type: 'function',
|
|
78
|
-
function: {
|
|
79
|
-
name: tc.name,
|
|
80
|
-
arguments: JSON.stringify(tc.input)
|
|
81
|
-
}
|
|
82
|
-
}))
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
// Regular message
|
|
86
|
-
return {
|
|
87
|
-
role: msg.role,
|
|
88
|
-
content: typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content)
|
|
89
|
-
};
|
|
90
|
-
}).flat();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Create a chat completion
|
|
94
|
-
*/
|
|
95
|
-
async chat(request) {
|
|
96
|
-
const messages = this.convertMessages(request.messages);
|
|
97
|
-
const tools = request.tools
|
|
98
|
-
?.filter(tool => !tool.deferLoading) // Only send loaded tools
|
|
99
|
-
?.map(tool => this.formatTool(tool));
|
|
100
|
-
const completion = await this.client.chat.completions.create({
|
|
101
|
-
model: this.model,
|
|
102
|
-
messages,
|
|
103
|
-
tools: tools && tools.length > 0 ? tools : undefined,
|
|
104
|
-
max_tokens: request.maxTokens,
|
|
105
|
-
temperature: request.temperature,
|
|
106
|
-
stream: false // Streaming not yet supported
|
|
107
|
-
});
|
|
108
|
-
const choice = completion.choices[0];
|
|
109
|
-
const message = choice.message;
|
|
110
|
-
// Parse tool calls if any
|
|
111
|
-
const toolCalls = message.tool_calls
|
|
112
|
-
? this.parseToolCalls(message.tool_calls)
|
|
113
|
-
: [];
|
|
114
|
-
return {
|
|
115
|
-
message: {
|
|
116
|
-
role: 'assistant',
|
|
117
|
-
content: message.content || '',
|
|
118
|
-
toolCalls
|
|
119
|
-
},
|
|
120
|
-
usage: completion.usage
|
|
121
|
-
? {
|
|
122
|
-
inputTokens: completion.usage.prompt_tokens,
|
|
123
|
-
outputTokens: completion.usage.completion_tokens,
|
|
124
|
-
totalTokens: completion.usage.total_tokens
|
|
125
|
-
}
|
|
126
|
-
: undefined,
|
|
127
|
-
stopReason: this.mapFinishReason(choice.finish_reason),
|
|
128
|
-
toolCalls
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Parse tool calls from OpenAI response
|
|
133
|
-
*/
|
|
134
|
-
parseToolCalls(toolCalls) {
|
|
135
|
-
return toolCalls.map(tc => ({
|
|
136
|
-
id: tc.id,
|
|
137
|
-
name: tc.function.name,
|
|
138
|
-
input: JSON.parse(tc.function.arguments)
|
|
139
|
-
}));
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Format tool results for OpenAI
|
|
143
|
-
*/
|
|
144
|
-
formatToolResults(results) {
|
|
145
|
-
return results.map(result => ({
|
|
146
|
-
role: 'tool',
|
|
147
|
-
tool_call_id: result.toolCallId,
|
|
148
|
-
content: result.error
|
|
149
|
-
? `Error: ${result.error.message}`
|
|
150
|
-
: JSON.stringify(result.data)
|
|
151
|
-
}));
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Map OpenAI finish reason to our format
|
|
155
|
-
*/
|
|
156
|
-
mapFinishReason(reason) {
|
|
157
|
-
switch (reason) {
|
|
158
|
-
case 'stop':
|
|
159
|
-
return 'end_turn';
|
|
160
|
-
case 'length':
|
|
161
|
-
return 'max_tokens';
|
|
162
|
-
case 'tool_calls':
|
|
163
|
-
return 'tool_use';
|
|
164
|
-
default:
|
|
165
|
-
return undefined;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
exports.OpenAIAdapter = OpenAIAdapter;
|
|
170
|
-
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
|