@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.
Files changed (49) hide show
  1. package/README.md +1 -1
  2. package/database-schema.sql +61 -2
  3. package/dist/src/bootstrap/initializeServices.d.ts +38 -0
  4. package/dist/src/bootstrap/initializeServices.d.ts.map +1 -0
  5. package/dist/src/bootstrap/initializeServices.js +105 -0
  6. package/dist/src/bootstrap/initializeServices.js.map +1 -0
  7. package/dist/src/controllers/ChatController.d.ts +11 -1
  8. package/dist/src/controllers/ChatController.d.ts.map +1 -1
  9. package/dist/src/controllers/ChatController.js +168 -31
  10. package/dist/src/controllers/ChatController.js.map +1 -1
  11. package/dist/src/controllers/KnowledgeController.js +4 -4
  12. package/dist/src/controllers/KnowledgeController.js.map +1 -1
  13. package/dist/src/migrations/001_initial_schema.d.ts.map +1 -1
  14. package/dist/src/migrations/001_initial_schema.js +2 -1
  15. package/dist/src/migrations/001_initial_schema.js.map +1 -1
  16. package/dist/src/migrations/003_drop_content_index.d.ts +4 -0
  17. package/dist/src/migrations/003_drop_content_index.d.ts.map +1 -0
  18. package/dist/src/migrations/003_drop_content_index.js +19 -0
  19. package/dist/src/migrations/003_drop_content_index.js.map +1 -0
  20. package/dist/src/migrations/004_add_vector_search_rpc.d.ts +4 -0
  21. package/dist/src/migrations/004_add_vector_search_rpc.d.ts.map +1 -0
  22. package/dist/src/migrations/004_add_vector_search_rpc.js +61 -0
  23. package/dist/src/migrations/004_add_vector_search_rpc.js.map +1 -0
  24. package/dist/src/schemas/KnowledgeSchemas.js +2 -2
  25. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
  26. package/dist/src/server.js +8 -31
  27. package/dist/src/server.js.map +1 -1
  28. package/dist/src/services/AIService.d.ts +2 -0
  29. package/dist/src/services/AIService.d.ts.map +1 -1
  30. package/dist/src/services/AIService.js +72 -54
  31. package/dist/src/services/AIService.js.map +1 -1
  32. package/dist/src/services/ChatManager.d.ts +4 -1
  33. package/dist/src/services/ChatManager.d.ts.map +1 -1
  34. package/dist/src/services/ChatManager.js +51 -9
  35. package/dist/src/services/ChatManager.js.map +1 -1
  36. package/dist/src/services/IntentService.d.ts +31 -0
  37. package/dist/src/services/IntentService.d.ts.map +1 -0
  38. package/dist/src/services/IntentService.js +116 -0
  39. package/dist/src/services/IntentService.js.map +1 -0
  40. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
  41. package/dist/src/services/KnowledgeBaseService.js +49 -51
  42. package/dist/src/services/KnowledgeBaseService.js.map +1 -1
  43. package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
  44. package/dist/src/storage/ConversationRepository.js +7 -12
  45. package/dist/src/storage/ConversationRepository.js.map +1 -1
  46. package/dist/src/types/index.d.ts +1 -0
  47. package/dist/src/types/index.d.ts.map +1 -1
  48. package/env.example +2 -1
  49. package/package.json +1 -1
package/README.md CHANGED
@@ -700,4 +700,4 @@ This project is dual-licensed:
700
700
 
701
701
  ---
702
702
 
703
- **Status**: ✅ Production Ready | **Version**: 2.0.0 | **Node.js**: 20+ | **TypeScript**: 5+
703
+ **Status**: ✅ Production Ready | **Version**: 2.1.0 | **Node.js**: 20+ | **TypeScript**: 5+
@@ -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
- CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_content
266
- ON vezlo_knowledge_items(content) WHERE content IS NOT NULL;
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
- constructor(chatManager: ChatManager, storage: UnifiedStorage, supabase: SupabaseClient);
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;AAG1D,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc;IAOjF,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;IA2GzE,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;CAsD9E"}
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.storage.getMessages(conversationId, 10);
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
- const conversation = await this.storage.getConversation(conversationId);
184
- const companyId = req.profile?.companyId || conversation?.organizationId;
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
- console.log('🔍 Searching knowledge base for:', userMessageContent);
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: 3,
191
- threshold: 0.7,
192
- type: 'hybrid',
193
- company_id: companyId ? parseInt(companyId) : undefined
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
- console.log('📊 Found knowledge base results:', searchResults.length);
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
- console.log('✅ Knowledge context prepared:', knowledgeResults.substring(0, 200));
212
+ logger_1.default.info('✅ Knowledge context prepared');
202
213
  }
203
214
  else {
204
- console.log('⚠️ No knowledge base results found');
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
- console.log('⚠️ AI service or knowledge base service not available');
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
- // Save AI message to database
226
- // Note: The storage layer will handle UUID to internal ID conversion
227
- const assistantMessage = await this.storage.saveMessage({
228
- conversationId: conversationId, // This is the conversation UUID
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
- parentMessageId: uuid, // This is the parent message UUID
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.7', type = 'hybrid' } = req.body;
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: 3,
251
- threshold: 0.7,
252
- type: 'hybrid',
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