repoburg 1.3.67 → 1.3.69

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 (26) hide show
  1. package/backend/.env +2 -2
  2. package/backend/dist/src/application-state/application-state.controller.d.ts +5 -0
  3. package/backend/dist/src/application-state/application-state.controller.js +22 -0
  4. package/backend/dist/src/application-state/application-state.controller.js.map +1 -1
  5. package/backend/dist/src/application-state/application-state.service.d.ts +2 -0
  6. package/backend/dist/src/application-state/application-state.service.js +12 -5
  7. package/backend/dist/src/application-state/application-state.service.js.map +1 -1
  8. package/backend/dist/src/application-state/dto/set-alibaba-config.dto.d.ts +3 -0
  9. package/backend/dist/src/application-state/dto/set-alibaba-config.dto.js +21 -0
  10. package/backend/dist/src/application-state/dto/set-alibaba-config.dto.js.map +1 -0
  11. package/backend/dist/src/core-entities/llm-call-log.entity.d.ts +1 -1
  12. package/backend/dist/src/core-entities/llm-call-log.entity.js.map +1 -1
  13. package/backend/dist/src/llm-call-logs/dto/llm-call-log.dto.d.ts +1 -1
  14. package/backend/dist/src/llm-call-logs/dto/llm-call-log.dto.js +1 -1
  15. package/backend/dist/src/llm-call-logs/dto/llm-call-log.dto.js.map +1 -1
  16. package/backend/dist/src/llm-provider/alibaba-llm.provider.d.ts +15 -0
  17. package/backend/dist/src/llm-provider/alibaba-llm.provider.js +410 -0
  18. package/backend/dist/src/llm-provider/alibaba-llm.provider.js.map +1 -0
  19. package/backend/dist/src/llm-provider/llm-provider.interface.d.ts +1 -1
  20. package/backend/dist/src/llm-provider/llm-provider.module.js +2 -0
  21. package/backend/dist/src/llm-provider/llm-provider.module.js.map +1 -1
  22. package/backend/dist/src/llm-provider/proxy-llm.provider.d.ts +3 -1
  23. package/backend/dist/src/llm-provider/proxy-llm.provider.js +15 -3
  24. package/backend/dist/src/llm-provider/proxy-llm.provider.js.map +1 -1
  25. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  26. package/package.json +1 -1
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var AlibabaLlmProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AlibabaLlmProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const application_state_service_1 = require("../application-state/application-state.service");
16
+ const llm_call_logs_service_1 = require("../llm-call-logs/llm-call-logs.service");
17
+ let AlibabaLlmProvider = AlibabaLlmProvider_1 = class AlibabaLlmProvider {
18
+ constructor(applicationStateService, llmCallLogsService) {
19
+ this.applicationStateService = applicationStateService;
20
+ this.llmCallLogsService = llmCallLogsService;
21
+ this.logger = new common_1.Logger(AlibabaLlmProvider_1.name);
22
+ this.baseUrl = 'https://coding-intl.dashscope.aliyuncs.com/v1';
23
+ }
24
+ mapHistory(history) {
25
+ return history.map((turn) => {
26
+ const mappedTurn = {
27
+ role: turn.role === 'model' ? 'assistant' : 'user',
28
+ content: turn.parts.map((p) => p.text).join(''),
29
+ };
30
+ if (turn.thoughts) {
31
+ mappedTurn.thoughts = turn.thoughts;
32
+ }
33
+ if (turn.tool_calls) {
34
+ mappedTurn.tool_calls = turn.tool_calls.map((tc) => ({
35
+ id: tc.id,
36
+ type: tc.type,
37
+ function: {
38
+ name: tc.function.name,
39
+ arguments: typeof tc.function.arguments === 'string'
40
+ ? tc.function.arguments
41
+ : JSON.stringify(tc.function.arguments),
42
+ },
43
+ }));
44
+ }
45
+ return mappedTurn;
46
+ });
47
+ }
48
+ mapTools(tools) {
49
+ if (!tools || tools.length === 0)
50
+ return undefined;
51
+ return tools.map((tool) => ({
52
+ type: tool.type,
53
+ function: {
54
+ name: tool.function.name,
55
+ description: tool.function.description,
56
+ parameters: tool.function.parameters,
57
+ },
58
+ }));
59
+ }
60
+ async getModels() {
61
+ const apiKey = await this.applicationStateService.getAlibabaApiKey();
62
+ if (!apiKey)
63
+ return [];
64
+ const models = [
65
+ { id: 'qwen3.5-plus', name: 'Qwen3.5 Plus (Vision)' },
66
+ { id: 'kimi-k2.5', name: 'Kimi K2.5 (Vision)' },
67
+ { id: 'glm-5', name: 'GLM-5' },
68
+ { id: 'MiniMax-M2.5', name: 'MiniMax M2.5' },
69
+ { id: 'qwen3-max-2026-01-23', name: 'Qwen3 Max' },
70
+ { id: 'qwen3-coder-next', name: 'Qwen3 Coder Next' },
71
+ { id: 'qwen3-coder-plus', name: 'Qwen3 Coder Plus' },
72
+ { id: 'glm-4.7', name: 'GLM-4.7' },
73
+ ];
74
+ return models.map((m) => ({ ...m, provider: 'alibaba' }));
75
+ }
76
+ async generateContent(request) {
77
+ const apiKey = await this.applicationStateService.getAlibabaApiKey();
78
+ if (!apiKey) {
79
+ throw new Error('Alibaba API Key is not configured in settings.');
80
+ }
81
+ const { prompt, systemInstruction, history, modelId, generationConfig, tools, tool_choice, onToken, abortController, } = request;
82
+ const alibabaModelId = modelId
83
+ ? modelId.replace(/^alibaba\//, '')
84
+ : 'qwen3.5-plus';
85
+ const messages = [];
86
+ if (systemInstruction) {
87
+ messages.push({ role: 'system', content: systemInstruction });
88
+ }
89
+ if (history && history.length > 0) {
90
+ messages.push(...this.mapHistory(history));
91
+ }
92
+ else {
93
+ messages.push({ role: 'user', content: prompt });
94
+ }
95
+ await this.applicationStateService.trackUsedModel(modelId);
96
+ this.logger.log(`Calling Alibaba API with model: ${alibabaModelId}`);
97
+ const startTime = Date.now();
98
+ let llmCallLogId = null;
99
+ try {
100
+ llmCallLogId = (await this.llmCallLogsService.createLog({
101
+ session_input_id: 'pending',
102
+ provider: 'alibaba',
103
+ model_id: alibabaModelId,
104
+ request_body: JSON.stringify({
105
+ model: alibabaModelId,
106
+ messages,
107
+ tools,
108
+ tool_choice,
109
+ stream: !!onToken,
110
+ temperature: generationConfig?.temperature,
111
+ max_tokens: generationConfig?.maxOutputTokens,
112
+ top_p: generationConfig?.topP,
113
+ }),
114
+ })).id;
115
+ }
116
+ catch (logError) {
117
+ this.logger.warn(`Failed to create LLM call log: ${logError.message}`);
118
+ }
119
+ try {
120
+ const body = {
121
+ model: alibabaModelId,
122
+ messages,
123
+ };
124
+ if (tools && tools.length > 0) {
125
+ body.tools = this.mapTools(tools);
126
+ if (tool_choice) {
127
+ body.tool_choice = tool_choice;
128
+ }
129
+ }
130
+ if (onToken) {
131
+ body.stream = true;
132
+ body.stream_options = { include_usage: true };
133
+ }
134
+ if (generationConfig) {
135
+ if (generationConfig.temperature !== undefined)
136
+ body.temperature = generationConfig.temperature;
137
+ if (generationConfig.maxOutputTokens !== undefined)
138
+ body.max_tokens = generationConfig.maxOutputTokens;
139
+ if (generationConfig.topP !== undefined)
140
+ body.top_p = generationConfig.topP;
141
+ if (generationConfig.reasoning) {
142
+ body.enable_thinking = true;
143
+ }
144
+ }
145
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
146
+ method: 'POST',
147
+ headers: {
148
+ 'Content-Type': 'application/json',
149
+ Authorization: `Bearer ${apiKey}`,
150
+ },
151
+ body: JSON.stringify(body),
152
+ signal: abortController?.signal,
153
+ });
154
+ if (!response.ok) {
155
+ const errorText = await response.text();
156
+ const errorData = this.tryParseJson(errorText);
157
+ const errorMessage = errorData?.message || `Alibaba API error: ${response.statusText}`;
158
+ if (llmCallLogId) {
159
+ try {
160
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
161
+ status_code: response.status,
162
+ latency_ms: Date.now() - startTime,
163
+ error_message: errorMessage,
164
+ response_body: errorText,
165
+ });
166
+ }
167
+ catch (updateError) {
168
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
169
+ }
170
+ }
171
+ throw new Error(errorMessage);
172
+ }
173
+ let accumulatedResponseBody = '';
174
+ if (onToken && response.body) {
175
+ const reader = response.body.getReader();
176
+ const decoder = new TextDecoder();
177
+ let buffer = '';
178
+ let accumulatedResponse = '';
179
+ let accumulatedReasoning = '';
180
+ let isFirst = true;
181
+ let usageData = null;
182
+ const accumulatedToolCalls = new Map();
183
+ while (true) {
184
+ if (abortController?.signal?.aborted) {
185
+ throw new DOMException('The operation was aborted', 'AbortError');
186
+ }
187
+ const { done, value } = await reader.read();
188
+ if (done) {
189
+ break;
190
+ }
191
+ buffer += decoder.decode(value, { stream: true });
192
+ const lines = buffer.split('\n');
193
+ buffer = lines.pop() || '';
194
+ for (const line of lines) {
195
+ if (line.startsWith('data: ')) {
196
+ const dataStr = line.substring(6);
197
+ if (dataStr.trim() === '[DONE]') {
198
+ break;
199
+ }
200
+ try {
201
+ const parsed = JSON.parse(dataStr);
202
+ const chunk = parsed.choices?.[0]?.delta?.content;
203
+ if (chunk) {
204
+ accumulatedResponse += chunk;
205
+ onToken(chunk, isFirst);
206
+ if (isFirst) {
207
+ isFirst = false;
208
+ }
209
+ }
210
+ const reasoningChunk = parsed.choices?.[0]?.delta?.reasoning_content;
211
+ if (reasoningChunk) {
212
+ accumulatedReasoning += reasoningChunk;
213
+ }
214
+ const deltaToolCalls = parsed.choices?.[0]?.delta?.tool_calls;
215
+ if (deltaToolCalls) {
216
+ for (const deltaCall of deltaToolCalls) {
217
+ const index = deltaCall.index;
218
+ if (!accumulatedToolCalls.has(index)) {
219
+ accumulatedToolCalls.set(index, {
220
+ id: deltaCall.id,
221
+ type: deltaCall.type,
222
+ function: {
223
+ name: deltaCall.function?.name || '',
224
+ arguments: '',
225
+ },
226
+ });
227
+ }
228
+ const existing = accumulatedToolCalls.get(index);
229
+ if (deltaCall.function?.arguments) {
230
+ existing.function.arguments +=
231
+ deltaCall.function.arguments;
232
+ }
233
+ }
234
+ }
235
+ if (parsed.usage) {
236
+ usageData = parsed.usage;
237
+ accumulatedResponseBody += dataStr + '\n';
238
+ }
239
+ }
240
+ catch (e) {
241
+ this.logger.warn(`Error parsing stream chunk: ${dataStr}`, e);
242
+ }
243
+ }
244
+ }
245
+ }
246
+ const finalToolCalls = [];
247
+ for (const toolCall of accumulatedToolCalls.values()) {
248
+ try {
249
+ finalToolCalls.push({
250
+ ...toolCall,
251
+ function: {
252
+ ...toolCall.function,
253
+ arguments: typeof toolCall.function.arguments === 'string'
254
+ ? JSON.parse(toolCall.function.arguments)
255
+ : toolCall.function.arguments,
256
+ },
257
+ });
258
+ }
259
+ catch (e) {
260
+ this.logger.warn(`Failed to parse tool call arguments: ${toolCall.function.arguments}`, e);
261
+ }
262
+ }
263
+ if (usageData) {
264
+ this.logger.log(`Alibaba stream finished. Usage: ${usageData.prompt_tokens} prompt, ${usageData.completion_tokens} completion tokens.`);
265
+ if (llmCallLogId) {
266
+ try {
267
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
268
+ status_code: response.status,
269
+ latency_ms: Date.now() - startTime,
270
+ response_body: accumulatedResponseBody ||
271
+ JSON.stringify({ usage: usageData, stream_chunks: '...' }),
272
+ input_tokens: usageData.prompt_tokens,
273
+ output_tokens: usageData.completion_tokens,
274
+ cached_tokens: usageData.prompt_tokens_details?.cached_tokens,
275
+ });
276
+ }
277
+ catch (updateError) {
278
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
279
+ }
280
+ }
281
+ return {
282
+ text: accumulatedResponse,
283
+ usage: {
284
+ inputTokens: usageData.prompt_tokens,
285
+ outputTokens: usageData.completion_tokens,
286
+ cachedTokens: usageData.prompt_tokens_details?.cached_tokens,
287
+ },
288
+ tool_calls: finalToolCalls.length > 0 ? finalToolCalls : undefined,
289
+ thoughts: accumulatedReasoning || undefined,
290
+ };
291
+ }
292
+ if (llmCallLogId) {
293
+ try {
294
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
295
+ status_code: response.status,
296
+ latency_ms: Date.now() - startTime,
297
+ response_body: accumulatedResponseBody ||
298
+ JSON.stringify({ stream_chunks: '...' }),
299
+ });
300
+ }
301
+ catch (updateError) {
302
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
303
+ }
304
+ }
305
+ return {
306
+ text: accumulatedResponse,
307
+ tool_calls: finalToolCalls.length > 0 ? finalToolCalls : undefined,
308
+ thoughts: accumulatedReasoning || undefined,
309
+ };
310
+ }
311
+ const data = await response.json();
312
+ const content = data.choices?.[0]?.message?.content;
313
+ const rawToolCalls = data.choices?.[0]?.message?.tool_calls;
314
+ const reasoningContent = data.choices?.[0]?.message?.reasoning_content;
315
+ const usage = data.usage;
316
+ let parsedToolCalls;
317
+ if (rawToolCalls && rawToolCalls.length > 0) {
318
+ parsedToolCalls = rawToolCalls.map((tc) => ({
319
+ id: tc.id,
320
+ type: tc.type,
321
+ function: {
322
+ name: tc.function.name,
323
+ arguments: typeof tc.function.arguments === 'string'
324
+ ? JSON.parse(tc.function.arguments)
325
+ : tc.function.arguments,
326
+ },
327
+ }));
328
+ }
329
+ if (!content && !parsedToolCalls) {
330
+ throw new Error('Alibaba returned an empty response.');
331
+ }
332
+ if (usage) {
333
+ this.logger.log(`Alibaba response. Usage: ${usage.prompt_tokens} prompt, ${usage.completion_tokens} completion tokens`);
334
+ if (llmCallLogId) {
335
+ try {
336
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
337
+ status_code: response.status,
338
+ latency_ms: Date.now() - startTime,
339
+ response_body: JSON.stringify(data),
340
+ input_tokens: usage.prompt_tokens,
341
+ output_tokens: usage.completion_tokens,
342
+ cached_tokens: usage.prompt_tokens_details?.cached_tokens,
343
+ });
344
+ }
345
+ catch (updateError) {
346
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
347
+ }
348
+ }
349
+ return {
350
+ text: content || '',
351
+ usage: {
352
+ inputTokens: usage.prompt_tokens,
353
+ outputTokens: usage.completion_tokens,
354
+ cachedTokens: usage.prompt_tokens_details?.cached_tokens,
355
+ },
356
+ tool_calls: parsedToolCalls,
357
+ thoughts: reasoningContent || undefined,
358
+ };
359
+ }
360
+ if (llmCallLogId) {
361
+ try {
362
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
363
+ status_code: response.status,
364
+ latency_ms: Date.now() - startTime,
365
+ response_body: JSON.stringify(data),
366
+ });
367
+ }
368
+ catch (updateError) {
369
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
370
+ }
371
+ }
372
+ return {
373
+ text: content || '',
374
+ tool_calls: parsedToolCalls,
375
+ thoughts: reasoningContent || undefined,
376
+ };
377
+ }
378
+ catch (error) {
379
+ this.logger.error(`Alibaba generation failed: ${error.message}`);
380
+ if (llmCallLogId) {
381
+ try {
382
+ await this.llmCallLogsService.updateLog(llmCallLogId, {
383
+ status_code: null,
384
+ latency_ms: Date.now() - startTime,
385
+ error_message: error.message,
386
+ });
387
+ }
388
+ catch (updateError) {
389
+ this.logger.warn(`Failed to update LLM call log: ${updateError.message}`);
390
+ }
391
+ }
392
+ throw error;
393
+ }
394
+ }
395
+ tryParseJson(text) {
396
+ try {
397
+ return JSON.parse(text);
398
+ }
399
+ catch {
400
+ return null;
401
+ }
402
+ }
403
+ };
404
+ exports.AlibabaLlmProvider = AlibabaLlmProvider;
405
+ exports.AlibabaLlmProvider = AlibabaLlmProvider = AlibabaLlmProvider_1 = __decorate([
406
+ (0, common_1.Injectable)(),
407
+ __metadata("design:paramtypes", [application_state_service_1.ApplicationStateService,
408
+ llm_call_logs_service_1.LlmCallLogsService])
409
+ ], AlibabaLlmProvider);
410
+ //# sourceMappingURL=alibaba-llm.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alibaba-llm.provider.js","sourceRoot":"","sources":["../../../src/llm-provider/alibaba-llm.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AAUpD,8FAAyF;AACzF,kFAA4E;AAGrE,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAI7B,YACmB,uBAAgD,EAChD,kBAAsC;QADtC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,uBAAkB,GAAlB,kBAAkB,CAAoB;QALxC,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,YAAO,GAAG,+CAA+C,CAAC;IAKxE,CAAC;IAEI,UAAU,CAAC,OAAqB;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,UAAU,GAAQ;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;gBAClD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;aAChD,CAAC;YAGF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtC,CAAC;YAGD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACnD,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;wBAEtB,SAAS,EACP,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;4BACvC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;4BACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;qBAC5C;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,KAAyB;QACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEnD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;aACrC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAGvB,MAAM,MAAM,GAAG;YACb,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,uBAAuB,EAAE;YACrD,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE;YAC/C,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9B,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;YAC5C,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,EAAE;YACjD,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACpD,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACpD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SACnC,CAAC;QAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA2B;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EACJ,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,OAAO,EACP,eAAe,GAChB,GAAG,OAAO,CAAC;QAGZ,MAAM,cAAc,GAAG,OAAO;YAC5B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YACnC,CAAC,CAAC,cAAc,CAAC;QAEnB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,IAAI,iBAAiB,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAChE,CAAC;QAGD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,cAAc,EAAE,CAAC,CAAC;QAGrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,IAAI,CAAC;YACH,YAAY,GAAG,CACb,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;gBACtC,gBAAgB,EAAE,SAAS;gBAC3B,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,cAAc;gBACxB,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC3B,KAAK,EAAE,cAAc;oBACrB,QAAQ;oBACR,KAAK;oBACL,WAAW;oBACX,MAAM,EAAE,CAAC,CAAC,OAAO;oBACjB,WAAW,EAAE,gBAAgB,EAAE,WAAW;oBAC1C,UAAU,EAAE,gBAAgB,EAAE,eAAe;oBAC7C,KAAK,EAAE,gBAAgB,EAAE,IAAI;iBAC9B,CAAC;aACH,CAAC,CACH,CAAC,EAAE,CAAC;QACP,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAQ;gBAChB,KAAK,EAAE,cAAc;gBACrB,QAAQ;aACT,CAAC;YAGF,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,cAAc,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAChD,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,IAAI,gBAAgB,CAAC,WAAW,KAAK,SAAS;oBAC5C,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;gBAClD,IAAI,gBAAgB,CAAC,eAAe,KAAK,SAAS;oBAChD,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC;gBACrD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS;oBACrC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;gBAGrC,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;oBAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,eAAe,EAAE,MAAM;aAChC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC/C,MAAM,YAAY,GAChB,SAAS,EAAE,OAAO,IAAI,sBAAsB,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAGpE,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;4BACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;4BAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;4BAClC,aAAa,EAAE,YAAY;4BAC3B,aAAa,EAAE,SAAS;yBACzB,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAGD,IAAI,uBAAuB,GAAG,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,mBAAmB,GAAG,EAAE,CAAC;gBAC7B,IAAI,oBAAoB,GAAG,EAAE,CAAC;gBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,SAAS,GAMF,IAAI,CAAC;gBAGhB,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAuB,CAAC;gBAE5D,OAAO,IAAI,EAAE,CAAC;oBACZ,IAAI,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;wBACrC,MAAM,IAAI,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;oBACpE,CAAC;oBAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;oBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;4BAClC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;gCAChC,MAAM;4BACR,CAAC;4BACD,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gCACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;gCAClD,IAAI,KAAK,EAAE,CAAC;oCACV,mBAAmB,IAAI,KAAK,CAAC;oCAC7B,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oCACxB,IAAI,OAAO,EAAE,CAAC;wCACZ,OAAO,GAAG,KAAK,CAAC;oCAClB,CAAC;gCACH,CAAC;gCAGD,MAAM,cAAc,GAClB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC;gCAChD,IAAI,cAAc,EAAE,CAAC;oCACnB,oBAAoB,IAAI,cAAc,CAAC;gCACzC,CAAC;gCAGD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;gCAC9D,IAAI,cAAc,EAAE,CAAC;oCACnB,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;wCACvC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;wCAC9B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;4CAErC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE;gDAC9B,EAAE,EAAE,SAAS,CAAC,EAAE;gDAChB,IAAI,EAAE,SAAS,CAAC,IAAI;gDACpB,QAAQ,EAAE;oDACR,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;oDACpC,SAAS,EAAE,EAAE;iDACd;6CACF,CAAC,CAAC;wCACL,CAAC;wCAGD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;wCAClD,IAAI,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;4CAClC,QAAQ,CAAC,QAAQ,CAAC,SAAS;gDACzB,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;wCACjC,CAAC;oCACH,CAAC;gCACH,CAAC;gCAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oCACjB,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;oCAEzB,uBAAuB,IAAI,OAAO,GAAG,IAAI,CAAC;gCAC5C,CAAC;4BACH,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;4BAChE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAGD,MAAM,cAAc,GAAkB,EAAE,CAAC;gBACzC,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;oBACrD,IAAI,CAAC;wBACH,cAAc,CAAC,IAAI,CAAC;4BAClB,GAAG,QAAQ;4BACX,QAAQ,EAAE;gCACR,GAAG,QAAQ,CAAC,QAAQ;gCACpB,SAAS,EACP,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;oCAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAmB,CAAC;oCACnD,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS;6BAClC;yBACF,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,wCAAwC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,EACrE,CAAC,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,mCAAmC,SAAS,CAAC,aAAa,YAAY,SAAS,CAAC,iBAAiB,qBAAqB,CACvH,CAAC;oBAGF,IAAI,YAAY,EAAE,CAAC;wBACjB,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;gCACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;gCAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gCAClC,aAAa,EACX,uBAAuB;oCACvB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;gCAC5D,YAAY,EAAE,SAAS,CAAC,aAAa;gCACrC,aAAa,EAAE,SAAS,CAAC,iBAAiB;gCAC1C,aAAa,EAAE,SAAS,CAAC,qBAAqB,EAAE,aAAa;6BAC9D,CAAC,CAAC;wBACL,CAAC;wBAAC,OAAO,WAAW,EAAE,CAAC;4BACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAED,OAAO;wBACL,IAAI,EAAE,mBAAmB;wBACzB,KAAK,EAAE;4BACL,WAAW,EAAE,SAAS,CAAC,aAAa;4BACpC,YAAY,EAAE,SAAS,CAAC,iBAAiB;4BACzC,YAAY,EAAE,SAAS,CAAC,qBAAqB,EAAE,aAAa;yBAC7D;wBACD,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;wBAClE,QAAQ,EAAE,oBAAoB,IAAI,SAAS;qBAC5C,CAAC;gBACJ,CAAC;gBAGD,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;4BACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;4BAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;4BAClC,aAAa,EACX,uBAAuB;gCACvB,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;yBAC3C,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,mBAAmB;oBACzB,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;oBAClE,QAAQ,EAAE,oBAAoB,IAAI,SAAS;iBAC5C,CAAC;YACJ,CAAC;YAGD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC;YAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAGzB,IAAI,eAA0C,CAAC;YAC/C,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;oBAC/C,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;wBACtB,SAAS,EACP,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;4BACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACnC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;qBAC5B;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,4BAA4B,KAAK,CAAC,aAAa,YAAY,KAAK,CAAC,iBAAiB,oBAAoB,CACvG,CAAC;gBAGF,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;4BACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;4BAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;4BAClC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;4BACnC,YAAY,EAAE,KAAK,CAAC,aAAa;4BACjC,aAAa,EAAE,KAAK,CAAC,iBAAiB;4BACtC,aAAa,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa;yBAC1D,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,OAAO,IAAI,EAAE;oBACnB,KAAK,EAAE;wBACL,WAAW,EAAE,KAAK,CAAC,aAAa;wBAChC,YAAY,EAAE,KAAK,CAAC,iBAAiB;wBACrC,YAAY,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa;qBACzD;oBACD,UAAU,EAAE,eAAe;oBAC3B,QAAQ,EAAE,gBAAgB,IAAI,SAAS;iBACxC,CAAC;YACJ,CAAC;YAGD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;wBACpD,WAAW,EAAE,QAAQ,CAAC,MAAM;wBAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAClC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBACpC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,OAAO,IAAI,EAAE;gBACnB,UAAU,EAAE,eAAe;gBAC3B,QAAQ,EAAE,gBAAgB,IAAI,SAAS;aACxC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAGjE,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAAE;wBACpD,WAAW,EAAE,IAAI;wBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAClC,aAAa,EAAE,KAAK,CAAC,OAAO;qBAC7B,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kCAAkC,WAAW,CAAC,OAAO,EAAE,CACxD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AA/eY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAMiC,mDAAuB;QAC5B,0CAAkB;GAN9C,kBAAkB,CA+e9B"}
@@ -56,7 +56,7 @@ export interface LlmProviderRequest {
56
56
  export interface LlmModel {
57
57
  id: string;
58
58
  name: string;
59
- provider: 'gemini' | 'openrouter' | 'zai';
59
+ provider: 'gemini' | 'openrouter' | 'zai' | 'alibaba';
60
60
  }
61
61
  export interface LlmUsage {
62
62
  inputTokens?: number;
@@ -15,6 +15,7 @@ const proxy_llm_provider_1 = require("./proxy-llm.provider");
15
15
  const application_state_module_1 = require("../application-state/application-state.module");
16
16
  const llm_provider_controller_1 = require("./llm-provider.controller");
17
17
  const zai_llm_provider_1 = require("./zai-llm.provider");
18
+ const alibaba_llm_provider_1 = require("./alibaba-llm.provider");
18
19
  const llm_call_logs_module_1 = require("../llm-call-logs/llm-call-logs.module");
19
20
  let LlmProviderModule = class LlmProviderModule {
20
21
  };
@@ -26,6 +27,7 @@ exports.LlmProviderModule = LlmProviderModule = __decorate([
26
27
  providers: [
27
28
  openrouter_llm_provider_1.OpenRouterLlmProvider,
28
29
  zai_llm_provider_1.ZaiLlmProvider,
30
+ alibaba_llm_provider_1.AlibabaLlmProvider,
29
31
  {
30
32
  provide: llm_provider_interface_1.LLM_PROVIDER,
31
33
  useClass: proxy_llm_provider_1.ProxyLlmProvider,
@@ -1 +1 @@
1
- {"version":3,"file":"llm-provider.module.js","sourceRoot":"","sources":["../../../src/llm-provider/llm-provider.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qEAAwD;AACxD,2DAAuD;AACvD,uEAAkE;AAClE,6DAAwD;AACxD,4FAAuF;AACvF,uEAAkE;AAClE,yDAAoD;AACpD,gFAA0E;AAenE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAb7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,EAAE,iDAAsB,EAAE,wCAAiB,CAAC;QAClE,WAAW,EAAE,CAAC,+CAAqB,CAAC;QACpC,SAAS,EAAE;YACT,+CAAqB;YACrB,iCAAc;YACd;gBACE,OAAO,EAAE,qCAAY;gBACrB,QAAQ,EAAE,qCAAgB;aAC3B;SACF;QACD,OAAO,EAAE,CAAC,qCAAY,CAAC;KACxB,CAAC;GACW,iBAAiB,CAAG"}
1
+ {"version":3,"file":"llm-provider.module.js","sourceRoot":"","sources":["../../../src/llm-provider/llm-provider.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qEAAwD;AACxD,2DAAuD;AACvD,uEAAkE;AAClE,6DAAwD;AACxD,4FAAuF;AACvF,uEAAkE;AAClE,yDAAoD;AACpD,iEAA4D;AAC5D,gFAA0E;AAgBnE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAd7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,EAAE,iDAAsB,EAAE,wCAAiB,CAAC;QAClE,WAAW,EAAE,CAAC,+CAAqB,CAAC;QACpC,SAAS,EAAE;YACT,+CAAqB;YACrB,iCAAc;YACd,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAY;gBACrB,QAAQ,EAAE,qCAAgB;aAC3B;SACF;QACD,OAAO,EAAE,CAAC,qCAAY,CAAC;KACxB,CAAC;GACW,iBAAiB,CAAG"}
@@ -2,11 +2,13 @@ import { LlmProvider, LlmProviderRequest, LlmModel, LlmResponse } from './llm-pr
2
2
  import { GeminiLlmProvider } from '../gemini/gemini-llm.provider';
3
3
  import { OpenRouterLlmProvider } from './openrouter-llm.provider';
4
4
  import { ZaiLlmProvider } from './zai-llm.provider';
5
+ import { AlibabaLlmProvider } from './alibaba-llm.provider';
5
6
  export declare class ProxyLlmProvider implements LlmProvider {
6
7
  private readonly geminiProvider;
7
8
  private readonly openRouterProvider;
8
9
  private readonly zaiProvider;
9
- constructor(geminiProvider: GeminiLlmProvider, openRouterProvider: OpenRouterLlmProvider, zaiProvider: ZaiLlmProvider);
10
+ private readonly alibabaProvider;
11
+ constructor(geminiProvider: GeminiLlmProvider, openRouterProvider: OpenRouterLlmProvider, zaiProvider: ZaiLlmProvider, alibabaProvider: AlibabaLlmProvider);
10
12
  getModels(): Promise<LlmModel[]>;
11
13
  generateContent(request: LlmProviderRequest): Promise<LlmResponse>;
12
14
  }
@@ -14,20 +14,31 @@ const common_1 = require("@nestjs/common");
14
14
  const gemini_llm_provider_1 = require("../gemini/gemini-llm.provider");
15
15
  const openrouter_llm_provider_1 = require("./openrouter-llm.provider");
16
16
  const zai_llm_provider_1 = require("./zai-llm.provider");
17
+ const alibaba_llm_provider_1 = require("./alibaba-llm.provider");
17
18
  let ProxyLlmProvider = class ProxyLlmProvider {
18
- constructor(geminiProvider, openRouterProvider, zaiProvider) {
19
+ constructor(geminiProvider, openRouterProvider, zaiProvider, alibabaProvider) {
19
20
  this.geminiProvider = geminiProvider;
20
21
  this.openRouterProvider = openRouterProvider;
21
22
  this.zaiProvider = zaiProvider;
23
+ this.alibabaProvider = alibabaProvider;
22
24
  }
23
25
  async getModels() {
24
26
  const geminiModels = await this.geminiProvider.getModels();
25
27
  const openRouterModels = await this.openRouterProvider.getModels();
26
28
  const zaiModels = await this.zaiProvider.getModels();
27
- return [...geminiModels, ...openRouterModels, ...zaiModels];
29
+ const alibabaModels = await this.alibabaProvider.getModels();
30
+ return [
31
+ ...geminiModels,
32
+ ...alibabaModels,
33
+ ...zaiModels,
34
+ ...openRouterModels,
35
+ ];
28
36
  }
29
37
  async generateContent(request) {
30
38
  const { modelId } = request;
39
+ if (modelId?.startsWith('alibaba/')) {
40
+ return this.alibabaProvider.generateContent(request);
41
+ }
31
42
  if (modelId?.startsWith('zai/')) {
32
43
  return this.zaiProvider.generateContent(request);
33
44
  }
@@ -45,6 +56,7 @@ exports.ProxyLlmProvider = ProxyLlmProvider = __decorate([
45
56
  (0, common_1.Injectable)(),
46
57
  __metadata("design:paramtypes", [gemini_llm_provider_1.GeminiLlmProvider,
47
58
  openrouter_llm_provider_1.OpenRouterLlmProvider,
48
- zai_llm_provider_1.ZaiLlmProvider])
59
+ zai_llm_provider_1.ZaiLlmProvider,
60
+ alibaba_llm_provider_1.AlibabaLlmProvider])
49
61
  ], ProxyLlmProvider);
50
62
  //# sourceMappingURL=proxy-llm.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-llm.provider.js","sourceRoot":"","sources":["../../../src/llm-provider/proxy-llm.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAO5C,uEAAkE;AAClE,uEAAkE;AAClE,yDAAoD;AAG7C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmB,cAAiC,EACjC,kBAAyC,EACzC,WAA2B;QAF3B,mBAAc,GAAd,cAAc,CAAmB;QACjC,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,gBAAW,GAAX,WAAW,CAAgB;IAC3C,CAAC;IAEJ,KAAK,CAAC,SAAS;QACb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3D,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA2B;QAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE5B,IAAI,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAKD,MAAM,YAAY,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF,CAAA;AAhCY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAGwB,uCAAiB;QACb,+CAAqB;QAC5B,iCAAc;GAJnC,gBAAgB,CAgC5B"}
1
+ {"version":3,"file":"proxy-llm.provider.js","sourceRoot":"","sources":["../../../src/llm-provider/proxy-llm.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAO5C,uEAAkE;AAClE,uEAAkE;AAClE,yDAAoD;AACpD,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmB,cAAiC,EACjC,kBAAyC,EACzC,WAA2B,EAC3B,eAAmC;QAHnC,mBAAc,GAAd,cAAc,CAAmB;QACjC,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,gBAAW,GAAX,WAAW,CAAgB;QAC3B,oBAAe,GAAf,eAAe,CAAoB;IACnD,CAAC;IAEJ,KAAK,CAAC,SAAS;QACb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3D,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;QAC7D,OAAO;YACL,GAAG,YAAY;YACf,GAAG,aAAa;YAChB,GAAG,SAAS;YACZ,GAAG,gBAAgB;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA2B;QAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAE5B,IAAI,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAKD,MAAM,YAAY,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF,CAAA;AA3CY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAGwB,uCAAiB;QACb,+CAAqB;QAC5B,iCAAc;QACV,yCAAkB;GAL3C,gBAAgB,CA2C5B"}