@vezlo/assistant-server 2.11.0 → 2.12.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 (60) hide show
  1. package/README.md +11 -1
  2. package/database-schema.sql +33 -7
  3. package/dist/src/bootstrap/initializeServices.d.ts +4 -0
  4. package/dist/src/bootstrap/initializeServices.d.ts.map +1 -1
  5. package/dist/src/bootstrap/initializeServices.js +13 -5
  6. package/dist/src/bootstrap/initializeServices.js.map +1 -1
  7. package/dist/src/config/defaultAISettings.d.ts +20 -0
  8. package/dist/src/config/defaultAISettings.d.ts.map +1 -0
  9. package/dist/src/config/defaultAISettings.js +52 -0
  10. package/dist/src/config/defaultAISettings.js.map +1 -0
  11. package/dist/src/controllers/AISettingsController.d.ts +22 -0
  12. package/dist/src/controllers/AISettingsController.d.ts.map +1 -0
  13. package/dist/src/controllers/AISettingsController.js +119 -0
  14. package/dist/src/controllers/AISettingsController.js.map +1 -0
  15. package/dist/src/controllers/ChatController.d.ts +3 -0
  16. package/dist/src/controllers/ChatController.d.ts.map +1 -1
  17. package/dist/src/controllers/ChatController.js +60 -4
  18. package/dist/src/controllers/ChatController.js.map +1 -1
  19. package/dist/src/controllers/DatabaseToolConfigController.d.ts.map +1 -1
  20. package/dist/src/controllers/DatabaseToolConfigController.js +61 -12
  21. package/dist/src/controllers/DatabaseToolConfigController.js.map +1 -1
  22. package/dist/src/migrations/011_create_database_tool_configs.d.ts.map +1 -1
  23. package/dist/src/migrations/011_create_database_tool_configs.js +11 -9
  24. package/dist/src/migrations/011_create_database_tool_configs.js.map +1 -1
  25. package/dist/src/migrations/012_create_ai_settings.d.ts +4 -0
  26. package/dist/src/migrations/012_create_ai_settings.d.ts.map +1 -0
  27. package/dist/src/migrations/012_create_ai_settings.js +36 -0
  28. package/dist/src/migrations/012_create_ai_settings.js.map +1 -0
  29. package/dist/src/server.js +130 -0
  30. package/dist/src/server.js.map +1 -1
  31. package/dist/src/services/AIService.d.ts +7 -2
  32. package/dist/src/services/AIService.d.ts.map +1 -1
  33. package/dist/src/services/AIService.js +43 -66
  34. package/dist/src/services/AIService.js.map +1 -1
  35. package/dist/src/services/AISettingsService.d.ts +45 -0
  36. package/dist/src/services/AISettingsService.d.ts.map +1 -0
  37. package/dist/src/services/AISettingsService.js +162 -0
  38. package/dist/src/services/AISettingsService.js.map +1 -0
  39. package/dist/src/services/DatabaseToolConfigService.d.ts +19 -17
  40. package/dist/src/services/DatabaseToolConfigService.d.ts.map +1 -1
  41. package/dist/src/services/DatabaseToolConfigService.js +34 -25
  42. package/dist/src/services/DatabaseToolConfigService.js.map +1 -1
  43. package/dist/src/services/IntentService.d.ts +7 -2
  44. package/dist/src/services/IntentService.d.ts.map +1 -1
  45. package/dist/src/services/IntentService.js +51 -28
  46. package/dist/src/services/IntentService.js.map +1 -1
  47. package/dist/src/services/PromptService.d.ts +59 -0
  48. package/dist/src/services/PromptService.d.ts.map +1 -0
  49. package/dist/src/services/PromptService.js +199 -0
  50. package/dist/src/services/PromptService.js.map +1 -0
  51. package/dist/src/services/ResponseGenerationService.d.ts +13 -0
  52. package/dist/src/services/ResponseGenerationService.d.ts.map +1 -1
  53. package/dist/src/services/ResponseGenerationService.js +10 -2
  54. package/dist/src/services/ResponseGenerationService.js.map +1 -1
  55. package/dist/src/services/SetupService.d.ts.map +1 -1
  56. package/dist/src/services/SetupService.js +10 -0
  57. package/dist/src/services/SetupService.js.map +1 -1
  58. package/env.example +2 -0
  59. package/package.json +3 -1
  60. package/scripts/seed-ai-settings.js +120 -0
