@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.
- package/Dockerfile +6 -4
- package/README.md +18 -10
- package/database-schema.sql +54 -0
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +38 -17
- package/dist/knexfile.js.map +1 -1
- 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/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/services/SetupService.d.ts +2 -0
- package/dist/src/services/SetupService.d.ts.map +1 -1
- package/dist/src/services/SetupService.js +60 -47
- package/dist/src/services/SetupService.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/knexfile.ts +44 -17
- package/package.json +4 -3
- package/scripts/entrypoint.sh +44 -4
- package/scripts/seed-default.js +0 -0
- 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
|
|
37
|
-
RUN npm ci --only=production && npm
|
|
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
|
|
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
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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.
|
|
711
|
+
**Status**: ✅ Production Ready | **Version**: 2.2.1 | **Node.js**: 20+ | **TypeScript**: 5+
|
package/database-schema.sql
CHANGED
|
@@ -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
|
+
$$;
|
package/dist/knexfile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knexfile.d.ts","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,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:
|
|
58
|
+
directory: resolvedMigrationsDirectory,
|
|
34
59
|
tableName: 'knex_migrations',
|
|
35
|
-
extension:
|
|
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
|
|
58
|
-
directory:
|
|
83
|
+
// Use resolved path (prefers TS during development, JS in packaged builds)
|
|
84
|
+
directory: resolvedMigrationsDirectory,
|
|
59
85
|
tableName: 'knex_migrations',
|
|
60
|
-
extension:
|
|
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
|
-
//
|
|
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
|
-
|
|
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:
|
|
90
|
-
loadExtensions:
|
|
112
|
+
extension: supabaseMigrationExtension,
|
|
113
|
+
loadExtensions: supabaseMigrationExtension === 'ts' ? ['.ts'] : ['.js']
|
|
91
114
|
},
|
|
92
115
|
seeds: {
|
|
93
|
-
directory:
|
|
94
|
-
|
|
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
|
};
|
package/dist/knexfile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knexfile.js","sourceRoot":"","sources":["../knexfile.ts"],"names":[],"mappings":";;;;;AACA,oDAA4B;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
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
|
-
|
|
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"}
|