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,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const modelGradedClosedQa_1 = require("../../src/assertions/modelGradedClosedQa");
4
+ const matchers_1 = require("../../src/matchers");
5
+ const templates_1 = require("../../src/util/templates");
6
+ jest.mock('../../src/matchers');
7
+ jest.mock('../../src/util/templates');
8
+ describe('handleModelGradedClosedQa', () => {
9
+ beforeEach(() => {
10
+ jest.resetAllMocks();
11
+ const mockNunjucksEnv = {
12
+ options: { autoescape: true },
13
+ render: jest.fn(),
14
+ renderString: jest.fn().mockImplementation((str) => str),
15
+ addFilter: jest.fn(),
16
+ getFilter: jest.fn(),
17
+ hasExtension: jest.fn(),
18
+ addExtension: jest.fn(),
19
+ removeExtension: jest.fn(),
20
+ getExtension: jest.fn(),
21
+ addGlobal: jest.fn(),
22
+ getGlobal: jest.fn(),
23
+ getTemplate: jest.fn(),
24
+ express: jest.fn(),
25
+ on: jest.fn(),
26
+ };
27
+ jest.mocked(templates_1.getNunjucksEngine).mockReturnValue(mockNunjucksEnv);
28
+ jest.mocked(matchers_1.matchesClosedQa).mockResolvedValue({
29
+ pass: true,
30
+ score: 1,
31
+ reason: 'test reason',
32
+ });
33
+ });
34
+ it('should validate string value', async () => {
35
+ const params = {
36
+ assertion: { type: 'model-graded-closedqa' },
37
+ baseType: 'model-graded-closedqa',
38
+ context: {
39
+ prompt: 'test prompt',
40
+ vars: {},
41
+ test: { vars: {} },
42
+ logProbs: undefined,
43
+ provider: undefined,
44
+ providerResponse: undefined,
45
+ },
46
+ inverse: false,
47
+ output: 'test output',
48
+ outputString: 'test output',
49
+ prompt: 'test prompt',
50
+ providerResponse: {},
51
+ renderedValue: {},
52
+ test: {
53
+ options: {},
54
+ vars: {},
55
+ },
56
+ };
57
+ await expect((0, modelGradedClosedQa_1.handleModelGradedClosedQa)(params)).rejects.toThrow('model-graded-closedqa assertion type must have a string value');
58
+ });
59
+ it('should validate prompt exists', async () => {
60
+ const params = {
61
+ assertion: { type: 'model-graded-closedqa' },
62
+ baseType: 'model-graded-closedqa',
63
+ context: {
64
+ prompt: undefined,
65
+ vars: {},
66
+ test: { vars: {} },
67
+ logProbs: undefined,
68
+ provider: undefined,
69
+ providerResponse: undefined,
70
+ },
71
+ inverse: false,
72
+ output: 'test output',
73
+ outputString: 'test output',
74
+ prompt: undefined,
75
+ providerResponse: {},
76
+ renderedValue: 'test value',
77
+ test: {
78
+ options: {},
79
+ vars: {},
80
+ },
81
+ };
82
+ await expect((0, modelGradedClosedQa_1.handleModelGradedClosedQa)(params)).rejects.toThrow('model-graded-closedqa assertion type must have a prompt');
83
+ });
84
+ it('should validate rubricPrompt is string if provided', async () => {
85
+ const params = {
86
+ assertion: { type: 'model-graded-closedqa' },
87
+ baseType: 'model-graded-closedqa',
88
+ context: {
89
+ prompt: 'test prompt',
90
+ vars: {},
91
+ test: { vars: {} },
92
+ logProbs: undefined,
93
+ provider: undefined,
94
+ providerResponse: undefined,
95
+ },
96
+ inverse: false,
97
+ output: 'test output',
98
+ outputString: 'test output',
99
+ prompt: 'test prompt',
100
+ providerResponse: {},
101
+ renderedValue: 'test value',
102
+ test: {
103
+ options: {
104
+ rubricPrompt: {},
105
+ },
106
+ vars: {},
107
+ },
108
+ };
109
+ await expect((0, modelGradedClosedQa_1.handleModelGradedClosedQa)(params)).rejects.toThrow('rubricPrompt must be a string');
110
+ });
111
+ it('should process rubricPrompt with nunjucks if provided', async () => {
112
+ const mockRenderString = jest.fn().mockReturnValue('rendered rubric');
113
+ const mockNunjucksEnv = {
114
+ options: { autoescape: true },
115
+ render: jest.fn(),
116
+ renderString: mockRenderString,
117
+ addFilter: jest.fn(),
118
+ getFilter: jest.fn(),
119
+ hasExtension: jest.fn(),
120
+ addExtension: jest.fn(),
121
+ removeExtension: jest.fn(),
122
+ getExtension: jest.fn(),
123
+ addGlobal: jest.fn(),
124
+ getGlobal: jest.fn(),
125
+ getTemplate: jest.fn(),
126
+ express: jest.fn(),
127
+ on: jest.fn(),
128
+ };
129
+ jest.mocked(templates_1.getNunjucksEngine).mockReturnValue(mockNunjucksEnv);
130
+ const params = {
131
+ assertion: { type: 'model-graded-closedqa' },
132
+ baseType: 'model-graded-closedqa',
133
+ context: {
134
+ prompt: 'test prompt',
135
+ vars: { var: 'value' },
136
+ test: { vars: { var: 'value' } },
137
+ logProbs: undefined,
138
+ provider: undefined,
139
+ providerResponse: undefined,
140
+ },
141
+ inverse: false,
142
+ output: 'test output',
143
+ outputString: 'test output',
144
+ prompt: 'test prompt',
145
+ providerResponse: {},
146
+ renderedValue: 'test value',
147
+ test: {
148
+ options: {
149
+ rubricPrompt: 'test rubric {{ var }}',
150
+ },
151
+ vars: {
152
+ var: 'value',
153
+ },
154
+ },
155
+ };
156
+ await (0, modelGradedClosedQa_1.handleModelGradedClosedQa)(params);
157
+ expect(mockRenderString).toHaveBeenCalledWith('test rubric {{ var }}', { var: 'value' });
158
+ });
159
+ it('should call matchesClosedQa with correct parameters', async () => {
160
+ const params = {
161
+ assertion: { type: 'model-graded-closedqa' },
162
+ baseType: 'model-graded-closedqa',
163
+ context: {
164
+ prompt: 'test prompt',
165
+ vars: { var: 'value' },
166
+ test: { vars: { var: 'value' } },
167
+ logProbs: undefined,
168
+ provider: undefined,
169
+ providerResponse: undefined,
170
+ },
171
+ inverse: false,
172
+ output: 'test output',
173
+ outputString: 'test output',
174
+ prompt: 'test prompt',
175
+ providerResponse: {},
176
+ renderedValue: 'test value',
177
+ test: {
178
+ options: {
179
+ rubricPrompt: 'test rubric',
180
+ },
181
+ vars: {
182
+ var: 'value',
183
+ },
184
+ },
185
+ };
186
+ const result = await (0, modelGradedClosedQa_1.handleModelGradedClosedQa)(params);
187
+ expect(matchers_1.matchesClosedQa).toHaveBeenCalledWith('test prompt', 'test value', 'test output', {
188
+ rubricPrompt: 'test rubric',
189
+ }, {
190
+ var: 'value',
191
+ });
192
+ expect(result).toEqual({
193
+ assertion: { type: 'model-graded-closedqa' },
194
+ pass: true,
195
+ score: 1,
196
+ reason: 'test reason',
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=modelGradedClosedQa.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelGradedClosedQa.test.js","sourceRoot":"","sources":["../../../test/assertions/modelGradedClosedQa.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=refusal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusal.test.d.ts","sourceRoot":"","sources":["../../../test/assertions/refusal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const refusal_1 = require("../../src/assertions/refusal");
4
+ const assertion = {
5
+ type: 'is-refusal',
6
+ };
7
+ const defaultContext = {
8
+ prompt: undefined,
9
+ vars: {},
10
+ test: {},
11
+ logProbs: undefined,
12
+ config: {},
13
+ provider: undefined,
14
+ providerResponse: undefined,
15
+ };
16
+ describe('is-refusal assertion', () => {
17
+ // -------------------------------------------------- Basic Tests ------------------------------------------------------ //
18
+ describe('Basic tests', () => {
19
+ it('should pass when the output is a refusal message', () => {
20
+ const result = (0, refusal_1.handleIsRefusal)({
21
+ assertion,
22
+ output: 'I apologize, but I cannot assist with that request.',
23
+ inverse: false,
24
+ baseType: 'is-refusal',
25
+ context: defaultContext,
26
+ outputString: 'I apologize, but I cannot assist with that request.',
27
+ providerResponse: {},
28
+ test: {},
29
+ });
30
+ expect(result).toEqual({
31
+ assertion,
32
+ pass: true,
33
+ score: 1,
34
+ reason: 'Assertion passed',
35
+ });
36
+ });
37
+ it('should fail when the output is not a refusal message', () => {
38
+ const result = (0, refusal_1.handleIsRefusal)({
39
+ assertion,
40
+ output: "Here's how to accomplish that task...",
41
+ inverse: false,
42
+ baseType: 'is-refusal',
43
+ context: defaultContext,
44
+ outputString: "Here's how to accomplish that task...",
45
+ providerResponse: {},
46
+ test: {},
47
+ });
48
+ expect(result).toEqual({
49
+ assertion,
50
+ pass: false,
51
+ score: 0,
52
+ reason: 'Expected output to be a refusal',
53
+ });
54
+ });
55
+ it('should pass when inverse=true and output is not a refusal', () => {
56
+ const result = (0, refusal_1.handleIsRefusal)({
57
+ assertion,
58
+ output: "Here's how to accomplish that task...",
59
+ inverse: true,
60
+ baseType: 'is-refusal',
61
+ context: defaultContext,
62
+ outputString: "Here's how to accomplish that task...",
63
+ providerResponse: {},
64
+ test: {},
65
+ });
66
+ expect(result).toEqual({
67
+ assertion,
68
+ pass: true,
69
+ score: 1,
70
+ reason: 'Assertion passed',
71
+ });
72
+ });
73
+ it('should fail when inverse=true and output is a refusal', () => {
74
+ const result = (0, refusal_1.handleIsRefusal)({
75
+ assertion,
76
+ output: 'I apologize, but I cannot assist with that request.',
77
+ inverse: true,
78
+ baseType: 'is-refusal',
79
+ context: defaultContext,
80
+ outputString: 'I apologize, but I cannot assist with that request.',
81
+ providerResponse: {},
82
+ test: {},
83
+ });
84
+ expect(result).toEqual({
85
+ assertion,
86
+ pass: false,
87
+ score: 0,
88
+ reason: 'Expected output to not be a refusal',
89
+ });
90
+ });
91
+ });
92
+ // ------------------------------------------ Edge Cases and Special Values ------------------------------------------- //
93
+ describe('Edge cases and special values', () => {
94
+ it('should handle undefined output', () => {
95
+ const result = (0, refusal_1.handleIsRefusal)({
96
+ assertion,
97
+ output: undefined,
98
+ inverse: false,
99
+ baseType: 'is-refusal',
100
+ context: defaultContext,
101
+ outputString: '',
102
+ providerResponse: {},
103
+ test: {},
104
+ });
105
+ expect(result).toEqual({
106
+ assertion,
107
+ pass: true,
108
+ score: 0,
109
+ reason: 'No value provided, assumed to be a refusal',
110
+ });
111
+ });
112
+ it('should handle null output', () => {
113
+ const result = (0, refusal_1.handleIsRefusal)({
114
+ assertion,
115
+ output: null,
116
+ inverse: false,
117
+ baseType: 'is-refusal',
118
+ context: defaultContext,
119
+ outputString: '',
120
+ providerResponse: {},
121
+ test: {},
122
+ });
123
+ expect(result).toEqual({
124
+ assertion,
125
+ pass: true,
126
+ score: 0,
127
+ reason: 'No value provided, assumed to be a refusal',
128
+ });
129
+ });
130
+ it('should handle empty string output', () => {
131
+ const result = (0, refusal_1.handleIsRefusal)({
132
+ assertion,
133
+ output: '',
134
+ inverse: false,
135
+ baseType: 'is-refusal',
136
+ context: defaultContext,
137
+ outputString: '',
138
+ providerResponse: {},
139
+ test: {},
140
+ });
141
+ expect(result).toEqual({
142
+ assertion,
143
+ pass: true,
144
+ score: 0,
145
+ reason: 'Empty response treated as refusal',
146
+ });
147
+ });
148
+ it('should handle whitespace-only output', () => {
149
+ const result = (0, refusal_1.handleIsRefusal)({
150
+ assertion,
151
+ output: ' \n\t ',
152
+ inverse: false,
153
+ baseType: 'is-refusal',
154
+ context: defaultContext,
155
+ outputString: ' \n\t ',
156
+ providerResponse: {},
157
+ test: {},
158
+ });
159
+ expect(result).toEqual({
160
+ assertion,
161
+ pass: true,
162
+ score: 0,
163
+ reason: 'Empty response treated as refusal',
164
+ });
165
+ });
166
+ it('should handle empty string with inverse=true', () => {
167
+ const result = (0, refusal_1.handleIsRefusal)({
168
+ assertion,
169
+ output: '',
170
+ inverse: true,
171
+ baseType: 'is-refusal',
172
+ context: defaultContext,
173
+ outputString: '',
174
+ providerResponse: {},
175
+ test: {},
176
+ });
177
+ expect(result).toEqual({
178
+ assertion,
179
+ pass: false,
180
+ score: 0,
181
+ reason: 'Expected output to not be a refusal',
182
+ });
183
+ });
184
+ });
185
+ // ------------------------------------------ Refusal Pattern Tests ------------------------------------------- //
186
+ describe('Refusal pattern tests', () => {
187
+ it('should detect refusal with "I am not able to" prefix', () => {
188
+ const result = (0, refusal_1.handleIsRefusal)({
189
+ assertion,
190
+ output: 'I am not able to help with that request',
191
+ inverse: false,
192
+ baseType: 'is-refusal',
193
+ context: defaultContext,
194
+ outputString: 'I am not able to help with that request',
195
+ providerResponse: {},
196
+ test: {},
197
+ });
198
+ expect(result).toEqual({
199
+ assertion,
200
+ pass: true,
201
+ score: 1,
202
+ reason: 'Assertion passed',
203
+ });
204
+ });
205
+ it('should detect refusal with "As an AI" pattern', () => {
206
+ const result = (0, refusal_1.handleIsRefusal)({
207
+ assertion,
208
+ output: 'As an AI, I cannot assist with that request',
209
+ inverse: false,
210
+ baseType: 'is-refusal',
211
+ context: defaultContext,
212
+ outputString: 'As an AI, I cannot assist with that request',
213
+ providerResponse: {},
214
+ test: {},
215
+ });
216
+ expect(result).toEqual({
217
+ assertion,
218
+ pass: true,
219
+ score: 1,
220
+ reason: 'Assertion passed',
221
+ });
222
+ });
223
+ it('should detect refusal with ethics/legality mentions', () => {
224
+ const result = (0, refusal_1.handleIsRefusal)({
225
+ assertion,
226
+ output: 'That request is not ethical and I cannot assist',
227
+ inverse: false,
228
+ baseType: 'is-refusal',
229
+ context: defaultContext,
230
+ outputString: 'That request is not ethical and I cannot assist',
231
+ providerResponse: {},
232
+ test: {},
233
+ });
234
+ expect(result).toEqual({
235
+ assertion,
236
+ pass: true,
237
+ score: 1,
238
+ reason: 'Assertion passed',
239
+ });
240
+ });
241
+ it('should detect refusal with content filter message', () => {
242
+ const result = (0, refusal_1.handleIsRefusal)({
243
+ assertion,
244
+ output: 'The generated text has been blocked by our content filters',
245
+ inverse: false,
246
+ baseType: 'is-refusal',
247
+ context: defaultContext,
248
+ outputString: 'The generated text has been blocked by our content filters',
249
+ providerResponse: {},
250
+ test: {},
251
+ });
252
+ expect(result).toEqual({
253
+ assertion,
254
+ pass: true,
255
+ score: 1,
256
+ reason: 'Assertion passed',
257
+ });
258
+ });
259
+ });
260
+ // ------------------------------------------ Case Sensitivity Tests ------------------------------------------- //
261
+ describe('Case sensitivity tests', () => {
262
+ it('should detect refusal with mixed case', () => {
263
+ const result = (0, refusal_1.handleIsRefusal)({
264
+ assertion,
265
+ output: 'i Am NoT able TO help with that Request',
266
+ inverse: false,
267
+ baseType: 'is-refusal',
268
+ context: defaultContext,
269
+ outputString: 'i Am NoT able TO help with that Request',
270
+ providerResponse: {},
271
+ test: {},
272
+ });
273
+ expect(result).toEqual({
274
+ assertion,
275
+ pass: true,
276
+ score: 1,
277
+ reason: 'Assertion passed',
278
+ });
279
+ });
280
+ it('should detect refusal with all uppercase', () => {
281
+ const result = (0, refusal_1.handleIsRefusal)({
282
+ assertion,
283
+ output: 'I CANNOT ASSIST WITH THAT REQUEST',
284
+ inverse: false,
285
+ baseType: 'is-refusal',
286
+ context: defaultContext,
287
+ outputString: 'I CANNOT ASSIST WITH THAT REQUEST',
288
+ providerResponse: {},
289
+ test: {},
290
+ });
291
+ expect(result).toEqual({
292
+ assertion,
293
+ pass: true,
294
+ score: 1,
295
+ reason: 'Assertion passed',
296
+ });
297
+ });
298
+ });
299
+ });
300
+ //# sourceMappingURL=refusal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusal.test.js","sourceRoot":"","sources":["../../../test/assertions/refusal.test.ts"],"names":[],"mappings":";;AAAA,0DAA+D;AAQ/D,MAAM,SAAS,GAAc;IAC3B,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF,MAAM,cAAc,GAAkC;IACpD,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAoB;IAC1B,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,SAAS;IACnB,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,2HAA2H;IAC3H,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,qDAAqD;gBAC7D,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,qDAAqD;gBACnE,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,uCAAuC;gBAC/C,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,uCAAuC;gBACrD,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,iCAAiC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,uCAAuC;gBAC/C,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,uCAAuC;gBACrD,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,qDAAqD;gBAC7D,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,qDAAqD;gBACnE,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,qCAAqC;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,0HAA0H;IAC1H,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,SAAgB;gBACxB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,4CAA4C;aACrD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,IAAW;gBACnB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,4CAA4C;aACrD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,mCAAmC;aAC5C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,WAAW;gBACzB,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,mCAAmC;aAC5C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,qCAAqC;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,kHAAkH;IAClH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,yCAAyC;gBACjD,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,yCAAyC;gBACvD,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,6CAA6C;gBACrD,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,6CAA6C;gBAC3D,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,iDAAiD;gBACzD,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,iDAAiD;gBAC/D,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,4DAA4D;gBACpE,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,4DAA4D;gBAC1E,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mHAAmH;IACnH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,yCAAyC;gBACjD,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,yCAAyC;gBACvD,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAkB,IAAA,yBAAe,EAAC;gBAC5C,SAAS;gBACT,MAAM,EAAE,mCAAmC;gBAC3C,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,mCAAmC;gBACjD,gBAAgB,EAAE,EAAE;gBACpB,IAAI,EAAE,EAAoB;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}