universal-llm-client 3.1.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +177 -0
- package/dist/ai-model.d.ts +87 -0
- package/dist/ai-model.d.ts.map +1 -1
- package/dist/ai-model.js +99 -0
- package/dist/ai-model.js.map +1 -1
- package/dist/auditor.d.ts +5 -1
- package/dist/auditor.d.ts.map +1 -1
- package/dist/auditor.js +9 -0
- package/dist/auditor.js.map +1 -1
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +60 -0
- package/dist/client.js.map +1 -1
- package/dist/http.d.ts +2 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +1 -0
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +186 -6
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +14 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/providers/anthropic.d.ts +56 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +524 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/google.d.ts +5 -0
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +81 -4
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts +13 -1
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +72 -10
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +4 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +53 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/router.d.ts +50 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +319 -0
- package/dist/router.js.map +1 -1
- package/dist/stream-decoder.d.ts +29 -2
- package/dist/stream-decoder.d.ts.map +1 -1
- package/dist/stream-decoder.js +39 -11
- package/dist/stream-decoder.js.map +1 -1
- package/dist/structured-output.d.ts +370 -0
- package/dist/structured-output.d.ts.map +1 -0
- package/dist/structured-output.js +397 -0
- package/dist/structured-output.js.map +1 -0
- package/dist/zod-adapter.d.ts +44 -0
- package/dist/zod-adapter.d.ts.map +1 -0
- package/dist/zod-adapter.js +61 -0
- package/dist/zod-adapter.js.map +1 -0
- package/package.json +23 -4
- package/src/ai-model.ts +350 -0
- package/src/auditor.ts +213 -0
- package/src/client.ts +402 -0
- package/src/debug/debug-google-streaming.ts +97 -0
- package/src/debug/debug-tool-execution.ts +86 -0
- package/src/debug/test-lmstudio-tools.ts +155 -0
- package/src/demos/README.md +47 -0
- package/src/demos/basic/universal-llm-examples.ts +161 -0
- package/src/demos/mcp/astrid-memory-demo.ts +295 -0
- package/src/demos/mcp/astrid-persona-memory.ts +357 -0
- package/src/demos/mcp/mcp-mongodb-demo.ts +275 -0
- package/src/demos/mcp/simple-astrid-memory.ts +148 -0
- package/src/demos/mcp/simple-mcp-demo.ts +68 -0
- package/src/demos/mcp/working-mcp-demo.ts +62 -0
- package/src/demos/model-alias-demo.ts +0 -0
- package/src/demos/tools/RAG_MEMORY_INTEGRATION.md +267 -0
- package/src/demos/tools/astrid-memory-demo.ts +270 -0
- package/src/demos/tools/astrid-production-memory-clean.ts +785 -0
- package/src/demos/tools/astrid-production-memory.ts +558 -0
- package/src/demos/tools/basic-translation-test.ts +66 -0
- package/src/demos/tools/chromadb-similarity-tuning.ts +390 -0
- package/src/demos/tools/clean-multilingual-conversation.ts +209 -0
- package/src/demos/tools/clean-translation-test.ts +119 -0
- package/src/demos/tools/clean-universal-multilingual-test.ts +131 -0
- package/src/demos/tools/complete-rag-demo.ts +369 -0
- package/src/demos/tools/complete-tool-demo.ts +132 -0
- package/src/demos/tools/demo-tool-calling.ts +124 -0
- package/src/demos/tools/dynamic-language-switching-test.ts +251 -0
- package/src/demos/tools/hybrid-thinking-test.ts +154 -0
- package/src/demos/tools/memory-integration-test.ts +420 -0
- package/src/demos/tools/multilingual-memory-system.ts +802 -0
- package/src/demos/tools/ondemand-translation-demo.ts +655 -0
- package/src/demos/tools/production-tool-demo.ts +245 -0
- package/src/demos/tools/revolutionary-multilingual-test.ts +151 -0
- package/src/demos/tools/rigorous-language-analysis.ts +218 -0
- package/src/demos/tools/test-universal-memory-system.ts +126 -0
- package/src/demos/tools/translation-integration-guide.ts +346 -0
- package/src/demos/tools/universal-memory-system.ts +560 -0
- package/src/http.ts +247 -0
- package/src/index.ts +160 -0
- package/src/interfaces.ts +657 -0
- package/src/mcp.ts +345 -0
- package/src/providers/anthropic.ts +762 -0
- package/src/providers/google.ts +620 -0
- package/src/providers/index.ts +8 -0
- package/src/providers/ollama.ts +469 -0
- package/src/providers/openai.ts +392 -0
- package/src/router.ts +780 -0
- package/src/stream-decoder.ts +361 -0
- package/src/structured-output.ts +702 -0
- package/src/test-scripts/test-advanced-tools.ts +310 -0
- package/src/test-scripts/test-google-streaming-enhanced.ts +147 -0
- package/src/test-scripts/test-google-streaming.ts +63 -0
- package/src/test-scripts/test-google-system-prompt-comprehensive.ts +189 -0
- package/src/test-scripts/test-mcp-config.ts +28 -0
- package/src/test-scripts/test-mcp-connection.ts +29 -0
- package/src/test-scripts/test-system-message-positions.ts +163 -0
- package/src/test-scripts/test-system-prompt-improvement-demo.ts +83 -0
- package/src/test-scripts/test-tool-calling.ts +231 -0
- package/src/tests/ai-model.test.ts +1614 -0
- package/src/tests/auditor.test.ts +224 -0
- package/src/tests/http.test.ts +200 -0
- package/src/tests/interfaces.test.ts +117 -0
- package/src/tests/providers/google.test.ts +660 -0
- package/src/tests/providers/ollama.test.ts +954 -0
- package/src/tests/providers/openai.test.ts +1122 -0
- package/src/tests/router.test.ts +254 -0
- package/src/tests/stream-decoder.test.ts +179 -0
- package/src/tests/structured-output.test.ts +1340 -0
- package/src/tests/tools.test.ts +175 -0
- package/src/tools.ts +246 -0
- package/src/zod-adapter.ts +72 -0
package/dist/providers/openai.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { BaseLLMClient } from '../client.js';
|
|
8
8
|
import { httpRequest, httpStream, parseSSE, buildHeaders } from '../http.js';
|
|
9
9
|
import { StandardChatDecoder } from '../stream-decoder.js';
|
|
10
|
+
import { normalizeJsonSchema, getJsonSchemaFromConfig, } from '../structured-output.js';
|
|
10
11
|
export class OpenAICompatibleClient extends BaseLLMClient {
|
|
11
12
|
constructor(options, auditor) {
|
|
12
13
|
// Ensure URL ends with /v1 for standard endpoints
|
|
@@ -20,6 +21,7 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
20
21
|
// Chat
|
|
21
22
|
// ========================================================================
|
|
22
23
|
async chat(messages, options) {
|
|
24
|
+
// Structured output and tools can now be used together.\n // The provider sends both response_format and tools in the request.\n // The Router handles skipping validation when the response contains tool calls.
|
|
23
25
|
const url = `${this.options.url}/chat/completions`;
|
|
24
26
|
const tools = options?.tools ?? (Object.keys(this.toolRegistry).length > 0 ? this.getToolDefinitions() : undefined);
|
|
25
27
|
const body = {
|
|
@@ -27,6 +29,14 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
27
29
|
messages: this.convertMessages(messages),
|
|
28
30
|
...this.buildRequestParams(options),
|
|
29
31
|
};
|
|
32
|
+
// Handle structured output
|
|
33
|
+
const schemaOptions = this.extractSchemaOptions(options);
|
|
34
|
+
if (schemaOptions) {
|
|
35
|
+
body['response_format'] = this.buildResponseFormat(schemaOptions);
|
|
36
|
+
}
|
|
37
|
+
else if (options?.responseFormat) {
|
|
38
|
+
body['response_format'] = options.responseFormat;
|
|
39
|
+
}
|
|
30
40
|
if (tools?.length) {
|
|
31
41
|
body['tools'] = tools;
|
|
32
42
|
if (options?.toolChoice) {
|
|
@@ -56,6 +66,7 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
56
66
|
inputTokens: data.usage.prompt_tokens,
|
|
57
67
|
outputTokens: data.usage.completion_tokens,
|
|
58
68
|
totalTokens: data.usage.total_tokens,
|
|
69
|
+
cachedTokens: data.usage.prompt_tokens_details?.cached_tokens,
|
|
59
70
|
}
|
|
60
71
|
: undefined;
|
|
61
72
|
// Normalize tool calls (ensure IDs exist)
|
|
@@ -63,10 +74,12 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
63
74
|
...tc,
|
|
64
75
|
id: tc.id || this.generateToolCallId(),
|
|
65
76
|
}));
|
|
77
|
+
// Get content, handling null case
|
|
78
|
+
const content = choice.message.content || '';
|
|
66
79
|
const result = {
|
|
67
80
|
message: {
|
|
68
81
|
role: 'assistant',
|
|
69
|
-
content
|
|
82
|
+
content,
|
|
70
83
|
tool_calls: toolCalls,
|
|
71
84
|
},
|
|
72
85
|
usage,
|
|
@@ -125,6 +138,7 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
125
138
|
inputTokens: parsed.usage.prompt_tokens,
|
|
126
139
|
outputTokens: parsed.usage.completion_tokens,
|
|
127
140
|
totalTokens: parsed.usage.total_tokens,
|
|
141
|
+
cachedTokens: parsed.usage.prompt_tokens_details?.cached_tokens,
|
|
128
142
|
};
|
|
129
143
|
}
|
|
130
144
|
const delta = parsed.choices?.[0]?.delta;
|
|
@@ -247,5 +261,43 @@ export class OpenAICompatibleClient extends BaseLLMClient {
|
|
|
247
261
|
params['max_tokens'] = options.maxTokens;
|
|
248
262
|
return params;
|
|
249
263
|
}
|
|
264
|
+
// ========================================================================
|
|
265
|
+
// Structured Output Helpers
|
|
266
|
+
// ========================================================================
|
|
267
|
+
/**
|
|
268
|
+
* Build OpenAI response_format for structured output.
|
|
269
|
+
*/
|
|
270
|
+
buildResponseFormat(options) {
|
|
271
|
+
let jsonSchema;
|
|
272
|
+
let name;
|
|
273
|
+
let description;
|
|
274
|
+
// Prefer jsonSchema if provided (handles raw JSON Schema case)
|
|
275
|
+
if (options.jsonSchema) {
|
|
276
|
+
// Use raw JSON Schema
|
|
277
|
+
jsonSchema = normalizeJsonSchema(options.jsonSchema);
|
|
278
|
+
name = options.name || 'response';
|
|
279
|
+
description = options.description;
|
|
280
|
+
}
|
|
281
|
+
else if (options.schemaConfig) {
|
|
282
|
+
// Use SchemaConfig's embedded JSON Schema
|
|
283
|
+
jsonSchema = getJsonSchemaFromConfig(options.schemaConfig);
|
|
284
|
+
name = options.name || options.schemaConfig.name || 'response';
|
|
285
|
+
description = options.description || options.schemaConfig.description;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
// Should not happen - we check this in extractSchemaOptions
|
|
289
|
+
throw new Error('Either schemaConfig or jsonSchema must be provided');
|
|
290
|
+
}
|
|
291
|
+
// OpenAI strict mode — configurable, defaults to true for reliable structured output
|
|
292
|
+
return {
|
|
293
|
+
type: 'json_schema',
|
|
294
|
+
json_schema: {
|
|
295
|
+
name,
|
|
296
|
+
...(description && { description }),
|
|
297
|
+
schema: jsonSchema,
|
|
298
|
+
strict: options.strict ?? true,
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
250
302
|
}
|
|
251
303
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,uBAAuB,GAG1B,MAAM,yBAAyB,CAAC;AAajC,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACrD,YAAY,OAAyB,EAAE,OAAiB;QACpD,kDAAkD;QAClD,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,GAAG,IAAI,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,2EAA2E;IAC3E,OAAO;IACP,2EAA2E;IAE3E,KAAK,CAAC,IAAI,CACN,QAA0B,EAC1B,OAAqB;QAErB,gOAAgO;QAEhO,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpH,MAAM,IAAI,GAA4B;YAClC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SACtC,CAAC;QAEF,2BAA2B;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAiB,GAAG,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAA+B,IAAI,CAAC,KAAK;YAChD,CAAC,CAAC;gBACE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;gBACrC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;gBAC1C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;gBACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa;aAChE;YACD,CAAC,CAAC,SAAS,CAAC;QAEhB,0CAA0C;QAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpD,GAAG,EAAE;YACL,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;SACzC,CAAC,CAAC,CAAC;QAEJ,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAoB;YAC5B,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,UAAU,EAAE,SAAS;aACxB;YACD,KAAK;YACL,QAAQ,EAAE,QAAQ;SACrB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAE3E,KAAK,CAAC,CAAC,UAAU,CACb,QAA0B,EAC1B,OAAqB;QAErB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpH,MAAM,IAAI,GAA4B;YAClC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACxC,MAAM,EAAE,IAAI;YACZ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SACtC,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,6CAA6C;QAC7C,MAAM,aAAa,GAId,IAAI,GAAG,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM;SAC1C,CAAC,CAAC;QAEH,IAAI,KAAiC,CAAC;QAEtC,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAqB7B,CAAC;gBAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,KAAK,GAAG;wBACJ,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;wBACvC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;wBAC5C,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY;wBACtC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa;qBAClE,CAAC;gBACN,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACzC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBAErB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC5B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnD,CAAC;gBAED,iCAAiC;gBACjC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACnB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;wBAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACZ,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;gCACxB,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;gCACtC,IAAI,EAAE,UAAU;gCAChB,QAAQ,EAAE;oCACN,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;oCAC7B,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;iCAC1C;6BACJ,CAAC,CAAC;wBACP,CAAC;6BAAM,CAAC;4BACJ,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;gCACzB,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;4BACzD,CAAC;4BACD,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gCACpB,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;4BAC/C,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,uCAAuC;gBACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,MAAM,EAAE,CAAC;oBACvG,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;wBACjD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;oBACvC,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,4BAA4B;YAChC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK;SACR,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC;YACzC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACH,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE;gBAClC,UAAU,EAAE,cAAc;aAC7B;YACD,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;YACjC,KAAK;YACL,QAAQ,EAAE,QAAQ;SACrB,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,aAAa;IACb,2EAA2E;IAE3E,KAAK,CAAC,KAAK,CAAC,IAAY;QACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAE/B,GAAG,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,EAAE;gBACF,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,KAAK,EAAE,IAAI;aACd;YACD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,2EAA2E;IAC3E,kBAAkB;IAClB,2EAA2E;IAE3E,KAAK,CAAC,SAAS;QACX,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAE/B,GAAG,EAAE;gBACJ,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnC,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAEnE,eAAe,CAAC,QAA0B;QAC9C,mEAAmE;QACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,GAAG,GAAG;YACN,yCAAyC;YACzC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;SAC7B,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,kBAAkB,CAAC,OAAqB;QAC5C,MAAM,MAAM,GAA4B;YACpC,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjC,GAAG,OAAO,EAAE,UAAU;SACzB,CAAC;QACF,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;QACpF,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/E,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,4BAA4B;IAC5B,2EAA2E;IAE3E;;OAEG;IACK,mBAAmB,CAAC,OAAgE;QACxF,IAAI,UAAsB,CAAC;QAC3B,IAAI,IAAY,CAAC;QACjB,IAAI,WAA+B,CAAC;QAEpC,+DAA+D;QAC/D,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,sBAAsB;YACtB,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;YAClC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACtC,CAAC;aAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC9B,0CAA0C;YAC1C,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,UAAU,CAAC;YAC/D,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QAED,qFAAqF;QACrF,OAAO;YACH,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE;gBACT,IAAI;gBACJ,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;gBACnC,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;aACjC;SACJ,CAAC;IACN,CAAC;CACJ"}
|
package/dist/router.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { BaseLLMClient } from './client.js';
|
|
|
14
14
|
import type { Auditor } from './auditor.js';
|
|
15
15
|
import type { LLMChatMessage, LLMChatResponse, ChatOptions, ModelMetadata } from './interfaces.js';
|
|
16
16
|
import type { DecodedEvent } from './stream-decoder.js';
|
|
17
|
+
import { type SchemaConfig, type StructuredOutputResult } from './structured-output.js';
|
|
17
18
|
export interface ProviderEntry {
|
|
18
19
|
/** Unique identifier for this provider entry */
|
|
19
20
|
id: string;
|
|
@@ -62,7 +63,21 @@ export declare class Router {
|
|
|
62
63
|
* On failure, retries with the next provider from the beginning.
|
|
63
64
|
*/
|
|
64
65
|
executeStream(fn: (client: BaseLLMClient) => AsyncGenerator<DecodedEvent, LLMChatResponse | void, unknown>, context?: string): AsyncGenerator<DecodedEvent, LLMChatResponse | void, unknown>;
|
|
66
|
+
/**
|
|
67
|
+
* @deprecated No longer needed — structured output and tools can now be used together.
|
|
68
|
+
*/
|
|
69
|
+
private validateOutputAndTools;
|
|
70
|
+
/**
|
|
71
|
+
* Extract schema from output options.
|
|
72
|
+
* Returns a SchemaConfig or a bare jsonSchema object.
|
|
73
|
+
*/
|
|
74
|
+
private getSchemaFromOutput;
|
|
65
75
|
chat(messages: LLMChatMessage[], options?: ChatOptions): Promise<LLMChatResponse>;
|
|
76
|
+
/**
|
|
77
|
+
* Chat with structured output using the output parameter.
|
|
78
|
+
* Validates response against the schema and returns structured property.
|
|
79
|
+
*/
|
|
80
|
+
private chatWithStructuredOutput;
|
|
66
81
|
chatWithTools(messages: LLMChatMessage[], options?: ChatOptions & {
|
|
67
82
|
maxIterations?: number;
|
|
68
83
|
}): Promise<LLMChatResponse>;
|
|
@@ -71,6 +86,41 @@ export declare class Router {
|
|
|
71
86
|
embedArray(texts: string[]): Promise<number[][]>;
|
|
72
87
|
getModels(): Promise<string[]>;
|
|
73
88
|
getModelInfo(): Promise<ModelMetadata>;
|
|
89
|
+
/**
|
|
90
|
+
* Generate structured output from the LLM with automatic failover.
|
|
91
|
+
* Validates the response against the provided SchemaConfig.
|
|
92
|
+
* Throws StructuredOutputError on validation failure.
|
|
93
|
+
*
|
|
94
|
+
* @template T The output type
|
|
95
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
96
|
+
* @param messages Chat messages to send
|
|
97
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
98
|
+
* @returns Validated structured output
|
|
99
|
+
* @throws StructuredOutputError if validation fails
|
|
100
|
+
*/
|
|
101
|
+
generateStructured<T>(config: SchemaConfig<T>, messages: LLMChatMessage[], options?: ChatOptions): Promise<T>;
|
|
102
|
+
/**
|
|
103
|
+
* Try to generate structured output, returning a result object instead of throwing.
|
|
104
|
+
*
|
|
105
|
+
* @template T The output type
|
|
106
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
107
|
+
* @param messages Chat messages to send
|
|
108
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
109
|
+
* @returns StructuredOutputResult<T>
|
|
110
|
+
*/
|
|
111
|
+
tryParseStructured<T>(config: SchemaConfig<T>, messages: LLMChatMessage[], options?: ChatOptions): Promise<StructuredOutputResult<T>>;
|
|
112
|
+
/**
|
|
113
|
+
* Stream structured output with partial validated objects.
|
|
114
|
+
*
|
|
115
|
+
* @template T The output type
|
|
116
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
117
|
+
* @param messages Chat messages to send
|
|
118
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
119
|
+
* @yields Partial validated objects as the JSON stream progresses
|
|
120
|
+
* @returns Complete validated object on stream completion
|
|
121
|
+
* @throws StructuredOutputError if final validation fails
|
|
122
|
+
*/
|
|
123
|
+
generateStructuredStream<T>(config: SchemaConfig<T>, messages: LLMChatMessage[], options?: ChatOptions): AsyncGenerator<T, T, unknown>;
|
|
74
124
|
registerTool(name: string, description: string, parameters: import('./interfaces.js').LLMFunction['parameters'], handler: import('./interfaces.js').ToolHandler): void;
|
|
75
125
|
registerTools(tools: Array<{
|
|
76
126
|
name: string;
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACR,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACR,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAKH,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC9B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,aAAa;IAC1B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AASD,MAAM,WAAW,YAAY;IACzB,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,MAAM;IACf,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAA0C;gBAE5C,MAAM,GAAE,YAAiB;IAarC,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAUvC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKhC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,SAAS,IAAI,cAAc,EAAE;IAe7B;;;OAGG;IACG,OAAO,CAAC,CAAC,EACX,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,EACzC,OAAO,GAAE,MAAkB,GAC5B,OAAO,CAAC,CAAC,CAAC;IA6Db;;;OAGG;IACI,aAAa,CAChB,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC,EAC5F,OAAO,GAAE,MAAiB,GAC3B,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAiDhE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAkBrB,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAgBvF;;;OAGG;YACW,wBAAwB;IAwHhC,aAAa,CACf,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,eAAe,CAAC;IAOpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAgB1D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAOhD,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAc9B,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAW5C;;;;;;;;;;;OAWG;IACG,kBAAkB,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,CAAC,CAAC;IA6Db;;;;;;;;OAQG;IACG,kBAAkB,CAAC,CAAC,EACtB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAmBrC;;;;;;;;;;OAUG;IACI,wBAAwB,CAAC,CAAC,EAC7B,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAoFhC,YAAY,CACR,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,iBAAiB,EAAE,WAAW,CAAC,YAAY,CAAC,EAC/D,OAAO,EAAE,OAAO,iBAAiB,EAAE,WAAW,GAC/C,IAAI;IAMP,aAAa,CACT,KAAK,EAAE,KAAK,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,iBAAiB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;QAChE,OAAO,EAAE,OAAO,iBAAiB,EAAE,WAAW,CAAC;KAClD,CAAC,GACH,IAAI;IAUP,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;CAYxB"}
|
package/dist/router.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* Not exposed publicly — AIModel delegates to it.
|
|
12
12
|
*/
|
|
13
13
|
import { NoopAuditor } from './auditor.js';
|
|
14
|
+
import { parseStructured, StructuredOutputError, StreamingJsonParser, getJsonSchemaFromConfig, } from './structured-output.js';
|
|
14
15
|
// ============================================================================
|
|
15
16
|
// Router
|
|
16
17
|
// ============================================================================
|
|
@@ -161,13 +162,160 @@ export class Router {
|
|
|
161
162
|
// ========================================================================
|
|
162
163
|
// Convenience Methods
|
|
163
164
|
// ========================================================================
|
|
165
|
+
/**
|
|
166
|
+
* @deprecated No longer needed — structured output and tools can now be used together.
|
|
167
|
+
*/
|
|
168
|
+
validateOutputAndTools(_options) {
|
|
169
|
+
// Structured output and tools are now allowed together.
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Extract schema from output options.
|
|
173
|
+
* Returns a SchemaConfig or a bare jsonSchema object.
|
|
174
|
+
*/
|
|
175
|
+
getSchemaFromOutput(output) {
|
|
176
|
+
if (output.schema) {
|
|
177
|
+
return {
|
|
178
|
+
config: output.schema,
|
|
179
|
+
name: output.name,
|
|
180
|
+
description: output.description,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (output.jsonSchema) {
|
|
184
|
+
return {
|
|
185
|
+
jsonSchema: output.jsonSchema,
|
|
186
|
+
name: output.name,
|
|
187
|
+
description: output.description,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
throw new Error('output must have either schema or jsonSchema');
|
|
191
|
+
}
|
|
164
192
|
async chat(messages, options) {
|
|
193
|
+
// Validate that output and tools are not used together (VAL-API-005)
|
|
194
|
+
this.validateOutputAndTools(options);
|
|
195
|
+
// If output parameter is provided, use structured output flow (VAL-API-004)
|
|
196
|
+
if (options?.output) {
|
|
197
|
+
// Type assertion: we know output is defined at this point
|
|
198
|
+
return this.chatWithStructuredOutput(messages, options);
|
|
199
|
+
}
|
|
165
200
|
return this.execute(client => client.chat(messages, options), 'chat');
|
|
166
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Chat with structured output using the output parameter.
|
|
204
|
+
* Validates response against the schema and returns structured property.
|
|
205
|
+
*/
|
|
206
|
+
async chatWithStructuredOutput(messages, options) {
|
|
207
|
+
const { output } = options;
|
|
208
|
+
const schemaInfo = this.getSchemaFromOutput(output);
|
|
209
|
+
const schemaName = schemaInfo.name ?? 'response';
|
|
210
|
+
// Emit structured_request event
|
|
211
|
+
this.auditor.record({
|
|
212
|
+
timestamp: Date.now(),
|
|
213
|
+
type: 'structured_request',
|
|
214
|
+
provider: 'router',
|
|
215
|
+
schemaName,
|
|
216
|
+
});
|
|
217
|
+
// Build ChatOptions with schema for the provider
|
|
218
|
+
// Keep tools if provided — structured output and tools can work together
|
|
219
|
+
const { output: _, ...restOptions } = options;
|
|
220
|
+
const structuredOptions = {
|
|
221
|
+
...restOptions,
|
|
222
|
+
// Use jsonSchema for the provider
|
|
223
|
+
jsonSchema: 'config' in schemaInfo
|
|
224
|
+
? getJsonSchemaFromConfig(schemaInfo.config)
|
|
225
|
+
: schemaInfo.jsonSchema,
|
|
226
|
+
schemaName: schemaInfo.name,
|
|
227
|
+
schemaDescription: schemaInfo.description,
|
|
228
|
+
};
|
|
229
|
+
const start = Date.now();
|
|
230
|
+
// Get response from provider
|
|
231
|
+
const response = await this.execute(client => client.chat(messages, structuredOptions), 'chatWithStructuredOutput');
|
|
232
|
+
// If the response contains tool calls, skip validation and return as-is
|
|
233
|
+
if (response.message.tool_calls && response.message.tool_calls.length > 0) {
|
|
234
|
+
return response;
|
|
235
|
+
}
|
|
236
|
+
// Extract text content from response
|
|
237
|
+
const content = typeof response.message.content === 'string'
|
|
238
|
+
? response.message.content
|
|
239
|
+
: response.message.content
|
|
240
|
+
.filter((part) => part.type === 'text')
|
|
241
|
+
.map(part => part.text)
|
|
242
|
+
.join('');
|
|
243
|
+
// Get the SchemaConfig for validation
|
|
244
|
+
const schemaConfig = 'config' in schemaInfo ? schemaInfo.config : null;
|
|
245
|
+
if (!schemaConfig || !schemaConfig.validate) {
|
|
246
|
+
// No validator — return parsed JSON without validation
|
|
247
|
+
try {
|
|
248
|
+
const structured = JSON.parse(content);
|
|
249
|
+
// Emit structured_response event on success
|
|
250
|
+
this.auditor.record({
|
|
251
|
+
timestamp: Date.now(),
|
|
252
|
+
type: 'structured_response',
|
|
253
|
+
provider: response.provider ?? 'router',
|
|
254
|
+
model: response.message.role,
|
|
255
|
+
duration: Date.now() - start,
|
|
256
|
+
schemaName,
|
|
257
|
+
usage: response.usage,
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
...response,
|
|
261
|
+
structured,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
// JSON parse failed
|
|
266
|
+
const rawOutput = content;
|
|
267
|
+
this.auditor.record({
|
|
268
|
+
timestamp: Date.now(),
|
|
269
|
+
type: 'structured_validation_error',
|
|
270
|
+
provider: response.provider ?? 'router',
|
|
271
|
+
schemaName,
|
|
272
|
+
error: error instanceof Error ? error.message : 'JSON parse failed',
|
|
273
|
+
rawOutput,
|
|
274
|
+
});
|
|
275
|
+
throw new StructuredOutputError(`Failed to parse JSON: ${rawOutput}`, { rawOutput: rawOutput, cause: error instanceof Error ? error : undefined });
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Parse and validate against SchemaConfig
|
|
279
|
+
try {
|
|
280
|
+
const validated = parseStructured(schemaConfig, content);
|
|
281
|
+
// Emit structured_response event on success
|
|
282
|
+
this.auditor.record({
|
|
283
|
+
timestamp: Date.now(),
|
|
284
|
+
type: 'structured_response',
|
|
285
|
+
provider: response.provider ?? 'router',
|
|
286
|
+
duration: Date.now() - start,
|
|
287
|
+
schemaName,
|
|
288
|
+
usage: response.usage,
|
|
289
|
+
});
|
|
290
|
+
return {
|
|
291
|
+
...response,
|
|
292
|
+
structured: validated,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
// Emit structured_validation_error event
|
|
297
|
+
const rawOutput = content;
|
|
298
|
+
this.auditor.record({
|
|
299
|
+
timestamp: Date.now(),
|
|
300
|
+
type: 'structured_validation_error',
|
|
301
|
+
provider: response.provider ?? 'router',
|
|
302
|
+
schemaName,
|
|
303
|
+
error: error instanceof Error ? error.message : 'Validation failed',
|
|
304
|
+
rawOutput,
|
|
305
|
+
});
|
|
306
|
+
throw error;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
167
309
|
async chatWithTools(messages, options) {
|
|
168
310
|
return this.execute(client => client.chatWithTools(messages, options), 'chatWithTools');
|
|
169
311
|
}
|
|
170
312
|
async *chatStream(messages, options) {
|
|
313
|
+
// Structured output via output parameter is not supported on streaming
|
|
314
|
+
// Use generateStructuredStream() instead
|
|
315
|
+
if (options?.output) {
|
|
316
|
+
throw new Error('The "output" parameter is not supported with chatStream(). '
|
|
317
|
+
+ 'Use generateStructuredStream() for streaming structured output.');
|
|
318
|
+
}
|
|
171
319
|
return yield* this.executeStream(client => client.chatStream(messages, options), 'chatStream');
|
|
172
320
|
}
|
|
173
321
|
async embed(text) {
|
|
@@ -194,6 +342,177 @@ export class Router {
|
|
|
194
342
|
return this.execute(client => client.getModelInfo(), 'getModelInfo');
|
|
195
343
|
}
|
|
196
344
|
// ========================================================================
|
|
345
|
+
// Structured Output Methods
|
|
346
|
+
// ========================================================================
|
|
347
|
+
/**
|
|
348
|
+
* Generate structured output from the LLM with automatic failover.
|
|
349
|
+
* Validates the response against the provided SchemaConfig.
|
|
350
|
+
* Throws StructuredOutputError on validation failure.
|
|
351
|
+
*
|
|
352
|
+
* @template T The output type
|
|
353
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
354
|
+
* @param messages Chat messages to send
|
|
355
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
356
|
+
* @returns Validated structured output
|
|
357
|
+
* @throws StructuredOutputError if validation fails
|
|
358
|
+
*/
|
|
359
|
+
async generateStructured(config, messages, options) {
|
|
360
|
+
// Get JSON Schema from config
|
|
361
|
+
const jsonSchema = getJsonSchemaFromConfig(config);
|
|
362
|
+
const schemaName = options?.schemaName ?? config.name ?? 'response';
|
|
363
|
+
// Emit structured_request event
|
|
364
|
+
this.auditor.record({
|
|
365
|
+
timestamp: Date.now(),
|
|
366
|
+
type: 'structured_request',
|
|
367
|
+
provider: 'router',
|
|
368
|
+
schemaName,
|
|
369
|
+
});
|
|
370
|
+
// Build ChatOptions with schema
|
|
371
|
+
const structuredOptions = {
|
|
372
|
+
...options,
|
|
373
|
+
jsonSchema,
|
|
374
|
+
};
|
|
375
|
+
const start = Date.now();
|
|
376
|
+
// Execute with failover
|
|
377
|
+
const response = await this.execute(client => client.chat(messages, structuredOptions), 'generateStructured');
|
|
378
|
+
// Parse and validate the response
|
|
379
|
+
const content = typeof response.message.content === 'string'
|
|
380
|
+
? response.message.content
|
|
381
|
+
: response.message.content
|
|
382
|
+
.filter((part) => part.type === 'text')
|
|
383
|
+
.map(part => part.text)
|
|
384
|
+
.join('');
|
|
385
|
+
try {
|
|
386
|
+
const result = parseStructured(config, content);
|
|
387
|
+
// Emit structured_response event on success
|
|
388
|
+
this.auditor.record({
|
|
389
|
+
timestamp: Date.now(),
|
|
390
|
+
type: 'structured_response',
|
|
391
|
+
provider: response.provider ?? 'router',
|
|
392
|
+
duration: Date.now() - start,
|
|
393
|
+
schemaName,
|
|
394
|
+
usage: response.usage,
|
|
395
|
+
});
|
|
396
|
+
return result;
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
// Emit structured_validation_error event
|
|
400
|
+
this.auditor.record({
|
|
401
|
+
timestamp: Date.now(),
|
|
402
|
+
type: 'structured_validation_error',
|
|
403
|
+
provider: response.provider ?? 'router',
|
|
404
|
+
schemaName,
|
|
405
|
+
error: error instanceof Error ? error.message : 'Validation failed',
|
|
406
|
+
rawOutput: content,
|
|
407
|
+
});
|
|
408
|
+
throw error;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Try to generate structured output, returning a result object instead of throwing.
|
|
413
|
+
*
|
|
414
|
+
* @template T The output type
|
|
415
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
416
|
+
* @param messages Chat messages to send
|
|
417
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
418
|
+
* @returns StructuredOutputResult<T>
|
|
419
|
+
*/
|
|
420
|
+
async tryParseStructured(config, messages, options) {
|
|
421
|
+
try {
|
|
422
|
+
const value = await this.generateStructured(config, messages, options);
|
|
423
|
+
return { ok: true, value };
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
// If error is already a StructuredOutputError, use it directly
|
|
427
|
+
if (error instanceof Error && 'rawOutput' in error) {
|
|
428
|
+
return {
|
|
429
|
+
ok: false,
|
|
430
|
+
error: error,
|
|
431
|
+
rawOutput: error.rawOutput,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
// Unexpected error - re-throw
|
|
435
|
+
throw error;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Stream structured output with partial validated objects.
|
|
440
|
+
*
|
|
441
|
+
* @template T The output type
|
|
442
|
+
* @param config Schema configuration (JSON Schema + optional validator)
|
|
443
|
+
* @param messages Chat messages to send
|
|
444
|
+
* @param options Additional options (temperature, maxTokens, etc.)
|
|
445
|
+
* @yields Partial validated objects as the JSON stream progresses
|
|
446
|
+
* @returns Complete validated object on stream completion
|
|
447
|
+
* @throws StructuredOutputError if final validation fails
|
|
448
|
+
*/
|
|
449
|
+
async *generateStructuredStream(config, messages, options) {
|
|
450
|
+
// Get JSON Schema from config
|
|
451
|
+
const jsonSchema = getJsonSchemaFromConfig(config);
|
|
452
|
+
const schemaName = options?.schemaName ?? config.name ?? 'response';
|
|
453
|
+
// Emit structured_request event
|
|
454
|
+
this.auditor.record({
|
|
455
|
+
timestamp: Date.now(),
|
|
456
|
+
type: 'structured_request',
|
|
457
|
+
provider: 'router',
|
|
458
|
+
schemaName,
|
|
459
|
+
});
|
|
460
|
+
// Build ChatOptions with schema
|
|
461
|
+
const structuredOptions = {
|
|
462
|
+
...options,
|
|
463
|
+
jsonSchema,
|
|
464
|
+
};
|
|
465
|
+
const start = Date.now();
|
|
466
|
+
// Stream with failover
|
|
467
|
+
const stream = this.executeStream(client => client.chatStream(messages, structuredOptions), 'generateStructuredStream');
|
|
468
|
+
// Accumulate text and yield partial validated objects
|
|
469
|
+
const parser = new StreamingJsonParser(config);
|
|
470
|
+
let fullContent = '';
|
|
471
|
+
let lastYielded;
|
|
472
|
+
try {
|
|
473
|
+
for await (const event of stream) {
|
|
474
|
+
// Only process text events
|
|
475
|
+
if (event.type !== 'text')
|
|
476
|
+
continue;
|
|
477
|
+
fullContent += event.content;
|
|
478
|
+
// Try to parse partial JSON
|
|
479
|
+
const result = parser.feed(event.content);
|
|
480
|
+
// Yield if we got a valid partial and it's different from last
|
|
481
|
+
if (result.partial !== undefined) {
|
|
482
|
+
// Only yield if different from last (avoid duplicate yields)
|
|
483
|
+
if (lastYielded === undefined || JSON.stringify(result.partial) !== JSON.stringify(lastYielded)) {
|
|
484
|
+
lastYielded = result.partial;
|
|
485
|
+
yield result.partial;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// Parse and validate the complete content
|
|
490
|
+
const complete = parseStructured(config, fullContent);
|
|
491
|
+
// Emit structured_response event on success
|
|
492
|
+
this.auditor.record({
|
|
493
|
+
timestamp: Date.now(),
|
|
494
|
+
type: 'structured_response',
|
|
495
|
+
provider: 'router',
|
|
496
|
+
schemaName,
|
|
497
|
+
duration: Date.now() - start,
|
|
498
|
+
});
|
|
499
|
+
// Return the complete validated object
|
|
500
|
+
return complete;
|
|
501
|
+
}
|
|
502
|
+
catch (error) {
|
|
503
|
+
// Emit structured_validation_error event
|
|
504
|
+
this.auditor.record({
|
|
505
|
+
timestamp: Date.now(),
|
|
506
|
+
type: 'structured_validation_error',
|
|
507
|
+
provider: 'router',
|
|
508
|
+
schemaName,
|
|
509
|
+
error: error instanceof Error ? error.message : 'Validation failed',
|
|
510
|
+
rawOutput: fullContent,
|
|
511
|
+
});
|
|
512
|
+
throw error;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
// ========================================================================
|
|
197
516
|
// Tool Registration (broadcast to all providers)
|
|
198
517
|
// ========================================================================
|
|
199
518
|
registerTool(name, description, parameters, handler) {
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GAG1B,MAAM,wBAAwB,CAAC;AA4ChC,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,OAAO,MAAM;IACP,SAAS,GAAoB,EAAE,CAAC;IAChC,MAAM,GAAgC,IAAI,GAAG,EAAE,CAAC;IAChD,OAAO,CAAU;IACjB,MAAM,CAA0C;IAExD,YAAY,SAAuB,EAAE;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG;YACV,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,CAAC;YAClD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC;YACpC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;SACzC,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,sBAAsB;IACtB,2EAA2E;IAE3E,WAAW,CAAC,KAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;YACtB,OAAO,EAAE,IAAI;YACb,mBAAmB,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc,CAAC,EAAU;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,OAAgB;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,IAAI;YACZ,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,IAAI,CAAC;YACpE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa;YACnD,KAAK,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;SAC3C,CAAC,CAAC,CAAC;IACR,CAAC;IAED,2EAA2E;IAC3E,0BAA0B;IAC1B,2EAA2E;IAE3E;;;OAGG;IACH,KAAK,CAAC,OAAO,CACT,EAAyC,EACzC,UAAkB,SAAS;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,SAA4B,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC;gBACzE,IAAI,CAAC;oBACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;4BAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;4BACrB,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,QAAQ,CAAC,EAAE;4BACrB,KAAK,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK;4BACtD,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;yBACjC,CAAC,CAAC;oBACP,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAChC,OAAO,MAAM,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;wBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,QAAQ,CAAC,EAAE;wBACrB,KAAK,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK;wBACtD,KAAK,EAAE,SAAS,CAAC,OAAO;wBACxB,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;qBACjC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAED,0CAA0C;YAC1C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEhC,+BAA+B;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,QAAQ,EAAE;wBACN,IAAI,EAAE,QAAQ,CAAC,EAAE;wBACjB,YAAY,EAAE,YAAY,CAAC,EAAE;wBAC7B,OAAO;wBACP,MAAM,EAAE,SAAS,EAAE,OAAO;qBAC7B;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,aAAa,CAChB,EAA4F,EAC5F,UAAkB,QAAQ;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,SAA4B,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,WAAmC,CAAC;gBAExC,qDAAqD;gBACrD,OAAO,IAAI,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBACd,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;wBAC3B,MAAM;oBACV,CAAC;oBACD,MAAM,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAChC,OAAO,WAAW,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAEhC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,KAAK,EAAE,SAAS,CAAC,OAAO;oBACxB,QAAQ,EAAE,EAAE,OAAO,EAAE;iBACxB,CAAC,CAAC;gBAEH,4BAA4B;YAChC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,CAAC;IAED,2EAA2E;IAC3E,sBAAsB;IACtB,2EAA2E;IAE3E;;OAEG;IACK,sBAAsB,CAAC,QAAsB;QACjD,wDAAwD;IAC5D,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAI,MAAwB;QACnD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;gBACH,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;aAClC,CAAC;QACN,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;gBACH,UAAU,EAAE,MAAM,CAAC,UAAqC;gBACxD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;aAClC,CAAC;QACN,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA0B,EAAE,OAAqB;QACxD,qEAAqE;QACrE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAErC,4EAA4E;QAC5E,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YAClB,0DAA0D;YAC1D,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAkD,CAAC,CAAC;QACvG,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CACf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EACxC,MAAM,CACT,CAAC;IACN,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,wBAAwB,CAClC,QAA0B,EAC1B,OAAmD;QAEnD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC;QAEjD,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,UAAU;SACb,CAAC,CAAC;QAEH,iDAAiD;QACjD,yEAAyE;QACzE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,iBAAiB,GAAgB;YACnC,GAAG,WAAW;YACd,kCAAkC;YAClC,UAAU,EAAE,QAAQ,IAAI,UAAU;gBAC9B,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC5C,CAAC,CAAC,UAAU,CAAC,UAAU;YAC3B,UAAU,EAAE,UAAU,CAAC,IAAI;YAC3B,iBAAiB,EAAE,UAAU,CAAC,WAAW;SAC5C,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAClD,0BAA0B,CAC7B,CAAC;QAEF,wEAAwE;QACxE,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,OAAO,QAA8B,CAAC;QAC1C,CAAC;QAED,qCAAqC;QACrC,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ;YACxD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;YAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;iBACrB,MAAM,CAAC,CAAC,IAAI,EAA0C,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;iBAC9E,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACtB,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,sCAAsC;QACtC,MAAM,YAAY,GAA2B,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/F,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1C,uDAAuD;YACvD,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;gBAC5C,4CAA4C;gBAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;oBACvC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;oBAC5B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC5B,UAAU;oBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;iBACxB,CAAC,CAAC;gBACH,OAAO;oBACH,GAAG,QAAQ;oBACX,UAAU;iBACb,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,oBAAoB;gBACpB,MAAM,SAAS,GAAG,OAAO,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,6BAA6B;oBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;oBACvC,UAAU;oBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;oBACnE,SAAS;iBACZ,CAAC,CAAC;gBACH,MAAM,IAAI,qBAAqB,CAC3B,yBAAyB,SAAS,EAAE,EACpC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9E,CAAC;YACN,CAAC;QACL,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,4CAA4C;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;gBACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC5B,UAAU;gBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;aACxB,CAAC,CAAC;YACH,OAAO;gBACH,GAAG,QAAQ;gBACX,UAAU,EAAE,SAAS;aACxB,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,yCAAyC;YACzC,MAAM,SAAS,GAAG,OAAO,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;gBACvC,UAAU;gBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;gBACnE,SAAS;aACZ,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CACf,QAA0B,EAC1B,OAAkD;QAElD,OAAO,IAAI,CAAC,OAAO,CACf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACjD,eAAe,CAClB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACb,QAA0B,EAC1B,OAAqB;QAErB,uEAAuE;QACvE,yCAAyC;QACzC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACX,6DAA6D;kBAC3D,iEAAiE,CACtE,CAAC;QACN,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAC5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC9C,YAAY,CACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CACf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAC5B,OAAO,CACV,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC5B,OAAO,IAAI,CAAC,OAAO,CACf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAClC,YAAY,CACf,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACX,sCAAsC;QACtC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACL,6BAA6B;YACjC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CACf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAC/B,cAAc,CACjB,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,4BAA4B;IAC5B,2EAA2E;IAE3E;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,kBAAkB,CACpB,MAAuB,EACvB,QAA0B,EAC1B,OAAqB;QAErB,8BAA8B;QAC9B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC;QAEpE,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,UAAU;SACb,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,iBAAiB,GAAgB;YACnC,GAAG,OAAO;YACV,UAAU;SACb,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,wBAAwB;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAClD,oBAAoB,CACvB,CAAC;QAEF,kCAAkC;QAClC,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ;YACxD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;YAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;iBACrB,MAAM,CAAC,CAAC,IAAI,EAA0C,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;iBAC9E,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACtB,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChD,4CAA4C;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;gBACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC5B,UAAU;gBACV,KAAK,EAAE,QAAQ,CAAC,KAAK;aACxB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,yCAAyC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;gBACvC,UAAU;gBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;gBACnE,SAAS,EAAE,OAAO;aACrB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,kBAAkB,CACpB,MAAuB,EACvB,QAA0B,EAC1B,OAAqB;QAErB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,+DAA+D;YAC/D,IAAI,KAAK,YAAY,KAAK,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;gBACjD,OAAO;oBACH,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,KAA0E;oBACjF,SAAS,EAAG,KAA0C,CAAC,SAAS;iBACnE,CAAC;YACN,CAAC;YAED,8BAA8B;YAC9B,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,CAAC,wBAAwB,CAC3B,MAAuB,EACvB,QAA0B,EAC1B,OAAqB;QAErB,8BAA8B;QAC9B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC;QAEpE,gCAAgC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,UAAU;SACb,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,iBAAiB,GAAgB;YACnC,GAAG,OAAO;YACV,UAAU;SACb,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,uBAAuB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EACxD,0BAA0B,CAC7B,CAAC;QAEF,sDAAsD;QACtD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAI,MAAM,CAAC,CAAC;QAClD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,WAA0B,CAAC;QAE/B,IAAI,CAAC;YACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC/B,2BAA2B;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,SAAS;gBAEpC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC;gBAE7B,4BAA4B;gBAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE1C,+DAA+D;gBAC/D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC/B,6DAA6D;oBAC7D,IAAI,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC9F,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;wBAC7B,MAAM,MAAM,CAAC,OAAO,CAAC;oBACzB,CAAC;gBACL,CAAC;YACL,CAAC;YAED,0CAA0C;YAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAEtD,4CAA4C;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,QAAQ;gBAClB,UAAU;gBACV,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YAEH,uCAAuC;YACvC,OAAO,QAAQ,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,yCAAyC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,UAAU;gBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;gBACnE,SAAS,EAAE,WAAW;aACzB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,iDAAiD;IACjD,2EAA2E;IAE3E,YAAY,CACR,IAAY,EACZ,WAAmB,EACnB,UAA+D,EAC/D,OAA8C;QAE9C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAED,aAAa,CACT,KAKE;QAEF,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,oBAAoB;IACpB,2EAA2E;IAEnE,WAAW,CAAC,EAAU;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrB,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC3B,gCAAgC;QAChC,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACnD,uBAAuB;YACvB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,qBAAqB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,EAAU;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC;YACJ,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC;QAChC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,EAAU;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO;QAEf,CAAC,CAAC,mBAAmB,EAAE,CAAC;QACxB,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACnD,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC1D,CAAC;IACL,CAAC;CACJ"}
|