@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.
Files changed (153) hide show
  1. package/README.md +436 -0
  2. package/dist/__test__/dsl-descriptor.test.d.ts +1 -0
  3. package/dist/__test__/dsl-descriptor.test.js +27 -0
  4. package/dist/__test__/dsl-descriptor.test.js.map +1 -0
  5. package/dist/__test__/example_descriptor.d.ts +125 -0
  6. package/dist/__test__/example_descriptor.js +607 -0
  7. package/dist/__test__/example_descriptor.js.map +1 -0
  8. package/dist/__test__/food_descriptor.state.json +1 -0
  9. package/dist/__test__/food_descriptor.test.d.ts +74 -0
  10. package/dist/__test__/food_descriptor.test.js +205 -0
  11. package/dist/__test__/food_descriptor.test.js.map +1 -0
  12. package/dist/__test__/nl-interpreter-provider-selection.test.d.ts +1 -0
  13. package/dist/__test__/nl-interpreter-provider-selection.test.js +73 -0
  14. package/dist/__test__/nl-interpreter-provider-selection.test.js.map +1 -0
  15. package/dist/__test__/nl-interpreter.test.d.ts +1 -0
  16. package/dist/__test__/nl-interpreter.test.js +86 -0
  17. package/dist/__test__/nl-interpreter.test.js.map +1 -0
  18. package/dist/decorators/__test__/decorators.test.d.ts +1 -0
  19. package/dist/decorators/__test__/decorators.test.js +182 -0
  20. package/dist/decorators/__test__/decorators.test.js.map +1 -0
  21. package/dist/decorators/__test__/inheritance-descriptor.test.d.ts +1 -0
  22. package/dist/decorators/__test__/inheritance-descriptor.test.js +107 -0
  23. package/dist/decorators/__test__/inheritance-descriptor.test.js.map +1 -0
  24. package/dist/decorators/decorators.d.ts +20 -0
  25. package/dist/decorators/decorators.js +520 -0
  26. package/dist/decorators/decorators.js.map +1 -0
  27. package/dist/decorators/index.d.ts +2 -0
  28. package/dist/decorators/index.js +19 -0
  29. package/dist/decorators/index.js.map +1 -0
  30. package/dist/decorators/store.d.ts +12 -0
  31. package/dist/decorators/store.js +43 -0
  32. package/dist/decorators/store.js.map +1 -0
  33. package/dist/dsl/__test__/dsl-interpreter.test.d.ts +1 -0
  34. package/dist/dsl/__test__/dsl-interpreter.test.js +334 -0
  35. package/dist/dsl/__test__/dsl-interpreter.test.js.map +1 -0
  36. package/dist/dsl/__test__/parser.gen.test.d.ts +1 -0
  37. package/dist/dsl/__test__/parser.gen.test.js +283 -0
  38. package/dist/dsl/__test__/parser.gen.test.js.map +1 -0
  39. package/dist/dsl/dsl-interpreter.d.ts +66 -0
  40. package/dist/dsl/dsl-interpreter.js +767 -0
  41. package/dist/dsl/dsl-interpreter.js.map +1 -0
  42. package/dist/dsl/index.d.ts +1 -0
  43. package/dist/dsl/index.js +18 -0
  44. package/dist/dsl/index.js.map +1 -0
  45. package/dist/dsl/parser.gen.d.ts +10 -0
  46. package/dist/dsl/parser.gen.js +1524 -0
  47. package/dist/dsl/parser.gen.js.map +1 -0
  48. package/dist/dsl-descriptor.d.ts +75 -0
  49. package/dist/dsl-descriptor.js +151 -0
  50. package/dist/dsl-descriptor.js.map +1 -0
  51. package/dist/index.d.ts +5 -0
  52. package/dist/index.js +22 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/nl/__test__/context-aware-prompt.test.d.ts +1 -0
  55. package/dist/nl/__test__/context-aware-prompt.test.js +247 -0
  56. package/dist/nl/__test__/context-aware-prompt.test.js.map +1 -0
  57. package/dist/nl/__test__/context-selector.test.d.ts +1 -0
  58. package/dist/nl/__test__/context-selector.test.js +20 -0
  59. package/dist/nl/__test__/context-selector.test.js.map +1 -0
  60. package/dist/nl/__test__/nl-parser-groq-transport.test.d.ts +1 -0
  61. package/dist/nl/__test__/nl-parser-groq-transport.test.js +87 -0
  62. package/dist/nl/__test__/nl-parser-groq-transport.test.js.map +1 -0
  63. package/dist/nl/__test__/nl-parser-openai-parity.test.d.ts +1 -0
  64. package/dist/nl/__test__/nl-parser-openai-parity.test.js +206 -0
  65. package/dist/nl/__test__/nl-parser-openai-parity.test.js.map +1 -0
  66. package/dist/nl/__test__/nl-parser-openai-sampling.test.d.ts +1 -0
  67. package/dist/nl/__test__/nl-parser-openai-sampling.test.js +44 -0
  68. package/dist/nl/__test__/nl-parser-openai-sampling.test.js.map +1 -0
  69. package/dist/nl/__test__/nl-parser-openai-transport.test.d.ts +1 -0
  70. package/dist/nl/__test__/nl-parser-openai-transport.test.js +55 -0
  71. package/dist/nl/__test__/nl-parser-openai-transport.test.js.map +1 -0
  72. package/dist/nl/__test__/nl-parser-utils.test.d.ts +1 -0
  73. package/dist/nl/__test__/nl-parser-utils.test.js +70 -0
  74. package/dist/nl/__test__/nl-parser-utils.test.js.map +1 -0
  75. package/dist/nl/__test__/nl-parser.test.d.ts +1 -0
  76. package/dist/nl/__test__/nl-parser.test.js +64 -0
  77. package/dist/nl/__test__/nl-parser.test.js.map +1 -0
  78. package/dist/nl/__test__/parameter-tuning.test.d.ts +1 -0
  79. package/dist/nl/__test__/parameter-tuning.test.js +95 -0
  80. package/dist/nl/__test__/parameter-tuning.test.js.map +1 -0
  81. package/dist/nl/__test__/semantic-parsing-experiment.test.d.ts +1 -0
  82. package/dist/nl/__test__/semantic-parsing-experiment.test.js +178 -0
  83. package/dist/nl/__test__/semantic-parsing-experiment.test.js.map +1 -0
  84. package/dist/nl/context-selector.d.ts +17 -0
  85. package/dist/nl/context-selector.js +99 -0
  86. package/dist/nl/context-selector.js.map +1 -0
  87. package/dist/nl/index.d.ts +6 -0
  88. package/dist/nl/index.js +15 -0
  89. package/dist/nl/index.js.map +1 -0
  90. package/dist/nl/llm-monitoring.d.ts +49 -0
  91. package/dist/nl/llm-monitoring.js +243 -0
  92. package/dist/nl/llm-monitoring.js.map +1 -0
  93. package/dist/nl/llm-monitoring.test.d.ts +5 -0
  94. package/dist/nl/llm-monitoring.test.js +101 -0
  95. package/dist/nl/llm-monitoring.test.js.map +1 -0
  96. package/dist/nl/nl-parser-groq.d.ts +21 -0
  97. package/dist/nl/nl-parser-groq.js +357 -0
  98. package/dist/nl/nl-parser-groq.js.map +1 -0
  99. package/dist/nl/nl-parser-utils.d.ts +101 -0
  100. package/dist/nl/nl-parser-utils.js +255 -0
  101. package/dist/nl/nl-parser-utils.js.map +1 -0
  102. package/dist/nl/nl-parser.d.ts +30 -0
  103. package/dist/nl/nl-parser.js +433 -0
  104. package/dist/nl/nl-parser.js.map +1 -0
  105. package/dist/nl/prompt-gen.d.ts +93 -0
  106. package/dist/nl/prompt-gen.js +369 -0
  107. package/dist/nl/prompt-gen.js.map +1 -0
  108. package/dist/nl/prompt-res.d.ts +16 -0
  109. package/dist/nl/prompt-res.js +190 -0
  110. package/dist/nl/prompt-res.js.map +1 -0
  111. package/dist/nl-interpreter.d.ts +48 -0
  112. package/dist/nl-interpreter.js +155 -0
  113. package/dist/nl-interpreter.js.map +1 -0
  114. package/lib/__test__/dsl-descriptor.test.ts +27 -0
  115. package/lib/__test__/example_descriptor.ts +762 -0
  116. package/lib/__test__/food_descriptor.state.json +1 -0
  117. package/lib/__test__/food_descriptor.test.ts +331 -0
  118. package/lib/__test__/nl-interpreter-provider-selection.test.ts +126 -0
  119. package/lib/__test__/nl-interpreter.test.ts +129 -0
  120. package/lib/decorators/__test__/decorators.test.ts +177 -0
  121. package/lib/decorators/__test__/inheritance-descriptor.test.ts +92 -0
  122. package/lib/decorators/decorators.ts +754 -0
  123. package/lib/decorators/index.ts +2 -0
  124. package/lib/decorators/store.ts +47 -0
  125. package/lib/dsl/__test__/dsl-interpreter.test.ts +453 -0
  126. package/lib/dsl/__test__/parser.gen.test.ts +296 -0
  127. package/lib/dsl/dsl-interpreter.ts +974 -0
  128. package/lib/dsl/index.ts +1 -0
  129. package/lib/dsl/parser.gen.js +1479 -0
  130. package/lib/dsl/parser.pegjs +130 -0
  131. package/lib/dsl-descriptor.ts +241 -0
  132. package/lib/index.ts +5 -0
  133. package/lib/nl/__test__/context-aware-prompt.test.ts +372 -0
  134. package/lib/nl/__test__/context-selector.test.ts +27 -0
  135. package/lib/nl/__test__/nl-parser-groq-transport.test.ts +139 -0
  136. package/lib/nl/__test__/nl-parser-openai-parity.test.ts +381 -0
  137. package/lib/nl/__test__/nl-parser-openai-sampling.test.ts +73 -0
  138. package/lib/nl/__test__/nl-parser-openai-transport.test.ts +79 -0
  139. package/lib/nl/__test__/nl-parser-utils.test.ts +98 -0
  140. package/lib/nl/__test__/nl-parser.test.ts +119 -0
  141. package/lib/nl/__test__/parameter-tuning.test.ts +137 -0
  142. package/lib/nl/__test__/semantic-parsing-experiment.test.ts +260 -0
  143. package/lib/nl/context-selector.ts +123 -0
  144. package/lib/nl/index.ts +19 -0
  145. package/lib/nl/llm-monitoring.test.ts +136 -0
  146. package/lib/nl/llm-monitoring.ts +339 -0
  147. package/lib/nl/nl-parser-groq.ts +510 -0
  148. package/lib/nl/nl-parser-utils.ts +310 -0
  149. package/lib/nl/nl-parser.ts +616 -0
  150. package/lib/nl/prompt-gen.ts +607 -0
  151. package/lib/nl/prompt-res.ts +207 -0
  152. package/lib/nl-interpreter.ts +262 -0
  153. 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
+ });