llm-proxy 1.0.0 → 1.0.2
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/dist/clients/AwsBedrockAnthropicClient.d.ts +0 -0
- package/{src/clients/AwsBedrockAnthropicClient.ts → dist/clients/AwsBedrockAnthropicClient.js} +2 -5
- package/dist/clients/AwsBedrockAnthropicClient.js.map +1 -0
- package/dist/clients/OpenAIClient.d.ts +0 -0
- package/{src/clients/OpenAIClient.ts → dist/clients/OpenAIClient.js} +2 -9
- package/dist/clients/OpenAIClient.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/InputFormatAdapter.d.ts +4 -0
- package/dist/middleware/InputFormatAdapter.js +40 -0
- package/dist/middleware/InputFormatAdapter.js.map +1 -0
- package/dist/middleware/OutputFormatAdapter.d.ts +7 -0
- package/dist/middleware/OutputFormatAdapter.js +67 -0
- package/dist/middleware/OutputFormatAdapter.js.map +1 -0
- package/dist/middleware/ProviderFinder.d.ts +4 -0
- package/dist/middleware/ProviderFinder.js +19 -0
- package/dist/middleware/ProviderFinder.js.map +1 -0
- package/dist/services/AwsBedrockAnthropicService.d.ts +8 -0
- package/dist/services/AwsBedrockAnthropicService.js +110 -0
- package/dist/services/AwsBedrockAnthropicService.js.map +1 -0
- package/dist/services/ClientService.d.ts +5 -0
- package/dist/services/ClientService.js +3 -0
- package/dist/services/ClientService.js.map +1 -0
- package/dist/services/OpenAIService.d.ts +11 -0
- package/dist/services/OpenAIService.js +104 -0
- package/dist/services/OpenAIService.js.map +1 -0
- package/dist/types/index.d.ts +194 -0
- package/dist/types/index.js +50 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +9 -3
- package/docs/directoryStructure.png +0 -0
- package/docs/plan.excalidraw +0 -1758
- package/docs/plan.png +0 -0
- package/jest.config.js +0 -10
- package/src/index.ts +0 -145
- package/src/middleware/InputFormatAdapter.ts +0 -51
- package/src/middleware/OutputFormatAdapter.ts +0 -83
- package/src/middleware/ProviderFinder.ts +0 -23
- package/src/services/AwsBedrockAnthropicService.ts +0 -111
- package/src/services/ClientService.ts +0 -29
- package/src/services/OpenAIService.ts +0 -68
- package/src/test/AwsBedrockAnthropicClient.test.ts +0 -98
- package/src/test/AwsBedrockAnthropicStreamClient.test.ts +0 -81
- package/src/test/OpenAIClient.test.ts +0 -58
- package/src/types/index.ts +0 -234
- package/tsconfig.json +0 -110
|
File without changes
|
package/{src/clients/AwsBedrockAnthropicClient.ts → dist/clients/AwsBedrockAnthropicClient.js}
RENAMED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// import { AwsBedrockAnthropicService } from "../services/AwsBedrockAnthropicService";
|
|
2
3
|
// import { BedrockAnthropicParsedChunk, Messages, SupportedLLMs } from "../types";
|
|
3
|
-
|
|
4
4
|
// export class AwsBedrockAnthropicChatClient {
|
|
5
5
|
// private client: AwsBedrockAnthropicService;
|
|
6
|
-
|
|
7
6
|
// constructor() {
|
|
8
7
|
// this.client = new AwsBedrockAnthropicService();
|
|
9
8
|
// }
|
|
10
|
-
|
|
11
9
|
// async sendMessage(
|
|
12
10
|
// messages: Messages,
|
|
13
11
|
// model: SupportedLLMs,
|
|
@@ -27,7 +25,6 @@
|
|
|
27
25
|
// console.log("Response:", response);
|
|
28
26
|
// return response;
|
|
29
27
|
// }
|
|
30
|
-
|
|
31
28
|
// async *sendMessageStream(
|
|
32
29
|
// messages: Messages,
|
|
33
30
|
// model: SupportedLLMs,
|
|
@@ -45,7 +42,6 @@
|
|
|
45
42
|
// tools,
|
|
46
43
|
// true
|
|
47
44
|
// );
|
|
48
|
-
|
|
49
45
|
// for await (const chunk of stream) {
|
|
50
46
|
// const content = chunk.delta?.text;
|
|
51
47
|
// if (content) {
|
|
@@ -54,3 +50,4 @@
|
|
|
54
50
|
// }
|
|
55
51
|
// }
|
|
56
52
|
// }
|
|
53
|
+
//# sourceMappingURL=AwsBedrockAnthropicClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsBedrockAnthropicClient.js","sourceRoot":"","sources":["../../src/clients/AwsBedrockAnthropicClient.ts"],"names":[],"mappings":";AAAA,uFAAuF;AACvF,mFAAmF;AAEnF,+CAA+C;AAC/C,gDAAgD;AAEhD,oBAAoB;AACpB,sDAAsD;AACtD,MAAM;AAEN,uBAAuB;AACvB,0BAA0B;AAC1B,4BAA4B;AAC5B,0BAA0B;AAC1B,4BAA4B;AAC5B,6BAA6B;AAC7B,kBAAkB;AAClB,QAAQ;AACR,6DAA6D;AAC7D,kBAAkB;AAClB,eAAe;AACf,mBAAmB;AACnB,qBAAqB;AACrB,sBAAsB;AACtB,cAAc;AACd,SAAS;AACT,0CAA0C;AAC1C,uBAAuB;AACvB,MAAM;AAEN,8BAA8B;AAC9B,0BAA0B;AAC1B,4BAA4B;AAC5B,0BAA0B;AAC1B,4BAA4B;AAC5B,6BAA6B;AAC7B,kBAAkB;AAClB,+CAA+C;AAC/C,2DAA2D;AAC3D,kBAAkB;AAClB,eAAe;AACf,mBAAmB;AACnB,qBAAqB;AACrB,sBAAsB;AACtB,eAAe;AACf,aAAa;AACb,SAAS;AAET,0CAA0C;AAC1C,2CAA2C;AAC3C,uBAAuB;AACvB,yBAAyB;AACzB,UAAU;AACV,QAAQ;AACR,MAAM;AACN,IAAI"}
|
|
File without changes
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// import { OpenAIService } from "../services/OpenAIService";
|
|
2
3
|
// import { OpenAIMessage, OpenAIMessagesRoles, OpenAIResponse, OpenAISupportedLLMs } from "../types";
|
|
3
|
-
|
|
4
4
|
// export class OpenAIClient {
|
|
5
5
|
// private client: OpenAIService;
|
|
6
6
|
// private messages: OpenAIMessage[] = [];
|
|
7
|
-
|
|
8
7
|
// constructor(apiKey: string, systemPrompt: string) {
|
|
9
8
|
// this.client = new OpenAIService(apiKey);
|
|
10
9
|
// this.messages.push({
|
|
@@ -12,7 +11,6 @@
|
|
|
12
11
|
// content: systemPrompt,
|
|
13
12
|
// });
|
|
14
13
|
// }
|
|
15
|
-
|
|
16
14
|
// async sendMessage(
|
|
17
15
|
// userInput: string,
|
|
18
16
|
// model: OpenAISupportedLLMs,
|
|
@@ -20,23 +18,19 @@
|
|
|
20
18
|
// temperature: number
|
|
21
19
|
// ): Promise<string> {
|
|
22
20
|
// this.messages.push({ role: OpenAIMessagesRoles.USER, content: userInput });
|
|
23
|
-
|
|
24
21
|
// const response: OpenAIResponse = await this.client.generateCompletion(
|
|
25
22
|
// this.messages,
|
|
26
23
|
// model,
|
|
27
24
|
// maxTokens,
|
|
28
25
|
// temperature
|
|
29
26
|
// );
|
|
30
|
-
|
|
31
27
|
// const responseContent: string = response.choices[0].message.content;
|
|
32
28
|
// this.messages.push({
|
|
33
29
|
// role: OpenAIMessagesRoles.ASSISTANT,
|
|
34
30
|
// content: responseContent,
|
|
35
31
|
// });
|
|
36
|
-
|
|
37
32
|
// return responseContent;
|
|
38
33
|
// }
|
|
39
|
-
|
|
40
34
|
// async *sendMessageStream(
|
|
41
35
|
// userInput: string,
|
|
42
36
|
// model: OpenAISupportedLLMs,
|
|
@@ -44,14 +38,12 @@
|
|
|
44
38
|
// temperature: number
|
|
45
39
|
// ): AsyncGenerator<string, void, unknown> {
|
|
46
40
|
// this.messages.push({ role: OpenAIMessagesRoles.USER, content: userInput });
|
|
47
|
-
|
|
48
41
|
// const stream = this.client.generateStreamCompletion(
|
|
49
42
|
// this.messages,
|
|
50
43
|
// model,
|
|
51
44
|
// maxTokens,
|
|
52
45
|
// temperature
|
|
53
46
|
// );
|
|
54
|
-
|
|
55
47
|
// for await (const chunk of stream) {
|
|
56
48
|
// if (
|
|
57
49
|
// chunk.choices &&
|
|
@@ -64,3 +56,4 @@
|
|
|
64
56
|
// }
|
|
65
57
|
// }
|
|
66
58
|
// }
|
|
59
|
+
//# sourceMappingURL=OpenAIClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIClient.js","sourceRoot":"","sources":["../../src/clients/OpenAIClient.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,sGAAsG;AAEtG,8BAA8B;AAC9B,mCAAmC;AACnC,4CAA4C;AAE5C,wDAAwD;AACxD,+CAA+C;AAC/C,2BAA2B;AAC3B,0CAA0C;AAC1C,+BAA+B;AAC/B,UAAU;AACV,MAAM;AAEN,uBAAuB;AACvB,yBAAyB;AACzB,kCAAkC;AAClC,yBAAyB;AACzB,0BAA0B;AAC1B,yBAAyB;AACzB,kFAAkF;AAElF,6EAA6E;AAC7E,uBAAuB;AACvB,eAAe;AACf,mBAAmB;AACnB,oBAAoB;AACpB,SAAS;AAET,2EAA2E;AAC3E,2BAA2B;AAC3B,6CAA6C;AAC7C,kCAAkC;AAClC,UAAU;AAEV,8BAA8B;AAC9B,MAAM;AAEN,8BAA8B;AAC9B,yBAAyB;AACzB,kCAAkC;AAClC,yBAAyB;AACzB,0BAA0B;AAC1B,+CAA+C;AAC/C,kFAAkF;AAElF,2DAA2D;AAC3D,uBAAuB;AACvB,eAAe;AACf,mBAAmB;AACnB,oBAAoB;AACpB,SAAS;AAET,0CAA0C;AAC1C,aAAa;AACb,2BAA2B;AAC3B,oCAAoC;AACpC,yCAAyC;AACzC,YAAY;AACZ,0DAA0D;AAC1D,yBAAyB;AACzB,UAAU;AACV,QAAQ;AACR,MAAM;AACN,IAAI"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Messages, SupportedLLMs, LLMResponse } from "./types";
|
|
2
|
+
interface Credentials {
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
awsConfig?: {
|
|
5
|
+
accessKeyId: string;
|
|
6
|
+
secretAccessKey: string;
|
|
7
|
+
region: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function generateLLMResponse(messages: Messages, model: SupportedLLMs, maxTokens: number, temperature: number, systemPrompt: string, tools: any, stream: boolean | undefined, credentials: Credentials): Promise<LLMResponse | AsyncGenerator<LLMResponse>>;
|
|
11
|
+
export { type Messages, type OpenAIMessages, type BedrockAnthropicMessages, OpenAIMessagesRoles, BedrockAnthropicMessageRole, BedrockAnthropicContentType, SupportedLLMs, BedrockAnthropicSupportedLLMs, type LLMResponse, } from "./types";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
+
var m = o[Symbol.asyncIterator], i;
|
|
14
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
+
};
|
|
18
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
19
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
20
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
21
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
22
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
23
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
24
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
25
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
26
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
27
|
+
function fulfill(value) { resume("next", value); }
|
|
28
|
+
function reject(value) { resume("throw", value); }
|
|
29
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.BedrockAnthropicSupportedLLMs = exports.BedrockAnthropicContentType = exports.BedrockAnthropicMessageRole = exports.OpenAIMessagesRoles = void 0;
|
|
33
|
+
exports.generateLLMResponse = generateLLMResponse;
|
|
34
|
+
const ProviderFinder_1 = require("./middleware/ProviderFinder");
|
|
35
|
+
const InputFormatAdapter_1 = require("./middleware/InputFormatAdapter");
|
|
36
|
+
const OutputFormatAdapter_1 = require("./middleware/OutputFormatAdapter");
|
|
37
|
+
const AwsBedrockAnthropicService_1 = require("./services/AwsBedrockAnthropicService");
|
|
38
|
+
const OpenAIService_1 = require("./services/OpenAIService");
|
|
39
|
+
const types_1 = require("./types");
|
|
40
|
+
// Main function to handle both streaming and non-streaming requests
|
|
41
|
+
function generateLLMResponse(messages_1, model_1, maxTokens_1, temperature_1, systemPrompt_1, tools_1) {
|
|
42
|
+
return __awaiter(this, arguments, void 0, function* (messages, model, maxTokens, temperature, systemPrompt, tools, stream = false, credentials) {
|
|
43
|
+
// Step 2: Identify the provider based on the model
|
|
44
|
+
const provider = ProviderFinder_1.ProviderFinder.getProvider(model);
|
|
45
|
+
// Initialize the correct service based on the provider
|
|
46
|
+
let service;
|
|
47
|
+
if (provider === types_1.Providers.OPENAI) {
|
|
48
|
+
if (!credentials.apiKey) {
|
|
49
|
+
throw new Error("OpenAI API key is required for OpenAI models.");
|
|
50
|
+
}
|
|
51
|
+
service = new OpenAIService_1.OpenAIService(credentials.apiKey);
|
|
52
|
+
}
|
|
53
|
+
else if (provider === types_1.Providers.ANTHROPIC_BEDROCK) {
|
|
54
|
+
const awsConfig = credentials.awsConfig;
|
|
55
|
+
if (!awsConfig) {
|
|
56
|
+
throw new Error("AWS credentials are required for Bedrock models.");
|
|
57
|
+
}
|
|
58
|
+
service = new AwsBedrockAnthropicService_1.AwsBedrockAnthropicService(awsConfig.accessKeyId, awsConfig.secretAccessKey, awsConfig.region);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
throw new Error("Unsupported provider");
|
|
62
|
+
}
|
|
63
|
+
// Step 3: If the provider is not OpenAI, adapt the input to provider format
|
|
64
|
+
const adaptedMessages = provider !== types_1.Providers.OPENAI
|
|
65
|
+
? InputFormatAdapter_1.InputFormatAdapter.adaptMessages(messages, provider)
|
|
66
|
+
: messages;
|
|
67
|
+
// Step 4: Process the response depending on whether streaming is requested
|
|
68
|
+
if (stream) {
|
|
69
|
+
return handleStreamResponse(service, adaptedMessages, model, maxTokens, temperature, systemPrompt, tools, provider);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return handleNonStreamResponse(service, adaptedMessages, model, maxTokens, temperature, systemPrompt, tools, provider);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Helper for non-streaming response
|
|
77
|
+
function handleNonStreamResponse(service, messages, model, maxTokens, temperature, systemPrompt, tools, provider) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const response = yield service.generateCompletion(provider === types_1.Providers.OPENAI
|
|
80
|
+
? messages
|
|
81
|
+
: messages, model, maxTokens, temperature, systemPrompt, tools);
|
|
82
|
+
// Step 6: Adapt the response if provider is not OpenAI
|
|
83
|
+
return provider === types_1.Providers.OPENAI
|
|
84
|
+
? response
|
|
85
|
+
: OutputFormatAdapter_1.OutputFormatAdapter.adaptResponse(response, provider);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// Helper for streaming response
|
|
89
|
+
function handleStreamResponse(service, messages, model, maxTokens, temperature, systemPrompt, tools, provider) {
|
|
90
|
+
return __asyncGenerator(this, arguments, function* handleStreamResponse_1() {
|
|
91
|
+
var _a, e_1, _b, _c;
|
|
92
|
+
const stream = service.generateStreamCompletion(provider === types_1.Providers.OPENAI
|
|
93
|
+
? messages
|
|
94
|
+
: messages, model, maxTokens, temperature, systemPrompt, tools, true);
|
|
95
|
+
try {
|
|
96
|
+
// Step 7: Yield adapted chunks if the provider is not OpenAI
|
|
97
|
+
for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield __await(stream_1.next()), _a = stream_1_1.done, !_a; _d = true) {
|
|
98
|
+
_c = stream_1_1.value;
|
|
99
|
+
_d = false;
|
|
100
|
+
const chunk = _c;
|
|
101
|
+
yield yield __await(provider === types_1.Providers.OPENAI
|
|
102
|
+
? chunk
|
|
103
|
+
: OutputFormatAdapter_1.OutputFormatAdapter.adaptResponse(chunk, provider));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
107
|
+
finally {
|
|
108
|
+
try {
|
|
109
|
+
if (!_d && !_a && (_b = stream_1.return)) yield __await(_b.call(stream_1));
|
|
110
|
+
}
|
|
111
|
+
finally { if (e_1) throw e_1.error; }
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
var types_2 = require("./types");
|
|
116
|
+
Object.defineProperty(exports, "OpenAIMessagesRoles", { enumerable: true, get: function () { return types_2.OpenAIMessagesRoles; } });
|
|
117
|
+
Object.defineProperty(exports, "BedrockAnthropicMessageRole", { enumerable: true, get: function () { return types_2.BedrockAnthropicMessageRole; } });
|
|
118
|
+
Object.defineProperty(exports, "BedrockAnthropicContentType", { enumerable: true, get: function () { return types_2.BedrockAnthropicContentType; } });
|
|
119
|
+
Object.defineProperty(exports, "BedrockAnthropicSupportedLLMs", { enumerable: true, get: function () { return types_2.BedrockAnthropicSupportedLLMs; } });
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InputFormatAdapter = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class InputFormatAdapter {
|
|
6
|
+
static adaptMessages(messages, provider) {
|
|
7
|
+
switch (provider) {
|
|
8
|
+
case types_1.Providers.OPENAI:
|
|
9
|
+
return messages.map((msg) => {
|
|
10
|
+
if (msg.role === types_1.OpenAIMessagesRoles.FUNCTION) {
|
|
11
|
+
return {
|
|
12
|
+
role: msg.role,
|
|
13
|
+
content: msg.content,
|
|
14
|
+
name: msg.name,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
role: msg.role,
|
|
19
|
+
content: msg.content,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
case types_1.Providers.ANTHROPIC_BEDROCK:
|
|
23
|
+
return messages.map((msg) => ({
|
|
24
|
+
role: msg.role === types_1.OpenAIMessagesRoles.USER
|
|
25
|
+
? types_1.BedrockAnthropicMessageRole.USER
|
|
26
|
+
: types_1.BedrockAnthropicMessageRole.ASSISTANT,
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: types_1.BedrockAnthropicContentType.TEXT,
|
|
30
|
+
text: msg.content,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
}));
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.InputFormatAdapter = InputFormatAdapter;
|
|
40
|
+
//# sourceMappingURL=InputFormatAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputFormatAdapter.js","sourceRoot":"","sources":["../../src/middleware/InputFormatAdapter.ts"],"names":[],"mappings":";;;AAAA,oCASkB;AAElB,MAAa,kBAAkB;IAC7B,MAAM,CAAC,aAAa,CAClB,QAAkB,EAClB,QAAmB;QAEnB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,iBAAS,CAAC,MAAM;gBACnB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,2BAAmB,CAAC,QAAQ,EAAE,CAAC;wBAC9C,OAAO;4BACL,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,OAAO,EAAE,GAAG,CAAC,OAAO;4BACpB,IAAI,EAAG,GAA6B,CAAC,IAAI;yBAC1C,CAAC;oBACJ,CAAC;oBACD,OAAO;wBACL,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,GAAG,CAAC,OAAiB;qBAC/B,CAAC;gBACJ,CAAC,CAAmB,CAAC;YAEvB,KAAK,iBAAS,CAAC,iBAAiB;gBAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC5B,IAAI,EACF,GAAG,CAAC,IAAI,KAAK,2BAAmB,CAAC,IAAI;wBACnC,CAAC,CAAC,mCAA2B,CAAC,IAAI;wBAClC,CAAC,CAAC,mCAA2B,CAAC,SAAS;oBAC3C,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,mCAA2B,CAAC,IAAI;4BACtC,IAAI,EAAE,GAAG,CAAC,OAAiB;yBAC5B;qBACF;iBACF,CAAC,CAA8B,CAAC;YAEnC;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AAvCD,gDAuCC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LLMResponse, Providers } from "../types";
|
|
2
|
+
export declare class OutputFormatAdapter {
|
|
3
|
+
static adaptResponse(response: any, provider: Providers): LLMResponse;
|
|
4
|
+
private static adaptAnthropicBedrockResponse;
|
|
5
|
+
private static mapRole;
|
|
6
|
+
private static extractContent;
|
|
7
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OutputFormatAdapter = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class OutputFormatAdapter {
|
|
6
|
+
static adaptResponse(response, provider) {
|
|
7
|
+
switch (provider) {
|
|
8
|
+
case types_1.Providers.OPENAI:
|
|
9
|
+
return response;
|
|
10
|
+
case types_1.Providers.ANTHROPIC_BEDROCK:
|
|
11
|
+
return this.adaptAnthropicBedrockResponse(response);
|
|
12
|
+
default:
|
|
13
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
static adaptAnthropicBedrockResponse(response) {
|
|
17
|
+
const openAIResponse = {
|
|
18
|
+
id: response.id,
|
|
19
|
+
object: "text_completion",
|
|
20
|
+
created: Date.now(),
|
|
21
|
+
model: response.model,
|
|
22
|
+
choices: response.content.map((contentBlock, index) => ({
|
|
23
|
+
index,
|
|
24
|
+
message: {
|
|
25
|
+
role: this.mapRole(contentBlock),
|
|
26
|
+
content: this.extractContent(contentBlock),
|
|
27
|
+
},
|
|
28
|
+
logprobs: null,
|
|
29
|
+
finish_reason: response.stop_reason,
|
|
30
|
+
})),
|
|
31
|
+
usage: {
|
|
32
|
+
prompt_tokens: response.usage.input_tokens,
|
|
33
|
+
completion_tokens: response.usage.output_tokens,
|
|
34
|
+
total_tokens: response.usage.input_tokens + response.usage.output_tokens,
|
|
35
|
+
prompt_tokens_details: { cached_tokens: 0 },
|
|
36
|
+
completion_tokens_details: { reasoning_tokens: 0 },
|
|
37
|
+
},
|
|
38
|
+
system_fingerprint: "anthropic_translation",
|
|
39
|
+
};
|
|
40
|
+
return openAIResponse;
|
|
41
|
+
}
|
|
42
|
+
static mapRole(content) {
|
|
43
|
+
switch (content.type) {
|
|
44
|
+
case types_1.BedrockAnthropicContentType.TOOL_USE:
|
|
45
|
+
case types_1.BedrockAnthropicContentType.TOOL_RESULT:
|
|
46
|
+
return "tool";
|
|
47
|
+
case types_1.BedrockAnthropicContentType.TEXT:
|
|
48
|
+
return "assistant";
|
|
49
|
+
default:
|
|
50
|
+
return "unknown";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static extractContent(content) {
|
|
54
|
+
switch (content.type) {
|
|
55
|
+
case types_1.BedrockAnthropicContentType.TEXT:
|
|
56
|
+
return content.text;
|
|
57
|
+
case types_1.BedrockAnthropicContentType.TOOL_RESULT:
|
|
58
|
+
return content.content || "";
|
|
59
|
+
case types_1.BedrockAnthropicContentType.TOOL_USE:
|
|
60
|
+
return content.id || "";
|
|
61
|
+
default:
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.OutputFormatAdapter = OutputFormatAdapter;
|
|
67
|
+
//# sourceMappingURL=OutputFormatAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputFormatAdapter.js","sourceRoot":"","sources":["../../src/middleware/OutputFormatAdapter.ts"],"names":[],"mappings":";;;AAAA,oCAUkB;AAElB,MAAa,mBAAmB;IAC9B,MAAM,CAAC,aAAa,CAAC,QAAa,EAAE,QAAmB;QACrD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,iBAAS,CAAC,MAAM;gBACnB,OAAO,QAA0B,CAAC;YAEpC,KAAK,iBAAS,CAAC,iBAAiB;gBAC9B,OAAO,IAAI,CAAC,6BAA6B,CACvC,QAAoC,CACrC,CAAC;YAEJ;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,6BAA6B,CAC1C,QAAkC;QAElC,MAAM,cAAc,GAAmB;YACrC,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtD,KAAK;gBACL,OAAO,EAAE;oBACP,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;oBAChC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;iBAC3C;gBACD,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,QAAQ,CAAC,WAAW;aACpC,CAAC,CAAC;YACH,KAAK,EAAE;gBACL,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;gBAC1C,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;gBAC/C,YAAY,EACV,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa;gBAC5D,qBAAqB,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;gBAC3C,yBAAyB,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE;aACnD;YACD,kBAAkB,EAAE,uBAAuB;SAC5C,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,OAAgC;QACrD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,mCAA2B,CAAC,QAAQ,CAAC;YAC1C,KAAK,mCAA2B,CAAC,WAAW;gBAC1C,OAAO,MAAM,CAAC;YAChB,KAAK,mCAA2B,CAAC,IAAI;gBACnC,OAAO,WAAW,CAAC;YACrB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,OAAgC;QAC5D,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,mCAA2B,CAAC,IAAI;gBACnC,OAAQ,OAAuC,CAAC,IAAI,CAAC;YACvD,KAAK,mCAA2B,CAAC,WAAW;gBAC1C,OAAQ,OAA6C,CAAC,OAAO,IAAI,EAAE,CAAC;YACtE,KAAK,mCAA2B,CAAC,QAAQ;gBACvC,OAAQ,OAA0C,CAAC,EAAE,IAAI,EAAE,CAAC;YAC9D;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAtED,kDAsEC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderFinder = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class ProviderFinder {
|
|
6
|
+
static getProvider(model) {
|
|
7
|
+
if (model.type === "OpenAI" &&
|
|
8
|
+
Object.values(types_1.OpenAISupportedLLMs).includes(model.model)) {
|
|
9
|
+
return types_1.Providers.OPENAI;
|
|
10
|
+
}
|
|
11
|
+
else if (model.type === "BedrockAnthropic" &&
|
|
12
|
+
Object.values(types_1.BedrockAnthropicSupportedLLMs).includes(model.model)) {
|
|
13
|
+
return types_1.Providers.ANTHROPIC_BEDROCK;
|
|
14
|
+
}
|
|
15
|
+
throw new Error(`Unsupported model: ${model.model}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ProviderFinder = ProviderFinder;
|
|
19
|
+
//# sourceMappingURL=ProviderFinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderFinder.js","sourceRoot":"","sources":["../../src/middleware/ProviderFinder.ts"],"names":[],"mappings":";;;AAAA,oCAKkB;AAElB,MAAa,cAAc;IACzB,MAAM,CAAC,WAAW,CAAC,KAAoB;QACrC,IACE,KAAK,CAAC,IAAI,KAAK,QAAQ;YACvB,MAAM,CAAC,MAAM,CAAC,2BAAmB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACxD,CAAC;YACD,OAAO,iBAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;aAAM,IACL,KAAK,CAAC,IAAI,KAAK,kBAAkB;YACjC,MAAM,CAAC,MAAM,CAAC,qCAA6B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAClE,CAAC;YACD,OAAO,iBAAS,CAAC,iBAAiB,CAAC;QACrC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAfD,wCAeC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BedrockAnthropicParsedChunk, BedrockAnthropicResponse, Messages, SupportedLLMs } from "../types";
|
|
2
|
+
import { ClientService } from "./ClientService";
|
|
3
|
+
export declare class AwsBedrockAnthropicService implements ClientService {
|
|
4
|
+
private bedrock;
|
|
5
|
+
constructor(awsAccessKey: string, awsSecretKey: string, region: string);
|
|
6
|
+
generateCompletion(messages: Messages, model?: SupportedLLMs, maxTokens?: number, temperature?: number, systemPrompt?: string, tools?: any): Promise<BedrockAnthropicResponse>;
|
|
7
|
+
generateStreamCompletion(messages: Messages, model?: SupportedLLMs, maxTokens?: number, temperature?: number, systemPrompt?: string, tools?: any, stream?: boolean): AsyncGenerator<BedrockAnthropicParsedChunk, void, unknown>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
12
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
13
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
14
|
+
var m = o[Symbol.asyncIterator], i;
|
|
15
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
16
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
17
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
18
|
+
};
|
|
19
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
20
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
21
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
22
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
23
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
24
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
25
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
26
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
27
|
+
function fulfill(value) { resume("next", value); }
|
|
28
|
+
function reject(value) { resume("throw", value); }
|
|
29
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.AwsBedrockAnthropicService = void 0;
|
|
33
|
+
const client_bedrock_runtime_1 = require("@aws-sdk/client-bedrock-runtime");
|
|
34
|
+
class AwsBedrockAnthropicService {
|
|
35
|
+
constructor(awsAccessKey, awsSecretKey, region) {
|
|
36
|
+
this.bedrock = new client_bedrock_runtime_1.BedrockRuntimeClient({
|
|
37
|
+
region,
|
|
38
|
+
credentials: {
|
|
39
|
+
accessKeyId: awsAccessKey,
|
|
40
|
+
secretAccessKey: awsSecretKey,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
generateCompletion(messages, model, maxTokens, temperature, systemPrompt, tools) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const modelId = (model === null || model === void 0 ? void 0 : model.type) === "BedrockAnthropic" ? model.model : undefined;
|
|
47
|
+
if (!modelId) {
|
|
48
|
+
throw new Error("Invalid model type for AwsBedrockAnthropicService");
|
|
49
|
+
}
|
|
50
|
+
const body = JSON.stringify(Object.assign({ anthropic_version: "bedrock-2023-05-31", max_tokens: maxTokens, temperature,
|
|
51
|
+
messages, system: systemPrompt }, (tools && tools.length > 0 ? { tools } : {})));
|
|
52
|
+
const command = new client_bedrock_runtime_1.InvokeModelCommand({
|
|
53
|
+
modelId,
|
|
54
|
+
body,
|
|
55
|
+
contentType: "application/json",
|
|
56
|
+
accept: "application/json",
|
|
57
|
+
});
|
|
58
|
+
const response = yield this.bedrock.send(command);
|
|
59
|
+
return JSON.parse(new TextDecoder().decode(response.body));
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
generateStreamCompletion(messages, model, maxTokens, temperature, systemPrompt, tools, stream) {
|
|
63
|
+
return __asyncGenerator(this, arguments, function* generateStreamCompletion_1() {
|
|
64
|
+
var _a, e_1, _b, _c;
|
|
65
|
+
var _d;
|
|
66
|
+
const modelId = (model === null || model === void 0 ? void 0 : model.type) === "BedrockAnthropic" ? model.model : undefined;
|
|
67
|
+
if (!modelId) {
|
|
68
|
+
throw new Error("Invalid model type for AwsBedrockAnthropicService");
|
|
69
|
+
}
|
|
70
|
+
const body = JSON.stringify(Object.assign({ anthropic_version: "bedrock-2023-05-31", max_tokens: maxTokens, temperature,
|
|
71
|
+
messages, system: systemPrompt }, (tools && tools.length > 0 ? { tools } : {})));
|
|
72
|
+
const command = new client_bedrock_runtime_1.InvokeModelWithResponseStreamCommand({
|
|
73
|
+
modelId,
|
|
74
|
+
body,
|
|
75
|
+
contentType: "application/json",
|
|
76
|
+
accept: "application/json",
|
|
77
|
+
});
|
|
78
|
+
const response = yield __await(this.bedrock.send(command));
|
|
79
|
+
if (response.body) {
|
|
80
|
+
const decoder = new TextDecoder("utf-8");
|
|
81
|
+
try {
|
|
82
|
+
for (var _e = true, _f = __asyncValues(response.body), _g; _g = yield __await(_f.next()), _a = _g.done, !_a; _e = true) {
|
|
83
|
+
_c = _g.value;
|
|
84
|
+
_e = false;
|
|
85
|
+
const payload = _c;
|
|
86
|
+
const decodedString = decoder.decode((_d = payload.chunk) === null || _d === void 0 ? void 0 : _d.bytes, {
|
|
87
|
+
stream: true,
|
|
88
|
+
});
|
|
89
|
+
try {
|
|
90
|
+
const jsonObject = JSON.parse(decodedString);
|
|
91
|
+
yield yield __await(jsonObject);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error("Failed to parse chunk as JSON:", error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
99
|
+
finally {
|
|
100
|
+
try {
|
|
101
|
+
if (!_e && !_a && (_b = _f.return)) yield __await(_b.call(_f));
|
|
102
|
+
}
|
|
103
|
+
finally { if (e_1) throw e_1.error; }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.AwsBedrockAnthropicService = AwsBedrockAnthropicService;
|
|
110
|
+
//# sourceMappingURL=AwsBedrockAnthropicService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsBedrockAnthropicService.js","sourceRoot":"","sources":["../../src/services/AwsBedrockAnthropicService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BedrockAnthropicParsedChunk, LLMResponse, Messages, SupportedLLMs } from "../types";
|
|
2
|
+
export interface ClientService {
|
|
3
|
+
generateCompletion(messages: Messages, model?: SupportedLLMs, maxTokens?: number, temperature?: number, systemPrompt?: string, tools?: any): Promise<LLMResponse>;
|
|
4
|
+
generateStreamCompletion(messages: Messages, model?: SupportedLLMs, maxTokens?: number, temperature?: number, systemPrompt?: string, tools?: any, stream?: boolean): AsyncGenerator<BedrockAnthropicParsedChunk, void, unknown>;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientService.js","sourceRoot":"","sources":["../../src/services/ClientService.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OpenAIMessages, OpenAIResponse, SupportedLLMs } from "../types";
|
|
2
|
+
import { ClientService } from "./ClientService";
|
|
3
|
+
export declare class OpenAIService implements ClientService {
|
|
4
|
+
private openai;
|
|
5
|
+
constructor(apiKey: string);
|
|
6
|
+
generateCompletion(messages: OpenAIMessages, model: SupportedLLMs, maxTokens: number, temperature: number, systemPrompt?: string, // Optional parameter
|
|
7
|
+
tools?: any): Promise<OpenAIResponse>;
|
|
8
|
+
generateStreamCompletion(messages: OpenAIMessages, model: SupportedLLMs, maxTokens: number, temperature: number, systemPrompt?: string, // Optional parameter
|
|
9
|
+
tools?: any, // Optional parameter
|
|
10
|
+
stream?: boolean): AsyncGenerator<any, void, unknown>;
|
|
11
|
+
}
|