@msbayindir/context-rag 1.0.0-beta.1 → 1.0.0-beta.3
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 +15 -0
- package/dist/bin/cli.cjs +77 -46
- package/dist/bin/cli.cjs.map +1 -1
- package/dist/bin/cli.js +77 -46
- package/dist/bin/cli.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,6 +35,21 @@ yarn add context-rag
|
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
|
+
## 🖥️ CLI Commands
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Initialize Context-RAG in your project (adds Prisma models to your schema)
|
|
42
|
+
npx @msbayindir/context-rag init
|
|
43
|
+
|
|
44
|
+
# Force overwrite existing models
|
|
45
|
+
npx @msbayindir/context-rag init --force
|
|
46
|
+
|
|
47
|
+
# Check setup status (Prisma models, pgvector, env variables)
|
|
48
|
+
npx @msbayindir/context-rag status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
38
53
|
## 🛠️ Prerequisites
|
|
39
54
|
|
|
40
55
|
### 1. PostgreSQL with pgvector Extension
|
package/dist/bin/cli.cjs
CHANGED
|
@@ -27,7 +27,7 @@ var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
|
|
|
27
27
|
var path__namespace = /*#__PURE__*/_interopNamespace(path);
|
|
28
28
|
|
|
29
29
|
var program = new commander.Command();
|
|
30
|
-
program.name("context-rag").description("Context-RAG CLI - Setup and management tools").version("0.1
|
|
30
|
+
program.name("context-rag").description("Context-RAG CLI - Setup and management tools").version("1.0.0-beta.1");
|
|
31
31
|
program.command("init").description("Initialize Context-RAG in your project").option("-f, --force", "Overwrite existing files").action(async (options) => {
|
|
32
32
|
console.log("\u{1F680} Initializing Context-RAG...\n");
|
|
33
33
|
try {
|
|
@@ -69,19 +69,20 @@ program.command("init").description("Initialize Context-RAG in your project").op
|
|
|
69
69
|
// Context-RAG Models
|
|
70
70
|
// ============================================
|
|
71
71
|
|
|
72
|
+
/// Stores prompt configurations for different document types
|
|
72
73
|
model ContextRagPromptConfig {
|
|
73
74
|
id String @id @default(uuid())
|
|
74
|
-
documentType String
|
|
75
|
+
documentType String @map("document_type")
|
|
75
76
|
name String
|
|
76
|
-
systemPrompt String @db.Text
|
|
77
|
-
chunkStrategy Json
|
|
77
|
+
systemPrompt String @map("system_prompt") @db.Text
|
|
78
|
+
chunkStrategy Json @map("chunk_strategy")
|
|
78
79
|
version Int @default(1)
|
|
79
|
-
isActive Boolean @default(true)
|
|
80
|
-
isDefault Boolean @default(false)
|
|
81
|
-
createdBy String?
|
|
82
|
-
changeLog String?
|
|
83
|
-
createdAt DateTime @default(now())
|
|
84
|
-
updatedAt DateTime @updatedAt
|
|
80
|
+
isActive Boolean @default(true) @map("is_active")
|
|
81
|
+
isDefault Boolean @default(false) @map("is_default")
|
|
82
|
+
createdBy String? @map("created_by")
|
|
83
|
+
changeLog String? @map("change_log")
|
|
84
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
85
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
85
86
|
|
|
86
87
|
chunks ContextRagChunk[]
|
|
87
88
|
|
|
@@ -90,80 +91,110 @@ model ContextRagPromptConfig {
|
|
|
90
91
|
@@map("context_rag_prompt_configs")
|
|
91
92
|
}
|
|
92
93
|
|
|
94
|
+
/// Stores vector chunks for semantic search
|
|
93
95
|
model ContextRagChunk {
|
|
94
96
|
id String @id @default(uuid())
|
|
95
|
-
promptConfigId String
|
|
97
|
+
promptConfigId String @map("prompt_config_id")
|
|
96
98
|
promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)
|
|
97
|
-
documentId String
|
|
98
|
-
chunkIndex Int
|
|
99
|
-
chunkType String
|
|
99
|
+
documentId String @map("document_id")
|
|
100
|
+
chunkIndex Int @map("chunk_index")
|
|
101
|
+
chunkType String @map("chunk_type")
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
displayContent String @db.Text
|
|
103
|
+
/// Plain text content optimized for vector search
|
|
104
|
+
searchContent String @map("search_content") @db.Text
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
/// Enriched content: context + searchContent (for RAG enhancement)
|
|
107
|
+
enrichedContent String? @map("enriched_content") @db.Text
|
|
108
|
+
|
|
109
|
+
/// AI-generated context text only (for debugging)
|
|
110
|
+
contextText String? @map("context_text") @db.Text
|
|
111
|
+
|
|
112
|
+
/// Vector embedding (768 dimensions for Gemini)
|
|
113
|
+
searchVector Unsupported("vector(768)") @map("search_vector")
|
|
114
|
+
|
|
115
|
+
/// Rich Markdown content for display
|
|
116
|
+
displayContent String @map("display_content") @db.Text
|
|
117
|
+
|
|
118
|
+
sourcePageStart Int @map("source_page_start")
|
|
119
|
+
sourcePageEnd Int @map("source_page_end")
|
|
120
|
+
confidenceScore Float @default(0.5) @map("confidence_score")
|
|
108
121
|
metadata Json
|
|
109
122
|
|
|
110
|
-
createdAt DateTime @default(now())
|
|
123
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
111
124
|
|
|
112
125
|
@@index([promptConfigId])
|
|
113
126
|
@@index([documentId])
|
|
114
127
|
@@index([chunkType])
|
|
128
|
+
@@index([confidenceScore])
|
|
115
129
|
@@map("context_rag_chunks")
|
|
116
130
|
}
|
|
117
131
|
|
|
132
|
+
/// Tracks document processing state
|
|
118
133
|
model ContextRagDocument {
|
|
119
134
|
id String @id @default(uuid())
|
|
120
135
|
filename String
|
|
121
|
-
fileHash String @
|
|
122
|
-
fileSize Int
|
|
123
|
-
pageCount Int
|
|
124
|
-
documentType String?
|
|
136
|
+
fileHash String @map("file_hash")
|
|
137
|
+
fileSize Int @map("file_size")
|
|
138
|
+
pageCount Int @map("page_count")
|
|
139
|
+
documentType String? @map("document_type")
|
|
140
|
+
|
|
141
|
+
/// Experiment identifier for A/B testing models
|
|
142
|
+
experimentId String? @map("experiment_id")
|
|
143
|
+
|
|
144
|
+
/// AI model used for processing
|
|
145
|
+
modelName String? @map("model_name")
|
|
146
|
+
|
|
147
|
+
/// Model configuration as JSON
|
|
148
|
+
modelConfig Json? @map("model_config")
|
|
149
|
+
|
|
125
150
|
status String @default("PENDING")
|
|
126
151
|
|
|
127
|
-
promptConfigId String?
|
|
128
|
-
totalBatches Int
|
|
129
|
-
completedBatches Int
|
|
130
|
-
failedBatches Int
|
|
152
|
+
promptConfigId String? @map("prompt_config_id")
|
|
153
|
+
totalBatches Int @default(0) @map("total_batches")
|
|
154
|
+
completedBatches Int @default(0) @map("completed_batches")
|
|
155
|
+
failedBatches Int @default(0) @map("failed_batches")
|
|
131
156
|
|
|
132
|
-
tokenUsage Json?
|
|
133
|
-
processingMs Int?
|
|
134
|
-
errorMessage String?
|
|
157
|
+
tokenUsage Json? @map("token_usage")
|
|
158
|
+
processingMs Int? @map("processing_ms")
|
|
159
|
+
errorMessage String? @map("error_message")
|
|
135
160
|
|
|
136
|
-
createdAt DateTime @default(now())
|
|
137
|
-
completedAt DateTime?
|
|
161
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
162
|
+
completedAt DateTime? @map("completed_at")
|
|
138
163
|
|
|
139
164
|
batches ContextRagBatch[]
|
|
140
165
|
|
|
166
|
+
@@unique([fileHash, experimentId])
|
|
141
167
|
@@index([status])
|
|
142
168
|
@@index([fileHash])
|
|
169
|
+
@@index([documentType])
|
|
170
|
+
@@index([experimentId])
|
|
143
171
|
@@map("context_rag_documents")
|
|
144
172
|
}
|
|
145
173
|
|
|
174
|
+
/// Tracks individual batch processing jobs
|
|
146
175
|
model ContextRagBatch {
|
|
147
176
|
id String @id @default(uuid())
|
|
148
|
-
documentId String
|
|
177
|
+
documentId String @map("document_id")
|
|
149
178
|
document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
150
179
|
|
|
151
|
-
batchIndex Int
|
|
152
|
-
pageStart Int
|
|
153
|
-
pageEnd Int
|
|
180
|
+
batchIndex Int @map("batch_index")
|
|
181
|
+
pageStart Int @map("page_start")
|
|
182
|
+
pageEnd Int @map("page_end")
|
|
154
183
|
status String @default("PENDING")
|
|
155
|
-
retryCount Int @default(0)
|
|
156
|
-
lastError String?
|
|
184
|
+
retryCount Int @default(0) @map("retry_count")
|
|
185
|
+
lastError String? @map("last_error")
|
|
157
186
|
|
|
158
|
-
tokenUsage Json?
|
|
159
|
-
processingMs Int?
|
|
187
|
+
tokenUsage Json? @map("token_usage")
|
|
188
|
+
processingMs Int? @map("processing_ms")
|
|
160
189
|
|
|
161
|
-
startedAt DateTime?
|
|
162
|
-
completedAt DateTime?
|
|
163
|
-
createdAt DateTime @default(now())
|
|
164
|
-
updatedAt DateTime @updatedAt
|
|
190
|
+
startedAt DateTime? @map("started_at")
|
|
191
|
+
completedAt DateTime? @map("completed_at")
|
|
192
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
193
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
165
194
|
|
|
195
|
+
@@unique([documentId, batchIndex])
|
|
166
196
|
@@index([documentId, status])
|
|
197
|
+
@@index([status])
|
|
167
198
|
@@map("context_rag_batches")
|
|
168
199
|
}
|
|
169
200
|
`;
|
package/dist/bin/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/cli.ts"],"names":["Command","path","fs"],"mappings":"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","file":"cli.cjs","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('0.1.0');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String\r\n name String\r\n systemPrompt String @db.Text\r\n chunkStrategy Json\r\n version Int @default(1)\r\n isActive Boolean @default(true)\r\n isDefault Boolean @default(false)\r\n createdBy String?\r\n changeLog String?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String\r\n chunkIndex Int\r\n chunkType String\r\n\r\n searchContent String @db.Text\r\n searchVector Unsupported(\"vector(768)\")\r\n displayContent String @db.Text\r\n\r\n sourcePageStart Int\r\n sourcePageEnd Int\r\n confidenceScore Float @default(0.5)\r\n metadata Json\r\n\r\n createdAt DateTime @default(now())\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @unique\r\n fileSize Int\r\n pageCount Int\r\n documentType String?\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String?\r\n totalBatches Int @default(0)\r\n completedBatches Int @default(0)\r\n failedBatches Int @default(0)\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n errorMessage String?\r\n\r\n createdAt DateTime @default(now())\r\n completedAt DateTime?\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@index([status])\r\n @@index([fileHash])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int\r\n pageStart Int\r\n pageEnd Int\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0)\r\n lastError String?\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n\r\n startedAt DateTime?\r\n completedAt DateTime?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n @@index([documentId, status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/cli.ts"],"names":["Command","path","fs"],"mappings":"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","file":"cli.cjs","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('1.0.0-beta.1');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\n/// Stores prompt configurations for different document types\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String @map(\"document_type\")\r\n name String\r\n systemPrompt String @map(\"system_prompt\") @db.Text\r\n chunkStrategy Json @map(\"chunk_strategy\")\r\n version Int @default(1)\r\n isActive Boolean @default(true) @map(\"is_active\")\r\n isDefault Boolean @default(false) @map(\"is_default\")\r\n createdBy String? @map(\"created_by\")\r\n changeLog String? @map(\"change_log\")\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n updatedAt DateTime @updatedAt @map(\"updated_at\")\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\n/// Stores vector chunks for semantic search\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String @map(\"prompt_config_id\")\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String @map(\"document_id\")\r\n chunkIndex Int @map(\"chunk_index\")\r\n chunkType String @map(\"chunk_type\")\r\n\r\n /// Plain text content optimized for vector search\r\n searchContent String @map(\"search_content\") @db.Text\r\n\r\n /// Enriched content: context + searchContent (for RAG enhancement)\r\n enrichedContent String? @map(\"enriched_content\") @db.Text\r\n\r\n /// AI-generated context text only (for debugging)\r\n contextText String? @map(\"context_text\") @db.Text\r\n\r\n /// Vector embedding (768 dimensions for Gemini)\r\n searchVector Unsupported(\"vector(768)\") @map(\"search_vector\")\r\n\r\n /// Rich Markdown content for display\r\n displayContent String @map(\"display_content\") @db.Text\r\n\r\n sourcePageStart Int @map(\"source_page_start\")\r\n sourcePageEnd Int @map(\"source_page_end\")\r\n confidenceScore Float @default(0.5) @map(\"confidence_score\")\r\n metadata Json\r\n\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@index([confidenceScore])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\n/// Tracks document processing state\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @map(\"file_hash\")\r\n fileSize Int @map(\"file_size\")\r\n pageCount Int @map(\"page_count\")\r\n documentType String? @map(\"document_type\")\r\n\r\n /// Experiment identifier for A/B testing models\r\n experimentId String? @map(\"experiment_id\")\r\n\r\n /// AI model used for processing\r\n modelName String? @map(\"model_name\")\r\n\r\n /// Model configuration as JSON\r\n modelConfig Json? @map(\"model_config\")\r\n\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String? @map(\"prompt_config_id\")\r\n totalBatches Int @default(0) @map(\"total_batches\")\r\n completedBatches Int @default(0) @map(\"completed_batches\")\r\n failedBatches Int @default(0) @map(\"failed_batches\")\r\n\r\n tokenUsage Json? @map(\"token_usage\")\r\n processingMs Int? @map(\"processing_ms\")\r\n errorMessage String? @map(\"error_message\")\r\n\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n completedAt DateTime? @map(\"completed_at\")\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@unique([fileHash, experimentId])\r\n @@index([status])\r\n @@index([fileHash])\r\n @@index([documentType])\r\n @@index([experimentId])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\n/// Tracks individual batch processing jobs\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String @map(\"document_id\")\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int @map(\"batch_index\")\r\n pageStart Int @map(\"page_start\")\r\n pageEnd Int @map(\"page_end\")\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0) @map(\"retry_count\")\r\n lastError String? @map(\"last_error\")\r\n\r\n tokenUsage Json? @map(\"token_usage\")\r\n processingMs Int? @map(\"processing_ms\")\r\n\r\n startedAt DateTime? @map(\"started_at\")\r\n completedAt DateTime? @map(\"completed_at\")\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n updatedAt DateTime @updatedAt @map(\"updated_at\")\r\n\r\n @@unique([documentId, batchIndex])\r\n @@index([documentId, status])\r\n @@index([status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|
package/dist/bin/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import * as fs from 'fs/promises';
|
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
|
|
6
6
|
var program = new Command();
|
|
7
|
-
program.name("context-rag").description("Context-RAG CLI - Setup and management tools").version("0.1
|
|
7
|
+
program.name("context-rag").description("Context-RAG CLI - Setup and management tools").version("1.0.0-beta.1");
|
|
8
8
|
program.command("init").description("Initialize Context-RAG in your project").option("-f, --force", "Overwrite existing files").action(async (options) => {
|
|
9
9
|
console.log("\u{1F680} Initializing Context-RAG...\n");
|
|
10
10
|
try {
|
|
@@ -46,19 +46,20 @@ program.command("init").description("Initialize Context-RAG in your project").op
|
|
|
46
46
|
// Context-RAG Models
|
|
47
47
|
// ============================================
|
|
48
48
|
|
|
49
|
+
/// Stores prompt configurations for different document types
|
|
49
50
|
model ContextRagPromptConfig {
|
|
50
51
|
id String @id @default(uuid())
|
|
51
|
-
documentType String
|
|
52
|
+
documentType String @map("document_type")
|
|
52
53
|
name String
|
|
53
|
-
systemPrompt String @db.Text
|
|
54
|
-
chunkStrategy Json
|
|
54
|
+
systemPrompt String @map("system_prompt") @db.Text
|
|
55
|
+
chunkStrategy Json @map("chunk_strategy")
|
|
55
56
|
version Int @default(1)
|
|
56
|
-
isActive Boolean @default(true)
|
|
57
|
-
isDefault Boolean @default(false)
|
|
58
|
-
createdBy String?
|
|
59
|
-
changeLog String?
|
|
60
|
-
createdAt DateTime @default(now())
|
|
61
|
-
updatedAt DateTime @updatedAt
|
|
57
|
+
isActive Boolean @default(true) @map("is_active")
|
|
58
|
+
isDefault Boolean @default(false) @map("is_default")
|
|
59
|
+
createdBy String? @map("created_by")
|
|
60
|
+
changeLog String? @map("change_log")
|
|
61
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
62
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
62
63
|
|
|
63
64
|
chunks ContextRagChunk[]
|
|
64
65
|
|
|
@@ -67,80 +68,110 @@ model ContextRagPromptConfig {
|
|
|
67
68
|
@@map("context_rag_prompt_configs")
|
|
68
69
|
}
|
|
69
70
|
|
|
71
|
+
/// Stores vector chunks for semantic search
|
|
70
72
|
model ContextRagChunk {
|
|
71
73
|
id String @id @default(uuid())
|
|
72
|
-
promptConfigId String
|
|
74
|
+
promptConfigId String @map("prompt_config_id")
|
|
73
75
|
promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)
|
|
74
|
-
documentId String
|
|
75
|
-
chunkIndex Int
|
|
76
|
-
chunkType String
|
|
76
|
+
documentId String @map("document_id")
|
|
77
|
+
chunkIndex Int @map("chunk_index")
|
|
78
|
+
chunkType String @map("chunk_type")
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
displayContent String @db.Text
|
|
80
|
+
/// Plain text content optimized for vector search
|
|
81
|
+
searchContent String @map("search_content") @db.Text
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
/// Enriched content: context + searchContent (for RAG enhancement)
|
|
84
|
+
enrichedContent String? @map("enriched_content") @db.Text
|
|
85
|
+
|
|
86
|
+
/// AI-generated context text only (for debugging)
|
|
87
|
+
contextText String? @map("context_text") @db.Text
|
|
88
|
+
|
|
89
|
+
/// Vector embedding (768 dimensions for Gemini)
|
|
90
|
+
searchVector Unsupported("vector(768)") @map("search_vector")
|
|
91
|
+
|
|
92
|
+
/// Rich Markdown content for display
|
|
93
|
+
displayContent String @map("display_content") @db.Text
|
|
94
|
+
|
|
95
|
+
sourcePageStart Int @map("source_page_start")
|
|
96
|
+
sourcePageEnd Int @map("source_page_end")
|
|
97
|
+
confidenceScore Float @default(0.5) @map("confidence_score")
|
|
85
98
|
metadata Json
|
|
86
99
|
|
|
87
|
-
createdAt DateTime @default(now())
|
|
100
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
88
101
|
|
|
89
102
|
@@index([promptConfigId])
|
|
90
103
|
@@index([documentId])
|
|
91
104
|
@@index([chunkType])
|
|
105
|
+
@@index([confidenceScore])
|
|
92
106
|
@@map("context_rag_chunks")
|
|
93
107
|
}
|
|
94
108
|
|
|
109
|
+
/// Tracks document processing state
|
|
95
110
|
model ContextRagDocument {
|
|
96
111
|
id String @id @default(uuid())
|
|
97
112
|
filename String
|
|
98
|
-
fileHash String @
|
|
99
|
-
fileSize Int
|
|
100
|
-
pageCount Int
|
|
101
|
-
documentType String?
|
|
113
|
+
fileHash String @map("file_hash")
|
|
114
|
+
fileSize Int @map("file_size")
|
|
115
|
+
pageCount Int @map("page_count")
|
|
116
|
+
documentType String? @map("document_type")
|
|
117
|
+
|
|
118
|
+
/// Experiment identifier for A/B testing models
|
|
119
|
+
experimentId String? @map("experiment_id")
|
|
120
|
+
|
|
121
|
+
/// AI model used for processing
|
|
122
|
+
modelName String? @map("model_name")
|
|
123
|
+
|
|
124
|
+
/// Model configuration as JSON
|
|
125
|
+
modelConfig Json? @map("model_config")
|
|
126
|
+
|
|
102
127
|
status String @default("PENDING")
|
|
103
128
|
|
|
104
|
-
promptConfigId String?
|
|
105
|
-
totalBatches Int
|
|
106
|
-
completedBatches Int
|
|
107
|
-
failedBatches Int
|
|
129
|
+
promptConfigId String? @map("prompt_config_id")
|
|
130
|
+
totalBatches Int @default(0) @map("total_batches")
|
|
131
|
+
completedBatches Int @default(0) @map("completed_batches")
|
|
132
|
+
failedBatches Int @default(0) @map("failed_batches")
|
|
108
133
|
|
|
109
|
-
tokenUsage Json?
|
|
110
|
-
processingMs Int?
|
|
111
|
-
errorMessage String?
|
|
134
|
+
tokenUsage Json? @map("token_usage")
|
|
135
|
+
processingMs Int? @map("processing_ms")
|
|
136
|
+
errorMessage String? @map("error_message")
|
|
112
137
|
|
|
113
|
-
createdAt DateTime @default(now())
|
|
114
|
-
completedAt DateTime?
|
|
138
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
139
|
+
completedAt DateTime? @map("completed_at")
|
|
115
140
|
|
|
116
141
|
batches ContextRagBatch[]
|
|
117
142
|
|
|
143
|
+
@@unique([fileHash, experimentId])
|
|
118
144
|
@@index([status])
|
|
119
145
|
@@index([fileHash])
|
|
146
|
+
@@index([documentType])
|
|
147
|
+
@@index([experimentId])
|
|
120
148
|
@@map("context_rag_documents")
|
|
121
149
|
}
|
|
122
150
|
|
|
151
|
+
/// Tracks individual batch processing jobs
|
|
123
152
|
model ContextRagBatch {
|
|
124
153
|
id String @id @default(uuid())
|
|
125
|
-
documentId String
|
|
154
|
+
documentId String @map("document_id")
|
|
126
155
|
document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
127
156
|
|
|
128
|
-
batchIndex Int
|
|
129
|
-
pageStart Int
|
|
130
|
-
pageEnd Int
|
|
157
|
+
batchIndex Int @map("batch_index")
|
|
158
|
+
pageStart Int @map("page_start")
|
|
159
|
+
pageEnd Int @map("page_end")
|
|
131
160
|
status String @default("PENDING")
|
|
132
|
-
retryCount Int @default(0)
|
|
133
|
-
lastError String?
|
|
161
|
+
retryCount Int @default(0) @map("retry_count")
|
|
162
|
+
lastError String? @map("last_error")
|
|
134
163
|
|
|
135
|
-
tokenUsage Json?
|
|
136
|
-
processingMs Int?
|
|
164
|
+
tokenUsage Json? @map("token_usage")
|
|
165
|
+
processingMs Int? @map("processing_ms")
|
|
137
166
|
|
|
138
|
-
startedAt DateTime?
|
|
139
|
-
completedAt DateTime?
|
|
140
|
-
createdAt DateTime @default(now())
|
|
141
|
-
updatedAt DateTime @updatedAt
|
|
167
|
+
startedAt DateTime? @map("started_at")
|
|
168
|
+
completedAt DateTime? @map("completed_at")
|
|
169
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
170
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
142
171
|
|
|
172
|
+
@@unique([documentId, batchIndex])
|
|
143
173
|
@@index([documentId, status])
|
|
174
|
+
@@index([status])
|
|
144
175
|
@@map("context_rag_batches")
|
|
145
176
|
}
|
|
146
177
|
`;
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/cli.ts"],"names":[],"mappings":";;;;;AAMA,IAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAE5B,OAAA,CACK,KAAK,aAAa,CAAA,CAClB,YAAY,8CAA8C,CAAA,CAC1D,QAAQ,OAAO,CAAA;AAEpB,OAAA,CACK,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,aAAA,EAAe,0BAA0B,CAAA,CAChD,MAAA,CAAO,OAAO,OAAA,KAAY;AACvB,EAAA,OAAA,CAAQ,IAAI,yCAAkC,CAAA;AAE9C,EAAA,IAAI;AAEA,IAAA,MAAM,SAAA,GAAiB,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,QAAQ,CAAA;AACnD,IAAA,MAAM,UAAA,GAAkB,IAAA,CAAA,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA;AAEvD,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,IAAI;AACA,MAAA,MAAS,UAAO,UAAU,CAAA;AAC1B,MAAA,YAAA,GAAe,IAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AACJ,MAAA,YAAA,GAAe,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,CAAC,YAAA,EAAc;AACf,MAAA,OAAA,CAAQ,IAAI,wDAAmD,CAAA;AAC/D,MAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAClB;AAGA,IAAA,MAAM,cAAA,GAAiB,MAAS,EAAA,CAAA,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AAG5D,IAAA,IAAI,eAAe,QAAA,CAAS,iBAAiB,CAAA,IAAK,CAAC,QAAQ,KAAA,EAAO;AAC9D,MAAA,OAAA,CAAQ,IAAI,2DAAiD,CAAA;AAC7D,MAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAC5C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAClB;AAGA,IAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,sBAAsB,CAAA,EAAG;AAClD,MAAA,OAAA,CAAQ,IAAI,wDAA8C,CAAA;AAC1D,MAAA,OAAA,CAAQ,IAAI,+CAA+C,CAAA;AAC3D,MAAA,OAAA,CAAQ,IAAI,uBAAuB,CAAA;AACnC,MAAA,OAAA,CAAQ,IAAI,oCAAoC,CAAA;AAChD,MAAA,OAAA,CAAQ,IAAI,iDAAiD,CAAA;AAC7D,MAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACpB,MAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAC5C,MAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AACxC,MAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,IACxB;AAGA,IAAA,MAAM,gBAAA,GAAmB;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAyGzB,IAAA,IAAI,SAAA,GAAY,cAAA;AAChB,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,cAAA,CAAe,QAAA,CAAS,uBAAuB,CAAA,EAAG;AACnE,MAAA,MAAM,WAAA,GAAc,wEAAA;AACpB,MAAA,MAAM,UAAA,GAAa,SAAA,CAAU,OAAA,CAAQ,WAAW,CAAA;AAChD,MAAA,IAAI,eAAe,CAAA,CAAA,EAAI;AACnB,QAAA,SAAA,GAAY,SAAA,CAAU,SAAA,CAAU,CAAA,EAAG,UAAU,EAAE,IAAA,EAAK;AAAA,MACxD;AAAA,IACJ;AAGA,IAAA,SAAA,GAAY,SAAA,CAAU,IAAA,EAAK,GAAI,IAAA,GAAO,gBAAA;AAGtC,IAAA,MAAS,EAAA,CAAA,SAAA,CAAU,YAAY,SAAS,CAAA;AAExC,IAAA,OAAA,CAAQ,IAAI,2DAAsD,CAAA;AAClE,IAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,IAAA,OAAA,CAAQ,IAAI,yDAAyD,CAAA;AACrE,IAAA,OAAA,CAAQ,IAAI,4EAA4E,CAAA;AACxF,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAAA,EAEjD,SAAS,KAAA,EAAO;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,EAAa,KAAA,CAAgB,OAAO,CAAA;AAClD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAClB;AACJ,CAAC,CAAA;AAEL,OAAA,CACK,QAAQ,QAAQ,CAAA,CAChB,YAAY,gCAAgC,CAAA,CAC5C,OAAO,YAAY;AAChB,EAAA,OAAA,CAAQ,IAAI,4CAAqC,CAAA;AAGjD,EAAA,MAAM,aAAkB,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,UAAU,eAAe,CAAA;AACrE,EAAA,IAAI;AACA,IAAA,MAAM,MAAA,GAAS,MAAS,EAAA,CAAA,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AAEpD,IAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA,4BAAA,CAAyB,CAAA;AACrC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,QAAA,CAAS,iBAAiB,CAAA,GAAI,QAAA,GAAM,QAAG,CAAA,mBAAA,CAAqB,CAAA;AACpF,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAA,CAAO,QAAA,CAAS,sBAAsB,CAAA,GAAI,QAAA,GAAM,QAAG,CAAA,mBAAA,CAAqB,CAAA;AACzF,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EAChB,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAA,CAAQ,IAAI,yCAAoC,CAAA;AAAA,EACpD;AAGA,EAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAC1B,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,GAAI,QAAA,GAAM,QAAG,CAAA,aAAA,CAAe,CAAA;AACvE,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA,GAAI,QAAA,GAAM,QAAG,CAAA,eAAA,CAAiB,CAAA;AAC3E,EAAA,OAAA,CAAQ,GAAA,EAAI;AAChB,CAAC,CAAA;AAEL,OAAA,CAAQ,KAAA,EAAM","file":"cli.js","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('0.1.0');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String\r\n name String\r\n systemPrompt String @db.Text\r\n chunkStrategy Json\r\n version Int @default(1)\r\n isActive Boolean @default(true)\r\n isDefault Boolean @default(false)\r\n createdBy String?\r\n changeLog String?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String\r\n chunkIndex Int\r\n chunkType String\r\n\r\n searchContent String @db.Text\r\n searchVector Unsupported(\"vector(768)\")\r\n displayContent String @db.Text\r\n\r\n sourcePageStart Int\r\n sourcePageEnd Int\r\n confidenceScore Float @default(0.5)\r\n metadata Json\r\n\r\n createdAt DateTime @default(now())\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @unique\r\n fileSize Int\r\n pageCount Int\r\n documentType String?\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String?\r\n totalBatches Int @default(0)\r\n completedBatches Int @default(0)\r\n failedBatches Int @default(0)\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n errorMessage String?\r\n\r\n createdAt DateTime @default(now())\r\n completedAt DateTime?\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@index([status])\r\n @@index([fileHash])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int\r\n pageStart Int\r\n pageEnd Int\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0)\r\n lastError String?\r\n\r\n tokenUsage Json?\r\n processingMs Int?\r\n\r\n startedAt DateTime?\r\n completedAt DateTime?\r\n createdAt DateTime @default(now())\r\n updatedAt DateTime @updatedAt\r\n\r\n @@index([documentId, status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { Command } from 'commander';\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('context-rag')\r\n .description('Context-RAG CLI - Setup and management tools')\r\n .version('1.0.0-beta.1');\r\n\r\nprogram\r\n .command('init')\r\n .description('Initialize Context-RAG in your project')\r\n .option('-f, --force', 'Overwrite existing files')\r\n .action(async (options) => {\r\n console.log('🚀 Initializing Context-RAG...\\n');\r\n\r\n try {\r\n // Check if prisma directory exists\r\n const prismaDir = path.join(process.cwd(), 'prisma');\r\n const schemaPath = path.join(prismaDir, 'schema.prisma');\r\n\r\n let schemaExists = false;\r\n try {\r\n await fs.access(schemaPath);\r\n schemaExists = true;\r\n } catch {\r\n schemaExists = false;\r\n }\r\n\r\n if (!schemaExists) {\r\n console.log('❌ Prisma schema not found at prisma/schema.prisma');\r\n console.log(' Please run `npx prisma init` first.\\n');\r\n process.exit(1);\r\n }\r\n\r\n // Read existing schema\r\n const existingSchema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n // Check if Context-RAG models already exist\r\n if (existingSchema.includes('ContextRagChunk') && !options.force) {\r\n console.log('⚠️ Context-RAG models already exist in schema.');\r\n console.log(' Use --force to overwrite.\\n');\r\n process.exit(0);\r\n }\r\n\r\n // Check for pgvector extension\r\n if (!existingSchema.includes('postgresqlExtensions')) {\r\n console.log('⚠️ Warning: pgvector extension not enabled.');\r\n console.log(' Add the following to your schema.prisma:\\n');\r\n console.log(' generator client {');\r\n console.log(' provider = \"prisma-client-js\"');\r\n console.log(' previewFeatures = [\"postgresqlExtensions\"]');\r\n console.log(' }\\n');\r\n console.log(' datasource db {');\r\n console.log(' provider = \"postgresql\"');\r\n console.log(' url = env(\"DATABASE_URL\")');\r\n console.log(' extensions = [vector]');\r\n console.log(' }\\n');\r\n }\r\n\r\n // Context-RAG models to append\r\n const contextRagModels = `\r\n// ============================================\r\n// Context-RAG Models\r\n// ============================================\r\n\r\n/// Stores prompt configurations for different document types\r\nmodel ContextRagPromptConfig {\r\n id String @id @default(uuid())\r\n documentType String @map(\"document_type\")\r\n name String\r\n systemPrompt String @map(\"system_prompt\") @db.Text\r\n chunkStrategy Json @map(\"chunk_strategy\")\r\n version Int @default(1)\r\n isActive Boolean @default(true) @map(\"is_active\")\r\n isDefault Boolean @default(false) @map(\"is_default\")\r\n createdBy String? @map(\"created_by\")\r\n changeLog String? @map(\"change_log\")\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n updatedAt DateTime @updatedAt @map(\"updated_at\")\r\n\r\n chunks ContextRagChunk[]\r\n\r\n @@unique([documentType, version])\r\n @@index([documentType, isActive])\r\n @@map(\"context_rag_prompt_configs\")\r\n}\r\n\r\n/// Stores vector chunks for semantic search\r\nmodel ContextRagChunk {\r\n id String @id @default(uuid())\r\n promptConfigId String @map(\"prompt_config_id\")\r\n promptConfig ContextRagPromptConfig @relation(fields: [promptConfigId], references: [id], onDelete: Cascade)\r\n documentId String @map(\"document_id\")\r\n chunkIndex Int @map(\"chunk_index\")\r\n chunkType String @map(\"chunk_type\")\r\n\r\n /// Plain text content optimized for vector search\r\n searchContent String @map(\"search_content\") @db.Text\r\n\r\n /// Enriched content: context + searchContent (for RAG enhancement)\r\n enrichedContent String? @map(\"enriched_content\") @db.Text\r\n\r\n /// AI-generated context text only (for debugging)\r\n contextText String? @map(\"context_text\") @db.Text\r\n\r\n /// Vector embedding (768 dimensions for Gemini)\r\n searchVector Unsupported(\"vector(768)\") @map(\"search_vector\")\r\n\r\n /// Rich Markdown content for display\r\n displayContent String @map(\"display_content\") @db.Text\r\n\r\n sourcePageStart Int @map(\"source_page_start\")\r\n sourcePageEnd Int @map(\"source_page_end\")\r\n confidenceScore Float @default(0.5) @map(\"confidence_score\")\r\n metadata Json\r\n\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n\r\n @@index([promptConfigId])\r\n @@index([documentId])\r\n @@index([chunkType])\r\n @@index([confidenceScore])\r\n @@map(\"context_rag_chunks\")\r\n}\r\n\r\n/// Tracks document processing state\r\nmodel ContextRagDocument {\r\n id String @id @default(uuid())\r\n filename String\r\n fileHash String @map(\"file_hash\")\r\n fileSize Int @map(\"file_size\")\r\n pageCount Int @map(\"page_count\")\r\n documentType String? @map(\"document_type\")\r\n\r\n /// Experiment identifier for A/B testing models\r\n experimentId String? @map(\"experiment_id\")\r\n\r\n /// AI model used for processing\r\n modelName String? @map(\"model_name\")\r\n\r\n /// Model configuration as JSON\r\n modelConfig Json? @map(\"model_config\")\r\n\r\n status String @default(\"PENDING\")\r\n\r\n promptConfigId String? @map(\"prompt_config_id\")\r\n totalBatches Int @default(0) @map(\"total_batches\")\r\n completedBatches Int @default(0) @map(\"completed_batches\")\r\n failedBatches Int @default(0) @map(\"failed_batches\")\r\n\r\n tokenUsage Json? @map(\"token_usage\")\r\n processingMs Int? @map(\"processing_ms\")\r\n errorMessage String? @map(\"error_message\")\r\n\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n completedAt DateTime? @map(\"completed_at\")\r\n\r\n batches ContextRagBatch[]\r\n\r\n @@unique([fileHash, experimentId])\r\n @@index([status])\r\n @@index([fileHash])\r\n @@index([documentType])\r\n @@index([experimentId])\r\n @@map(\"context_rag_documents\")\r\n}\r\n\r\n/// Tracks individual batch processing jobs\r\nmodel ContextRagBatch {\r\n id String @id @default(uuid())\r\n documentId String @map(\"document_id\")\r\n document ContextRagDocument @relation(fields: [documentId], references: [id], onDelete: Cascade)\r\n\r\n batchIndex Int @map(\"batch_index\")\r\n pageStart Int @map(\"page_start\")\r\n pageEnd Int @map(\"page_end\")\r\n status String @default(\"PENDING\")\r\n retryCount Int @default(0) @map(\"retry_count\")\r\n lastError String? @map(\"last_error\")\r\n\r\n tokenUsage Json? @map(\"token_usage\")\r\n processingMs Int? @map(\"processing_ms\")\r\n\r\n startedAt DateTime? @map(\"started_at\")\r\n completedAt DateTime? @map(\"completed_at\")\r\n createdAt DateTime @default(now()) @map(\"created_at\")\r\n updatedAt DateTime @updatedAt @map(\"updated_at\")\r\n\r\n @@unique([documentId, batchIndex])\r\n @@index([documentId, status])\r\n @@index([status])\r\n @@map(\"context_rag_batches\")\r\n}\r\n`;\r\n\r\n // Remove existing Context-RAG models if force\r\n let newSchema = existingSchema;\r\n if (options.force && existingSchema.includes('// Context-RAG Models')) {\r\n const startMarker = '// ============================================\\n// Context-RAG Models';\r\n const startIndex = newSchema.indexOf(startMarker);\r\n if (startIndex !== -1) {\r\n newSchema = newSchema.substring(0, startIndex).trim();\r\n }\r\n }\r\n\r\n // Append new models\r\n newSchema = newSchema.trim() + '\\n' + contextRagModels;\r\n\r\n // Write updated schema\r\n await fs.writeFile(schemaPath, newSchema);\r\n\r\n console.log('✅ Context-RAG models added to prisma/schema.prisma\\n');\r\n console.log('Next steps:');\r\n console.log(' 1. Run: npx prisma migrate dev --name add_context_rag');\r\n console.log(' 2. Enable pgvector in PostgreSQL: CREATE EXTENSION IF NOT EXISTS vector;');\r\n console.log(' 3. Start using Context-RAG!\\n');\r\n\r\n } catch (error) {\r\n console.error('❌ Error:', (error as Error).message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram\r\n .command('status')\r\n .description('Check Context-RAG setup status')\r\n .action(async () => {\r\n console.log('🔍 Checking Context-RAG status...\\n');\r\n\r\n // Check schema\r\n const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');\r\n try {\r\n const schema = await fs.readFile(schemaPath, 'utf-8');\r\n\r\n console.log('Prisma Schema:');\r\n console.log(` ✅ schema.prisma found`);\r\n console.log(` ${schema.includes('ContextRagChunk') ? '✅' : '❌'} Context-RAG models`);\r\n console.log(` ${schema.includes('postgresqlExtensions') ? '✅' : '❌'} pgvector extension`);\r\n console.log();\r\n } catch {\r\n console.log('❌ prisma/schema.prisma not found\\n');\r\n }\r\n\r\n // Check env\r\n console.log('Environment:');\r\n console.log(` ${process.env['DATABASE_URL'] ? '✅' : '❌'} DATABASE_URL`);\r\n console.log(` ${process.env['GEMINI_API_KEY'] ? '✅' : '❌'} GEMINI_API_KEY`);\r\n console.log();\r\n });\r\n\r\nprogram.parse();\r\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1937,7 +1937,7 @@ ${chunk.content}
|
|
|
1937
1937
|
};
|
|
1938
1938
|
|
|
1939
1939
|
// src/enhancements/enhancement-registry.ts
|
|
1940
|
-
function createEnhancementHandler(config,
|
|
1940
|
+
function createEnhancementHandler(config, _resolvedConfig, gemini) {
|
|
1941
1941
|
if (!config || config.approach === "none") {
|
|
1942
1942
|
return new NoOpHandler();
|
|
1943
1943
|
}
|