package/README.md CHANGED
@@ -177,6 +177,9 @@ curl "http://localhost:3000/api/migrate?key=$MIGRATION_SECRET_KEY"
177
177
  # Create default admin user and company (if not exists)
178
178
  npm run seed-default
179
179
 
180
+ # Seed AI settings for existing companies (optional, auto-created for new companies)
181
+ npm run seed-ai-settings
182
+
180
183
  # Generate API key for library integration
181
184
  npm run generate-key
182
185
  ```
@@ -351,6 +354,13 @@ Creates default admin user and company.
351
354
  vezlo-seed-default
352
355
  ```
353
356
 
357
+ ### vezlo-seed-ai-settings
358
+ Seeds or updates AI settings for all existing companies with default values.
359
+
360
+ ```bash
361
+ vezlo-seed-ai-settings
362
+ ```
363
+
354
364
  ### vezlo-generate-key
355
365
  Generates API key for the default admin's company. The API key is used by src-to-kb library.
356
366
 
@@ -738,4 +748,4 @@ This project is dual-licensed:
738
748
 
739
749
  ---
740
750
 
741
- **Status**: ✅ Production Ready | **Version**: 2.9.0 | **Node.js**: 20+ | **TypeScript**: 5+
751
+ **Status**: ✅ Production Ready | **Version**: 2.12.0 | **Node.js**: 20+ | **TypeScript**: 5+
@@ -70,6 +70,10 @@ INSERT INTO knex_migrations (name, batch, migration_time)
70
70
  SELECT '011_create_database_tool_configs.ts', 1, NOW()
71
71
  WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '011_create_database_tool_configs.ts');
72
72
 
73
+ INSERT INTO knex_migrations (name, batch, migration_time)
74
+ SELECT '012_create_ai_settings.ts', 1, NOW()
75
+ WHERE NOT EXISTS (SELECT 1 FROM knex_migrations WHERE name = '012_create_ai_settings.ts');
76
+
73
77
  -- Set migration lock to unlocked (0 = unlocked, 1 = locked)
74
78
  INSERT INTO knex_migrations_lock (index, is_locked)
75
79
  VALUES (1, 0)
@@ -628,21 +632,24 @@ $$;
628
632
 
629
633
  -- External database configurations
630
634
  CREATE TABLE IF NOT EXISTS vezlo_database_tool_configs (
631
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
635
+ id BIGSERIAL PRIMARY KEY,
636
+ uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
632
637
  company_id BIGINT NOT NULL REFERENCES vezlo_companies(id) ON DELETE CASCADE,
633
638
  db_url_encrypted TEXT NOT NULL,
634
639
  db_key_encrypted TEXT NOT NULL,
635
640
  enabled BOOLEAN DEFAULT true,
636
- created_at TIMESTAMPTZ DEFAULT NOW(),
637
- updated_at TIMESTAMPTZ DEFAULT NOW()
641
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
642
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
638
643
  );
639
644
 
640
645
  CREATE INDEX IF NOT EXISTS idx_database_tool_configs_company_id ON vezlo_database_tool_configs(company_id);
646
+ CREATE INDEX IF NOT EXISTS idx_database_tool_configs_uuid ON vezlo_database_tool_configs(uuid);
641
647
 
642
648
  -- Individual tool configurations
