@garrix82/reactgenie-dsl 1.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/README.md +436 -0
- package/dist/__test__/dsl-descriptor.test.d.ts +1 -0
- package/dist/__test__/dsl-descriptor.test.js +27 -0
- package/dist/__test__/dsl-descriptor.test.js.map +1 -0
- package/dist/__test__/example_descriptor.d.ts +125 -0
- package/dist/__test__/example_descriptor.js +607 -0
- package/dist/__test__/example_descriptor.js.map +1 -0
- package/dist/__test__/food_descriptor.state.json +1 -0
- package/dist/__test__/food_descriptor.test.d.ts +74 -0
- package/dist/__test__/food_descriptor.test.js +205 -0
- package/dist/__test__/food_descriptor.test.js.map +1 -0
- package/dist/__test__/nl-interpreter-provider-selection.test.d.ts +1 -0
- package/dist/__test__/nl-interpreter-provider-selection.test.js +73 -0
- package/dist/__test__/nl-interpreter-provider-selection.test.js.map +1 -0
- package/dist/__test__/nl-interpreter.test.d.ts +1 -0
- package/dist/__test__/nl-interpreter.test.js +86 -0
- package/dist/__test__/nl-interpreter.test.js.map +1 -0
- package/dist/decorators/__test__/decorators.test.d.ts +1 -0
- package/dist/decorators/__test__/decorators.test.js +182 -0
- package/dist/decorators/__test__/decorators.test.js.map +1 -0
- package/dist/decorators/__test__/inheritance-descriptor.test.d.ts +1 -0
- package/dist/decorators/__test__/inheritance-descriptor.test.js +107 -0
- package/dist/decorators/__test__/inheritance-descriptor.test.js.map +1 -0
- package/dist/decorators/decorators.d.ts +20 -0
- package/dist/decorators/decorators.js +520 -0
- package/dist/decorators/decorators.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.js +19 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/store.d.ts +12 -0
- package/dist/decorators/store.js +43 -0
- package/dist/decorators/store.js.map +1 -0
- package/dist/dsl/__test__/dsl-interpreter.test.d.ts +1 -0
- package/dist/dsl/__test__/dsl-interpreter.test.js +334 -0
- package/dist/dsl/__test__/dsl-interpreter.test.js.map +1 -0
- package/dist/dsl/__test__/parser.gen.test.d.ts +1 -0
- package/dist/dsl/__test__/parser.gen.test.js +283 -0
- package/dist/dsl/__test__/parser.gen.test.js.map +1 -0
- package/dist/dsl/dsl-interpreter.d.ts +66 -0
- package/dist/dsl/dsl-interpreter.js +767 -0
- package/dist/dsl/dsl-interpreter.js.map +1 -0
- package/dist/dsl/index.d.ts +1 -0
- package/dist/dsl/index.js +18 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/parser.gen.d.ts +10 -0
- package/dist/dsl/parser.gen.js +1524 -0
- package/dist/dsl/parser.gen.js.map +1 -0
- package/dist/dsl-descriptor.d.ts +75 -0
- package/dist/dsl-descriptor.js +151 -0
- package/dist/dsl-descriptor.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/nl/__test__/context-aware-prompt.test.d.ts +1 -0
- package/dist/nl/__test__/context-aware-prompt.test.js +247 -0
- package/dist/nl/__test__/context-aware-prompt.test.js.map +1 -0
- package/dist/nl/__test__/context-selector.test.d.ts +1 -0
- package/dist/nl/__test__/context-selector.test.js +20 -0
- package/dist/nl/__test__/context-selector.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser-groq-transport.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser-groq-transport.test.js +87 -0
- package/dist/nl/__test__/nl-parser-groq-transport.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser-openai-parity.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser-openai-parity.test.js +206 -0
- package/dist/nl/__test__/nl-parser-openai-parity.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser-openai-sampling.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser-openai-sampling.test.js +44 -0
- package/dist/nl/__test__/nl-parser-openai-sampling.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser-openai-transport.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser-openai-transport.test.js +55 -0
- package/dist/nl/__test__/nl-parser-openai-transport.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser-utils.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser-utils.test.js +70 -0
- package/dist/nl/__test__/nl-parser-utils.test.js.map +1 -0
- package/dist/nl/__test__/nl-parser.test.d.ts +1 -0
- package/dist/nl/__test__/nl-parser.test.js +64 -0
- package/dist/nl/__test__/nl-parser.test.js.map +1 -0
- package/dist/nl/__test__/parameter-tuning.test.d.ts +1 -0
- package/dist/nl/__test__/parameter-tuning.test.js +95 -0
- package/dist/nl/__test__/parameter-tuning.test.js.map +1 -0
- package/dist/nl/__test__/semantic-parsing-experiment.test.d.ts +1 -0
- package/dist/nl/__test__/semantic-parsing-experiment.test.js +178 -0
- package/dist/nl/__test__/semantic-parsing-experiment.test.js.map +1 -0
- package/dist/nl/context-selector.d.ts +17 -0
- package/dist/nl/context-selector.js +99 -0
- package/dist/nl/context-selector.js.map +1 -0
- package/dist/nl/index.d.ts +6 -0
- package/dist/nl/index.js +15 -0
- package/dist/nl/index.js.map +1 -0
- package/dist/nl/llm-monitoring.d.ts +49 -0
- package/dist/nl/llm-monitoring.js +243 -0
- package/dist/nl/llm-monitoring.js.map +1 -0
- package/dist/nl/llm-monitoring.test.d.ts +5 -0
- package/dist/nl/llm-monitoring.test.js +101 -0
- package/dist/nl/llm-monitoring.test.js.map +1 -0
- package/dist/nl/nl-parser-groq.d.ts +21 -0
- package/dist/nl/nl-parser-groq.js +357 -0
- package/dist/nl/nl-parser-groq.js.map +1 -0
- package/dist/nl/nl-parser-utils.d.ts +101 -0
- package/dist/nl/nl-parser-utils.js +255 -0
- package/dist/nl/nl-parser-utils.js.map +1 -0
- package/dist/nl/nl-parser.d.ts +30 -0
- package/dist/nl/nl-parser.js +433 -0
- package/dist/nl/nl-parser.js.map +1 -0
- package/dist/nl/prompt-gen.d.ts +93 -0
- package/dist/nl/prompt-gen.js +369 -0
- package/dist/nl/prompt-gen.js.map +1 -0
- package/dist/nl/prompt-res.d.ts +16 -0
- package/dist/nl/prompt-res.js +190 -0
- package/dist/nl/prompt-res.js.map +1 -0
- package/dist/nl-interpreter.d.ts +48 -0
- package/dist/nl-interpreter.js +155 -0
- package/dist/nl-interpreter.js.map +1 -0
- package/lib/__test__/dsl-descriptor.test.ts +27 -0
- package/lib/__test__/example_descriptor.ts +762 -0
- package/lib/__test__/food_descriptor.state.json +1 -0
- package/lib/__test__/food_descriptor.test.ts +331 -0
- package/lib/__test__/nl-interpreter-provider-selection.test.ts +126 -0
- package/lib/__test__/nl-interpreter.test.ts +129 -0
- package/lib/decorators/__test__/decorators.test.ts +177 -0
- package/lib/decorators/__test__/inheritance-descriptor.test.ts +92 -0
- package/lib/decorators/decorators.ts +754 -0
- package/lib/decorators/index.ts +2 -0
- package/lib/decorators/store.ts +47 -0
- package/lib/dsl/__test__/dsl-interpreter.test.ts +453 -0
- package/lib/dsl/__test__/parser.gen.test.ts +296 -0
- package/lib/dsl/dsl-interpreter.ts +974 -0
- package/lib/dsl/index.ts +1 -0
- package/lib/dsl/parser.gen.js +1479 -0
- package/lib/dsl/parser.pegjs +130 -0
- package/lib/dsl-descriptor.ts +241 -0
- package/lib/index.ts +5 -0
- package/lib/nl/__test__/context-aware-prompt.test.ts +372 -0
- package/lib/nl/__test__/context-selector.test.ts +27 -0
- package/lib/nl/__test__/nl-parser-groq-transport.test.ts +139 -0
- package/lib/nl/__test__/nl-parser-openai-parity.test.ts +381 -0
- package/lib/nl/__test__/nl-parser-openai-sampling.test.ts +73 -0
- package/lib/nl/__test__/nl-parser-openai-transport.test.ts +79 -0
- package/lib/nl/__test__/nl-parser-utils.test.ts +98 -0
- package/lib/nl/__test__/nl-parser.test.ts +119 -0
- package/lib/nl/__test__/parameter-tuning.test.ts +137 -0
- package/lib/nl/__test__/semantic-parsing-experiment.test.ts +260 -0
- package/lib/nl/context-selector.ts +123 -0
- package/lib/nl/index.ts +19 -0
- package/lib/nl/llm-monitoring.test.ts +136 -0
- package/lib/nl/llm-monitoring.ts +339 -0
- package/lib/nl/nl-parser-groq.ts +510 -0
- package/lib/nl/nl-parser-utils.ts +310 -0
- package/lib/nl/nl-parser.ts +616 -0
- package/lib/nl/prompt-gen.ts +607 -0
- package/lib/nl/prompt-res.ts +207 -0
- package/lib/nl-interpreter.ts +262 -0
- package/package.json +58 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NlInterpreter = void 0;
|
|
4
|
+
const nl_1 = require("./nl");
|
|
5
|
+
const dsl_1 = require("./dsl");
|
|
6
|
+
const prompt_gen_1 = require("./nl/prompt-gen");
|
|
7
|
+
const DEFAULT_GROQ_BASE_URL = "https://api.groq.com/openai/v1";
|
|
8
|
+
const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
9
|
+
const PROVIDER_ENV_KEY = "GENIE_PARSER_PROVIDER";
|
|
10
|
+
function normalizeBaseUrl(baseUrl) {
|
|
11
|
+
return baseUrl.trim().replace(/\/+$/, "");
|
|
12
|
+
}
|
|
13
|
+
function stripChatCompletionsSuffix(baseUrl) {
|
|
14
|
+
if (!baseUrl.endsWith("/chat/completions")) {
|
|
15
|
+
return baseUrl;
|
|
16
|
+
}
|
|
17
|
+
return baseUrl.slice(0, -"/chat/completions".length);
|
|
18
|
+
}
|
|
19
|
+
function isDirectOpenAIBaseUrl(baseUrl) {
|
|
20
|
+
try {
|
|
21
|
+
const url = new URL(baseUrl);
|
|
22
|
+
return url.hostname === "api.openai.com";
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function normalizeProviderBaseUrl(provider, baseUrl) {
|
|
29
|
+
const fallbackBaseUrl = provider === "openai" ? DEFAULT_OPENAI_BASE_URL : DEFAULT_GROQ_BASE_URL;
|
|
30
|
+
if (!baseUrl || baseUrl.trim().length === 0) {
|
|
31
|
+
return fallbackBaseUrl;
|
|
32
|
+
}
|
|
33
|
+
const normalizedBaseUrl = stripChatCompletionsSuffix(normalizeBaseUrl(baseUrl));
|
|
34
|
+
if (normalizedBaseUrl.endsWith("/openai/v1") ||
|
|
35
|
+
normalizedBaseUrl.endsWith("/v1")) {
|
|
36
|
+
return normalizedBaseUrl;
|
|
37
|
+
}
|
|
38
|
+
if (provider === "openai" && isDirectOpenAIBaseUrl(normalizedBaseUrl)) {
|
|
39
|
+
return `${normalizedBaseUrl}/v1`;
|
|
40
|
+
}
|
|
41
|
+
return `${normalizedBaseUrl}/openai/v1`;
|
|
42
|
+
}
|
|
43
|
+
function resolveParserProvider(parserConfig) {
|
|
44
|
+
if (parserConfig?.provider === "openai" || parserConfig?.provider === "groq") {
|
|
45
|
+
return parserConfig.provider;
|
|
46
|
+
}
|
|
47
|
+
const envProvider = process.env[PROVIDER_ENV_KEY]?.trim().toLowerCase();
|
|
48
|
+
if (envProvider === "openai" || envProvider === "groq") {
|
|
49
|
+
return envProvider;
|
|
50
|
+
}
|
|
51
|
+
return "groq";
|
|
52
|
+
}
|
|
53
|
+
function requireOpenAIModel(model) {
|
|
54
|
+
const trimmed = model?.trim();
|
|
55
|
+
if (!trimmed) {
|
|
56
|
+
throw new Error("OpenAI parser requires parser.openai.model / semanticModel / SEMANTIC_MODEL configuration.");
|
|
57
|
+
}
|
|
58
|
+
return trimmed;
|
|
59
|
+
}
|
|
60
|
+
class NlInterpreter {
|
|
61
|
+
constructor(descriptions, apiKey, prompt, examples, extraPrompt, options = {}) {
|
|
62
|
+
this.descriptions = descriptions;
|
|
63
|
+
this.apiKey = apiKey;
|
|
64
|
+
this.prompt = prompt;
|
|
65
|
+
this.examples = examples;
|
|
66
|
+
this.extraPrompt = extraPrompt;
|
|
67
|
+
this.options = options;
|
|
68
|
+
if (this.prompt === undefined) {
|
|
69
|
+
console.assert(this.examples !== undefined);
|
|
70
|
+
this.prompt = new prompt_gen_1.ContextAwareDescriptorPromptGen(this.descriptions, this.examples, extraPrompt);
|
|
71
|
+
}
|
|
72
|
+
const parserConfig = this.options.parser;
|
|
73
|
+
const monitoringConfig = this.options.monitoring;
|
|
74
|
+
const provider = resolveParserProvider(parserConfig);
|
|
75
|
+
this.dslInterpreter = new dsl_1.DslInterpreter([...descriptions]);
|
|
76
|
+
this.dslValidator = new dsl_1.DslInterpreter([...descriptions], true);
|
|
77
|
+
const validateCommand = async (command) => {
|
|
78
|
+
await this.dslValidator.interpret(command);
|
|
79
|
+
};
|
|
80
|
+
if (provider === "openai") {
|
|
81
|
+
const openAIConfig = parserConfig?.openai;
|
|
82
|
+
this.nlParser = new nl_1.NlParser(this.prompt, apiKey, normalizeProviderBaseUrl("openai", openAIConfig?.baseUrl), requireOpenAIModel(openAIConfig?.model), openAIConfig?.samplingParams, monitoringConfig?.langsmithApiKey, monitoringConfig?.langsmithProject, monitoringConfig?.langsmithEndpoint, validateCommand, {
|
|
83
|
+
statefulValidationRetry: !!openAIConfig?.statefulValidationRetry,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const groqConfig = parserConfig?.groq;
|
|
88
|
+
const resolvedGroqModel = groqConfig?.model ||
|
|
89
|
+
process.env.SEMANTIC_MODEL ||
|
|
90
|
+
"llama-3.3-70b-versatile";
|
|
91
|
+
this.nlParser = new nl_1.NlParserGroq(this.prompt, apiKey, resolvedGroqModel, groqConfig?.samplingParams, normalizeProviderBaseUrl("groq", groqConfig?.baseUrl), monitoringConfig?.langsmithApiKey, monitoringConfig?.langsmithProject, monitoringConfig?.langsmithEndpoint, validateCommand);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
recordInteraction(record) {
|
|
95
|
+
const recorder = this.prompt;
|
|
96
|
+
if (typeof recorder?.recordInteraction === "function") {
|
|
97
|
+
recorder.recordInteraction(record);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
recordTurn(record) {
|
|
101
|
+
this.recordInteraction(record);
|
|
102
|
+
}
|
|
103
|
+
setRuntimeContext(context) {
|
|
104
|
+
const runtimeContextSetter = this.prompt;
|
|
105
|
+
if (typeof runtimeContextSetter?.setRuntimeContext === "function") {
|
|
106
|
+
runtimeContextSetter.setRuntimeContext(context);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async interpret(nl) {
|
|
110
|
+
let command = null;
|
|
111
|
+
try {
|
|
112
|
+
command = await this.nlParser.parse(nl);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
this.recordInteraction({
|
|
116
|
+
utterance: nl,
|
|
117
|
+
success: false,
|
|
118
|
+
resultSummary: `parse_error:${error instanceof Error ? error.message : String(error)}`,
|
|
119
|
+
});
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
if (command === null) {
|
|
123
|
+
this.recordInteraction({
|
|
124
|
+
utterance: nl,
|
|
125
|
+
success: false,
|
|
126
|
+
resultSummary: "parse_empty",
|
|
127
|
+
});
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const result = await this.dslInterpreter.interpret(command);
|
|
132
|
+
this.recordInteraction({
|
|
133
|
+
utterance: nl,
|
|
134
|
+
parsed: command,
|
|
135
|
+
success: true,
|
|
136
|
+
resultSummary: "execute_ok",
|
|
137
|
+
});
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
this.recordInteraction({
|
|
142
|
+
utterance: nl,
|
|
143
|
+
parsed: command,
|
|
144
|
+
success: false,
|
|
145
|
+
resultSummary: `execute_error:${error instanceof Error ? error.message : String(error)}`,
|
|
146
|
+
});
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async respond(nl, parsed, result) {
|
|
151
|
+
return await this.nlParser.respond(nl, parsed, result);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.NlInterpreter = NlInterpreter;
|
|
155
|
+
//# sourceMappingURL=nl-interpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nl-interpreter.js","sourceRoot":"","sources":["../lib/nl-interpreter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
});
|