promptfoo 0.100.0 → 0.100.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 (27) hide show
  1. package/dist/package.json +14 -14
  2. package/dist/src/app/assets/{index-C7MIODeb.js → index-k6IdvGxu.js} +239 -239
  3. package/dist/src/app/assets/{index.es-B07_QSRL.js → index.es-CWXsRi6X.js} +1 -1
  4. package/dist/src/app/assets/{sync-C7g_seoZ.js → sync-B2sX5xmB.js} +1 -1
  5. package/dist/src/app/index.html +1 -1
  6. package/dist/src/redteam/commands/init.d.ts.map +1 -1
  7. package/dist/src/redteam/commands/init.js +3 -2
  8. package/dist/src/redteam/commands/init.js.map +1 -1
  9. package/dist/src/redteam/index.d.ts.map +1 -1
  10. package/dist/src/redteam/index.js +71 -60
  11. package/dist/src/redteam/index.js.map +1 -1
  12. package/dist/src/redteam/plugins/base.d.ts.map +1 -1
  13. package/dist/src/redteam/plugins/base.js +17 -4
  14. package/dist/src/redteam/plugins/base.js.map +1 -1
  15. package/dist/src/redteam/providers/crescendo/index.d.ts.map +1 -1
  16. package/dist/src/redteam/providers/crescendo/index.js +33 -31
  17. package/dist/src/redteam/providers/crescendo/index.js.map +1 -1
  18. package/dist/src/redteam/strategies/multilingual.d.ts +1 -0
  19. package/dist/src/redteam/strategies/multilingual.d.ts.map +1 -1
  20. package/dist/src/redteam/strategies/multilingual.js +10 -3
  21. package/dist/src/redteam/strategies/multilingual.js.map +1 -1
  22. package/dist/test/redteam/strategies/multilingual.test.d.ts +2 -0
  23. package/dist/test/redteam/strategies/multilingual.test.d.ts.map +1 -0
  24. package/dist/test/redteam/strategies/multilingual.test.js +158 -0
  25. package/dist/test/redteam/strategies/multilingual.test.js.map +1 -0
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +14 -14
@@ -0,0 +1,158 @@
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 cli_progress_1 = require("cli-progress");
7
+ const cache_1 = require("../../../src/cache");
8
+ const logger_1 = __importDefault(require("../../../src/logger"));
9
+ const remoteGeneration_1 = require("../../../src/redteam/remoteGeneration");
10
+ const multilingual_1 = require("../../../src/redteam/strategies/multilingual");
11
+ jest.mock('../../../src/logger', () => ({
12
+ debug: jest.fn(),
13
+ error: jest.fn(),
14
+ level: 'info',
15
+ }));
16
+ jest.mock('../../../src/redteam/remoteGeneration', () => ({
17
+ getRemoteGenerationUrl: jest.fn().mockReturnValue('http://test.url'),
18
+ shouldGenerateRemote: jest.fn().mockReturnValue(false),
19
+ }));
20
+ jest.mock('../../../src/cache', () => ({
21
+ fetchWithCache: jest.fn().mockResolvedValue({
22
+ data: { result: [] },
23
+ }),
24
+ }));
25
+ jest.mock('../../../src/redteam/providers/shared', () => ({
26
+ loadRedteamProvider: jest.fn().mockResolvedValue({
27
+ callApi: jest.fn().mockResolvedValue({
28
+ output: '{"translation": "Hallo Welt"}',
29
+ }),
30
+ }),
31
+ }));
32
+ jest.mock('cli-progress', () => ({
33
+ Presets: {
34
+ shades_classic: {},
35
+ },
36
+ SingleBar: jest.fn().mockImplementation(() => ({
37
+ increment: jest.fn(),
38
+ start: jest.fn(),
39
+ stop: jest.fn(),
40
+ })),
41
+ }));
42
+ describe('addMultilingual', () => {
43
+ beforeEach(() => {
44
+ jest.clearAllMocks();
45
+ });
46
+ afterEach(() => {
47
+ jest.resetModules();
48
+ });
49
+ it('should preserve harmCategory and modify assertion metrics', async () => {
50
+ const testCase = {
51
+ assert: [{ type: 'promptfoo:redteam:contracts' }, { type: 'promptfoo:redteam:harmful' }],
52
+ metadata: {
53
+ harmCategory: 'Illegal Activities - Fraud & scams',
54
+ otherField: 'value',
55
+ },
56
+ vars: {
57
+ text: 'Hello world',
58
+ },
59
+ };
60
+ const result = await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['de'] });
61
+ expect(result[0].metadata).toEqual({
62
+ harmCategory: 'Illegal Activities - Fraud & scams',
63
+ otherField: 'value',
64
+ });
65
+ expect(result[0].assert).toEqual([
66
+ {
67
+ metric: 'contracts/Multilingual-DE',
68
+ type: 'promptfoo:redteam:contracts',
69
+ },
70
+ {
71
+ metric: 'harmful/Multilingual-DE',
72
+ type: 'promptfoo:redteam:harmful',
73
+ },
74
+ ]);
75
+ });
76
+ it('should handle test cases without metadata', async () => {
77
+ const testCase = {
78
+ vars: {
79
+ text: 'Hello world',
80
+ },
81
+ };
82
+ const result = await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['de'] });
83
+ expect(result[0].metadata).toEqual({});
84
+ });
85
+ it('should translate text and update vars correctly', async () => {
86
+ const testCase = {
87
+ vars: {
88
+ otherVar: 'test',
89
+ text: 'Hello world',
90
+ },
91
+ };
92
+ const result = await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['de'] });
93
+ expect(result[0].vars).toEqual({
94
+ otherVar: 'test',
95
+ text: 'Hallo Welt',
96
+ });
97
+ });
98
+ it('should increment progress bar when provided', async () => {
99
+ const testCase = {
100
+ vars: {
101
+ text: 'Hello world',
102
+ },
103
+ };
104
+ logger_1.default.level = 'info';
105
+ await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['de'] });
106
+ const mockBarInstance = jest.mocked(cli_progress_1.SingleBar).mock.results[0].value;
107
+ expect(mockBarInstance.increment).toHaveBeenCalledWith(1);
108
+ expect(mockBarInstance.stop).toHaveBeenCalledWith();
109
+ });
110
+ it('should attempt remote generation first', async () => {
111
+ const testCase = {
112
+ vars: { text: 'Hello world' },
113
+ };
114
+ jest.mocked(remoteGeneration_1.shouldGenerateRemote).mockReturnValueOnce(true);
115
+ jest.mocked(cache_1.fetchWithCache).mockResolvedValueOnce({
116
+ cached: false,
117
+ data: {
118
+ result: [
119
+ {
120
+ vars: { text: 'Hallo Welt' },
121
+ },
122
+ ],
123
+ },
124
+ status: 200,
125
+ statusText: 'OK',
126
+ });
127
+ const result = await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['es'] });
128
+ expect(result).toHaveLength(1);
129
+ expect(result[0].vars?.text).toBe('Hallo Welt');
130
+ });
131
+ it('should preserve harmCategory and modify assertion metrics only for redteam types', async () => {
132
+ const testCase = {
133
+ assert: [{ type: 'promptfoo:redteam:harmful' }, { type: 'moderation' }],
134
+ metadata: {
135
+ harmCategory: 'Illegal Activities - Fraud & scams',
136
+ otherField: 'value',
137
+ },
138
+ vars: {
139
+ text: 'Hello world',
140
+ },
141
+ };
142
+ const result = await (0, multilingual_1.addMultilingual)([testCase], 'text', { languages: ['de'] });
143
+ expect(result[0].metadata).toEqual({
144
+ harmCategory: 'Illegal Activities - Fraud & scams',
145
+ otherField: 'value',
146
+ });
147
+ expect(result[0].assert).toEqual([
148
+ {
149
+ metric: 'harmful/Multilingual-DE',
150
+ type: 'promptfoo:redteam:harmful',
151
+ },
152
+ {
153
+ type: 'moderation',
154
+ },
155
+ ]);
156
+ });
157
+ });
158
+ //# sourceMappingURL=multilingual.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multilingual.test.js","sourceRoot":"","sources":["../../../../test/redteam/strategies/multilingual.test.ts"],"names":[],"mappings":"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"}