@memberjunction/query-gen 3.3.0 â 4.0.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/.turbo/turbo-build.log +6 -4
- package/CHANGELOG.md +52 -0
- package/dist/cli/commands/export.js +35 -65
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/generate.js +70 -100
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/validate.js +40 -70
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +7 -7
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +11 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/core/EntityGrouper.d.ts +2 -2
- package/dist/core/EntityGrouper.js +23 -28
- package/dist/core/EntityGrouper.js.map +1 -1
- package/dist/core/MetadataExporter.d.ts +2 -2
- package/dist/core/MetadataExporter.js +9 -36
- package/dist/core/MetadataExporter.js.map +1 -1
- package/dist/core/QueryDatabaseWriter.d.ts +1 -1
- package/dist/core/QueryDatabaseWriter.js +8 -12
- package/dist/core/QueryDatabaseWriter.js.map +1 -1
- package/dist/core/QueryFixer.d.ts +2 -2
- package/dist/core/QueryFixer.js +11 -17
- package/dist/core/QueryFixer.js.map +1 -1
- package/dist/core/QueryRefiner.d.ts +3 -3
- package/dist/core/QueryRefiner.js +22 -29
- package/dist/core/QueryRefiner.js.map +1 -1
- package/dist/core/QueryTester.d.ts +2 -2
- package/dist/core/QueryTester.js +11 -44
- package/dist/core/QueryTester.js.map +1 -1
- package/dist/core/QueryWriter.d.ts +2 -2
- package/dist/core/QueryWriter.js +12 -18
- package/dist/core/QueryWriter.js.map +1 -1
- package/dist/core/QuestionGenerator.d.ts +2 -2
- package/dist/core/QuestionGenerator.js +16 -22
- package/dist/core/QuestionGenerator.js.map +1 -1
- package/dist/data/schema.js +1 -2
- package/dist/data/schema.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.js +18 -59
- package/dist/index.js.map +1 -1
- package/dist/prompts/PromptNames.js +5 -8
- package/dist/prompts/PromptNames.js.map +1 -1
- package/dist/utils/category-builder.d.ts +2 -2
- package/dist/utils/category-builder.js +2 -7
- package/dist/utils/category-builder.js.map +1 -1
- package/dist/utils/entity-helpers.d.ts +1 -1
- package/dist/utils/entity-helpers.js +7 -17
- package/dist/utils/entity-helpers.js.map +1 -1
- package/dist/utils/error-handlers.js +3 -9
- package/dist/utils/error-handlers.js.map +1 -1
- package/dist/utils/graph-helpers.js +3 -9
- package/dist/utils/graph-helpers.js.map +1 -1
- package/dist/utils/prompt-helpers.d.ts +1 -1
- package/dist/utils/prompt-helpers.js +8 -12
- package/dist/utils/prompt-helpers.js.map +1 -1
- package/dist/utils/user-helpers.js +3 -7
- package/dist/utils/user-helpers.js.map +1 -1
- package/dist/vectors/EmbeddingService.d.ts +1 -1
- package/dist/vectors/EmbeddingService.js +3 -8
- package/dist/vectors/EmbeddingService.js.map +1 -1
- package/dist/vectors/SimilaritySearch.d.ts +1 -1
- package/dist/vectors/SimilaritySearch.js +19 -20
- package/dist/vectors/SimilaritySearch.js.map +1 -1
- package/package.json +18 -17
- package/src/cli/config.ts +8 -2
- package/src/cli/index.ts +4 -1
- package/tsconfig.json +5 -35
- package/typedoc.json +9 -0
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# @memberjunction/query-gen
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 8366d44: we goin' to 4.0!
|
|
8
|
+
- fe73344: Angular 21/Node 24/ESM everywhere, and more
|
|
9
|
+
- 5f6306c: 4.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- e06f81c: changed SO much!
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [2f86270]
|
|
18
|
+
- Updated dependencies [65b4274]
|
|
19
|
+
- Updated dependencies [8366d44]
|
|
20
|
+
- Updated dependencies [f159146]
|
|
21
|
+
- Updated dependencies [718b0ee]
|
|
22
|
+
- Updated dependencies [5c7f6ab]
|
|
23
|
+
- Updated dependencies [fe73344]
|
|
24
|
+
- Updated dependencies [5f6306c]
|
|
25
|
+
- Updated dependencies [e06f81c]
|
|
26
|
+
- @memberjunction/aiengine@4.0.0
|
|
27
|
+
- @memberjunction/sqlserver-dataprovider@4.0.0
|
|
28
|
+
- @memberjunction/ai@4.0.0
|
|
29
|
+
- @memberjunction/ai-core-plus@4.0.0
|
|
30
|
+
- @memberjunction/ai-prompts@4.0.0
|
|
31
|
+
- @memberjunction/ai-vectors-memory@4.0.0
|
|
32
|
+
- @memberjunction/core@4.0.0
|
|
33
|
+
- @memberjunction/core-entities@4.0.0
|
|
34
|
+
- @memberjunction/global@4.0.0
|
|
35
|
+
|
|
36
|
+
## 3.4.0
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- 3a71e4e: Fix large text field corruptions, cross-platform improvements, more robust environment variable parsing for boolean values
|
|
41
|
+
- Updated dependencies [d596467]
|
|
42
|
+
- Updated dependencies [3a71e4e]
|
|
43
|
+
- Updated dependencies [18b4e65]
|
|
44
|
+
- Updated dependencies [a3961d5]
|
|
45
|
+
- @memberjunction/ai-prompts@3.4.0
|
|
46
|
+
- @memberjunction/sqlserver-dataprovider@3.4.0
|
|
47
|
+
- @memberjunction/core-entities@3.4.0
|
|
48
|
+
- @memberjunction/core@3.4.0
|
|
49
|
+
- @memberjunction/aiengine@3.4.0
|
|
50
|
+
- @memberjunction/ai-core-plus@3.4.0
|
|
51
|
+
- @memberjunction/ai-vectors-memory@3.4.0
|
|
52
|
+
- @memberjunction/ai@3.4.0
|
|
53
|
+
- @memberjunction/global@3.4.0
|
|
54
|
+
|
|
3
55
|
## 3.3.0
|
|
4
56
|
|
|
5
57
|
### Patch Changes
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Export command - Export queries from database to metadata files
|
|
4
3
|
*
|
|
@@ -7,64 +6,36 @@
|
|
|
7
6
|
* - Includes related Query Fields and Query Params
|
|
8
7
|
* - Exports to JSON files in MJ metadata format
|
|
9
8
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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");
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { Metadata, RunView } from '@memberjunction/core';
|
|
14
|
+
import { getSystemUser } from '../../utils/user-helpers.js';
|
|
15
|
+
import { extractErrorMessage } from '../../utils/error-handlers.js';
|
|
45
16
|
/**
|
|
46
17
|
* Execute the export command
|
|
47
18
|
*
|
|
48
19
|
* Loads queries from database and exports them to metadata files.
|
|
49
20
|
*/
|
|
50
|
-
async function exportCommand(options) {
|
|
51
|
-
const spinner = (
|
|
21
|
+
export async function exportCommand(options) {
|
|
22
|
+
const spinner = ora('Initializing export...').start();
|
|
52
23
|
try {
|
|
53
24
|
const outputPath = String(options.output || './metadata/queries');
|
|
54
25
|
const verbose = Boolean(options.verbose);
|
|
55
26
|
// 1. Get system user from UserCache (populated by provider initialization)
|
|
56
|
-
const contextUser =
|
|
27
|
+
const contextUser = getSystemUser();
|
|
57
28
|
// 2. Verify database connection and load metadata
|
|
58
29
|
spinner.text = 'Loading metadata...';
|
|
59
30
|
// Assume provider is already configured by the calling application
|
|
60
|
-
if (!
|
|
31
|
+
if (!Metadata.Provider) {
|
|
61
32
|
throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
|
|
62
33
|
}
|
|
63
34
|
spinner.succeed('Metadata loaded');
|
|
64
35
|
// 3. Load queries from database
|
|
65
36
|
spinner.start('Loading queries from database...');
|
|
66
37
|
const queries = await loadQueriesFromDatabase(contextUser);
|
|
67
|
-
spinner.succeed(
|
|
38
|
+
spinner.succeed(chalk.green(`Found ${queries.length} queries`));
|
|
68
39
|
// 4. Create output directory if it doesn't exist
|
|
69
40
|
if (!fs.existsSync(outputPath)) {
|
|
70
41
|
fs.mkdirSync(outputPath, { recursive: true });
|
|
@@ -74,8 +45,8 @@ async function exportCommand(options) {
|
|
|
74
45
|
const errors = [];
|
|
75
46
|
for (let i = 0; i < queries.length; i++) {
|
|
76
47
|
const query = queries[i];
|
|
77
|
-
const queryPrefix =
|
|
78
|
-
spinner.start(`${queryPrefix} Exporting ${
|
|
48
|
+
const queryPrefix = chalk.cyan(`[${i + 1}/${queries.length}]`);
|
|
49
|
+
spinner.start(`${queryPrefix} Exporting ${chalk.bold(query.Name)}...`);
|
|
79
50
|
try {
|
|
80
51
|
const metadataRecord = await convertQueryToMetadata(query, contextUser);
|
|
81
52
|
const filename = sanitizeFilename(query.Name) + '.json';
|
|
@@ -83,56 +54,55 @@ async function exportCommand(options) {
|
|
|
83
54
|
fs.writeFileSync(fullPath, JSON.stringify(metadataRecord, null, 2), 'utf-8');
|
|
84
55
|
exportCount++;
|
|
85
56
|
if (verbose) {
|
|
86
|
-
spinner.info(`${queryPrefix} ${
|
|
57
|
+
spinner.info(`${queryPrefix} ${chalk.green('â')} Exported ${query.Name}`);
|
|
87
58
|
}
|
|
88
59
|
}
|
|
89
60
|
catch (error) {
|
|
90
|
-
const errorMsg =
|
|
61
|
+
const errorMsg = extractErrorMessage(error, 'Query Export');
|
|
91
62
|
errors.push({ query: query.Name, error: errorMsg });
|
|
92
63
|
if (verbose) {
|
|
93
|
-
spinner.warn(`${queryPrefix} ${
|
|
64
|
+
spinner.warn(`${queryPrefix} ${chalk.red('â')} ${query.Name}: ${errorMsg}`);
|
|
94
65
|
}
|
|
95
66
|
}
|
|
96
67
|
}
|
|
97
68
|
// 6. Summary
|
|
98
69
|
if (errors.length === 0) {
|
|
99
|
-
spinner.succeed(
|
|
100
|
-
console.log('\n' +
|
|
101
|
-
console.log(
|
|
102
|
-
console.log(` Total Queries: ${
|
|
103
|
-
console.log(` Exported: ${
|
|
104
|
-
console.log(` Output Location: ${
|
|
70
|
+
spinner.succeed(chalk.green.bold(`â All ${exportCount} queries exported successfully!`));
|
|
71
|
+
console.log('\n' + chalk.green.bold('â Export complete!\n'));
|
|
72
|
+
console.log(chalk.bold('Summary:'));
|
|
73
|
+
console.log(` Total Queries: ${chalk.cyan(exportCount.toString())}`);
|
|
74
|
+
console.log(` Exported: ${chalk.green(exportCount.toString())}`);
|
|
75
|
+
console.log(` Output Location: ${chalk.dim(outputPath)}`);
|
|
105
76
|
process.exit(0);
|
|
106
77
|
}
|
|
107
78
|
else {
|
|
108
|
-
spinner.fail(
|
|
109
|
-
console.log('\n' +
|
|
110
|
-
console.log(
|
|
111
|
-
console.log(` Total Queries: ${
|
|
112
|
-
console.log(` Exported: ${
|
|
113
|
-
console.log(` Failed: ${
|
|
114
|
-
console.log(` Output Location: ${
|
|
79
|
+
spinner.fail(chalk.yellow(`Export completed with ${errors.length} errors`));
|
|
80
|
+
console.log('\n' + chalk.yellow.bold('â Export completed with errors\n'));
|
|
81
|
+
console.log(chalk.bold('Summary:'));
|
|
82
|
+
console.log(` Total Queries: ${chalk.cyan(queries.length.toString())}`);
|
|
83
|
+
console.log(` Exported: ${chalk.green(exportCount.toString())}`);
|
|
84
|
+
console.log(` Failed: ${chalk.red(errors.length.toString())}`);
|
|
85
|
+
console.log(` Output Location: ${chalk.dim(outputPath)}`);
|
|
115
86
|
if (errors.length > 0) {
|
|
116
|
-
console.log('\n' +
|
|
87
|
+
console.log('\n' + chalk.bold('Errors:'));
|
|
117
88
|
for (const { query, error } of errors) {
|
|
118
|
-
console.log(
|
|
89
|
+
console.log(chalk.red(` ${query}: ${error}`));
|
|
119
90
|
}
|
|
120
91
|
}
|
|
121
92
|
process.exit(1);
|
|
122
93
|
}
|
|
123
94
|
}
|
|
124
95
|
catch (error) {
|
|
125
|
-
spinner.fail(
|
|
126
|
-
console.error(
|
|
96
|
+
spinner.fail(chalk.red('Export failed'));
|
|
97
|
+
console.error(chalk.red(extractErrorMessage(error, 'Query Export')));
|
|
127
98
|
process.exit(1);
|
|
128
99
|
}
|
|
129
100
|
}
|
|
130
|
-
exports.exportCommand = exportCommand;
|
|
131
101
|
/**
|
|
132
102
|
* Load all queries from the database
|
|
133
103
|
*/
|
|
134
104
|
async function loadQueriesFromDatabase(contextUser) {
|
|
135
|
-
const rv = new
|
|
105
|
+
const rv = new RunView();
|
|
136
106
|
const result = await rv.RunView({
|
|
137
107
|
EntityName: 'Queries',
|
|
138
108
|
ExtraFilter: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgC;IAClE,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,2EAA2E;QAC3E,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;QAEpC,kDAAkD;QAClD,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,mEAAmE;QACnE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;QACvH,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEnC,gCAAgC;QAChC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QAEhE,iDAAiD;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,0CAA0C;QAC1C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,MAAM,GAA4C,EAAE,CAAC;QAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAE/D,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,cAAc,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEvE,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACxE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;gBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAEjD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC7E,WAAW,EAAE,CAAC;gBAEd,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpD,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,iCAAiC,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAE3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC1C,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,WAAqB;IAC1D,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;QACE,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,eAAe;KAC5B,EACD,WAAW,CACZ,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,KAAkB,EAClB,WAAqB;IAErB,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;YACzC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE;YACtC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,EAAE;YACtD,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;YACpB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK;YACzC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ;SACjC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,WAAW,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Generate command - Main query generation workflow
|
|
4
3
|
*
|
|
@@ -10,65 +9,37 @@
|
|
|
10
9
|
* 5. Refine queries
|
|
11
10
|
* 6. Export results
|
|
12
11
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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");
|
|
12
|
+
import ora from 'ora';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import * as fs from 'fs';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import { Metadata, LogStatus } from '@memberjunction/core';
|
|
17
|
+
import { loadConfig } from '../config.js';
|
|
18
|
+
import { getSystemUser } from '../../utils/user-helpers.js';
|
|
19
|
+
import { EntityGrouper } from '../../core/EntityGrouper.js';
|
|
20
|
+
import { QuestionGenerator } from '../../core/QuestionGenerator.js';
|
|
21
|
+
import { QueryWriter } from '../../core/QueryWriter.js';
|
|
22
|
+
import { QueryTester } from '../../core/QueryTester.js';
|
|
23
|
+
import { QueryRefiner } from '../../core/QueryRefiner.js';
|
|
24
|
+
import { MetadataExporter } from '../../core/MetadataExporter.js';
|
|
25
|
+
import { QueryDatabaseWriter } from '../../core/QueryDatabaseWriter.js';
|
|
26
|
+
import { EmbeddingService } from '../../vectors/EmbeddingService.js';
|
|
27
|
+
import { SimilaritySearch } from '../../vectors/SimilaritySearch.js';
|
|
28
|
+
import { formatEntityMetadataForPrompt } from '../../utils/entity-helpers.js';
|
|
29
|
+
import { extractErrorMessage } from '../../utils/error-handlers.js';
|
|
30
|
+
import { buildQueryCategory, extractUniqueCategories } from '../../utils/category-builder.js';
|
|
60
31
|
/**
|
|
61
32
|
* Execute the generate command
|
|
62
33
|
*
|
|
63
34
|
* Full orchestration of query generation workflow with progress reporting.
|
|
64
35
|
* Uses ora for spinners and chalk for colored output.
|
|
65
36
|
*/
|
|
66
|
-
async function generateCommand(options) {
|
|
67
|
-
const spinner = (
|
|
37
|
+
export async function generateCommand(options) {
|
|
38
|
+
const spinner = ora('Initializing query generation...').start();
|
|
68
39
|
try {
|
|
69
40
|
// 1. Load configuration
|
|
70
41
|
spinner.text = 'Loading configuration...';
|
|
71
|
-
const config =
|
|
42
|
+
const config = loadConfig(options);
|
|
72
43
|
// Show model/vendor overrides if configured
|
|
73
44
|
if (config.modelOverride || config.vendorOverride) {
|
|
74
45
|
const overrideMsg = [];
|
|
@@ -76,81 +47,81 @@ async function generateCommand(options) {
|
|
|
76
47
|
overrideMsg.push(`Model: ${config.modelOverride}`);
|
|
77
48
|
if (config.vendorOverride)
|
|
78
49
|
overrideMsg.push(`Vendor: ${config.vendorOverride}`);
|
|
79
|
-
spinner.info(
|
|
50
|
+
spinner.info(chalk.cyan(`Using overrides - ${overrideMsg.join(', ')}`));
|
|
80
51
|
}
|
|
81
52
|
if (config.verbose) {
|
|
82
|
-
spinner.info(
|
|
83
|
-
console.log(
|
|
53
|
+
spinner.info(chalk.dim('Configuration loaded'));
|
|
54
|
+
console.log(chalk.dim(JSON.stringify(config, null, 2)));
|
|
84
55
|
}
|
|
85
56
|
// 2. Get system user from UserCache (populated by provider initialization)
|
|
86
|
-
const contextUser =
|
|
57
|
+
const contextUser = getSystemUser();
|
|
87
58
|
// 3. Verify database connection and metadata
|
|
88
59
|
spinner.text = 'Loading metadata...';
|
|
89
60
|
// Assume provider and AIEngine are already configured by the calling application (MJCLI)
|
|
90
|
-
if (!
|
|
61
|
+
if (!Metadata.Provider) {
|
|
91
62
|
throw new Error('Metadata provider not configured. Please ensure database connection is set up before running CLI.');
|
|
92
63
|
}
|
|
93
64
|
spinner.succeed('Metadata loaded');
|
|
94
65
|
// 4. Filter and build entity groups
|
|
95
66
|
spinner.start('Filtering entities...');
|
|
96
|
-
const md = new
|
|
67
|
+
const md = new Metadata();
|
|
97
68
|
// Apply entity filtering (includeEntities takes precedence over excludeEntities)
|
|
98
69
|
let filteredEntities = md.Entities.filter(e => !config.excludeSchemas.includes(e.SchemaName || ''));
|
|
99
70
|
if (config.includeEntities.length > 0) {
|
|
100
71
|
// Allowlist: only include specified entities
|
|
101
72
|
filteredEntities = filteredEntities.filter(e => config.includeEntities.includes(e.Name));
|
|
102
|
-
spinner.info(
|
|
73
|
+
spinner.info(chalk.dim(`Including only ${config.includeEntities.length} specified entities`));
|
|
103
74
|
}
|
|
104
75
|
else if (config.excludeEntities.length > 0) {
|
|
105
76
|
// Denylist: exclude specified entities
|
|
106
77
|
filteredEntities = filteredEntities.filter(e => !config.excludeEntities.includes(e.Name));
|
|
107
|
-
spinner.info(
|
|
78
|
+
spinner.info(chalk.dim(`Excluded ${config.excludeEntities.length} entities`));
|
|
108
79
|
}
|
|
109
80
|
// 4. Group entities by schema and generate entity groups
|
|
110
81
|
spinner.text = 'Analyzing entity relationships...';
|
|
111
82
|
// Count entities per schema for informational logging
|
|
112
83
|
const schemaCount = new Set(filteredEntities.map(e => e.SchemaName)).size;
|
|
113
84
|
if (config.verbose && schemaCount > 1) {
|
|
114
|
-
spinner.info(
|
|
85
|
+
spinner.info(chalk.dim(`Processing ${schemaCount} schemas separately`));
|
|
115
86
|
}
|
|
116
|
-
const grouper = new
|
|
87
|
+
const grouper = new EntityGrouper(config);
|
|
117
88
|
const entityGroups = await grouper.generateEntityGroups(filteredEntities, contextUser);
|
|
118
|
-
spinner.succeed(
|
|
89
|
+
spinner.succeed(chalk.green(`Found ${entityGroups.length} entity groups across ${schemaCount} ${schemaCount === 1 ? 'schema' : 'schemas'}`));
|
|
119
90
|
// 5. Initialize vector similarity search
|
|
120
91
|
spinner.start('Embedding golden queries...');
|
|
121
|
-
const embeddingService = new
|
|
92
|
+
const embeddingService = new EmbeddingService(config.embeddingModel);
|
|
122
93
|
const goldenQueries = await loadGoldenQueries(config);
|
|
123
94
|
const embeddedGolden = await embeddingService.embedGoldenQueries(goldenQueries);
|
|
124
|
-
spinner.succeed(
|
|
95
|
+
spinner.succeed(chalk.green(`Embedded ${goldenQueries.length} golden queries`));
|
|
125
96
|
// 5b. Build category structure for all entity groups upfront
|
|
126
97
|
spinner.start('Building category structure...');
|
|
127
98
|
const categoryMap = new Map();
|
|
128
99
|
for (const group of entityGroups) {
|
|
129
|
-
const category =
|
|
100
|
+
const category = buildQueryCategory(config, group);
|
|
130
101
|
// Use primary entity name as key for lookup during query generation
|
|
131
102
|
categoryMap.set(group.primaryEntity.Name, category);
|
|
132
103
|
}
|
|
133
|
-
const uniqueCategories =
|
|
134
|
-
spinner.succeed(
|
|
104
|
+
const uniqueCategories = extractUniqueCategories(Array.from(categoryMap.values()));
|
|
105
|
+
spinner.succeed(chalk.green(`Created ${uniqueCategories.length} ${uniqueCategories.length === 1 ? 'category' : 'categories'}`));
|
|
135
106
|
// 6. Generate queries for each entity group
|
|
136
107
|
const totalGroups = entityGroups.length;
|
|
137
108
|
let processedGroups = 0;
|
|
138
109
|
const allValidatedQueries = [];
|
|
139
110
|
for (const group of entityGroups) {
|
|
140
111
|
processedGroups++;
|
|
141
|
-
const groupPrefix =
|
|
142
|
-
spinner.start(`${groupPrefix} Processing ${
|
|
112
|
+
const groupPrefix = chalk.cyan(`[${processedGroups}/${totalGroups}]`);
|
|
113
|
+
spinner.start(`${groupPrefix} Processing ${chalk.bold(group.primaryEntity.Name)}...`);
|
|
143
114
|
let queriesCreatedForGroup = 0;
|
|
144
115
|
try {
|
|
145
116
|
// 6a. Generate business questions for this entity group
|
|
146
|
-
const questionGenerator = new
|
|
117
|
+
const questionGenerator = new QuestionGenerator(contextUser, config);
|
|
147
118
|
const questions = await questionGenerator.generateQuestions(group);
|
|
148
119
|
if (config.verbose) {
|
|
149
120
|
spinner.info(`${groupPrefix} Generated ${questions.length} questions`);
|
|
150
121
|
}
|
|
151
122
|
// 6b. For each question, generate and validate query
|
|
152
123
|
for (const question of questions) {
|
|
153
|
-
spinner.text = `${groupPrefix} Generating query: ${
|
|
124
|
+
spinner.text = `${groupPrefix} Generating query: ${chalk.italic(question.userQuestion)}`;
|
|
154
125
|
// Embed question for similarity search
|
|
155
126
|
const questionEmbedding = await embeddingService.embedQuery({
|
|
156
127
|
userQuestion: question.userQuestion,
|
|
@@ -158,24 +129,24 @@ async function generateCommand(options) {
|
|
|
158
129
|
technicalDescription: question.technicalDescription,
|
|
159
130
|
});
|
|
160
131
|
// Find similar golden queries
|
|
161
|
-
const similaritySearch = new
|
|
132
|
+
const similaritySearch = new SimilaritySearch();
|
|
162
133
|
const fewShotResults = await similaritySearch.findSimilarQueries(questionEmbedding, embeddedGolden, config.topSimilarQueries);
|
|
163
134
|
const fewShotExamples = fewShotResults.map(s => s.query);
|
|
164
135
|
// Generate SQL query
|
|
165
|
-
const queryWriter = new
|
|
166
|
-
const generatedQuery = await queryWriter.generateQuery(question, group.entities.map((e) =>
|
|
136
|
+
const queryWriter = new QueryWriter(contextUser, config);
|
|
137
|
+
const generatedQuery = await queryWriter.generateQuery(question, group.entities.map((e) => formatEntityMetadataForPrompt(e, group.entities)), fewShotExamples);
|
|
167
138
|
// Test and fix query
|
|
168
139
|
// Access the database provider through Metadata.Provider
|
|
169
|
-
const dataProvider =
|
|
170
|
-
const entityMetadata = group.entities.map((e) =>
|
|
171
|
-
const queryTester = new
|
|
140
|
+
const dataProvider = Metadata.Provider;
|
|
141
|
+
const entityMetadata = group.entities.map((e) => formatEntityMetadataForPrompt(e, group.entities));
|
|
142
|
+
const queryTester = new QueryTester(dataProvider, entityMetadata, question, contextUser, config);
|
|
172
143
|
const testResult = await queryTester.testQuery(generatedQuery, config.maxFixingIterations);
|
|
173
144
|
if (!testResult.success) {
|
|
174
|
-
spinner.warn(
|
|
145
|
+
spinner.warn(chalk.yellow(`${groupPrefix} Query failed after ${config.maxFixingIterations} attempts: ${question.userQuestion}`));
|
|
175
146
|
continue;
|
|
176
147
|
}
|
|
177
148
|
// Refine query
|
|
178
|
-
const queryRefiner = new
|
|
149
|
+
const queryRefiner = new QueryRefiner(queryTester, contextUser, config);
|
|
179
150
|
const refinedResult = await queryRefiner.refineQuery(generatedQuery, question, entityMetadata, config.maxRefinementIterations);
|
|
180
151
|
// Get pre-built category from map
|
|
181
152
|
const category = categoryMap.get(group.primaryEntity.Name);
|
|
@@ -192,50 +163,49 @@ async function generateCommand(options) {
|
|
|
192
163
|
});
|
|
193
164
|
queriesCreatedForGroup++;
|
|
194
165
|
if (config.verbose) {
|
|
195
|
-
spinner.info(`${groupPrefix} ${
|
|
166
|
+
spinner.info(`${groupPrefix} ${chalk.green('â')} ${question.userQuestion}`);
|
|
196
167
|
}
|
|
197
168
|
}
|
|
198
169
|
// Format entity list with primary entity in bold
|
|
199
170
|
const entityDisplay = group.entities
|
|
200
|
-
.map(e => e.Name === group.primaryEntity.Name ?
|
|
171
|
+
.map(e => e.Name === group.primaryEntity.Name ? chalk.bold(e.Name) : e.Name)
|
|
201
172
|
.join(', ');
|
|
202
|
-
spinner.succeed(`${groupPrefix} ${entityDisplay} complete (${
|
|
173
|
+
spinner.succeed(`${groupPrefix} ${entityDisplay} complete (${chalk.green(queriesCreatedForGroup + ' queries')})`);
|
|
203
174
|
}
|
|
204
175
|
catch (error) {
|
|
205
176
|
// Format entity list with primary entity in bold
|
|
206
177
|
const entityDisplay = group.entities
|
|
207
|
-
.map(e => e.Name === group.primaryEntity.Name ?
|
|
178
|
+
.map(e => e.Name === group.primaryEntity.Name ? chalk.bold(e.Name) : e.Name)
|
|
208
179
|
.join(', ');
|
|
209
|
-
spinner.warn(
|
|
180
|
+
spinner.warn(chalk.yellow(`${groupPrefix} Error processing ${entityDisplay}: ${extractErrorMessage(error, 'Query Generation')}`));
|
|
210
181
|
}
|
|
211
182
|
}
|
|
212
183
|
// 7. Export results
|
|
213
184
|
spinner.start(`Exporting ${allValidatedQueries.length} queries...`);
|
|
214
185
|
if (config.outputMode === 'metadata' || config.outputMode === 'both') {
|
|
215
|
-
const exporter = new
|
|
186
|
+
const exporter = new MetadataExporter();
|
|
216
187
|
const exportResult = await exporter.exportQueries(allValidatedQueries, uniqueCategories, config);
|
|
217
|
-
spinner.succeed(
|
|
188
|
+
spinner.succeed(chalk.green(`Exported to ${exportResult.outputPath}`));
|
|
218
189
|
}
|
|
219
190
|
if (config.outputMode === 'database' || config.outputMode === 'both') {
|
|
220
|
-
const dbWriter = new
|
|
191
|
+
const dbWriter = new QueryDatabaseWriter();
|
|
221
192
|
await dbWriter.writeQueriesToDatabase(allValidatedQueries, contextUser);
|
|
222
|
-
spinner.succeed(
|
|
193
|
+
spinner.succeed(chalk.green(`Wrote ${allValidatedQueries.length} queries to database`));
|
|
223
194
|
}
|
|
224
195
|
// 8. Summary
|
|
225
|
-
console.log('\n' +
|
|
226
|
-
console.log(
|
|
227
|
-
console.log(` Entity Groups Processed: ${
|
|
228
|
-
console.log(` Queries Generated: ${
|
|
229
|
-
console.log(` Output Location: ${
|
|
196
|
+
console.log('\n' + chalk.green.bold('â Query generation complete!\n'));
|
|
197
|
+
console.log(chalk.bold('Summary:'));
|
|
198
|
+
console.log(` Entity Groups Processed: ${chalk.cyan(processedGroups.toString())}`);
|
|
199
|
+
console.log(` Queries Generated: ${chalk.green(allValidatedQueries.length.toString())}`);
|
|
200
|
+
console.log(` Output Location: ${chalk.dim(config.outputDirectory)}`);
|
|
230
201
|
process.exit(0);
|
|
231
202
|
}
|
|
232
203
|
catch (error) {
|
|
233
|
-
spinner.fail(
|
|
234
|
-
console.error(
|
|
204
|
+
spinner.fail(chalk.red('Query generation failed'));
|
|
205
|
+
console.error(chalk.red(extractErrorMessage(error, 'Query Generation')));
|
|
235
206
|
process.exit(1);
|
|
236
207
|
}
|
|
237
208
|
}
|
|
238
|
-
exports.generateCommand = generateCommand;
|
|
239
209
|
/**
|
|
240
210
|
* Load golden queries from JSON file
|
|
241
211
|
*
|
|
@@ -253,7 +223,7 @@ async function loadGoldenQueries(config) {
|
|
|
253
223
|
// Check if file exists
|
|
254
224
|
if (!fs.existsSync(goldenQueriesPath)) {
|
|
255
225
|
if (config.verbose) {
|
|
256
|
-
|
|
226
|
+
LogStatus(`[Warning] Golden queries file not found at: ${goldenQueriesPath}`);
|
|
257
227
|
}
|
|
258
228
|
return [];
|
|
259
229
|
}
|
|
@@ -263,18 +233,18 @@ async function loadGoldenQueries(config) {
|
|
|
263
233
|
// Validate that it's an array
|
|
264
234
|
if (!Array.isArray(goldenQueries)) {
|
|
265
235
|
if (config.verbose) {
|
|
266
|
-
|
|
236
|
+
LogStatus('[Warning] Golden queries file does not contain an array');
|
|
267
237
|
}
|
|
268
238
|
return [];
|
|
269
239
|
}
|
|
270
240
|
if (config.verbose) {
|
|
271
|
-
|
|
241
|
+
LogStatus(`[Info] Loaded ${goldenQueries.length} golden queries for few-shot learning`);
|
|
272
242
|
}
|
|
273
243
|
return goldenQueries;
|
|
274
244
|
}
|
|
275
245
|
catch (error) {
|
|
276
246
|
if (config.verbose) {
|
|
277
|
-
|
|
247
|
+
LogStatus(`[Warning] Failed to load golden queries: ${extractErrorMessage(error, 'loadGoldenQueries')}`);
|
|
278
248
|
}
|
|
279
249
|
return [];
|
|
280
250
|
}
|