@garrix82/reactgenie-dsl 1.0.1 → 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.
Files changed (104) hide show
  1. package/.env +10 -0
  2. package/.env.example +17 -0
  3. package/.github/workflows/publish.yml +20 -0
  4. package/package.json +1 -5
  5. package/dist/__test__/dsl-descriptor.test.d.ts +0 -1
  6. package/dist/__test__/dsl-descriptor.test.js +0 -27
  7. package/dist/__test__/dsl-descriptor.test.js.map +0 -1
  8. package/dist/__test__/example_descriptor.d.ts +0 -125
  9. package/dist/__test__/example_descriptor.js +0 -607
  10. package/dist/__test__/example_descriptor.js.map +0 -1
  11. package/dist/__test__/food_descriptor.state.json +0 -1
  12. package/dist/__test__/food_descriptor.test.d.ts +0 -74
  13. package/dist/__test__/food_descriptor.test.js +0 -205
  14. package/dist/__test__/food_descriptor.test.js.map +0 -1
  15. package/dist/__test__/nl-interpreter-provider-selection.test.d.ts +0 -1
  16. package/dist/__test__/nl-interpreter-provider-selection.test.js +0 -73
  17. package/dist/__test__/nl-interpreter-provider-selection.test.js.map +0 -1
  18. package/dist/__test__/nl-interpreter.test.d.ts +0 -1
  19. package/dist/__test__/nl-interpreter.test.js +0 -86
  20. package/dist/__test__/nl-interpreter.test.js.map +0 -1
  21. package/dist/decorators/__test__/decorators.test.d.ts +0 -1
  22. package/dist/decorators/__test__/decorators.test.js +0 -182
  23. package/dist/decorators/__test__/decorators.test.js.map +0 -1
  24. package/dist/decorators/__test__/inheritance-descriptor.test.d.ts +0 -1
  25. package/dist/decorators/__test__/inheritance-descriptor.test.js +0 -107
  26. package/dist/decorators/__test__/inheritance-descriptor.test.js.map +0 -1
  27. package/dist/dsl/__test__/dsl-interpreter.test.d.ts +0 -1
  28. package/dist/dsl/__test__/dsl-interpreter.test.js +0 -334
  29. package/dist/dsl/__test__/dsl-interpreter.test.js.map +0 -1
  30. package/dist/dsl/__test__/parser.gen.test.d.ts +0 -1
  31. package/dist/dsl/__test__/parser.gen.test.js +0 -283
  32. package/dist/dsl/__test__/parser.gen.test.js.map +0 -1
  33. package/dist/nl/__test__/context-aware-prompt.test.d.ts +0 -1
  34. package/dist/nl/__test__/context-aware-prompt.test.js +0 -247
  35. package/dist/nl/__test__/context-aware-prompt.test.js.map +0 -1
  36. package/dist/nl/__test__/context-selector.test.d.ts +0 -1
  37. package/dist/nl/__test__/context-selector.test.js +0 -20
  38. package/dist/nl/__test__/context-selector.test.js.map +0 -1
  39. package/dist/nl/__test__/nl-parser-groq-transport.test.d.ts +0 -1
  40. package/dist/nl/__test__/nl-parser-groq-transport.test.js +0 -87
  41. package/dist/nl/__test__/nl-parser-groq-transport.test.js.map +0 -1
  42. package/dist/nl/__test__/nl-parser-openai-parity.test.d.ts +0 -1
  43. package/dist/nl/__test__/nl-parser-openai-parity.test.js +0 -206
  44. package/dist/nl/__test__/nl-parser-openai-parity.test.js.map +0 -1
  45. package/dist/nl/__test__/nl-parser-openai-sampling.test.d.ts +0 -1
  46. package/dist/nl/__test__/nl-parser-openai-sampling.test.js +0 -44
  47. package/dist/nl/__test__/nl-parser-openai-sampling.test.js.map +0 -1
  48. package/dist/nl/__test__/nl-parser-openai-transport.test.d.ts +0 -1
  49. package/dist/nl/__test__/nl-parser-openai-transport.test.js +0 -55
  50. package/dist/nl/__test__/nl-parser-openai-transport.test.js.map +0 -1
  51. package/dist/nl/__test__/nl-parser-utils.test.d.ts +0 -1
  52. package/dist/nl/__test__/nl-parser-utils.test.js +0 -70
  53. package/dist/nl/__test__/nl-parser-utils.test.js.map +0 -1
  54. package/dist/nl/__test__/nl-parser.test.d.ts +0 -1
  55. package/dist/nl/__test__/nl-parser.test.js +0 -64
  56. package/dist/nl/__test__/nl-parser.test.js.map +0 -1
  57. package/dist/nl/__test__/parameter-tuning.test.d.ts +0 -1
  58. package/dist/nl/__test__/parameter-tuning.test.js +0 -95
  59. package/dist/nl/__test__/parameter-tuning.test.js.map +0 -1
  60. package/dist/nl/__test__/semantic-parsing-experiment.test.d.ts +0 -1
  61. package/dist/nl/__test__/semantic-parsing-experiment.test.js +0 -178
  62. package/dist/nl/__test__/semantic-parsing-experiment.test.js.map +0 -1
  63. package/dist/nl/llm-monitoring.test.d.ts +0 -5
  64. package/dist/nl/llm-monitoring.test.js +0 -101
  65. package/dist/nl/llm-monitoring.test.js.map +0 -1
  66. package/lib/__test__/dsl-descriptor.test.ts +0 -27
  67. package/lib/__test__/example_descriptor.ts +0 -762
  68. package/lib/__test__/food_descriptor.state.json +0 -1
  69. package/lib/__test__/food_descriptor.test.ts +0 -331
  70. package/lib/__test__/nl-interpreter-provider-selection.test.ts +0 -126
  71. package/lib/__test__/nl-interpreter.test.ts +0 -129
  72. package/lib/decorators/__test__/decorators.test.ts +0 -177
  73. package/lib/decorators/__test__/inheritance-descriptor.test.ts +0 -92
  74. package/lib/decorators/decorators.ts +0 -754
  75. package/lib/decorators/index.ts +0 -2
  76. package/lib/decorators/store.ts +0 -47
  77. package/lib/dsl/__test__/dsl-interpreter.test.ts +0 -453
  78. package/lib/dsl/__test__/parser.gen.test.ts +0 -296
  79. package/lib/dsl/dsl-interpreter.ts +0 -974
  80. package/lib/dsl/index.ts +0 -1
  81. package/lib/dsl/parser.gen.js +0 -1479
  82. package/lib/dsl/parser.pegjs +0 -130
  83. package/lib/dsl-descriptor.ts +0 -241
  84. package/lib/index.ts +0 -5
  85. package/lib/nl/__test__/context-aware-prompt.test.ts +0 -372
  86. package/lib/nl/__test__/context-selector.test.ts +0 -27
  87. package/lib/nl/__test__/nl-parser-groq-transport.test.ts +0 -139
  88. package/lib/nl/__test__/nl-parser-openai-parity.test.ts +0 -381
  89. package/lib/nl/__test__/nl-parser-openai-sampling.test.ts +0 -73
  90. package/lib/nl/__test__/nl-parser-openai-transport.test.ts +0 -79
  91. package/lib/nl/__test__/nl-parser-utils.test.ts +0 -98
  92. package/lib/nl/__test__/nl-parser.test.ts +0 -119
  93. package/lib/nl/__test__/parameter-tuning.test.ts +0 -137
  94. package/lib/nl/__test__/semantic-parsing-experiment.test.ts +0 -260
  95. package/lib/nl/context-selector.ts +0 -123
  96. package/lib/nl/index.ts +0 -19
  97. package/lib/nl/llm-monitoring.test.ts +0 -136
  98. package/lib/nl/llm-monitoring.ts +0 -339
  99. package/lib/nl/nl-parser-groq.ts +0 -510
  100. package/lib/nl/nl-parser-utils.ts +0 -310
  101. package/lib/nl/nl-parser.ts +0 -616
  102. package/lib/nl/prompt-gen.ts +0 -607
  103. package/lib/nl/prompt-res.ts +0 -207
  104. package/lib/nl-interpreter.ts +0 -262
