@imenam/unified-llm-client 1.4.0 → 1.4.1
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/core/LLMAdapter.d.ts +1 -1
- package/dist/core/LLMAdapter.d.ts.map +1 -1
- package/dist/core/LLMAdapter.js +8 -8
- package/dist/core/UnifiedLLMClient.d.ts +1 -0
- package/dist/core/UnifiedLLMClient.d.ts.map +1 -1
- package/dist/core/UnifiedLLMClient.js +7 -5
- package/dist/examples/example.js +21 -20
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChatMessage, ToolDefinition, ChatResponse, ToolCall, AudioGenerationOptions, AudioGenerationResponse, UnifiedLog, Provider } from "../common/types";
|
|
2
|
-
export declare const PROVIDERS_CONFIG: Record<Provider, ProviderOptions>;
|
|
2
|
+
export declare const PROVIDERS_CONFIG: Record<Provider, () => ProviderOptions>;
|
|
3
3
|
export type StreamedChatChunk = {
|
|
4
4
|
contentChunk?: string;
|
|
5
5
|
toolCallChunk?: ToolCall[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMAdapter.d.ts","sourceRoot":"","sources":["../../src/core/LLMAdapter.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM7J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"LLMAdapter.d.ts","sourceRoot":"","sources":["../../src/core/LLMAdapter.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM7J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,eAAe,CA4CpE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAA;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,GAAG,CAAC;IACzC,cAAc,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EACrC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,kBAAkB,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,WAAW;IAC1B,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,gBAAgB,EAAE,GAAG,GAAG,YAAY,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACjF,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5E,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAA"}
|
package/dist/core/LLMAdapter.js
CHANGED
|
@@ -24,7 +24,7 @@ const AnthropicLogAdapter_1 = require("../adapters/anthropic/AnthropicLogAdapter
|
|
|
24
24
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
25
25
|
dotenv_1.default.config();
|
|
26
26
|
exports.PROVIDERS_CONFIG = {
|
|
27
|
-
gemini: {
|
|
27
|
+
gemini: () => ({
|
|
28
28
|
promptAdapter: new GeminiPromptAdapter_1.GeminiPromptAdapter({
|
|
29
29
|
apiKey: process.env.GOOGLE_API_KEY,
|
|
30
30
|
model: "gemini-2.5-flash",
|
|
@@ -36,8 +36,8 @@ exports.PROVIDERS_CONFIG = {
|
|
|
36
36
|
model: "gemini-2.5-pro-preview-tts",
|
|
37
37
|
}),
|
|
38
38
|
logAdapter: new GeminiLogAdapter_1.GeminiLogAdapter(),
|
|
39
|
-
},
|
|
40
|
-
openai: {
|
|
39
|
+
}),
|
|
40
|
+
openai: () => ({
|
|
41
41
|
promptAdapter: new OpenAIPromptAdapter_1.OpenAIPromptAdapter({
|
|
42
42
|
apiKey: process.env.OPENAI_API_KEY,
|
|
43
43
|
model: "gpt-4o-mini",
|
|
@@ -46,8 +46,8 @@ exports.PROVIDERS_CONFIG = {
|
|
|
46
46
|
outputAdapter: new OpenAIOutputAdapter_1.OpenAIOutputAdapter(),
|
|
47
47
|
logAdapter: new OpenAiLogAdapter_1.OpenAiLogAdapter(),
|
|
48
48
|
// Note: OpenAI n'a pas encore d'audioAdapter - peut être ajouté plus tard
|
|
49
|
-
},
|
|
50
|
-
qwen: {
|
|
49
|
+
}),
|
|
50
|
+
qwen: () => ({
|
|
51
51
|
promptAdapter: new QwenPromptAdapter_1.QwenPromptAdapter({
|
|
52
52
|
apiKey: process.env.ALIBABA_CLOUD_API_KEY,
|
|
53
53
|
model: "qwen3-vl-235b-a22b-instruct",
|
|
@@ -57,8 +57,8 @@ exports.PROVIDERS_CONFIG = {
|
|
|
57
57
|
outputAdapter: new QwenOutputAdapter_1.QwenOutputAdapter(),
|
|
58
58
|
logAdapter: new QwenLogAdapter_1.QwenLogAdapter(),
|
|
59
59
|
// Note: Qwen n'a pas d'audioAdapter pour le moment
|
|
60
|
-
},
|
|
61
|
-
anthropic: {
|
|
60
|
+
}),
|
|
61
|
+
anthropic: () => ({
|
|
62
62
|
promptAdapter: new AnthropicPromptAdapter_1.AnthropicPromptAdapter({
|
|
63
63
|
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
64
64
|
model: "claude-sonnet-4-5-20250929",
|
|
@@ -66,5 +66,5 @@ exports.PROVIDERS_CONFIG = {
|
|
|
66
66
|
outputAdapter: new AnthropicOutputAdapter_1.AnthropicOutputAdapter(),
|
|
67
67
|
toolAdapter: new AnthropicToolAdapter_1.AnthropicToolAdapter(),
|
|
68
68
|
logAdapter: new AnthropicLogAdapter_1.AnthropicLogAdapter(),
|
|
69
|
-
},
|
|
69
|
+
}),
|
|
70
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnifiedLLMClient.d.ts","sourceRoot":"","sources":["../../src/core/UnifiedLLMClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAY,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnJ,OAAO,EAAiB,oBAAoB,EAAqE,iBAAiB,EAAgB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE3L,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACrD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,EAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAA;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAC,CAA0C;IAEzD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;gBAI3D,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"UnifiedLLMClient.d.ts","sourceRoot":"","sources":["../../src/core/UnifiedLLMClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,12 @@ class UnifiedLLMClient {
|
|
|
18
18
|
constructor(model, options) {
|
|
19
19
|
this.rawMessages = [];
|
|
20
20
|
this.model = model;
|
|
21
|
-
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
21
|
+
const config = LLMAdapter_1.PROVIDERS_CONFIG[model.provider]();
|
|
22
|
+
this.promptAdapter = config.promptAdapter;
|
|
23
|
+
this.outputAdapter = config.outputAdapter;
|
|
24
|
+
this.toolAdapter = config.toolAdapter;
|
|
25
|
+
this.audioAdapter = config.audioAdapter;
|
|
26
|
+
this.logAdapter = config.logAdapter;
|
|
25
27
|
this.logger = (options === null || options === void 0 ? void 0 : options.logger) || global._unifiedLlmDefaultLogger;
|
|
26
28
|
}
|
|
27
29
|
checkNotImplementedFeatures(message) {
|
|
@@ -78,7 +80,7 @@ class UnifiedLLMClient {
|
|
|
78
80
|
}
|
|
79
81
|
handleLogging(messages, response, latencyMs, metadata, onLog) {
|
|
80
82
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
-
const logAdapter =
|
|
83
|
+
const logAdapter = this.logAdapter;
|
|
82
84
|
if (logAdapter) {
|
|
83
85
|
try {
|
|
84
86
|
const unifiedLog = logAdapter.toUnifiedLog({
|
package/dist/examples/example.js
CHANGED
|
@@ -74,28 +74,29 @@ const tools = [
|
|
|
74
74
|
function basicUsage() {
|
|
75
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
76
76
|
const client = new __1.UnifiedLLMClient(__1.MODELS.GEMINI_FLASH_2_5);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
77
|
+
const tools = [
|
|
78
|
+
{
|
|
79
|
+
name: "get_weather",
|
|
80
|
+
description: "Retrieve weather for a given city",
|
|
81
|
+
parameters: {
|
|
82
|
+
type: "object",
|
|
83
|
+
properties: {
|
|
84
|
+
city: { type: "string", description: "City name" },
|
|
85
|
+
},
|
|
86
|
+
required: ["city"],
|
|
87
|
+
},
|
|
88
|
+
executor: (_a) => __awaiter(this, [_a], void 0, function* ({ city }) {
|
|
89
|
+
// fetch weather data from API and then
|
|
90
|
+
return `Weather in ${city}... `; // Placeholder
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
];
|
|
94
94
|
const res = yield client.chat({
|
|
95
|
-
message: "
|
|
96
|
-
//
|
|
95
|
+
message: "Quelle est la météo à Paris ?",
|
|
96
|
+
// message: "Quel modèle es-tu ? 2.5-flash ou 2.5-pro ? Répond l'un ou l'autre, soit '2.5-flash' ou '2.5-pro', rien d'autre.",
|
|
97
|
+
tools
|
|
97
98
|
});
|
|
98
|
-
console.log("response", JSON.stringify(res.
|
|
99
|
+
console.log("response", JSON.stringify(res.toolCalls));
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
102
|
function basicUsageWithAudio() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imenam/unified-llm-client",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "A unified interface for multiple LLM providers (OpenAI, Gemini, Anthropic, Qwen) with tool-calling, streaming, and audio support",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|