0d3cb498a3
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
203 lines
4.9 KiB
TypeScript
203 lines
4.9 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { addIterativeJailbreaks } from '../../../src/redteam/strategies/iterative';
|
|
|
|
import type { TestCase } from '../../../src/types/index';
|
|
|
|
describe('addIterativeJailbreaks', () => {
|
|
const mockTestCases: TestCase[] = [
|
|
{
|
|
vars: { testVar: 'test value' },
|
|
assert: [
|
|
{
|
|
type: 'contains-all', // Add required type field
|
|
metric: 'test-metric',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
},
|
|
},
|
|
];
|
|
|
|
it('should transform test cases correctly for iterative strategy', () => {
|
|
const result = addIterativeJailbreaks(mockTestCases, 'testVar', 'iterative', {
|
|
configKey: 'configValue',
|
|
});
|
|
|
|
expect(result[0]).toEqual({
|
|
...mockTestCases[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
configKey: 'configValue',
|
|
},
|
|
},
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric/Iterative',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
strategyId: 'jailbreak',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should transform test cases correctly for iterative:tree strategy', () => {
|
|
const result = addIterativeJailbreaks(mockTestCases, 'testVar', 'iterative:tree', {
|
|
configKey: 'configValue',
|
|
});
|
|
|
|
expect(result[0]).toEqual({
|
|
...mockTestCases[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative:tree',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
configKey: 'configValue',
|
|
},
|
|
},
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric/IterativeTree',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
strategyId: 'jailbreak:tree',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should handle test cases without assertions', () => {
|
|
const testCasesWithoutAssert: TestCase[] = [
|
|
{
|
|
vars: { testVar: 'test value' },
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
},
|
|
},
|
|
];
|
|
|
|
const result = addIterativeJailbreaks(testCasesWithoutAssert, 'testVar', 'iterative', {});
|
|
|
|
expect(result[0]).toEqual({
|
|
...testCasesWithoutAssert[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
},
|
|
},
|
|
assert: undefined,
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
strategyId: 'jailbreak',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should handle test cases without metadata', () => {
|
|
const testCasesWithoutMetadata: TestCase[] = [
|
|
{
|
|
vars: { testVar: 'test value' },
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const result = addIterativeJailbreaks(testCasesWithoutMetadata, 'testVar', 'iterative', {});
|
|
|
|
expect(result[0]).toEqual({
|
|
...testCasesWithoutMetadata[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
},
|
|
},
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric/Iterative',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
strategyId: 'jailbreak',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should use default iterative strategy when not specified', () => {
|
|
const result = addIterativeJailbreaks(mockTestCases, 'testVar', 'iterative', {});
|
|
|
|
expect(result[0]).toEqual({
|
|
...mockTestCases[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
},
|
|
},
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric/Iterative',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
strategyId: 'jailbreak',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('should transform test cases correctly for iterative:meta strategy', () => {
|
|
const result = addIterativeJailbreaks(mockTestCases, 'testVar', 'iterative:meta', {
|
|
configKey: 'configValue',
|
|
});
|
|
|
|
expect(result[0]).toEqual({
|
|
...mockTestCases[0],
|
|
provider: {
|
|
id: 'promptfoo:redteam:iterative:meta',
|
|
config: {
|
|
injectVar: 'testVar',
|
|
configKey: 'configValue',
|
|
},
|
|
},
|
|
assert: [
|
|
{
|
|
type: 'contains-all',
|
|
metric: 'test-metric/IterativeMeta',
|
|
value: 'test-value',
|
|
},
|
|
],
|
|
metadata: {
|
|
existingKey: 'existingValue',
|
|
strategyId: 'jailbreak:meta',
|
|
originalText: 'test value',
|
|
},
|
|
});
|
|
});
|
|
});
|