@vezlo/assistant-server 2.0.1 → 2.2.1

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 (54) hide show
  1. package/Dockerfile +6 -4
  2. package/README.md +18 -10
  3. package/database-schema.sql +54 -0
  4. package/dist/knexfile.d.ts.map +1 -1
  5. package/dist/knexfile.js +38 -17
  6. package/dist/knexfile.js.map +1 -1
  7. package/dist/src/bootstrap/initializeServices.d.ts +38 -0
  8. package/dist/src/bootstrap/initializeServices.d.ts.map +1 -0
  9. package/dist/src/bootstrap/initializeServices.js +105 -0
  10. package/dist/src/bootstrap/initializeServices.js.map +1 -0
  11. package/dist/src/controllers/ChatController.d.ts +11 -1
  12. package/dist/src/controllers/ChatController.d.ts.map +1 -1
  13. package/dist/src/controllers/ChatController.js +168 -31
  14. package/dist/src/controllers/ChatController.js.map +1 -1
  15. package/dist/src/controllers/KnowledgeController.js +4 -4
  16. package/dist/src/controllers/KnowledgeController.js.map +1 -1
  17. package/dist/src/migrations/004_add_vector_search_rpc.d.ts +4 -0
  18. package/dist/src/migrations/004_add_vector_search_rpc.d.ts.map +1 -0
  19. package/dist/src/migrations/004_add_vector_search_rpc.js +61 -0
  20. package/dist/src/migrations/004_add_vector_search_rpc.js.map +1 -0
  21. package/dist/src/schemas/KnowledgeSchemas.js +2 -2
  22. package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
  23. package/dist/src/server.js +8 -31
  24. package/dist/src/server.js.map +1 -1
  25. package/dist/src/services/AIService.d.ts +2 -0
  26. package/dist/src/services/AIService.d.ts.map +1 -1
  27. package/dist/src/services/AIService.js +72 -54
  28. package/dist/src/services/AIService.js.map +1 -1
  29. package/dist/src/services/ChatManager.d.ts +4 -1
  30. package/dist/src/services/ChatManager.d.ts.map +1 -1
  31. package/dist/src/services/ChatManager.js +51 -9
  32. package/dist/src/services/ChatManager.js.map +1 -1
  33. package/dist/src/services/IntentService.d.ts +31 -0
  34. package/dist/src/services/IntentService.d.ts.map +1 -0
  35. package/dist/src/services/IntentService.js +116 -0
  36. package/dist/src/services/IntentService.js.map +1 -0
  37. package/dist/src/services/KnowledgeBaseService.d.ts.map +1 -1
  38. package/dist/src/services/KnowledgeBaseService.js +49 -51
  39. package/dist/src/services/KnowledgeBaseService.js.map +1 -1
  40. package/dist/src/services/SetupService.d.ts +2 -0
  41. package/dist/src/services/SetupService.d.ts.map +1 -1
  42. package/dist/src/services/SetupService.js +60 -47
  43. package/dist/src/services/SetupService.js.map +1 -1
  44. package/dist/src/storage/ConversationRepository.d.ts.map +1 -1
  45. package/dist/src/storage/ConversationRepository.js +7 -12
  46. package/dist/src/storage/ConversationRepository.js.map +1 -1
  47. package/dist/src/types/index.d.ts +1 -0
  48. package/dist/src/types/index.d.ts.map +1 -1
  49. package/env.example +2 -1
  50. package/knexfile.ts +44 -17
  51. package/package.json +4 -3
  52. package/scripts/entrypoint.sh +44 -4
  53. package/scripts/seed-default.js +0 -0
  54. package/scripts/setup.js +66 -12
package/Dockerfile CHANGED
@@ -33,12 +33,14 @@ RUN adduser -S vezlo -u 1001
33
33
  # Copy package files
34
34
  COPY package*.json ./
35
35
 
36
- # Install only production dependencies + ts-node for migrations
37
- RUN npm ci --only=production && npm install ts-node && npm cache clean --force
36
+ # Install only production dependencies (compiled migrations are used at runtime)
37
+ RUN npm ci --only=production && npm cache clean --force
38
38
 
