ai.matey.wrapper 0.2.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/LICENSE +21 -0
- package/dist/cjs/anthropic-sdk.js +203 -0
- package/dist/cjs/anthropic-sdk.js.map +1 -0
- package/dist/cjs/anymethod.js +167 -0
- package/dist/cjs/anymethod.js.map +1 -0
- package/dist/cjs/chat.js +513 -0
- package/dist/cjs/chat.js.map +1 -0
- package/dist/cjs/chrome-ai-legacy.js +168 -0
- package/dist/cjs/chrome-ai-legacy.js.map +1 -0
- package/dist/cjs/chrome-ai.js +156 -0
- package/dist/cjs/chrome-ai.js.map +1 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/ir-index.js +52 -0
- package/dist/cjs/ir-index.js.map +1 -0
- package/dist/cjs/openai-sdk.js +221 -0
- package/dist/cjs/openai-sdk.js.map +1 -0
- package/dist/cjs/stream-utils.js +21 -0
- package/dist/cjs/stream-utils.js.map +1 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/anthropic-sdk.js +196 -0
- package/dist/esm/anthropic-sdk.js.map +1 -0
- package/dist/esm/anymethod.js +161 -0
- package/dist/esm/anymethod.js.map +1 -0
- package/dist/esm/chat.js +508 -0
- package/dist/esm/chat.js.map +1 -0
- package/dist/esm/chrome-ai-legacy.js +163 -0
- package/dist/esm/chrome-ai-legacy.js.map +1 -0
- package/dist/esm/chrome-ai.js +152 -0
- package/dist/esm/chrome-ai.js.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/ir-index.js +41 -0
- package/dist/esm/ir-index.js.map +1 -0
- package/dist/esm/openai-sdk.js +213 -0
- package/dist/esm/openai-sdk.js.map +1 -0
- package/dist/esm/stream-utils.js +14 -0
- package/dist/esm/stream-utils.js.map +1 -0
- package/dist/esm/types.js +9 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/anthropic-sdk.d.ts +154 -0
- package/dist/types/anthropic-sdk.d.ts.map +1 -0
- package/dist/types/anymethod.d.ts +45 -0
- package/dist/types/anymethod.d.ts.map +1 -0
- package/dist/types/chat.d.ts +144 -0
- package/dist/types/chat.d.ts.map +1 -0
- package/dist/types/chrome-ai-legacy.d.ts +44 -0
- package/dist/types/chrome-ai-legacy.d.ts.map +1 -0
- package/dist/types/chrome-ai.d.ts +38 -0
- package/dist/types/chrome-ai.d.ts.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/ir-index.d.ts +41 -0
- package/dist/types/ir-index.d.ts.map +1 -0
- package/dist/types/openai-sdk.d.ts +183 -0
- package/dist/types/openai-sdk.d.ts.map +1 -0
- package/dist/types/stream-utils.d.ts +9 -0
- package/dist/types/stream-utils.d.ts.map +1 -0
- package/dist/types/types.d.ts +232 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +132 -0
- package/readme.md +92 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI SDK Wrapper
|
|
4
|
+
*
|
|
5
|
+
* Mimics the OpenAI SDK interface using any backend adapter.
|
|
6
|
+
* Allows you to use OpenAI SDK-style code with any provider.
|
|
7
|
+
*
|
|
8
|
+
* Uses the OpenAI Frontend Adapter internally for format conversions.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.OpenAIClient = exports.Chat = exports.Models = exports.ChatCompletions = void 0;
|
|
14
|
+
exports.OpenAI = OpenAI;
|
|
15
|
+
const ai_matey_frontend_1 = require("ai.matey.frontend");
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// OpenAI SDK Wrapper Implementation
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Chat completions interface (mimics OpenAI SDK).
|
|
21
|
+
*/
|
|
22
|
+
class ChatCompletions {
|
|
23
|
+
backend;
|
|
24
|
+
config;
|
|
25
|
+
adapter;
|
|
26
|
+
constructor(backend, config = {}) {
|
|
27
|
+
this.backend = backend;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.adapter = new ai_matey_frontend_1.OpenAIFrontendAdapter();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a chat completion.
|
|
33
|
+
*/
|
|
34
|
+
create(params) {
|
|
35
|
+
if (params.stream) {
|
|
36
|
+
return this.createStream(params);
|
|
37
|
+
}
|
|
38
|
+
return this.createNonStream(params);
|
|
39
|
+
}
|
|
40
|
+
async createNonStream(params) {
|
|
41
|
+
// Convert params to OpenAI request format
|
|
42
|
+
const request = {
|
|
43
|
+
model: params.model,
|
|
44
|
+
messages: params.messages,
|
|
45
|
+
temperature: params.temperature,
|
|
46
|
+
max_tokens: params.max_tokens,
|
|
47
|
+
top_p: params.top_p,
|
|
48
|
+
frequency_penalty: params.frequency_penalty,
|
|
49
|
+
presence_penalty: params.presence_penalty,
|
|
50
|
+
stop: params.stop,
|
|
51
|
+
stream: false,
|
|
52
|
+
user: params.user,
|
|
53
|
+
seed: params.seed,
|
|
54
|
+
};
|
|
55
|
+
// Use frontend adapter to convert to IR
|
|
56
|
+
const irRequest = await this.adapter.toIR(request);
|
|
57
|
+
// Execute via backend
|
|
58
|
+
const irResponse = await this.backend.execute(irRequest);
|
|
59
|
+
// Use frontend adapter to convert back to OpenAI format
|
|
60
|
+
const openaiResponse = await this.adapter.fromIR(irResponse);
|
|
61
|
+
// Return in SDK-style format
|
|
62
|
+
return {
|
|
63
|
+
id: openaiResponse.id,
|
|
64
|
+
object: 'chat.completion',
|
|
65
|
+
created: openaiResponse.created,
|
|
66
|
+
model: openaiResponse.model,
|
|
67
|
+
choices: openaiResponse.choices.map((choice) => ({
|
|
68
|
+
index: choice.index,
|
|
69
|
+
message: choice.message,
|
|
70
|
+
finish_reason: choice.finish_reason,
|
|
71
|
+
})),
|
|
72
|
+
usage: openaiResponse.usage ?? {
|
|
73
|
+
prompt_tokens: 0,
|
|
74
|
+
completion_tokens: 0,
|
|
75
|
+
total_tokens: 0,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async *createStream(params) {
|
|
80
|
+
// Convert params to OpenAI request format
|
|
81
|
+
const request = {
|
|
82
|
+
model: params.model,
|
|
83
|
+
messages: params.messages,
|
|
84
|
+
temperature: params.temperature,
|
|
85
|
+
max_tokens: params.max_tokens,
|
|
86
|
+
top_p: params.top_p,
|
|
87
|
+
frequency_penalty: params.frequency_penalty,
|
|
88
|
+
presence_penalty: params.presence_penalty,
|
|
89
|
+
stop: params.stop,
|
|
90
|
+
stream: true,
|
|
91
|
+
user: params.user,
|
|
92
|
+
seed: params.seed,
|
|
93
|
+
};
|
|
94
|
+
// Use frontend adapter to convert to IR
|
|
95
|
+
let irRequest = await this.adapter.toIR(request);
|
|
96
|
+
// Add stream mode if configured
|
|
97
|
+
if (this.config.streamMode) {
|
|
98
|
+
irRequest = { ...irRequest, streamMode: this.config.streamMode };
|
|
99
|
+
}
|
|
100
|
+
// Execute streaming via backend
|
|
101
|
+
const irStream = this.backend.executeStream(irRequest);
|
|
102
|
+
// Use frontend adapter to convert stream
|
|
103
|
+
for await (const chunk of this.adapter.fromIRStream(irStream)) {
|
|
104
|
+
// Convert to SDK-style chunk
|
|
105
|
+
yield {
|
|
106
|
+
id: chunk.id,
|
|
107
|
+
object: 'chat.completion.chunk',
|
|
108
|
+
created: chunk.created,
|
|
109
|
+
model: chunk.model,
|
|
110
|
+
choices: chunk.choices.map((choice) => ({
|
|
111
|
+
index: choice.index,
|
|
112
|
+
delta: {
|
|
113
|
+
role: choice.delta.role,
|
|
114
|
+
content: choice.delta.content,
|
|
115
|
+
},
|
|
116
|
+
finish_reason: choice.finish_reason,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.ChatCompletions = ChatCompletions;
|
|
123
|
+
/**
|
|
124
|
+
* Models interface (mimics OpenAI SDK).
|
|
125
|
+
*/
|
|
126
|
+
class Models {
|
|
127
|
+
backend;
|
|
128
|
+
constructor(backend) {
|
|
129
|
+
this.backend = backend;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* List available models.
|
|
133
|
+
*/
|
|
134
|
+
async list(options) {
|
|
135
|
+
if (!this.backend.listModels) {
|
|
136
|
+
return { object: 'list', data: [] };
|
|
137
|
+
}
|
|
138
|
+
const result = await this.backend.listModels(options);
|
|
139
|
+
const data = result.models.map((model) => ({
|
|
140
|
+
id: model.id,
|
|
141
|
+
object: 'model',
|
|
142
|
+
created: model.created
|
|
143
|
+
? new Date(model.created).getTime() / 1000
|
|
144
|
+
: Math.floor(result.fetchedAt / 1000),
|
|
145
|
+
owned_by: model.ownedBy || 'unknown',
|
|
146
|
+
}));
|
|
147
|
+
return { object: 'list', data };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Retrieve information about a specific model.
|
|
151
|
+
*/
|
|
152
|
+
async retrieve(modelId) {
|
|
153
|
+
if (!this.backend.listModels) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const result = await this.backend.listModels();
|
|
157
|
+
const model = result.models.find((m) => m.id === modelId);
|
|
158
|
+
if (!model) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
id: model.id,
|
|
163
|
+
object: 'model',
|
|
164
|
+
created: model.created
|
|
165
|
+
? new Date(model.created).getTime() / 1000
|
|
166
|
+
: Math.floor(result.fetchedAt / 1000),
|
|
167
|
+
owned_by: model.ownedBy || 'unknown',
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.Models = Models;
|
|
172
|
+
/**
|
|
173
|
+
* Chat interface (mimics OpenAI SDK).
|
|
174
|
+
*/
|
|
175
|
+
class Chat {
|
|
176
|
+
completions;
|
|
177
|
+
constructor(backend, config = {}) {
|
|
178
|
+
this.completions = new ChatCompletions(backend, config);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.Chat = Chat;
|
|
182
|
+
/**
|
|
183
|
+
* OpenAI SDK-compatible client.
|
|
184
|
+
*/
|
|
185
|
+
class OpenAIClient {
|
|
186
|
+
chat;
|
|
187
|
+
models;
|
|
188
|
+
constructor(backend, config = {}) {
|
|
189
|
+
this.chat = new Chat(backend, config);
|
|
190
|
+
this.models = new Models(backend);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.OpenAIClient = OpenAIClient;
|
|
194
|
+
// ============================================================================
|
|
195
|
+
// Factory Function
|
|
196
|
+
// ============================================================================
|
|
197
|
+
/**
|
|
198
|
+
* Create an OpenAI SDK-compatible client using any backend adapter.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* import { OpenAI } from 'ai.matey.wrapper/openai';
|
|
203
|
+
* import { AnthropicBackendAdapter } from 'ai.matey.backend/anthropic';
|
|
204
|
+
*
|
|
205
|
+
* const backend = new AnthropicBackendAdapter({ apiKey: 'sk-ant-...' });
|
|
206
|
+
* const client = OpenAI(backend);
|
|
207
|
+
*
|
|
208
|
+
* const completion = await client.chat.completions.create({
|
|
209
|
+
* model: 'claude-3-5-sonnet',
|
|
210
|
+
* messages: [
|
|
211
|
+
* { role: 'user', content: 'Hello!' }
|
|
212
|
+
* ],
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* console.log(completion.choices[0].message.content);
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
function OpenAI(backend, config) {
|
|
219
|
+
return new OpenAIClient(backend, config);
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=openai-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-sdk.js","sourceRoot":"","sources":["../../src/openai-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stream Utilities
|
|
4
|
+
*
|
|
5
|
+
* Re-exports stream utilities from ai.matey.utils.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.streamToText = exports.teeStream = exports.throttleStream = exports.streamToLines = exports.processStream = exports.collectStream = void 0;
|
|
11
|
+
// Re-export stream utilities from ai.matey.utils
|
|
12
|
+
var ai_matey_utils_1 = require("ai.matey.utils");
|
|
13
|
+
// High-level utilities
|
|
14
|
+
Object.defineProperty(exports, "collectStream", { enumerable: true, get: function () { return ai_matey_utils_1.collectStreamFull; } });
|
|
15
|
+
Object.defineProperty(exports, "processStream", { enumerable: true, get: function () { return ai_matey_utils_1.processStream; } });
|
|
16
|
+
Object.defineProperty(exports, "streamToLines", { enumerable: true, get: function () { return ai_matey_utils_1.streamToLines; } });
|
|
17
|
+
Object.defineProperty(exports, "throttleStream", { enumerable: true, get: function () { return ai_matey_utils_1.throttleStream; } });
|
|
18
|
+
Object.defineProperty(exports, "teeStream", { enumerable: true, get: function () { return ai_matey_utils_1.teeStream; } });
|
|
19
|
+
// Basic utilities (streamToTextIterator provides generator behavior with error handling)
|
|
20
|
+
Object.defineProperty(exports, "streamToText", { enumerable: true, get: function () { return ai_matey_utils_1.streamToTextIterator; } });
|
|
21
|
+
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/stream-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,iDAAiD;AACjD,iDAcwB;AAbtB,uBAAuB;AACvB,+GAAA,iBAAiB,OAAiB;AAClC,+GAAA,aAAa,OAAA;AACb,+GAAA,aAAa,OAAA;AACb,gHAAA,cAAc,OAAA;AACd,2GAAA,SAAS,OAAA;AAET,yFAAyF;AACzF,8GAAA,oBAAoB,OAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic SDK Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Mimics the Anthropic SDK interface using any backend adapter.
|
|
5
|
+
* Allows you to use Anthropic SDK-style code with any provider.
|
|
6
|
+
*
|
|
7
|
+
* Uses the Anthropic Frontend Adapter internally for format conversions.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { AnthropicFrontendAdapter, } from 'ai.matey.frontend';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Messages Implementation
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Messages interface (mimics Anthropic SDK).
|
|
17
|
+
*/
|
|
18
|
+
export class Messages {
|
|
19
|
+
backend;
|
|
20
|
+
config;
|
|
21
|
+
adapter;
|
|
22
|
+
constructor(backend, config = {}) {
|
|
23
|
+
this.backend = backend;
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.adapter = new AnthropicFrontendAdapter();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a message.
|
|
29
|
+
*/
|
|
30
|
+
create(params) {
|
|
31
|
+
if (params.stream) {
|
|
32
|
+
return this.createStream(params);
|
|
33
|
+
}
|
|
34
|
+
return this.createNonStream(params);
|
|
35
|
+
}
|
|
36
|
+
async createNonStream(params) {
|
|
37
|
+
// Convert params to Anthropic request format
|
|
38
|
+
const request = {
|
|
39
|
+
model: params.model,
|
|
40
|
+
messages: params.messages.map((msg) => ({
|
|
41
|
+
role: msg.role,
|
|
42
|
+
content: msg.content,
|
|
43
|
+
})),
|
|
44
|
+
max_tokens: params.max_tokens,
|
|
45
|
+
system: params.system,
|
|
46
|
+
temperature: params.temperature,
|
|
47
|
+
top_p: params.top_p,
|
|
48
|
+
top_k: params.top_k,
|
|
49
|
+
stop_sequences: params.stop_sequences,
|
|
50
|
+
stream: false,
|
|
51
|
+
metadata: params.metadata,
|
|
52
|
+
};
|
|
53
|
+
// Use frontend adapter to convert to IR
|
|
54
|
+
const irRequest = await this.adapter.toIR(request);
|
|
55
|
+
// Execute via backend
|
|
56
|
+
const irResponse = await this.backend.execute(irRequest);
|
|
57
|
+
// Use frontend adapter to convert back to Anthropic format
|
|
58
|
+
const anthropicResponse = await this.adapter.fromIR(irResponse);
|
|
59
|
+
// Return in SDK-style format
|
|
60
|
+
return {
|
|
61
|
+
id: anthropicResponse.id,
|
|
62
|
+
type: 'message',
|
|
63
|
+
role: 'assistant',
|
|
64
|
+
content: anthropicResponse.content,
|
|
65
|
+
model: anthropicResponse.model,
|
|
66
|
+
stop_reason: anthropicResponse.stop_reason,
|
|
67
|
+
stop_sequence: anthropicResponse.stop_sequence ?? null,
|
|
68
|
+
usage: anthropicResponse.usage,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async *createStream(params) {
|
|
72
|
+
// Convert params to Anthropic request format
|
|
73
|
+
const request = {
|
|
74
|
+
model: params.model,
|
|
75
|
+
messages: params.messages.map((msg) => ({
|
|
76
|
+
role: msg.role,
|
|
77
|
+
content: msg.content,
|
|
78
|
+
})),
|
|
79
|
+
max_tokens: params.max_tokens,
|
|
80
|
+
system: params.system,
|
|
81
|
+
temperature: params.temperature,
|
|
82
|
+
top_p: params.top_p,
|
|
83
|
+
top_k: params.top_k,
|
|
84
|
+
stop_sequences: params.stop_sequences,
|
|
85
|
+
stream: true,
|
|
86
|
+
metadata: params.metadata,
|
|
87
|
+
};
|
|
88
|
+
// Use frontend adapter to convert to IR
|
|
89
|
+
let irRequest = await this.adapter.toIR(request);
|
|
90
|
+
// Add stream mode if configured
|
|
91
|
+
if (this.config.streamMode) {
|
|
92
|
+
irRequest = { ...irRequest, streamMode: this.config.streamMode };
|
|
93
|
+
}
|
|
94
|
+
// Execute streaming via backend
|
|
95
|
+
const irStream = this.backend.executeStream(irRequest);
|
|
96
|
+
// Use frontend adapter to convert stream
|
|
97
|
+
for await (const event of this.adapter.fromIRStream(irStream)) {
|
|
98
|
+
yield event;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// Models Implementation
|
|
104
|
+
// ============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Models interface (mimics Anthropic SDK).
|
|
107
|
+
*/
|
|
108
|
+
export class Models {
|
|
109
|
+
backend;
|
|
110
|
+
constructor(backend) {
|
|
111
|
+
this.backend = backend;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* List available models.
|
|
115
|
+
*/
|
|
116
|
+
async list(options) {
|
|
117
|
+
if (!this.backend.listModels) {
|
|
118
|
+
return { data: [], has_more: false, first_id: null, last_id: null };
|
|
119
|
+
}
|
|
120
|
+
const result = await this.backend.listModels(options);
|
|
121
|
+
const data = result.models.map((model) => ({
|
|
122
|
+
id: model.id,
|
|
123
|
+
display_name: model.name,
|
|
124
|
+
created_at: model.created || new Date(result.fetchedAt).toISOString(),
|
|
125
|
+
}));
|
|
126
|
+
const firstItem = data[0];
|
|
127
|
+
const lastItem = data[data.length - 1];
|
|
128
|
+
return {
|
|
129
|
+
data,
|
|
130
|
+
has_more: false,
|
|
131
|
+
first_id: firstItem?.id ?? null,
|
|
132
|
+
last_id: lastItem?.id ?? null,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Retrieve information about a specific model.
|
|
137
|
+
*/
|
|
138
|
+
async retrieve(modelId) {
|
|
139
|
+
if (!this.backend.listModels) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const result = await this.backend.listModels();
|
|
143
|
+
const model = result.models.find((m) => m.id === modelId);
|
|
144
|
+
if (!model) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
id: model.id,
|
|
149
|
+
display_name: model.name,
|
|
150
|
+
created_at: model.created || new Date(result.fetchedAt).toISOString(),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Client
|
|
156
|
+
// ============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* Anthropic SDK-compatible client.
|
|
159
|
+
*/
|
|
160
|
+
export class AnthropicClient {
|
|
161
|
+
messages;
|
|
162
|
+
models;
|
|
163
|
+
constructor(backend, config = {}) {
|
|
164
|
+
this.messages = new Messages(backend, config);
|
|
165
|
+
this.models = new Models(backend);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ============================================================================
|
|
169
|
+
// Factory Function
|
|
170
|
+
// ============================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Create an Anthropic SDK-compatible client using any backend adapter.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* import { Anthropic } from 'ai.matey.wrapper/anthropic';
|
|
177
|
+
* import { OpenAIBackendAdapter } from 'ai.matey.backend/openai';
|
|
178
|
+
*
|
|
179
|
+
* const backend = new OpenAIBackendAdapter({ apiKey: 'sk-...' });
|
|
180
|
+
* const client = Anthropic(backend);
|
|
181
|
+
*
|
|
182
|
+
* const message = await client.messages.create({
|
|
183
|
+
* model: 'gpt-4',
|
|
184
|
+
* max_tokens: 1024,
|
|
185
|
+
* messages: [
|
|
186
|
+
* { role: 'user', content: 'Hello!' }
|
|
187
|
+
* ],
|
|
188
|
+
* });
|
|
189
|
+
*
|
|
190
|
+
* console.log(message.content[0].text);
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
export function Anthropic(backend, config) {
|
|
194
|
+
return new AnthropicClient(backend, config);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=anthropic-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-sdk.js","sourceRoot":"","sources":["../../src/anthropic-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anymethod Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Natural language method interface using Proxy pattern.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { trimHistory } from 'ai.matey.utils';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Utility Functions
|
|
11
|
+
// ============================================================================
|
|
12
|
+
export function formatMethodPrompt(methodName, args) {
|
|
13
|
+
const naturalName = methodName
|
|
14
|
+
.replace(/([A-Z])/g, ' $1')
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.trim();
|
|
17
|
+
const argsString = args.map((arg) => String(arg)).join(' ');
|
|
18
|
+
if (argsString) {
|
|
19
|
+
return `${naturalName}: ${argsString}`;
|
|
20
|
+
}
|
|
21
|
+
return naturalName;
|
|
22
|
+
}
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Anymethod Implementation
|
|
25
|
+
// ============================================================================
|
|
26
|
+
export function createAnymethod(backend, config = {}) {
|
|
27
|
+
const { model, temperature, topK, topP, maxTokens = 1024, maxHistorySize = 0, initialPrompts = [], autoParseJSON = true, methodPromptFormatter = formatMethodPrompt, } = config;
|
|
28
|
+
let conversationHistory = initialPrompts.map((p) => ({
|
|
29
|
+
role: p.role,
|
|
30
|
+
content: p.content,
|
|
31
|
+
}));
|
|
32
|
+
let _tokensSoFar = 0;
|
|
33
|
+
async function executePrompt(input) {
|
|
34
|
+
const userMessage = { role: 'user', content: input };
|
|
35
|
+
conversationHistory.push(userMessage);
|
|
36
|
+
const request = {
|
|
37
|
+
messages: [...conversationHistory],
|
|
38
|
+
parameters: { model, temperature, topK, topP, maxTokens },
|
|
39
|
+
stream: false,
|
|
40
|
+
metadata: {
|
|
41
|
+
requestId: crypto.randomUUID(),
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
provenance: { frontend: 'anymethod-wrapper' },
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const response = await backend.execute(request);
|
|
47
|
+
conversationHistory.push(response.message);
|
|
48
|
+
if (maxHistorySize !== undefined && maxHistorySize !== -1) {
|
|
49
|
+
conversationHistory = trimHistory(conversationHistory, maxHistorySize, 'smart');
|
|
50
|
+
}
|
|
51
|
+
if (response.usage) {
|
|
52
|
+
_tokensSoFar = response.usage.totalTokens;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
_tokensSoFar += Math.ceil(input.length / 4);
|
|
56
|
+
const responseText = typeof response.message.content === 'string'
|
|
57
|
+
? response.message.content
|
|
58
|
+
: response.message.content.map((c) => (c.type === 'text' ? c.text : '')).join('');
|
|
59
|
+
_tokensSoFar += Math.ceil(responseText.length / 4);
|
|
60
|
+
}
|
|
61
|
+
return typeof response.message.content === 'string'
|
|
62
|
+
? response.message.content
|
|
63
|
+
: response.message.content.map((c) => (c.type === 'text' ? c.text : '')).join('');
|
|
64
|
+
}
|
|
65
|
+
async function* executeStreamingPrompt(input) {
|
|
66
|
+
const userMessage = { role: 'user', content: input };
|
|
67
|
+
conversationHistory.push(userMessage);
|
|
68
|
+
const request = {
|
|
69
|
+
messages: [...conversationHistory],
|
|
70
|
+
parameters: { model, temperature, topK, topP, maxTokens },
|
|
71
|
+
stream: true,
|
|
72
|
+
metadata: {
|
|
73
|
+
requestId: crypto.randomUUID(),
|
|
74
|
+
timestamp: Date.now(),
|
|
75
|
+
provenance: { frontend: 'anymethod-wrapper' },
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
let fullContent = '';
|
|
79
|
+
const stream = backend.executeStream(request);
|
|
80
|
+
for await (const chunk of stream) {
|
|
81
|
+
if (chunk.type === 'content') {
|
|
82
|
+
fullContent += chunk.delta;
|
|
83
|
+
yield chunk.delta;
|
|
84
|
+
}
|
|
85
|
+
else if (chunk.type === 'done') {
|
|
86
|
+
if (chunk.message) {
|
|
87
|
+
conversationHistory.push(chunk.message);
|
|
88
|
+
}
|
|
89
|
+
if (maxHistorySize !== undefined && maxHistorySize !== -1) {
|
|
90
|
+
conversationHistory = trimHistory(conversationHistory, maxHistorySize, 'smart');
|
|
91
|
+
}
|
|
92
|
+
if (chunk.usage) {
|
|
93
|
+
_tokensSoFar = chunk.usage.totalTokens;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
_tokensSoFar += Math.ceil(input.length / 4);
|
|
97
|
+
_tokensSoFar += Math.ceil(fullContent.length / 4);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (chunk.type === 'error') {
|
|
101
|
+
throw new Error(chunk.error.message);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const asyncProxy = new Proxy({}, {
|
|
106
|
+
get(_target, prop) {
|
|
107
|
+
return async (...args) => {
|
|
108
|
+
const prompt = methodPromptFormatter(prop, args);
|
|
109
|
+
const result = await executePrompt(prompt);
|
|
110
|
+
if (autoParseJSON) {
|
|
111
|
+
try {
|
|
112
|
+
return JSON.parse(result);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
const streamProxy = new Proxy({}, {
|
|
123
|
+
get(_target, prop) {
|
|
124
|
+
return async function* (...args) {
|
|
125
|
+
const prompt = methodPromptFormatter(prop, args);
|
|
126
|
+
yield* executeStreamingPrompt(prompt);
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
const anymethod = {
|
|
131
|
+
$: asyncProxy,
|
|
132
|
+
$$: streamProxy,
|
|
133
|
+
prompt: (input) => executePrompt(input),
|
|
134
|
+
promptStreaming: (input) => executeStreamingPrompt(input),
|
|
135
|
+
getHistory: () => [...conversationHistory],
|
|
136
|
+
clearHistory: () => {
|
|
137
|
+
conversationHistory = initialPrompts.map((p) => ({ role: p.role, content: p.content }));
|
|
138
|
+
_tokensSoFar = 0;
|
|
139
|
+
},
|
|
140
|
+
setHistory: (history) => {
|
|
141
|
+
conversationHistory = [...history];
|
|
142
|
+
},
|
|
143
|
+
get tokensSoFar() {
|
|
144
|
+
return _tokensSoFar;
|
|
145
|
+
},
|
|
146
|
+
get maxTokens() {
|
|
147
|
+
return maxTokens;
|
|
148
|
+
},
|
|
149
|
+
get tokensLeft() {
|
|
150
|
+
return Math.max(0, maxTokens - _tokensSoFar);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
return anymethod;
|
|
154
|
+
}
|
|
155
|
+
export function createStatelessAnymethod(backend, config = {}) {
|
|
156
|
+
return createAnymethod(backend, { ...config, maxHistorySize: 0 });
|
|
157
|
+
}
|
|
158
|
+
export function createConversationalAnymethod(backend, maxHistorySize = 10, config = {}) {
|
|
159
|
+
return createAnymethod(backend, { ...config, maxHistorySize });
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=anymethod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anymethod.js","sourceRoot":"","sources":["../../src/anymethod.ts"],"names":[],"mappings":"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"}
|