@vezlo/assistant-server 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -27
- package/database-schema.sql +48 -47
- package/dist/src/config/logger.d.ts.map +1 -1
- package/dist/src/config/logger.js +28 -17
- package/dist/src/config/logger.js.map +1 -1
- package/dist/src/config/swagger.js +2 -2
- package/dist/src/config/swagger.js.map +1 -1
- package/dist/src/controllers/KnowledgeController.d.ts +4 -1
- package/dist/src/controllers/KnowledgeController.d.ts.map +1 -1
- package/dist/src/controllers/KnowledgeController.js +34 -1
- package/dist/src/controllers/KnowledgeController.js.map +1 -1
- package/dist/src/schemas/KnowledgeSchemas.d.ts +25 -0
- package/dist/src/schemas/KnowledgeSchemas.d.ts.map +1 -1
- package/dist/src/schemas/KnowledgeSchemas.js +14 -0
- package/dist/src/schemas/KnowledgeSchemas.js.map +1 -1
- package/dist/src/schemas/index.d.ts +25 -0
- package/dist/src/schemas/index.d.ts.map +1 -1
- package/dist/src/server.js +30 -4
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/KnowledgeBaseService.js +2 -2
- package/dist/src/services/KnowledgeBaseService.js.map +1 -1
- package/dist/src/storage/FeedbackRepository.js +4 -4
- package/dist/src/storage/FeedbackRepository.js.map +1 -1
- package/dist/src/storage/MessageRepository.js +4 -4
- package/dist/src/storage/MessageRepository.js.map +1 -1
- package/dist/src/storage/SupabaseStorage.js +9 -9
- package/dist/src/storage/SupabaseStorage.js.map +1 -1
- package/package.json +10 -3
- package/scripts/entrypoint.sh +21 -0
- package/scripts/setup.js +339 -0
- package/scripts/validate-db.js +171 -0
package/README.md
CHANGED
|
@@ -32,63 +32,110 @@ cd assistant-server
|
|
|
32
32
|
npm install
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
## 🚀 Quick Start
|
|
35
|
+
## 🚀 Quick Start (Interactive Setup)
|
|
36
36
|
|
|
37
37
|
### Prerequisites
|
|
38
38
|
- Node.js 20+ and npm 9+
|
|
39
|
-
- Supabase project
|
|
39
|
+
- Supabase project (or PostgreSQL database)
|
|
40
40
|
- OpenAI API key
|
|
41
41
|
|
|
42
|
-
###
|
|
42
|
+
### Easy Setup with Interactive Wizard
|
|
43
|
+
|
|
44
|
+
The fastest way to get started is with our interactive setup wizard:
|
|
43
45
|
|
|
44
46
|
```bash
|
|
45
|
-
# If installed
|
|
46
|
-
|
|
47
|
-
cd my-ai-assistant
|
|
47
|
+
# If installed globally
|
|
48
|
+
vezlo-setup
|
|
48
49
|
|
|
49
|
-
#
|
|
50
|
-
|
|
50
|
+
# If installed locally
|
|
51
|
+
npx vezlo-setup
|
|
51
52
|
|
|
52
53
|
# Or if cloned from GitHub
|
|
54
|
+
npm run setup
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The wizard will guide you through:
|
|
58
|
+
1. **Database Configuration** - Choose Supabase or PostgreSQL
|
|
59
|
+
2. **OpenAI API Setup** - Configure your AI model
|
|
60
|
+
3. **Automatic Table Creation** - Creates all required database tables
|
|
61
|
+
4. **Environment File Generation** - Saves configuration to .env
|
|
62
|
+
|
|
63
|
+
After setup completes, start the server:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
vezlo-server
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Manual Setup (Advanced)
|
|
70
|
+
|
|
71
|
+
If you prefer manual configuration:
|
|
72
|
+
|
|
73
|
+
#### 1. Create Environment File
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Copy example file
|
|
53
77
|
cp env.example .env
|
|
54
78
|
|
|
55
|
-
# Edit
|
|
79
|
+
# Edit with your credentials
|
|
80
|
+
nano .env
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### 2. Configure Database
|
|
84
|
+
|
|
85
|
+
Get your Supabase credentials from:
|
|
86
|
+
- **Dashboard** → Settings → API
|
|
87
|
+
- **Database** → Settings → Connection string
|
|
88
|
+
|
|
89
|
+
```env
|
|
90
|
+
# Supabase Configuration
|
|
91
|
+
SUPABASE_URL=https://your-project.supabase.co
|
|
92
|
+
SUPABASE_SERVICE_KEY=your-service-role-key
|
|
93
|
+
SUPABASE_DB_HOST=db.your-project.supabase.co
|
|
94
|
+
SUPABASE_DB_PASSWORD=your-database-password
|
|
95
|
+
|
|
96
|
+
# OpenAI Configuration
|
|
97
|
+
OPENAI_API_KEY=sk-your-api-key
|
|
56
98
|
```
|
|
57
99
|
|
|
58
|
-
|
|
100
|
+
#### 3. Setup Database Tables
|
|
59
101
|
|
|
60
|
-
|
|
102
|
+
**Option A: Automated Setup**
|
|
61
103
|
```bash
|
|
62
|
-
#
|
|
63
|
-
|
|
104
|
+
vezlo-setup # Run wizard and choose option 3 to use existing .env
|
|
105
|
+
```
|
|
64
106
|
|
|
65
|
-
|
|
107
|
+
**Option B: Manual SQL**
|
|
108
|
+
```bash
|
|
109
|
+
# Copy schema to Supabase SQL Editor
|
|
66
110
|
cat database-schema.sql
|
|
111
|
+
|
|
112
|
+
# Then execute in Supabase Dashboard → SQL Editor
|
|
67
113
|
```
|
|
68
114
|
|
|
69
|
-
|
|
115
|
+
#### 4. Validate Setup
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Verify database connection and tables
|
|
119
|
+
vezlo-validate
|
|
120
|
+
|
|
121
|
+
# Or with npm
|
|
122
|
+
npm run validate
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### 5. Start Server
|
|
70
126
|
|
|
71
127
|
```bash
|
|
72
128
|
# If installed globally
|
|
73
129
|
vezlo-server
|
|
74
130
|
|
|
75
|
-
# If installed locally
|
|
131
|
+
# If installed locally
|
|
76
132
|
npx vezlo-server
|
|
77
133
|
|
|
78
|
-
# Or
|
|
134
|
+
# Or from source
|
|
79
135
|
npm run build && npm start
|
|
80
136
|
```
|
|
81
137
|
|
|
82
|
-
###
|
|
83
|
-
```bash
|
|
84
|
-
# Health check
|
|
85
|
-
curl http://localhost:3000/health
|
|
86
|
-
|
|
87
|
-
# API documentation
|
|
88
|
-
open http://localhost:3000/docs
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### 5. Docker Deployment (Optional)
|
|
138
|
+
### Docker Deployment
|
|
92
139
|
|
|
93
140
|
```bash
|
|
94
141
|
# Start with Docker Compose
|
|
@@ -98,6 +145,40 @@ docker-compose up -d
|
|
|
98
145
|
docker-compose logs -f vezlo-server
|
|
99
146
|
```
|
|
100
147
|
|
|
148
|
+
## ☁️ Vercel Deployment
|
|
149
|
+
|
|
150
|
+
Deploy to Vercel's serverless platform with one click:
|
|
151
|
+
|
|
152
|
+
### One-Click Deploy
|
|
153
|
+
|
|
154
|
+
[](https://vercel.com/new/clone?repository-url=https://github.com/vezlo/assistant-server&env=SUPABASE_URL,SUPABASE_SERVICE_KEY,SUPABASE_DB_HOST,SUPABASE_DB_PASSWORD,OPENAI_API_KEY&envDescription=Required%20environment%20variables&envLink=https://github.com/vezlo/assistant-server/blob/main/.env.vercel.example)
|
|
155
|
+
|
|
156
|
+
This will:
|
|
157
|
+
- Fork the repository to your GitHub
|
|
158
|
+
- Create a Vercel project
|
|
159
|
+
- Prompt for required environment variables
|
|
160
|
+
- Deploy automatically
|
|
161
|
+
|
|
162
|
+
### Manual Vercel Deploy
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Install Vercel CLI
|
|
166
|
+
npm i -g vercel
|
|
167
|
+
|
|
168
|
+
# Deploy
|
|
169
|
+
vercel
|
|
170
|
+
|
|
171
|
+
# Follow prompts to configure
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Prerequisites for Vercel
|
|
175
|
+
|
|
176
|
+
1. **Setup Database First**: Run `vezlo-setup` locally or execute `database-schema.sql` in Supabase
|
|
177
|
+
2. **Get Credentials**: Collect Supabase and OpenAI credentials
|
|
178
|
+
3. **Configure Environment Variables** in Vercel project settings
|
|
179
|
+
|
|
180
|
+
See [docs/VERCEL_DEPLOYMENT.md](docs/VERCEL_DEPLOYMENT.md) for detailed deployment guide.
|
|
181
|
+
|
|
101
182
|
## 🔧 Environment Configuration
|
|
102
183
|
|
|
103
184
|
Edit `.env` file with your credentials:
|
|
@@ -135,6 +216,28 @@ CHUNK_SIZE=1000
|
|
|
135
216
|
CHUNK_OVERLAP=200
|
|
136
217
|
```
|
|
137
218
|
|
|
219
|
+
## 🔧 CLI Commands
|
|
220
|
+
|
|
221
|
+
The package provides these command-line tools:
|
|
222
|
+
|
|
223
|
+
### vezlo-setup
|
|
224
|
+
Interactive wizard for initial configuration and database setup.
|
|
225
|
+
```bash
|
|
226
|
+
vezlo-setup
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### vezlo-validate
|
|
230
|
+
Validates database connection and verifies all tables exist.
|
|
231
|
+
```bash
|
|
232
|
+
vezlo-validate
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### vezlo-server
|
|
236
|
+
Starts the API server.
|
|
237
|
+
```bash
|
|
238
|
+
vezlo-server
|
|
239
|
+
```
|
|
240
|
+
|
|
138
241
|
## 📚 API Documentation
|
|
139
242
|
|
|
140
243
|
### Base URL
|
package/database-schema.sql
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
-- Vezlo AI Assistant - Modern Database Schema
|
|
2
2
|
-- Finalized schema with conversation-based chat and unified knowledge base
|
|
3
3
|
-- Run this in your Supabase SQL Editor
|
|
4
|
+
-- All tables prefixed with 'vezlo_' to avoid conflicts with existing user tables
|
|
4
5
|
|
|
5
6
|
-- Enable required extensions
|
|
6
7
|
CREATE EXTENSION IF NOT EXISTS vector;
|
|
@@ -10,7 +11,7 @@ CREATE EXTENSION IF NOT EXISTS vector;
|
|
|
10
11
|
-- ============================================================================
|
|
11
12
|
|
|
12
13
|
-- Conversations table (renamed from chat_sessions)
|
|
13
|
-
CREATE TABLE IF NOT EXISTS
|
|
14
|
+
CREATE TABLE IF NOT EXISTS vezlo_conversations (
|
|
14
15
|
id BIGSERIAL PRIMARY KEY,
|
|
15
16
|
uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
|
|
16
17
|
company_id BIGINT, -- Multi-tenancy support
|
|
@@ -23,11 +24,11 @@ CREATE TABLE IF NOT EXISTS conversations (
|
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
-- Messages table (supports parent-child relationships for regeneration)
|
|
26
|
-
CREATE TABLE IF NOT EXISTS
|
|
27
|
+
CREATE TABLE IF NOT EXISTS vezlo_messages (
|
|
27
28
|
id BIGSERIAL PRIMARY KEY,
|
|
28
29
|
uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
|
|
29
|
-
conversation_id BIGINT NOT NULL REFERENCES
|
|
30
|
-
parent_message_id BIGINT REFERENCES
|
|
30
|
+
conversation_id BIGINT NOT NULL REFERENCES vezlo_conversations(id) ON DELETE CASCADE,
|
|
31
|
+
parent_message_id BIGINT REFERENCES vezlo_messages(id), -- For regeneration chains
|
|
31
32
|
type TEXT NOT NULL, -- user, assistant, system
|
|
32
33
|
content TEXT NOT NULL,
|
|
33
34
|
status TEXT DEFAULT 'completed', -- generating, completed, stopped, failed
|
|
@@ -37,10 +38,10 @@ CREATE TABLE IF NOT EXISTS messages (
|
|
|
37
38
|
);
|
|
38
39
|
|
|
39
40
|
-- Message feedback table
|
|
40
|
-
CREATE TABLE IF NOT EXISTS
|
|
41
|
+
CREATE TABLE IF NOT EXISTS vezlo_message_feedback (
|
|
41
42
|
id BIGSERIAL PRIMARY KEY,
|
|
42
43
|
uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
|
|
43
|
-
message_id BIGINT NOT NULL REFERENCES
|
|
44
|
+
message_id BIGINT NOT NULL REFERENCES vezlo_messages(id) ON DELETE CASCADE,
|
|
44
45
|
user_id BIGINT NOT NULL,
|
|
45
46
|
rating TEXT NOT NULL, -- positive, negative
|
|
46
47
|
category TEXT,
|
|
@@ -54,10 +55,10 @@ CREATE TABLE IF NOT EXISTS message_feedback (
|
|
|
54
55
|
-- ============================================================================
|
|
55
56
|
|
|
56
57
|
-- Knowledge items table (folders, documents, files, URLs - everything)
|
|
57
|
-
CREATE TABLE IF NOT EXISTS
|
|
58
|
+
CREATE TABLE IF NOT EXISTS vezlo_knowledge_items (
|
|
58
59
|
id BIGSERIAL PRIMARY KEY,
|
|
59
60
|
uuid UUID DEFAULT gen_random_uuid() UNIQUE NOT NULL,
|
|
60
|
-
parent_id BIGINT REFERENCES
|
|
61
|
+
parent_id BIGINT REFERENCES vezlo_knowledge_items(id), -- Hierarchical structure
|
|
61
62
|
company_id BIGINT, -- Multi-tenancy support
|
|
62
63
|
title TEXT NOT NULL,
|
|
63
64
|
description TEXT,
|
|
@@ -79,76 +80,76 @@ CREATE TABLE IF NOT EXISTS knowledge_items (
|
|
|
79
80
|
-- ============================================================================
|
|
80
81
|
|
|
81
82
|
-- Conversations indexes
|
|
82
|
-
CREATE INDEX IF NOT EXISTS
|
|
83
|
-
CREATE INDEX IF NOT EXISTS
|
|
84
|
-
CREATE INDEX IF NOT EXISTS
|
|
85
|
-
CREATE INDEX IF NOT EXISTS
|
|
86
|
-
CREATE INDEX IF NOT EXISTS
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_uuid ON vezlo_conversations(uuid);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_company_id ON vezlo_conversations(company_id);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_creator_id ON vezlo_conversations(creator_id);
|
|
86
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_deleted ON vezlo_conversations(deleted_at) WHERE deleted_at IS NULL;
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_conversations_updated_at ON vezlo_conversations(updated_at DESC);
|
|
87
88
|
|
|
88
89
|
-- Messages indexes
|
|
89
|
-
CREATE INDEX IF NOT EXISTS
|
|
90
|
-
CREATE INDEX IF NOT EXISTS
|
|
91
|
-
CREATE INDEX IF NOT EXISTS
|
|
92
|
-
CREATE INDEX IF NOT EXISTS
|
|
93
|
-
CREATE INDEX IF NOT EXISTS
|
|
94
|
-
CREATE INDEX IF NOT EXISTS
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_uuid ON vezlo_messages(uuid);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_conversation_id ON vezlo_messages(conversation_id);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_parent_id ON vezlo_messages(parent_message_id);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_type ON vezlo_messages(type);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_status ON vezlo_messages(status);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_messages_created_at ON vezlo_messages(created_at DESC);
|
|
95
96
|
|
|
96
97
|
-- Message feedback indexes
|
|
97
|
-
CREATE INDEX IF NOT EXISTS
|
|
98
|
-
CREATE INDEX IF NOT EXISTS
|
|
99
|
-
CREATE INDEX IF NOT EXISTS
|
|
100
|
-
CREATE INDEX IF NOT EXISTS
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_feedback_uuid ON vezlo_message_feedback(uuid);
|
|
99
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_feedback_message_id ON vezlo_message_feedback(message_id);
|
|
100
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_feedback_user_id ON vezlo_message_feedback(user_id);
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_feedback_rating ON vezlo_message_feedback(rating);
|
|
101
102
|
|
|
102
103
|
-- Knowledge items indexes
|
|
103
|
-
CREATE INDEX IF NOT EXISTS
|
|
104
|
-
CREATE INDEX IF NOT EXISTS
|
|
105
|
-
CREATE INDEX IF NOT EXISTS
|
|
106
|
-
CREATE INDEX IF NOT EXISTS
|
|
107
|
-
CREATE INDEX IF NOT EXISTS
|
|
108
|
-
CREATE INDEX IF NOT EXISTS
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_uuid ON vezlo_knowledge_items(uuid);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_company_id ON vezlo_knowledge_items(company_id);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_parent_id ON vezlo_knowledge_items(parent_id);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_type ON vezlo_knowledge_items(type);
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_created_by ON vezlo_knowledge_items(created_by);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_created_at ON vezlo_knowledge_items(created_at DESC);
|
|
109
110
|
|
|
110
111
|
-- Full-text search index for knowledge items
|
|
111
|
-
CREATE INDEX IF NOT EXISTS
|
|
112
|
-
ON
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_search
|
|
113
|
+
ON vezlo_knowledge_items USING gin(to_tsvector('english', title || ' ' || COALESCE(description, '') || ' ' || COALESCE(content, '')));
|
|
113
114
|
|
|
114
115
|
-- Vector similarity index for semantic search (only for items with content)
|
|
115
|
-
CREATE INDEX IF NOT EXISTS
|
|
116
|
-
ON
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_embedding
|
|
117
|
+
ON vezlo_knowledge_items USING ivfflat (embedding vector_cosine_ops)
|
|
117
118
|
WHERE embedding IS NOT NULL;
|
|
118
119
|
|
|
119
120
|
-- Sparse indexes for better performance
|
|
120
|
-
CREATE INDEX IF NOT EXISTS
|
|
121
|
-
ON
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_content
|
|
122
|
+
ON vezlo_knowledge_items(content) WHERE content IS NOT NULL;
|
|
122
123
|
|
|
123
|
-
CREATE INDEX IF NOT EXISTS
|
|
124
|
-
ON
|
|
124
|
+
CREATE INDEX IF NOT EXISTS idx_vezlo_knowledge_file_url
|
|
125
|
+
ON vezlo_knowledge_items(file_url) WHERE file_url IS NOT NULL;
|
|
125
126
|
|
|
126
127
|
-- ============================================================================
|
|
127
128
|
-- ROW LEVEL SECURITY (Optional but Recommended)
|
|
128
129
|
-- ============================================================================
|
|
129
130
|
|
|
130
131
|
-- Enable RLS on all tables
|
|
131
|
-
ALTER TABLE
|
|
132
|
-
ALTER TABLE
|
|
133
|
-
ALTER TABLE
|
|
134
|
-
ALTER TABLE
|
|
132
|
+
ALTER TABLE vezlo_conversations ENABLE ROW LEVEL SECURITY;
|
|
133
|
+
ALTER TABLE vezlo_messages ENABLE ROW LEVEL SECURITY;
|
|
134
|
+
ALTER TABLE vezlo_message_feedback ENABLE ROW LEVEL SECURITY;
|
|
135
|
+
ALTER TABLE vezlo_knowledge_items ENABLE ROW LEVEL SECURITY;
|
|
135
136
|
|
|
136
137
|
-- Policies for service role access (full access)
|
|
137
|
-
CREATE POLICY "Service role can access all conversations" ON
|
|
138
|
+
CREATE POLICY "Service role can access all conversations" ON vezlo_conversations
|
|
138
139
|
FOR ALL USING (auth.role() = 'service_role');
|
|
139
140
|
|
|
140
|
-
CREATE POLICY "Service role can access all messages" ON
|
|
141
|
+
CREATE POLICY "Service role can access all messages" ON vezlo_messages
|
|
141
142
|
FOR ALL USING (auth.role() = 'service_role');
|
|
142
143
|
|
|
143
|
-
CREATE POLICY "Service role can access all feedback" ON
|
|
144
|
+
CREATE POLICY "Service role can access all feedback" ON vezlo_message_feedback
|
|
144
145
|
FOR ALL USING (auth.role() = 'service_role');
|
|
145
146
|
|
|
146
|
-
CREATE POLICY "Service role can access all knowledge items" ON
|
|
147
|
+
CREATE POLICY "Service role can access all knowledge items" ON vezlo_knowledge_items
|
|
147
148
|
FOR ALL USING (auth.role() = 'service_role');
|
|
148
149
|
|
|
149
150
|
-- Example company-based policies (uncomment and modify as needed)
|
|
150
|
-
-- CREATE POLICY "Users can access their company conversations" ON
|
|
151
|
+
-- CREATE POLICY "Users can access their company conversations" ON vezlo_conversations
|
|
151
152
|
-- FOR ALL USING (company_id = auth.jwt() ->> 'company_id');
|
|
152
153
|
|
|
153
|
-
-- CREATE POLICY "Users can access their company knowledge" ON
|
|
154
|
+
-- CREATE POLICY "Users can access their company knowledge" ON vezlo_knowledge_items
|
|
154
155
|
-- FOR ALL USING (company_id = auth.jwt() ->> 'company_id');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAsC9B,QAAA,MAAM,MAAM,gBASV,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -4,27 +4,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const winston_1 = __importDefault(require("winston"));
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
// Check if we're running on Vercel (read-only filesystem)
|
|
9
|
+
const isVercel = process.env.VERCEL === '1' || process.env.NOW_REGION;
|
|
10
|
+
// Only use file transports if not on Vercel
|
|
11
|
+
const transports = [
|
|
12
|
+
new winston_1.default.transports.Console({
|
|
13
|
+
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple())
|
|
14
|
+
})
|
|
15
|
+
];
|
|
16
|
+
// Add file transports only for local development
|
|
17
|
+
if (!isVercel) {
|
|
18
|
+
// Create logs directory if it doesn't exist
|
|
19
|
+
if (!(0, fs_1.existsSync)('logs')) {
|
|
20
|
+
try {
|
|
21
|
+
(0, fs_1.mkdirSync)('logs');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.warn('Could not create logs directory:', error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
transports.push(new winston_1.default.transports.File({
|
|
28
|
+
filename: 'logs/error.log',
|
|
29
|
+
level: 'error'
|
|
30
|
+
}), new winston_1.default.transports.File({
|
|
31
|
+
filename: 'logs/combined.log'
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
7
34
|
const logger = winston_1.default.createLogger({
|
|
8
35
|
level: process.env.LOG_LEVEL || 'info',
|
|
9
36
|
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()),
|
|
10
37
|
defaultMeta: { service: 'vezlo-server' },
|
|
11
|
-
transports
|
|
12
|
-
new winston_1.default.transports.Console({
|
|
13
|
-
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple())
|
|
14
|
-
}),
|
|
15
|
-
new winston_1.default.transports.File({
|
|
16
|
-
filename: 'logs/error.log',
|
|
17
|
-
level: 'error'
|
|
18
|
-
}),
|
|
19
|
-
new winston_1.default.transports.File({
|
|
20
|
-
filename: 'logs/combined.log'
|
|
21
|
-
})
|
|
22
|
-
]
|
|
38
|
+
transports
|
|
23
39
|
});
|
|
24
|
-
// Create logs directory if it doesn't exist
|
|
25
|
-
const fs_1 = require("fs");
|
|
26
|
-
if (!(0, fs_1.existsSync)('logs')) {
|
|
27
|
-
(0, fs_1.mkdirSync)('logs');
|
|
28
|
-
}
|
|
29
40
|
exports.default = logger;
|
|
30
41
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,2BAA2C;AAE3C,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAEtE,4CAA4C;AAC5C,MAAM,UAAU,GAAwB;IACtC,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,iBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,iBAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CACxB;KACF,CAAC;CACH,CAAC;AAEF,iDAAiD;AACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACd,4CAA4C;IAC5C,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,IAAA,cAAS,EAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAI,CACb,IAAI,iBAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,OAAO;KACf,CAAC,EACF,IAAI,iBAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,mBAAmB;KAC9B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,iBAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;IACxC,UAAU;CACX,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
|
|
@@ -19,8 +19,8 @@ const options = {
|
|
|
19
19
|
},
|
|
20
20
|
servers: [
|
|
21
21
|
{
|
|
22
|
-
url: 'http://localhost:3000',
|
|
23
|
-
description: 'Development server'
|
|
22
|
+
url: process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : 'http://localhost:3000',
|
|
23
|
+
description: process.env.VERCEL_URL ? 'Production server' : 'Development server'
|
|
24
24
|
}
|
|
25
25
|
],
|
|
26
26
|
components: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,4EAA2C;AAiNlC,oBAjNF,4BAAS,CAiNE;AAhNlB,qCAAkC;AAClC,wCAAwC;AAExC,MAAM,OAAO,GAAG;IACd,UAAU,EAAE;QACV,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,eAAM,CAAC,OAAO,CAAC,KAAK;YAC3B,OAAO,EAAE,eAAM,CAAC,OAAO,CAAC,OAAO;YAC/B,WAAW,EAAE,eAAM,CAAC,OAAO,CAAC,WAAW;SACxC;QACD,OAAO,EAAE;YACP;gBACE,GAAG,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../../src/config/swagger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Request, Response } from 'express';
|
|
2
2
|
import { KnowledgeBaseService } from '../services/KnowledgeBaseService';
|
|
3
|
+
import { AIService } from '../services/AIService';
|
|
3
4
|
export declare class KnowledgeController {
|
|
4
5
|
private knowledgeBase;
|
|
5
|
-
|
|
6
|
+
private aiService?;
|
|
7
|
+
constructor(knowledgeBase: KnowledgeBaseService, aiService?: AIService);
|
|
6
8
|
createItem(req: Request, res: Response): Promise<void>;
|
|
7
9
|
getItem(req: Request, res: Response): Promise<void>;
|
|
8
10
|
listItems(req: Request, res: Response): Promise<void>;
|
|
9
11
|
updateItem(req: Request, res: Response): Promise<void>;
|
|
10
12
|
deleteItem(req: Request, res: Response): Promise<void>;
|
|
11
13
|
search(req: Request, res: Response): Promise<void>;
|
|
14
|
+
ragSearch(req: Request, res: Response): Promise<void>;
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=KnowledgeController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnowledgeController.d.ts","sourceRoot":"","sources":["../../../src/controllers/KnowledgeController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"KnowledgeController.d.ts","sourceRoot":"","sources":["../../../src/controllers/KnowledgeController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAY;gBAElB,aAAa,EAAE,oBAAoB,EAAE,SAAS,CAAC,EAAE,SAAS;IAKhE,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEtD,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnD,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDrD,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCtD,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsClD,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAqC5D"}
|
|
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.KnowledgeController = void 0;
|
|
7
7
|
const logger_1 = __importDefault(require("../config/logger"));
|
|
8
8
|
class KnowledgeController {
|
|
9
|
-
constructor(knowledgeBase) {
|
|
9
|
+
constructor(knowledgeBase, aiService) {
|
|
10
10
|
this.knowledgeBase = knowledgeBase;
|
|
11
|
+
this.aiService = aiService;
|
|
11
12
|
}
|
|
12
13
|
async createItem(req, res) {
|
|
13
14
|
try {
|
|
@@ -205,6 +206,38 @@ class KnowledgeController {
|
|
|
205
206
|
});
|
|
206
207
|
}
|
|
207
208
|
}
|
|
209
|
+
async ragSearch(req, res) {
|
|
210
|
+
try {
|
|
211
|
+
const { query, company_uuid } = req.body;
|
|
212
|
+
if (!query) {
|
|
213
|
+
res.status(400).json({ error: 'query is required' });
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (!this.aiService) {
|
|
217
|
+
res.status(500).json({ error: 'AI service not available' });
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Perform knowledge base search
|
|
221
|
+
const searchResults = await this.knowledgeBase.search(query, {
|
|
222
|
+
limit: 3,
|
|
223
|
+
threshold: 0.7,
|
|
224
|
+
type: 'hybrid',
|
|
225
|
+
company_id: company_uuid ? parseInt(company_uuid) : undefined
|
|
226
|
+
});
|
|
227
|
+
// Generate AI response using the search results
|
|
228
|
+
const aiResponse = await this.aiService.generateResponse(query);
|
|
229
|
+
res.json({
|
|
230
|
+
response: aiResponse.content
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger_1.default.error('RAG search error:', error);
|
|
235
|
+
res.status(500).json({
|
|
236
|
+
error: 'Failed to perform RAG search',
|
|
237
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
208
241
|
}
|
|
209
242
|
exports.KnowledgeController = KnowledgeController;
|
|
210
243
|
//# sourceMappingURL=KnowledgeController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnowledgeController.js","sourceRoot":"","sources":["../../../src/controllers/KnowledgeController.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"KnowledgeController.js","sourceRoot":"","sources":["../../../src/controllers/KnowledgeController.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,6 +120,22 @@ export declare const KnowledgeSchemas: {
|
|
|
120
120
|
};
|
|
121
121
|
};
|
|
122
122
|
};
|
|
123
|
+
RAGSearchRequest: {
|
|
124
|
+
type: string;
|
|
125
|
+
required: string[];
|
|
126
|
+
properties: {
|
|
127
|
+
query: {
|
|
128
|
+
type: string;
|
|
129
|
+
description: string;
|
|
130
|
+
example: string;
|
|
131
|
+
};
|
|
132
|
+
company_uuid: {
|
|
133
|
+
type: string;
|
|
134
|
+
description: string;
|
|
135
|
+
example: number;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
};
|
|
123
139
|
KnowledgeItemResponse: {
|
|
124
140
|
type: string;
|
|
125
141
|
properties: {
|
|
@@ -262,5 +278,14 @@ export declare const KnowledgeSchemas: {
|
|
|
262
278
|
};
|
|
263
279
|
};
|
|
264
280
|
};
|
|
281
|
+
RAGSearchResponse: {
|
|
282
|
+
type: string;
|
|
283
|
+
properties: {
|
|
284
|
+
response: {
|
|
285
|
+
type: string;
|
|
286
|
+
description: string;
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
};
|
|
265
290
|
};
|
|
266
291
|
//# sourceMappingURL=KnowledgeSchemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnowledgeSchemas.d.ts","sourceRoot":"","sources":["../../../src/schemas/KnowledgeSchemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"KnowledgeSchemas.d.ts","sourceRoot":"","sources":["../../../src/schemas/KnowledgeSchemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+H5B,CAAC"}
|