@imenam/unified-llm-client 1.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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/adapters/anthropic/AnthropicLogAdapter.d.ts +6 -0
  4. package/dist/adapters/anthropic/AnthropicLogAdapter.d.ts.map +1 -0
  5. package/dist/adapters/anthropic/AnthropicLogAdapter.js +41 -0
  6. package/dist/adapters/anthropic/AnthropicOutputAdapter.d.ts +6 -0
  7. package/dist/adapters/anthropic/AnthropicOutputAdapter.d.ts.map +1 -0
  8. package/dist/adapters/anthropic/AnthropicOutputAdapter.js +41 -0
  9. package/dist/adapters/anthropic/AnthropicPromptAdapter.d.ts +12 -0
  10. package/dist/adapters/anthropic/AnthropicPromptAdapter.d.ts.map +1 -0
  11. package/dist/adapters/anthropic/AnthropicPromptAdapter.js +249 -0
  12. package/dist/adapters/anthropic/AnthropicToolAdapter.d.ts +6 -0
  13. package/dist/adapters/anthropic/AnthropicToolAdapter.d.ts.map +1 -0
  14. package/dist/adapters/anthropic/AnthropicToolAdapter.js +20 -0
  15. package/dist/adapters/gemini/GeminiAudioAdapter.d.ts +40 -0
  16. package/dist/adapters/gemini/GeminiAudioAdapter.d.ts.map +1 -0
  17. package/dist/adapters/gemini/GeminiAudioAdapter.js +273 -0
  18. package/dist/adapters/gemini/GeminiLogAdapter.d.ts +6 -0
  19. package/dist/adapters/gemini/GeminiLogAdapter.d.ts.map +1 -0
  20. package/dist/adapters/gemini/GeminiLogAdapter.js +43 -0
  21. package/dist/adapters/gemini/GeminiOutputAdapter.d.ts +6 -0
  22. package/dist/adapters/gemini/GeminiOutputAdapter.d.ts.map +1 -0
  23. package/dist/adapters/gemini/GeminiOutputAdapter.js +38 -0
  24. package/dist/adapters/gemini/GeminiPromptAdapter.d.ts +26 -0
  25. package/dist/adapters/gemini/GeminiPromptAdapter.d.ts.map +1 -0
  26. package/dist/adapters/gemini/GeminiPromptAdapter.js +334 -0
  27. package/dist/adapters/gemini/GeminiToolAdapter.d.ts +8 -0
  28. package/dist/adapters/gemini/GeminiToolAdapter.d.ts.map +1 -0
  29. package/dist/adapters/gemini/GeminiToolAdapter.js +42 -0
  30. package/dist/adapters/gemini/types.d.ts +14 -0
  31. package/dist/adapters/gemini/types.d.ts.map +1 -0
  32. package/dist/adapters/gemini/types.js +2 -0
  33. package/dist/adapters/openai/OpenAIOutputAdapter.d.ts +6 -0
  34. package/dist/adapters/openai/OpenAIOutputAdapter.d.ts.map +1 -0
  35. package/dist/adapters/openai/OpenAIOutputAdapter.js +18 -0
  36. package/dist/adapters/openai/OpenAIPromptAdapter.d.ts +13 -0
  37. package/dist/adapters/openai/OpenAIPromptAdapter.d.ts.map +1 -0
  38. package/dist/adapters/openai/OpenAIPromptAdapter.js +215 -0
  39. package/dist/adapters/openai/OpenAiLogAdapter.d.ts +6 -0
  40. package/dist/adapters/openai/OpenAiLogAdapter.d.ts.map +1 -0
  41. package/dist/adapters/openai/OpenAiLogAdapter.js +37 -0
  42. package/dist/adapters/openai/OpenAiToolAdapter.d.ts +6 -0
  43. package/dist/adapters/openai/OpenAiToolAdapter.d.ts.map +1 -0
  44. package/dist/adapters/openai/OpenAiToolAdapter.js +20 -0
  45. package/dist/adapters/qwen/QwenLogAdapter.d.ts +7 -0
  46. package/dist/adapters/qwen/QwenLogAdapter.d.ts.map +1 -0
  47. package/dist/adapters/qwen/QwenLogAdapter.js +49 -0
  48. package/dist/adapters/qwen/QwenOutputAdapter.d.ts +6 -0
  49. package/dist/adapters/qwen/QwenOutputAdapter.d.ts.map +1 -0
  50. package/dist/adapters/qwen/QwenOutputAdapter.js +9 -0
  51. package/dist/adapters/qwen/QwenPromptAdapter.d.ts +13 -0
  52. package/dist/adapters/qwen/QwenPromptAdapter.d.ts.map +1 -0
  53. package/dist/adapters/qwen/QwenPromptAdapter.js +313 -0
  54. package/dist/adapters/qwen/QwenToolAdapter.d.ts +6 -0
  55. package/dist/adapters/qwen/QwenToolAdapter.d.ts.map +1 -0
  56. package/dist/adapters/qwen/QwenToolAdapter.js +20 -0
  57. package/dist/common/types.d.ts +106 -0
  58. package/dist/common/types.d.ts.map +1 -0
  59. package/dist/common/types.js +2 -0
  60. package/dist/core/LLMAdapter.d.ts +74 -0
  61. package/dist/core/LLMAdapter.d.ts.map +1 -0
  62. package/dist/core/LLMAdapter.js +70 -0
  63. package/dist/core/Models.d.ts +16 -0
  64. package/dist/core/Models.d.ts.map +1 -0
  65. package/dist/core/Models.js +118 -0
  66. package/dist/core/UnifiedLLMClient.d.ts +68 -0
  67. package/dist/core/UnifiedLLMClient.d.ts.map +1 -0
  68. package/dist/core/UnifiedLLMClient.js +185 -0
  69. package/dist/examples/anthropic-example.d.ts +2 -0
  70. package/dist/examples/anthropic-example.d.ts.map +1 -0
  71. package/dist/examples/anthropic-example.js +243 -0
  72. package/dist/examples/audio-example.d.ts +14 -0
  73. package/dist/examples/audio-example.d.ts.map +1 -0
  74. package/dist/examples/audio-example.js +204 -0
  75. package/dist/examples/example-logging.d.ts +2 -0
  76. package/dist/examples/example-logging.d.ts.map +1 -0
  77. package/dist/examples/example-logging.js +53 -0
  78. package/dist/examples/example.d.ts +2 -0
  79. package/dist/examples/example.d.ts.map +1 -0
  80. package/dist/examples/example.js +373 -0
  81. package/dist/examples/qwen-vl-example.d.ts +26 -0
  82. package/dist/examples/qwen-vl-example.d.ts.map +1 -0
  83. package/dist/examples/qwen-vl-example.js +314 -0
  84. package/dist/examples/test-multiturn-tools.d.ts +2 -0
  85. package/dist/examples/test-multiturn-tools.d.ts.map +1 -0
  86. package/dist/examples/test-multiturn-tools.js +139 -0
  87. package/dist/index.d.ts +7 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +7 -0
  90. package/dist/utils/audioUtils.d.ts +41 -0
  91. package/dist/utils/audioUtils.d.ts.map +1 -0
  92. package/dist/utils/audioUtils.js +185 -0
  93. package/package.json +64 -0
