@vezlo/assistant-server 2.9.0 → 2.11.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 (56) hide show
  1. package/README.md +10 -0
  2. package/database-schema.sql +44 -0
  3. package/dist/src/bootstrap/initializeServices.d.ts +7 -0
  4. package/dist/src/bootstrap/initializeServices.d.ts.map +1 -1
  5. package/dist/src/bootstrap/initializeServices.js +25 -4
  6. package/dist/src/bootstrap/initializeServices.js.map +1 -1
  7. package/dist/src/controllers/ChatController.d.ts +6 -0
  8. package/dist/src/controllers/ChatController.d.ts.map +1 -1
  9. package/dist/src/controllers/ChatController.js +91 -17
  10. package/dist/src/controllers/ChatController.js.map +1 -1
  11. package/dist/src/controllers/DatabaseToolConfigController.d.ts +81 -0
  12. package/dist/src/controllers/DatabaseToolConfigController.d.ts.map +1 -0
  13. package/dist/src/controllers/DatabaseToolConfigController.js +524 -0
  14. package/dist/src/controllers/DatabaseToolConfigController.js.map +1 -0
  15. package/dist/src/controllers/KnowledgeController.js +4 -4
  16. package/dist/src/controllers/KnowledgeController.js.map +1 -1
  17. package/dist/src/migrations/011_create_database_tool_configs.d.ts +4 -0
  18. package/dist/src/migrations/011_create_database_tool_configs.d.ts.map +1 -0
  19. package/dist/src/migrations/011_create_database_tool_configs.js +49 -0
  20. package/dist/src/migrations/011_create_database_tool_configs.js.map +1 -0
  21. package/dist/src/server.js +399 -0
  22. package/dist/src/server.js.map +1 -1
  23. package/dist/src/services/AIService.d.ts +6 -0
  24. package/dist/src/services/AIService.d.ts.map +1 -1
  25. package/dist/src/services/AIService.js +30 -2
  26. package/dist/src/services/AIService.js.map +1 -1
  27. package/dist/src/services/DatabaseToolConfigService.d.ts +133 -0
  28. package/dist/src/services/DatabaseToolConfigService.d.ts.map +1 -0
  29. package/dist/src/services/DatabaseToolConfigService.js +442 -0
  30. package/dist/src/services/DatabaseToolConfigService.js.map +1 -0
  31. package/dist/src/services/DatabaseToolService.d.ts +75 -0
  32. package/dist/src/services/DatabaseToolService.d.ts.map +1 -0
  33. package/dist/src/services/DatabaseToolService.js +299 -0
  34. package/dist/src/services/DatabaseToolService.js.map +1 -0
  35. package/dist/src/services/IntentService.d.ts +12 -1
  36. package/dist/src/services/IntentService.d.ts.map +1 -1
  37. package/dist/src/services/IntentService.js +36 -5
  38. package/dist/src/services/IntentService.js.map +1 -1
  39. package/dist/src/services/KnowledgeBaseService.d.ts +4 -0
  40. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
  41. package/dist/src/services/KnowledgeBaseService.js +5 -1
  42. package/dist/src/services/KnowledgeBaseService.js.map +1 -1
  43. package/dist/src/services/ResponseGenerationService.d.ts +11 -4
  44. package/dist/src/services/ResponseGenerationService.d.ts.map +1 -1
  45. package/dist/src/services/ResponseGenerationService.js +51 -7
  46. package/dist/src/services/ResponseGenerationService.js.map +1 -1
  47. package/dist/src/services/ResponseStreamingService.d.ts +13 -1
  48. package/dist/src/services/ResponseStreamingService.d.ts.map +1 -1
  49. package/dist/src/services/ResponseStreamingService.js +50 -9
  50. package/dist/src/services/ResponseStreamingService.js.map +1 -1
  51. package/dist/src/services/ValidationService.d.ts +16 -0
  52. package/dist/src/services/ValidationService.d.ts.map +1 -0
  53. package/dist/src/services/ValidationService.js +83 -0
  54. package/dist/src/services/ValidationService.js.map +1 -0
  55. package/env.example +9 -0
  56. package/package.json +2 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * DatabaseToolService - Dynamic External Database Integration