643
649
  CREATE TABLE IF NOT EXISTS vezlo_database_tools (
644
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
645
- config_id UUID NOT NULL REFERENCES vezlo_database_tool_configs(id) ON DELETE CASCADE,
650
+ id BIGSERIAL PRIMARY KEY,
651
+ uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
652
+ config_id BIGINT NOT NULL REFERENCES vezlo_database_tool_configs(id) ON DELETE CASCADE,
646
653
  table_name TEXT NOT NULL,
647
654
  tool_name TEXT NOT NULL,
648
655
  tool_description TEXT,
@@ -654,10 +661,29 @@ CREATE TABLE IF NOT EXISTS vezlo_database_tools (
654
661
  user_filter_column TEXT,
655
662
  user_filter_type TEXT,
656
663
  user_context_key TEXT,
657
- created_at TIMESTAMPTZ DEFAULT NOW(),
658
- updated_at TIMESTAMPTZ DEFAULT NOW(),
664
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
665
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
659
666
  UNIQUE(config_id, table_name)
660
667
  );
661
668
 
662
669
  CREATE INDEX IF NOT EXISTS idx_database_tools_config_id ON vezlo_database_tools(config_id);
670
+ CREATE INDEX IF NOT EXISTS idx_database_tools_uuid ON vezlo_database_tools(uuid);
663
671
  CREATE INDEX IF NOT EXISTS idx_database_tools_enabled ON vezlo_database_tools(enabled);
672
+
673
+ -- ============================================================================
674
+ -- AI SETTINGS TABLE
675
+ -- ============================================================================
676
+
677
+ -- AI configuration settings per company
678
+ CREATE TABLE IF NOT EXISTS vezlo_ai_settings (
679
+ id BIGSERIAL PRIMARY KEY,
680
+ uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
681
+ company_id BIGINT NOT NULL REFERENCES vezlo_companies(id) ON DELETE CASCADE,
682
+ settings JSONB NOT NULL DEFAULT '{"model":"gpt-4o-mini","temperature":0.7,"max_tokens":1000,"top_k":null,"prompts":{"personality":"","response_guidelines":"","interaction_etiquette":"","scope_of_assistance":"","formatting_and_presentation":""}}',
683
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
684
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
685
+ UNIQUE(company_id)
686
+ );
687
+
688
+ CREATE INDEX IF NOT EXISTS idx_ai_settings_company_id ON vezlo_ai_settings(company_id);
689
+ CREATE INDEX IF NOT EXISTS idx_ai_settings_uuid ON vezlo_ai_settings(uuid);
@@ -16,6 +16,8 @@ import { SlackController } from '../controllers/SlackController';
16
16
  import { ValidationService } from '../services/ValidationService';
17
17
  import { DatabaseToolConfigService } from '../services/DatabaseToolConfigService';
18
18
  import { DatabaseToolConfigController } from '../controllers/DatabaseToolConfigController';
19
+ import { AISettingsService } from '../services/AISettingsService';
20
+ import { AISettingsController } from '../controllers/AISettingsController';
19
21
  export interface ServiceInitOptions {
20
22
  supabase: SupabaseClient;
21
23
  tablePrefix?: string;
@@ -36,6 +38,7 @@ export interface InitializedCoreServices {
36
38
  validationService: ValidationService;
37
39
  databaseToolService: any;
38
40
  databaseToolConfigService: DatabaseToolConfigService;
41
+ aiSettingsService: AISettingsService;
39
42
  };
40
43
  controllers: {
41
44
  chatController: ChatController;
@@ -45,6 +48,7 @@ export interface InitializedCoreServices {
45
48
  companyController: CompanyController;
46
49
  slackController: SlackController;
47
50
  databaseToolConfigController: DatabaseToolConfigController;
51
+ aiSettingsController: AISettingsController;
48
52
  };
49
53
  config: {
50
54
  chatHistoryLength: number;
@@ -1 +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,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,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;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,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;QAC7B,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,eAAe,CAAC;QACjC,YAAY,EAAE,YAAY,CAAC;QAC3B,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,mBAAmB,EAAE,GAAG,CAAC;QACzB,yBAAyB,EAAE,yBAAyB,CAAC;KACtD,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;QACnC,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,eAAe,EAAE,eAAe,CAAC;QACjC,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,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,CA8I3F"}
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,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,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;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,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;QAC7B,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,eAAe,CAAC;QACjC,YAAY,EAAE,YAAY,CAAC;QAC3B,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,mBAAmB,EAAE,GAAG,CAAC;QACzB,yBAAyB,EAAE,yBAAyB,CAAC;QACrD,iBAAiB,EAAE,iBAAiB,CAAC;KACtC,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;QACnC,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,eAAe,EAAE,eAAe,CAAC;QACjC,4BAA4B,EAAE,4BAA4B,CAAC;QAC3D,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,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,CAqJ3F"}
@@ -26,6 +26,8 @@ const ValidationService_1 = require("../services/ValidationService");
26
26
  const DatabaseToolService_1 = require("../services/DatabaseToolService");
27
27
  const DatabaseToolConfigService_1 = require("../services/DatabaseToolConfigService");
28
28
  const DatabaseToolConfigController_1 = require("../controllers/DatabaseToolConfigController");
29
+ const AISettingsService_1 = require("../services/AISettingsService");
30
+ const AISettingsController_1 = require("../controllers/AISettingsController");
29
31
  const DEFAULT_CHAT_HISTORY_LENGTH = 2;
30
32
  const DEFAULT_CONVERSATION_TIMEOUT = 3600000; // 1 hour
31
33
  function getChatHistoryLength() {
@@ -92,8 +94,7 @@ function initializeCoreServices(options) {
92
94
  openaiApiKey: process.env.OPENAI_API_KEY,
93
95
  model: aiModel,
94
96
  assistantName: process.env.ASSISTANT_NAME,
95
- organizationName: process.env.ORGANIZATION_NAME,
96
- databaseToolsEnabled: process.env.EXTERNAL_DB_ENABLED === 'true'
97
+ organizationName: process.env.ORGANIZATION_NAME
97
98
  });
98
99
  // Initialize realtime publisher if env vars are available
99
100
  let realtimePublisher;
@@ -106,12 +107,17 @@ function initializeCoreServices(options) {
106
107
  }
107
108
  // Initialize Validation service
108
109
  const validationService = new ValidationService_1.ValidationService(process.env.AI_VALIDATION_ENABLED === 'true');
110
+ // Initialize AI Settings service first (needed by ChatController)
111
+ const aiSettingsService = new AISettingsService_1.AISettingsService(supabase);
112
+ const aiSettingsController = new AISettingsController_1.AISettingsController(aiSettingsService);
113
+ logger_1.default.info('✅ AI Settings service initialized');
109
114
  const chatController = new ChatController_1.ChatController(chatManager, storage, supabase, {
110
115
  historyLength: resolvedHistoryLength,
111
116
  intentService,
112
117
  realtimePublisher,
113
118
  validationService,
114
- databaseToolService
119
+ databaseToolService,
120
+ aiSettingsService
115
121
  });
116
122
  const knowledgeController = new KnowledgeController_1.KnowledgeController(knowledgeBase, aiService, citationService);
117
123
  const authController = new AuthController_1.AuthController(supabase);
@@ -136,7 +142,8 @@ function initializeCoreServices(options) {
136
142
  slackService,
137
143
  databaseToolService,
138
144
  validationService,
139
- databaseToolConfigService
145
+ databaseToolConfigService,
146
+ aiSettingsService
140
147
  },
141
148
  controllers: {
142
149
  chatController,
@@ -145,7 +152,8 @@ function initializeCoreServices(options) {
145
152
  apiKeyController,
146
153
  companyController,
147
154
  slackController,
148
- databaseToolConfigController
155
+ databaseToolConfigController,
156
+ aiSettingsController
149
157
  },
150
158
  config: {
151
159
  chatHistoryLength: resolvedHistoryLength
@@ -1 +1 @@
1
- {"version":3,"file":"initializeServices.js","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initializeServices.js","sourceRoot":"","sources":["../../../src/bootstrap/initializeServices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Default AI Settings
3
+ * These values are seeded into the database for new companies
4
+ */
5
+ export interface AIPrompts {
6
+ personality: string;
7
+ response_guidelines: string;
8
+ interaction_etiquette: string;
9
+ scope_of_assistance: string;
10
+ formatting_and_presentation: string;
11
+ }
12
+ export interface AISettings {
13
+ model: string;
14
+ temperature: number;
15
+ max_tokens: number;
16
+ top_k: number | null;
17
+ prompts: AIPrompts;
18
+ }
19
+ export declare const DEFAULT_AI_SETTINGS: AISettings;
20
+ //# sourceMappingURL=defaultAISettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultAISettings.d.ts","sourceRoot":"","sources":["../../../src/config/defaultAISettings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,EAAE,UA+CjC,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * Default AI Settings
4
+ * These values are seeded into the database for new companies
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DEFAULT_AI_SETTINGS = void 0;
8
+ exports.DEFAULT_AI_SETTINGS = {
9
+ model: 'gpt-4o-mini',
10
+ temperature: 0.7,
11
+ max_tokens: 1000,
12
+ top_k: null,
13
+ prompts: {
14
+ personality: `You are a professional and helpful AI assistant focused on providing accurate, clear information.
15
+
16
+ - Balance expertise with approachability
17
+ - Be patient and ensure users feel heard
18
+ - Focus on practical solutions
19
+ - Be transparent about limitations`,
20
+ response_guidelines: `**Response Standards:**
21
+ - Provide clear, concise answers based on available information
22
+ - Use structured formatting when helpful
23
+ - Cite sources from knowledge base when applicable
24
+ - Avoid speculation or assumptions
25
+ - Acknowledge incomplete information and suggest next steps`,
26
+ interaction_etiquette: `**Communication Standards:**
27
+ - Be respectful and courteous
28
+ - Listen carefully before responding
29
+ - Use clear, jargon-free language unless technical terms are needed
30
+ - Show empathy when users express challenges
31
+ - Use a friendly, conversational tone`,
32
+ scope_of_assistance: `**You Can Help With:**
33
+ - Questions about products, services, and features
34
+ - Guidance on workflows and processes
35
+ - Troubleshooting common issues
36
+ - Directing to relevant documentation
37
+
38
+ **You Should NOT:**
39
+ - Make promises on behalf of the organization
40
+ - Share sensitive or confidential information
41
+ - Provide financial, legal, or medical advice
42
+ - Override established policies`,
43
+ formatting_and_presentation: `**Format Guidelines:**
44
+ - Use **headings (##)** for major sections
45
+ - Use **bullet points (-)** for lists
46
+ - Use **numbered lists (1., 2., 3.)** for steps
47
+ - Use **code blocks (\`\`\`)** for technical references
48
+ - Keep paragraphs short and scannable
49
+ - Use **bold** for key points`
50
+ }
51
+ };
52
+ //# sourceMappingURL=defaultAISettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultAISettings.js","sourceRoot":"","sources":["../../../src/config/defaultAISettings.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkBU,QAAA,mBAAmB,GAAe;IAC7C,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE;QACP,WAAW,EAAE;;;;;mCAKkB;QAE/B,mBAAmB,EAAE;;;;;4DAKmC;QAExD,qBAAqB,EAAE;;;;;sCAKW;QAElC,mBAAmB,EAAE;;;;;;;;;;gCAUO;QAE5B,2BAA2B,EAAE;;;;;;8BAMH;KAC3B;CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Response } from 'express';
2
+ import { AuthenticatedRequest } from '../middleware/auth';
3
+ import { AISettingsService } from '../services/AISettingsService';
4
+ /**
5
+ * AISettingsController
6
+ * Protected controller for managing company-specific AI settings
7
+ */
8
+ export declare class AISettingsController {
9
+ private aiSettingsService;
10
+ constructor(aiSettingsService: AISettingsService);
11
+ /**
12
+ * GET /api/companies/:companyUuid/ai-settings
13
+ * Get AI settings for a company
14
+ */
15
+ getSettings(req: AuthenticatedRequest, res: Response): Promise<void>;
16
+ /**
17
+ * PUT /api/companies/:companyUuid/ai-settings
18
+ * Update AI settings for a company
19
+ */
20
+ updateSettings(req: AuthenticatedRequest, res: Response): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=AISettingsController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AISettingsController.d.ts","sourceRoot":"","sources":["../../../src/controllers/AISettingsController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIlE;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,iBAAiB,EAAE,iBAAiB;IAIhD;;;OAGG;IACG,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC1E;;;OAGG;IACG,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAuE9E"}
@@ -0,0 +1,119 @@
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.AISettingsController = void 0;
7
+ const logger_1 = __importDefault(require("../config/logger"));
8
+ /**
9
+ * AISettingsController
10
+ * Protected controller for managing company-specific AI settings
11
+ */
12
+ class AISettingsController {
13
+ constructor(aiSettingsService) {
14
+ this.aiSettingsService = aiSettingsService;
15
+ }
16
+ /**
17
+ * GET /api/companies/:companyUuid/ai-settings
18
+ * Get AI settings for a company
19
+ */
20
+ async getSettings(req, res) {
21
+ try {
22
+ const companyUuid = Array.isArray(req.params.companyUuid)
23
+ ? req.params.companyUuid[0]
24
+ : req.params.companyUuid;
25
+ if (!companyUuid) {
26
+ res.status(400).json({ error: 'Company UUID is required' });
27
+ return;
28
+ }
29
+ // Verify user has access to this company
30
+ if (req.profile?.companyUuid !== companyUuid) {
31
+ logger_1.default.warn(`Unauthorized access attempt to AI settings for company: ${companyUuid}`);
32
+ res.status(403).json({ error: 'Unauthorized access to this company\'s settings' });
33
+ return;
34
+ }
35
+ const settings = await this.aiSettingsService.getSettingsByCompanyUuid(companyUuid);
36
+ logger_1.default.info(`✅ AI settings retrieved for company: ${companyUuid}`);
37
+ res.json({
38
+ success: true,
39
+ settings
40
+ });
41
+ }
42
+ catch (error) {
43
+ logger_1.default.error('Error getting AI settings:', error);
44
+ res.status(500).json({
45
+ error: 'Failed to get AI settings',
46
+ message: error instanceof Error ? error.message : 'Unknown error'
47
+ });
48
+ }
49
+ }
50
+ /**
51
+ * PUT /api/companies/:companyUuid/ai-settings
52
+ * Update AI settings for a company
53
+ */
54
+ async updateSettings(req, res) {
55
+ try {
56
+ const companyUuid = Array.isArray(req.params.companyUuid)
57
+ ? req.params.companyUuid[0]
58
+ : req.params.companyUuid;
59
+ if (!companyUuid) {
60
+ res.status(400).json({ error: 'Company UUID is required' });
61
+ return;
62
+ }
63
+ // Verify user has access to this company and is admin
64
+ if (req.profile?.companyUuid !== companyUuid) {
65
+ logger_1.default.warn(`Unauthorized access attempt to update AI settings for company: ${companyUuid}`);
66
+ res.status(403).json({ error: 'Unauthorized access to this company\'s settings' });
67
+ return;
68
+ }
69
+ if (req.profile?.role !== 'admin') {
70
+ logger_1.default.warn(`Non-admin user attempted to update AI settings: ${req.user?.uuid}`);
71
+ res.status(403).json({ error: 'Only admins can update AI settings' });
72
+ return;
73
+ }
74
+ const settingsUpdate = req.body;
75
+ // Validate settings structure
76
+ if (settingsUpdate.temperature !== undefined) {
77
+ if (typeof settingsUpdate.temperature !== 'number' ||
78
+ settingsUpdate.temperature < 0 ||
79
+ settingsUpdate.temperature > 2) {
80
+ res.status(400).json({ error: 'Temperature must be a number between 0 and 2' });
81
+ return;
82
+ }
83
+ }
84
+ if (settingsUpdate.max_tokens !== undefined) {
85
+ if (typeof settingsUpdate.max_tokens !== 'number' ||
86
+ settingsUpdate.max_tokens < 1 ||
87
+ settingsUpdate.max_tokens > 16000) {
88
+ res.status(400).json({ error: 'Max tokens must be a number between 1 and 16000' });
89
+ return;
90
+ }
91
+ }
92
+ if (settingsUpdate.model !== undefined) {
93
+ const allowedModels = ['gpt-4o-mini', 'gpt-4o', 'gpt-4-turbo', 'gpt-3.5-turbo'];
94
+ if (!allowedModels.includes(settingsUpdate.model)) {
95
+ res.status(400).json({
96
+ error: 'Invalid model',
97
+ allowedModels
98
+ });
99
+ return;
100
+ }
101
+ }
102
+ const updatedSettings = await this.aiSettingsService.updateSettings(companyUuid, settingsUpdate);
103
+ logger_1.default.info(`✅ AI settings updated for company: ${companyUuid} by user: ${req.user?.uuid}`);
104
+ res.json({
105
+ success: true,
106
+ settings: updatedSettings
107
+ });
108
+ }
109
+ catch (error) {
110
+ logger_1.default.error('Error updating AI settings:', error);
111
+ res.status(500).json({
112
+ error: 'Failed to update AI settings',
113
+ message: error instanceof Error ? error.message : 'Unknown error'
114
+ });
115
+ }
116
+ }
117
+ }
118
+ exports.AISettingsController = AISettingsController;
119
+ //# sourceMappingURL=AISettingsController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AISettingsController.js","sourceRoot":"","sources":["../../../src/controllers/AISettingsController.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { IntentService } from '../services/IntentService';
7
7
  import { RealtimePublisher } from '../services/RealtimePublisher';
8
8
  import { ValidationService } from '../services/ValidationService';
9
9
  import { DatabaseToolService } from '../services/DatabaseToolService';
10
+ import { AISettingsService } from '../services/AISettingsService';
10
11
  export declare class ChatController {
11
12
  private chatManager;
12
13
  private storage;
@@ -18,12 +19,14 @@ export declare class ChatController {
18
19
  private responseStreamingService;
19
20
  private validationService?;
20
21
  private databaseToolService?;
22
+ private aiSettingsService?;
21
23
  constructor(chatManager: ChatManager, storage: UnifiedStorage, supabase: SupabaseClient, options?: {
22
24
  historyLength?: number;
23
25
  intentService?: IntentService;
24
26
  realtimePublisher?: RealtimePublisher;
25
27
  validationService?: ValidationService;
26
28
  databaseToolService?: DatabaseToolService;
29
+ aiSettingsService?: AISettingsService;
27
30
  });
28
31
  createConversation(req: AuthenticatedRequest, res: Response): Promise<void>;
29
32
  createUserMessage(req: Request, res: Response): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatController.d.ts","sourceRoot":"","sources":["../../../src/controllers/ChatController.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ class ChatController {
18
18
  this.realtimePublisher = options.realtimePublisher;
19
19
  this.validationService = options.validationService;
20
20
  this.databaseToolService = options.databaseToolService;
21
+ this.aiSettingsService = options.aiSettingsService;
21
22
  // Initialize services
22
23
  const aiService = chatManager.aiService;
23
24
  this.responseGenerationService = new ResponseGenerationService_1.ResponseGenerationService(this.intentService, aiService, this.chatHistoryLength, this.databaseToolService);
@@ -264,8 +265,59 @@ class ChatController {
264
265
  }
265
266
  // Set up Server-Sent Events (SSE) headers for streaming
266
267
  this.responseStreamingService.setupSSEHeaders(res);
267
- // Run intent classification to decide handling strategy (with dynamic tools)
268
+ // Load and apply AI settings for this company before generating response
268
269
  const companyId = conversation?.organizationId ? parseInt(String(conversation.organizationId), 10) : undefined;
270
+ // Try to get company UUID from profile or fetch from database using companyId
271
+ let companyUuid = req.profile?.companyUuid;
272
+ if (!companyUuid && companyId && this.aiSettingsService) {
273
+ // Fallback: fetch company UUID from database using companyId
274
+ try {
275
+ const { data: company } = await this.supabase
276
+ .from('vezlo_companies')
277
+ .select('uuid')
278
+ .eq('id', companyId)
279
+ .single();
280
+ if (company) {
281
+ companyUuid = company.uuid;
282
+ logger_1.default.info(`🔍 Fetched company UUID from database: ${companyUuid}`);
283
+ }
284
+ }
285
+ catch (error) {
286
+ logger_1.default.warn('⚠️ Failed to fetch company UUID from database:', error);
287
+ }
288
+ }
289
+ if (this.aiSettingsService && companyUuid) {
290
+ try {
291
+ logger_1.default.info(`🔍 Loading AI settings for company: ${companyUuid}`);
292
+ const aiSettings = await this.aiSettingsService.getSettingsByCompanyUuid(companyUuid);
293
+ logger_1.default.info(`📦 AI Settings loaded:`, {
294
+ model: aiSettings.model,
295
+ temperature: aiSettings.temperature,
296
+ max_tokens: aiSettings.max_tokens,
297
+ hasPrompts: !!aiSettings.prompts,
298
+ promptKeys: aiSettings.prompts ? Object.keys(aiSettings.prompts) : []
299
+ });
300
+ const aiService = this.responseGenerationService.getAIService();
301
+ if (aiService) {
302
+ aiService.setAISettings(aiSettings);
303
+ logger_1.default.info(`✅ AI settings applied to AIService for company: ${companyUuid}`);
304
+ }
305
+ else {
306
+ logger_1.default.warn('⚠️ AIService not available in ResponseGenerationService');
307
+ }
308
+ // Also set ALL AI settings prompts in ResponseGenerationService for intent classification
309
+ if (aiSettings.prompts) {
310
+ this.responseGenerationService.setAISettingsPrompts(aiSettings.prompts);
311
+ }
312
+ }
313
+ catch (error) {
314
+ logger_1.default.warn('⚠️ Failed to load AI settings, using defaults:', error);
315
+ }
316
+ }
317
+ else {
318
+ logger_1.default.warn(`⚠️ Cannot load AI settings: aiSettingsService=${!!this.aiSettingsService}, companyUuid=${companyUuid}, companyId=${companyId}`);
319
+ }
320
+ // Run intent classification to decide handling strategy (with dynamic tools)
269
321
  const intentResult = await this.responseGenerationService.classifyIntent(userMessageContent, messages, companyId);
270
322
  const intentResponse = this.responseGenerationService.handleIntentResult(intentResult, userMessageContent);
271
323
  let accumulatedContent = '';
@@ -298,9 +350,13 @@ class ChatController {
298
350
  if (!aiService) {
299
351
  throw new Error('AI service not available');
300
352
  }
353
+ // Get AI settings from the AI service (model, temperature)
354
+ const aiSettings = aiService.aiSettings;
355
+ const modelToUse = aiSettings?.model || process.env.AI_MODEL || 'gpt-4o-mini';
356
+ const temperature = aiSettings?.temperature ?? parseFloat(process.env.AI_TEMPERATURE || '0.7');
357
+ const maxTokens = parseInt(process.env.AI_MAX_TOKENS || '500', 10);
301
358
  // Direct OpenAI call bypassing the restrictive system prompt
302
359
  const openai = aiService.openai;
303
- const modelToUse = process.env.AI_MODEL || 'gpt-4o-mini';
304
360
  const completion = await openai.chat.completions.create({
305
361
  model: modelToUse,
306
362
  messages: [
@@ -318,8 +374,8 @@ ${JSON.stringify(toolResult.data || toolResult, null, 2)}
318
374
  Provide a natural, friendly response to the user's question using this data.`
319
375
  }
320
376
  ],
321
- temperature: 0.7,
322
- max_tokens: 500
377
+ temperature,
378
+ max_tokens: maxTokens
323
379
  });
324
380
  const formattedContent = completion.choices[0]?.message?.content || 'Here is your information.';
325
381
  logger_1.default.info('📤 Streaming database tool response');