promptfoo 0.103.13 → 0.103.15

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 (145) hide show
  1. package/dist/package.json +19 -18
  2. package/dist/src/app/assets/{index-CNZfEf8i.js → index-CejUHECf.js} +276 -275
  3. package/dist/src/app/assets/{index.es-vrsSPryr.js → index.es-DWMnMsuU.js} +1 -1
  4. package/dist/src/app/assets/{sync-B_Y0n4tJ.js → sync-OIzapIKF.js} +1 -1
  5. package/dist/src/app/index.html +1 -1
  6. package/dist/src/assertions/refusal.d.ts.map +1 -1
  7. package/dist/src/assertions/refusal.js +14 -3
  8. package/dist/src/assertions/refusal.js.map +1 -1
  9. package/dist/src/fetch.d.ts +2 -0
  10. package/dist/src/fetch.d.ts.map +1 -1
  11. package/dist/src/fetch.js +2 -1
  12. package/dist/src/fetch.js.map +1 -1
  13. package/dist/src/index.d.ts +1 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/providers/adaline.gateway.d.ts +13 -1
  16. package/dist/src/providers/adaline.gateway.d.ts.map +1 -1
  17. package/dist/src/providers/adaline.gateway.js +4 -2
  18. package/dist/src/providers/adaline.gateway.js.map +1 -1
  19. package/dist/src/providers/azure.d.ts.map +1 -1
  20. package/dist/src/providers/azure.js +22 -5
  21. package/dist/src/providers/azure.js.map +1 -1
  22. package/dist/src/providers/cloudera.d.ts +15 -0
  23. package/dist/src/providers/cloudera.d.ts.map +1 -0
  24. package/dist/src/providers/cloudera.js +22 -0
  25. package/dist/src/providers/cloudera.js.map +1 -0
  26. package/dist/src/providers/http.d.ts +5 -3
  27. package/dist/src/providers/http.d.ts.map +1 -1
  28. package/dist/src/providers/http.js +7 -6
  29. package/dist/src/providers/http.js.map +1 -1
  30. package/dist/src/providers/openai.d.ts.map +1 -1
  31. package/dist/src/providers/openai.js +7 -0
  32. package/dist/src/providers/openai.js.map +1 -1
  33. package/dist/src/providers/portkey.d.ts +3 -2
  34. package/dist/src/providers/portkey.d.ts.map +1 -1
  35. package/dist/src/providers/portkey.js +1 -0
  36. package/dist/src/providers/portkey.js.map +1 -1
  37. package/dist/src/providers/watsonx.d.ts +2 -2
  38. package/dist/src/providers.d.ts +2 -0
  39. package/dist/src/providers.d.ts.map +1 -1
  40. package/dist/src/providers.js +36 -3
  41. package/dist/src/providers.js.map +1 -1
  42. package/dist/src/redteam/commands/generate.d.ts.map +1 -1
  43. package/dist/src/redteam/commands/generate.js +31 -10
  44. package/dist/src/redteam/commands/generate.js.map +1 -1
  45. package/dist/src/redteam/commands/run.d.ts.map +1 -1
  46. package/dist/src/redteam/commands/run.js +1 -1
  47. package/dist/src/redteam/commands/run.js.map +1 -1
  48. package/dist/src/redteam/graders.d.ts.map +1 -1
  49. package/dist/src/redteam/graders.js +13 -13
  50. package/dist/src/redteam/graders.js.map +1 -1
  51. package/dist/src/redteam/index.d.ts +1 -0
  52. package/dist/src/redteam/index.d.ts.map +1 -1
  53. package/dist/src/redteam/index.js +1 -1
  54. package/dist/src/redteam/index.js.map +1 -1
  55. package/dist/src/redteam/plugins/harmful/graders.d.ts +52 -0
  56. package/dist/src/redteam/plugins/harmful/graders.d.ts.map +1 -1
  57. package/dist/src/redteam/plugins/harmful/graders.js +577 -22
  58. package/dist/src/redteam/plugins/harmful/graders.js.map +1 -1
  59. package/dist/src/redteam/providers/crescendo/index.d.ts +2 -1
  60. package/dist/src/redteam/providers/crescendo/index.d.ts.map +1 -1
  61. package/dist/src/redteam/providers/crescendo/index.js +5 -5
  62. package/dist/src/redteam/providers/crescendo/index.js.map +1 -1
  63. package/dist/src/redteam/providers/goat.d.ts +2 -1
  64. package/dist/src/redteam/providers/goat.d.ts.map +1 -1
  65. package/dist/src/redteam/providers/goat.js +5 -5
  66. package/dist/src/redteam/providers/goat.js.map +1 -1
  67. package/dist/src/redteam/providers/shared.js +1 -1
  68. package/dist/src/redteam/providers/shared.js.map +1 -1
  69. package/dist/src/redteam/sharedFrontend.d.ts.map +1 -1
  70. package/dist/src/redteam/sharedFrontend.js +18 -2
  71. package/dist/src/redteam/sharedFrontend.js.map +1 -1
  72. package/dist/src/redteam/types.d.ts +1 -0
  73. package/dist/src/redteam/types.d.ts.map +1 -1
  74. package/dist/src/redteam/util.d.ts.map +1 -1
  75. package/dist/src/redteam/util.js +2 -0
  76. package/dist/src/redteam/util.js.map +1 -1
  77. package/dist/src/server/server.d.ts.map +1 -1
  78. package/dist/src/server/server.js +1 -7
  79. package/dist/src/server/server.js.map +1 -1
  80. package/dist/src/validators/redteam.d.ts +3 -0
  81. package/dist/src/validators/redteam.d.ts.map +1 -1
  82. package/dist/src/validators/redteam.js +2 -0
  83. package/dist/src/validators/redteam.js.map +1 -1
  84. package/dist/test/assertions/answerRelevance.test.d.ts +2 -0
  85. package/dist/test/assertions/answerRelevance.test.d.ts.map +1 -0
  86. package/dist/test/assertions/answerRelevance.test.js +177 -0
  87. package/dist/test/assertions/answerRelevance.test.js.map +1 -0
  88. package/dist/test/assertions/contextFaithfulness.test.d.ts +2 -0
  89. package/dist/test/assertions/contextFaithfulness.test.d.ts.map +1 -0
  90. package/dist/test/assertions/contextFaithfulness.test.js +226 -0
  91. package/dist/test/assertions/contextFaithfulness.test.js.map +1 -0
  92. package/dist/test/assertions/contextRecall.test.d.ts +2 -0
  93. package/dist/test/assertions/contextRecall.test.d.ts.map +1 -0
  94. package/dist/test/assertions/contextRecall.test.js +243 -0
  95. package/dist/test/assertions/contextRecall.test.js.map +1 -0
  96. package/dist/test/assertions/contextRelevance.test.d.ts +2 -0
  97. package/dist/test/assertions/contextRelevance.test.d.ts.map +1 -0
  98. package/dist/test/assertions/contextRelevance.test.js +238 -0
  99. package/dist/test/assertions/contextRelevance.test.js.map +1 -0
  100. package/dist/test/assertions/geval.test.d.ts +2 -0
  101. package/dist/test/assertions/geval.test.d.ts.map +1 -0
  102. package/dist/test/assertions/geval.test.js +222 -0
  103. package/dist/test/assertions/geval.test.js.map +1 -0
  104. package/dist/test/assertions/modelGradedClosedQa.test.d.ts +2 -0
  105. package/dist/test/assertions/modelGradedClosedQa.test.d.ts.map +1 -0
  106. package/dist/test/assertions/modelGradedClosedQa.test.js +200 -0
  107. package/dist/test/assertions/modelGradedClosedQa.test.js.map +1 -0
  108. package/dist/test/assertions/refusal.test.d.ts +2 -0
  109. package/dist/test/assertions/refusal.test.d.ts.map +1 -0
  110. package/dist/test/assertions/refusal.test.js +300 -0
  111. package/dist/test/assertions/refusal.test.js.map +1 -0
  112. package/dist/test/fetch.test.js +66 -18
  113. package/dist/test/fetch.test.js.map +1 -1
  114. package/dist/test/providers/adaline.gateway.test.d.ts +2 -0
  115. package/dist/test/providers/adaline.gateway.test.d.ts.map +1 -0
  116. package/dist/test/providers/adaline.gateway.test.js +245 -0
  117. package/dist/test/providers/adaline.gateway.test.js.map +1 -0
  118. package/dist/test/providers/azure.test.js +73 -12
  119. package/dist/test/providers/azure.test.js.map +1 -1
  120. package/dist/test/providers/http.test.js +70 -2
  121. package/dist/test/providers/http.test.js.map +1 -1
  122. package/dist/test/providers/index.test.js +35 -459
  123. package/dist/test/providers/index.test.js.map +1 -1
  124. package/dist/test/providers/openai.test.js +509 -0
  125. package/dist/test/providers/openai.test.js.map +1 -1
  126. package/dist/test/providers/portkey.test.js +57 -0
  127. package/dist/test/providers/portkey.test.js.map +1 -1
  128. package/dist/test/providers/simulatedUser.test.js +1 -0
  129. package/dist/test/providers/simulatedUser.test.js.map +1 -1
  130. package/dist/test/providers.test.js +10 -0
  131. package/dist/test/providers.test.js.map +1 -1
  132. package/dist/test/redteam/commands/generate.test.js +7 -0
  133. package/dist/test/redteam/commands/generate.test.js.map +1 -1
  134. package/dist/test/redteam/extraction/purpose.test.js +1 -0
  135. package/dist/test/redteam/extraction/purpose.test.js.map +1 -1
  136. package/dist/test/redteam/plugins/asciiSmuggling.test.d.ts +2 -0
  137. package/dist/test/redteam/plugins/asciiSmuggling.test.d.ts.map +1 -0
  138. package/dist/test/redteam/plugins/asciiSmuggling.test.js +75 -0
  139. package/dist/test/redteam/plugins/asciiSmuggling.test.js.map +1 -0
  140. package/dist/test/redteam/providers/crescendo/index.test.js +3 -3
  141. package/dist/test/redteam/providers/crescendo/index.test.js.map +1 -1
  142. package/dist/test/redteam/strategies/index.test.js +1 -0
  143. package/dist/test/redteam/strategies/index.test.js.map +1 -1
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +19 -18
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const answerRelevance_1 = require("../../src/assertions/answerRelevance");
7
+ const matchers_1 = require("../../src/matchers");
8
+ const invariant_1 = __importDefault(require("../../src/util/invariant"));
9
+ jest.mock('../../src/matchers');
10
+ jest.mock('../../src/util/invariant');
11
+ describe('handleAnswerRelevance', () => {
12
+ beforeEach(() => {
13
+ jest.resetAllMocks();
14
+ jest.mocked(invariant_1.default).mockImplementation((condition, message) => {
15
+ if (!condition) {
16
+ throw new Error(typeof message === 'function' ? message() : message);
17
+ }
18
+ });
19
+ });
20
+ it('should call matchesAnswerRelevance with correct parameters', async () => {
21
+ const mockMatchesAnswerRelevance = jest.mocked(matchers_1.matchesAnswerRelevance);
22
+ mockMatchesAnswerRelevance.mockResolvedValue({
23
+ pass: true,
24
+ score: 0.8,
25
+ reason: 'test reason',
26
+ });
27
+ const result = await (0, answerRelevance_1.handleAnswerRelevance)({
28
+ assertion: {
29
+ type: 'answer-relevance',
30
+ threshold: 0.7,
31
+ },
32
+ output: 'test output',
33
+ prompt: 'test prompt',
34
+ test: {
35
+ vars: {},
36
+ options: {},
37
+ },
38
+ baseType: 'answer-relevance',
39
+ context: {},
40
+ inverse: false,
41
+ outputString: 'test output',
42
+ providerResponse: {
43
+ output: 'test output',
44
+ tokenUsage: {},
45
+ },
46
+ });
47
+ expect(mockMatchesAnswerRelevance).toHaveBeenCalledWith('test prompt', 'test output', 0.7, {});
48
+ expect(result).toEqual({
49
+ assertion: {
50
+ type: 'answer-relevance',
51
+ threshold: 0.7,
52
+ },
53
+ pass: true,
54
+ score: 0.8,
55
+ reason: 'test reason',
56
+ });
57
+ });
58
+ it('should use query from vars if available', async () => {
59
+ const mockMatchesAnswerRelevance = jest.mocked(matchers_1.matchesAnswerRelevance);
60
+ mockMatchesAnswerRelevance.mockResolvedValue({
61
+ pass: true,
62
+ score: 0.8,
63
+ reason: 'test reason',
64
+ });
65
+ const result = await (0, answerRelevance_1.handleAnswerRelevance)({
66
+ assertion: {
67
+ type: 'answer-relevance',
68
+ threshold: 0.7,
69
+ },
70
+ output: 'test output',
71
+ prompt: 'test prompt',
72
+ test: {
73
+ vars: {
74
+ query: 'test query',
75
+ },
76
+ options: {},
77
+ },
78
+ baseType: 'answer-relevance',
79
+ context: {},
80
+ inverse: false,
81
+ outputString: 'test output',
82
+ providerResponse: {
83
+ output: 'test output',
84
+ tokenUsage: {},
85
+ },
86
+ });
87
+ expect(mockMatchesAnswerRelevance).toHaveBeenCalledWith('test query', 'test output', 0.7, {});
88
+ expect(result).toEqual({
89
+ assertion: {
90
+ type: 'answer-relevance',
91
+ threshold: 0.7,
92
+ },
93
+ pass: true,
94
+ score: 0.8,
95
+ reason: 'test reason',
96
+ });
97
+ });
98
+ it('should throw error if output is not string', async () => {
99
+ await expect((0, answerRelevance_1.handleAnswerRelevance)({
100
+ assertion: {
101
+ type: 'answer-relevance',
102
+ },
103
+ output: {},
104
+ prompt: 'test prompt',
105
+ test: {
106
+ vars: {},
107
+ options: {},
108
+ },
109
+ baseType: 'answer-relevance',
110
+ context: {},
111
+ inverse: false,
112
+ outputString: 'test output',
113
+ providerResponse: {
114
+ output: 'test output',
115
+ tokenUsage: {},
116
+ },
117
+ })).rejects.toThrow('answer-relevance assertion type must evaluate a string output');
118
+ });
119
+ it('should throw error if prompt is missing', async () => {
120
+ await expect((0, answerRelevance_1.handleAnswerRelevance)({
121
+ assertion: {
122
+ type: 'answer-relevance',
123
+ },
124
+ output: 'test output',
125
+ prompt: '',
126
+ test: {
127
+ vars: {},
128
+ options: {},
129
+ },
130
+ baseType: 'answer-relevance',
131
+ context: {},
132
+ inverse: false,
133
+ outputString: 'test output',
134
+ providerResponse: {
135
+ output: 'test output',
136
+ tokenUsage: {},
137
+ },
138
+ })).rejects.toThrow('answer-relevance assertion type must have a prompt');
139
+ });
140
+ it('should use default threshold of 0 if not specified', async () => {
141
+ const mockMatchesAnswerRelevance = jest.mocked(matchers_1.matchesAnswerRelevance);
142
+ mockMatchesAnswerRelevance.mockResolvedValue({
143
+ pass: true,
144
+ score: 0.8,
145
+ reason: 'test reason',
146
+ });
147
+ const result = await (0, answerRelevance_1.handleAnswerRelevance)({
148
+ assertion: {
149
+ type: 'answer-relevance',
150
+ },
151
+ output: 'test output',
152
+ prompt: 'test prompt',
153
+ test: {
154
+ vars: {},
155
+ options: {},
156
+ },
157
+ baseType: 'answer-relevance',
158
+ context: {},
159
+ inverse: false,
160
+ outputString: 'test output',
161
+ providerResponse: {
162
+ output: 'test output',
163
+ tokenUsage: {},
164
+ },
165
+ });
166
+ expect(mockMatchesAnswerRelevance).toHaveBeenCalledWith('test prompt', 'test output', 0, {});
167
+ expect(result).toEqual({
168
+ assertion: {
169
+ type: 'answer-relevance',
170
+ },
171
+ pass: true,
172
+ score: 0.8,
173
+ reason: 'test reason',
174
+ });
175
+ });
176
+ });
177
+ //# sourceMappingURL=answerRelevance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerRelevance.test.js","sourceRoot":"","sources":["../../../test/assertions/answerRelevance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contextFaithfulness.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextFaithfulness.test.d.ts","sourceRoot":"","sources":["../../../test/assertions/contextFaithfulness.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const contextFaithfulness_1 = require("../../src/assertions/contextFaithfulness");
37
+ const matchers = __importStar(require("../../src/matchers"));
38
+ jest.mock('../../src/matchers');
39
+ describe('handleContextFaithfulness', () => {
40
+ beforeEach(() => {
41
+ jest.resetAllMocks();
42
+ });
43
+ it('should throw error if vars is missing', async () => {
44
+ const params = {
45
+ assertion: { type: 'context-faithfulness' },
46
+ test: {},
47
+ output: 'test output',
48
+ baseType: 'context-faithfulness',
49
+ context: {
50
+ prompt: 'test prompt',
51
+ vars: {},
52
+ test: {},
53
+ logProbs: null,
54
+ tokenUsage: null,
55
+ cached: false,
56
+ provider: null,
57
+ providerResponse: null,
58
+ },
59
+ inverse: false,
60
+ outputString: 'test output',
61
+ providerResponse: null,
62
+ };
63
+ await expect((0, contextFaithfulness_1.handleContextFaithfulness)(params)).rejects.toThrow('context-faithfulness assertion type must have a vars object');
64
+ });
65
+ it('should throw error if query is missing', async () => {
66
+ const params = {
67
+ assertion: { type: 'context-faithfulness' },
68
+ test: {
69
+ vars: {
70
+ context: 'test context',
71
+ },
72
+ },
73
+ output: 'test output',
74
+ baseType: 'context-faithfulness',
75
+ context: {
76
+ prompt: 'test prompt',
77
+ vars: {},
78
+ test: {},
79
+ logProbs: null,
80
+ tokenUsage: null,
81
+ cached: false,
82
+ provider: null,
83
+ providerResponse: null,
84
+ },
85
+ inverse: false,
86
+ outputString: 'test output',
87
+ providerResponse: null,
88
+ };
89
+ await expect((0, contextFaithfulness_1.handleContextFaithfulness)(params)).rejects.toThrow('context-faithfulness assertion type must have a query var');
90
+ });
91
+ it('should throw error if context is missing', async () => {
92
+ const params = {
93
+ assertion: { type: 'context-faithfulness' },
94
+ test: {
95
+ vars: {
96
+ query: 'test query',
97
+ },
98
+ },
99
+ output: 'test output',
100
+ baseType: 'context-faithfulness',
101
+ context: {
102
+ prompt: 'test prompt',
103
+ vars: {},
104
+ test: {},
105
+ logProbs: null,
106
+ tokenUsage: null,
107
+ cached: false,
108
+ provider: null,
109
+ providerResponse: null,
110
+ },
111
+ inverse: false,
112
+ outputString: 'test output',
113
+ providerResponse: null,
114
+ };
115
+ await expect((0, contextFaithfulness_1.handleContextFaithfulness)(params)).rejects.toThrow('context-faithfulness assertion type must have a context var');
116
+ });
117
+ it('should throw error if output is not a string', async () => {
118
+ const params = {
119
+ assertion: { type: 'context-faithfulness' },
120
+ test: {
121
+ vars: {
122
+ query: 'test query',
123
+ context: 'test context',
124
+ },
125
+ },
126
+ output: 123,
127
+ baseType: 'context-faithfulness',
128
+ context: {
129
+ prompt: 'test prompt',
130
+ vars: {},
131
+ test: {},
132
+ logProbs: null,
133
+ tokenUsage: null,
134
+ cached: false,
135
+ provider: null,
136
+ providerResponse: null,
137
+ },
138
+ inverse: false,
139
+ outputString: 'test output',
140
+ providerResponse: null,
141
+ };
142
+ await expect((0, contextFaithfulness_1.handleContextFaithfulness)(params)).rejects.toThrow('context-faithfulness assertion type must have a string output');
143
+ });
144
+ it('should call matchesContextFaithfulness with correct params', async () => {
145
+ const mockResult = {
146
+ pass: true,
147
+ score: 0.9,
148
+ reason: 'test reason',
149
+ };
150
+ jest.mocked(matchers.matchesContextFaithfulness).mockResolvedValue(mockResult);
151
+ const params = {
152
+ assertion: {
153
+ type: 'context-faithfulness',
154
+ threshold: 0.8,
155
+ },
156
+ test: {
157
+ vars: {
158
+ query: 'test query',
159
+ context: 'test context',
160
+ },
161
+ options: {
162
+ provider: 'test-provider',
163
+ },
164
+ },
165
+ output: 'test output',
166
+ baseType: 'context-faithfulness',
167
+ context: {
168
+ prompt: 'test prompt',
169
+ vars: {},
170
+ test: {},
171
+ logProbs: null,
172
+ tokenUsage: null,
173
+ cached: false,
174
+ provider: null,
175
+ providerResponse: null,
176
+ },
177
+ inverse: false,
178
+ outputString: 'test output',
179
+ providerResponse: null,
180
+ };
181
+ const result = await (0, contextFaithfulness_1.handleContextFaithfulness)(params);
182
+ expect(matchers.matchesContextFaithfulness).toHaveBeenCalledWith('test query', 'test output', 'test context', 0.8, { provider: 'test-provider' });
183
+ expect(result).toEqual({
184
+ assertion: params.assertion,
185
+ ...mockResult,
186
+ });
187
+ });
188
+ it('should use default threshold of 0 if not provided', async () => {
189
+ const mockResult = {
190
+ pass: true,
191
+ score: 0.9,
192
+ reason: 'test reason',
193
+ };
194
+ jest.mocked(matchers.matchesContextFaithfulness).mockResolvedValue(mockResult);
195
+ const params = {
196
+ assertion: {
197
+ type: 'context-faithfulness',
198
+ },
199
+ test: {
200
+ vars: {
201
+ query: 'test query',
202
+ context: 'test context',
203
+ },
204
+ options: {},
205
+ },
206
+ output: 'test output',
207
+ baseType: 'context-faithfulness',
208
+ context: {
209
+ prompt: 'test prompt',
210
+ vars: {},
211
+ test: {},
212
+ logProbs: null,
213
+ tokenUsage: null,
214
+ cached: false,
215
+ provider: null,
216
+ providerResponse: null,
217
+ },
218
+ inverse: false,
219
+ outputString: 'test output',
220
+ providerResponse: null,
221
+ };
222
+ await (0, contextFaithfulness_1.handleContextFaithfulness)(params);
223
+ expect(matchers.matchesContextFaithfulness).toHaveBeenCalledWith('test query', 'test output', 'test context', 0, {});
224
+ });
225
+ });
226
+ //# sourceMappingURL=contextFaithfulness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextFaithfulness.test.js","sourceRoot":"","sources":["../../../test/assertions/contextFaithfulness.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contextRecall.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextRecall.test.d.ts","sourceRoot":"","sources":["../../../test/assertions/contextRecall.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const contextRecall_1 = require("../../src/assertions/contextRecall");
37
+ const matchers = __importStar(require("../../src/matchers"));
38
+ jest.mock('../../src/matchers');
39
+ describe('handleContextRecall', () => {
40
+ const mockMatchesContextRecall = jest.spyOn(matchers, 'matchesContextRecall');
41
+ beforeEach(() => {
42
+ jest.resetAllMocks();
43
+ });
44
+ it('should handle context recall with prompt context', async () => {
45
+ const mockResult = {
46
+ pass: true,
47
+ score: 0.9,
48
+ reason: 'Good recall',
49
+ };
50
+ mockMatchesContextRecall.mockResolvedValue(mockResult);
51
+ const mockProvider = {
52
+ id: () => 'test-provider',
53
+ callApi: jest.fn(),
54
+ };
55
+ const params = {
56
+ assertion: { type: 'context-recall', threshold: 0.8 },
57
+ renderedValue: 'test output',
58
+ prompt: 'test context',
59
+ test: {
60
+ vars: {},
61
+ options: {},
62
+ },
63
+ baseType: 'context-recall',
64
+ context: {
65
+ prompt: 'test context',
66
+ vars: {},
67
+ test: {
68
+ vars: {},
69
+ options: {},
70
+ },
71
+ logProbs: undefined,
72
+ provider: mockProvider,
73
+ providerResponse: undefined,
74
+ },
75
+ inverse: false,
76
+ output: 'test output',
77
+ outputString: 'test output',
78
+ provider: mockProvider,
79
+ providerResponse: {},
80
+ };
81
+ const result = await (0, contextRecall_1.handleContextRecall)(params);
82
+ expect(result).toEqual({
83
+ assertion: { type: 'context-recall', threshold: 0.8 },
84
+ ...mockResult,
85
+ });
86
+ expect(mockMatchesContextRecall).toHaveBeenCalledWith('test context', 'test output', 0.8, {}, {});
87
+ });
88
+ it('should handle context recall with vars context', async () => {
89
+ const mockResult = {
90
+ pass: true,
91
+ score: 0.85,
92
+ reason: 'Good recall from vars',
93
+ };
94
+ mockMatchesContextRecall.mockResolvedValue(mockResult);
95
+ const mockProvider = {
96
+ id: () => 'test-provider',
97
+ callApi: jest.fn(),
98
+ };
99
+ const params = {
100
+ assertion: { type: 'context-recall', threshold: 0.7 },
101
+ renderedValue: 'test output',
102
+ prompt: 'original context',
103
+ test: {
104
+ vars: { context: 'context from vars' },
105
+ options: {},
106
+ },
107
+ baseType: 'context-recall',
108
+ context: {
109
+ prompt: 'original context',
110
+ vars: { context: 'context from vars' },
111
+ test: {
112
+ vars: { context: 'context from vars' },
113
+ options: {},
114
+ },
115
+ logProbs: undefined,
116
+ provider: mockProvider,
117
+ providerResponse: undefined,
118
+ },
119
+ inverse: false,
120
+ output: 'test output',
121
+ outputString: 'test output',
122
+ provider: mockProvider,
123
+ providerResponse: {},
124
+ };
125
+ const result = await (0, contextRecall_1.handleContextRecall)(params);
126
+ expect(result).toEqual({
127
+ assertion: { type: 'context-recall', threshold: 0.7 },
128
+ ...mockResult,
129
+ });
130
+ expect(mockMatchesContextRecall).toHaveBeenCalledWith('context from vars', 'test output', 0.7, {}, { context: 'context from vars' });
131
+ });
132
+ it('should use default threshold of 0 when not provided', async () => {
133
+ const mockResult = {
134
+ pass: true,
135
+ score: 0.5,
136
+ reason: 'Default threshold test',
137
+ };
138
+ mockMatchesContextRecall.mockResolvedValue(mockResult);
139
+ const mockProvider = {
140
+ id: () => 'test-provider',
141
+ callApi: jest.fn(),
142
+ };
143
+ const params = {
144
+ assertion: { type: 'context-recall' },
145
+ renderedValue: 'test output',
146
+ prompt: 'test context',
147
+ test: {
148
+ vars: {},
149
+ options: {},
150
+ },
151
+ baseType: 'context-recall',
152
+ context: {
153
+ prompt: 'test context',
154
+ vars: {},
155
+ test: {
156
+ vars: {},
157
+ options: {},
158
+ },
159
+ logProbs: undefined,
160
+ provider: mockProvider,
161
+ providerResponse: undefined,
162
+ },
163
+ inverse: false,
164
+ output: 'test output',
165
+ outputString: 'test output',
166
+ provider: mockProvider,
167
+ providerResponse: {},
168
+ };
169
+ const result = await (0, contextRecall_1.handleContextRecall)(params);
170
+ expect(result).toEqual({
171
+ assertion: { type: 'context-recall' },
172
+ ...mockResult,
173
+ });
174
+ expect(mockMatchesContextRecall).toHaveBeenCalledWith('test context', 'test output', 0, {}, {});
175
+ });
176
+ it('should throw error when renderedValue is not a string', async () => {
177
+ const mockProvider = {
178
+ id: () => 'test-provider',
179
+ callApi: jest.fn(),
180
+ };
181
+ const params = {
182
+ assertion: { type: 'context-recall' },
183
+ renderedValue: { value: 123 }, // Changed to object to match AssertionValue type
184
+ prompt: 'test context',
185
+ test: {
186
+ vars: {},
187
+ options: {},
188
+ },
189
+ baseType: 'context-recall',
190
+ context: {
191
+ prompt: 'test context',
192
+ vars: {},
193
+ test: {
194
+ vars: {},
195
+ options: {},
196
+ },
197
+ logProbs: undefined,
198
+ provider: mockProvider,
199
+ providerResponse: undefined,
200
+ },
201
+ inverse: false,
202
+ output: '123',
203
+ outputString: '123',
204
+ provider: mockProvider,
205
+ providerResponse: {},
206
+ };
207
+ await expect((0, contextRecall_1.handleContextRecall)(params)).rejects.toThrow('context-recall assertion type must have a string value');
208
+ });
209
+ it('should throw error when prompt is missing', async () => {
210
+ const mockProvider = {
211
+ id: () => 'test-provider',
212
+ callApi: jest.fn(),
213
+ };
214
+ const params = {
215
+ assertion: { type: 'context-recall' },
216
+ renderedValue: 'test output',
217
+ prompt: undefined,
218
+ test: {
219
+ vars: {},
220
+ options: {},
221
+ },
222
+ baseType: 'context-recall',
223
+ context: {
224
+ prompt: undefined,
225
+ vars: {},
226
+ test: {
227
+ vars: {},
228
+ options: {},
229
+ },
230
+ logProbs: undefined,
231
+ provider: mockProvider,
232
+ providerResponse: undefined,
233
+ },
234
+ inverse: false,
235
+ output: 'test output',
236
+ outputString: 'test output',
237
+ provider: mockProvider,
238
+ providerResponse: {},
239
+ };
240
+ await expect((0, contextRecall_1.handleContextRecall)(params)).rejects.toThrow('context-recall assertion type must have a prompt');
241
+ });
242
+ });
243
+ //# sourceMappingURL=contextRecall.test.js.map