@vezlo/assistant-server 2.10.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.
- package/README.md +1 -0
- package/database-schema.sql +44 -0
- package/dist/src/bootstrap/initializeServices.d.ts +5 -0
- package/dist/src/bootstrap/initializeServices.d.ts.map +1 -1
- package/dist/src/bootstrap/initializeServices.js +20 -4
- package/dist/src/bootstrap/initializeServices.js.map +1 -1
- package/dist/src/controllers/ChatController.d.ts +3 -0
- package/dist/src/controllers/ChatController.d.ts.map +1 -1
- package/dist/src/controllers/ChatController.js +75 -15
- package/dist/src/controllers/ChatController.js.map +1 -1
- package/dist/src/controllers/DatabaseToolConfigController.d.ts +81 -0
- package/dist/src/controllers/DatabaseToolConfigController.d.ts.map +1 -0
- package/dist/src/controllers/DatabaseToolConfigController.js +524 -0
- package/dist/src/controllers/DatabaseToolConfigController.js.map +1 -0
- package/dist/src/controllers/KnowledgeController.js +4 -4
- package/dist/src/controllers/KnowledgeController.js.map +1 -1
- package/dist/src/migrations/011_create_database_tool_configs.d.ts +4 -0
- package/dist/src/migrations/011_create_database_tool_configs.d.ts.map +1 -0
- package/dist/src/migrations/011_create_database_tool_configs.js +49 -0
- package/dist/src/migrations/011_create_database_tool_configs.js.map +1 -0
- package/dist/src/server.js +399 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/AIService.d.ts +3 -0
- package/dist/src/services/AIService.d.ts.map +1 -1
- package/dist/src/services/AIService.js +5 -0
- package/dist/src/services/AIService.js.map +1 -1
- package/dist/src/services/DatabaseToolConfigService.d.ts +133 -0
- package/dist/src/services/DatabaseToolConfigService.d.ts.map +1 -0
- package/dist/src/services/DatabaseToolConfigService.js +442 -0
- package/dist/src/services/DatabaseToolConfigService.js.map +1 -0
- package/dist/src/services/DatabaseToolService.d.ts +75 -0
- package/dist/src/services/DatabaseToolService.d.ts.map +1 -0
- package/dist/src/services/DatabaseToolService.js +299 -0
- package/dist/src/services/DatabaseToolService.js.map +1 -0
- package/dist/src/services/IntentService.d.ts +12 -1
- package/dist/src/services/IntentService.d.ts.map +1 -1
- package/dist/src/services/IntentService.js +35 -5
- package/dist/src/services/IntentService.js.map +1 -1
- package/dist/src/services/ResponseGenerationService.d.ts +5 -3
- package/dist/src/services/ResponseGenerationService.d.ts.map +1 -1
- package/dist/src/services/ResponseGenerationService.js +29 -4
- package/dist/src/services/ResponseGenerationService.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseToolConfigService.js","sourceRoot":"","sources":["../../../src/services/DatabaseToolConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":";AAAA;;;;;;;;GAQG;;;;;;AAEH,uDAAqE;AACrE,8DAAsC;AA8BtC,MAAa,mBAAmB;IAQ9B,YAAY,YAA4B,EAAE,aAAwC;QAL1E,iBAAY,GAAqB,IAAI,GAAG,EAAE,CAAC;QAEnD,kDAAkD;QAC1C,gBAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;QAG3D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,gBAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,cAAc;QACd,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QAC1C,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAEhF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,0BAAY,EAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxC,gBAAM,CAAC,IAAI,CAAC,kDAAkD,SAAS,EAAE,CAAC,CAAC;YAC3E,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,gDAAgD,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAkB;QACjC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,gBAAM,CAAC,IAAI,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,gBAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,MAAsB,EAAE,SAAiB,EAAE,SAAiB;QACvF,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;QAE7C,cAAc;QACd,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM;iBACjC,IAAI,CAAC,SAAS,CAAC;iBACf,MAAM,CAAC,GAAG,CAAC;iBACX,KAAK,CAAC,CAAC,CAAC,CAAC;YAEZ,IAAI,KAAK,EAAE,CAAC;gBACV,gBAAM,CAAC,IAAI,CAAC,8BAA8B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAExC,gBAAM,CAAC,IAAI,CAAC,yBAAyB,SAAS,KAAK,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC;YAC5E,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;YAE3E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,wDAAwD;YACxD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,mCAAmC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,IAAkB;QAChD,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAE3F,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpE,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,SAAS;gBACpB,WAAW,EAAE,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,IAAI,CAAC,UAAU,QAAQ;gBAChF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;4BAChB,IAAI,EAAE,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;4BAC9D,WAAW,EAAE,OAAO,IAAI,CAAC,SAAS,8CAA8C;yBACjF;qBACF;oBACD,QAAQ;iBACT;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,UAA+B,EAC/B,SAAiB,EACjB,WAA8B;QAE9B,gBAAM,CAAC,IAAI,CAAC,8BAA8B,QAAQ,gBAAgB,SAAS,eAAe,EAAE,UAAU,CAAC,CAAC;QACxG,IAAI,WAAW,EAAE,CAAC;YAChB,gBAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;YAEvD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,SAAS,QAAQ,4BAA4B;iBACrD,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mDAAmD;iBAC3D,CAAC;YACJ,CAAC;YAED,oBAAoB;YACpB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gBAAM,CAAC,KAAK,CAAC,wBAAwB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,MAAsB,EACtB,IAAkB,EAClB,UAA+B,EAC/B,SAAiB,EACjB,WAA8B;QAE9B,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAE3F,2CAA2C;YAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAE7E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,2BAA2B,IAAI,CAAC,UAAU,GAAG;iBACrD,CAAC;YACJ,CAAC;YAED,wDAAwD;YACxD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,2CAA2C;iBACnD,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7D,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YAED,gBAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtF,+DAA+D;YAC/D,IAAI,KAAK,GAAG,MAAM;iBACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;iBACrB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAElC,kDAAkD;YAClD,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACnF,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACxD,gBAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,gBAAgB,gBAAgB,CAAC,CAAC;oBACzF,mDAAmD;oBACnD,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,4BAA4B;qBACtC,CAAC;gBACJ,CAAC;gBAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACvD,gBAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,kBAAkB,MAAM,WAAW,EAAE,CAAC,CAAC;gBAEpF,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;wBACzB,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtG,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE3C,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS;oBACjD,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACxG,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAE3D,IAAI,SAAS,EAAE,CAAC;oBACd,gCAAgC;oBAChC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;wBACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;wBAChD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;4BACrB,OAAO;gCACL,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,WAAW,IAAI,CAAC,SAAS,4BAA4B;6BAC7D,CAAC;wBACJ,CAAC;wBACD,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC9C,CAAC;yBAAM,CAAC;wBACN,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,uEAAuE;YACvE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;YAC/E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAEzE,IAAI,KAAK,EAAE,CAAC;gBACV,wEAAwE;gBACxE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9B,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,eAAe;qBACvB,CAAC;gBACJ,CAAC;gBAED,gBAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,iBAAiB,KAAK,CAAC,OAAO,EAAE;iBACxC,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,eAAe;iBACvB,CAAC;YACJ,CAAC;YAED,gBAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAE9D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;aACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gBAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;aACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,gBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;CACF;AA1UD,kDA0UC"}
|
|
@@ -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;
|
|
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,9 +51,30 @@ 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
|
|
51
|
-
|
|
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"]';
|
|
52
78
|
const systemMessage = {
|
|
53
79
|
role: 'system',
|
|
54
80
|
content: `You are an intent classifier for ${this.assistantName}, the AI assistant for ${this.organizationName}.
|
|
@@ -57,12 +83,13 @@ Your job is to analyse the latest user message (with short conversation history)
|
|
|
57
83
|
Return a JSON object with:
|
|
58
84
|
- intent: one of ${intentList}
|
|
59
85
|
- reason: brief justification
|
|
60
|
-
- 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")
|
|
61
87
|
- needs_guardrail: true if the user is requesting sensitive credentials or configuration
|
|
62
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 }
|
|
63
90
|
|
|
64
91
|
Definitions:
|
|
65
|
-
- "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}
|
|
66
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.
|
|
67
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.
|
|
68
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".
|
|
@@ -73,6 +100,7 @@ Definitions:
|
|
|
73
100
|
|
|
74
101
|
Important:
|
|
75
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).
|
|
76
104
|
- Use "greeting" ONLY for conversation openers. If history shows prior exchanges, "hi" or "hello" is likely just acknowledgment or transition.
|
|
77
105
|
- Use "acknowledgment" for gratitude expressions—these are NOT greetings.
|
|
78
106
|
- Use "personality" ONLY for questions about the assistant's identity/name, NOT for general conversation.
|
|
@@ -84,6 +112,7 @@ Important:
|
|
|
84
112
|
|
|
85
113
|
Response Generation Guidelines:
|
|
86
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)
|
|
87
116
|
- For all other intents: generate a natural, professional, contextually appropriate response
|
|
88
117
|
- Consider conversation history when crafting the response (e.g., if user says "I changed my mind" after a support request, acknowledge the change)
|
|
89
118
|
- For "greeting": welcome the user warmly
|
|
@@ -119,7 +148,8 @@ Response Generation Guidelines:
|
|
|
119
148
|
'clarification',
|
|
120
149
|
'guardrail',
|
|
121
150
|
'human_support_request',
|
|
122
|
-
'human_support_email'
|
|
151
|
+
'human_support_email',
|
|
152
|
+
'database_tool'
|
|
123
153
|
];
|
|
124
154
|
if (allowed.includes(intent)) {
|
|
125
155
|
return intent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntentService.js","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,8DAAsC;
|
|
1
|
+
{"version":3,"file":"IntentService.js","sourceRoot":"","sources":["../../../src/services/IntentService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IntentService, IntentClassificationResult } from './IntentService';
|
|
2
2
|
import { AIService } from './AIService';
|
|
3
|
+
import { DatabaseToolService } from './DatabaseToolService';
|
|
3
4
|
import { ChatMessage } from '../types';
|
|
4
5
|
export interface KnowledgeSearchResult {
|
|
5
6
|
knowledgeResults: string | null;
|
|
@@ -33,12 +34,13 @@ export interface GenerationResult {
|
|
|
33
34
|
export declare class ResponseGenerationService {
|
|
34
35
|
private intentService?;
|
|
35
36
|
private aiService?;
|
|
37
|
+
private databaseToolService?;
|
|
36
38
|
private chatHistoryLength;
|
|
37
|
-
constructor(intentService: IntentService | undefined, aiService: AIService | undefined, chatHistoryLength: number);
|
|
39
|
+
constructor(intentService: IntentService | undefined, aiService: AIService | undefined, chatHistoryLength: number, databaseToolService?: DatabaseToolService);
|
|
38
40
|
/**
|
|
39
|
-
* Classify user intent
|
|
41
|
+
* Classify user intent with dynamic tool support
|
|
40
42
|
*/
|
|
41
|
-
classifyIntent(message: string, history: ChatMessage[]): Promise<IntentClassificationResult>;
|
|
43
|
+
classifyIntent(message: string, history: ChatMessage[], companyId?: number): Promise<IntentClassificationResult>;
|
|
42
44
|
/**
|
|
43
45
|
* Handle intent classification result
|
|
44
46
|
* Returns response content if non-knowledge intent, null if knowledge/tool intent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResponseGenerationService.d.ts","sourceRoot":"","sources":["../../../src/services/ResponseGenerationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE;QACjB,mBAAmB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvF,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,iBAAiB,CAAS;gBAGhC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"ResponseGenerationService.d.ts","sourceRoot":"","sources":["../../../src/services/ResponseGenerationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE;QACjB,mBAAmB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvF,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,iBAAiB,CAAS;gBAGhC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,iBAAiB,EAAE,MAAM,EACzB,mBAAmB,CAAC,EAAE,mBAAmB;IAQ3C;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAuCtH;;;OAGG;IACH,kBAAkB,CAChB,MAAM,EAAE,0BAA0B,EAClC,kBAAkB,EAAE,MAAM,GACzB,MAAM,GAAG,IAAI;IAyBhB;;OAEG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC;IA6GjC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,WAAW,EAAE,EACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B;QACD,mBAAmB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvF,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAUD;;OAEG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IAIrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAa5B"}
|