@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.
Files changed (105) hide show
  1. package/.env +10 -0
  2. package/.env.example +17 -0
  3. package/.github/workflows/publish.yml +20 -0
  4. package/README.md +5 -1
  5. package/package.json +1 -5
  6. package/dist/__test__/dsl-descriptor.test.d.ts +0 -1
  7. package/dist/__test__/dsl-descriptor.test.js +0 -27
  8. package/dist/__test__/dsl-descriptor.test.js.map +0 -1
  9. package/dist/__test__/example_descriptor.d.ts +0 -125
  10. package/dist/__test__/example_descriptor.js +0 -607
  11. package/dist/__test__/example_descriptor.js.map +0 -1
  12. package/dist/__test__/food_descriptor.state.json +0 -1
  13. package/dist/__test__/food_descriptor.test.d.ts +0 -74
  14. package/dist/__test__/food_descriptor.test.js +0 -205
  15. package/dist/__test__/food_descriptor.test.js.map +0 -1
  16. package/dist/__test__/nl-interpreter-provider-selection.test.d.ts +0 -1
  17. package/dist/__test__/nl-interpreter-provider-selection.test.js +0 -73
  18. package/dist/__test__/nl-interpreter-provider-selection.test.js.map +0 -1
  19. package/dist/__test__/nl-interpreter.test.d.ts +0 -1
  20. package/dist/__test__/nl-interpreter.test.js +0 -86
  21. package/dist/__test__/nl-interpreter.test.js.map +0 -1
  22. package/dist/decorators/__test__/decorators.test.d.ts +0 -1
  23. package/dist/decorators/__test__/decorators.test.js +0 -182
  24. package/dist/decorators/__test__/decorators.test.js.map +0 -1
  25. package/dist/decorators/__test__/inheritance-descriptor.test.d.ts +0 -1
  26. package/dist/decorators/__test__/inheritance-descriptor.test.js +0 -107
  27. package/dist/decorators/__test__/inheritance-descriptor.test.js.map +0 -1
  28. package/dist/dsl/__test__/dsl-interpreter.test.d.ts +0 -1
  29. package/dist/dsl/__test__/dsl-interpreter.test.js +0 -334
  30. package/dist/dsl/__test__/dsl-interpreter.test.js.map +0 -1
  31. package/dist/dsl/__test__/parser.gen.test.d.ts +0 -1
  32. package/dist/dsl/__test__/parser.gen.test.js +0 -283
  33. package/dist/dsl/__test__/parser.gen.test.js.map +0 -1
  34. package/dist/nl/__test__/context-aware-prompt.test.d.ts +0 -1
  35. package/dist/nl/__test__/context-aware-prompt.test.js +0 -247
  36. package/dist/nl/__test__/context-aware-prompt.test.js.map +0 -1
  37. package/dist/nl/__test__/context-selector.test.d.ts +0 -1
  38. package/dist/nl/__test__/context-selector.test.js +0 -20
  39. package/dist/nl/__test__/context-selector.test.js.map +0 -1
  40. package/dist/nl/__test__/nl-parser-groq-transport.test.d.ts +0 -1
  41. package/dist/nl/__test__/nl-parser-groq-transport.test.js +0 -87
  42. package/dist/nl/__test__/nl-parser-groq-transport.test.js.map +0 -1
  43. package/dist/nl/__test__/nl-parser-openai-parity.test.d.ts +0 -1
  44. package/dist/nl/__test__/nl-parser-openai-parity.test.js +0 -206
  45. package/dist/nl/__test__/nl-parser-openai-parity.test.js.map +0 -1
  46. package/dist/nl/__test__/nl-parser-openai-sampling.test.d.ts +0 -1
  47. package/dist/nl/__test__/nl-parser-openai-sampling.test.js +0 -44
  48. package/dist/nl/__test__/nl-parser-openai-sampling.test.js.map +0 -1
  49. package/dist/nl/__test__/nl-parser-openai-transport.test.d.ts +0 -1
  50. package/dist/nl/__test__/nl-parser-openai-transport.test.js +0 -55
  51. package/dist/nl/__test__/nl-parser-openai-transport.test.js.map +0 -1
  52. package/dist/nl/__test__/nl-parser-utils.test.d.ts +0 -1
  53. package/dist/nl/__test__/nl-parser-utils.test.js +0 -70
  54. package/dist/nl/__test__/nl-parser-utils.test.js.map +0 -1
  55. package/dist/nl/__test__/nl-parser.test.d.ts +0 -1
  56. package/dist/nl/__test__/nl-parser.test.js +0 -64
  57. package/dist/nl/__test__/nl-parser.test.js.map +0 -1
  58. package/dist/nl/__test__/parameter-tuning.test.d.ts +0 -1
  59. package/dist/nl/__test__/parameter-tuning.test.js +0 -95
  60. package/dist/nl/__test__/parameter-tuning.test.js.map +0 -1
  61. package/dist/nl/__test__/semantic-parsing-experiment.test.d.ts +0 -1
  62. package/dist/nl/__test__/semantic-parsing-experiment.test.js +0 -178
  63. package/dist/nl/__test__/semantic-parsing-experiment.test.js.map +0 -1
  64. package/dist/nl/llm-monitoring.test.d.ts +0 -5
  65. package/dist/nl/llm-monitoring.test.js +0 -101
  66. package/dist/nl/llm-monitoring.test.js.map +0 -1
  67. package/lib/__test__/dsl-descriptor.test.ts +0 -27
  68. package/lib/__test__/example_descriptor.ts +0 -762
  69. package/lib/__test__/food_descriptor.state.json +0 -1
  70. package/lib/__test__/food_descriptor.test.ts +0 -331
  71. package/lib/__test__/nl-interpreter-provider-selection.test.ts +0 -126
  72. package/lib/__test__/nl-interpreter.test.ts +0 -129
  73. package/lib/decorators/__test__/decorators.test.ts +0 -177
  74. package/lib/decorators/__test__/inheritance-descriptor.test.ts +0 -92
  75. package/lib/decorators/decorators.ts +0 -754
  76. package/lib/decorators/index.ts +0 -2
  77. package/lib/decorators/store.ts +0 -47
  78. package/lib/dsl/__test__/dsl-interpreter.test.ts +0 -453
  79. package/lib/dsl/__test__/parser.gen.test.ts +0 -296
  80. package/lib/dsl/dsl-interpreter.ts +0 -974
  81. package/lib/dsl/index.ts +0 -1
  82. package/lib/dsl/parser.gen.js +0 -1479
  83. package/lib/dsl/parser.pegjs +0 -130
  84. package/lib/dsl-descriptor.ts +0 -241
  85. package/lib/index.ts +0 -5
  86. package/lib/nl/__test__/context-aware-prompt.test.ts +0 -372
  87. package/lib/nl/__test__/context-selector.test.ts +0 -27
  88. package/lib/nl/__test__/nl-parser-groq-transport.test.ts +0 -139
  89. package/lib/nl/__test__/nl-parser-openai-parity.test.ts +0 -381
  90. package/lib/nl/__test__/nl-parser-openai-sampling.test.ts +0 -73
  91. package/lib/nl/__test__/nl-parser-openai-transport.test.ts +0 -79
  92. package/lib/nl/__test__/nl-parser-utils.test.ts +0 -98
  93. package/lib/nl/__test__/nl-parser.test.ts +0 -119
  94. package/lib/nl/__test__/parameter-tuning.test.ts +0 -137
  95. package/lib/nl/__test__/semantic-parsing-experiment.test.ts +0 -260
  96. package/lib/nl/context-selector.ts +0 -123
  97. package/lib/nl/index.ts +0 -19
  98. package/lib/nl/llm-monitoring.test.ts +0 -136
  99. package/lib/nl/llm-monitoring.ts +0 -339
  100. package/lib/nl/nl-parser-groq.ts +0 -510
  101. package/lib/nl/nl-parser-utils.ts +0 -310
  102. package/lib/nl/nl-parser.ts +0 -616
  103. package/lib/nl/prompt-gen.ts +0 -607
  104. package/lib/nl/prompt-res.ts +0 -207
  105. 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":";;AAAA,sDAAiD;AAGjD,SAAS,cAAc,CAAC,OAAY;IAClC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC;SACd,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC;KACd,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAc;IAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,eAAe;IAC7B,gBAAgB,EAAE,GAAG,EAAE,CAAC,cAAc;IACtC,eAAe,EAAE,GAAG,EAAE,CAAC,gBAAgB;CACxC,CAAC;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC3C,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9E,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;SACrE,CAAC,EACF;YACE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CACF,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,SAAgB,CAAC;QAEhC,MAAM,MAAM,GAAG,IAAI,6BAAY,CAC7B,UAAU,EACV,aAAa,EACb,yBAAyB,EACzB,SAAS,EACT,qCAAqC,CACtC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAExD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE3C,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,CACJ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CACnE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,eAAe,GAAG,IAAI;aACzB,EAAE,EAA2B;aAC7B,kBAAkB,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;YAC5C,IAAI,OAAO,KAAK,yBAAyB,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,MAAM,SAAS,GAAG,IAAI;aACnB,EAAE,EAAE;aACJ,qBAAqB,CACpB,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3F,KAAK,EAAE,EAAE;SACV,CAAC,EACF;YACE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CACF;aACA,qBAAqB,CACpB,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1F,KAAK,EAAE,EAAE;SACV,CAAC,EACF;YACE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CACF,CAAC;QACJ,MAAM,CAAC,KAAK,GAAG,SAAgB,CAAC;QAEhC,MAAM,MAAM,GAAG,IAAI,6BAAY,CAC7B,UAAU,EACV,aAAa,EACb,yBAAyB,EACzB,SAAS,EACT,qCAAqC,EACrC,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,CAChB,CAAC;QAEF,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACzF,MAAM,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACzF,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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":";;AAAA,4CAAwC;AAGxC,MAAM,UAAU,GAAc;IAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,eAAe;IAC7B,gBAAgB,EAAE,GAAG,EAAE,CAAC,cAAc;IACtC,eAAe,EAAE,GAAG,EAAE,CAAC,gBAAgB;CACxC,CAAC;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACxC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9E,KAAK,EAAE,EAAE;SACV,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CACK,CAAC;QAET,MAAM,MAAM,GAAG,IAAI,oBAAQ,CACzB,UAAU,EACV,OAAO,EACP,2BAA2B,EAC3B,aAAa,CACd,CAAC;QAEF,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,CAAC,EAAE,IAAI,CAAC,GAAI,MAAM,CAAC,KAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACxC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9E,KAAK,EAAE,EAAE;SACV,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CACK,CAAC;QAET,MAAM,MAAM,GAAG,IAAI,oBAAQ,CACzB,UAAU,EACV,OAAO,EACP,2BAA2B,EAC3B,aAAa,CACd,CAAC;QAEF,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEnC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAI,MAAM,CAAC,KAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAkB,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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 {};