39
- # Copy built application, migrations, and scripts from builder
39
+ # Copy built application (dist) and compiled migrations/knexfile from builder
40
40
  COPY --from=builder /app/dist ./dist
41
- COPY --from=builder /app/src/migrations ./src/migrations
41
+ COPY --from=builder /app/dist/src/migrations ./src/migrations
42
+ # Copy knexfile (compiled JS + TS source for reference)
43
+ COPY --from=builder /app/dist/knexfile.js ./knexfile.js
42
44
  COPY --from=builder /app/knexfile.ts ./knexfile.ts
43
45
  COPY --from=builder /app/scripts ./scripts
44
46
 
package/README.md CHANGED
@@ -189,15 +189,23 @@ npx vezlo-server
189
189
  npm run build && npm start
190
190
  ```
191
191
 
192
- ### Docker Deployment
193
-
194
- ```bash
195
- # Start with Docker Compose (uses .env from project root)
196
- docker-compose up -d
197
-
198
- # View logs
199
- docker-compose logs -f vezlo-server
200
- ```
192
+ ### Docker Setup
193
+
194
+ 1. Copy the environment template and fill in your Supabase/OpenAI values:
195
+ ```bash
196
+ cp env.example .env
197
+ # edit .env with your credentials before continuing
198
+ ```
199
+ 2. Build and start the stack:
200
+ ```bash
201
+ docker-compose build
202
+ docker-compose up -d
203
+ ```
204
+ The entrypoint runs migrations, seeds the default org/admin, and generates an API key automatically.
205
+ 3. View container logs:
206
+ ```bash
207
+ docker-compose logs -f vezlo-server
208
+ ```
201
209
 
202
210
  ## ☁️ Vercel Deployment
203
211
 
@@ -700,4 +708,4 @@ This project is dual-licensed:
700
708
 
701
709
  ---
702
710
 
703
- **Status**: ✅ Production Ready | **Version**: 2.0.1 | **Node.js**: 20+ | **TypeScript**: 5+
711
+ **Status**: ✅ Production Ready | **Version**: 2.2.1 | **Node.js**: 20+ | **TypeScript**: 5+
@@ -38,6 +38,10 @@ INSERT INTO knex_migrations (name, batch, migration_time)
38
38
  SELECT '003_drop_content_index.ts', 1, NOW()
39
39
  WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '003_drop_content_index.ts');
40
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
+
41
45
  -- Set migration lock to unlocked (0 = unlocked, 1 = locked)
42
46
  INSERT INTO knex_migrations_lock (index, is_locked)
43
47
  VALUES (1, 0)
@@ -318,3 +322,53 @@ CREATE POLICY "Service role can access all knowledge items" ON vezlo_knowledge_i
318
322
  --
319
323
  -- CREATE POLICY "Users can access their company knowledge" ON vezlo_knowledge_items
320
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
+ $$;
@@ -1 +1 @@
1
- {"version":3,"file":"knexfile.d.ts","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAejC,QAAA,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;CAoFzC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"knexfile.d.ts","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA8CjC,QAAA,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;CAgFzC,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/knexfile.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const dotenv_1 = __importDefault(require("dotenv"));
7
7
  const path = require('path');
8
+ const fs = require('fs');
8
9
  // Load environment variables
9
10
  dotenv_1.default.config();
10
11
  // Register ts-node for TypeScript support in migrations (works in all environments)
@@ -14,6 +15,30 @@ try {
14
15
  catch (e) {
15
16
  // ts-node not available, that's okay - migrations will use compiled JS
16
17
  }
18
+ const projectRoot = fs.existsSync(path.join(__dirname, 'package.json'))
19
+ ? __dirname
20
+ : path.join(__dirname, '..');
21
+ const srcMigrationsPath = path.join(projectRoot, 'src', 'migrations');
22
+ const distMigrationsPath = path.join(projectRoot, 'dist', 'src', 'migrations');
23
+ const tsMigrationProbe = path.join(srcMigrationsPath, '001_initial_schema.ts');
24
+ const jsMigrationProbe = path.join(distMigrationsPath, '001_initial_schema.js');
25
+ const hasTsMigrations = fs.existsSync(tsMigrationProbe);
26
+ const hasJsMigrations = fs.existsSync(jsMigrationProbe);
27
+ const resolvedMigrationsDirectory = hasTsMigrations
28
+ ? srcMigrationsPath
29
+ : hasJsMigrations
30
+ ? distMigrationsPath
31
+ : srcMigrationsPath;
32
+ const migrationExtension = hasTsMigrations ? 'ts' : (hasJsMigrations ? 'js' : 'ts');
33
+ const migrationLoadExtensions = migrationExtension === 'ts' ? ['.ts'] : ['.js'];
34
+ const supabaseMigrationsDirectory = fs.existsSync(distMigrationsPath)
35
+ ? distMigrationsPath
36
+ : resolvedMigrationsDirectory;
37
+ const supabaseMigrationExtension = fs.existsSync(distMigrationsPath) ? 'js' : migrationExtension;
38
+ const supabaseSeedsDirectory = fs.existsSync(path.join(projectRoot, 'dist', 'src', 'seeds'))
39
+ ? path.join(projectRoot, 'dist', 'src', 'seeds')
40
+ : path.join(projectRoot, 'src', 'seeds');
41
+ const supabaseSeedsAreJs = supabaseSeedsDirectory.endsWith(path.join('dist', 'src', 'seeds'));
17
42
  const config = {
18
43
  development: {
19
44
  client: 'postgresql',
@@ -30,9 +55,10 @@ const config = {
30
55
  max: 10
31
56
  },
32
57
  migrations: {
33
- directory: './src/migrations',
58
+ directory: resolvedMigrationsDirectory,
34
59
  tableName: 'knex_migrations',
35
- extension: 'ts'
60
+ extension: migrationExtension,
61
+ loadExtensions: migrationLoadExtensions
36
62
  },
37
63
  seeds: {
38
64
  directory: './src/seeds',
@@ -54,17 +80,18 @@ const config = {
54
80
  max: 20
55
81
  },
56
82
  migrations: {
57
- // Use absolute path based on __dirname (knexfile.js location in dist/)
58
- directory: path.join(__dirname, 'src/migrations'),
83
+ // Use resolved path (prefers TS during development, JS in packaged builds)
84
+ directory: resolvedMigrationsDirectory,
59
85
  tableName: 'knex_migrations',
60
- extension: 'js'
86
+ extension: migrationExtension,
87
+ loadExtensions: migrationLoadExtensions
61
88
  },
62
89
  seeds: {
63
90
  directory: path.join(__dirname, 'src/seeds'),
64
91
  extension: 'js'
65
92
  }
66
93
  },
67
- // For Supabase connection using connection string
94
+ // Supabase (used by Vercel) always targets compiled JS migrations
68
95
  supabase: {
69
96
  client: 'postgresql',
70
97
  connection: process.env.SUPABASE_DB_URL || process.env.DATABASE_URL || {
@@ -80,20 +107,14 @@ const config = {
80
107
  max: 10
81
108
  },
82
109
  migrations: {
83
- // In production (Vercel), knexfile.js is in dist/, so use absolute path
84
- // In development, use relative path
85
- directory: process.env.NODE_ENV === 'production'
86
- ? path.join(__dirname, 'src/migrations')
87
- : path.join(process.cwd(), 'src/migrations'),
110
+ directory: supabaseMigrationsDirectory,
88
111
  tableName: 'knex_migrations',
89
- extension: process.env.NODE_ENV === 'production' ? 'js' : 'ts',
90
- loadExtensions: process.env.NODE_ENV === 'production' ? ['.js'] : ['.ts']
112
+ extension: supabaseMigrationExtension,
113
+ loadExtensions: supabaseMigrationExtension === 'ts' ? ['.ts'] : ['.js']
91
114
  },
92
115
  seeds: {
93
- directory: process.env.NODE_ENV === 'production'
94
- ? path.join(__dirname, 'src/seeds')
95
- : path.join(process.cwd(), 'src/seeds'),
96
- extension: process.env.NODE_ENV === 'production' ? 'js' : 'ts'
116
+ directory: supabaseSeedsDirectory,
117
+ extension: supabaseSeedsAreJs ? 'js' : 'ts'
97
118
  }
98
119
  }
99
120
  };
@@ -1 +1 @@
1
- {"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"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"}
@@ -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"}