promptfoo 0.81.5 → 0.83.0
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.
- package/README.md +10 -4
- package/dist/package.json +8 -8
- package/dist/src/commands/{generate/redteam.d.ts → redteam/generate.d.ts} +3 -3
- package/dist/src/commands/redteam/generate.d.ts.map +1 -0
- package/dist/src/commands/{generate/redteam.js → redteam/generate.js} +5 -3
- package/dist/src/commands/redteam/generate.js.map +1 -0
- package/dist/src/commands/{redteam.d.ts → redteam/init.d.ts} +1 -2
- package/dist/src/commands/redteam/init.d.ts.map +1 -0
- package/dist/src/commands/{redteam.js → redteam/init.js} +148 -147
- package/dist/src/commands/redteam/init.js.map +1 -0
- package/dist/src/commands/redteam/plugins.d.ts +3 -0
- package/dist/src/commands/redteam/plugins.d.ts.map +1 -0
- package/dist/src/commands/redteam/plugins.js +31 -0
- package/dist/src/commands/redteam/plugins.js.map +1 -0
- package/dist/src/database/tables.d.ts +6 -6
- package/dist/src/envars.d.ts +3 -0
- package/dist/src/envars.d.ts.map +1 -1
- package/dist/src/envars.js.map +1 -1
- package/dist/src/index.d.ts +15 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +7 -6
- package/dist/src/main.js.map +1 -1
- package/dist/src/onboarding.js +2 -2
- package/dist/src/onboarding.js.map +1 -1
- package/dist/src/redteam/constants.d.ts +1 -0
- package/dist/src/redteam/constants.d.ts.map +1 -1
- package/dist/src/redteam/constants.js +3 -1
- package/dist/src/redteam/constants.js.map +1 -1
- package/dist/src/redteam/extraction/entities.d.ts.map +1 -1
- package/dist/src/redteam/extraction/entities.js +14 -3
- package/dist/src/redteam/extraction/entities.js.map +1 -1
- package/dist/src/redteam/extraction/purpose.d.ts.map +1 -1
- package/dist/src/redteam/extraction/purpose.js +15 -3
- package/dist/src/redteam/extraction/purpose.js.map +1 -1
- package/dist/src/redteam/extraction/util.d.ts +27 -0
- package/dist/src/redteam/extraction/util.d.ts.map +1 -1
- package/dist/src/redteam/extraction/util.js +46 -0
- package/dist/src/redteam/extraction/util.js.map +1 -1
- package/dist/src/redteam/index.d.ts +1 -1
- package/dist/src/redteam/index.d.ts.map +1 -1
- package/dist/src/redteam/index.js +38 -23
- package/dist/src/redteam/index.js.map +1 -1
- package/dist/src/redteam/plugins/base.d.ts +6 -5
- package/dist/src/redteam/plugins/base.d.ts.map +1 -1
- package/dist/src/redteam/plugins/base.js +21 -7
- package/dist/src/redteam/plugins/base.js.map +1 -1
- package/dist/src/redteam/plugins/bfla.d.ts +1 -1
- package/dist/src/redteam/plugins/bfla.d.ts.map +1 -1
- package/dist/src/redteam/plugins/bfla.js +11 -5
- package/dist/src/redteam/plugins/bfla.js.map +1 -1
- package/dist/src/redteam/plugins/bola.d.ts +1 -1
- package/dist/src/redteam/plugins/bola.d.ts.map +1 -1
- package/dist/src/redteam/plugins/bola.js +11 -7
- package/dist/src/redteam/plugins/bola.js.map +1 -1
- package/dist/src/redteam/plugins/custom.d.ts +1 -1
- package/dist/src/redteam/plugins/custom.d.ts.map +1 -1
- package/dist/src/redteam/plugins/custom.js +2 -2
- package/dist/src/redteam/plugins/custom.js.map +1 -1
- package/dist/src/redteam/plugins/harmful.d.ts +1 -1
- package/dist/src/redteam/plugins/harmful.d.ts.map +1 -1
- package/dist/src/redteam/plugins/harmful.js +45 -34
- package/dist/src/redteam/plugins/harmful.js.map +1 -1
- package/dist/src/redteam/plugins/index.d.ts +5 -4
- package/dist/src/redteam/plugins/index.d.ts.map +1 -1
- package/dist/src/redteam/plugins/index.js +78 -83
- package/dist/src/redteam/plugins/index.js.map +1 -1
- package/dist/src/redteam/plugins/indirectPromptInjection.d.ts +0 -2
- package/dist/src/redteam/plugins/indirectPromptInjection.d.ts.map +1 -1
- package/dist/src/redteam/plugins/indirectPromptInjection.js +0 -3
- package/dist/src/redteam/plugins/indirectPromptInjection.js.map +1 -1
- package/dist/src/redteam/plugins/policy.d.ts +1 -1
- package/dist/src/redteam/plugins/policy.d.ts.map +1 -1
- package/dist/src/redteam/plugins/policy.js +4 -2
- package/dist/src/redteam/plugins/policy.js.map +1 -1
- package/dist/src/redteam/plugins/promptExtraction.d.ts +1 -1
- package/dist/src/redteam/plugins/promptExtraction.d.ts.map +1 -1
- package/dist/src/redteam/plugins/promptExtraction.js +1 -1
- package/dist/src/redteam/plugins/promptExtraction.js.map +1 -1
- package/dist/src/redteam/plugins/ssrf.d.ts +1 -1
- package/dist/src/redteam/plugins/ssrf.d.ts.map +1 -1
- package/dist/src/redteam/plugins/ssrf.js +2 -2
- package/dist/src/redteam/plugins/ssrf.js.map +1 -1
- package/dist/src/redteam/providers/crescendo/index.d.ts +2 -2
- package/dist/src/redteam/providers/crescendo/index.d.ts.map +1 -1
- package/dist/src/redteam/providers/iterative.d.ts.map +1 -1
- package/dist/src/redteam/providers/iterativeImage.d.ts.map +1 -1
- package/dist/src/redteam/providers/shared.d.ts +2 -2
- package/dist/src/redteam/providers/shared.d.ts.map +1 -1
- package/dist/src/redteam/providers/shared.js +1 -1
- package/dist/src/redteam/providers/shared.js.map +1 -1
- package/dist/src/redteam/strategies/index.d.ts +2 -4
- package/dist/src/redteam/strategies/index.d.ts.map +1 -1
- package/dist/src/redteam/strategies/index.js.map +1 -1
- package/dist/src/redteam/strategies/multilingual.d.ts.map +1 -1
- package/dist/src/redteam/strategies/multilingual.js +20 -0
- package/dist/src/redteam/strategies/multilingual.js.map +1 -1
- package/dist/src/redteam/util.d.ts +1 -0
- package/dist/src/redteam/util.d.ts.map +1 -1
- package/dist/src/redteam/util.js +6 -0
- package/dist/src/redteam/util.js.map +1 -1
- package/dist/src/types/index.d.ts +40 -40
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/redteam.d.ts +29 -35
- package/dist/src/types/redteam.d.ts.map +1 -1
- package/dist/src/validators/redteam.d.ts +20 -13
- package/dist/src/validators/redteam.d.ts.map +1 -1
- package/dist/src/validators/redteam.js +13 -0
- package/dist/src/validators/redteam.js.map +1 -1
- package/dist/src/web/nextui/404/index.html +1 -1
- package/dist/src/web/nextui/404.html +1 -1
- package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/{page-67165aedfd3a64fc.js → page-766e25cc9af8e519.js} +1 -1
- package/dist/src/web/nextui/_next/static/chunks/app/{layout-e9b86858e84ebd38.js → layout-3fb162429b886376.js} +1 -1
- package/dist/src/web/nextui/_next/static/chunks/app/page-b6714efe6c381b92.js +1 -0
- package/dist/src/web/nextui/_next/static/chunks/app/report/{page-0b89c8ba365b7195.js → page-a330d7b915e8a5b9.js} +1 -1
- package/dist/src/web/nextui/_next/static/chunks/main-app-cf76b7c55faa5c9b.js +1 -0
- package/dist/src/web/nextui/auth/login/index.html +1 -1
- package/dist/src/web/nextui/auth/login/index.txt +2 -2
- package/dist/src/web/nextui/auth/signup/index.html +1 -1
- package/dist/src/web/nextui/auth/signup/index.txt +2 -2
- package/dist/src/web/nextui/datasets/index.html +1 -1
- package/dist/src/web/nextui/datasets/index.txt +2 -2
- package/dist/src/web/nextui/eval/index.html +1 -1
- package/dist/src/web/nextui/eval/index.txt +3 -3
- package/dist/src/web/nextui/index.html +1 -1
- package/dist/src/web/nextui/index.txt +2 -2
- package/dist/src/web/nextui/progress/index.html +1 -1
- package/dist/src/web/nextui/progress/index.txt +2 -2
- package/dist/src/web/nextui/prompts/index.html +1 -1
- package/dist/src/web/nextui/prompts/index.txt +2 -2
- package/dist/src/web/nextui/report/index.html +1 -1
- package/dist/src/web/nextui/report/index.txt +3 -3
- package/dist/src/web/nextui/setup/index.html +1 -1
- package/dist/src/web/nextui/setup/index.txt +2 -2
- package/dist/test/commands/redteam/generate.test.d.ts +2 -0
- package/dist/test/commands/redteam/generate.test.d.ts.map +1 -0
- package/dist/test/commands/{generate/redteam.test.js → redteam/generate.test.js} +12 -13
- package/dist/test/commands/redteam/generate.test.js.map +1 -0
- package/dist/test/redteam/extraction/entities.test.js +45 -2
- package/dist/test/redteam/extraction/entities.test.js.map +1 -1
- package/dist/test/redteam/extraction/purpose.test.js +45 -10
- package/dist/test/redteam/extraction/purpose.test.js.map +1 -1
- package/dist/test/redteam/extraction/util.test.js +93 -4
- package/dist/test/redteam/extraction/util.test.js.map +1 -1
- package/dist/test/redteam/index.test.js +0 -23
- package/dist/test/redteam/index.test.js.map +1 -1
- package/dist/test/redteam/plugins/base.test.js +16 -4
- package/dist/test/redteam/plugins/base.test.js.map +1 -1
- package/dist/test/redteam/providers/shared.test.js +0 -8
- package/dist/test/redteam/providers/shared.test.js.map +1 -1
- package/dist/test/redteam/validators.test.js +1 -1
- package/dist/test/redteam/validators.test.js.map +1 -1
- package/package.json +8 -8
- package/dist/src/commands/generate/redteam.d.ts.map +0 -1
- package/dist/src/commands/generate/redteam.js.map +0 -1
- package/dist/src/commands/redteam.d.ts.map +0 -1
- package/dist/src/commands/redteam.js.map +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/page-81e3b8fee37eaf67.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/main-app-0dc90092cd7acaaf.js +0 -1
- package/dist/test/commands/generate/redteam.test.d.ts +0 -2
- package/dist/test/commands/generate/redteam.test.d.ts.map +0 -1
- package/dist/test/commands/generate/redteam.test.js.map +0 -1
- /package/dist/src/web/nextui/_next/static/{B-Wbtl8GsdNHqd1Jebs7I → 8ykUqaOH4zii7_PoqqHv2}/_buildManifest.js +0 -0
- /package/dist/src/web/nextui/_next/static/{B-Wbtl8GsdNHqd1Jebs7I → 8ykUqaOH4zii7_PoqqHv2}/_ssgManifest.js +0 -0
- /package/dist/src/web/nextui/_next/static/chunks/{258-5f4892005dadd945.js → 258-6060e00d93b0f598.js} +0 -0
package/README.md
CHANGED
|
@@ -92,8 +92,12 @@ The YAML configuration format runs each prompt through a series of example input
|
|
|
92
92
|
See the [Configuration docs](https://www.promptfoo.dev/docs/configuration/guide) for a detailed guide.
|
|
93
93
|
|
|
94
94
|
```yaml
|
|
95
|
-
prompts:
|
|
96
|
-
|
|
95
|
+
prompts:
|
|
96
|
+
- file://prompt1.txt
|
|
97
|
+
- file://prompt2.txt
|
|
98
|
+
providers:
|
|
99
|
+
- openai:gpt-4o-mini
|
|
100
|
+
- ollama:llama2:70b
|
|
97
101
|
tests:
|
|
98
102
|
- description: 'Test translation to French'
|
|
99
103
|
vars:
|
|
@@ -173,8 +177,10 @@ Every test type can be negated by prepending `not-`. For example, `not-equals` o
|
|
|
173
177
|
Some people prefer to configure their LLM tests in a CSV. In that case, the config is pretty simple:
|
|
174
178
|
|
|
175
179
|
```yaml
|
|
176
|
-
prompts:
|
|
177
|
-
|
|
180
|
+
prompts:
|
|
181
|
+
- file://prompts.txt
|
|
182
|
+
providers:
|
|
183
|
+
- openai:gpt-4o-mini
|
|
178
184
|
tests: tests.csv
|
|
179
185
|
```
|
|
180
186
|
|
package/dist/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "promptfoo",
|
|
3
3
|
"description": "LLM eval & testing toolkit",
|
|
4
4
|
"author": "Ian Webster",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.83.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "commonjs",
|
|
8
8
|
"repository": {
|
|
@@ -72,12 +72,12 @@
|
|
|
72
72
|
"node-sql-parser": "^5.2.0"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@aws-sdk/client-bedrock-runtime": "^3.
|
|
75
|
+
"@aws-sdk/client-bedrock-runtime": "^3.642.0",
|
|
76
76
|
"@azure/identity": "^4.4.1",
|
|
77
|
-
"@eslint/js": "^9.9.
|
|
77
|
+
"@eslint/js": "^9.9.1",
|
|
78
78
|
"@libsql/client": "^0.10.0",
|
|
79
79
|
"@swc/cli": "^0.4.0",
|
|
80
|
-
"@swc/core": "^1.7.
|
|
80
|
+
"@swc/core": "^1.7.23",
|
|
81
81
|
"@swc/jest": "^0.2.36",
|
|
82
82
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
83
83
|
"@types/async": "^3.2.24",
|
|
@@ -149,18 +149,18 @@
|
|
|
149
149
|
"fast-xml-parser": "^4.4.1",
|
|
150
150
|
"fastest-levenshtein": "^1.0.16",
|
|
151
151
|
"glob": "^10.4.3",
|
|
152
|
-
"groq-sdk": "^0.6.
|
|
153
|
-
"inquirer": "^10.
|
|
152
|
+
"groq-sdk": "^0.6.1",
|
|
153
|
+
"inquirer": "^10.2.0",
|
|
154
154
|
"js-rouge": "3.0.0",
|
|
155
155
|
"js-yaml": "^4.1.0",
|
|
156
156
|
"mathjs": "^13.1.1",
|
|
157
157
|
"node-fetch": "^2.6.7",
|
|
158
158
|
"nunjucks": "^3.2.4",
|
|
159
|
-
"openai": "^4.
|
|
159
|
+
"openai": "^4.57.0",
|
|
160
160
|
"opener": "^1.5.2",
|
|
161
161
|
"proxy-agent": "^6.4.0",
|
|
162
162
|
"python-shell": "^5.0.0",
|
|
163
|
-
"replicate": "^0.32.
|
|
163
|
+
"replicate": "^0.32.1",
|
|
164
164
|
"rfdc": "^1.4.1",
|
|
165
165
|
"semver": "^7.6.3",
|
|
166
166
|
"socket.io": "^4.7.5",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import type { UnifiedConfig } from '../../types';
|
|
3
|
-
import type {
|
|
4
|
-
export declare function doGenerateRedteam(options:
|
|
3
|
+
import type { RedteamCliGenerateOptions } from '../../types/redteam';
|
|
4
|
+
export declare function doGenerateRedteam(options: RedteamCliGenerateOptions): Promise<void>;
|
|
5
5
|
export declare function generateRedteamCommand(program: Command, command: 'redteam' | 'generate', defaultConfig: Partial<UnifiedConfig>, defaultConfigPath: string | undefined): void;
|
|
6
|
-
//# sourceMappingURL=
|
|
6
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/commands/redteam/generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAqB,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAKxF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,yBAAyB,iBA0LzE;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,GAAG,UAAU,EAC/B,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EACrC,iBAAiB,EAAE,MAAM,GAAG,SAAS,QA0GtC"}
|
|
@@ -124,6 +124,7 @@ async function doGenerateRedteam(options) {
|
|
|
124
124
|
provider: redteamConfig?.provider || options.provider,
|
|
125
125
|
purpose: redteamConfig?.purpose || options.purpose,
|
|
126
126
|
strategies: strategyObjs,
|
|
127
|
+
delay: redteamConfig?.delay || options.delay,
|
|
127
128
|
};
|
|
128
129
|
const parsedConfig = redteam_2.RedteamConfigSchema.safeParse(config);
|
|
129
130
|
if (!parsedConfig.success) {
|
|
@@ -137,6 +138,7 @@ async function doGenerateRedteam(options) {
|
|
|
137
138
|
numTests: config.numTests,
|
|
138
139
|
prompts: testSuite.prompts.map((prompt) => prompt.raw),
|
|
139
140
|
maxConcurrency: config.maxConcurrency,
|
|
141
|
+
delay: config.delay,
|
|
140
142
|
});
|
|
141
143
|
const updatedRedteamConfig = {
|
|
142
144
|
purpose,
|
|
@@ -231,6 +233,7 @@ function generateRedteamCommand(program, command, defaultConfig, defaultConfigPa
|
|
|
231
233
|
.option('--no-cache', 'Do not read or write results to disk cache', false)
|
|
232
234
|
.option('--env-file <path>', 'Path to .env file')
|
|
233
235
|
.option('-j, --max-concurrency <number>', 'Maximum number of concurrent API calls', (val) => Number.parseInt(val, 10), defaultConfig.evaluateOptions?.maxConcurrency)
|
|
236
|
+
.option('--delay <number>', 'Delay in milliseconds between plugin API calls', (val) => Number.parseInt(val, 10))
|
|
234
237
|
.action((opts) => {
|
|
235
238
|
try {
|
|
236
239
|
let overrides = {};
|
|
@@ -255,10 +258,9 @@ function generateRedteamCommand(program, command, defaultConfig, defaultConfigPa
|
|
|
255
258
|
}
|
|
256
259
|
const validatedOpts = redteam_2.RedteamGenerateOptionsSchema.parse({
|
|
257
260
|
...opts,
|
|
261
|
+
...overrides,
|
|
258
262
|
defaultConfig,
|
|
259
263
|
defaultConfigPath,
|
|
260
|
-
...(overrides.plugins ? { plugins: overrides.plugins } : {}),
|
|
261
|
-
...(overrides.strategies ? { strategies: overrides.strategies } : {}),
|
|
262
264
|
});
|
|
263
265
|
doGenerateRedteam(validatedOpts);
|
|
264
266
|
}
|
|
@@ -276,4 +278,4 @@ function generateRedteamCommand(program, command, defaultConfig, defaultConfigPa
|
|
|
276
278
|
}
|
|
277
279
|
});
|
|
278
280
|
}
|
|
279
|
-
//# sourceMappingURL=
|
|
281
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/commands/redteam/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
export declare function redteamInit(directory: string | undefined): Promise<void>;
|
|
3
3
|
export declare function initCommand(program: Command): void;
|
|
4
|
-
|
|
5
|
-
//# sourceMappingURL=redteam.d.ts.map
|
|
4
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/commands/redteam/init.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4JzC,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,iBAoa9D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QA2B3C"}
|
|
@@ -28,7 +28,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.redteamInit = redteamInit;
|
|
30
30
|
exports.initCommand = initCommand;
|
|
31
|
-
exports.pluginsCommand = pluginsCommand;
|
|
32
31
|
const checkbox_1 = __importDefault(require("@inquirer/checkbox"));
|
|
33
32
|
const checkbox_2 = require("@inquirer/checkbox");
|
|
34
33
|
const confirm_1 = __importDefault(require("@inquirer/confirm"));
|
|
@@ -41,14 +40,14 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
41
40
|
const dedent_1 = __importDefault(require("dedent"));
|
|
42
41
|
const fs = __importStar(require("fs"));
|
|
43
42
|
const path = __importStar(require("path"));
|
|
44
|
-
const accounts_1 = require("
|
|
45
|
-
const envars_1 = require("
|
|
46
|
-
const globalConfig_1 = require("
|
|
47
|
-
const logger_1 = __importDefault(require("
|
|
48
|
-
const constants_1 = require("
|
|
49
|
-
const telemetry_1 = __importDefault(require("
|
|
50
|
-
const templates_1 = require("
|
|
51
|
-
const
|
|
43
|
+
const accounts_1 = require("../../accounts");
|
|
44
|
+
const envars_1 = require("../../envars");
|
|
45
|
+
const globalConfig_1 = require("../../globalConfig");
|
|
46
|
+
const logger_1 = __importDefault(require("../../logger"));
|
|
47
|
+
const constants_1 = require("../../redteam/constants");
|
|
48
|
+
const telemetry_1 = __importDefault(require("../../telemetry"));
|
|
49
|
+
const templates_1 = require("../../util/templates");
|
|
50
|
+
const generate_1 = require("./generate");
|
|
52
51
|
const REDTEAM_CONFIG_TEMPLATE = `# Red teaming configuration
|
|
53
52
|
# Docs: https://promptfoo.dev/docs/red-team/configuration
|
|
54
53
|
|
|
@@ -71,7 +70,15 @@ providers:
|
|
|
71
70
|
# Providers are red team targets. To talk directly to your application, use a custom provider.
|
|
72
71
|
# See https://promptfoo.dev/docs/red-team/configuration/#providers
|
|
73
72
|
{% for provider in providers -%}
|
|
73
|
+
{% if provider is string -%}
|
|
74
74
|
- {{ provider }}
|
|
75
|
+
{% else -%}
|
|
76
|
+
- id: {{ provider.id }}
|
|
77
|
+
config:
|
|
78
|
+
{% for k, v in provider.config -%}
|
|
79
|
+
{{ k }}: {{ v | dump }}
|
|
80
|
+
{% endfor -%}
|
|
81
|
+
{% endif -%}
|
|
75
82
|
{% endfor %}
|
|
76
83
|
|
|
77
84
|
redteam:
|
|
@@ -151,14 +158,14 @@ async function getSystemPrompt(numVariablesRequired = 1) {
|
|
|
151
158
|
default: prompt,
|
|
152
159
|
});
|
|
153
160
|
prompt = prompt.replace(NOTE, '');
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
161
|
+
const variables = (0, templates_1.extractVariablesFromTemplate)(prompt);
|
|
162
|
+
if (variables.length < numVariablesRequired) {
|
|
163
|
+
// Give the user another chance to edit their prompt
|
|
164
|
+
logger_1.default.info(chalk_1.default.red(`Your prompt must include ${numVariablesRequired} ${numVariablesRequired === 1 ? 'variable' : 'variables'} like "{{query}}" as a placeholder for user input.`));
|
|
157
165
|
prompt = await (0, editor_1.default)({
|
|
158
166
|
message: 'Enter the prompt you want to test against:',
|
|
159
167
|
default: prompt,
|
|
160
168
|
});
|
|
161
|
-
variables = (0, templates_1.extractVariablesFromTemplate)(prompt);
|
|
162
169
|
}
|
|
163
170
|
return prompt;
|
|
164
171
|
}
|
|
@@ -178,6 +185,7 @@ async function redteamInit(directory) {
|
|
|
178
185
|
choices: [
|
|
179
186
|
{ name: 'Not sure yet', value: 'not_sure' },
|
|
180
187
|
{ name: 'Red team a prompt, model, or chatbot', value: 'prompt_model_chatbot' },
|
|
188
|
+
{ name: 'Red team an HTTP endpoint', value: 'http_endpoint' },
|
|
181
189
|
{ name: 'Red team a RAG', value: 'rag' },
|
|
182
190
|
{ name: 'Red team an Agent', value: 'agent' },
|
|
183
191
|
],
|
|
@@ -185,9 +193,8 @@ async function redteamInit(directory) {
|
|
|
185
193
|
});
|
|
186
194
|
recordOnboardingStep('choose app type', { value: redTeamChoice });
|
|
187
195
|
const prompts = [];
|
|
188
|
-
let defaultPromptUsed = false;
|
|
189
196
|
let purpose;
|
|
190
|
-
const useCustomProvider = redTeamChoice === 'rag' || redTeamChoice === 'agent';
|
|
197
|
+
const useCustomProvider = redTeamChoice === 'rag' || redTeamChoice === 'agent' || redTeamChoice === 'http_endpoint';
|
|
191
198
|
let deferGeneration = useCustomProvider;
|
|
192
199
|
const defaultPrompt = 'You are a travel agent specialized in budget trips to Europe\n\nUser query: {{query}}';
|
|
193
200
|
const defaultPurpose = 'Travel agent specializing in budget trips to Europe';
|
|
@@ -214,19 +221,36 @@ async function redteamInit(directory) {
|
|
|
214
221
|
prompt = await getSystemPrompt();
|
|
215
222
|
}
|
|
216
223
|
else {
|
|
217
|
-
defaultPromptUsed = true;
|
|
218
224
|
prompt = defaultPrompt;
|
|
219
225
|
deferGeneration = true;
|
|
220
226
|
}
|
|
221
227
|
prompts.push(prompt);
|
|
222
228
|
}
|
|
223
229
|
else {
|
|
224
|
-
defaultPromptUsed = true;
|
|
225
230
|
prompts.push('You are a travel agent specialized in budget trips to Europe\n\nUser query: {{query}}');
|
|
226
231
|
}
|
|
227
232
|
let providers;
|
|
228
233
|
if (useCustomProvider) {
|
|
229
|
-
|
|
234
|
+
if (redTeamChoice === 'http_endpoint') {
|
|
235
|
+
providers = [
|
|
236
|
+
{
|
|
237
|
+
id: 'https://example.com/generate',
|
|
238
|
+
config: {
|
|
239
|
+
method: 'POST',
|
|
240
|
+
headers: {
|
|
241
|
+
'Content-Type': 'application/json',
|
|
242
|
+
},
|
|
243
|
+
body: {
|
|
244
|
+
myPrompt: '{{prompt}}',
|
|
245
|
+
},
|
|
246
|
+
responseParser: 'json.output',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
providers = ['python:chat.py'];
|
|
253
|
+
}
|
|
230
254
|
}
|
|
231
255
|
else {
|
|
232
256
|
const providerChoices = [
|
|
@@ -281,27 +305,49 @@ async function redteamInit(directory) {
|
|
|
281
305
|
}
|
|
282
306
|
console.clear();
|
|
283
307
|
recordOnboardingStep('begin plugin & strategy selection');
|
|
284
|
-
logger_1.default.info(chalk_1.default.bold('Plugin Configuration
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
const plugins = await (0, checkbox_1.default)({
|
|
293
|
-
message: `Plugins generate adversarial inputs. Select the ones you want to use. Don't worry, you can change this later:`,
|
|
294
|
-
choices: pluginChoices,
|
|
295
|
-
pageSize: process.stdout.rows - 6,
|
|
296
|
-
loop: false,
|
|
297
|
-
validate: (answer) => answer.length > 0 || 'You must select at least one plugin.',
|
|
298
|
-
});
|
|
299
|
-
recordOnboardingStep('choose plugins', {
|
|
300
|
-
value: plugins.map((p) => (typeof p === 'string' ? p : p.id)),
|
|
308
|
+
logger_1.default.info(chalk_1.default.bold('Plugin Configuration'));
|
|
309
|
+
logger_1.default.info('Plugins generate adversarial inputs.\n');
|
|
310
|
+
const pluginConfigChoice = await (0, select_1.default)({
|
|
311
|
+
message: 'How would you like to configure plugins?',
|
|
312
|
+
choices: [
|
|
313
|
+
{ name: 'Use the defaults (configure later)', value: 'default' },
|
|
314
|
+
{ name: 'Manually select', value: 'manual' },
|
|
315
|
+
],
|
|
301
316
|
});
|
|
302
|
-
|
|
317
|
+
recordOnboardingStep('choose plugin config method', { value: pluginConfigChoice });
|
|
318
|
+
let plugins;
|
|
319
|
+
if (pluginConfigChoice === 'default') {
|
|
320
|
+
if (redTeamChoice === 'rag') {
|
|
321
|
+
plugins = Array.from(constants_1.DEFAULT_PLUGINS);
|
|
322
|
+
}
|
|
323
|
+
else if (redTeamChoice === 'agent') {
|
|
324
|
+
plugins = [...constants_1.DEFAULT_PLUGINS, 'rbac', 'bola', 'bfla', 'ssrf'];
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
plugins = Array.from(constants_1.DEFAULT_PLUGINS);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
const pluginChoices = Array.from(constants_1.ALL_PLUGINS)
|
|
332
|
+
.sort()
|
|
333
|
+
.map((plugin) => ({
|
|
334
|
+
name: `${plugin} - ${constants_1.subCategoryDescriptions[plugin] || 'No description'}`,
|
|
335
|
+
value: plugin,
|
|
336
|
+
checked: constants_1.DEFAULT_PLUGINS.has(plugin),
|
|
337
|
+
}));
|
|
338
|
+
plugins = await (0, checkbox_1.default)({
|
|
339
|
+
message: `Select the plugins you want to use. Don't worry, you can change this later:`,
|
|
340
|
+
choices: pluginChoices,
|
|
341
|
+
pageSize: process.stdout.rows - 6,
|
|
342
|
+
loop: false,
|
|
343
|
+
validate: (answer) => answer.length > 0 || 'You must select at least one plugin.',
|
|
344
|
+
});
|
|
345
|
+
recordOnboardingStep('choose plugins', {
|
|
346
|
+
value: plugins.map((p) => (typeof p === 'string' ? p : p.id)),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
// Plugins that require additional configuration
|
|
303
350
|
if (plugins.includes('policy')) {
|
|
304
|
-
// Remove the original 'policy' string if it exists
|
|
305
351
|
const policyIndex = plugins.indexOf('policy');
|
|
306
352
|
if (policyIndex !== -1) {
|
|
307
353
|
plugins.splice(policyIndex, 1);
|
|
@@ -318,104 +364,80 @@ async function redteamInit(directory) {
|
|
|
318
364
|
});
|
|
319
365
|
}
|
|
320
366
|
}
|
|
321
|
-
// Handle prompt extraction plugin
|
|
322
367
|
if (plugins.includes('prompt-extraction')) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
if (defaultPromptUsed) {
|
|
328
|
-
recordOnboardingStep('collect system prompt');
|
|
329
|
-
const systemPrompt = await getSystemPrompt();
|
|
330
|
-
recordOnboardingStep('choose system prompt', { value: systemPrompt.length });
|
|
331
|
-
if (systemPrompt.trim() !== '') {
|
|
332
|
-
plugins.push({
|
|
333
|
-
id: 'prompt-extraction',
|
|
334
|
-
config: { systemPrompt: (0, dedent_1.default)(systemPrompt.trim()) },
|
|
335
|
-
});
|
|
336
|
-
prompts[0] = systemPrompt;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
plugins.push({
|
|
341
|
-
id: 'prompt-extraction',
|
|
342
|
-
config: { systemPrompt: prompts[0] },
|
|
343
|
-
});
|
|
344
|
-
}
|
|
368
|
+
plugins.push({
|
|
369
|
+
id: 'prompt-extraction',
|
|
370
|
+
config: { systemPrompt: prompts[0] },
|
|
371
|
+
});
|
|
345
372
|
}
|
|
346
|
-
// Handle prompt extraction plugin
|
|
347
373
|
if (plugins.includes('indirect-prompt-injection')) {
|
|
374
|
+
recordOnboardingStep('choose indirect prompt injection variable');
|
|
348
375
|
logger_1.default.info(chalk_1.default.bold('Indirect Prompt Injection Configuration\n'));
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const promptExtractionIdx = plugins.indexOf('indirect-prompt-injection');
|
|
358
|
-
if (promptExtractionIdx !== -1) {
|
|
359
|
-
plugins.splice(promptExtractionIdx, 1);
|
|
360
|
-
}
|
|
361
|
-
if (defaultPromptUsed) {
|
|
362
|
-
const systemPrompt = await getSystemPrompt(2);
|
|
363
|
-
const variables = (0, templates_1.extractVariablesFromTemplate)(systemPrompt);
|
|
364
|
-
let indirectInjectionVar = variables[0].trim();
|
|
365
|
-
indirectInjectionVar = await (0, input_1.default)({
|
|
366
|
-
message: `What is the name of the variable where content will be injected into the prompt? (e.g. "name")`,
|
|
367
|
-
default: indirectInjectionVar,
|
|
376
|
+
const variables = (0, templates_1.extractVariablesFromTemplate)(prompts[0]);
|
|
377
|
+
if (variables.length > 1) {
|
|
378
|
+
const indirectInjectionVar = await (0, select_1.default)({
|
|
379
|
+
message: 'Which variable would you like to test for indirect prompt injection?',
|
|
380
|
+
choices: variables.sort().map((variable) => ({
|
|
381
|
+
name: variable,
|
|
382
|
+
value: variable,
|
|
383
|
+
})),
|
|
368
384
|
});
|
|
369
|
-
|
|
370
|
-
if (!variables.includes(indirectInjectionVar)) {
|
|
371
|
-
logger_1.default.info(chalk_1.default.red(`The variable ${indirectInjectionVar} is not found in the prompt. Please go back and edit your prompt to add the variable to your prompt`));
|
|
372
|
-
await (0, input_1.default)({
|
|
373
|
-
message: 'Press Enter to continue...',
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
if (indirectInjectionVar === variables[variables.length - 1]) {
|
|
377
|
-
logger_1.default.info(chalk_1.default.red(`The variable ${indirectInjectionVar} is the last variable in the prompt. This might cause some issues with the plugin since we assume the last variable is the main injectVar. Please make sure you set injectVar properly in your config.`));
|
|
378
|
-
await (0, input_1.default)({
|
|
379
|
-
message: 'Press Enter to continue...',
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
if (systemPrompt.trim() !== '') {
|
|
383
|
-
plugins.push({
|
|
384
|
-
id: 'indirect-prompt-injection',
|
|
385
|
-
config: {
|
|
386
|
-
systemPrompt: (0, dedent_1.default)(systemPrompt.trim()),
|
|
387
|
-
indirectInjectionVar: indirectInjectionVar.trim(),
|
|
388
|
-
},
|
|
389
|
-
});
|
|
390
|
-
prompts[0] = systemPrompt;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
385
|
+
recordOnboardingStep('chose indirect prompt injection variable');
|
|
394
386
|
plugins.push({
|
|
395
|
-
id: 'prompt-
|
|
396
|
-
config: {
|
|
387
|
+
id: 'indirect-prompt-injection',
|
|
388
|
+
config: {
|
|
389
|
+
indirectInjectionVar,
|
|
390
|
+
},
|
|
397
391
|
});
|
|
398
392
|
}
|
|
393
|
+
else {
|
|
394
|
+
recordOnboardingStep('skip indirect prompt injection');
|
|
395
|
+
logger_1.default.warn(`Skipping indirect prompt injection plugin because it requires at least two {{variables}} in the prompt. Learn more: https://www.promptfoo.dev/docs/red-team/plugins/indirect-prompt-injection/`);
|
|
396
|
+
}
|
|
399
397
|
}
|
|
400
398
|
console.clear();
|
|
401
|
-
logger_1.default.info(chalk_1.default.bold('Strategy Configuration
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
value: strategy,
|
|
410
|
-
checked: constants_1.DEFAULT_STRATEGIES.includes(strategy),
|
|
411
|
-
}
|
|
412
|
-
: strategy);
|
|
413
|
-
const strategies = await (0, checkbox_1.default)({
|
|
414
|
-
message: `Strategies are attack methods. Select the ones you want to use. Don't worry, you can change this later:`,
|
|
415
|
-
choices: strategyChoices,
|
|
416
|
-
pageSize: process.stdout.rows - 6,
|
|
417
|
-
loop: false,
|
|
399
|
+
logger_1.default.info(chalk_1.default.bold('Strategy Configuration'));
|
|
400
|
+
logger_1.default.info('Strategies are attack methods.\n');
|
|
401
|
+
const strategyConfigChoice = await (0, select_1.default)({
|
|
402
|
+
message: 'How would you like to configure strategies?',
|
|
403
|
+
choices: [
|
|
404
|
+
{ name: 'Use the defaults (configure later)', value: 'default' },
|
|
405
|
+
{ name: 'Manually select', value: 'manual' },
|
|
406
|
+
],
|
|
418
407
|
});
|
|
408
|
+
recordOnboardingStep('choose strategy config method', { value: strategyConfigChoice });
|
|
409
|
+
let strategies;
|
|
410
|
+
if (strategyConfigChoice === 'default') {
|
|
411
|
+
// TODO(ian): Differentiate strategies
|
|
412
|
+
if (redTeamChoice === 'rag') {
|
|
413
|
+
strategies = Array.from(constants_1.DEFAULT_STRATEGIES);
|
|
414
|
+
}
|
|
415
|
+
else if (redTeamChoice === 'agent') {
|
|
416
|
+
strategies = Array.from(constants_1.DEFAULT_STRATEGIES);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
strategies = Array.from(constants_1.DEFAULT_STRATEGIES);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
const strategyChoices = [
|
|
424
|
+
...Array.from(constants_1.DEFAULT_STRATEGIES).sort(),
|
|
425
|
+
new checkbox_2.Separator(),
|
|
426
|
+
...Array.from(constants_1.ADDITIONAL_STRATEGIES).sort(),
|
|
427
|
+
].map((strategy) => typeof strategy === 'string'
|
|
428
|
+
? {
|
|
429
|
+
name: `${strategy} - ${constants_1.subCategoryDescriptions[strategy] || 'No description'}`,
|
|
430
|
+
value: strategy,
|
|
431
|
+
checked: constants_1.DEFAULT_STRATEGIES.includes(strategy),
|
|
432
|
+
}
|
|
433
|
+
: strategy);
|
|
434
|
+
strategies = await (0, checkbox_1.default)({
|
|
435
|
+
message: `Select the ones you want to use. Don't worry, you can change this later:`,
|
|
436
|
+
choices: strategyChoices,
|
|
437
|
+
pageSize: process.stdout.rows - 6,
|
|
438
|
+
loop: false,
|
|
439
|
+
});
|
|
440
|
+
}
|
|
419
441
|
recordOnboardingStep('choose strategies', {
|
|
420
442
|
value: strategies,
|
|
421
443
|
});
|
|
@@ -490,7 +512,7 @@ async function redteamInit(directory) {
|
|
|
490
512
|
});
|
|
491
513
|
recordOnboardingStep('choose generate', { value: readyToGenerate });
|
|
492
514
|
if (readyToGenerate) {
|
|
493
|
-
await (0,
|
|
515
|
+
await (0, generate_1.doGenerateRedteam)({
|
|
494
516
|
purpose,
|
|
495
517
|
plugins: plugins.map((plugin) => (typeof plugin === 'string' ? { id: plugin } : plugin)),
|
|
496
518
|
cache: false,
|
|
@@ -532,25 +554,4 @@ function initCommand(program) {
|
|
|
532
554
|
}
|
|
533
555
|
});
|
|
534
556
|
}
|
|
535
|
-
|
|
536
|
-
program
|
|
537
|
-
.command('plugins')
|
|
538
|
-
.description('List all available plugins')
|
|
539
|
-
.option('--ids-only', 'Show only plugin IDs without descriptions')
|
|
540
|
-
.option('--default', 'Show only the default plugins')
|
|
541
|
-
.action(async (options) => {
|
|
542
|
-
const pluginsToShow = options.default ? constants_1.DEFAULT_PLUGINS : constants_1.ALL_PLUGINS;
|
|
543
|
-
if (options.idsOnly) {
|
|
544
|
-
pluginsToShow.forEach((plugin) => {
|
|
545
|
-
logger_1.default.info(plugin);
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
else {
|
|
549
|
-
pluginsToShow.forEach((plugin) => {
|
|
550
|
-
const description = constants_1.subCategoryDescriptions[plugin] || 'No description available';
|
|
551
|
-
logger_1.default.info(`${chalk_1.default.blue.bold(plugin)}: ${description}`);
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
//# sourceMappingURL=redteam.js.map
|
|
557
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/redteam/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../../src/commands/redteam/plugins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAoB9C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
exports.pluginsCommand = pluginsCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const logger_1 = __importDefault(require("../../logger"));
|
|
9
|
+
const constants_1 = require("../../redteam/constants");
|
|
10
|
+
function pluginsCommand(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('plugins')
|
|
13
|
+
.description('List all available plugins')
|
|
14
|
+
.option('--ids-only', 'Show only plugin IDs without descriptions')
|
|
15
|
+
.option('--default', 'Show only the default plugins')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
const pluginsToShow = options.default ? constants_1.DEFAULT_PLUGINS : constants_1.ALL_PLUGINS;
|
|
18
|
+
if (options.idsOnly) {
|
|
19
|
+
pluginsToShow.forEach((plugin) => {
|
|
20
|
+
logger_1.default.info(plugin);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pluginsToShow.forEach((plugin) => {
|
|
25
|
+
const description = constants_1.subCategoryDescriptions[plugin] || 'No description available';
|
|
26
|
+
logger_1.default.info(`${chalk_1.default.blue.bold(plugin)}: ${description}`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../../src/commands/redteam/plugins.ts"],"names":[],"mappings":";;;;;AAKA,wCAoBC;AAzBD,kDAA0B;AAE1B,0DAAkC;AAClC,uDAAgG;AAEhG,SAAgB,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,YAAY,EAAE,2CAA2C,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,2BAAe,CAAC,CAAC,CAAC,uBAAW,CAAC;QAEtE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/B,gBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/B,MAAM,WAAW,GAAG,mCAAuB,CAAC,MAAM,CAAC,IAAI,0BAA0B,CAAC;gBAClF,gBAAM,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|