@@ -1,87 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nl_parser_groq_1 = require("../nl-parser-groq");
4
- function toHeaderRecord(headers) {
5
- if (!headers)
6
- return {};
7
- if (typeof headers.entries === "function") {
8
- return Object.fromEntries(Array.from(headers.entries()).map(([key, value]) => [
9
- String(key).toLowerCase(),
10
- String(value),
11
- ]));
12
- }
13
- return Object.fromEntries(Object.entries(headers).map(([key, value]) => [
14
- String(key).toLowerCase(),
15
- String(value),
16
- ]));
17
- }
18
- const promptStub = {
19
- prompt: () => "legacy prompt",
20
- zero_shot_prompt: () => "parse prompt",
21
- response_prompt: () => "respond prompt",
22
- };
23
- describe("NlParserGroq transport", () => {
24
- const originalFetch = global.fetch;
25
- afterEach(() => {
26
- global.fetch = originalFetch;
27
- jest.restoreAllMocks();
28
- });
29
- test("uses proxy chat completions endpoint without sdk stainless headers", async () => {
30
- const fetchMock = jest.fn().mockResolvedValue(new Response(JSON.stringify({
31
- choices: [{ message: { content: JSON.stringify({ command: "Light.on()" }) } }],
32
- usage: { prompt_tokens: 10, completion_tokens: 4, total_tokens: 14 },
33
- }), {
34
- status: 200,
35
- headers: { "content-type": "application/json" },
36
- }));
37
- global.fetch = fetchMock;
38
- const parser = new nl_parser_groq_1.NlParserGroq(promptStub, "proxy-token", "llama-3.3-70b-versatile", undefined, "https://proxy.example.com/openai/v1");
39
- const parsed = await parser.parse("turn the lights on");
40
- expect(parsed).toBe("Light.on()");
41
- expect(fetchMock).toHaveBeenCalledTimes(1);
42
- const [url, init] = fetchMock.mock.calls[0];
43
- expect(String(url)).toBe("https://proxy.example.com/openai/v1/chat/completions");
44
- expect(init?.method).toBe("POST");
45
- const headers = toHeaderRecord(init?.headers);
46
- expect(headers.authorization).toBe("Bearer proxy-token");
47
- expect(headers["x-genie-provider"]).toBe("groq");
48
- expect(Object.keys(headers).some((key) => key.startsWith("x-stainless-"))).toBe(false);
49
- const body = JSON.parse(String(init?.body || "{}"));
50
- expect(body.response_format?.type).toBe("json_schema");
51
- expect(body.response_format?.json_schema?.name).toBe("dsl_command");
52
- });
53
- test("repairs one invalid command after semantic validation fails", async () => {
54
- const validateCommand = jest
55
- .fn()
56
- .mockImplementation(async (command) => {
57
- if (command === 'Light.on(field: "name")') {
58
- throw new Error("Invalid DSL: matching(field: ...) requires a dotted accessor such as .name, but received string.");
59
- }
60
- });
61
- const fetchMock = jest
62
- .fn()
63
- .mockResolvedValueOnce(new Response(JSON.stringify({
64
- choices: [{ message: { content: JSON.stringify({ command: 'Light.on(field: "name")' }) } }],
65
- usage: {},
66
- }), {
67
- status: 200,
68
- headers: { "content-type": "application/json" },
69
- }))
70
- .mockResolvedValueOnce(new Response(JSON.stringify({
71
- choices: [{ message: { content: JSON.stringify({ command: "Light.on(field: .name)" }) } }],
72
- usage: {},
73
- }), {
74
- status: 200,
75
- headers: { "content-type": "application/json" },
76
- }));
77
- global.fetch = fetchMock;
78
- const parser = new nl_parser_groq_1.NlParserGroq(promptStub, "proxy-token", "llama-3.3-70b-versatile", undefined, "https://proxy.example.com/openai/v1", undefined, undefined, undefined, validateCommand);
79
- await expect(parser.parse("turn the lights on")).resolves.toBe("Light.on(field: .name)");
80
- expect(validateCommand).toHaveBeenCalledTimes(2);
81
- const repairBody = JSON.parse(String(fetchMock.mock.calls[1][1]?.body || "{}"));
82
- expect(repairBody.messages[1].content).toBe('Light.on(field: "name")');
83
- expect(repairBody.messages[2].content).toContain("The previous DSL command is invalid.");
84
- expect(repairBody.messages[2].content).toContain("requires a dotted accessor");
85
- });
86
- });
87
- //# sourceMappingURL=nl-parser-groq-transport.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser-groq-transport.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser-groq-transport.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,206 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nl_parser_1 = require("../nl-parser");
4
- const promptStub = {
5
- prompt: () => "legacy prompt",
6
- zero_shot_prompt: () => "filtered prompt",
7
- response_prompt: () => "respond prompt",
8
- };
9
- const promptWithBroadFallback = {
10
- ...promptStub,
11
- zero_shot_prompt_broad: () => "broad prompt",
12
- };
13
- describe("NlParser OpenAI parity", () => {
14
- const originalFetch = global.fetch;
15
- afterEach(() => {
16
- global.fetch = originalFetch;
17
- jest.restoreAllMocks();
18
- });
19
- test("parse sends dsl_command json_schema and extracts command JSON", async () => {
20
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
21
- choices: [{ message: { content: JSON.stringify({ command: "Task.run()" }) } }],
22
- usage: { prompt_tokens: 8, completion_tokens: 3, total_tokens: 11 },
23
- }), { status: 200, headers: { "content-type": "application/json" } }));
24
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
25
- await expect(parser.parse("run task")).resolves.toBe("Task.run()");
26
- const [, init] = global.fetch.mock.calls[0];
27
- const body = JSON.parse(String(init.body));
28
- expect(body.model).toBe("gpt-4o-mini");
29
- expect(body.response_format?.json_schema?.name).toBe("dsl_command");
30
- });
31
- test("parse retries strict=false then strict=true on filtered prompt", async () => {
32
- global.fetch = jest
33
- .fn()
34
- .mockResolvedValueOnce(new Response(JSON.stringify({
35
- choices: [{ message: { content: "{}" } }],
36
- usage: {},
37
- }), { status: 200, headers: { "content-type": "application/json" } }))
38
- .mockResolvedValueOnce(new Response(JSON.stringify({
39
- choices: [{ message: { content: JSON.stringify({ command: "Task.run()" }) } }],
40
- usage: {},
41
- }), { status: 200, headers: { "content-type": "application/json" } }));
42
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
43
- await expect(parser.parse("run task")).resolves.toBe("Task.run()");
44
- const body1 = JSON.parse(String(global.fetch.mock.calls[0][1].body));
45
- const body2 = JSON.parse(String(global.fetch.mock.calls[1][1].body));
46
- expect(body1.response_format.json_schema.strict).toBe(false);
47
- expect(body2.response_format.json_schema.strict).toBe(true);
48
- });
49
- test("parse does not use broad prompt variants", async () => {
50
- global.fetch = (jest
51
- .fn()
52
- .mockResolvedValueOnce(new Response(JSON.stringify({
53
- choices: [{ message: { content: "{}" } }],
54
- usage: {},
55
- }), { status: 200, headers: { "content-type": "application/json" } }))
56
- .mockResolvedValueOnce(new Response(JSON.stringify({
57
- choices: [{ message: { content: "{}" } }],
58
- usage: {},
59
- }), { status: 200, headers: { "content-type": "application/json" } })));
60
- const parser = new nl_parser_1.NlParser(promptWithBroadFallback, "token", "https://api.openai.com/v1", "gpt-4o-mini");
61
- await expect(parser.parse("run task")).rejects.toThrow();
62
- const body1 = JSON.parse(String(global.fetch.mock.calls[0][1].body));
63
- const body2 = JSON.parse(String(global.fetch.mock.calls[1][1].body));
64
- expect(global.fetch).toHaveBeenCalledTimes(2);
65
- expect(body1.messages[0].content).toBe("filtered prompt");
66
- expect(body2.messages[0].content).toBe("filtered prompt");
67
- });
68
- test("parse repairs one invalid command after semantic validation fails", async () => {
69
- const validateCommand = jest
70
- .fn()
71
- .mockImplementation(async (command) => {
72
- if (command === 'Task.run(field: "name")') {
73
- throw new Error("Invalid DSL: matching(field: ...) requires a dotted accessor such as .name, but received string.");
74
- }
75
- });
76
- global.fetch = jest
77
- .fn()
78
- .mockResolvedValueOnce(new Response(JSON.stringify({
79
- choices: [
80
- {
81
- message: {
82
- content: JSON.stringify({ command: 'Task.run(field: "name")' }),
83
- },
84
- },
85
- ],
86
- usage: {},
87
- }), { status: 200, headers: { "content-type": "application/json" } }))
88
- .mockResolvedValueOnce(new Response(JSON.stringify({
89
- choices: [{ message: { content: JSON.stringify({ command: "Task.run(field: .name)" }) } }],
90
- usage: {},
91
- }), { status: 200, headers: { "content-type": "application/json" } }));
92
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini", undefined, undefined, undefined, undefined, validateCommand, { statefulValidationRetry: false });
93
- await expect(parser.parse("run task")).resolves.toBe("Task.run(field: .name)");
94
- expect(validateCommand).toHaveBeenCalledTimes(2);
95
- expect(validateCommand).toHaveBeenNthCalledWith(1, 'Task.run(field: "name")');
96
- expect(validateCommand).toHaveBeenNthCalledWith(2, "Task.run(field: .name)");
97
- const repairBody = JSON.parse(String(global.fetch.mock.calls[1][1].body));
98
- expect(repairBody.messages[0].content).toBe("filtered prompt");
99
- expect(repairBody.messages[1].content).toBe('Task.run(field: "name")');
100
- expect(repairBody.messages[2].content).toContain("The previous DSL command is invalid.");
101
- expect(repairBody.messages[2].content).toContain("requires a dotted accessor");
102
- });
103
- test("parse uses Responses API state for validation retry when feature flag is enabled", async () => {
104
- const validateCommand = jest
105
- .fn()
106
- .mockImplementation(async (command) => {
107
- if (command === 'Task.run(field: "name")') {
108
- throw new Error("Invalid DSL: matching(field: ...) requires a dotted accessor such as .name, but received string.");
109
- }
110
- });
111
- global.fetch = jest
112
- .fn()
113
- .mockResolvedValueOnce(new Response(JSON.stringify({
114
- id: "resp_initial",
115
- output_text: JSON.stringify({ command: 'Task.run(field: "name")' }),
116
- usage: { input_tokens: 12, output_tokens: 4, total_tokens: 16 },
117
- }), { status: 200, headers: { "content-type": "application/json" } }))
118
- .mockResolvedValueOnce(new Response(JSON.stringify({
119
- id: "resp_repair",
120
- output_text: JSON.stringify({ command: "Task.run(field: .name)" }),
121
- usage: { input_tokens: 5, output_tokens: 3, total_tokens: 8 },
122
- }), { status: 200, headers: { "content-type": "application/json" } }));
123
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://proxy.example.com/openai/v1", "gpt-4.1-mini", undefined, undefined, undefined, undefined, validateCommand, { statefulValidationRetry: true });
124
- await expect(parser.parse("run task")).resolves.toBe("Task.run(field: .name)");
125
- expect(global.fetch).toHaveBeenCalledTimes(2);
126
- const [initialUrl, initialInit] = global.fetch.mock.calls[0];
127
- const [repairUrl, repairInit] = global.fetch.mock.calls[1];
128
- const initialBody = JSON.parse(String(initialInit.body));
129
- const repairBody = JSON.parse(String(repairInit.body));
130
- expect(initialUrl).toBe("https://proxy.example.com/openai/v1/responses");
131
- expect(repairUrl).toBe("https://proxy.example.com/openai/v1/responses");
132
- expect(initialBody.store).toBe(true);
133
- expect(initialBody.input[0].content[0].text).toBe("filtered prompt");
134
- expect(repairBody.previous_response_id).toBe("resp_initial");
135
- expect(repairBody.input[0].content[0].text).toContain("The previous DSL command is invalid.");
136
- expect(repairBody.input[0].content[0].text).toContain("requires a dotted accessor");
137
- expect(repairBody.input[0].content[0].text).not.toContain("filtered prompt");
138
- });
139
- test("parse throws after filtered prompt strict retries fail", async () => {
140
- global.fetch = jest
141
- .fn()
142
- .mockResolvedValue(new Response(JSON.stringify({
143
- choices: [{ message: { content: "{}" } }],
144
- usage: {},
145
- }), { status: 200, headers: { "content-type": "application/json" } }));
146
- const parser = new nl_parser_1.NlParser(promptWithBroadFallback, "token", "https://api.openai.com/v1", "gpt-4o-mini");
147
- await expect(parser.parse("run task")).rejects.toThrow("OpenAI parse failed for filtered prompt");
148
- expect(global.fetch).toHaveBeenCalledTimes(2);
149
- const requestBodies = global.fetch.mock.calls.map(([, init]) => JSON.parse(String(init.body)));
150
- expect(requestBodies.map((body) => body.messages[0].content)).toEqual([
151
- "filtered prompt",
152
- "filtered prompt",
153
- ]);
154
- expect(requestBodies.map((body) => body.response_format.json_schema.strict)).toEqual([
155
- false,
156
- true,
157
- ]);
158
- });
159
- test("respond sends agent_response json_schema and normalizes payload", async () => {
160
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
161
- choices: [{
162
- message: {
163
- content: JSON.stringify({
164
- minimalText: "Done now",
165
- fullText: "Done: Task.run()",
166
- type: "success",
167
- shouldSpeak: true,
168
- }),
169
- },
170
- }],
171
- usage: {},
172
- }), { status: 200, headers: { "content-type": "application/json" } }));
173
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
174
- await expect(parser.respond("run task", "Task.run()", "ok")).resolves.toEqual({
175
- minimalText: "Done now",
176
- fullText: "Done: Task.run()",
177
- type: "success",
178
- shouldSpeak: true,
179
- });
180
- const [, init] = global.fetch.mock.calls[0];
181
- const body = JSON.parse(String(init.body));
182
- expect(body.response_format?.json_schema?.name).toBe("agent_response");
183
- });
184
- test("respond falls back safely when OpenAI returns invalid JSON", async () => {
185
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
186
- choices: [{ message: { content: "not-json" } }],
187
- usage: {},
188
- }), { status: 200, headers: { "content-type": "application/json" } }));
189
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
190
- await expect(parser.respond("run task", "Task.run()", "ok")).resolves.toEqual(expect.objectContaining({ type: "success", shouldSpeak: true }));
191
- });
192
- test("respond falls back safely when the transport fails", async () => {
193
- global.fetch = jest.fn().mockRejectedValue(new Error("socket hang up"));
194
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
195
- await expect(parser.respond("run task", "Task.run()", "error: network failed")).resolves.toEqual({
196
- minimalText: "Retry task",
197
- fullText: "I couldn't complete that request. Please try rephrasing or checking the target item.",
198
- type: "error",
199
- shouldSpeak: true,
200
- });
201
- });
202
- test("constructor rejects an empty semantic model", () => {
203
- expect(() => new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", " ")).toThrow("semanticModel / SEMANTIC_MODEL");
204
- });
205
- });
206
- //# sourceMappingURL=nl-parser-openai-parity.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser-openai-parity.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser-openai-parity.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nl_parser_1 = require("../nl-parser");
4
- const promptStub = {
5
- prompt: () => "legacy prompt",
6
- zero_shot_prompt: () => "parse prompt",
7
- response_prompt: () => "respond prompt",
8
- };
9
- describe("NlParser OpenAI sampling", () => {
10
- const originalFetch = global.fetch;
11
- afterEach(() => {
12
- global.fetch = originalFetch;
13
- jest.restoreAllMocks();
14
- });
15
- test("parse uses the standard sampling profile", async () => {
16
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
17
- choices: [{ message: { content: JSON.stringify({ command: "Task.run()" }) } }],
18
- usage: {},
19
- }), { status: 200, headers: { "content-type": "application/json" } }));
20
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
21
- await parser.parse("run task");
22
- const [, init] = global.fetch.mock.calls[0];
23
- const body = JSON.parse(String(init.body));
24
- expect(body.temperature).toBe(0.2);
25
- expect(body.top_p).toBe(1);
26
- expect(body.frequency_penalty).toBe(0);
27
- expect(body.presence_penalty).toBe(0);
28
- });
29
- test("parseGpt4 uses the same sampling profile", async () => {
30
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
31
- choices: [{ message: { content: JSON.stringify({ command: "Task.run()" }) } }],
32
- usage: {},
33
- }), { status: 200, headers: { "content-type": "application/json" } }));
34
- const parser = new nl_parser_1.NlParser(promptStub, "token", "https://api.openai.com/v1", "gpt-4o-mini");
35
- await parser.parseGpt4("run task");
36
- const [, init] = global.fetch.mock.calls[0];
37
- const body = JSON.parse(String(init.body));
38
- expect(body.temperature).toBe(0.2);
39
- expect(body.top_p).toBe(1);
40
- expect(body.frequency_penalty).toBe(0);
41
- expect(body.presence_penalty).toBe(0);
42
- });
43
- });
44
- //# sourceMappingURL=nl-parser-openai-sampling.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser-openai-sampling.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser-openai-sampling.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nl_parser_1 = require("../nl-parser");
4
- function toHeaderRecord(headers) {
5
- if (!headers)
6
- return {};
7
- if (typeof headers.entries === "function") {
8
- return Object.fromEntries(Array.from(headers.entries()).map(([key, value]) => [
9
- String(key).toLowerCase(),
10
- String(value),
11
- ]));
12
- }
13
- return Object.fromEntries(Object.entries(headers).map(([key, value]) => [
14
- String(key).toLowerCase(),
15
- String(value),
16
- ]));
17
- }
18
- const promptStub = {
19
- prompt: () => "legacy prompt",
20
- zero_shot_prompt: () => "parse prompt",
21
- response_prompt: () => "respond prompt",
22
- };
23
- describe("NlParser transport", () => {
24
- const originalFetch = global.fetch;
25
- afterEach(() => {
26
- global.fetch = originalFetch;
27
- jest.restoreAllMocks();
28
- });
29
- test("uses proxy chat completions endpoint without sdk stainless headers", async () => {
30
- const fetchMock = jest.fn().mockResolvedValue(new Response(JSON.stringify({
31
- choices: [{ message: { content: JSON.stringify({ command: "Task.run()" }) } }],
32
- usage: { prompt_tokens: 12, completion_tokens: 3, total_tokens: 15 },
33
- }), {
34
- status: 200,
35
- headers: { "content-type": "application/json" },
36
- }));
37
- global.fetch = fetchMock;
38
- const parser = new nl_parser_1.NlParser(promptStub, "proxy-token", "https://proxy.example.com/openai/v1", "gpt-4o-mini");
39
- const parsed = await parser.parse("run task");
40
- expect(parsed).toBe("Task.run()");
41
- expect(fetchMock).toHaveBeenCalledTimes(1);
42
- const [url, init] = fetchMock.mock.calls[0];
43
- expect(String(url)).toBe("https://proxy.example.com/openai/v1/chat/completions");
44
- expect(init?.method).toBe("POST");
45
- const headers = toHeaderRecord(init?.headers);
46
- expect(headers.authorization).toBe("Bearer proxy-token");
47
- expect(headers["x-genie-provider"]).toBe("openai");
48
- expect(Object.keys(headers).some((key) => key.startsWith("x-stainless-"))).toBe(false);
49
- const body = JSON.parse(String(init?.body || "{}"));
50
- expect(body.model).toBe("gpt-4o-mini");
51
- expect(body.response_format?.type).toBe("json_schema");
52
- expect(body.response_format?.json_schema?.name).toBe("dsl_command");
53
- });
54
- });
55
- //# sourceMappingURL=nl-parser-openai-transport.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser-openai-transport.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser-openai-transport.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nl_parser_utils_1 = require("../nl-parser-utils");
4
- describe("nl-parser utils", () => {
5
- const originalFetch = global.fetch;
6
- afterEach(() => {
7
- global.fetch = originalFetch;
8
- jest.restoreAllMocks();
9
- });
10
- test("extractStructuredCommand returns null for invalid or missing command payloads", () => {
11
- expect((0, nl_parser_utils_1.extractStructuredCommand)("not-json")).toBeNull();
12
- expect((0, nl_parser_utils_1.extractStructuredCommand)(JSON.stringify({}))).toBeNull();
13
- expect((0, nl_parser_utils_1.extractStructuredCommand)(JSON.stringify({ command: 7 }))).toBeNull();
14
- });
15
- test("extractStructuredAgentResponse returns null for invalid payload shapes", () => {
16
- expect((0, nl_parser_utils_1.extractStructuredAgentResponse)("not-json")).toBeNull();
17
- expect((0, nl_parser_utils_1.extractStructuredAgentResponse)(JSON.stringify("done"))).toBeNull();
18
- expect((0, nl_parser_utils_1.extractStructuredAgentResponse)(JSON.stringify(null))).toBeNull();
19
- });
20
- test("normalizeAgentResponse applies defaults and trims oversized values", () => {
21
- expect((0, nl_parser_utils_1.normalizeAgentResponse)({
22
- minimalText: " this is too long for speech output ",
23
- fullText: "",
24
- type: "unsupported",
25
- })).toEqual({
26
- minimalText: "this is",
27
- fullText: "this is too long for speech output",
28
- type: "info",
29
- shouldSpeak: true,
30
- });
31
- });
32
- test("buildFallbackAgentResponse returns an error payload for failure contexts", () => {
33
- expect((0, nl_parser_utils_1.buildFallbackAgentResponse)("Task.run()", "Failed to update item")).toEqual({
34
- minimalText: "Retry task",
35
- fullText: "I couldn't complete that request. Please try rephrasing or checking the target item.",
36
- type: "error",
37
- shouldSpeak: true,
38
- });
39
- });
40
- test("normalizeBaseUrl strips trailing slashes", () => {
41
- expect((0, nl_parser_utils_1.normalizeBaseUrl)("https://proxy.example.com/openai/v1///")).toBe("https://proxy.example.com/openai/v1");
42
- });
43
- test("createJsonChatCompletion throws a detailed error for non-ok JSON responses", async () => {
44
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({ error: { message: "bad request" } }), {
45
- status: 400,
46
- headers: { "content-type": "application/json" },
47
- }));
48
- await expect((0, nl_parser_utils_1.createJsonChatCompletion)({
49
- endpoint: "https://proxy.example.com/openai/v1/chat/completions",
50
- apiKey: "token",
51
- body: { model: "gpt-4o-mini" },
52
- requestLabel: "OpenAI-compatible request failed",
53
- invalidPayloadLabel: "invalid payload",
54
- })).rejects.toThrow("OpenAI-compatible request failed (400): {\"message\":\"bad request\"}");
55
- });
56
- test("createJsonChatCompletion throws for invalid successful payloads", async () => {
57
- global.fetch = jest.fn().mockResolvedValue(new Response("not-json", {
58
- status: 200,
59
- headers: { "content-type": "application/json" },
60
- }));
61
- await expect((0, nl_parser_utils_1.createJsonChatCompletion)({
62
- endpoint: "https://proxy.example.com/openai/v1/chat/completions",
63
- apiKey: "token",
64
- body: { model: "gpt-4o-mini" },
65
- requestLabel: "OpenAI-compatible request failed",
66
- invalidPayloadLabel: "OpenAI-compatible endpoint returned an invalid JSON payload",
67
- })).rejects.toThrow("OpenAI-compatible endpoint returned an invalid JSON payload");
68
- });
69
- });
70
- //# sourceMappingURL=nl-parser-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser-utils.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser-utils.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,64 +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(30000);
9
- describe("NlParserGroq offline regression", () => {
10
- const originalFetch = global.fetch;
11
- afterEach(() => {
12
- global.fetch = originalFetch;
13
- jest.restoreAllMocks();
14
- });
15
- test("Parser basics", async () => {
16
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
17
- choices: [
18
- {
19
- message: {
20
- content: JSON.stringify({
21
- command: 'Restaurant.all().matching(field: .address, value: "palo alto").sort(field: .priceGrade, ascending: true)[0]',
22
- }),
23
- },
24
- },
25
- ],
26
- usage: {},
27
- }), { status: 200, headers: { "content-type": "application/json" } }));
28
- const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples), "test-key", "llama-3.3-70b-versatile");
29
- await expect(parser.parse("get me the cheapest restaurant in palo alto")).resolves.toBe('Restaurant.all().matching(field: .address, value: "palo alto").sort(field: .priceGrade, ascending: true)[0]');
30
- });
31
- test("Parser complex", async () => {
32
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
33
- choices: [
34
- {
35
- message: {
36
- content: JSON.stringify({
37
- command: '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]])',
38
- }),
39
- },
40
- },
41
- ],
42
- usage: {},
43
- }), { status: 200, headers: { "content-type": "application/json" } }));
44
- const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples), "test-key", "llama-3.3-70b-versatile");
45
- await expect(parser.parse("order the same burger that I ordered at mcDonald last time")).resolves.toBe('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]])');
46
- });
47
- test("Parser complex voice", async () => {
48
- global.fetch = jest.fn().mockResolvedValue(new Response(JSON.stringify({
49
- choices: [
50
- {
51
- message: {
52
- content: JSON.stringify({
53
- command: '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)',
54
- }),
55
- },
56
- },
57
- ],
58
- usage: {},
59
- }), { status: 200, headers: { "content-type": "application/json" } }));
60
- const parser = new nl_parser_groq_1.NlParserGroq(new prompt_gen_1.BasicPromptGen(example_descriptor_1.classDescriptions, example_descriptor_1.examples, '// 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".'), "test-key", "llama-3.3-70b-versatile");
61
- await expect(parser.parseGpt4("elder the same foods that I ordered at mcDonald last time")).resolves.toBe('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)');
62
- });
63
- });
64
- //# sourceMappingURL=nl-parser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nl-parser.test.js","sourceRoot":"","sources":["../../../lib/nl/__test__/nl-parser.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};