@rahul_vendure/ai-chat-plugin 0.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.
Files changed (134) hide show
  1. package/README.md +214 -0
  2. package/dist/ai-assistant.plugin.d.ts +18 -0
  3. package/dist/ai-assistant.plugin.d.ts.map +1 -0
  4. package/dist/ai-assistant.plugin.js +86 -0
  5. package/dist/ai-assistant.plugin.js.map +1 -0
  6. package/dist/api/ai-assistant.resolver.d.ts +11 -0
  7. package/dist/api/ai-assistant.resolver.d.ts.map +1 -0
  8. package/dist/api/ai-assistant.resolver.js +43 -0
  9. package/dist/api/ai-assistant.resolver.js.map +1 -0
  10. package/dist/api/schema-extensions.d.ts +3 -0
  11. package/dist/api/schema-extensions.d.ts.map +1 -0
  12. package/dist/api/schema-extensions.js +15 -0
  13. package/dist/api/schema-extensions.js.map +1 -0
  14. package/dist/constants.d.ts +41 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +24 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/controllers/admin-chat.controller.d.ts +21 -0
  19. package/dist/controllers/admin-chat.controller.d.ts.map +1 -0
  20. package/dist/controllers/admin-chat.controller.js +64 -0
  21. package/dist/controllers/admin-chat.controller.js.map +1 -0
  22. package/dist/controllers/ai-assistant.controller.d.ts +96 -0
  23. package/dist/controllers/ai-assistant.controller.d.ts.map +1 -0
  24. package/dist/controllers/ai-assistant.controller.js +272 -0
  25. package/dist/controllers/ai-assistant.controller.js.map +1 -0
  26. package/dist/entities/collection-embedding.entity.d.ts +13 -0
  27. package/dist/entities/collection-embedding.entity.d.ts.map +1 -0
  28. package/dist/entities/collection-embedding.entity.js +43 -0
  29. package/dist/entities/collection-embedding.entity.js.map +1 -0
  30. package/dist/entities/product-embedding.entity.d.ts +14 -0
  31. package/dist/entities/product-embedding.entity.d.ts.map +1 -0
  32. package/dist/entities/product-embedding.entity.js +44 -0
  33. package/dist/entities/product-embedding.entity.js.map +1 -0
  34. package/dist/entities/variant-embedding.entity.d.ts +13 -0
  35. package/dist/entities/variant-embedding.entity.d.ts.map +1 -0
  36. package/dist/entities/variant-embedding.entity.js +43 -0
  37. package/dist/entities/variant-embedding.entity.js.map +1 -0
  38. package/dist/handlers/collection-embedding-handler.d.ts +18 -0
  39. package/dist/handlers/collection-embedding-handler.d.ts.map +1 -0
  40. package/dist/handlers/collection-embedding-handler.js +90 -0
  41. package/dist/handlers/collection-embedding-handler.js.map +1 -0
  42. package/dist/handlers/product-embedding-handler.d.ts +20 -0
  43. package/dist/handlers/product-embedding-handler.d.ts.map +1 -0
  44. package/dist/handlers/product-embedding-handler.js +96 -0
  45. package/dist/handlers/product-embedding-handler.js.map +1 -0
  46. package/dist/handlers/variant-embedding-handler.d.ts +19 -0
  47. package/dist/handlers/variant-embedding-handler.d.ts.map +1 -0
  48. package/dist/handlers/variant-embedding-handler.js +101 -0
  49. package/dist/handlers/variant-embedding-handler.js.map +1 -0
  50. package/dist/index.d.ts +23 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +33 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/services/admin-ai-chat.service.d.ts +40 -0
  55. package/dist/services/admin-ai-chat.service.d.ts.map +1 -0
  56. package/dist/services/admin-ai-chat.service.js +201 -0
  57. package/dist/services/admin-ai-chat.service.js.map +1 -0
  58. package/dist/services/admin-system-prompt.d.ts +2 -0
  59. package/dist/services/admin-system-prompt.d.ts.map +1 -0
  60. package/dist/services/admin-system-prompt.js +44 -0
  61. package/dist/services/admin-system-prompt.js.map +1 -0
  62. package/dist/services/admin-tools/admin-collection-tools.d.ts +15 -0
  63. package/dist/services/admin-tools/admin-collection-tools.d.ts.map +1 -0
  64. package/dist/services/admin-tools/admin-collection-tools.js +48 -0
  65. package/dist/services/admin-tools/admin-collection-tools.js.map +1 -0
  66. package/dist/services/admin-tools/admin-customer-tools.d.ts +15 -0
  67. package/dist/services/admin-tools/admin-customer-tools.d.ts.map +1 -0
  68. package/dist/services/admin-tools/admin-customer-tools.js +56 -0
  69. package/dist/services/admin-tools/admin-customer-tools.js.map +1 -0
  70. package/dist/services/admin-tools/admin-order-tools.d.ts +16 -0
  71. package/dist/services/admin-tools/admin-order-tools.d.ts.map +1 -0
  72. package/dist/services/admin-tools/admin-order-tools.js +69 -0
  73. package/dist/services/admin-tools/admin-order-tools.js.map +1 -0
  74. package/dist/services/admin-tools/admin-product-tools.d.ts +29 -0
  75. package/dist/services/admin-tools/admin-product-tools.d.ts.map +1 -0
  76. package/dist/services/admin-tools/admin-product-tools.js +139 -0
  77. package/dist/services/admin-tools/admin-product-tools.js.map +1 -0
  78. package/dist/services/ai-chat.service.d.ts +42 -0
  79. package/dist/services/ai-chat.service.d.ts.map +1 -0
  80. package/dist/services/ai-chat.service.js +308 -0
  81. package/dist/services/ai-chat.service.js.map +1 -0
  82. package/dist/services/chat-result-mapper.d.ts +17 -0
  83. package/dist/services/chat-result-mapper.d.ts.map +1 -0
  84. package/dist/services/chat-result-mapper.js +176 -0
  85. package/dist/services/chat-result-mapper.js.map +1 -0
  86. package/dist/services/collection-embedding.service.d.ts +14 -0
  87. package/dist/services/collection-embedding.service.d.ts.map +1 -0
  88. package/dist/services/collection-embedding.service.js +67 -0
  89. package/dist/services/collection-embedding.service.js.map +1 -0
  90. package/dist/services/conversation-cache.service.d.ts +47 -0
  91. package/dist/services/conversation-cache.service.d.ts.map +1 -0
  92. package/dist/services/conversation-cache.service.js +87 -0
  93. package/dist/services/conversation-cache.service.js.map +1 -0
  94. package/dist/services/embed-all-job.service.d.ts +28 -0
  95. package/dist/services/embed-all-job.service.d.ts.map +1 -0
  96. package/dist/services/embed-all-job.service.js +151 -0
  97. package/dist/services/embed-all-job.service.js.map +1 -0
  98. package/dist/services/embedding.service.d.ts +21 -0
  99. package/dist/services/embedding.service.d.ts.map +1 -0
  100. package/dist/services/embedding.service.js +58 -0
  101. package/dist/services/embedding.service.js.map +1 -0
  102. package/dist/services/product-embedding.service.d.ts +19 -0
  103. package/dist/services/product-embedding.service.d.ts.map +1 -0
  104. package/dist/services/product-embedding.service.js +78 -0
  105. package/dist/services/product-embedding.service.js.map +1 -0
  106. package/dist/services/system-prompt.d.ts +2 -0
  107. package/dist/services/system-prompt.d.ts.map +1 -0
  108. package/dist/services/system-prompt.js +107 -0
  109. package/dist/services/system-prompt.js.map +1 -0
  110. package/dist/services/tools/cart-tools.d.ts +14 -0
  111. package/dist/services/tools/cart-tools.d.ts.map +1 -0
  112. package/dist/services/tools/cart-tools.js +168 -0
  113. package/dist/services/tools/cart-tools.js.map +1 -0
  114. package/dist/services/tools/checkout-tools.d.ts +37 -0
  115. package/dist/services/tools/checkout-tools.d.ts.map +1 -0
  116. package/dist/services/tools/checkout-tools.js +228 -0
  117. package/dist/services/tools/checkout-tools.js.map +1 -0
  118. package/dist/services/tools/order-tools.d.ts +15 -0
  119. package/dist/services/tools/order-tools.d.ts.map +1 -0
  120. package/dist/services/tools/order-tools.js +105 -0
  121. package/dist/services/tools/order-tools.js.map +1 -0
  122. package/dist/services/tools/search-tools.d.ts +21 -0
  123. package/dist/services/tools/search-tools.d.ts.map +1 -0
  124. package/dist/services/tools/search-tools.js +214 -0
  125. package/dist/services/tools/search-tools.js.map +1 -0
  126. package/dist/services/types.d.ts +118 -0
  127. package/dist/services/types.d.ts.map +1 -0
  128. package/dist/services/types.js +3 -0
  129. package/dist/services/types.js.map +1 -0
  130. package/dist/services/variant-embedding.service.d.ts +14 -0
  131. package/dist/services/variant-embedding.service.d.ts.map +1 -0
  132. package/dist/services/variant-embedding.service.js +59 -0
  133. package/dist/services/variant-embedding.service.js.map +1 -0
  134. package/package.json +57 -0
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminProductTools = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const core_1 = require("@vendure/core");
6
+ const constants_1 = require("../../constants");
7
+ class AdminProductTools {
8
+ constructor(connection, mapper, fulltextSearchService, embeddingService, productEmbeddingService, collectionEmbeddingService) {
9
+ this.connection = connection;
10
+ this.mapper = mapper;
11
+ this.fulltextSearchService = fulltextSearchService;
12
+ this.embeddingService = embeddingService;
13
+ this.productEmbeddingService = productEmbeddingService;
14
+ this.collectionEmbeddingService = collectionEmbeddingService;
15
+ this.logger = new common_1.Logger(AdminProductTools.name);
16
+ }
17
+ async searchProducts(ctx, args) {
18
+ var _a, _b;
19
+ const query = ((_a = args.query) !== null && _a !== void 0 ? _a : '').trim();
20
+ const take = Math.min((_b = args.take) !== null && _b !== void 0 ? _b : 10, 25);
21
+ if (!query) {
22
+ return { products: [], collections: [], summary: 'No search query provided.' };
23
+ }
24
+ const repo = this.connection.rawConnection.getRepository(core_1.Product);
25
+ let qb = repo.createQueryBuilder('product')
26
+ .leftJoinAndSelect('product.translations', 'translation')
27
+ .leftJoinAndSelect('product.featuredAsset', 'featuredAsset')
28
+ .leftJoinAndSelect('product.variants', 'variant')
29
+ .leftJoinAndSelect('variant.productVariantPrices', 'price')
30
+ .leftJoinAndSelect('variant.stockLevels', 'stockLevel')
31
+ .where('product.deletedAt IS NULL')
32
+ .andWhere('(LOWER(translation.name) LIKE :term OR LOWER(translation.description) LIKE :term)', { term: `%${query.toLowerCase()}%` });
33
+ if (!args.includeDisabled) {
34
+ qb = qb.andWhere('product.enabled = :enabled', { enabled: true });
35
+ }
36
+ const products = await qb.take(take).getMany();
37
+ if (products.length === 0) {
38
+ return { products: [], collections: [], summary: `No products found matching "${query}".` };
39
+ }
40
+ const mapped = this.mapper.mapProducts(products);
41
+ // Build a rich summary with admin details the LLM can reference
42
+ const summaryLines = products.map(p => {
43
+ var _a, _b, _c, _d;
44
+ const name = (_c = (_b = (_a = p.translations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
45
+ const enabled = p.enabled ? 'Enabled' : 'DISABLED';
46
+ const variants = ((_d = p.variants) !== null && _d !== void 0 ? _d : []);
47
+ const totalStock = variants.reduce((sum, v) => {
48
+ var _a;
49
+ const levels = (_a = v.stockLevels) !== null && _a !== void 0 ? _a : [];
50
+ return sum + levels.reduce((s, sl) => { var _a; return s + ((_a = sl.stockOnHand) !== null && _a !== void 0 ? _a : 0); }, 0);
51
+ }, 0);
52
+ const variantCount = variants.length;
53
+ return `"${name}" (ID: ${p.id}, ${enabled}, ${variantCount} variants, stock: ${totalStock})`;
54
+ });
55
+ return {
56
+ products: mapped,
57
+ collections: [],
58
+ summary: `Found ${mapped.length} product(s) matching "${query}": ${summaryLines.join('; ')}. Product cards with images are shown in the UI — keep your text brief.`,
59
+ };
60
+ }
61
+ async vectorSearch(ctx, args) {
62
+ var _a, _b, _c, _d, _e;
63
+ const query = ((_a = args.query) !== null && _a !== void 0 ? _a : '').trim();
64
+ if (!query) {
65
+ return { products: [], collections: [], summary: 'No search query provided.' };
66
+ }
67
+ const queryEmbedding = await this.embeddingService.embed(query);
68
+ let similar = await this.productEmbeddingService.findSimilar(ctx, queryEmbedding, constants_1.MAX_CHAT_PRODUCTS, constants_1.SIMILARITY_THRESHOLD);
69
+ if (similar.length === 0) {
70
+ const fallback = await this.productEmbeddingService.findSimilar(ctx, queryEmbedding, constants_1.MAX_CHAT_PRODUCTS);
71
+ if (fallback.length > 0 && ((_c = (_b = fallback[0]) === null || _b === void 0 ? void 0 : _b.score) !== null && _c !== void 0 ? _c : 0) >= constants_1.FALLBACK_MIN_SCORE) {
72
+ similar = fallback;
73
+ }
74
+ }
75
+ let similarCollections = await this.collectionEmbeddingService.findSimilar(ctx, queryEmbedding, 3, constants_1.SIMILARITY_THRESHOLD);
76
+ if (similarCollections.length === 0) {
77
+ const fallbackColl = await this.collectionEmbeddingService.findSimilar(ctx, queryEmbedding, 3);
78
+ if (fallbackColl.length > 0 && ((_e = (_d = fallbackColl[0]) === null || _d === void 0 ? void 0 : _d.score) !== null && _e !== void 0 ? _e : 0) >= constants_1.FALLBACK_MIN_SCORE) {
79
+ similarCollections = fallbackColl;
80
+ }
81
+ }
82
+ const products = similar.length > 0 ? await this.mapper.loadProductsByIds(similar.map(s => s.productId)) : [];
83
+ const collections = similarCollections.length > 0 ? await this.mapper.loadCollectionsByIds(similarCollections.map(s => s.collectionId)) : [];
84
+ return {
85
+ products,
86
+ collections,
87
+ summary: products.length > 0
88
+ ? `Found ${products.length} product(s) related to "${query}": ${products.map(p => `"${p.name}" (${(0, constants_1.formatPrice)(p.price)})`).join(', ')}. Product cards with images are shown in the UI — keep your text brief.`
89
+ : `No products found related to "${query}".`,
90
+ };
91
+ }
92
+ async getProductDetails(ctx, args) {
93
+ var _a, _b, _c, _d, _e, _f, _g;
94
+ const repo = this.connection.rawConnection.getRepository(core_1.Product);
95
+ let qb = repo.createQueryBuilder('product')
96
+ .leftJoinAndSelect('product.translations', 'translation')
97
+ .leftJoinAndSelect('product.featuredAsset', 'featuredAsset')
98
+ .leftJoinAndSelect('product.variants', 'variant')
99
+ .leftJoinAndSelect('variant.translations', 'variantTranslation')
100
+ .leftJoinAndSelect('variant.productVariantPrices', 'price')
101
+ .leftJoinAndSelect('variant.stockLevels', 'stockLevel')
102
+ .where('product.deletedAt IS NULL');
103
+ if (args.productId) {
104
+ qb = qb.andWhere('product.id = :id', { id: args.productId });
105
+ }
106
+ else if (args.slug) {
107
+ qb = qb.andWhere('translation.slug = :slug', { slug: args.slug });
108
+ }
109
+ else {
110
+ return { products: [], collections: [], summary: 'Please provide a productId or slug.' };
111
+ }
112
+ const product = await qb.getOne();
113
+ if (!product) {
114
+ return { products: [], collections: [], summary: `Product not found.` };
115
+ }
116
+ const mapped = this.mapper.mapProducts([product]);
117
+ const name = (_c = (_b = (_a = product.translations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
118
+ const description = (_f = (_e = (_d = product.translations) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.description) !== null && _f !== void 0 ? _f : '';
119
+ const enabled = product.enabled ? 'Enabled' : 'DISABLED';
120
+ const variants = ((_g = product.variants) !== null && _g !== void 0 ? _g : []);
121
+ const variantSummary = variants.map((v) => {
122
+ var _a, _b, _c, _d, _e, _f, _g, _h;
123
+ const vName = (_c = (_b = (_a = v.translations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
124
+ const priceVal = (_f = (_e = (_d = v.productVariantPrices) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.price) !== null && _f !== void 0 ? _f : 0;
125
+ const sku = (_g = v.sku) !== null && _g !== void 0 ? _g : '';
126
+ const levels = (_h = v.stockLevels) !== null && _h !== void 0 ? _h : [];
127
+ const stockOnHand = levels.reduce((s, sl) => { var _a; return s + ((_a = sl.stockOnHand) !== null && _a !== void 0 ? _a : 0); }, 0);
128
+ return `${vName} (SKU: ${sku}, ${(0, constants_1.formatPrice)(priceVal)}, stock: ${stockOnHand})`;
129
+ }).join('; ');
130
+ const descSnippet = description.length > 200 ? description.substring(0, 200) + '...' : description;
131
+ return {
132
+ products: mapped,
133
+ collections: [],
134
+ summary: `${name} (ID: ${product.id}, ${enabled}). ${descSnippet ? `Description: ${descSnippet}. ` : ''}Variants: ${variantSummary}. Product card with image shown in UI.`,
135
+ };
136
+ }
137
+ }
138
+ exports.AdminProductTools = AdminProductTools;
139
+ //# sourceMappingURL=admin-product-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-product-tools.js","sourceRoot":"","sources":["../../../src/services/admin-tools/admin-product-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { streamText } from 'ai';
4
+ import { RequestContext, TransactionalConnection, OrderService, CustomerService, ConfigService } from '@vendure/core';
5
+ import { type AiAssistantPluginOptions } from '../constants';
6
+ import { EmbeddingService } from './embedding.service';
7
+ import { ProductEmbeddingService } from './product-embedding.service';
8
+ import { CollectionEmbeddingService } from './collection-embedding.service';
9
+ import type { AiChatProduct, AiChatCollection, AddToCartAction, AiChatOrder, AiChatOrderLine, AiActiveOrder, AiCartLine, SetShippingAddressAction, SetBillingAddressAction, SetShippingMethodAction, ChatResult, StreamingChatResult } from './types';
10
+ export type { AiChatProduct, AiChatCollection, AddToCartAction, AiChatOrder, AiChatOrderLine, AiActiveOrder, AiCartLine, SetShippingAddressAction, SetBillingAddressAction, SetShippingMethodAction, ChatResult, StreamingChatResult, };
11
+ export declare class AiChatService implements OnModuleInit {
12
+ private options;
13
+ private connection;
14
+ private moduleRef;
15
+ private embeddingService;
16
+ private productEmbeddingService;
17
+ private collectionEmbeddingService;
18
+ private orderService;
19
+ private customerService;
20
+ private configService;
21
+ private readonly logger;
22
+ private openai;
23
+ private fulltextSearchService;
24
+ private assetUrlPrefix;
25
+ private mapper;
26
+ private searchTools;
27
+ private cartTools;
28
+ private orderTools;
29
+ private checkoutTools;
30
+ constructor(options: AiAssistantPluginOptions, connection: TransactionalConnection, moduleRef: ModuleRef, embeddingService: EmbeddingService, productEmbeddingService: ProductEmbeddingService, collectionEmbeddingService: CollectionEmbeddingService, orderService: OrderService, customerService: CustomerService, configService: ConfigService);
31
+ onModuleInit(): Promise<void>;
32
+ private buildTools;
33
+ streamChat(ctx: RequestContext, userMessage: string, conversationHistory?: Array<{
34
+ role: 'user' | 'assistant';
35
+ content: string;
36
+ }>, customerId?: string | number): ReturnType<typeof streamText>;
37
+ chat(ctx: RequestContext, userMessage: string, conversationHistory?: Array<{
38
+ role: 'user' | 'assistant';
39
+ content: string;
40
+ }>, customerId?: string | number): Promise<ChatResult>;
41
+ }
42
+ //# sourceMappingURL=ai-chat.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-chat.service.d.ts","sourceRoot":"","sources":["../../src/services/ai-chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAmC,MAAM,IAAI,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAwB,KAAK,wBAAwB,EAA2C,MAAM,cAAc,CAAC;AAC5H,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAO5E,OAAO,KAAK,EACR,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACtB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACR,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,UAAU,EACV,mBAAmB,GACtB,CAAC;AAIF,qBACa,aAAc,YAAW,YAAY;IAaZ,OAAO,CAAC,OAAO;IAC7C,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,0BAA0B;IAClC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,aAAa;IApBzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,cAAc,CAAc;IAEpC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAiB;gBAGI,OAAO,EAAE,wBAAwB,EAC/D,UAAU,EAAE,uBAAuB,EACnC,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,uBAAuB,EAChD,0BAA0B,EAAE,0BAA0B,EACtD,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa;IAKlC,YAAY;IA6ClB,OAAO,CAAC,UAAU;IA8HlB,UAAU,CACN,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,EACnB,mBAAmB,GAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM,EAChF,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAC7B,UAAU,CAAC,OAAO,UAAU,CAAC;IA8B1B,IAAI,CACN,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,EACnB,mBAAmB,GAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM,EAChF,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,UAAU,CAAC;CA2DzB"}
@@ -0,0 +1,308 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var AiChatService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AiChatService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
19
+ const ai_1 = require("ai");
20
+ const openai_1 = require("@ai-sdk/openai");
21
+ const zod_1 = require("zod");
22
+ const core_2 = require("@vendure/core");
23
+ const constants_1 = require("../constants");
24
+ const embedding_service_1 = require("./embedding.service");
25
+ const product_embedding_service_1 = require("./product-embedding.service");
26
+ const collection_embedding_service_1 = require("./collection-embedding.service");
27
+ const chat_result_mapper_1 = require("./chat-result-mapper");
28
+ const search_tools_1 = require("./tools/search-tools");
29
+ const cart_tools_1 = require("./tools/cart-tools");
30
+ const order_tools_1 = require("./tools/order-tools");
31
+ const checkout_tools_1 = require("./tools/checkout-tools");
32
+ const system_prompt_1 = require("./system-prompt");
33
+ // Tool definitions are created inline in the chat/streamChat methods using Vercel AI SDK tool() + zod schemas
34
+ let AiChatService = AiChatService_1 = class AiChatService {
35
+ constructor(options, connection, moduleRef, embeddingService, productEmbeddingService, collectionEmbeddingService, orderService, customerService, configService) {
36
+ this.options = options;
37
+ this.connection = connection;
38
+ this.moduleRef = moduleRef;
39
+ this.embeddingService = embeddingService;
40
+ this.productEmbeddingService = productEmbeddingService;
41
+ this.collectionEmbeddingService = collectionEmbeddingService;
42
+ this.orderService = orderService;
43
+ this.customerService = customerService;
44
+ this.configService = configService;
45
+ this.logger = new common_1.Logger(AiChatService_1.name);
46
+ this.assetUrlPrefix = '';
47
+ this.openai = (0, openai_1.createOpenAI)({ apiKey: options.openaiApiKey });
48
+ }
49
+ async onModuleInit() {
50
+ try {
51
+ // Dynamically resolve FulltextSearchService from DefaultSearchPlugin's module
52
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
53
+ const mod = require('@vendure/core/dist/plugin/default-search-plugin/fulltext-search.service');
54
+ this.fulltextSearchService = this.moduleRef.get(mod.FulltextSearchService, { strict: false });
55
+ this.logger.log('FulltextSearchService resolved successfully');
56
+ }
57
+ catch (e) {
58
+ this.logger.warn('FulltextSearchService not available, falling back to DB queries for search');
59
+ }
60
+ // Resolve asset URL prefix: explicit config > auto-detect from apiOptions
61
+ if (this.options.assetBaseUrl) {
62
+ this.assetUrlPrefix = this.options.assetBaseUrl.endsWith('/')
63
+ ? this.options.assetBaseUrl
64
+ : this.options.assetBaseUrl + '/';
65
+ this.logger.log(`Asset URL prefix from config: ${this.assetUrlPrefix}`);
66
+ }
67
+ else {
68
+ try {
69
+ const { apiOptions } = this.configService;
70
+ const hostname = apiOptions.hostname || 'localhost';
71
+ const port = apiOptions.port || 3000;
72
+ this.assetUrlPrefix = `http://${hostname === '0.0.0.0' ? 'localhost' : hostname}:${port}/assets/`;
73
+ this.logger.log(`Asset URL prefix auto-detected: ${this.assetUrlPrefix}`);
74
+ }
75
+ catch (e) {
76
+ this.assetUrlPrefix = '/assets/';
77
+ this.logger.warn(`Could not resolve asset URL prefix, using relative: ${this.assetUrlPrefix}`);
78
+ }
79
+ }
80
+ // Initialize helper classes
81
+ this.mapper = new chat_result_mapper_1.ChatResultMapper(this.connection, this.assetUrlPrefix);
82
+ this.searchTools = new search_tools_1.SearchTools(this.connection, this.embeddingService, this.productEmbeddingService, this.collectionEmbeddingService, this.mapper, this.fulltextSearchService);
83
+ this.cartTools = new cart_tools_1.CartTools(this.connection, this.orderService, this.mapper);
84
+ this.orderTools = new order_tools_1.OrderTools(this.connection, this.mapper);
85
+ this.checkoutTools = new checkout_tools_1.CheckoutTools(this.connection, this.orderService);
86
+ }
87
+ buildTools(ctx, customerId) {
88
+ return {
89
+ searchProducts: (0, ai_1.tool)({
90
+ description: 'Search for products by keyword or product name. Returns products with their id, name, slug, price, image, and variantId.',
91
+ inputSchema: zod_1.z.object({
92
+ query: zod_1.z.string().describe('The search term or product keyword'),
93
+ take: zod_1.z.number().optional().describe('Number of results to return (default 10, max 20)'),
94
+ }),
95
+ execute: async ({ query, take }) => this.searchTools.searchProducts(ctx, { query, take }),
96
+ }),
97
+ vectorSearch: (0, ai_1.tool)({
98
+ description: 'Semantic/intent-based product search. Use for vague queries like "gift for dad", "something romantic".',
99
+ inputSchema: zod_1.z.object({
100
+ query: zod_1.z.string().describe('The semantic search query'),
101
+ }),
102
+ execute: async ({ query }) => this.searchTools.vectorSearch(ctx, { query }),
103
+ }),
104
+ getCollections: (0, ai_1.tool)({
105
+ description: 'Get available product collections/categories in the store.',
106
+ inputSchema: zod_1.z.object({
107
+ query: zod_1.z.string().optional().describe('Optional search term to filter collections'),
108
+ }),
109
+ execute: async ({ query }) => this.searchTools.getCollections(ctx, { query }),
110
+ }),
111
+ filterByPrice: (0, ai_1.tool)({
112
+ description: 'Filter products by price range / budget. Prices are in the smallest currency unit (cents). "under 50 dollars" = maxPrice 5000.',
113
+ inputSchema: zod_1.z.object({
114
+ minPrice: zod_1.z.number().optional().describe('Min price in cents'),
115
+ maxPrice: zod_1.z.number().optional().describe('Max price in cents'),
116
+ query: zod_1.z.string().optional().describe('Optional keyword to narrow results (e.g. "laptop")'),
117
+ }),
118
+ execute: async ({ minPrice, maxPrice, query }) => this.searchTools.filterByPrice(ctx, { minPrice, maxPrice, query }),
119
+ }),
120
+ addToCart: (0, ai_1.tool)({
121
+ description: 'Add a product to the customer\'s shopping cart. The variantId MUST be the exact numeric ID from a previous search result. Never guess or fabricate a variantId.',
122
+ inputSchema: zod_1.z.object({
123
+ variantId: zod_1.z.string().describe('The EXACT numeric variant ID from a previous search result'),
124
+ quantity: zod_1.z.number().optional().describe('Quantity to add (default 1)'),
125
+ productName: zod_1.z.string().optional().describe('The product name (for confirmation)'),
126
+ }),
127
+ execute: async ({ variantId, quantity, productName }) => this.cartTools.addToCart(ctx, { variantId, quantity, productName }),
128
+ }),
129
+ getActiveOrder: (0, ai_1.tool)({
130
+ description: 'Get the customer\'s current shopping cart (active order). Returns all line items with product names, quantities, prices, and the cart total.',
131
+ inputSchema: zod_1.z.object({}),
132
+ execute: async () => this.cartTools.getActiveOrder(ctx, {}),
133
+ }),
134
+ adjustOrderLine: (0, ai_1.tool)({
135
+ description: 'Adjust the quantity of an item in the customer\'s cart, or remove it. Requires the orderLineId from getActiveOrder results. Set quantity to 0 to remove the item.',
136
+ inputSchema: zod_1.z.object({
137
+ orderLineId: zod_1.z.string().describe('The order line ID from getActiveOrder results'),
138
+ quantity: zod_1.z.number().describe('The new absolute quantity. Set to 0 to remove.'),
139
+ }),
140
+ execute: async ({ orderLineId, quantity }) => this.cartTools.adjustOrderLine(ctx, { orderLineId, quantity }),
141
+ }),
142
+ getOrderHistory: (0, ai_1.tool)({
143
+ description: 'Get the customer\'s past orders. Returns a list of orders with code, state, total, date, and items ordered.',
144
+ inputSchema: zod_1.z.object({
145
+ take: zod_1.z.number().optional().describe('Max number of orders to return (default 5, max 10)'),
146
+ }),
147
+ execute: async ({ take }) => this.orderTools.getOrderHistory(ctx, { take }, customerId),
148
+ }),
149
+ trackOrder: (0, ai_1.tool)({
150
+ description: 'Get the status and tracking information for a specific order.',
151
+ inputSchema: zod_1.z.object({
152
+ orderId: zod_1.z.string().optional().describe('The order ID (numeric)'),
153
+ orderCode: zod_1.z.string().optional().describe('The order code (e.g. "A1B2C3D4")'),
154
+ }),
155
+ execute: async ({ orderId, orderCode }) => this.orderTools.trackOrder(ctx, { orderId, orderCode }, customerId),
156
+ }),
157
+ getAvailableCountries: (0, ai_1.tool)({
158
+ description: 'List countries available for shipping/billing addresses.',
159
+ inputSchema: zod_1.z.object({}),
160
+ execute: async () => this.checkoutTools.getAvailableCountries(ctx),
161
+ }),
162
+ getEligibleShippingMethods: (0, ai_1.tool)({
163
+ description: 'Get available shipping methods for the active order. Call after the shipping address has been set.',
164
+ inputSchema: zod_1.z.object({}),
165
+ execute: async () => this.checkoutTools.getEligibleShippingMethods(ctx),
166
+ }),
167
+ setShippingAddress: (0, ai_1.tool)({
168
+ description: 'Set the shipping address on the active order. Requires all address fields.',
169
+ inputSchema: zod_1.z.object({
170
+ fullName: zod_1.z.string().describe('Full name of the recipient'),
171
+ streetLine1: zod_1.z.string().describe('Street address line 1'),
172
+ streetLine2: zod_1.z.string().optional().describe('Street address line 2'),
173
+ city: zod_1.z.string().describe('City'),
174
+ province: zod_1.z.string().describe('State/province'),
175
+ postalCode: zod_1.z.string().describe('Postal/ZIP code'),
176
+ countryCode: zod_1.z.string().describe('Two-letter country code (e.g. "US", "GB")'),
177
+ phoneNumber: zod_1.z.string().describe('Phone number'),
178
+ company: zod_1.z.string().optional().describe('Company name'),
179
+ }),
180
+ execute: async (params) => this.checkoutTools.setShippingAddress(ctx, params),
181
+ }),
182
+ setBillingAddress: (0, ai_1.tool)({
183
+ description: 'Set the billing address on the active order. Can be the same as shipping address.',
184
+ inputSchema: zod_1.z.object({
185
+ fullName: zod_1.z.string().describe('Full name'),
186
+ streetLine1: zod_1.z.string().describe('Street address line 1'),
187
+ streetLine2: zod_1.z.string().optional().describe('Street address line 2'),
188
+ city: zod_1.z.string().describe('City'),
189
+ province: zod_1.z.string().describe('State/province'),
190
+ postalCode: zod_1.z.string().describe('Postal/ZIP code'),
191
+ countryCode: zod_1.z.string().describe('Two-letter country code'),
192
+ phoneNumber: zod_1.z.string().describe('Phone number'),
193
+ company: zod_1.z.string().optional().describe('Company name'),
194
+ }),
195
+ execute: async (params) => this.checkoutTools.setBillingAddress(ctx, params),
196
+ }),
197
+ getEligiblePaymentMethods: (0, ai_1.tool)({
198
+ description: 'Get available payment methods for the active order. Use this when the customer asks how they can pay or wants to proceed to checkout.',
199
+ inputSchema: zod_1.z.object({}),
200
+ execute: async () => this.checkoutTools.getEligiblePaymentMethods(ctx),
201
+ }),
202
+ setShippingMethod: (0, ai_1.tool)({
203
+ description: 'Set the chosen shipping method on the active order. Use the id from getEligibleShippingMethods.',
204
+ inputSchema: zod_1.z.object({
205
+ shippingMethodId: zod_1.z.string().describe('The shipping method ID from getEligibleShippingMethods'),
206
+ }),
207
+ execute: async ({ shippingMethodId }) => this.checkoutTools.setShippingMethod(ctx, { shippingMethodId }),
208
+ }),
209
+ };
210
+ }
211
+ streamChat(ctx, userMessage, conversationHistory = [], customerId) {
212
+ const messages = [
213
+ { role: 'system', content: system_prompt_1.SYSTEM_PROMPT },
214
+ ...conversationHistory,
215
+ { role: 'user', content: userMessage },
216
+ ];
217
+ const tools = this.buildTools(ctx, customerId);
218
+ return (0, ai_1.streamText)({
219
+ model: this.openai('gpt-4o-mini'),
220
+ messages,
221
+ tools,
222
+ stopWhen: (0, ai_1.stepCountIs)(5),
223
+ temperature: 0.7,
224
+ maxOutputTokens: 1024,
225
+ onStepFinish: (step) => {
226
+ if (step.toolResults && step.toolResults.length > 0) {
227
+ for (const result of step.toolResults) {
228
+ this.logger.log(`Tool "${result.toolName}" completed`);
229
+ }
230
+ }
231
+ },
232
+ onError: (event) => {
233
+ this.logger.error(`streamText error: ${event.error}`);
234
+ },
235
+ });
236
+ }
237
+ // yo chai stream bina use garna paryo vanee kailee
238
+ async chat(ctx, userMessage, conversationHistory = [], customerId) {
239
+ var _a, _b, _c, _d;
240
+ const result = this.streamChat(ctx, userMessage, conversationHistory, customerId);
241
+ const text = await result.text;
242
+ const steps = await result.steps;
243
+ let allProducts = [];
244
+ let allCollections = [];
245
+ let allOrders = [];
246
+ let addToCartAction;
247
+ let activeOrder;
248
+ let setShippingAddressAction;
249
+ let setBillingAddressAction;
250
+ let setShippingMethodAction;
251
+ for (const step of steps) {
252
+ for (const toolResult of step.toolResults) {
253
+ const data = (_a = toolResult.output) !== null && _a !== void 0 ? _a : toolResult.result;
254
+ if (!data)
255
+ continue;
256
+ if (((_b = data.products) === null || _b === void 0 ? void 0 : _b.length) > 0) {
257
+ allProducts = this.mapper.mergeProducts(allProducts, data.products);
258
+ }
259
+ if (((_c = data.collections) === null || _c === void 0 ? void 0 : _c.length) > 0) {
260
+ allCollections = this.mapper.mergeCollections(allCollections, data.collections);
261
+ }
262
+ if (((_d = data.orders) === null || _d === void 0 ? void 0 : _d.length) > 0) {
263
+ allOrders = data.orders;
264
+ }
265
+ if (data.addToCartAction) {
266
+ addToCartAction = data.addToCartAction;
267
+ }
268
+ if (data.activeOrder) {
269
+ activeOrder = data.activeOrder;
270
+ }
271
+ if (data.setShippingAddressAction) {
272
+ setShippingAddressAction = data.setShippingAddressAction;
273
+ }
274
+ if (data.setBillingAddressAction) {
275
+ setBillingAddressAction = data.setBillingAddressAction;
276
+ }
277
+ if (data.setShippingMethodAction) {
278
+ setShippingMethodAction = data.setShippingMethodAction;
279
+ }
280
+ }
281
+ }
282
+ return {
283
+ message: text,
284
+ products: allProducts.slice(0, constants_1.MAX_CHAT_PRODUCTS),
285
+ collections: allCollections.slice(0, constants_1.MAX_CHAT_COLLECTIONS),
286
+ addToCartAction,
287
+ orders: allOrders.length > 0 ? allOrders : undefined,
288
+ activeOrder,
289
+ setShippingAddressAction,
290
+ setBillingAddressAction,
291
+ setShippingMethodAction,
292
+ };
293
+ }
294
+ };
295
+ exports.AiChatService = AiChatService;
296
+ exports.AiChatService = AiChatService = AiChatService_1 = __decorate([
297
+ (0, common_1.Injectable)(),
298
+ __param(0, (0, common_1.Inject)(constants_1.AI_ASSISTANT_OPTIONS)),
299
+ __metadata("design:paramtypes", [Object, core_2.TransactionalConnection,
300
+ core_1.ModuleRef,
301
+ embedding_service_1.EmbeddingService,
302
+ product_embedding_service_1.ProductEmbeddingService,
303
+ collection_embedding_service_1.CollectionEmbeddingService,
304
+ core_2.OrderService,
305
+ core_2.CustomerService,
306
+ core_2.ConfigService])
307
+ ], AiChatService);
308
+ //# sourceMappingURL=ai-chat.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-chat.service.js","sourceRoot":"","sources":["../../src/services/ai-chat.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA0E;AAC1E,uCAAyC;AACzC,2BAAiE;AACjE,2CAA8C;AAC9C,6BAAwB;AACxB,wCAAsH;AACtH,4CAA4H;AAC5H,2DAAuD;AACvD,2EAAsE;AACtE,iFAA4E;AAC5E,6DAAwD;AACxD,uDAAmD;AACnD,mDAA+C;AAC/C,qDAAiD;AACjD,2DAAuD;AACvD,mDAAgD;AAgChD,8GAA8G;AAGvG,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAYtB,YACkC,OAAyC,EAC/D,UAAmC,EACnC,SAAoB,EACpB,gBAAkC,EAClC,uBAAgD,EAChD,0BAAsD,EACtD,YAA0B,EAC1B,eAAgC,EAChC,aAA4B;QARE,YAAO,GAAP,OAAO,CAA0B;QAC/D,eAAU,GAAV,UAAU,CAAyB;QACnC,cAAS,GAAT,SAAS,CAAW;QACpB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,iBAAY,GAAZ,YAAY,CAAc;QAC1B,oBAAe,GAAf,eAAe,CAAiB;QAChC,kBAAa,GAAb,aAAa,CAAe;QApBvB,WAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;QAGjD,mBAAc,GAAW,EAAE,CAAC;QAmBhC,IAAI,CAAC,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,YAAY;QACd,IAAI,CAAC;YACD,8EAA8E;YAC9E,iEAAiE;YACjE,MAAM,GAAG,GAAG,OAAO,CAAC,yEAAyE,CAAC,CAAC;YAC/F,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QACnG,CAAC;QAED,0EAA0E;QAC1E,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACzD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY;gBAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC;gBACD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAC;gBACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC;gBACrC,IAAI,CAAC,cAAc,GAAG,UAAU,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,UAAU,CAAC;gBAClG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACnG,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAC9B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,0BAA0B,EAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,qBAAqB,CAC7B,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAEO,UAAU,CAAC,GAAmB,EAAE,UAA4B;QAChE,OAAO;YACH,cAAc,EAAE,IAAA,SAAI,EAAC;gBACjB,WAAW,EAAE,0HAA0H;gBACvI,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;oBAChE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;iBAC3F,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC5F,CAAC;YACF,YAAY,EAAE,IAAA,SAAI,EAAC;gBACf,WAAW,EAAE,wGAAwG;gBACrH,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;iBAC1D,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;aAC9E,CAAC;YACF,cAAc,EAAE,IAAA,SAAI,EAAC;gBACjB,WAAW,EAAE,4DAA4D;gBACzE,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;iBACtF,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;aAChF,CAAC;YACF,aAAa,EAAE,IAAA,SAAI,EAAC;gBAChB,WAAW,EAAE,gIAAgI;gBAC7I,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBAC9D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBAC9D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;iBAC9F,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;aACvH,CAAC;YACF,SAAS,EAAE,IAAA,SAAI,EAAC;gBACZ,WAAW,EAAE,iKAAiK;gBAC9K,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;oBAC5F,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;oBACvE,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;iBACrF,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;aAC/H,CAAC;YACF,cAAc,EAAE,IAAA,SAAI,EAAC;gBACjB,WAAW,EAAE,8IAA8I;gBAC3J,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC;aAC9D,CAAC;YACF,eAAe,EAAE,IAAA,SAAI,EAAC;gBAClB,WAAW,EAAE,mKAAmK;gBAChL,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;oBACjF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;iBAClF,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;aAC/G,CAAC;YACF,eAAe,EAAE,IAAA,SAAI,EAAC;gBAClB,WAAW,EAAE,6GAA6G;gBAC1H,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;iBAC7F,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC;aAC1F,CAAC;YACF,UAAU,EAAE,IAAA,SAAI,EAAC;gBACb,WAAW,EAAE,+DAA+D;gBAC5E,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;oBACjE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;iBAChF,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;aACjH,CAAC;YACF,qBAAqB,EAAE,IAAA,SAAI,EAAC;gBACxB,WAAW,EAAE,0DAA0D;gBACvE,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC;aACrE,CAAC;YACF,0BAA0B,EAAE,IAAA,SAAI,EAAC;gBAC7B,WAAW,EAAE,oGAAoG;gBACjH,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,GAAG,CAAC;aAC1E,CAAC;YACF,kBAAkB,EAAE,IAAA,SAAI,EAAC;gBACrB,WAAW,EAAE,4EAA4E;gBACzF,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;oBAC3D,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACzD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACpE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAC/C,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;oBAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;iBAC1D,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;aAChF,CAAC;YACF,iBAAiB,EAAE,IAAA,SAAI,EAAC;gBACpB,WAAW,EAAE,mFAAmF;gBAChG,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAC1C,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACzD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBACpE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAC/C,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;oBAC3D,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;iBAC1D,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC;aAC/E,CAAC;YACF,yBAAyB,EAAE,IAAA,SAAI,EAAC;gBAC5B,WAAW,EAAE,uIAAuI;gBACpJ,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,CAAC;aACzE,CAAC;YACF,iBAAiB,EAAE,IAAA,SAAI,EAAC;gBACpB,WAAW,EAAE,iGAAiG;gBAC9G,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;oBAClB,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;iBAClG,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,gBAAgB,EAAE,CAAC;aAC3G,CAAC;SAEL,CAAC;IACN,CAAC;IAED,UAAU,CACN,GAAmB,EACnB,WAAmB,EACnB,sBAA8E,EAAE,EAChF,UAA4B;QAE5B,MAAM,QAAQ,GAAsE;YAChF,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAAa,EAAE;YAC1C,GAAG,mBAAmB;YACtB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACzC,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAE/C,OAAO,IAAA,eAAU,EAAC;YACd,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACjC,QAAQ;YACR,KAAK;YACL,QAAQ,EAAE,IAAA,gBAAW,EAAC,CAAC,CAAC;YACxB,WAAW,EAAE,GAAG;YAChB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,aAAa,CAAC,CAAC;oBAC3D,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,IAAI,CACN,GAAmB,EACnB,WAAmB,EACnB,sBAA8E,EAAE,EAChF,UAA4B;;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAElF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAEjC,IAAI,WAAW,GAAoB,EAAE,CAAC;QACtC,IAAI,cAAc,GAAuB,EAAE,CAAC;QAC5C,IAAI,SAAS,GAAkB,EAAE,CAAC;QAClC,IAAI,eAA4C,CAAC;QACjD,IAAI,WAAsC,CAAC;QAC3C,IAAI,wBAA8D,CAAC;QACnE,IAAI,uBAA4D,CAAC;QACjE,IAAI,uBAA4D,CAAC;QAEjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAC,UAAkB,CAAC,MAAM,mCAAK,UAAkB,CAAC,MAAM,CAAC;gBACtE,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE,CAAC;oBAC5B,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,MAAM,IAAG,CAAC,EAAE,CAAC;oBAC/B,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE,CAAC;oBAC1B,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5B,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC3C,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBACnC,CAAC;gBACD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAChC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;gBAC7D,CAAC;gBACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC/B,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBAC3D,CAAC;gBACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC/B,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBAC3D,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,6BAAiB,CAAC;YACjD,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,gCAAoB,CAAC;YAC1D,eAAe;YACf,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpD,WAAW;YACX,wBAAwB;YACxB,uBAAuB;YACvB,uBAAuB;SAC1B,CAAC;IACN,CAAC;CACJ,CAAA;AAxSY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAcJ,WAAA,IAAA,eAAM,EAAC,gCAAoB,CAAC,CAAA;6CACT,8BAAuB;QACxB,gBAAS;QACF,oCAAgB;QACT,mDAAuB;QACpB,yDAA0B;QACxC,mBAAY;QACT,sBAAe;QACjB,oBAAa;GArB/B,aAAa,CAwSzB"}
@@ -0,0 +1,17 @@
1
+ import { Product, Collection, Order, TransactionalConnection } from '@vendure/core';
2
+ import type { AiChatProduct, AiChatCollection, AiChatOrder, AiActiveOrder } from './types';
3
+ export declare class ChatResultMapper {
4
+ private connection;
5
+ private assetUrlPrefix;
6
+ constructor(connection: TransactionalConnection, assetUrlPrefix: string);
7
+ resolveAssetUrl(previewPath: string | null): string | null;
8
+ mapOrders(orders: Order[]): AiChatOrder[];
9
+ mapActiveOrder(order: Order): AiActiveOrder;
10
+ mapProducts(products: Product[]): AiChatProduct[];
11
+ mapCollections(collections: Collection[]): AiChatCollection[];
12
+ loadProductsByIds(productIds: number[]): Promise<AiChatProduct[]>;
13
+ loadCollectionsByIds(collectionIds: number[]): Promise<AiChatCollection[]>;
14
+ mergeProducts(existing: AiChatProduct[], incoming: AiChatProduct[]): AiChatProduct[];
15
+ mergeCollections(existing: AiChatCollection[], incoming: AiChatCollection[]): AiChatCollection[];
16
+ }
17
+ //# sourceMappingURL=chat-result-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-result-mapper.d.ts","sourceRoot":"","sources":["../../src/services/chat-result-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,UAAU,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAEpG,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAmB,aAAa,EAAc,MAAM,SAAS,CAAC;AAExH,qBAAa,gBAAgB;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;gBADd,UAAU,EAAE,uBAAuB,EACnC,cAAc,EAAE,MAAM;IAGlC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAQ1D,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE;IAyCzC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa;IAuB3C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE;IAwBjD,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE;IAsBvD,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAWjE,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAUhF,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;IASpF,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE;CAQnG"}