@mate-academy/llm-gateway 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +159 -0
  2. package/dist/LLMService.typedefs.d.ts +9 -0
  3. package/dist/LLMService.typedefs.js.map +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js +1 -1
  8. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js.map +1 -1
  9. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.entity.d.ts +4 -0
  10. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.entity.js +2 -1
  11. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.entity.js.map +1 -1
  12. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.d.ts +7 -1
  13. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js +77 -1
  14. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js.map +1 -1
  15. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.d.ts +7 -1
  16. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js +79 -2
  17. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js.map +1 -1
  18. package/dist/providers/OpenAI/OpenAI.constants.js +1 -1
  19. package/dist/providers/OpenAI/OpenAI.constants.js.map +1 -1
  20. package/dist/providers/OpenAI/services/OpenAIAssistance.service.d.ts +7 -1
  21. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js +117 -3
  22. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js.map +1 -1
  23. package/dist/providers/OpenAI/services/OpenAICompletion.service.d.ts +7 -1
  24. package/dist/providers/OpenAI/services/OpenAICompletion.service.js +86 -2
  25. package/dist/providers/OpenAI/services/OpenAICompletion.service.js.map +1 -1
  26. package/dist/services/LLMAssistanceService.abstract.d.ts +8 -1
  27. package/dist/services/LLMAssistanceService.abstract.js.map +1 -1
  28. package/dist/services/LLMCompletionService.abstract.d.ts +8 -1
  29. package/dist/services/LLMCompletionService.abstract.js.map +1 -1
  30. package/dist/utilities/functional.utils.js.map +1 -0
  31. package/dist/utilities/index.d.ts +3 -0
  32. package/dist/utilities/index.js +22 -0
  33. package/dist/utilities/index.js.map +1 -0
  34. package/dist/utilities/promptBuilder.js.map +1 -0
  35. package/dist/utilities/schema/AbstractSchemaBuilder.d.ts +50 -0
  36. package/dist/utilities/schema/AbstractSchemaBuilder.js +11 -0
  37. package/dist/utilities/schema/AbstractSchemaBuilder.js.map +1 -0
  38. package/dist/utilities/schema/LLMSchema.d.ts +119 -0
  39. package/dist/utilities/schema/LLMSchema.js +286 -0
  40. package/dist/utilities/schema/LLMSchema.js.map +1 -0
  41. package/dist/utilities/schema/LLMSchemaInterface.d.ts +47 -0
  42. package/dist/utilities/schema/LLMSchemaInterface.js +3 -0
  43. package/dist/utilities/schema/LLMSchemaInterface.js.map +1 -0
  44. package/dist/utilities/schema/index.d.ts +3 -0
  45. package/dist/utilities/schema/index.js +11 -0
  46. package/dist/utilities/schema/index.js.map +1 -0
  47. package/package.json +19 -11
  48. package/dist/functional.utils.js.map +0 -1
  49. package/dist/promptBuilder.js.map +0 -1
  50. /package/dist/{functional.utils.d.ts → utilities/functional.utils.d.ts} +0 -0
  51. /package/dist/{functional.utils.js → utilities/functional.utils.js} +0 -0
  52. /package/dist/{promptBuilder.d.ts → utilities/promptBuilder.d.ts} +0 -0
  53. /package/dist/{promptBuilder.js → utilities/promptBuilder.js} +0 -0
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLMSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
6
+ const genai_1 = require("@google/genai");
7
+ /**
8
+ * Concrete implementation of schema builder using Zod as the underlying validator.
9
+ * This implementation can be replaced with another validator without changing the public API.
10
+ */
11
+ class LLMSchema {
12
+ zodSchema;
13
+ constructor(zodSchema) {
14
+ this.zodSchema = zodSchema;
15
+ }
16
+ // ============ Factory Methods ============
17
+ /**
18
+ * Creates a string schema
19
+ */
20
+ static string() {
21
+ return new LLMSchema(zod_1.z.string());
22
+ }
23
+ /**
24
+ * Creates a number schema
25
+ */
26
+ static number() {
27
+ return new LLMSchema(zod_1.z.number());
28
+ }
29
+ /**
30
+ * Creates a boolean schema
31
+ */
32
+ static boolean() {
33
+ return new LLMSchema(zod_1.z.boolean());
34
+ }
35
+ /**
36
+ * Creates an object schema
37
+ */
38
+ static object(shape) {
39
+ const zodShape = {};
40
+ for (const [key, schema] of Object.entries(shape)) {
41
+ zodShape[key] = schema.zodSchema;
42
+ }
43
+ return new LLMSchema(zod_1.z.object(zodShape));
44
+ }
45
+ /**
46
+ * Creates an array schema
47
+ */
48
+ static array(itemSchema) {
49
+ return new LLMSchema(zod_1.z.array(itemSchema.zodSchema));
50
+ }
51
+ /**
52
+ * Creates an enum schema
53
+ */
54
+ static enum(values) {
55
+ return new LLMSchema(zod_1.z.enum(values));
56
+ }
57
+ /**
58
+ * Creates a union schema
59
+ */
60
+ static union(schemas) {
61
+ const zodSchemas = schemas.map(s => s.zodSchema);
62
+ return new LLMSchema(zod_1.z.union(zodSchemas));
63
+ }
64
+ /**
65
+ * Creates a literal schema
66
+ */
67
+ static literal(value) {
68
+ return new LLMSchema(zod_1.z.literal(value));
69
+ }
70
+ // ============ Modifier Methods ============
71
+ /**
72
+ * Makes the schema optional
73
+ */
74
+ optional() {
75
+ return new LLMSchema(this.zodSchema.optional());
76
+ }
77
+ /**
78
+ * Makes the schema nullable
79
+ */
80
+ nullable() {
81
+ return new LLMSchema(this.zodSchema.nullable());
82
+ }
83
+ /**
84
+ * Sets a default value
85
+ */
86
+ default(value) {
87
+ return new LLMSchema(this.zodSchema.default(value));
88
+ }
89
+ /**
90
+ * Adds a description (for documentation)
91
+ */
92
+ describe(description) {
93
+ return new LLMSchema(this.zodSchema.describe(description));
94
+ }
95
+ // ============ String-specific Modifiers ============
96
+ /**
97
+ * Sets minimum string length
98
+ */
99
+ min(length) {
100
+ if (this.zodSchema instanceof zod_1.z.ZodString) {
101
+ return new LLMSchema(this.zodSchema.min(length));
102
+ }
103
+ return this;
104
+ }
105
+ /**
106
+ * Sets maximum string length
107
+ */
108
+ max(length) {
109
+ if (this.zodSchema instanceof zod_1.z.ZodString) {
110
+ return new LLMSchema(this.zodSchema.max(length));
111
+ }
112
+ return this;
113
+ }
114
+ /**
115
+ * Validates as email
116
+ */
117
+ email() {
118
+ if (this.zodSchema instanceof zod_1.z.ZodString) {
119
+ return new LLMSchema(this.zodSchema.email());
120
+ }
121
+ return this;
122
+ }
123
+ /**
124
+ * Validates as URL
125
+ */
126
+ url() {
127
+ if (this.zodSchema instanceof zod_1.z.ZodString) {
128
+ return new LLMSchema(this.zodSchema.url());
129
+ }
130
+ return this;
131
+ }
132
+ /**
133
+ * Validates as UUID
134
+ */
135
+ uuid() {
136
+ if (this.zodSchema instanceof zod_1.z.ZodString) {
137
+ return new LLMSchema(this.zodSchema.uuid());
138
+ }
139
+ return this;
140
+ }
141
+ // ============ Number-specific Modifiers ============
142
+ /**
143
+ * Validates as integer
144
+ */
145
+ int() {
146
+ if (this.zodSchema instanceof zod_1.z.ZodNumber) {
147
+ return new LLMSchema(this.zodSchema.int());
148
+ }
149
+ return this;
150
+ }
151
+ /**
152
+ * Validates as positive number
153
+ */
154
+ positive() {
155
+ if (this.zodSchema instanceof zod_1.z.ZodNumber) {
156
+ return new LLMSchema(this.zodSchema.positive());
157
+ }
158
+ return this;
159
+ }
160
+ /**
161
+ * Validates as negative number
162
+ */
163
+ negative() {
164
+ if (this.zodSchema instanceof zod_1.z.ZodNumber) {
165
+ return new LLMSchema(this.zodSchema.negative());
166
+ }
167
+ return this;
168
+ }
169
+ /**
170
+ * Validates as non-positive number
171
+ */
172
+ nonpositive() {
173
+ if (this.zodSchema instanceof zod_1.z.ZodNumber) {
174
+ return new LLMSchema(this.zodSchema.nonpositive());
175
+ }
176
+ return this;
177
+ }
178
+ /**
179
+ * Validates as non-negative number
180
+ */
181
+ nonnegative() {
182
+ if (this.zodSchema instanceof zod_1.z.ZodNumber) {
183
+ return new LLMSchema(this.zodSchema.nonnegative());
184
+ }
185
+ return this;
186
+ }
187
+ // ============ Internal Methods (Package Use Only) ============
188
+ /**
189
+ * @internal
190
+ * Parses data using the schema
191
+ */
192
+ _parse(data) {
193
+ const result = this.zodSchema.safeParse(data);
194
+ if (result.success) {
195
+ return {
196
+ success: true,
197
+ data: result.data,
198
+ };
199
+ }
200
+ return {
201
+ success: false,
202
+ error: result.error.message,
203
+ };
204
+ }
205
+ /**
206
+ * @internal
207
+ * Converts schema to OpenAI JSON Schema format
208
+ */
209
+ _toOpenAISchema() {
210
+ return (0, zod_to_json_schema_1.zodToJsonSchema)(this.zodSchema, {
211
+ target: 'openApi3',
212
+ $refStrategy: 'none',
213
+ });
214
+ }
215
+ /**
216
+ * @internal
217
+ * Converts schema to Google Generative AI format
218
+ */
219
+ _toGoogleSchema() {
220
+ const jsonSchema = (0, zod_to_json_schema_1.zodToJsonSchema)(this.zodSchema, {
221
+ target: 'jsonSchema7',
222
+ $refStrategy: 'none',
223
+ });
224
+ return this._convertJsonSchemaToGoogleFormat(jsonSchema);
225
+ }
226
+ /**
227
+ * @internal
228
+ * Converts JSON Schema to Google's Type-based format
229
+ */
230
+ _convertJsonSchemaToGoogleFormat(jsonSchema) {
231
+ // Handle null type
232
+ if (jsonSchema.type === 'null') {
233
+ return { type: genai_1.Type.STRING, nullable: true };
234
+ }
235
+ // Handle arrays with anyOf (for unions)
236
+ if (jsonSchema.anyOf) {
237
+ // For now, we'll use the first type in the union
238
+ // This is a simplification - full union support would be more complex
239
+ return this._convertJsonSchemaToGoogleFormat(jsonSchema.anyOf[0]);
240
+ }
241
+ // Handle objects
242
+ if (jsonSchema.type === 'object') {
243
+ const properties = {};
244
+ const required = jsonSchema.required || [];
245
+ for (const [key, value] of Object.entries(jsonSchema.properties || {})) {
246
+ const convertedProperty = this._convertJsonSchemaToGoogleFormat(value);
247
+ properties[key] = convertedProperty;
248
+ }
249
+ return {
250
+ type: genai_1.Type.OBJECT,
251
+ properties,
252
+ required,
253
+ propertyOrdering: Object.keys(properties),
254
+ };
255
+ }
256
+ // Handle arrays
257
+ if (jsonSchema.type === 'array') {
258
+ return {
259
+ type: genai_1.Type.ARRAY,
260
+ items: this._convertJsonSchemaToGoogleFormat(jsonSchema.items || {}),
261
+ };
262
+ }
263
+ // Handle strings
264
+ if (jsonSchema.type === 'string') {
265
+ if (jsonSchema.enum) {
266
+ return {
267
+ type: genai_1.Type.STRING,
268
+ enum: jsonSchema.enum,
269
+ };
270
+ }
271
+ return { type: genai_1.Type.STRING };
272
+ }
273
+ // Handle numbers
274
+ if (jsonSchema.type === 'number' || jsonSchema.type === 'integer') {
275
+ return { type: genai_1.Type.NUMBER };
276
+ }
277
+ // Handle booleans
278
+ if (jsonSchema.type === 'boolean') {
279
+ return { type: genai_1.Type.BOOLEAN };
280
+ }
281
+ // Default fallback
282
+ return { type: genai_1.Type.STRING };
283
+ }
284
+ }
285
+ exports.LLMSchema = LLMSchema;
286
+ //# sourceMappingURL=LLMSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMSchema.js","sourceRoot":"","sources":["../../../src/utilities/schema/LLMSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Result of parsing data against a schema
3
+ */
4
+ export interface ParseResult<T> {
5
+ success: boolean;
6
+ data?: T;
7
+ error?: string;
8
+ }
9
+ /**
10
+ * Abstract interface for schema implementations
11
+ * This allows for different validation libraries to be used internally
12
+ */
13
+ export interface LLMSchemaInterface<T = any> {
14
+ /**
15
+ * Parse and validate data against the schema
16
+ * @internal - Used internally by the package
17
+ */
18
+ _parse(data: unknown): ParseResult<T>;
19
+ /**
20
+ * Convert schema to OpenAI JSON Schema format
21
+ * @internal - Used internally by the package
22
+ */
23
+ _toOpenAISchema(): any;
24
+ /**
25
+ * Convert schema to Google Generative AI format
26
+ * @internal - Used internally by the package
27
+ */
28
+ _toGoogleSchema(): any;
29
+ optional(): LLMSchemaInterface<T | undefined>;
30
+ nullable(): LLMSchemaInterface<T | null>;
31
+ default(value: any): LLMSchemaInterface<T>;
32
+ describe(description: string): LLMSchemaInterface<T>;
33
+ min(length: number): LLMSchemaInterface<T>;
34
+ max(length: number): LLMSchemaInterface<T>;
35
+ email(): LLMSchemaInterface<T>;
36
+ url(): LLMSchemaInterface<T>;
37
+ uuid(): LLMSchemaInterface<T>;
38
+ int(): LLMSchemaInterface<T>;
39
+ positive(): LLMSchemaInterface<T>;
40
+ negative(): LLMSchemaInterface<T>;
41
+ nonpositive(): LLMSchemaInterface<T>;
42
+ nonnegative(): LLMSchemaInterface<T>;
43
+ }
44
+ /**
45
+ * Type inference helper for schemas
46
+ */
47
+ export type InferSchema<T> = T extends LLMSchemaInterface<infer U> ? U : never;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=LLMSchemaInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMSchemaInterface.js","sourceRoot":"","sources":["../../../src/utilities/schema/LLMSchemaInterface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { type LLMSchemaInterface, type InferSchema, type ParseResult } from './LLMSchemaInterface';
2
+ export { LLMSchema } from './LLMSchema';
3
+ export { LLMSchema as Schema } from './LLMSchema';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Schema = exports.LLMSchema = void 0;
4
+ // Export the concrete implementation as the main schema builder
5
+ var LLMSchema_1 = require("./LLMSchema");
6
+ Object.defineProperty(exports, "LLMSchema", { enumerable: true, get: function () { return LLMSchema_1.LLMSchema; } });
7
+ // Re-export LLMSchema as the default schema interface implementation
8
+ // This allows users to use LLMSchema while keeping implementation flexible
9
+ var LLMSchema_2 = require("./LLMSchema");
10
+ Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return LLMSchema_2.LLMSchema; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/schema/index.ts"],"names":[],"mappings":";;;AAGA,gEAAgE;AAChE,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,qEAAqE;AACrE,2EAA2E;AAC3E,yCAAkD;AAAzC,mGAAA,SAAS,OAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mate-academy/llm-gateway",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "A gateway package for LLM services.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -45,35 +45,43 @@
45
45
  ],