3
+ *
4
+ * This service enables tool-based queries to external databases (e.g., Supabase)
5
+ * Dynamically loads tool configurations from database and executes queries
6
+ *
7
+ * NOTE: This is a separate experimental feature for direct database integration
8
+ * Can be easily removed without affecting core functionality
9
+ */
10
+ import { SupabaseClient } from '@supabase/supabase-js';
11
+ import { DatabaseToolConfigService } from './DatabaseToolConfigService';
12
+ export interface DatabaseConfig {
13
+ url: string;
14
+ key: string;
15
+ enabled: boolean;
16
+ }
17
+ export interface UserQueryContext {
18
+ userId?: string;
19
+ companyId?: number;
20
+ user_uuid?: string;
21
+ company_uuid?: string;
22
+ [key: string]: any;
23
+ }
24
+ export interface ToolDefinition {
25
+ type: 'function';
26
+ function: {
27
+ name: string;
28
+ description: string;
29
+ parameters: {
30
+ type: 'object';
31
+ properties: Record<string, any>;
32
+ required: string[];
33
+ };
34
+ };
35
+ }
36
+ export declare class DatabaseToolService {
37
+ private configService;
38
+ private mainSupabase;
39
+ private tableSchemas;
40
+ private clientCache;
41
+ constructor(mainSupabase: SupabaseClient, configService: DatabaseToolConfigService);
42
+ /**
43
+ * Get or create external database client for a company
44
+ */
45
+ private getExternalClient;
46
+ /**
47
+ * Clear client cache (e.g., after config update)
48
+ */
49
+ clearClientCache(companyId?: number): void;
50
+ /**
51
+ * Get table schema by introspecting the database
52
+ */
53
+ private getTableSchema;
54
+ /**
55
+ * Get available tools for a company for LLM function calling
56
+ */
57
+ getToolsForCompany(companyId: number): Promise<ToolDefinition[]>;
58
+ /**
59
+ * Convert database tool config to LLM tool definition
60
+ */
61
+ private convertToToolDefinition;
62
+ /**
63
+ * Execute a dynamic tool call
64
+ */
65
+ executeTool(toolName: string, parameters: Record<string, any>, companyId: number, userContext?: UserQueryContext): Promise<any>;
66
+ /**
67
+ * Execute a query for a specific tool
68
+ */
69
+ private executeToolQuery;
70
+ /**
71
+ * Clear schema cache (useful for testing)
72
+ */
73
+ clearSchemaCache(): void;
74
+ }
75
+ //# sourceMappingURL=DatabaseToolService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseToolService.d.ts","sourceRoot":"","sources":["../../../src/services/DatabaseToolService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAgB,MAAM,6BAA6B,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC;YACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,YAAY,CAA+B;IAGnD,OAAO,CAAC,WAAW,CAA0C;gBAEjD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,yBAAyB;IAMlF;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;IACH,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAU1C;;OAEG;YACW,cAAc;IA+B5B;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBtE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,gBAAgB,GAC7B,OAAO,CAAC,GAAG,CAAC;IAuCf;;OAEG;YACW,gBAAgB;IAyI9B;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAIzB"}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ /**
3
+ * DatabaseToolService - Dynamic External Database Integration
4
+ *
5
+ * This service enables tool-based queries to external databases (e.g., Supabase)
6
+ * Dynamically loads tool configurations from database and executes queries
7
+ *
8
+ * NOTE: This is a separate experimental feature for direct database integration
9
+ * Can be easily removed without affecting core functionality
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DatabaseToolService = void 0;
16
+ const supabase_js_1 = require("@supabase/supabase-js");
17
+ const logger_1 = __importDefault(require("../config/logger"));
18
+ class DatabaseToolService {
19
+ constructor(mainSupabase, configService) {
20
+ this.tableSchemas = new Map();
21
+ // Cache for external database clients per company
22
+ this.clientCache = new Map();
23
+ this.mainSupabase = mainSupabase;
24
+ this.configService = configService;
25
+ logger_1.default.info('🔌 Dynamic Database Tool Service initialized');
26
+ }
27
+ /**
28
+ * Get or create external database client for a company
29
+ */
30
+ async getExternalClient(companyId) {
31
+ // Check cache
32
+ if (this.clientCache.has(companyId)) {
33
+ return this.clientCache.get(companyId);
34
+ }
35
+ // Fetch credentials
36
+ const credentials = await this.configService.getDecryptedCredentials(companyId);
37
+ if (!credentials) {
38
+ return null;
39
+ }
40
+ // Create client
41
+ try {
42
+ const client = (0, supabase_js_1.createClient)(credentials.url, credentials.key);
43
+ this.clientCache.set(companyId, client);
44
+ logger_1.default.info(`✅ Created external database client for company ${companyId}`);
45
+ return client;
46
+ }
47
+ catch (error) {
48
+ logger_1.default.error(`Failed to create external client for company ${companyId}:`, error);
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Clear client cache (e.g., after config update)
54
+ */
55
+ clearClientCache(companyId) {
56
+ if (companyId) {
57
+ this.clientCache.delete(companyId);
58
+ logger_1.default.info(`🧹 Cleared client cache for company ${companyId}`);
59
+ }
60
+ else {
61
+ this.clientCache.clear();
62
+ logger_1.default.info('🧹 Cleared all client caches');
63
+ }
64
+ }
65
+ /**
66
+ * Get table schema by introspecting the database
67
+ */
68
+ async getTableSchema(client, tableName, companyId) {
69
+ const cacheKey = `${companyId}:${tableName}`;
70
+ // Check cache
71
+ if (this.tableSchemas.has(cacheKey)) {
72
+ return this.tableSchemas.get(cacheKey);
73
+ }
74
+ try {
75
+ // Fetch a single row to understand structure
76
+ const { data, error } = await client
77
+ .from(tableName)
78
+ .select('*')
79
+ .limit(1);
80
+ if (error) {
81
+ logger_1.default.warn(`Failed to introspect table ${tableName}:`, error);
82
+ return [];
83
+ }
84
+ const schema = data && data.length > 0 ? Object.keys(data[0]) : [];
85
+ this.tableSchemas.set(cacheKey, schema);
86
+ logger_1.default.info(`📊 Introspected table ${tableName}: ${schema.length} columns`);
87
+ return schema;
88
+ }
89
+ catch (error) {
90
+ logger_1.default.error(`Error introspecting table ${tableName}:`, error);
91
+ return [];
92
+ }
93
+ }
94
+ /**
95
+ * Get available tools for a company for LLM function calling
96
+ */
97
+ async getToolsForCompany(companyId) {
98
+ try {
99
+ const tools = await this.configService.getEnabledToolsByCompany(companyId);
100
+ if (!tools || tools.length === 0) {
101
+ return [];
102
+ }
103
+ // Convert database tool configs to LLM tool definitions
104
+ return tools.map(tool => this.convertToToolDefinition(tool));
105
+ }
106
+ catch (error) {
107
+ logger_1.default.error(`Failed to get tools for company ${companyId}:`, error);
108
+ return [];
109
+ }
110
+ }
111
+ /**
112
+ * Convert database tool config to LLM tool definition
113
+ */
114
+ convertToToolDefinition(tool) {
115
+ const columns = typeof tool.columns === 'string' ? JSON.parse(tool.columns) : tool.columns;
116
+ // If user context filtering is enabled, ID becomes optional
117
+ const required = tool.requires_user_context ? [] : [tool.id_column];
118
+ return {
119
+ type: 'function',
120
+ function: {
121
+ name: tool.tool_name,
122
+ description: tool.tool_description || `Fetch data from ${tool.table_name} table`,
123
+ parameters: {
124
+ type: 'object',
125
+ properties: {
126
+ [tool.id_column]: {
127
+ type: tool.id_column_type === 'integer' ? 'integer' : 'string',
128
+ description: `The ${tool.id_column} to query (optional if user context is used)`
129
+ }
130
+ },
131
+ required
132
+ }
133
+ }
134
+ };
135
+ }
136
+ /**
137
+ * Execute a dynamic tool call
138
+ */
139
+ async executeTool(toolName, parameters, companyId, userContext) {
140
+ logger_1.default.info(`🔧 Executing dynamic tool: ${toolName} for company ${companyId} with params:`, parameters);
141
+ if (userContext) {
142
+ logger_1.default.info(`🔧 User context provided:`, userContext);
143
+ }
144
+ try {
145
+ // Get the tool configuration
146
+ const tools = await this.configService.getEnabledToolsByCompany(companyId);
147
+ const tool = tools.find(t => t.tool_name === toolName);
148
+ if (!tool) {
149
+ return {
150
+ success: false,
151
+ error: `Tool '${toolName}' not found or not enabled`
152
+ };
153
+ }
154
+ // Get external database client
155
+ const client = await this.getExternalClient(companyId);
156
+ if (!client) {
157
+ return {
158
+ success: false,
159
+ error: 'External database not configured for this company'
160
+ };
161
+ }
162
+ // Execute the query
163
+ return await this.executeToolQuery(client, tool, parameters, companyId, userContext);
164
+ }
165
+ catch (error) {
166
+ logger_1.default.error(`Error executing tool ${toolName}:`, error);
167
+ return {
168
+ success: false,
169
+ error: error.message || 'Tool execution failed'
170
+ };
171
+ }
172
+ }
173
+ /**
174
+ * Execute a query for a specific tool
175
+ */
176
+ async executeToolQuery(client, tool, parameters, companyId, userContext) {
177
+ try {
178
+ // Parse columns from tool config
179
+ const columns = typeof tool.columns === 'string' ? JSON.parse(tool.columns) : tool.columns;
180
+ // Introspect table to verify columns exist
181
+ const schema = await this.getTableSchema(client, tool.table_name, companyId);
182
+ if (!schema || schema.length === 0) {
183
+ return {
184
+ success: false,
185
+ error: `Unable to access table '${tool.table_name}'`
186
+ };
187
+ }
188
+ // Filter columns to only those that exist in the schema
189
+ const validColumns = columns.filter((col) => schema.includes(col));
190
+ if (validColumns.length === 0) {
191
+ return {
192
+ success: false,
193
+ error: 'No valid columns configured for this tool'
194
+ };
195
+ }
196
+ // Ensure ID column is included (if configured)
197
+ if (tool.id_column && !validColumns.includes(tool.id_column)) {
198
+ validColumns.unshift(tool.id_column);
199
+ }
200
+ logger_1.default.info(`🔍 Querying ${tool.table_name} with fields: ${validColumns.join(', ')}`);
201
+ // Build READ-ONLY query (only SELECT, no INSERT/UPDATE/DELETE)
202
+ let query = client
203
+ .from(tool.table_name)
204
+ .select(validColumns.join(','));
205
+ // Apply user context filter FIRST (if configured)
206
+ if (tool.requires_user_context && tool.user_filter_column && tool.user_context_key) {
207
+ if (!userContext || !userContext[tool.user_context_key]) {
208
+ logger_1.default.warn(`⚠️ Tool requires user context but '${tool.user_context_key}' not provided`);
209
+ // Don't fail - just return empty result gracefully
210
+ return {
211
+ success: true,
212
+ data: null,
213
+ message: 'User context not available'
214
+ };
215
+ }
216
+ const filterValue = userContext[tool.user_context_key];
217
+ logger_1.default.info(`🔐 Applying user filter: ${tool.user_filter_column} = ${filterValue}`);
218
+ // Apply filter based on type
219
+ if (tool.user_filter_type === 'integer') {
220
+ const numericValue = parseInt(String(filterValue), 10);
221
+ if (!isNaN(numericValue)) {
222
+ query = query.eq(tool.user_filter_column, numericValue);
223
+ }
224
+ }
225
+ else {
226
+ query = query.eq(tool.user_filter_column, String(filterValue));
227
+ }
228
+ }
229
+ // Apply ID filter (if provided in parameters and valid)
230
+ if (tool.id_column && parameters[tool.id_column] !== undefined && parameters[tool.id_column] !== null) {
231
+ const idValue = parameters[tool.id_column];
232
+ // Skip if ID is 0 or empty (invalid values)
233
+ const isValidId = tool.id_column_type === 'integer'
234
+ ? (typeof idValue === 'number' && idValue > 0) || (typeof idValue === 'string' && parseInt(idValue) > 0)
235
+ : (typeof idValue === 'string' && idValue.trim() !== '');
236
+ if (isValidId) {
237
+ // Apply ID filter based on type
238
+ if (tool.id_column_type === 'integer') {
239
+ const numericId = parseInt(String(idValue), 10);
240
+ if (isNaN(numericId)) {
241
+ return {
242
+ success: false,
243
+ error: `Invalid ${tool.id_column} format - expected integer`
244
+ };
245
+ }
246
+ query = query.eq(tool.id_column, numericId);
247
+ }
248
+ else {
249
+ query = query.eq(tool.id_column, String(idValue));
250
+ }
251
+ }
252
+ }
253
+ // Execute query - use .single() if ID provided, otherwise return array
254
+ const hasIdFilter = tool.id_column && parameters[tool.id_column] !== undefined;
255
+ const { data, error } = hasIdFilter ? await query.single() : await query;
256
+ if (error) {
257
+ // If single() fails, try returning as array (might be multiple results)
258
+ if (error.code === 'PGRST116') {
259
+ return {
260
+ success: false,
261
+ error: 'No data found'
262
+ };
263
+ }
264
+ logger_1.default.error(`Database query error for ${tool.table_name}:`, error);
265
+ return {
266
+ success: false,
267
+ error: `Query failed: ${error.message}`
268
+ };
269
+ }
270
+ if (!data) {
271
+ return {
272
+ success: false,
273
+ error: 'No data found'
274
+ };
275
+ }
276
+ logger_1.default.info(`✅ Successfully executed tool ${tool.tool_name}`);
277
+ return {
278
+ success: true,
279
+ data
280
+ };
281
+ }
282
+ catch (error) {
283
+ logger_1.default.error(`Error in executeToolQuery for ${tool.table_name}:`, error);
284
+ return {
285
+ success: false,
286
+ error: error.message || 'Unknown error occurred'
287
+ };
288
+ }
289
+ }
290
+ /**
291
+ * Clear schema cache (useful for testing)
292
+ */
293
+ clearSchemaCache() {
294
+ this.tableSchemas.clear();
295
+ logger_1.default.info('🧹 Schema cache cleared');
296
+ }
297
+ }
298
+ exports.DatabaseToolService = DatabaseToolService;
299
+ //# sourceMappingURL=DatabaseToolService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseToolService.js","sourceRoot":"","sources":["../../../src/services/DatabaseToolService.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { ChatMessage } from '../types';
2
- type IntentLabel = 'knowledge' | 'greeting' | 'acknowledgment' | 'personality' | 'clarification' | 'guardrail' | 'human_support_request' | 'human_support_email';
2
+ type IntentLabel = 'knowledge' | 'greeting' | 'acknowledgment' | 'personality' | 'clarification' | 'guardrail' | 'human_support_request' | 'human_support_email' | 'database_tool';
3
3
  interface IntentServiceConfig {
4
4
  openaiApiKey: string;
5
5
  model?: string;
6
6
  assistantName?: string;
7
7
  organizationName?: string;
8
+ databaseToolsEnabled?: boolean;
8
9
  }
9
10
  export interface IntentClassificationResult {
10
11
  intent: IntentLabel;
@@ -12,16 +13,26 @@ export interface IntentClassificationResult {
12
13
  response?: string;
13
14
  needsGuardrail?: boolean;
14
15
  contactEmail?: string | null;
16
+ toolCall?: {
17
+ toolName: string;
18
+ parameters: Record<string, any>;
19
+ };
15
20
  }
16
21
  interface ClassificationInput {
17
22
  message: string;
18
23
  conversationHistory?: ChatMessage[];
24
+ availableTools?: Array<{
25
+ name: string;
26
+ description: string;
27
+ parameters: Record<string, any>;
28
+ }>;
19
29
  }
20
30
  export declare class IntentService {
21
31
  private openai;
22
32
  private model;
23
33
  private assistantName;
24
34
  private organizationName;
35
+ private databaseToolsEnabled;
25
36
  constructor(config: IntentServiceConfig);
26
37
  classify(input: ClassificationInput): Promise<IntentClassificationResult>;
27
38
  private buildClassifierPrompt;
@@ -1 +1 @@
1
- {"version":3,"file":"IntentService.d.ts","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,KAAK,WAAW,GACZ,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,WAAW,GACX,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC;CACrC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,EAAE,mBAAmB;IASjC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAmC/E,OAAO,CAAC,qBAAqB;IAuE7B,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"IntentService.d.ts","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,KAAK,WAAW,GACZ,WAAW,GACX,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,WAAW,GACX,uBAAuB,GACvB,qBAAqB,GACrB,eAAe,CAAC;AAEpB,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,oBAAoB,CAAU;gBAE1B,MAAM,EAAE,mBAAmB;IAUjC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAuC/E,OAAO,CAAC,qBAAqB;IAqG7B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,aAAa;CAOtB"}
@@ -14,6 +14,7 @@ class IntentService {
14
14
  this.model = config.model || 'gpt-4o-mini';
15
15
  this.assistantName = config.assistantName || 'AI Assistant';
16
16
  this.organizationName = config.organizationName || 'Your Organization';
17
+ this.databaseToolsEnabled = config.databaseToolsEnabled || false;
17
18
  }
18
19
  async classify(input) {
19
20
  try {
@@ -36,7 +37,11 @@ class IntentService {
36
37
  reason: parsed.reason,
37
38
  response: parsed.response || undefined,
38
39
  needsGuardrail: Boolean(parsed.needs_guardrail),
39
- contactEmail: parsed.contact_email || null
40
+ contactEmail: parsed.contact_email || null,
41
+ toolCall: parsed.tool_call ? {
42
+ toolName: parsed.tool_call.tool_name,
43
+ parameters: parsed.tool_call.parameters || {}
44
+ } : undefined
40
45
  };
41
46
  }
42
47
  catch (error) {
@@ -46,22 +51,45 @@ class IntentService {
46
51
  }
47
52
  buildClassifierPrompt(input) {
48
53
  const history = input.conversationHistory || [];
54
+ const availableTools = input.availableTools || [];
49
55
  // Use all provided history (already limited by CHAT_HISTORY_LENGTH in ChatController)
50
56
  // No need to trim further - respect the configured limit
57
+ // Build dynamic tool section
58
+ let databaseToolSection = '';
59
+ if (availableTools.length > 0) {
60
+ const toolDescriptions = availableTools.map(tool => `- ${tool.name}: ${tool.description}. Parameters: ${JSON.stringify(tool.parameters)}`).join('\n');
61
+ databaseToolSection = `
62
+ - "database_tool": user asks for data from the connected database. This includes requests for personal data, records, lists, or any information stored in the database. Examples: "show my profile", "get my orders", "list my messages", "what are my companies", "my account details". When detected, provide tool_call in this format:
63
+ - tool_call: { "tool_name": "<tool_name>", "parameters": { "<param_name>": "<value>" } }
64
+
65
+ Available Database Tools:
66
+ ${toolDescriptions}
67
+
68
+ Tool Selection:
69
+ - Match user's request to the most appropriate tool based on tool name and description
70
+ - Use "database_tool" intent for ANY query requesting data from the database (user data, records, lists, etc.)
71
+ - Use "knowledge" intent only for questions about PLATFORM features, documentation, or how-to questions
72
+ - "database_tool" takes priority over "knowledge" for data retrieval queries
73
+ - Extract parameter values from user message or use empty object {} if no specific parameters provided`;
74
+ }
75
+ const intentList = availableTools.length > 0
76
+ ? '["knowledge","greeting","acknowledgment","personality","clarification","guardrail","human_support_request","human_support_email","database_tool"]'
77
+ : '["knowledge","greeting","acknowledgment","personality","clarification","guardrail","human_support_request","human_support_email"]';
51
78
  const systemMessage = {
52
79
  role: 'system',
53
80
  content: `You are an intent classifier for ${this.assistantName}, the AI assistant for ${this.organizationName}.
54
81
  Your job is to analyse the latest user message (with short conversation history) and decide how the assistant should respond.
55
82
 
56
83
  Return a JSON object with:
57
- - intent: one of ["knowledge","greeting","acknowledgment","personality","clarification","guardrail","human_support_request","human_support_email"]
84
+ - intent: one of ${intentList}
58
85
  - reason: brief justification
59
- - response: a natural, contextual assistant response appropriate for this intent (ONLY for non-knowledge intents; leave empty for "knowledge")
86
+ - response: a natural, contextual assistant response appropriate for this intent (ONLY for non-knowledge/non-database_tool intents; leave empty for "knowledge" and "database_tool")
60
87
  - needs_guardrail: true if the user is requesting sensitive credentials or configuration
61
88
  - contact_email: email address provided by the user, if present, otherwise null
89
+ - tool_call: (only for "database_tool" intent) { "tool_name": string, "parameters": object }
62
90
 
63
91
  Definitions:
64
- - "knowledge": ANY question, query, or request about the platform, product, documentation, technical details, features, usage, troubleshooting, or any topic that could potentially be in the knowledge base. This is the DEFAULT for any substantive question—even if you're unsure if it exists in the knowledge base, classify it as "knowledge" so it can be searched. Also includes follow-up questions like "what about X?", "can you explain more?", or topic expansions.
92
+ - "knowledge": ANY question, query, or request about the platform, product, documentation, technical details, features, usage, troubleshooting, or any topic that could potentially be in the knowledge base. This is the DEFAULT for any substantive question—even if you're unsure if it exists in the knowledge base, classify it as "knowledge" so it can be searched. Also includes follow-up questions like "what about X?", "can you explain more?", or topic expansions.${databaseToolSection}
65
93
  - "greeting": ONLY simple greetings like "hi", "hello", "good morning", "hey" when they appear as the FIRST message in the conversation or as a clear conversation opener. If conversation history exists and contains assistant responses, this is likely NOT a greeting but an acknowledgment or knowledge query.
66
94
  - "acknowledgment": expressions of gratitude, confirmation, or acknowledgment like "thank you", "thanks", "got it", "perfect", "appreciate it", "okay", "alright". These show the user received the information and may or may not need further help.
67
95
  - "personality": questions about the assistant's identity, name, who they are, what they do, or introduction. Examples: "what's your name?", "who are you?", "tell me about yourself".
@@ -72,6 +100,7 @@ Definitions:
72
100
 
73
101
  Important:
74
102
  - DEFAULT to "knowledge" for any substantive question—let the knowledge base search determine if information exists.
103
+ - Use "database_tool" for user-specific data queries (my profile, my email, my orders).
75
104
  - Use "greeting" ONLY for conversation openers. If history shows prior exchanges, "hi" or "hello" is likely just acknowledgment or transition.
76
105
  - Use "acknowledgment" for gratitude expressions—these are NOT greetings.
77
106
  - Use "personality" ONLY for questions about the assistant's identity/name, NOT for general conversation.
@@ -83,6 +112,7 @@ Important:
83
112
 
84
113
  Response Generation Guidelines:
85
114
  - For "knowledge" intent: leave "response" empty (it will be handled by knowledge base search)
115
+ - For "database_tool" intent: leave "response" empty (tool will be executed and LLM will format result)
86
116
  - For all other intents: generate a natural, professional, contextually appropriate response
87
117
  - Consider conversation history when crafting the response (e.g., if user says "I changed my mind" after a support request, acknowledge the change)
88
118
  - For "greeting": welcome the user warmly
@@ -118,7 +148,8 @@ Response Generation Guidelines:
118
148
  'clarification',
119
149
  'guardrail',
120
150
  'human_support_request',
121
- 'human_support_email'
151
+ 'human_support_email',
152
+ 'database_tool'
122
153
  ];
123
154
  if (allowed.includes(intent)) {
124
155
  return intent;
@@ -1 +1 @@
1
- {"version":3,"file":"IntentService.js","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntentService.js","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,8DAAsC;AA2CtC,MAAa,aAAa;IAOxB,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,cAAc,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,mBAAmB,CAAC;QACvE,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,KAAK,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAA0B;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAEjD,gBAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAEnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,GAAG;gBACf,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aACzC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;YAE3D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEtC,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;gBACtC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC/C,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;gBAC1C,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC3B,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;oBACpC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE;iBAC9C,CAAC,CAAC,CAAC,SAAS;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,IAAI,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,KAA0B;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;QAClD,sFAAsF;QACtF,yDAAyD;QAEzD,6BAA6B;QAC7B,IAAI,mBAAmB,GAAG,EAAE,CAAC;QAC7B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACjD,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,mBAAmB,GAAG;;;;;EAK1B,gBAAgB;;;;;;;uGAOqF,CAAC;QACpG,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;YAC1C,CAAC,CAAC,mJAAmJ;YACrJ,CAAC,CAAC,mIAAmI,CAAC;QAExI,MAAM,aAAa,GAAuD;YACxE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,oCAAoC,IAAI,CAAC,aAAa,0BAA0B,IAAI,CAAC,gBAAgB;;;;mBAIjG,UAAU;;;;;;;;kdAQqb,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDAiCjb;SAC/C,CAAC;QAEF,MAAM,QAAQ,GAAyD,CAAC,aAAa,CAAC,CAAC;QAEvF,oEAAoE;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAqD,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9F,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;gBAC9E,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QACpC,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,MAAW;QAChC,MAAM,OAAO,GAAkB;YAC7B,WAAW;YACX,UAAU;YACV,gBAAgB;YAChB,aAAa;YACb,eAAe;YACf,WAAW;YACX,uBAAuB;YACvB,qBAAqB;YACrB,eAAe;SAChB,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,mDAAmD;QACnD,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;CACF;AAzLD,sCAyLC"}
@@ -31,6 +31,10 @@ interface SearchResult {
31
31
  type: string;
32
32
  score: number;
33
33
  metadata?: Record<string, any>;
34
+ raw_chunks?: Array<{
35
+ chunk_text: string;
36
+ chunk_index: number;
37
+ }>;
34
38
  }
35
39
  export declare class KnowledgeBaseService {
36
40
  private supabase;
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgeBaseService.d.ts","sourceRoot":"","sources":["../../../src/services/KnowledgeBaseService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KnowledgeBaseService.d.ts","sourceRoot":"","sources":["../../../src/services/KnowledgeBaseService.ts"],"names":[],"mappings":"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"}
@@ -412,7 +412,11 @@ class KnowledgeBaseService {
412
412
  ...firstChunk.document_metadata,
413
413
  chunk_count: chunks.length,
414
414
  chunk_range: `${chunks[0].chunk_index}-${chunks[chunks.length - 1].chunk_index}`
415
- }
415
+ },
416
+ raw_chunks: chunks.map(c => ({
417
+ chunk_text: c.chunk_text,
418
+ chunk_index: c.chunk_index
419
+ }))
416
420
  });
417
421
  });
418
422
  // Sort by score (highest first)