@@ -0,0 +1,215 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __rest = (this && this.__rest) || function (s, e) {
45
+ var t = {};
46
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
47
+ t[p] = s[p];
48
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
49
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
50
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
51
+ t[p[i]] = s[p[i]];
52
+ }
53
+ return t;
54
+ };
55
+ var __importDefault = (this && this.__importDefault) || function (mod) {
56
+ return (mod && mod.__esModule) ? mod : { "default": mod };
57
+ };
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.OpenAIPromptAdapter = void 0;
60
+ const node_fetch_1 = __importDefault(require("node-fetch"));
61
+ const fs = __importStar(require("fs"));
62
+ const path = __importStar(require("path"));
63
+ const mime = __importStar(require("mime-types"));
64
+ class OpenAIPromptAdapter {
65
+ constructor(opts) {
66
+ var _a, _b;
67
+ this.opts = opts;
68
+ this.messages = [];
69
+ this.endpoint =
70
+ (_b = (_a = opts.baseUrl) === null || _a === void 0 ? void 0 : _a.replace(/\/$/, "")) !== null && _b !== void 0 ? _b : "https://api.openai.com";
71
+ this.endpoint += "/v1/chat/completions";
72
+ }
73
+ formatMessage(message) {
74
+ var _a;
75
+ // Assistant message with tool calls → OpenAI format with serialized arguments
76
+ if (message.role === "assistant" && message.tool_calls && message.tool_calls.length > 0) {
77
+ return {
78
+ role: "assistant",
79
+ content: (_a = message.content) !== null && _a !== void 0 ? _a : null,
80
+ tool_calls: message.tool_calls.map(tc => {
81
+ var _a;
82
+ return ({
83
+ id: (_a = tc.id) !== null && _a !== void 0 ? _a : tc.name,
84
+ type: "function",
85
+ function: {
86
+ name: tc.name,
87
+ arguments: JSON.stringify(tc.arguments),
88
+ },
89
+ });
90
+ }),
91
+ };
92
+ }
93
+ if (!message.attachedFile) {
94
+ return message;
95
+ }
96
+ const content = [];
97
+ // Add text content if present
98
+ if (message.content && typeof message.content === 'string') {
99
+ content.push({
100
+ type: "text",
101
+ text: message.content
102
+ });
103
+ }
104
+ else if (Array.isArray(message.content)) {
105
+ content.push(...message.content);
106
+ }
107
+ // Add attached files
108
+ const fileParts = this.processFiles(message.attachedFile);
109
+ content.push(...fileParts);
110
+ const { attachedFile } = message, rest = __rest(message, ["attachedFile"]);
111
+ return Object.assign(Object.assign({}, rest), { content: content.length > 0 ? content : message.content });
112
+ }
113
+ sendToProvider(messages_1) {
114
+ return __awaiter(this, arguments, void 0, function* (messages, tools = [], toolChoice = "auto", attachedFile, model) {
115
+ var _a;
116
+ // If attachedFile is provided separately, attach it to the last user message
117
+ if (attachedFile) {
118
+ const lastUserMessage = [...messages].reverse().find(m => m.role === 'user');
119
+ if (lastUserMessage) {
120
+ const fileParts = this.processFiles(attachedFile);
121
+ if (typeof lastUserMessage.content === 'string') {
122
+ lastUserMessage.content = [
123
+ { type: "text", text: lastUserMessage.content },
124
+ ...fileParts
125
+ ];
126
+ }
127
+ else if (Array.isArray(lastUserMessage.content)) {
128
+ lastUserMessage.content.push(...fileParts);
129
+ }
130
+ }
131
+ }
132
+ const body = {
133
+ model: model || this.opts.model,
134
+ messages,
135
+ stream: false,
136
+ };
137
+ if (tools.length) {
138
+ body.tools = tools.map((fn) => ({ type: "function", function: fn }));
139
+ body.tool_choice =
140
+ toolChoice === "auto"
141
+ ? "auto"
142
+ : toolChoice === "none"
143
+ ? "none"
144
+ : { type: "function", function: { name: toolChoice } };
145
+ }
146
+ const response = yield this.request(body);
147
+ const responseMessage = response.choices[0].message;
148
+ const calls = (responseMessage.tool_calls || []).map((c) => {
149
+ var _a;
150
+ return ({
151
+ id: c.id,
152
+ name: c.function.name,
153
+ arguments: JSON.parse((_a = c.function.arguments) !== null && _a !== void 0 ? _a : "{}"),
154
+ });
155
+ });
156
+ return {
157
+ content: (_a = responseMessage.content) !== null && _a !== void 0 ? _a : null,
158
+ toolCalls: calls,
159
+ raw: response,
160
+ };
161
+ });
162
+ }
163
+ //--------------------------------------------------
164
+ processFiles(files) {
165
+ const fileList = Array.isArray(files) ? files : [files];
166
+ const parts = [];
167
+ for (const file of fileList) {
168
+ if (typeof file === 'string') {
169
+ try {
170
+ if (file.startsWith('http')) {
171
+ parts.push({
172
+ type: "image_url",
173
+ image_url: {
174
+ url: file
175
+ }
176
+ });
177
+ }
178
+ else {
179
+ const filePath = path.resolve(file);
180
+ const fileBuffer = fs.readFileSync(filePath);
181
+ const base64Data = fileBuffer.toString('base64');
182
+ const mimeType = mime.lookup(filePath) || 'application/octet-stream';
183
+ parts.push({
184
+ type: "image_url",
185
+ image_url: {
186
+ url: `data:${mimeType};base64,${base64Data}`
187
+ }
188
+ });
189
+ }
190
+ }
191
+ catch (error) {
192
+ console.warn(`Failed to process attached file ${file}:`, error);
193
+ }
194
+ }
195
+ }
196
+ return parts;
197
+ }
198
+ request(body) {
199
+ return __awaiter(this, void 0, void 0, function* () {
200
+ const res = yield (0, node_fetch_1.default)(this.endpoint, {
201
+ method: "POST",
202
+ headers: {
203
+ "Content-Type": "application/json",
204
+ Authorization: `Bearer ${this.opts.apiKey}`,
205
+ },
206
+ body: JSON.stringify(body),
207
+ });
208
+ if (!res.ok) {
209
+ throw new Error(`OpenAI API ${res.status}: ${yield res.text()}`);
210
+ }
211
+ return res.json();
212
+ });
213
+ }
214
+ }
215
+ exports.OpenAIPromptAdapter = OpenAIPromptAdapter;
@@ -0,0 +1,6 @@
1
+ import { UnifiedLog } from "../../common/types";
2
+ import { LogAdapter, LogData } from "../../core/LLMAdapter";
3
+ export declare class OpenAiLogAdapter implements LogAdapter {
4
+ toUnifiedLog(data: LogData): UnifiedLog;
5
+ }
6
+ //# sourceMappingURL=OpenAiLogAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAiLogAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai/OpenAiLogAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,gBAAiB,YAAW,UAAU;IACjD,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU;CA+BxC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAiLogAdapter = void 0;
4
+ class OpenAiLogAdapter {
5
+ toUnifiedLog(data) {
6
+ var _a, _b, _c, _d;
7
+ const { model, provider, messages, response, latencyMs, metadata } = data;
8
+ const usage = response.usage;
9
+ const raw = response.raw;
10
+ return {
11
+ requestId: (raw === null || raw === void 0 ? void 0 : raw.id) || `openai-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
12
+ timestamp: new Date(),
13
+ provider: provider,
14
+ model: model,
15
+ prompt: messages,
16
+ output: {
17
+ content: response.content,
18
+ toolCalls: response.toolCalls,
19
+ finishReason: response.finishReason,
20
+ },
21
+ usage: {
22
+ promptTokens: (usage === null || usage === void 0 ? void 0 : usage.promptTokens) || 0,
23
+ completionTokens: (usage === null || usage === void 0 ? void 0 : usage.completionTokens) || 0,
24
+ totalTokens: (usage === null || usage === void 0 ? void 0 : usage.totalTokens) || 0,
25
+ promptDetails: {
26
+ cachedTokens: ((_b = (_a = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _a === void 0 ? void 0 : _a.prompt_tokens_details) === null || _b === void 0 ? void 0 : _b.cached_tokens) || 0,
27
+ },
28
+ completionDetails: {
29
+ thinkingTokens: ((_d = (_c = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _c === void 0 ? void 0 : _c.completion_tokens_details) === null || _d === void 0 ? void 0 : _d.reasoning_tokens) || 0,
30
+ }
31
+ },
32
+ latencyMs: latencyMs,
33
+ metadata: metadata,
34
+ };
35
+ }
36
+ }
37
+ exports.OpenAiLogAdapter = OpenAiLogAdapter;
@@ -0,0 +1,6 @@
1
+ import { ToolCall } from "../../common/types";
2
+ import { ToolAdapter } from "../../core/LLMAdapter";
3
+ export declare class OpenAiToolAdapter implements ToolAdapter {
4
+ formatToolCallResult(toolCall: ToolCall): any;
5
+ }
6
+ //# sourceMappingURL=OpenAiToolAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAiToolAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai/OpenAiToolAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,qBAAa,iBAAkB,YAAW,WAAW;IACnD,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG;CAc9C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAiToolAdapter = void 0;
4
+ class OpenAiToolAdapter {
5
+ formatToolCallResult(toolCall) {
6
+ if (!toolCall.id || toolCall.id === "") {
7
+ throw new Error("Tool call ID is required to format response - toolCall: " + JSON.stringify(toolCall));
8
+ }
9
+ if (typeof toolCall.result !== 'string') {
10
+ toolCall.result = JSON.stringify(toolCall.result);
11
+ }
12
+ return {
13
+ tool_call_id: toolCall.id,
14
+ role: "tool",
15
+ name: toolCall.name,
16
+ content: toolCall.result,
17
+ };
18
+ }
19
+ }
20
+ exports.OpenAiToolAdapter = OpenAiToolAdapter;
@@ -0,0 +1,7 @@
1
+ import { UnifiedLog } from "../../common/types";
2
+ import { LogAdapter, LogData } from "../../core/LLMAdapter";
3
+ export declare class QwenLogAdapter implements LogAdapter {
4
+ removeImages(messages: any[]): any[];
5
+ toUnifiedLog(data: LogData): UnifiedLog;
6
+ }
7
+ //# sourceMappingURL=QwenLogAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QwenLogAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/qwen/QwenLogAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,cAAe,YAAW,UAAU;IAC/C,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;IAapC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU;CA+BxC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QwenLogAdapter = void 0;
4
+ class QwenLogAdapter {
5
+ removeImages(messages) {
6
+ const formattedMessages = messages.map((message) => {
7
+ message.content = message.content.map((content) => {
8
+ if (content.type === 'image_url') {
9
+ content.image_url.url = content.image_url.url.split(',')[0] + "removed";
10
+ }
11
+ return content;
12
+ });
13
+ return message;
14
+ });
15
+ return formattedMessages;
16
+ }
17
+ toUnifiedLog(data) {
18
+ var _a, _b, _c, _d, _e;
19
+ const { model, provider, messages, response, latencyMs, metadata } = data;
20
+ const usage = response.usage;
21
+ const raw = response.raw;
22
+ return {
23
+ requestId: (raw === null || raw === void 0 ? void 0 : raw.id) || (raw === null || raw === void 0 ? void 0 : raw.request_id) || `qwen-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
24
+ timestamp: new Date(),
25
+ provider: provider,
26
+ model: model,
27
+ prompt: this.removeImages(messages),
28
+ output: {
29
+ content: response.content,
30
+ toolCalls: response.toolCalls,
31
+ finishReason: response.finishReason,
32
+ },
33
+ usage: {
34
+ promptTokens: (usage === null || usage === void 0 ? void 0 : usage.promptTokens) || ((_a = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _a === void 0 ? void 0 : _a.prompt_tokens) || 0,
35
+ completionTokens: (usage === null || usage === void 0 ? void 0 : usage.completionTokens) || ((_b = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _b === void 0 ? void 0 : _b.completion_tokens) || 0,
36
+ totalTokens: (usage === null || usage === void 0 ? void 0 : usage.totalTokens) || ((_c = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _c === void 0 ? void 0 : _c.total_tokens) || 0,
37
+ promptDetails: {
38
+ textTokens: (_d = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _d === void 0 ? void 0 : _d.prompt_tokens,
39
+ },
40
+ completionDetails: {
41
+ textTokens: (_e = raw === null || raw === void 0 ? void 0 : raw.usage) === null || _e === void 0 ? void 0 : _e.completion_tokens,
42
+ }
43
+ },
44
+ latencyMs: latencyMs,
45
+ metadata: metadata,
46
+ };
47
+ }
48
+ }
49
+ exports.QwenLogAdapter = QwenLogAdapter;
@@ -0,0 +1,6 @@
1
+ import { ChatResponse } from "../../common/types";
2
+ import { OutputAdapter } from "../../core/LLMAdapter";
3
+ export declare class QwenOutputAdapter implements OutputAdapter {
4
+ parse(providerResponse: any): ChatResponse;
5
+ }
6
+ //# sourceMappingURL=QwenOutputAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QwenOutputAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/qwen/QwenOutputAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,qBAAa,iBAAkB,YAAW,aAAa;IAC9C,KAAK,CAAC,gBAAgB,EAAE,GAAG,GAAG,YAAY;CAGlD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QwenOutputAdapter = void 0;
4
+ class QwenOutputAdapter {
5
+ parse(providerResponse) {
6
+ return providerResponse;
7
+ }
8
+ }
9
+ exports.QwenOutputAdapter = QwenOutputAdapter;
@@ -0,0 +1,13 @@
1
+ import { PromptAdapterOptions, PromptAdapter, ChatStreamOptions } from "../../core/LLMAdapter";
2
+ import { ChatMessage, ToolDefinition, ChatResponse } from "../../common/types";
3
+ export declare class QwenPromptAdapter implements PromptAdapter {
4
+ private readonly opts;
5
+ private readonly endpoint;
6
+ private messages;
7
+ constructor(opts: PromptAdapterOptions);
8
+ formatMessage(message: ChatMessage): any;
9
+ sendToProvider(messages: any, tools?: ToolDefinition[], toolChoice?: "auto" | "none" | string, attachedFile?: string | string[], model?: string): Promise<ChatResponse>;
10
+ streamFromProvider?({ messages, tools, toolChoice, model, onChunk, onFinalResponse, }: ChatStreamOptions): Promise<ChatResponse>;
11
+ private request;
12
+ }
13
+ //# sourceMappingURL=QwenPromptAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QwenPromptAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/qwen/QwenPromptAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAClH,OAAO,EAAE,WAAW,EAAY,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIzF,qBAAa,iBAAkB,YAAW,aAAa;IAIzC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAa;gBAEA,IAAI,EAAE,oBAAoB;IAMhD,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,GAAG;IA8EzC,cAAc,CAClB,QAAQ,EAAE,GAAG,EACb,KAAK,GAAE,cAAc,EAAO,EAC5B,UAAU,GAAE,MAAM,GAAG,MAAM,GAAG,MAAe,EAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC;IAiClB,kBAAkB,CAAC,CAAC,EACxB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,KAAK,EACL,OAAO,EACP,eAAe,GAChB,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;YA0I9B,OAAO;CAetB"}