46
46
  "services/*": [
47
47
  "dist/services/*"
48
+ ],
49
+ "utilities": [
50
+ "dist/utilities/index.d.ts"
51
+ ],
52
+ "utilities/*": [
53
+ "dist/utilities/*"
48
54
  ]
49
55
  }
50
56
  },
51
57
  "devDependencies": {
52
58
  "@mate-academy/ts-config": "^1.0.5",
53
59
  "@types/glob": "^9.0.0",
54
- "@types/inquirer": "^9.0.8",
60
+ "@types/inquirer": "^9.0.9",
55
61
  "@types/jest": "^30.0.0",
56
62
  "@types/mime-types": "^3.0.1",
57
- "@typescript-eslint/eslint-plugin": "^8.38.0",
63
+ "@typescript-eslint/eslint-plugin": "^8.39.0",
58
64
  "dotenv": "^17.2.1",
59
- "eslint": "^9.31.0",
65
+ "eslint": "^9.32.0",
60
66
  "eslint-plugin-no-only-tests": "^3.3.0",
61
67
  "glob": "^11.0.3",
62
- "inquirer": "^12.8.2",
68
+ "inquirer": "^12.9.0",
63
69
  "jest": "^30.0.5",
64
70
  "terser": "^5.43.1",
65
- "ts-jest": "^29.4.0",
71
+ "ts-jest": "^29.4.1",
66
72
  "tsc-alias": "^1.8.16",
67
- "typescript": "^5.8.3",
68
- "typescript-eslint": "^8.38.0"
73
+ "typescript": "^5.9.2",
74
+ "typescript-eslint": "^8.39.0"
69
75
  },
