@memberjunction/query-gen 0.0.1 → 2.126.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +34 -0
- package/COORDINATOR.md +768 -0
- package/IMPLEMENTATION_PLAN.md +1753 -0
- package/LLM_ENTITY_GROUPING_PLAN.md +977 -0
- package/README.md +675 -29
- package/dist/cli/commands/export.d.ts +15 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +178 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +19 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +282 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +17 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +193 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config.d.ts +51 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +142 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +57 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/EntityGrouper.d.ts +74 -0
- package/dist/core/EntityGrouper.d.ts.map +1 -0
- package/dist/core/EntityGrouper.js +246 -0
- package/dist/core/EntityGrouper.js.map +1 -0
- package/dist/core/MetadataExporter.d.ts +59 -0
- package/dist/core/MetadataExporter.d.ts.map +1 -0
- package/dist/core/MetadataExporter.js +151 -0
- package/dist/core/MetadataExporter.js.map +1 -0
- package/dist/core/QueryDatabaseWriter.d.ts +50 -0
- package/dist/core/QueryDatabaseWriter.d.ts.map +1 -0
- package/dist/core/QueryDatabaseWriter.js +152 -0
- package/dist/core/QueryDatabaseWriter.js.map +1 -0
- package/dist/core/QueryFixer.d.ts +48 -0
- package/dist/core/QueryFixer.d.ts.map +1 -0
- package/dist/core/QueryFixer.js +115 -0
- package/dist/core/QueryFixer.js.map +1 -0
- package/dist/core/QueryRefiner.d.ts +94 -0
- package/dist/core/QueryRefiner.d.ts.map +1 -0
- package/dist/core/QueryRefiner.js +267 -0
- package/dist/core/QueryRefiner.js.map +1 -0
- package/dist/core/QueryTester.d.ts +70 -0
- package/dist/core/QueryTester.d.ts.map +1 -0
- package/dist/core/QueryTester.js +243 -0
- package/dist/core/QueryTester.js.map +1 -0
- package/dist/core/QueryWriter.d.ts +57 -0
- package/dist/core/QueryWriter.d.ts.map +1 -0
- package/dist/core/QueryWriter.js +184 -0
- package/dist/core/QueryWriter.js.map +1 -0
- package/dist/core/QuestionGenerator.d.ts +58 -0
- package/dist/core/QuestionGenerator.d.ts.map +1 -0
- package/dist/core/QuestionGenerator.js +145 -0
- package/dist/core/QuestionGenerator.js.map +1 -0
- package/dist/data/schema.d.ts +230 -0
- package/dist/data/schema.d.ts.map +1 -0
- package/dist/data/schema.js +6 -0
- package/dist/data/schema.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/PromptNames.d.ts +32 -0
- package/dist/prompts/PromptNames.d.ts.map +1 -0
- package/dist/prompts/PromptNames.js +35 -0
- package/dist/prompts/PromptNames.js.map +1 -0
- package/dist/utils/category-builder.d.ts +28 -0
- package/dist/utils/category-builder.d.ts.map +1 -0
- package/dist/utils/category-builder.js +90 -0
- package/dist/utils/category-builder.js.map +1 -0
- package/dist/utils/entity-helpers.d.ts +49 -0
- package/dist/utils/entity-helpers.d.ts.map +1 -0
- package/dist/utils/entity-helpers.js +189 -0
- package/dist/utils/entity-helpers.js.map +1 -0
- package/dist/utils/error-handlers.d.ts +19 -0
- package/dist/utils/error-handlers.d.ts.map +1 -0
- package/dist/utils/error-handlers.js +41 -0
- package/dist/utils/error-handlers.js.map +1 -0
- package/dist/utils/graph-helpers.d.ts +51 -0
- package/dist/utils/graph-helpers.d.ts.map +1 -0
- package/dist/utils/graph-helpers.js +82 -0
- package/dist/utils/graph-helpers.js.map +1 -0
- package/dist/utils/prompt-helpers.d.ts +25 -0
- package/dist/utils/prompt-helpers.d.ts.map +1 -0
- package/dist/utils/prompt-helpers.js +66 -0
- package/dist/utils/prompt-helpers.js.map +1 -0
- package/dist/utils/query-helpers.d.ts +23 -0
- package/dist/utils/query-helpers.d.ts.map +1 -0
- package/dist/utils/query-helpers.js +34 -0
- package/dist/utils/query-helpers.js.map +1 -0
- package/dist/utils/user-helpers.d.ts +15 -0
- package/dist/utils/user-helpers.d.ts.map +1 -0
- package/dist/utils/user-helpers.js +32 -0
- package/dist/utils/user-helpers.js.map +1 -0
- package/dist/vectors/EmbeddingService.d.ts +58 -0
- package/dist/vectors/EmbeddingService.d.ts.map +1 -0
- package/dist/vectors/EmbeddingService.js +90 -0
- package/dist/vectors/EmbeddingService.js.map +1 -0
- package/dist/vectors/SimilaritySearch.d.ts +51 -0
- package/dist/vectors/SimilaritySearch.d.ts.map +1 -0
- package/dist/vectors/SimilaritySearch.js +85 -0
- package/dist/vectors/SimilaritySearch.js.map +1 -0
- package/docs/API.md +1040 -0
- package/docs/ARCHITECTURE.md +1120 -0
- package/examples/advanced-usage.ts +401 -0
- package/examples/basic-usage.ts +285 -0
- package/package.json +48 -6
- package/src/cli/commands/export.ts +173 -0
- package/src/cli/commands/generate.ts +330 -0
- package/src/cli/commands/validate.ts +185 -0
- package/src/cli/config.ts +203 -0
- package/src/cli/index.ts +63 -0
- package/src/core/EntityGrouper.ts +318 -0
- package/src/core/MetadataExporter.ts +148 -0
- package/src/core/QueryDatabaseWriter.ts +187 -0
- package/src/core/QueryFixer.ts +153 -0
- package/src/core/QueryRefiner.ts +382 -0
- package/src/core/QueryTester.ts +264 -0
- package/src/core/QueryWriter.ts +239 -0
- package/src/core/QuestionGenerator.ts +199 -0
- package/src/data/golden-queries.json +1371 -0
- package/src/data/schema.ts +252 -0
- package/src/index.ts +49 -0
- package/src/prompts/PromptNames.ts +36 -0
- package/src/utils/category-builder.ts +97 -0
- package/src/utils/entity-helpers.ts +203 -0
- package/src/utils/error-handlers.ts +41 -0
- package/src/utils/graph-helpers.ts +99 -0
- package/src/utils/prompt-helpers.ts +79 -0
- package/src/utils/query-helpers.ts +32 -0
- package/src/utils/user-helpers.ts +39 -0
- package/src/vectors/EmbeddingService.ts +109 -0
- package/src/vectors/SimilaritySearch.ts +108 -0
- package/tsconfig.json +39 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export command - Export queries from database to metadata files
|
|
3
|
+
*
|
|
4
|
+
* Reads existing queries from the database and exports them to metadata format:
|
|
5
|
+
* - Loads all queries from Queries table
|
|
6
|
+
* - Includes related Query Fields and Query Params
|
|
7
|
+
* - Exports to JSON files in MJ metadata format
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Execute the export command
|
|
11
|
+
*
|
|
12
|
+
* Loads queries from database and exports them to metadata files.
|
|
13
|
+
*/
|
|
14
|
+
export declare function exportCommand(options: Record<string, unknown>): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FnF"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Export command - Export queries from database to metadata files
|
|
4
|
+
*
|
|
5
|
+
* Reads existing queries from the database and exports them to metadata format:
|
|
6
|
+
* - Loads all queries from Queries table
|
|
7
|
+
* - Includes related Query Fields and Query Params
|
|
8
|
+
* - Exports to JSON files in MJ metadata format
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
34
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.exportCommand = void 0;
|
|
38
|
+
const ora_1 = __importDefault(require("ora"));
|
|
39
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const core_1 = require("@memberjunction/core");
|
|
43
|
+
const user_helpers_1 = require("../../utils/user-helpers");
|
|
44
|
+
const error_handlers_1 = require("../../utils/error-handlers");
|
|
45
|
+
/**
|
|
46
|
+
* Execute the export command
|
|
47
|
+
*
|
|
48
|
+
* Loads queries from database and exports them to metadata files.
|
|
49
|
+
*/
|
|
50
|
+
async function exportCommand(options) {
|
|
51
|
+
const spinner = (0, ora_1.default)('Initializing export...').start();
|
|
52
|
+
try {
|
|
53
|
+
const outputPath = String(options.output || './metadata/queries');
|
|
54
|
+
const verbose = Boolean(options.verbose);
|
|
55
|
+
// 1. Get system user from UserCache (populated by provider initialization)
|
|
56
|
+
const contextUser = (0, user_helpers_1.getSystemUser)();
|
|
57
|
+
// 2. Verify database connection and load metadata
|
|
58
|
+
spinner.text = 'Loading metadata...';
|
|
59
|
+
// Assume provider is already configured by the calling application
|
|
60
|
+
if (!core_1.Metadata.Provider) {
|
|
61
|
+
throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
|
|
62
|
+
}
|
|
63
|
+
spinner.succeed('Metadata loaded');
|
|
64
|
+
// 3. Load queries from database
|
|
65
|
+
spinner.start('Loading queries from database...');
|
|
66
|
+
const queries = await loadQueriesFromDatabase(contextUser);
|
|
67
|
+
spinner.succeed(chalk_1.default.green(`Found ${queries.length} queries`));
|
|
68
|
+
// 4. Create output directory if it doesn't exist
|
|
69
|
+
if (!fs.existsSync(outputPath)) {
|
|
70
|
+
fs.mkdirSync(outputPath, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
// 5. Export each query to metadata format
|
|
73
|
+
let exportCount = 0;
|
|
74
|
+
const errors = [];
|
|
75
|
+
for (let i = 0; i < queries.length; i++) {
|
|
76
|
+
const query = queries[i];
|
|
77
|
+
const queryPrefix = chalk_1.default.cyan(`[${i + 1}/${queries.length}]`);
|
|
78
|
+
spinner.start(`${queryPrefix} Exporting ${chalk_1.default.bold(query.Name)}...`);
|
|
79
|
+
try {
|
|
80
|
+
const metadataRecord = await convertQueryToMetadata(query, contextUser);
|
|
81
|
+
const filename = sanitizeFilename(query.Name) + '.json';
|
|
82
|
+
const fullPath = path.join(outputPath, filename);
|
|
83
|
+
fs.writeFileSync(fullPath, JSON.stringify(metadataRecord, null, 2), 'utf-8');
|
|
84
|
+
exportCount++;
|
|
85
|
+
if (verbose) {
|
|
86
|
+
spinner.info(`${queryPrefix} ${chalk_1.default.green('✓')} Exported ${query.Name}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const errorMsg = (0, error_handlers_1.extractErrorMessage)(error, 'Query Export');
|
|
91
|
+
errors.push({ query: query.Name, error: errorMsg });
|
|
92
|
+
if (verbose) {
|
|
93
|
+
spinner.warn(`${queryPrefix} ${chalk_1.default.red('✗')} ${query.Name}: ${errorMsg}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 6. Summary
|
|
98
|
+
if (errors.length === 0) {
|
|
99
|
+
spinner.succeed(chalk_1.default.green.bold(`✓ All ${exportCount} queries exported successfully!`));
|
|
100
|
+
console.log('\n' + chalk_1.default.green.bold('✓ Export complete!\n'));
|
|
101
|
+
console.log(chalk_1.default.bold('Summary:'));
|
|
102
|
+
console.log(` Total Queries: ${chalk_1.default.cyan(exportCount.toString())}`);
|
|
103
|
+
console.log(` Exported: ${chalk_1.default.green(exportCount.toString())}`);
|
|
104
|
+
console.log(` Output Location: ${chalk_1.default.dim(outputPath)}`);
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
spinner.fail(chalk_1.default.yellow(`Export completed with ${errors.length} errors`));
|
|
109
|
+
console.log('\n' + chalk_1.default.yellow.bold('⚠ Export completed with errors\n'));
|
|
110
|
+
console.log(chalk_1.default.bold('Summary:'));
|
|
111
|
+
console.log(` Total Queries: ${chalk_1.default.cyan(queries.length.toString())}`);
|
|
112
|
+
console.log(` Exported: ${chalk_1.default.green(exportCount.toString())}`);
|
|
113
|
+
console.log(` Failed: ${chalk_1.default.red(errors.length.toString())}`);
|
|
114
|
+
console.log(` Output Location: ${chalk_1.default.dim(outputPath)}`);
|
|
115
|
+
if (errors.length > 0) {
|
|
116
|
+
console.log('\n' + chalk_1.default.bold('Errors:'));
|
|
117
|
+
for (const { query, error } of errors) {
|
|
118
|
+
console.log(chalk_1.default.red(` ${query}: ${error}`));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
spinner.fail(chalk_1.default.red('Export failed'));
|
|
126
|
+
console.error(chalk_1.default.red((0, error_handlers_1.extractErrorMessage)(error, 'Query Export')));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.exportCommand = exportCommand;
|
|
131
|
+
/**
|
|
132
|
+
* Load all queries from the database
|
|
133
|
+
*/
|
|
134
|
+
async function loadQueriesFromDatabase(contextUser) {
|
|
135
|
+
const rv = new core_1.RunView();
|
|
136
|
+
const result = await rv.RunView({
|
|
137
|
+
EntityName: 'Queries',
|
|
138
|
+
ExtraFilter: '',
|
|
139
|
+
OrderBy: 'Name',
|
|
140
|
+
ResultType: 'entity_object',
|
|
141
|
+
}, contextUser);
|
|
142
|
+
if (!result.Success) {
|
|
143
|
+
throw new Error(`Failed to load queries: ${result.ErrorMessage}`);
|
|
144
|
+
}
|
|
145
|
+
return result.Results || [];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Convert QueryEntity to metadata record format
|
|
149
|
+
*
|
|
150
|
+
* Note: For the export command, we only export the Query entity itself.
|
|
151
|
+
* QueryFields and QueryParameters are managed by QueryEntity.server.ts and
|
|
152
|
+
* will be automatically extracted when the query is imported/saved.
|
|
153
|
+
*/
|
|
154
|
+
async function convertQueryToMetadata(query, contextUser) {
|
|
155
|
+
return {
|
|
156
|
+
fields: {
|
|
157
|
+
Name: query.Name,
|
|
158
|
+
CategoryID: query.CategoryID || 'unknown',
|
|
159
|
+
UserQuestion: query.UserQuestion || '',
|
|
160
|
+
Description: query.Description || '',
|
|
161
|
+
TechnicalDescription: query.TechnicalDescription || '',
|
|
162
|
+
SQL: query.SQL || '',
|
|
163
|
+
OriginalSQL: query.OriginalSQL || query.SQL || '',
|
|
164
|
+
UsesTemplate: query.UsesTemplate || false,
|
|
165
|
+
Status: query.Status || 'Active',
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Sanitize filename by removing invalid characters
|
|
171
|
+
*/
|
|
172
|
+
function sanitizeFilename(name) {
|
|
173
|
+
return name
|
|
174
|
+
.replace(/[^a-zA-Z0-9-_\s]/g, '')
|
|
175
|
+
.replace(/\s+/g, '_')
|
|
176
|
+
.toLowerCase();
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate command - Main query generation workflow
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the full query generation pipeline:
|
|
5
|
+
* 1. Load entity groups
|
|
6
|
+
* 2. Generate business questions
|
|
7
|
+
* 3. Generate SQL queries
|
|
8
|
+
* 4. Test and fix queries
|
|
9
|
+
* 5. Refine queries
|
|
10
|
+
* 6. Export results
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Execute the generate command
|
|
14
|
+
*
|
|
15
|
+
* Full orchestration of query generation workflow with progress reporting.
|
|
16
|
+
* Uses ora for spinners and chalk for colored output.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateCommand(options: Record<string, unknown>): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmPrF"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Generate command - Main query generation workflow
|
|
4
|
+
*
|
|
5
|
+
* Orchestrates the full query generation pipeline:
|
|
6
|
+
* 1. Load entity groups
|
|
7
|
+
* 2. Generate business questions
|
|
8
|
+
* 3. Generate SQL queries
|
|
9
|
+
* 4. Test and fix queries
|
|
10
|
+
* 5. Refine queries
|
|
11
|
+
* 6. Export results
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.generateCommand = void 0;
|
|
41
|
+
const ora_1 = __importDefault(require("ora"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const core_1 = require("@memberjunction/core");
|
|
46
|
+
const config_1 = require("../config");
|
|
47
|
+
const user_helpers_1 = require("../../utils/user-helpers");
|
|
48
|
+
const EntityGrouper_1 = require("../../core/EntityGrouper");
|
|
49
|
+
const QuestionGenerator_1 = require("../../core/QuestionGenerator");
|
|
50
|
+
const QueryWriter_1 = require("../../core/QueryWriter");
|
|
51
|
+
const QueryTester_1 = require("../../core/QueryTester");
|
|
52
|
+
const QueryRefiner_1 = require("../../core/QueryRefiner");
|
|
53
|
+
const MetadataExporter_1 = require("../../core/MetadataExporter");
|
|
54
|
+
const QueryDatabaseWriter_1 = require("../../core/QueryDatabaseWriter");
|
|
55
|
+
const EmbeddingService_1 = require("../../vectors/EmbeddingService");
|
|
56
|
+
const SimilaritySearch_1 = require("../../vectors/SimilaritySearch");
|
|
57
|
+
const entity_helpers_1 = require("../../utils/entity-helpers");
|
|
58
|
+
const error_handlers_1 = require("../../utils/error-handlers");
|
|
59
|
+
const category_builder_1 = require("../../utils/category-builder");
|
|
60
|
+
/**
|
|
61
|
+
* Execute the generate command
|
|
62
|
+
*
|
|
63
|
+
* Full orchestration of query generation workflow with progress reporting.
|
|
64
|
+
* Uses ora for spinners and chalk for colored output.
|
|
65
|
+
*/
|
|
66
|
+
async function generateCommand(options) {
|
|
67
|
+
const spinner = (0, ora_1.default)('Initializing query generation...').start();
|
|
68
|
+
try {
|
|
69
|
+
// 1. Load configuration
|
|
70
|
+
spinner.text = 'Loading configuration...';
|
|
71
|
+
const config = (0, config_1.loadConfig)(options);
|
|
72
|
+
// Show model/vendor overrides if configured
|
|
73
|
+
if (config.modelOverride || config.vendorOverride) {
|
|
74
|
+
const overrideMsg = [];
|
|
75
|
+
if (config.modelOverride)
|
|
76
|
+
overrideMsg.push(`Model: ${config.modelOverride}`);
|
|
77
|
+
if (config.vendorOverride)
|
|
78
|
+
overrideMsg.push(`Vendor: ${config.vendorOverride}`);
|
|
79
|
+
spinner.info(chalk_1.default.cyan(`Using overrides - ${overrideMsg.join(', ')}`));
|
|
80
|
+
}
|
|
81
|
+
if (config.verbose) {
|
|
82
|
+
spinner.info(chalk_1.default.dim('Configuration loaded'));
|
|
83
|
+
console.log(chalk_1.default.dim(JSON.stringify(config, null, 2)));
|
|
84
|
+
}
|
|
85
|
+
// 2. Get system user from UserCache (populated by provider initialization)
|
|
86
|
+
const contextUser = (0, user_helpers_1.getSystemUser)();
|
|
87
|
+
// 3. Verify database connection and metadata
|
|
88
|
+
spinner.text = 'Loading metadata...';
|
|
89
|
+
// Assume provider and AIEngine are already configured by the calling application (MJCLI)
|
|
90
|
+
if (!core_1.Metadata.Provider) {
|
|
91
|
+
throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
|
|
92
|
+
}
|
|
93
|
+
spinner.succeed('Metadata loaded');
|
|
94
|
+
// 4. Filter and build entity groups
|
|
95
|
+
spinner.start('Filtering entities...');
|
|
96
|
+
const md = new core_1.Metadata();
|
|
97
|
+
// Apply entity filtering (includeEntities takes precedence over excludeEntities)
|
|
98
|
+
let filteredEntities = md.Entities.filter(e => !config.excludeSchemas.includes(e.SchemaName || ''));
|
|
99
|
+
if (config.includeEntities.length > 0) {
|
|
100
|
+
// Allowlist: only include specified entities
|
|
101
|
+
filteredEntities = filteredEntities.filter(e => config.includeEntities.includes(e.Name));
|
|
102
|
+
spinner.info(chalk_1.default.dim(`Including only ${config.includeEntities.length} specified entities`));
|
|
103
|
+
}
|
|
104
|
+
else if (config.excludeEntities.length > 0) {
|
|
105
|
+
// Denylist: exclude specified entities
|
|
106
|
+
filteredEntities = filteredEntities.filter(e => !config.excludeEntities.includes(e.Name));
|
|
107
|
+
spinner.info(chalk_1.default.dim(`Excluded ${config.excludeEntities.length} entities`));
|
|
108
|
+
}
|
|
109
|
+
// 4. Group entities by schema and generate entity groups
|
|
110
|
+
spinner.text = 'Analyzing entity relationships...';
|
|
111
|
+
// Count entities per schema for informational logging
|
|
112
|
+
const schemaCount = new Set(filteredEntities.map(e => e.SchemaName)).size;
|
|
113
|
+
if (config.verbose && schemaCount > 1) {
|
|
114
|
+
spinner.info(chalk_1.default.dim(`Processing ${schemaCount} schemas separately`));
|
|
115
|
+
}
|
|
116
|
+
const grouper = new EntityGrouper_1.EntityGrouper(config);
|
|
117
|
+
const entityGroups = await grouper.generateEntityGroups(filteredEntities, contextUser);
|
|
118
|
+
spinner.succeed(chalk_1.default.green(`Found ${entityGroups.length} entity groups across ${schemaCount} ${schemaCount === 1 ? 'schema' : 'schemas'}`));
|
|
119
|
+
// 5. Initialize vector similarity search
|
|
120
|
+
spinner.start('Embedding golden queries...');
|
|
121
|
+
const embeddingService = new EmbeddingService_1.EmbeddingService(config.embeddingModel);
|
|
122
|
+
const goldenQueries = await loadGoldenQueries(config);
|
|
123
|
+
const embeddedGolden = await embeddingService.embedGoldenQueries(goldenQueries);
|
|
124
|
+
spinner.succeed(chalk_1.default.green(`Embedded ${goldenQueries.length} golden queries`));
|
|
125
|
+
// 5b. Build category structure for all entity groups upfront
|
|
126
|
+
spinner.start('Building category structure...');
|
|
127
|
+
const categoryMap = new Map();
|
|
128
|
+
for (const group of entityGroups) {
|
|
129
|
+
const category = (0, category_builder_1.buildQueryCategory)(config, group);
|
|
130
|
+
// Use primary entity name as key for lookup during query generation
|
|
131
|
+
categoryMap.set(group.primaryEntity.Name, category);
|
|
132
|
+
}
|
|
133
|
+
const uniqueCategories = (0, category_builder_1.extractUniqueCategories)(Array.from(categoryMap.values()));
|
|
134
|
+
spinner.succeed(chalk_1.default.green(`Created ${uniqueCategories.length} ${uniqueCategories.length === 1 ? 'category' : 'categories'}`));
|
|
135
|
+
// 6. Generate queries for each entity group
|
|
136
|
+
const totalGroups = entityGroups.length;
|
|
137
|
+
let processedGroups = 0;
|
|
138
|
+
const allValidatedQueries = [];
|
|
139
|
+
for (const group of entityGroups) {
|
|
140
|
+
processedGroups++;
|
|
141
|
+
const groupPrefix = chalk_1.default.cyan(`[${processedGroups}/${totalGroups}]`);
|
|
142
|
+
spinner.start(`${groupPrefix} Processing ${chalk_1.default.bold(group.primaryEntity.Name)}...`);
|
|
143
|
+
let queriesCreatedForGroup = 0;
|
|
144
|
+
try {
|
|
145
|
+
// 6a. Generate business questions for this entity group
|
|
146
|
+
const questionGenerator = new QuestionGenerator_1.QuestionGenerator(contextUser, config);
|
|
147
|
+
const questions = await questionGenerator.generateQuestions(group);
|
|
148
|
+
if (config.verbose) {
|
|
149
|
+
spinner.info(`${groupPrefix} Generated ${questions.length} questions`);
|
|
150
|
+
}
|
|
151
|
+
// 6b. For each question, generate and validate query
|
|
152
|
+
for (const question of questions) {
|
|
153
|
+
spinner.text = `${groupPrefix} Generating query: ${chalk_1.default.italic(question.userQuestion)}`;
|
|
154
|
+
// Embed question for similarity search
|
|
155
|
+
const questionEmbedding = await embeddingService.embedQuery({
|
|
156
|
+
userQuestion: question.userQuestion,
|
|
157
|
+
description: question.description,
|
|
158
|
+
technicalDescription: question.technicalDescription,
|
|
159
|
+
});
|
|
160
|
+
// Find similar golden queries
|
|
161
|
+
const similaritySearch = new SimilaritySearch_1.SimilaritySearch();
|
|
162
|
+
const fewShotResults = await similaritySearch.findSimilarQueries(questionEmbedding, embeddedGolden, config.topSimilarQueries);
|
|
163
|
+
const fewShotExamples = fewShotResults.map(s => s.query);
|
|
164
|
+
// Generate SQL query
|
|
165
|
+
const queryWriter = new QueryWriter_1.QueryWriter(contextUser, config);
|
|
166
|
+
const generatedQuery = await queryWriter.generateQuery(question, group.entities.map((e) => (0, entity_helpers_1.formatEntityMetadataForPrompt)(e, group.entities)), fewShotExamples);
|
|
167
|
+
// Test and fix query
|
|
168
|
+
// Access the database provider through Metadata.Provider
|
|
169
|
+
const dataProvider = core_1.Metadata.Provider;
|
|
170
|
+
const entityMetadata = group.entities.map((e) => (0, entity_helpers_1.formatEntityMetadataForPrompt)(e, group.entities));
|
|
171
|
+
const queryTester = new QueryTester_1.QueryTester(dataProvider, entityMetadata, question, contextUser, config);
|
|
172
|
+
const testResult = await queryTester.testQuery(generatedQuery, config.maxFixingIterations);
|
|
173
|
+
if (!testResult.success) {
|
|
174
|
+
spinner.warn(chalk_1.default.yellow(`${groupPrefix} Query failed after ${config.maxFixingIterations} attempts: ${question.userQuestion}`));
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Refine query
|
|
178
|
+
const queryRefiner = new QueryRefiner_1.QueryRefiner(queryTester, contextUser, config);
|
|
179
|
+
const refinedResult = await queryRefiner.refineQuery(generatedQuery, question, entityMetadata, config.maxRefinementIterations);
|
|
180
|
+
// Get pre-built category from map
|
|
181
|
+
const category = categoryMap.get(group.primaryEntity.Name);
|
|
182
|
+
if (!category) {
|
|
183
|
+
throw new Error(`Category not found for entity group: ${group.primaryEntity.Name}`);
|
|
184
|
+
}
|
|
185
|
+
allValidatedQueries.push({
|
|
186
|
+
businessQuestion: question,
|
|
187
|
+
query: refinedResult.query,
|
|
188
|
+
testResult: refinedResult.testResult,
|
|
189
|
+
evaluation: refinedResult.evaluation,
|
|
190
|
+
entityGroup: group,
|
|
191
|
+
category,
|
|
192
|
+
});
|
|
193
|
+
queriesCreatedForGroup++;
|
|
194
|
+
if (config.verbose) {
|
|
195
|
+
spinner.info(`${groupPrefix} ${chalk_1.default.green('✓')} ${question.userQuestion}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Format entity list with primary entity in bold
|
|
199
|
+
const entityDisplay = group.entities
|
|
200
|
+
.map(e => e.Name === group.primaryEntity.Name ? chalk_1.default.bold(e.Name) : e.Name)
|
|
201
|
+
.join(', ');
|
|
202
|
+
spinner.succeed(`${groupPrefix} ${entityDisplay} complete (${chalk_1.default.green(queriesCreatedForGroup + ' queries')})`);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Format entity list with primary entity in bold
|
|
206
|
+
const entityDisplay = group.entities
|
|
207
|
+
.map(e => e.Name === group.primaryEntity.Name ? chalk_1.default.bold(e.Name) : e.Name)
|
|
208
|
+
.join(', ');
|
|
209
|
+
spinner.warn(chalk_1.default.yellow(`${groupPrefix} Error processing ${entityDisplay}: ${(0, error_handlers_1.extractErrorMessage)(error, 'Query Generation')}`));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// 7. Export results
|
|
213
|
+
spinner.start(`Exporting ${allValidatedQueries.length} queries...`);
|
|
214
|
+
if (config.outputMode === 'metadata' || config.outputMode === 'both') {
|
|
215
|
+
const exporter = new MetadataExporter_1.MetadataExporter();
|
|
216
|
+
const exportResult = await exporter.exportQueries(allValidatedQueries, uniqueCategories, config.outputDirectory, config.outputCategoryDirectory);
|
|
217
|
+
spinner.succeed(chalk_1.default.green(`Exported to ${exportResult.outputPath}`));
|
|
218
|
+
}
|
|
219
|
+
if (config.outputMode === 'database' || config.outputMode === 'both') {
|
|
220
|
+
const dbWriter = new QueryDatabaseWriter_1.QueryDatabaseWriter();
|
|
221
|
+
await dbWriter.writeQueriesToDatabase(allValidatedQueries, contextUser);
|
|
222
|
+
spinner.succeed(chalk_1.default.green(`Wrote ${allValidatedQueries.length} queries to database`));
|
|
223
|
+
}
|
|
224
|
+
// 8. Summary
|
|
225
|
+
console.log('\n' + chalk_1.default.green.bold('✓ Query generation complete!\n'));
|
|
226
|
+
console.log(chalk_1.default.bold('Summary:'));
|
|
227
|
+
console.log(` Entity Groups Processed: ${chalk_1.default.cyan(processedGroups.toString())}`);
|
|
228
|
+
console.log(` Queries Generated: ${chalk_1.default.green(allValidatedQueries.length.toString())}`);
|
|
229
|
+
console.log(` Output Location: ${chalk_1.default.dim(config.outputDirectory)}`);
|
|
230
|
+
process.exit(0);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
spinner.fail(chalk_1.default.red('Query generation failed'));
|
|
234
|
+
console.error(chalk_1.default.red((0, error_handlers_1.extractErrorMessage)(error, 'Query Generation')));
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.generateCommand = generateCommand;
|
|
239
|
+
/**
|
|
240
|
+
* Load golden queries from JSON file
|
|
241
|
+
*
|
|
242
|
+
* Golden queries are example queries used for few-shot learning.
|
|
243
|
+
* They are stored in the data/golden-queries.json file.
|
|
244
|
+
*
|
|
245
|
+
* @param config - QueryGen configuration with verbose flag
|
|
246
|
+
* @returns Array of golden queries, or empty array if file not found/invalid
|
|
247
|
+
*/
|
|
248
|
+
async function loadGoldenQueries(config) {
|
|
249
|
+
try {
|
|
250
|
+
// Resolve path to golden-queries.json in the data directory
|
|
251
|
+
// __dirname points to dist/cli/commands, so we go up to dist, then to data
|
|
252
|
+
const goldenQueriesPath = path.join(__dirname, '../../data/golden-queries.json');
|
|
253
|
+
// Check if file exists
|
|
254
|
+
if (!fs.existsSync(goldenQueriesPath)) {
|
|
255
|
+
if (config.verbose) {
|
|
256
|
+
(0, core_1.LogStatus)(`[Warning] Golden queries file not found at: ${goldenQueriesPath}`);
|
|
257
|
+
}
|
|
258
|
+
return [];
|
|
259
|
+
}
|
|
260
|
+
// Read and parse JSON file
|
|
261
|
+
const fileContent = fs.readFileSync(goldenQueriesPath, 'utf-8');
|
|
262
|
+
const goldenQueries = JSON.parse(fileContent);
|
|
263
|
+
// Validate that it's an array
|
|
264
|
+
if (!Array.isArray(goldenQueries)) {
|
|
265
|
+
if (config.verbose) {
|
|
266
|
+
(0, core_1.LogStatus)('[Warning] Golden queries file does not contain an array');
|
|
267
|
+
}
|
|
268
|
+
return [];
|
|
269
|
+
}
|
|
270
|
+
if (config.verbose) {
|
|
271
|
+
(0, core_1.LogStatus)(`[Info] Loaded ${goldenQueries.length} golden queries for few-shot learning`);
|
|
272
|
+
}
|
|
273
|
+
return goldenQueries;
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
if (config.verbose) {
|
|
277
|
+
(0, core_1.LogStatus)(`[Warning] Failed to load golden queries: ${(0, error_handlers_1.extractErrorMessage)(error, 'loadGoldenQueries')}`);
|
|
278
|
+
}
|
|
279
|
+
return [];
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command - Validate existing query templates
|
|
3
|
+
*
|
|
4
|
+
* Tests existing query metadata files to ensure they are valid:
|
|
5
|
+
* - SQL syntax validation
|
|
6
|
+
* - Parameter validation
|
|
7
|
+
* - Output field validation
|
|
8
|
+
* - Execution testing (optional)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Execute the validate command
|
|
12
|
+
*
|
|
13
|
+
* Loads query metadata files and validates each query template.
|
|
14
|
+
* Reports success/failure statistics.
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateCommand(options: Record<string, unknown>): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHrF"}
|