@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.
- package/README.md +214 -0
- package/dist/ai-assistant.plugin.d.ts +18 -0
- package/dist/ai-assistant.plugin.d.ts.map +1 -0
- package/dist/ai-assistant.plugin.js +86 -0
- package/dist/ai-assistant.plugin.js.map +1 -0
- package/dist/api/ai-assistant.resolver.d.ts +11 -0
- package/dist/api/ai-assistant.resolver.d.ts.map +1 -0
- package/dist/api/ai-assistant.resolver.js +43 -0
- package/dist/api/ai-assistant.resolver.js.map +1 -0
- package/dist/api/schema-extensions.d.ts +3 -0
- package/dist/api/schema-extensions.d.ts.map +1 -0
- package/dist/api/schema-extensions.js +15 -0
- package/dist/api/schema-extensions.js.map +1 -0
- package/dist/constants.d.ts +41 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +24 -0
- package/dist/constants.js.map +1 -0
- package/dist/controllers/admin-chat.controller.d.ts +21 -0
- package/dist/controllers/admin-chat.controller.d.ts.map +1 -0
- package/dist/controllers/admin-chat.controller.js +64 -0
- package/dist/controllers/admin-chat.controller.js.map +1 -0
- package/dist/controllers/ai-assistant.controller.d.ts +96 -0
- package/dist/controllers/ai-assistant.controller.d.ts.map +1 -0
- package/dist/controllers/ai-assistant.controller.js +272 -0
- package/dist/controllers/ai-assistant.controller.js.map +1 -0
- package/dist/entities/collection-embedding.entity.d.ts +13 -0
- package/dist/entities/collection-embedding.entity.d.ts.map +1 -0
- package/dist/entities/collection-embedding.entity.js +43 -0
- package/dist/entities/collection-embedding.entity.js.map +1 -0
- package/dist/entities/product-embedding.entity.d.ts +14 -0
- package/dist/entities/product-embedding.entity.d.ts.map +1 -0
- package/dist/entities/product-embedding.entity.js +44 -0
- package/dist/entities/product-embedding.entity.js.map +1 -0
- package/dist/entities/variant-embedding.entity.d.ts +13 -0
- package/dist/entities/variant-embedding.entity.d.ts.map +1 -0
- package/dist/entities/variant-embedding.entity.js +43 -0
- package/dist/entities/variant-embedding.entity.js.map +1 -0
- package/dist/handlers/collection-embedding-handler.d.ts +18 -0
- package/dist/handlers/collection-embedding-handler.d.ts.map +1 -0
- package/dist/handlers/collection-embedding-handler.js +90 -0
- package/dist/handlers/collection-embedding-handler.js.map +1 -0
- package/dist/handlers/product-embedding-handler.d.ts +20 -0
- package/dist/handlers/product-embedding-handler.d.ts.map +1 -0
- package/dist/handlers/product-embedding-handler.js +96 -0
- package/dist/handlers/product-embedding-handler.js.map +1 -0
- package/dist/handlers/variant-embedding-handler.d.ts +19 -0
- package/dist/handlers/variant-embedding-handler.d.ts.map +1 -0
- package/dist/handlers/variant-embedding-handler.js +101 -0
- package/dist/handlers/variant-embedding-handler.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-ai-chat.service.d.ts +40 -0
- package/dist/services/admin-ai-chat.service.d.ts.map +1 -0
- package/dist/services/admin-ai-chat.service.js +201 -0
- package/dist/services/admin-ai-chat.service.js.map +1 -0
- package/dist/services/admin-system-prompt.d.ts +2 -0
- package/dist/services/admin-system-prompt.d.ts.map +1 -0
- package/dist/services/admin-system-prompt.js +44 -0
- package/dist/services/admin-system-prompt.js.map +1 -0
- package/dist/services/admin-tools/admin-collection-tools.d.ts +15 -0
- package/dist/services/admin-tools/admin-collection-tools.d.ts.map +1 -0
- package/dist/services/admin-tools/admin-collection-tools.js +48 -0
- package/dist/services/admin-tools/admin-collection-tools.js.map +1 -0
- package/dist/services/admin-tools/admin-customer-tools.d.ts +15 -0
- package/dist/services/admin-tools/admin-customer-tools.d.ts.map +1 -0
- package/dist/services/admin-tools/admin-customer-tools.js +56 -0
- package/dist/services/admin-tools/admin-customer-tools.js.map +1 -0
- package/dist/services/admin-tools/admin-order-tools.d.ts +16 -0
- package/dist/services/admin-tools/admin-order-tools.d.ts.map +1 -0
- package/dist/services/admin-tools/admin-order-tools.js +69 -0
- package/dist/services/admin-tools/admin-order-tools.js.map +1 -0
- package/dist/services/admin-tools/admin-product-tools.d.ts +29 -0
- package/dist/services/admin-tools/admin-product-tools.d.ts.map +1 -0
- package/dist/services/admin-tools/admin-product-tools.js +139 -0
- package/dist/services/admin-tools/admin-product-tools.js.map +1 -0
- package/dist/services/ai-chat.service.d.ts +42 -0
- package/dist/services/ai-chat.service.d.ts.map +1 -0
- package/dist/services/ai-chat.service.js +308 -0
- package/dist/services/ai-chat.service.js.map +1 -0
- package/dist/services/chat-result-mapper.d.ts +17 -0
- package/dist/services/chat-result-mapper.d.ts.map +1 -0
- package/dist/services/chat-result-mapper.js +176 -0
- package/dist/services/chat-result-mapper.js.map +1 -0
- package/dist/services/collection-embedding.service.d.ts +14 -0
- package/dist/services/collection-embedding.service.d.ts.map +1 -0
- package/dist/services/collection-embedding.service.js +67 -0
- package/dist/services/collection-embedding.service.js.map +1 -0
- package/dist/services/conversation-cache.service.d.ts +47 -0
- package/dist/services/conversation-cache.service.d.ts.map +1 -0
- package/dist/services/conversation-cache.service.js +87 -0
- package/dist/services/conversation-cache.service.js.map +1 -0
- package/dist/services/embed-all-job.service.d.ts +28 -0
- package/dist/services/embed-all-job.service.d.ts.map +1 -0
- package/dist/services/embed-all-job.service.js +151 -0
- package/dist/services/embed-all-job.service.js.map +1 -0
- package/dist/services/embedding.service.d.ts +21 -0
- package/dist/services/embedding.service.d.ts.map +1 -0
- package/dist/services/embedding.service.js +58 -0
- package/dist/services/embedding.service.js.map +1 -0
- package/dist/services/product-embedding.service.d.ts +19 -0
- package/dist/services/product-embedding.service.d.ts.map +1 -0
- package/dist/services/product-embedding.service.js +78 -0
- package/dist/services/product-embedding.service.js.map +1 -0
- package/dist/services/system-prompt.d.ts +2 -0
- package/dist/services/system-prompt.d.ts.map +1 -0
- package/dist/services/system-prompt.js +107 -0
- package/dist/services/system-prompt.js.map +1 -0
- package/dist/services/tools/cart-tools.d.ts +14 -0
- package/dist/services/tools/cart-tools.d.ts.map +1 -0
- package/dist/services/tools/cart-tools.js +168 -0
- package/dist/services/tools/cart-tools.js.map +1 -0
- package/dist/services/tools/checkout-tools.d.ts +37 -0
- package/dist/services/tools/checkout-tools.d.ts.map +1 -0
- package/dist/services/tools/checkout-tools.js +228 -0
- package/dist/services/tools/checkout-tools.js.map +1 -0
- package/dist/services/tools/order-tools.d.ts +15 -0
- package/dist/services/tools/order-tools.d.ts.map +1 -0
- package/dist/services/tools/order-tools.js +105 -0
- package/dist/services/tools/order-tools.js.map +1 -0
- package/dist/services/tools/search-tools.d.ts +21 -0
- package/dist/services/tools/search-tools.d.ts.map +1 -0
- package/dist/services/tools/search-tools.js +214 -0
- package/dist/services/tools/search-tools.js.map +1 -0
- package/dist/services/types.d.ts +118 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/types.js +3 -0
- package/dist/services/types.js.map +1 -0
- package/dist/services/variant-embedding.service.d.ts +14 -0
- package/dist/services/variant-embedding.service.d.ts.map +1 -0
- package/dist/services/variant-embedding.service.js +59 -0
- package/dist/services/variant-embedding.service.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|