@vezlo/assistant-server 2.0.0 → 2.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 +1 -1
- package/database-schema.sql +61 -2
- package/dist/src/bootstrap/initializeServices.d.ts +38 -0
- package/dist/src/bootstrap/initializeServices.d.ts.map +1 -0
- package/dist/src/bootstrap/initializeServices.js +105 -0
- package/dist/src/bootstrap/initializeServices.js.map +1 -0
- package/dist/src/controllers/ChatController.d.ts +11 -1
- package/dist/src/controllers/ChatController.d.ts.map +1 -1
- package/dist/src/controllers/ChatController.js +168 -31
- package/dist/src/controllers/ChatController.js.map +1 -1
- package/dist/src/controllers/KnowledgeController.js +4 -4
- package/dist/src/controllers/KnowledgeController.js.map +1 -1
- package/dist/src/migrations/001_initial_schema.d.ts.map +1 -1
- package/dist/src/migrations/001_initial_schema.js +2 -1
- package/dist/src/migrations/001_initial_schema.js.map +1 -1
- package/dist/src/migrations/003_drop_content_index.d.ts +4 -0
- package/dist/src/migrations/003_drop_content_index.d.ts.map +1 -0
- package/dist/src/migrations/003_drop_content_index.js +19 -0
- package/dist/src/migrations/003_drop_content_index.js.map +1 -0
- package/dist/src/migrations/004_add_vector_search_rpc.d.ts +4 -0
- package/dist/src/migrations/004_add_vector_search_rpc.d.ts.map +1 -0
- package/dist/src/migrations/004_add_vector_search_rpc.js +61 -0
- package/dist/src/migrations/004_add_vector_search_rpc.js.map +1 -0
- package/dist/src/schemas/KnowledgeSchemas.js +2 -2
- package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
- package/dist/src/server.js +8 -31
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/AIService.d.ts +2 -0
- package/dist/src/services/AIService.d.ts.map +1 -1
- package/dist/src/services/AIService.js +72 -54
- package/dist/src/services/AIService.js.map +1 -1
- package/dist/src/services/ChatManager.d.ts +4 -1
- package/dist/src/services/ChatManager.d.ts.map +1 -1
- package/dist/src/services/ChatManager.js +51 -9
- package/dist/src/services/ChatManager.js.map +1 -1
- package/dist/src/services/IntentService.d.ts +31 -0
- package/dist/src/services/IntentService.d.ts.map +1 -0
- package/dist/src/services/IntentService.js +116 -0
- package/dist/src/services/IntentService.js.map +1 -0
- package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
- package/dist/src/services/KnowledgeBaseService.js +49 -51
- package/dist/src/services/KnowledgeBaseService.js.map +1 -1
- package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
- package/dist/src/storage/ConversationRepository.js +7 -12
- package/dist/src/storage/ConversationRepository.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/env.example +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
package/database-schema.sql
CHANGED
|
@@ -34,6 +34,14 @@ INSERT INTO knex_migrations (name, batch, migration_time)
|
|
|
34
34
|
SELECT '002_multitenancy_schema.ts', 1, NOW()
|
|
35
35
|
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '002_multitenancy_schema.ts');
|
|
36
36
|
|
|
37
|
+
INSERT INTO knex_migrations (name, batch, migration_time)
|
|
38
|
+
SELECT '003_drop_content_index.ts', 1, NOW()
|
|
39
|
+
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '003_drop_content_index.ts');
|
|
40
|
+
|
|
41
|
+
INSERT INTO knex_migrations (name, batch, migration_time)
|
|
42
|
+
SELECT '004_add_vector_search_rpc.ts', 1, NOW()
|
|
43
|
+
WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '004_add_vector_search_rpc.ts');
|
|
44
|
+
|
|
37
45
|
-- Set migration lock to unlocked (0 = unlocked, 1 = locked)
|
|
38
46
|
INSERT INTO knex_migrations_lock (index, is_locked)
|
|
39
47
|
VALUES (1, 0)
|
|
@@ -262,8 +270,9 @@ ON vezlo_knowledge_items USING ivfflat (embedding vector_cosine_ops)
|
|
|
262
270
|
WHERE embedding IS NOT NULL;
|
|
263
271
|
|
|
264
272
|
-- Sparse indexes for better performance
|
|
265
|
-
|
|
266
|
-
|
|
273
|
+
-- Note: idx_vezlo_knowledge_content was removed in migration 003
|
|
274
|
+
-- because btree indexes fail on large content (>2704 bytes).
|
|
275
|
+
-- Full-text search is handled by the GIN index above.
|
|
267
276
|
|
|
268
277
|
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_file_url
|
|
269
278
|
ON vezlo_knowledge_items(file_url) WHERE file_url IS NOT NULL;
|
|
@@ -313,3 +322,53 @@ CREATE POLICY "Service role can access all knowledge items" ON vezlo_knowledge_i
|
|
|
313
322
|
--
|
|
314
323
|
-- CREATE POLICY "Users can access their company knowledge" ON vezlo_knowledge_items
|
|
315
324
|
-- FOR ALL USING (company_id = auth.jwt() ->> 'company_id');
|
|
325
|
+
|
|
326
|
+
-- ============================================================================
|
|
327
|
+
-- RPC FUNCTION FOR OPTIMIZED VECTOR SEARCH
|
|
328
|
+
-- ============================================================================
|
|
329
|
+
|
|
330
|
+
-- This function uses pgvector's <=> operator for efficient nearest-neighbor search
|
|
331
|
+
-- directly in the database, avoiding the need to fetch all records and calculate
|
|
332
|
+
-- similarity in Node.js. This provides significant performance improvements,
|
|
333
|
+
-- especially for large knowledge bases.
|
|
334
|
+
CREATE OR REPLACE FUNCTION match_vezlo_knowledge(
|
|
335
|
+
query_embedding vector(1536),
|
|
336
|
+
match_threshold float DEFAULT 0.5,
|
|
337
|
+
match_count int DEFAULT 10,
|
|
338
|
+
filter_company_id bigint DEFAULT NULL
|
|
339
|
+
)
|
|
340
|
+
RETURNS TABLE (
|
|
341
|
+
id bigint,
|
|
342
|
+
uuid uuid,
|
|
343
|
+
title text,
|
|
344
|
+
description text,
|
|
345
|
+
content text,
|
|
346
|
+
type text,
|
|
347
|
+
metadata jsonb,
|
|
348
|
+
embedding vector(1536),
|
|
349
|
+
company_id bigint,
|
|
350
|
+
similarity float
|
|
351
|
+
)
|
|
352
|
+
LANGUAGE plpgsql
|
|
353
|
+
AS $$
|
|
354
|
+
BEGIN
|
|
355
|
+
RETURN QUERY
|
|
356
|
+
SELECT
|
|
357
|
+
ki.id,
|
|
358
|
+
ki.uuid,
|
|
359
|
+
ki.title,
|
|
360
|
+
ki.description,
|
|
361
|
+
ki.content,
|
|
362
|
+
ki.type,
|
|
363
|
+
ki.metadata,
|
|
364
|
+
ki.embedding,
|
|
365
|
+
ki.company_id,
|
|
366
|
+
1 - (ki.embedding <=> query_embedding) AS similarity
|
|
367
|
+
FROM vezlo_knowledge_items ki
|
|
368
|
+
WHERE ki.embedding IS NOT NULL
|
|
369
|
+
AND (filter_company_id IS NULL OR ki.company_id = filter_company_id)
|
|
370
|
+
AND (1 - (ki.embedding <=> query_embedding)) >= match_threshold
|
|
371
|
+
ORDER BY ki.embedding <=> query_embedding
|
|
372
|
+
LIMIT match_count;
|
|
373
|
+
END;
|
|
374
|
+
$$;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
import { UnifiedStorage } from '../storage/UnifiedStorage';
|
|
3
|
+
import { KnowledgeBaseService } from '../services/KnowledgeBaseService';
|
|
4
|
+
import { AIService } from '../services/AIService';
|
|
5
|
+
import { ChatManager } from '../services/ChatManager';
|
|
6
|
+
import { ChatController } from '../controllers/ChatController';
|
|
7
|
+
import { KnowledgeController } from '../controllers/KnowledgeController';
|
|
8
|
+
import { AuthController } from '../controllers/AuthController';
|
|
9
|
+
import { ApiKeyService } from '../services/ApiKeyService';
|
|
10
|
+
import { ApiKeyController } from '../controllers/ApiKeyController';
|
|
11
|
+
export interface ServiceInitOptions {
|
|
12
|
+
supabase: SupabaseClient;
|
|
13
|
+
tablePrefix?: string;
|
|
14
|
+
knowledgeTableName?: string;
|
|
15
|
+
chatHistoryLength?: number;
|
|
16
|
+
conversationTimeout?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface InitializedCoreServices {
|
|
19
|
+
services: {
|
|
20
|
+
storage: UnifiedStorage;
|
|
21
|
+
knowledgeBase: KnowledgeBaseService;
|
|
22
|
+
aiService: AIService;
|
|
23
|
+
chatManager: ChatManager;
|
|
24
|
+
apiKeyService: ApiKeyService;
|
|
25
|
+
};
|
|
26
|
+
controllers: {
|
|
27
|
+
chatController: ChatController;
|
|
28
|
+
knowledgeController: KnowledgeController;
|
|
29
|
+
authController: AuthController;
|
|
30
|
+
apiKeyController: ApiKeyController;
|
|
31
|
+
};
|
|
32
|
+
config: {
|
|
33
|
+
chatHistoryLength: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare function getChatHistoryLength(): number;
|
|
37
|
+
export declare function initializeCoreServices(options: ServiceInitOptions): InitializedCoreServices;
|
|
38
|
+
//# sourceMappingURL=initializeServices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializeServices.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE;QACR,OAAO,EAAE,cAAc,CAAC;QACxB,aAAa,EAAE,oBAAoB,CAAC;QACpC,SAAS,EAAE,SAAS,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,aAAa,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE;QACX,cAAc,EAAE,cAAc,CAAC;QAC/B,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,cAAc,EAAE,cAAc,CAAC;QAC/B,gBAAgB,EAAE,gBAAgB,CAAC;KACpC,CAAC;IACF,MAAM,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,CAa7C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,uBAAuB,CAyF3F"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getChatHistoryLength = getChatHistoryLength;
|
|
7
|
+
exports.initializeCoreServices = initializeCoreServices;
|
|
8
|
+
const logger_1 = __importDefault(require("../config/logger"));
|
|
9
|
+
const UnifiedStorage_1 = require("../storage/UnifiedStorage");
|
|
10
|
+
const KnowledgeBaseService_1 = require("../services/KnowledgeBaseService");
|
|
11
|
+
const AIService_1 = require("../services/AIService");
|
|
12
|
+
const ChatManager_1 = require("../services/ChatManager");
|
|
13
|
+
const ChatController_1 = require("../controllers/ChatController");
|
|
14
|
+
const KnowledgeController_1 = require("../controllers/KnowledgeController");
|
|
15
|
+
const AuthController_1 = require("../controllers/AuthController");
|
|
16
|
+
const ApiKeyService_1 = require("../services/ApiKeyService");
|
|
17
|
+
const ApiKeyController_1 = require("../controllers/ApiKeyController");
|
|
18
|
+
const IntentService_1 = require("../services/IntentService");
|
|
19
|
+
const DEFAULT_CHAT_HISTORY_LENGTH = 2;
|
|
20
|
+
const DEFAULT_CONVERSATION_TIMEOUT = 3600000; // 1 hour
|
|
21
|
+
function getChatHistoryLength() {
|
|
22
|
+
const rawValue = process.env.CHAT_HISTORY_LENGTH;
|
|
23
|
+
if (!rawValue) {
|
|
24
|
+
return DEFAULT_CHAT_HISTORY_LENGTH;
|
|
25
|
+
}
|
|
26
|
+
const parsed = parseInt(rawValue, 10);
|
|
27
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
28
|
+
logger_1.default.warn(`Invalid CHAT_HISTORY_LENGTH value "${rawValue}", falling back to ${DEFAULT_CHAT_HISTORY_LENGTH}`);
|
|
29
|
+
return DEFAULT_CHAT_HISTORY_LENGTH;
|
|
30
|
+
}
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
function initializeCoreServices(options) {
|
|
34
|
+
const { supabase, tablePrefix = 'vezlo', knowledgeTableName = 'vezlo_knowledge_items', chatHistoryLength, conversationTimeout = DEFAULT_CONVERSATION_TIMEOUT } = options;
|
|
35
|
+
const resolvedHistoryLength = chatHistoryLength ?? getChatHistoryLength();
|
|
36
|
+
// Log chat history configuration
|
|
37
|
+
logger_1.default.info('💬 Chat History Configuration:');
|
|
38
|
+
logger_1.default.info(` History Length: ${resolvedHistoryLength} messages (from ${process.env.CHAT_HISTORY_LENGTH ? 'env' : 'default'})`);
|
|
39
|
+
const storage = new UnifiedStorage_1.UnifiedStorage(supabase, tablePrefix);
|
|
40
|
+
const knowledgeBase = new KnowledgeBaseService_1.KnowledgeBaseService({
|
|
41
|
+
supabase,
|
|
42
|
+
tableName: knowledgeTableName
|
|
43
|
+
});
|
|
44
|
+
// Read AI configuration from environment
|
|
45
|
+
// Use AI_MODEL for all OpenAI calls (intent classification + response generation)
|
|
46
|
+
const aiModel = process.env.AI_MODEL || 'gpt-4o-mini';
|
|
47
|
+
const aiTemperature = parseFloat(process.env.AI_TEMPERATURE || '0.7');
|
|
48
|
+
const aiMaxTokens = parseInt(process.env.AI_MAX_TOKENS || '1000', 10);
|
|
49
|
+
// Log AI configuration for verification
|
|
50
|
+
logger_1.default.info('🤖 AI Service Configuration:');
|
|
51
|
+
logger_1.default.info(` Model: ${aiModel} (from ${process.env.AI_MODEL ? 'AI_MODEL env' : 'default'})`);
|
|
52
|
+
logger_1.default.info(` Temperature: ${aiTemperature} (from ${process.env.AI_TEMPERATURE ? 'env' : 'default'})`);
|
|
53
|
+
logger_1.default.info(` Max Tokens: ${aiMaxTokens} (from ${process.env.AI_MAX_TOKENS ? 'env' : 'default'})`);
|
|
54
|
+
const aiService = new AIService_1.AIService({
|
|
55
|
+
openaiApiKey: process.env.OPENAI_API_KEY,
|
|
56
|
+
organizationName: process.env.ORGANIZATION_NAME,
|
|
57
|
+
assistantName: process.env.ASSISTANT_NAME,
|
|
58
|
+
platformDescription: process.env.PLATFORM_DESCRIPTION,
|
|
59
|
+
model: aiModel,
|
|
60
|
+
temperature: aiTemperature,
|
|
61
|
+
maxTokens: aiMaxTokens,
|
|
62
|
+
knowledgeBaseService: knowledgeBase
|
|
63
|
+
});
|
|
64
|
+
const chatManager = new ChatManager_1.ChatManager({
|
|
65
|
+
aiService,
|
|
66
|
+
storage,
|
|
67
|
+
enableConversationManagement: true,
|
|
68
|
+
conversationTimeout,
|
|
69
|
+
historyLength: resolvedHistoryLength
|
|
70
|
+
});
|
|
71
|
+
// Use same AI_MODEL for intent classification
|
|
72
|
+
const intentService = new IntentService_1.IntentService({
|
|
73
|
+
openaiApiKey: process.env.OPENAI_API_KEY,
|
|
74
|
+
model: aiModel,
|
|
75
|
+
assistantName: process.env.ASSISTANT_NAME,
|
|
76
|
+
organizationName: process.env.ORGANIZATION_NAME
|
|
77
|
+
});
|
|
78
|
+
const chatController = new ChatController_1.ChatController(chatManager, storage, supabase, {
|
|
79
|
+
historyLength: resolvedHistoryLength,
|
|
80
|
+
intentService
|
|
81
|
+
});
|
|
82
|
+
const knowledgeController = new KnowledgeController_1.KnowledgeController(knowledgeBase, aiService);
|
|
83
|
+
const authController = new AuthController_1.AuthController(supabase);
|
|
84
|
+
const apiKeyService = new ApiKeyService_1.ApiKeyService(supabase);
|
|
85
|
+
const apiKeyController = new ApiKeyController_1.ApiKeyController(apiKeyService);
|
|
86
|
+
return {
|
|
87
|
+
services: {
|
|
88
|
+
storage,
|
|
89
|
+
knowledgeBase,
|
|
90
|
+
aiService,
|
|
91
|
+
chatManager,
|
|
92
|
+
apiKeyService
|
|
93
|
+
},
|
|
94
|
+
controllers: {
|
|
95
|
+
chatController,
|
|
96
|
+
knowledgeController,
|
|
97
|
+
authController,
|
|
98
|
+
apiKeyController
|
|
99
|
+
},
|
|
100
|
+
config: {
|
|
101
|
+
chatHistoryLength: resolvedHistoryLength
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=initializeServices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializeServices.js","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,17 @@ import { SupabaseClient } from '@supabase/supabase-js';
|
|
|
3
3
|
import { ChatManager } from '../services/ChatManager';
|
|
4
4
|
import { UnifiedStorage } from '../storage/UnifiedStorage';
|
|
5
5
|
import { AuthenticatedRequest } from '../middleware/auth';
|
|
6
|
+
import { IntentService } from '../services/IntentService';
|
|
6
7
|
export declare class ChatController {
|
|
7
8
|
private chatManager;
|
|
8
9
|
private storage;
|
|
9
10
|
private supabase;
|
|
10
|
-
|
|
11
|
+
private chatHistoryLength;
|
|
12
|
+
private intentService?;
|
|
13
|
+
constructor(chatManager: ChatManager, storage: UnifiedStorage, supabase: SupabaseClient, options?: {
|
|
14
|
+
historyLength?: number;
|
|
15
|
+
intentService?: IntentService;
|
|
16
|
+
});
|
|
11
17
|
createConversation(req: AuthenticatedRequest, res: Response): Promise<void>;
|
|
12
18
|
createUserMessage(req: Request, res: Response): Promise<void>;
|
|
13
19
|
generateResponse(req: AuthenticatedRequest, res: Response): Promise<void>;
|
|
@@ -15,5 +21,9 @@ export declare class ChatController {
|
|
|
15
21
|
getUserConversations(req: AuthenticatedRequest, res: Response): Promise<void>;
|
|
16
22
|
deleteConversation(req: Request, res: Response): Promise<void>;
|
|
17
23
|
submitFeedback(req: AuthenticatedRequest, res: Response): Promise<void>;
|
|
24
|
+
private classifyIntent;
|
|
25
|
+
private handleIntentResult;
|
|
26
|
+
private respondWithAssistantMessage;
|
|
27
|
+
private saveAssistantMessage;
|
|
18
28
|
}
|
|
19
29
|
//# sourceMappingURL=ChatController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAA8B,MAAM,2BAA2B,CAAC;AAGtF,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAGpC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAO;IAWnE,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqH3E,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD7D,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8GzE,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC3D,oBAAoB,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9D,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAsD/D,cAAc;YAmBd,kBAAkB;YAyFlB,2BAA2B;YA4B3B,oBAAoB;CA4BnC"}
|
|
@@ -6,10 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.ChatController = void 0;
|
|
7
7
|
const logger_1 = __importDefault(require("../config/logger"));
|
|
8
8
|
class ChatController {
|
|
9
|
-
constructor(chatManager, storage, supabase) {
|
|
9
|
+
constructor(chatManager, storage, supabase, options = {}) {
|
|
10
10
|
this.chatManager = chatManager;
|
|
11
11
|
this.storage = storage;
|
|
12
12
|
this.supabase = supabase;
|
|
13
|
+
const { historyLength } = options;
|
|
14
|
+
this.chatHistoryLength = typeof historyLength === 'number' && historyLength > 0 ? historyLength : 2;
|
|
15
|
+
this.intentService = options.intentService;
|
|
13
16
|
}
|
|
14
17
|
// Create a new conversation
|
|
15
18
|
async createConversation(req, res) {
|
|
@@ -175,42 +178,54 @@ class ChatController {
|
|
|
175
178
|
const conversationId = userMessage.conversationId;
|
|
176
179
|
const userMessageContent = userMessage.content;
|
|
177
180
|
// Get conversation context (recent messages)
|
|
178
|
-
const messages = await this.
|
|
181
|
+
const messages = await this.chatManager.getRecentMessages(conversationId, this.chatHistoryLength);
|
|
182
|
+
logger_1.default.info(`📜 Retrieved ${messages.length} message(s) from conversation history (limit: ${this.chatHistoryLength})`);
|
|
183
|
+
const conversation = await this.storage.getConversation(conversationId);
|
|
184
|
+
// Run intent classification to decide handling strategy
|
|
185
|
+
const intentResult = await this.classifyIntent(userMessageContent, messages);
|
|
186
|
+
const handled = await this.handleIntentResult(intentResult, userMessage, conversationId, conversation, res);
|
|
187
|
+
if (handled) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
179
190
|
// Get knowledge base search results if available
|
|
180
191
|
const aiService = this.chatManager.aiService;
|
|
181
|
-
let knowledgeResults =
|
|
192
|
+
let knowledgeResults = null; // null = search done, no results; undefined = not searched yet
|
|
182
193
|
// Get conversation to extract company_id for knowledge base search
|
|
183
|
-
|
|
184
|
-
const
|
|
194
|
+
// Note: profile.companyId and conversation.organizationId should contain integer IDs (as strings)
|
|
195
|
+
const companyIdRaw = req.profile?.companyId || conversation?.organizationId;
|
|
196
|
+
const companyId = companyIdRaw ? (typeof companyIdRaw === 'string' ? parseInt(companyIdRaw, 10) : companyIdRaw) : undefined;
|
|
185
197
|
if (aiService && aiService.knowledgeBaseService) {
|
|
186
198
|
try {
|
|
187
|
-
|
|
188
|
-
console.log('🔑 Company ID:', companyId);
|
|
199
|
+
logger_1.default.info(`🔍 Searching KB: query="${userMessageContent.substring(0, 50)}...", companyId=${companyId}`);
|
|
189
200
|
const searchResults = await aiService.knowledgeBaseService.search(userMessageContent, {
|
|
190
|
-
limit:
|
|
191
|
-
threshold: 0.
|
|
192
|
-
type: '
|
|
193
|
-
company_id: companyId
|
|
201
|
+
limit: 5,
|
|
202
|
+
threshold: 0.5, // Balanced precision/recall (0.5 is industry standard)
|
|
203
|
+
type: 'semantic', // Modern RAG best practice: semantic-only for better context
|
|
204
|
+
company_id: companyId
|
|
194
205
|
});
|
|
195
|
-
|
|
206
|
+
logger_1.default.info(`📊 Found knowledge base results: ${searchResults.length}`);
|
|
196
207
|
if (searchResults.length > 0) {
|
|
197
208
|
knowledgeResults = '\n\nRelevant information from knowledge base:\n';
|
|
198
209
|
searchResults.forEach((result) => {
|
|
199
210
|
knowledgeResults += `- ${result.title}: ${result.content}\n`;
|
|
200
211
|
});
|
|
201
|
-
|
|
212
|
+
logger_1.default.info('✅ Knowledge context prepared');
|
|
202
213
|
}
|
|
203
214
|
else {
|
|
204
|
-
|
|
215
|
+
// Set to empty string to indicate search was done but no results found
|
|
216
|
+
knowledgeResults = '';
|
|
217
|
+
logger_1.default.info('⚠️ No knowledge base results found; will return appropriate fallback response');
|
|
205
218
|
}
|
|
206
219
|
}
|
|
207
220
|
catch (error) {
|
|
208
221
|
console.error('❌ Failed to search knowledge base:', error);
|
|
209
222
|
logger_1.default.error('Failed to search knowledge base:', error);
|
|
223
|
+
// On error, set to null so AIService knows search was attempted
|
|
224
|
+
knowledgeResults = null;
|
|
210
225
|
}
|
|
211
226
|
}
|
|
212
227
|
else {
|
|
213
|
-
|
|
228
|
+
logger_1.default.warn('⚠️ AI service or knowledge base service not available');
|
|
214
229
|
}
|
|
215
230
|
// Build context for AI
|
|
216
231
|
const chatContext = {
|
|
@@ -218,27 +233,17 @@ class ChatController {
|
|
|
218
233
|
role: msg.role,
|
|
219
234
|
content: msg.content
|
|
220
235
|
})),
|
|
221
|
-
knowledgeResults
|
|
236
|
+
knowledgeResults: knowledgeResults ?? undefined // Convert null to undefined for cleaner check
|
|
222
237
|
};
|
|
223
238
|
// Generate AI response using the actual user message content
|
|
224
239
|
const response = await aiService.generateResponse(userMessageContent, chatContext);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
threadId: conversationId,
|
|
230
|
-
role: 'assistant',
|
|
240
|
+
const assistantMessage = await this.saveAssistantMessage({
|
|
241
|
+
conversation,
|
|
242
|
+
conversationId,
|
|
243
|
+
parentMessageId: uuid,
|
|
231
244
|
content: response.content,
|
|
232
|
-
|
|
233
|
-
toolResults: response.toolResults,
|
|
234
|
-
createdAt: new Date()
|
|
245
|
+
toolResults: response.toolResults
|
|
235
246
|
});
|
|
236
|
-
// Update conversation message count (conversation already fetched above)
|
|
237
|
-
if (conversation) {
|
|
238
|
-
await this.storage.updateConversation(conversationId, {
|
|
239
|
-
messageCount: conversation.messageCount + 1
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
247
|
res.json({
|
|
243
248
|
uuid: assistantMessage.id,
|
|
244
249
|
parent_message_uuid: uuid,
|
|
@@ -384,6 +389,138 @@ class ChatController {
|
|
|
384
389
|
});
|
|
385
390
|
}
|
|
386
391
|
}
|
|
392
|
+
async classifyIntent(message, history) {
|
|
393
|
+
if (!this.intentService) {
|
|
394
|
+
return {
|
|
395
|
+
intent: 'knowledge',
|
|
396
|
+
needsGuardrail: false,
|
|
397
|
+
contactEmail: null
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
const resolvedHistory = Array.isArray(history) ? history : [];
|
|
401
|
+
logger_1.default.info('🧭 Classifying user intent...');
|
|
402
|
+
return this.intentService.classify({
|
|
403
|
+
message,
|
|
404
|
+
conversationHistory: resolvedHistory
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
async handleIntentResult(result, userMessage, conversationId, conversation, res) {
|
|
408
|
+
if (result.needsGuardrail && result.intent !== 'guardrail') {
|
|
409
|
+
await this.respondWithAssistantMessage({
|
|
410
|
+
conversation,
|
|
411
|
+
conversationId,
|
|
412
|
+
parentMessageId: userMessage.id,
|
|
413
|
+
content: `I can help with documentation or implementation guidance, but I can't share credentials or confidential configuration. Please contact your system administrator or support for access.`
|
|
414
|
+
}, res);
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
logger_1.default.info(`🧾 Intent result: ${result.intent}${result.needsGuardrail ? ' (guardrail triggered)' : ''}`);
|
|
418
|
+
switch (result.intent) {
|
|
419
|
+
case 'greeting':
|
|
420
|
+
await this.respondWithAssistantMessage({
|
|
421
|
+
conversation,
|
|
422
|
+
conversationId,
|
|
423
|
+
parentMessageId: userMessage.id,
|
|
424
|
+
content: 'Hello! How can I help you today?'
|
|
425
|
+
}, res);
|
|
426
|
+
return true;
|
|
427
|
+
case 'personality':
|
|
428
|
+
// Get assistant name and organization from environment
|
|
429
|
+
const assistantName = process.env.ASSISTANT_NAME || 'AI Assistant';
|
|
430
|
+
const orgName = process.env.ORGANIZATION_NAME || 'Your Organization';
|
|
431
|
+
await this.respondWithAssistantMessage({
|
|
432
|
+
conversation,
|
|
433
|
+
conversationId,
|
|
434
|
+
parentMessageId: userMessage.id,
|
|
435
|
+
content: `I'm ${assistantName}, your AI assistant for ${orgName}. I help teams understand and work with the ${orgName} platform by answering questions about features, documentation, and technical details. How can I assist you today?`
|
|
436
|
+
}, res);
|
|
437
|
+
return true;
|
|
438
|
+
case 'clarification':
|
|
439
|
+
await this.respondWithAssistantMessage({
|
|
440
|
+
conversation,
|
|
441
|
+
conversationId,
|
|
442
|
+
parentMessageId: userMessage.id,
|
|
443
|
+
content: "I'm not sure I understood. Could you clarify what you need help with?"
|
|
444
|
+
}, res);
|
|
445
|
+
return true;
|
|
446
|
+
case 'guardrail':
|
|
447
|
+
await this.respondWithAssistantMessage({
|
|
448
|
+
conversation,
|
|
449
|
+
conversationId,
|
|
450
|
+
parentMessageId: userMessage.id,
|
|
451
|
+
content: `I can help with documentation or implementation guidance, but I can't share credentials or confidential configuration. Please contact your system administrator or support for access.`
|
|
452
|
+
}, res);
|
|
453
|
+
return true;
|
|
454
|
+
case 'human_support_email':
|
|
455
|
+
await this.respondWithAssistantMessage({
|
|
456
|
+
conversation,
|
|
457
|
+
conversationId,
|
|
458
|
+
parentMessageId: userMessage.id,
|
|
459
|
+
content: `Thanks for sharing your email. Our team will reach out soon—response times may vary depending on support volume.`
|
|
460
|
+
}, res);
|
|
461
|
+
logger_1.default.info('📨 Recorded human support email from user.');
|
|
462
|
+
return true;
|
|
463
|
+
case 'human_support_request':
|
|
464
|
+
if (result.contactEmail) {
|
|
465
|
+
await this.respondWithAssistantMessage({
|
|
466
|
+
conversation,
|
|
467
|
+
conversationId,
|
|
468
|
+
parentMessageId: userMessage.id,
|
|
469
|
+
content: `Thanks for sharing your email. Our team will reach out soon—response times may vary depending on support volume.`
|
|
470
|
+
}, res);
|
|
471
|
+
logger_1.default.info('📨 Human support request with email handled in a single step.');
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
await this.respondWithAssistantMessage({
|
|
475
|
+
conversation,
|
|
476
|
+
conversationId,
|
|
477
|
+
parentMessageId: userMessage.id,
|
|
478
|
+
content: 'I can connect you with a human teammate. Please share your email address so we can follow up.'
|
|
479
|
+
}, res);
|
|
480
|
+
logger_1.default.info('🙋 Human support requested; awaiting email from user.');
|
|
481
|
+
}
|
|
482
|
+
return true;
|
|
483
|
+
default:
|
|
484
|
+
logger_1.default.info('📚 Intent requires knowledge lookup; proceeding with RAG flow.');
|
|
485
|
+
return false;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
async respondWithAssistantMessage(payload, res) {
|
|
489
|
+
const assistantMessage = await this.saveAssistantMessage({
|
|
490
|
+
conversation: payload.conversation,
|
|
491
|
+
conversationId: payload.conversationId,
|
|
492
|
+
parentMessageId: payload.parentMessageId,
|
|
493
|
+
content: payload.content,
|
|
494
|
+
toolResults: payload.toolResults
|
|
495
|
+
});
|
|
496
|
+
res.json({
|
|
497
|
+
uuid: assistantMessage.id,
|
|
498
|
+
parent_message_uuid: payload.parentMessageId,
|
|
499
|
+
type: 'assistant',
|
|
500
|
+
content: assistantMessage.content,
|
|
501
|
+
status: 'completed',
|
|
502
|
+
created_at: assistantMessage.createdAt.toISOString()
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
async saveAssistantMessage(options) {
|
|
506
|
+
const assistantMessage = await this.storage.saveMessage({
|
|
507
|
+
conversationId: options.conversationId,
|
|
508
|
+
threadId: options.conversationId,
|
|
509
|
+
role: 'assistant',
|
|
510
|
+
content: options.content,
|
|
511
|
+
parentMessageId: options.parentMessageId,
|
|
512
|
+
toolResults: options.toolResults,
|
|
513
|
+
createdAt: new Date()
|
|
514
|
+
});
|
|
515
|
+
if (options.conversation) {
|
|
516
|
+
const nextCount = (options.conversation.messageCount || 0) + 1;
|
|
517
|
+
await this.storage.updateConversation(options.conversationId, {
|
|
518
|
+
messageCount: nextCount
|
|
519
|
+
});
|
|
520
|
+
options.conversation.messageCount = nextCount;
|
|
521
|
+
}
|
|
522
|
+
return assistantMessage;
|
|
523
|
+
}
|
|
387
524
|
}
|
|
388
525
|
exports.ChatController = ChatController;
|
|
389
526
|
//# sourceMappingURL=ChatController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatController.js","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatController.js","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"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"}
|
|
@@ -188,7 +188,7 @@ class KnowledgeController {
|
|
|
188
188
|
}
|
|
189
189
|
async search(req, res) {
|
|
190
190
|
try {
|
|
191
|
-
const { query, limit = '5', threshold = '0.
|
|
191
|
+
const { query, limit = '5', threshold = '0.5', type = 'semantic' } = req.body;
|
|
192
192
|
if (!query) {
|
|
193
193
|
res.status(400).json({ error: 'query is required' });
|
|
194
194
|
return;
|
|
@@ -247,9 +247,9 @@ class KnowledgeController {
|
|
|
247
247
|
}
|
|
248
248
|
// Perform knowledge base search
|
|
249
249
|
const searchResults = await this.knowledgeBase.search(query, {
|
|
250
|
-
limit:
|
|
251
|
-
threshold: 0.
|
|
252
|
-
type: '
|
|
250
|
+
limit: 5,
|
|
251
|
+
threshold: 0.5, // Balanced precision/recall (0.5 is industry standard)
|
|
252
|
+
type: 'semantic', // Modern RAG best practice: semantic-only for better context
|
|
253
253
|
company_id: companyId
|
|
254
254
|
});
|
|
255
255
|
// Format search results for AI context
|