70
76
  "dependencies": {
71
- "@google/genai": "^1.11.0",
77
+ "@google/genai": "^1.13.0",
72
78
  "@mate-academy/core": "^1.10.4",
73
79
  "axios": "^1.11.0",
74
80
  "js-tiktoken": "^1.0.20",
75
81
  "mime-types": "^3.0.1",
76
- "openai": "^5.10.2",
77
- "uuid": "^11.1.0"
82
+ "openai": "^5.12.1",
83
+ "uuid": "^11.1.0",
84
+ "zod": "^3.25.76",
85
+ "zod-to-json-schema": "^3.24.6"
78
86
  }
79
87
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"functional.utils.js","sourceRoot":"","sources":["../src/functional.utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,IAAI,GAAG,CAAuB,GAAM,EAAE,IAAS,EAAc,EAAE,CAAC,CAC3E,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACvB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAExC,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAgB,CAAC,CACrB,CAAC;AANW,QAAA,IAAI,QAMf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"promptBuilder.js","sourceRoot":"","sources":["../src/promptBuilder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;AAoHH,oDAQC;AA1DD,SAAS,aAAa,CACpB,MAAc,EACd,SAA2D;IAE3D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC;IACnD,+DAA+D;IAC/D,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACtD,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAClE,EAAE,MAAM,CAAC,CACX,CAAC;IAEF,MAAM,0BAA0B,GAAG,CAAC,MAAc,EAAU,EAAE;QAC5D,qEAAqE;QACrE,OAAO,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;YACjF,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YAErC,IAAI,KAAK,EAAE,CAAC;gBACV,6EAA6E;gBAC7E,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;gBAC7D,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,MAAM,GAAG,MAAM,CAAC;IAEpB,mFAAmF;IACnF,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAE5C,6CAA6C;IAC7C,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAmB,QAAW;IAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAO,CAAC;IAE7C,OAAO,CACL,GAAG,IAEqC,EAChC,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC"}