@garrix82/reactgenie-dsl 1.0.0 → 1.0.2
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/.env +10 -0
- package/.env.example +17 -0
- package/.github/workflows/publish.yml +20 -0
- package/README.md +5 -1
- package/package.json +1 -5
- package/dist/__test__/dsl-descriptor.test.d.ts +0 -1
- package/dist/__test__/dsl-descriptor.test.js +0 -27
- package/dist/__test__/dsl-descriptor.test.js.map +0 -1
- package/dist/__test__/example_descriptor.d.ts +0 -125
- package/dist/__test__/example_descriptor.js +0 -607
- package/dist/__test__/example_descriptor.js.map +0 -1
- package/dist/__test__/food_descriptor.state.json +0 -1
- package/dist/__test__/food_descriptor.test.d.ts +0 -74
- package/dist/__test__/food_descriptor.test.js +0 -205
- package/dist/__test__/food_descriptor.test.js.map +0 -1
- package/dist/__test__/nl-interpreter-provider-selection.test.d.ts +0 -1
- package/dist/__test__/nl-interpreter-provider-selection.test.js +0 -73
- package/dist/__test__/nl-interpreter-provider-selection.test.js.map +0 -1
- package/dist/__test__/nl-interpreter.test.d.ts +0 -1
- package/dist/__test__/nl-interpreter.test.js +0 -86
- package/dist/__test__/nl-interpreter.test.js.map +0 -1
- package/dist/decorators/__test__/decorators.test.d.ts +0 -1
- package/dist/decorators/__test__/decorators.test.js +0 -182
- package/dist/decorators/__test__/decorators.test.js.map +0 -1
- package/dist/decorators/__test__/inheritance-descriptor.test.d.ts +0 -1
- package/dist/decorators/__test__/inheritance-descriptor.test.js +0 -107
- package/dist/decorators/__test__/inheritance-descriptor.test.js.map +0 -1
- package/dist/dsl/__test__/dsl-interpreter.test.d.ts +0 -1
- package/dist/dsl/__test__/dsl-interpreter.test.js +0 -334
- package/dist/dsl/__test__/dsl-interpreter.test.js.map +0 -1
- package/dist/dsl/__test__/parser.gen.test.d.ts +0 -1
- package/dist/dsl/__test__/parser.gen.test.js +0 -283
- package/dist/dsl/__test__/parser.gen.test.js.map +0 -1
- package/dist/nl/__test__/context-aware-prompt.test.d.ts +0 -1
- package/dist/nl/__test__/context-aware-prompt.test.js +0 -247
- package/dist/nl/__test__/context-aware-prompt.test.js.map +0 -1
- package/dist/nl/__test__/context-selector.test.d.ts +0 -1
- package/dist/nl/__test__/context-selector.test.js +0 -20
- package/dist/nl/__test__/context-selector.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser-groq-transport.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser-groq-transport.test.js +0 -87
- package/dist/nl/__test__/nl-parser-groq-transport.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser-openai-parity.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser-openai-parity.test.js +0 -206
- package/dist/nl/__test__/nl-parser-openai-parity.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser-openai-sampling.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser-openai-sampling.test.js +0 -44
- package/dist/nl/__test__/nl-parser-openai-sampling.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser-openai-transport.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser-openai-transport.test.js +0 -55
- package/dist/nl/__test__/nl-parser-openai-transport.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser-utils.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser-utils.test.js +0 -70
- package/dist/nl/__test__/nl-parser-utils.test.js.map +0 -1
- package/dist/nl/__test__/nl-parser.test.d.ts +0 -1
- package/dist/nl/__test__/nl-parser.test.js +0 -64
- package/dist/nl/__test__/nl-parser.test.js.map +0 -1
- package/dist/nl/__test__/parameter-tuning.test.d.ts +0 -1
- package/dist/nl/__test__/parameter-tuning.test.js +0 -95
- package/dist/nl/__test__/parameter-tuning.test.js.map +0 -1
- package/dist/nl/__test__/semantic-parsing-experiment.test.d.ts +0 -1
- package/dist/nl/__test__/semantic-parsing-experiment.test.js +0 -178
- package/dist/nl/__test__/semantic-parsing-experiment.test.js.map +0 -1
- package/dist/nl/llm-monitoring.test.d.ts +0 -5
- package/dist/nl/llm-monitoring.test.js +0 -101
- package/dist/nl/llm-monitoring.test.js.map +0 -1
- package/lib/__test__/dsl-descriptor.test.ts +0 -27
- package/lib/__test__/example_descriptor.ts +0 -762
- package/lib/__test__/food_descriptor.state.json +0 -1
- package/lib/__test__/food_descriptor.test.ts +0 -331
- package/lib/__test__/nl-interpreter-provider-selection.test.ts +0 -126
- package/lib/__test__/nl-interpreter.test.ts +0 -129
- package/lib/decorators/__test__/decorators.test.ts +0 -177
- package/lib/decorators/__test__/inheritance-descriptor.test.ts +0 -92
- package/lib/decorators/decorators.ts +0 -754
- package/lib/decorators/index.ts +0 -2
- package/lib/decorators/store.ts +0 -47
- package/lib/dsl/__test__/dsl-interpreter.test.ts +0 -453
- package/lib/dsl/__test__/parser.gen.test.ts +0 -296
- package/lib/dsl/dsl-interpreter.ts +0 -974
- package/lib/dsl/index.ts +0 -1
- package/lib/dsl/parser.gen.js +0 -1479
- package/lib/dsl/parser.pegjs +0 -130
- package/lib/dsl-descriptor.ts +0 -241
- package/lib/index.ts +0 -5
- package/lib/nl/__test__/context-aware-prompt.test.ts +0 -372
- package/lib/nl/__test__/context-selector.test.ts +0 -27
- package/lib/nl/__test__/nl-parser-groq-transport.test.ts +0 -139
- package/lib/nl/__test__/nl-parser-openai-parity.test.ts +0 -381
- package/lib/nl/__test__/nl-parser-openai-sampling.test.ts +0 -73
- package/lib/nl/__test__/nl-parser-openai-transport.test.ts +0 -79
- package/lib/nl/__test__/nl-parser-utils.test.ts +0 -98
- package/lib/nl/__test__/nl-parser.test.ts +0 -119
- package/lib/nl/__test__/parameter-tuning.test.ts +0 -137
- package/lib/nl/__test__/semantic-parsing-experiment.test.ts +0 -260
- package/lib/nl/context-selector.ts +0 -123
- package/lib/nl/index.ts +0 -19
- package/lib/nl/llm-monitoring.test.ts +0 -136
- package/lib/nl/llm-monitoring.ts +0 -339
- package/lib/nl/nl-parser-groq.ts +0 -510
- package/lib/nl/nl-parser-utils.ts +0 -310
- package/lib/nl/nl-parser.ts +0 -616
- package/lib/nl/prompt-gen.ts +0 -607
- package/lib/nl/prompt-res.ts +0 -207
- package/lib/nl-interpreter.ts +0 -262
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const nl_parser_groq_1 = require("../nl-parser-groq");
|
|
4
|
-
const prompt_gen_1 = require("../prompt-gen");
|
|
5
|
-
const example_descriptor_1 = require("../../__test__/example_descriptor");
|
|
6
|
-
const decorators_1 = require("../../decorators");
|
|
7
|
-
(0, decorators_1.initGenie)();
|
|
8
|
-
jest.setTimeout(180000);
|
|
9
|
-
const testCases = [
|
|
10
|
-
{
|
|
11
|
-
name: 'Basic query',
|
|
12
|
-
input: 'get me the cheapest restaurant in palo alto',
|
|
13
|
-
expected: 'Restaurant.all().matching(field: .address, value: "palo alto").sort(field: .priceGrade, ascending: true)[0]',
|
|
14
|
-
method: 'parse'
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: 'Complex query',
|
|
18
|
-
input: 'order the same burger that I ordered at mcDonald last time',
|
|
19
|
-
expected: 'Order.current().addFoods(foods: [Order.all().matching(field: .restaurant, value: Restaurant.all().matching(field: .name, value: "mcDonald")[0]).sort(field: .dateTime, ascending: false)[0].foods.matching(field: .name, value: "burger")[0]])',
|
|
20
|
-
method: 'parse'
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: 'Voice recognition query',
|
|
24
|
-
input: 'elder the same foods that I ordered at mcDonald last time',
|
|
25
|
-
expected: 'Order.current().addFoods(foods: Order.all().matching(field: .restaurant, value: Restaurant.all().matching(field: .name, value: "mcDonald")[0]).sort(field: .dateTime, ascending: false)[0].foods)',
|
|
26
|
-
method: 'parseGpt4',
|
|
27
|
-
extraPrompt: '// We utilize voice recognition technology, which may occasionally result in errors. Please consider the possibility of words with similar sounds being misinterpreted. For instance, the word "order" might be mistakenly recognized as "elder".'
|
|
28
|
-
}
|
|
29
|
-
];
|
|
30
|
-
const parameterSets = [
|
|
31
|
-
{ name: 'Baseline (temp=0.2)', temperature: 0.2, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
32
|
-
{ name: 'Very deterministic', temperature: 0, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
33
|
-
{ name: 'Slightly random', temperature: 0.1, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
34
|
-
{ name: 'More creative', temperature: 0.3, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
35
|
-
{ name: 'Moderate creative', temperature: 0.5, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
36
|
-
{ name: 'Narrow top_p', temperature: 0.2, top_p: 0.8, frequency_penalty: 0, presence_penalty: 0 },
|
|
37
|
-
{ name: 'Very narrow top_p', temperature: 0.2, top_p: 0.5, frequency_penalty: 0, presence_penalty: 0 },
|
|
38
|
-
{ name: 'Tighter sampling', temperature: 0.1, top_p: 0.9, frequency_penalty: 0, presence_penalty: 0 },
|
|
39
|
-
{ name: 'Low freq penalty', temperature: 0.2, top_p: 1, frequency_penalty: 0.2, presence_penalty: 0 },
|
|
40
|
-
{ name: 'Medium freq penalty', temperature: 0.2, top_p: 1, frequency_penalty: 0.5, presence_penalty: 0 },
|
|
41
|
-
{ name: 'High freq penalty', temperature: 0.2, top_p: 1, frequency_penalty: 1.0, presence_penalty: 0 },
|
|
42
|
-
{ name: 'Low pres penalty', temperature: 0.2, top_p: 1, frequency_penalty: 0, presence_penalty: 0.2 },
|
|
43
|
-
{ name: 'Medium pres penalty', temperature: 0.2, top_p: 1, frequency_penalty: 0, presence_penalty: 0.5 },
|
|
44
|
-
{ name: 'Balanced penalties', temperature: 0.2, top_p: 1, frequency_penalty: 0.3, presence_penalty: 0.3 },
|
|
45
|
-
{ name: 'Strong penalties', temperature: 0.1, top_p: 0.9, frequency_penalty: 0.5, presence_penalty: 0.5 },
|
|
46
|
-
{ name: 'Code-optimized 1', temperature: 0, top_p: 0.95, frequency_penalty: 0, presence_penalty: 0 },
|
|
47
|
-
{ name: 'Code-optimized 2', temperature: 0.1, top_p: 0.95, frequency_penalty: 0.1, presence_penalty: 0 },
|
|
48
|
-
{ name: 'Code-optimized 3', temperature: 0.15, top_p: 0.9, frequency_penalty: 0.2, presence_penalty: 0.1 },
|
|
49
|
-
];
|
|
50
|
-
describe('Parameter Tuning Experiments', () => {
|
|
51
|
-
describe.skip('Comprehensive Parameter Testing', () => {
|
|
52
|
-
parameterSets.forEach((params) => {
|
|
53
|
-
describe(`Config: ${params.name}`, () => {
|
|
54
|
-
testCases.forEach((testCase) => {
|
|
55
|
-
test(`${testCase.name}`, async () => {
|
|
56
|
-
const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples, testCase.extraPrompt), process.env.GROQ_API_KEY || 'test-key', 'llama-3.3-70b-versatile', params);
|
|
57
|
-
let parsed;
|
|
58
|
-
if (testCase.method === 'parseGpt4') {
|
|
59
|
-
parsed = await parser.parseGpt4(testCase.input);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
parsed = await parser.parse(testCase.input);
|
|
63
|
-
}
|
|
64
|
-
const matches = parsed === testCase.expected;
|
|
65
|
-
console.log(`\n📊 ${params.name} - ${testCase.name}`);
|
|
66
|
-
console.log(` Temperature: ${params.temperature}, Top-p: ${params.top_p}, Freq: ${params.frequency_penalty}, Pres: ${params.presence_penalty}`);
|
|
67
|
-
console.log(` ✓ Match: ${matches ? '✅ EXACT' : '❌ DIFF'}`);
|
|
68
|
-
if (!matches) {
|
|
69
|
-
console.log(` Expected: ${testCase.expected.substring(0, 80)}...`);
|
|
70
|
-
console.log(` Got: ${parsed?.substring(0, 80)}...`);
|
|
71
|
-
}
|
|
72
|
-
expect(parsed).toBeDefined();
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('Quick Parameter Comparison', () => {
|
|
79
|
-
const focusedParams = [
|
|
80
|
-
{ name: 'Baseline', temperature: 0.2, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
81
|
-
{ name: 'Deterministic', temperature: 0, top_p: 1, frequency_penalty: 0, presence_penalty: 0 },
|
|
82
|
-
{ name: 'Code-optimized', temperature: 0.1, top_p: 0.95, frequency_penalty: 0.1, presence_penalty: 0 },
|
|
83
|
-
];
|
|
84
|
-
focusedParams.forEach((params) => {
|
|
85
|
-
test(`Quick test: ${params.name}`, async () => {
|
|
86
|
-
const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples), process.env.GROQ_API_KEY || 'test-key', 'llama-3.3-70b-versatile', params);
|
|
87
|
-
const parsed = await parser.parse('get me the cheapest restaurant in palo alto');
|
|
88
|
-
console.log(`\n🎯 ${params.name}:`);
|
|
89
|
-
console.log(` Result: ${parsed?.substring(0, 100)}...`);
|
|
90
|
-
expect(parsed).toBeDefined();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=parameter-tuning.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parameter-tuning.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/parameter-tuning.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const nl_parser_groq_1 = require("../nl-parser-groq");
|
|
4
|
-
const prompt_gen_1 = require("../prompt-gen");
|
|
5
|
-
const example_descriptor_1 = require("../../__test__/example_descriptor");
|
|
6
|
-
const decorators_1 = require("../../decorators");
|
|
7
|
-
(0, decorators_1.initGenie)();
|
|
8
|
-
jest.setTimeout(300000);
|
|
9
|
-
const testCases = [
|
|
10
|
-
{
|
|
11
|
-
name: 'Basic query',
|
|
12
|
-
input: 'get me the cheapest restaurant in palo alto',
|
|
13
|
-
expected: 'Restaurant.all().matching(field: .address, value: "palo alto").sort(field: .priceGrade, ascending: true)[0]',
|
|
14
|
-
method: 'parse'
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: 'Complex query',
|
|
18
|
-
input: 'order the same burger that I ordered at mcDonald last time',
|
|
19
|
-
expected: 'Order.current().addFoods(foods: [Order.all().matching(field: .restaurant, value: Restaurant.all().matching(field: .name, value: "mcDonald")[0]).sort(field: .dateTime, ascending: false)[0].foods.matching(field: .name, value: "burger")[0]])',
|
|
20
|
-
method: 'parse'
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: 'Voice recognition query',
|
|
24
|
-
input: 'elder the same foods that I ordered at mcDonald last time',
|
|
25
|
-
expected: 'Order.current().addFoods(foods: Order.all().matching(field: .restaurant, value: Restaurant.all().matching(field: .name, value: "mcDonald")[0]).sort(field: .dateTime, ascending: false)[0].foods)',
|
|
26
|
-
method: 'parseGpt4',
|
|
27
|
-
extraPrompt: '// We utilize voice recognition technology, which may occasionally result in errors. Please consider the possibility of words with similar sounds being misinterpreted. For instance, the word "order" might be mistakenly recognized as "elder".'
|
|
28
|
-
}
|
|
29
|
-
];
|
|
30
|
-
const experimentConfigs = [
|
|
31
|
-
{ name: 'Current (temp=0.2)', params: { temperature: 0.2, top_p: 1, frequency_penalty: 0, presence_penalty: 0 } },
|
|
32
|
-
{ name: 'Deterministic (temp=0)', params: { temperature: 0, top_p: 1, frequency_penalty: 0, presence_penalty: 0 } },
|
|
33
|
-
{ name: 'Low temp (0.1)', params: { temperature: 0.1, top_p: 1, frequency_penalty: 0, presence_penalty: 0 } },
|
|
34
|
-
{ name: 'Medium temp (0.3)', params: { temperature: 0.3, top_p: 1, frequency_penalty: 0, presence_penalty: 0 } },
|
|
35
|
-
{ name: 'Narrow sampling (top_p=0.9)', params: { temperature: 0.2, top_p: 0.9, frequency_penalty: 0, presence_penalty: 0 } },
|
|
36
|
-
{ name: 'Very narrow (top_p=0.8)', params: { temperature: 0.2, top_p: 0.8, frequency_penalty: 0, presence_penalty: 0 } },
|
|
37
|
-
{ name: 'Code-opt 1', params: { temperature: 0, top_p: 0.95, frequency_penalty: 0, presence_penalty: 0 } },
|
|
38
|
-
{ name: 'Code-opt 2', params: { temperature: 0.1, top_p: 0.95, frequency_penalty: 0.1, presence_penalty: 0 } },
|
|
39
|
-
{ name: 'Code-opt 3', params: { temperature: 0.15, top_p: 0.9, frequency_penalty: 0.2, presence_penalty: 0.1 } },
|
|
40
|
-
{ name: 'With freq penalty', params: { temperature: 0.2, top_p: 1, frequency_penalty: 0.3, presence_penalty: 0 } },
|
|
41
|
-
{ name: 'Balanced penalties', params: { temperature: 0.2, top_p: 1, frequency_penalty: 0.2, presence_penalty: 0.2 } },
|
|
42
|
-
];
|
|
43
|
-
function calculateSimilarity(str1, str2) {
|
|
44
|
-
if (!str1)
|
|
45
|
-
return 0;
|
|
46
|
-
if (str1 === str2)
|
|
47
|
-
return 1.0;
|
|
48
|
-
const longer = str1.length > str2.length ? str1 : str2;
|
|
49
|
-
const shorter = str1.length > str2.length ? str2 : str1;
|
|
50
|
-
if (longer.length === 0)
|
|
51
|
-
return 1.0;
|
|
52
|
-
const editDistance = levenshteinDistance(str1, str2);
|
|
53
|
-
return (longer.length - editDistance) / longer.length;
|
|
54
|
-
}
|
|
55
|
-
function levenshteinDistance(str1, str2) {
|
|
56
|
-
const matrix = [];
|
|
57
|
-
for (let i = 0; i <= str2.length; i++) {
|
|
58
|
-
matrix[i] = [i];
|
|
59
|
-
}
|
|
60
|
-
for (let j = 0; j <= str1.length; j++) {
|
|
61
|
-
matrix[0][j] = j;
|
|
62
|
-
}
|
|
63
|
-
for (let i = 1; i <= str2.length; i++) {
|
|
64
|
-
for (let j = 1; j <= str1.length; j++) {
|
|
65
|
-
if (str2.charAt(i - 1) === str1.charAt(j - 1)) {
|
|
66
|
-
matrix[i][j] = matrix[i - 1][j - 1];
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return matrix[str2.length][str1.length];
|
|
74
|
-
}
|
|
75
|
-
describe('🔬 Semantic Parsing Parameter Experiments', () => {
|
|
76
|
-
let allResults = [];
|
|
77
|
-
describe('Run experiments', () => {
|
|
78
|
-
experimentConfigs.forEach((config) => {
|
|
79
|
-
describe(`Config: ${config.name}`, () => {
|
|
80
|
-
testCases.forEach((testCase) => {
|
|
81
|
-
test(testCase.name, async () => {
|
|
82
|
-
const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples, testCase.extraPrompt), process.env.GROQ_API_KEY || 'test-key', 'llama-3.3-70b-versatile', config.params);
|
|
83
|
-
let output;
|
|
84
|
-
if (testCase.method === 'parseGpt4') {
|
|
85
|
-
output = await parser.parseGpt4(testCase.input);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
output = await parser.parse(testCase.input);
|
|
89
|
-
}
|
|
90
|
-
const exactMatch = output === testCase.expected;
|
|
91
|
-
const similarity = calculateSimilarity(output, testCase.expected);
|
|
92
|
-
const result = {
|
|
93
|
-
configName: config.name,
|
|
94
|
-
params: config.params,
|
|
95
|
-
testName: testCase.name,
|
|
96
|
-
input: testCase.input,
|
|
97
|
-
output: output,
|
|
98
|
-
expected: testCase.expected,
|
|
99
|
-
exactMatch,
|
|
100
|
-
similarityScore: similarity
|
|
101
|
-
};
|
|
102
|
-
allResults.push(result);
|
|
103
|
-
console.log(`\n${exactMatch ? '✅' : '❌'} ${config.name} - ${testCase.name}`);
|
|
104
|
-
console.log(` Params: temp=${config.params.temperature}, top_p=${config.params.top_p}, freq=${config.params.frequency_penalty}, pres=${config.params.presence_penalty}`);
|
|
105
|
-
console.log(` Similarity: ${(similarity * 100).toFixed(1)}%`);
|
|
106
|
-
if (!exactMatch && output) {
|
|
107
|
-
console.log(` Expected: ${testCase.expected.substring(0, 60)}...`);
|
|
108
|
-
console.log(` Got: ${output.substring(0, 60)}...`);
|
|
109
|
-
}
|
|
110
|
-
expect(output).toBeDefined();
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
describe('📊 Summary and Recommendations', () => {
|
|
117
|
-
test('Analyze results', () => {
|
|
118
|
-
console.log('\n\n' + '='.repeat(80));
|
|
119
|
-
console.log('📊 EXPERIMENT SUMMARY');
|
|
120
|
-
console.log('='.repeat(80));
|
|
121
|
-
const configSummaries = new Map();
|
|
122
|
-
allResults.forEach(result => {
|
|
123
|
-
if (!configSummaries.has(result.configName)) {
|
|
124
|
-
configSummaries.set(result.configName, { totalTests: 0, exactMatches: 0, avgSimilarity: 0 });
|
|
125
|
-
}
|
|
126
|
-
const summary = configSummaries.get(result.configName);
|
|
127
|
-
summary.totalTests++;
|
|
128
|
-
if (result.exactMatch)
|
|
129
|
-
summary.exactMatches++;
|
|
130
|
-
summary.avgSimilarity += result.similarityScore;
|
|
131
|
-
});
|
|
132
|
-
const sortedConfigs = Array.from(configSummaries.entries())
|
|
133
|
-
.map(([name, data]) => ({
|
|
134
|
-
name,
|
|
135
|
-
...data,
|
|
136
|
-
avgSimilarity: data.avgSimilarity / data.totalTests,
|
|
137
|
-
successRate: (data.exactMatches / data.totalTests) * 100
|
|
138
|
-
}))
|
|
139
|
-
.sort((a, b) => {
|
|
140
|
-
if (b.exactMatches !== a.exactMatches) {
|
|
141
|
-
return b.exactMatches - a.exactMatches;
|
|
142
|
-
}
|
|
143
|
-
return b.avgSimilarity - a.avgSimilarity;
|
|
144
|
-
});
|
|
145
|
-
console.log('\n🏆 Configuration Rankings:');
|
|
146
|
-
console.log('-'.repeat(80));
|
|
147
|
-
sortedConfigs.forEach((config, index) => {
|
|
148
|
-
const params = allResults.find(r => r.configName === config.name)?.params;
|
|
149
|
-
console.log(`\n${index + 1}. ${config.name}`);
|
|
150
|
-
console.log(` Success Rate: ${config.successRate.toFixed(1)}% (${config.exactMatches}/${config.totalTests} exact matches)`);
|
|
151
|
-
console.log(` Avg Similarity: ${(config.avgSimilarity * 100).toFixed(1)}%`);
|
|
152
|
-
if (params) {
|
|
153
|
-
console.log(` Parameters: temp=${params.temperature}, top_p=${params.top_p}, freq=${params.frequency_penalty}, pres=${params.presence_penalty}`);
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
console.log('\n' + '='.repeat(80));
|
|
157
|
-
console.log('🎯 RECOMMENDATION');
|
|
158
|
-
console.log('='.repeat(80));
|
|
159
|
-
const best = sortedConfigs[0];
|
|
160
|
-
const bestParams = allResults.find(r => r.configName === best.name)?.params;
|
|
161
|
-
console.log(`\n✨ Best Configuration: ${best.name}`);
|
|
162
|
-
console.log(` Success Rate: ${best.successRate.toFixed(1)}%`);
|
|
163
|
-
console.log(` Average Similarity: ${(best.avgSimilarity * 100).toFixed(1)}%`);
|
|
164
|
-
if (bestParams) {
|
|
165
|
-
console.log(`\n Recommended Parameters:`);
|
|
166
|
-
console.log(` {`);
|
|
167
|
-
console.log(` temperature: ${bestParams.temperature},`);
|
|
168
|
-
console.log(` top_p: ${bestParams.top_p},`);
|
|
169
|
-
console.log(` frequency_penalty: ${bestParams.frequency_penalty},`);
|
|
170
|
-
console.log(` presence_penalty: ${bestParams.presence_penalty}`);
|
|
171
|
-
console.log(` }`);
|
|
172
|
-
}
|
|
173
|
-
console.log('\n' + '='.repeat(80) + '\n');
|
|
174
|
-
expect(allResults.length).toBeGreaterThan(0);
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
//# sourceMappingURL=semantic-parsing-experiment.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-parsing-experiment.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/semantic-parsing-experiment.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/// <reference types="jest" />
|
|
2
|
-
declare const mockCreateRun: jest.Mock<any, any, any>;
|
|
3
|
-
declare const mockTraceable: jest.Mock<any, [fn: any], any>;
|
|
4
|
-
declare const mockGetCurrentRunTree: jest.Mock<any, any, any>;
|
|
5
|
-
declare function loadMonitor(): typeof import("./llm-monitoring");
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
const mockCreateRun = jest.fn();
|
|
2
|
-
const mockTraceable = jest.fn((fn) => fn);
|
|
3
|
-
const mockGetCurrentRunTree = jest.fn();
|
|
4
|
-
jest.mock("langsmith", () => ({
|
|
5
|
-
Client: jest.fn().mockImplementation(() => ({
|
|
6
|
-
createRun: mockCreateRun,
|
|
7
|
-
})),
|
|
8
|
-
}));
|
|
9
|
-
jest.mock("langsmith/traceable", () => ({
|
|
10
|
-
traceable: mockTraceable,
|
|
11
|
-
getCurrentRunTree: mockGetCurrentRunTree,
|
|
12
|
-
}));
|
|
13
|
-
function loadMonitor() {
|
|
14
|
-
return require("./llm-monitoring");
|
|
15
|
-
}
|
|
16
|
-
describe("LLMMonitor tracing", () => {
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
jest.clearAllMocks();
|
|
19
|
-
jest.resetModules();
|
|
20
|
-
});
|
|
21
|
-
it("wraps traced calls with langsmith traceable chain runs", async () => {
|
|
22
|
-
const { getLLMMonitor } = loadMonitor();
|
|
23
|
-
const monitor = getLLMMonitor({
|
|
24
|
-
apiKey: "ls-test-key",
|
|
25
|
-
project: "reactgenie-dsl",
|
|
26
|
-
});
|
|
27
|
-
await monitor.traceCall("parse-command", { model: "gpt-4o-mini", provider: "openai" }, async () => "ok");
|
|
28
|
-
expect(mockTraceable).toHaveBeenCalledWith(expect.any(Function), expect.objectContaining({
|
|
29
|
-
name: "parse-command",
|
|
30
|
-
run_type: "chain",
|
|
31
|
-
project_name: "reactgenie-dsl",
|
|
32
|
-
}));
|
|
33
|
-
});
|
|
34
|
-
it("logs llm child runs with token and cost metadata", async () => {
|
|
35
|
-
const childRun = {
|
|
36
|
-
postRun: jest.fn().mockResolvedValue(undefined),
|
|
37
|
-
end: jest.fn().mockResolvedValue(undefined),
|
|
38
|
-
patchRun: jest.fn().mockResolvedValue(undefined),
|
|
39
|
-
};
|
|
40
|
-
const createChild = jest.fn().mockReturnValue(childRun);
|
|
41
|
-
mockGetCurrentRunTree.mockReturnValue({ createChild });
|
|
42
|
-
const { getLLMMonitor } = loadMonitor();
|
|
43
|
-
const monitor = getLLMMonitor({
|
|
44
|
-
apiKey: "ls-test-key",
|
|
45
|
-
project: "reactgenie-dsl",
|
|
46
|
-
});
|
|
47
|
-
await monitor.logCall({
|
|
48
|
-
model: "gpt-4o-mini",
|
|
49
|
-
provider: "openai",
|
|
50
|
-
promptTokens: 12,
|
|
51
|
-
completionTokens: 4,
|
|
52
|
-
totalTokens: 16,
|
|
53
|
-
inputCost: 0.00003,
|
|
54
|
-
outputCost: 0.00008,
|
|
55
|
-
totalCost: 0.00011,
|
|
56
|
-
prompt: "hello",
|
|
57
|
-
completion: "world",
|
|
58
|
-
latency: 42,
|
|
59
|
-
timestamp: new Date("2026-03-11T10:00:00.000Z"),
|
|
60
|
-
error: "upstream failed",
|
|
61
|
-
});
|
|
62
|
-
expect(createChild).toHaveBeenCalledWith(expect.objectContaining({
|
|
63
|
-
run_type: "llm",
|
|
64
|
-
inputs: { prompt: "hello" },
|
|
65
|
-
}));
|
|
66
|
-
expect(childRun.end).toHaveBeenCalledWith(expect.objectContaining({
|
|
67
|
-
completion: "world",
|
|
68
|
-
usage_metadata: expect.objectContaining({
|
|
69
|
-
input_tokens: 12,
|
|
70
|
-
output_tokens: 4,
|
|
71
|
-
total_tokens: 16,
|
|
72
|
-
input_cost: 0.00003,
|
|
73
|
-
output_cost: 0.00008,
|
|
74
|
-
total_cost: 0.00011,
|
|
75
|
-
}),
|
|
76
|
-
}), "upstream failed", expect.any(Number));
|
|
77
|
-
expect(childRun.patchRun).toHaveBeenCalled();
|
|
78
|
-
});
|
|
79
|
-
it("does not emit synthetic failed llm runs from traceCall failures", async () => {
|
|
80
|
-
const captureException = jest.fn();
|
|
81
|
-
const { getLLMMonitor } = loadMonitor();
|
|
82
|
-
const monitor = getLLMMonitor({
|
|
83
|
-
apiKey: "ls-test-key",
|
|
84
|
-
project: "reactgenie-dsl",
|
|
85
|
-
telemetryBridge: {
|
|
86
|
-
captureException,
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
await expect(monitor.traceCall("parse-command", { model: "gpt-4o-mini", provider: "openai" }, async () => {
|
|
90
|
-
throw new Error("trace failed");
|
|
91
|
-
})).rejects.toThrow("trace failed");
|
|
92
|
-
expect(captureException).toHaveBeenCalledWith(expect.objectContaining({ message: "trace failed" }), expect.objectContaining({
|
|
93
|
-
source: "llm-monitor",
|
|
94
|
-
name: "parse-command",
|
|
95
|
-
model: "gpt-4o-mini",
|
|
96
|
-
provider: "openai",
|
|
97
|
-
}));
|
|
98
|
-
expect(mockCreateRun).not.toHaveBeenCalled();
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
//# sourceMappingURL=llm-monitoring.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-monitoring.test.js","sourceRoot":"","sources":["../../lib/nl/llm-monitoring.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Restaurant } from "./example_descriptor";
|
|
2
|
-
|
|
3
|
-
test("Restaurant Description", async () => {
|
|
4
|
-
const description = Restaurant._ClassDescriptor.description();
|
|
5
|
-
expect(description).toEqual(
|
|
6
|
-
"// A restaurant\n" +
|
|
7
|
-
"class Restaurant {\n" +
|
|
8
|
-
"\tstring name;\n" +
|
|
9
|
-
"\tFood[] menu;\n" +
|
|
10
|
-
"\tint rating;\n" +
|
|
11
|
-
"\tfloat priceGrade;\n" +
|
|
12
|
-
"\tstring cuisine;\n" +
|
|
13
|
-
"\tstring address;\n" +
|
|
14
|
-
"\tOrder[] orders;\n" +
|
|
15
|
-
"\t// All active restaurants\n" +
|
|
16
|
-
"\tstatic Restaurant[] all();\n" +
|
|
17
|
-
"\t// All active restaurants\n" +
|
|
18
|
-
"\tstatic Restaurant[] All();\n" +
|
|
19
|
-
"\t// The current restaurant\n" +
|
|
20
|
-
"\tstatic Restaurant current();\n" +
|
|
21
|
-
"\t// Book a table for a given date time\n" +
|
|
22
|
-
"\tvoid book(dateTime: DateTime? = `DateTime.today()`);\n" +
|
|
23
|
-
"\t// Book numbers tables for a given date time\n" +
|
|
24
|
-
"\tvoid bookTable(dateTime: DateTime?, number: int?);\n" +
|
|
25
|
-
"}"
|
|
26
|
-
);
|
|
27
|
-
});
|