promptfoo 0.112.7 → 0.113.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/dist/package.json +11 -11
- package/dist/src/app/assets/{index-hWJZsnu2.js → index-BBF3o-At.js} +11 -11
- package/dist/src/app/assets/{index.es-Dr2D4Md0.js → index.es-CIVyj4Ly.js} +1 -1
- package/dist/src/app/assets/{source-map-support-DvBN-NgF.js → source-map-support-DmE-TbSd.js} +1 -1
- package/dist/src/app/assets/{sync-CL_B8KZP.js → sync-DKyeSqmb.js} +1 -1
- package/dist/src/app/index.html +1 -1
- package/dist/src/assertions/llmRubric.d.ts.map +1 -1
- package/dist/src/assertions/llmRubric.js +3 -1
- package/dist/src/assertions/llmRubric.js.map +1 -1
- package/dist/src/commands/eval.d.ts +6 -1
- package/dist/src/commands/eval.d.ts.map +1 -1
- package/dist/src/commands/eval.js +5 -1
- package/dist/src/commands/eval.js.map +1 -1
- package/dist/src/envars.d.ts +1 -0
- package/dist/src/envars.d.ts.map +1 -1
- package/dist/src/envars.js.map +1 -1
- package/dist/src/evaluator.d.ts.map +1 -1
- package/dist/src/evaluator.js +3 -2
- package/dist/src/evaluator.js.map +1 -1
- package/dist/src/googleSheets.js +1 -1
- package/dist/src/googleSheets.js.map +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +2 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/matchers.d.ts +1 -1
- package/dist/src/matchers.d.ts.map +1 -1
- package/dist/src/matchers.js.map +1 -1
- package/dist/src/models/eval.d.ts +3 -1
- package/dist/src/models/eval.d.ts.map +1 -1
- package/dist/src/models/eval.js +19 -4
- package/dist/src/models/eval.js.map +1 -1
- package/dist/src/providers/ai21.d.ts.map +1 -1
- package/dist/src/providers/ai21.js +3 -1
- package/dist/src/providers/ai21.js.map +1 -1
- package/dist/src/providers/mcp/client.d.ts.map +1 -1
- package/dist/src/providers/mcp/client.js +10 -2
- package/dist/src/providers/mcp/client.js.map +1 -1
- package/dist/src/providers/mcp/types.d.ts +1 -0
- package/dist/src/providers/mcp/types.d.ts.map +1 -1
- package/dist/src/providers/openai/responses.d.ts.map +1 -1
- package/dist/src/providers/openai/responses.js +3 -1
- package/dist/src/providers/openai/responses.js.map +1 -1
- package/dist/src/providers/openai/util.d.ts.map +1 -1
- package/dist/src/providers/openai/util.js +14 -0
- package/dist/src/providers/openai/util.js.map +1 -1
- package/dist/src/providers/registry.js +2 -2
- package/dist/src/providers/registry.js.map +1 -1
- package/dist/src/providers/sagemaker.d.ts.map +1 -1
- package/dist/src/providers/sagemaker.js +9 -44
- package/dist/src/providers/sagemaker.js.map +1 -1
- package/dist/src/redteam/commands/discover.d.ts +111 -0
- package/dist/src/redteam/commands/discover.d.ts.map +1 -0
- package/dist/src/redteam/commands/discover.js +360 -0
- package/dist/src/redteam/commands/discover.js.map +1 -0
- package/dist/src/redteam/commands/generate.d.ts.map +1 -1
- package/dist/src/redteam/commands/generate.js +27 -1
- package/dist/src/redteam/commands/generate.js.map +1 -1
- package/dist/src/redteam/constants.d.ts +6 -2
- package/dist/src/redteam/constants.d.ts.map +1 -1
- package/dist/src/redteam/constants.js +20 -11
- package/dist/src/redteam/constants.js.map +1 -1
- package/dist/src/redteam/index.d.ts +4 -0
- package/dist/src/redteam/index.d.ts.map +1 -1
- package/dist/src/redteam/index.js +76 -9
- package/dist/src/redteam/index.js.map +1 -1
- package/dist/src/redteam/strategies/multilingual.d.ts +14 -0
- package/dist/src/redteam/strategies/multilingual.d.ts.map +1 -1
- package/dist/src/redteam/strategies/multilingual.js +189 -45
- package/dist/src/redteam/strategies/multilingual.js.map +1 -1
- package/dist/src/redteam/strategies/otherEncodings.d.ts +5 -4
- package/dist/src/redteam/strategies/otherEncodings.d.ts.map +1 -1
- package/dist/src/redteam/strategies/otherEncodings.js +11 -12
- package/dist/src/redteam/strategies/otherEncodings.js.map +1 -1
- package/dist/src/redteam/strategies/simpleVideo.d.ts +15 -17
- package/dist/src/redteam/strategies/simpleVideo.d.ts.map +1 -1
- package/dist/src/redteam/strategies/simpleVideo.js +146 -113
- package/dist/src/redteam/strategies/simpleVideo.js.map +1 -1
- package/dist/src/share.d.ts.map +1 -1
- package/dist/src/share.js +50 -135
- package/dist/src/share.js.map +1 -1
- package/dist/src/telemetry.d.ts.map +1 -1
- package/dist/src/telemetry.js +2 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/util/cloud.js +1 -1
- package/dist/src/util/cloud.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
|
@@ -36,32 +36,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
39
|
+
exports.importFfmpeg = importFfmpeg;
|
|
40
|
+
exports.createTempVideoEnvironment = createTempVideoEnvironment;
|
|
41
|
+
exports.getFallbackBase64 = getFallbackBase64;
|
|
40
42
|
exports.textToVideo = textToVideo;
|
|
43
|
+
exports.createProgressBar = createProgressBar;
|
|
41
44
|
exports.addVideoToBase64 = addVideoToBase64;
|
|
42
|
-
exports.
|
|
45
|
+
exports.writeVideoFile = writeVideoFile;
|
|
43
46
|
exports.main = main;
|
|
44
47
|
const cli_progress_1 = require("cli-progress");
|
|
45
|
-
const
|
|
48
|
+
const fs_1 = __importDefault(require("fs"));
|
|
49
|
+
const os_1 = __importDefault(require("os"));
|
|
50
|
+
const path_1 = __importDefault(require("path"));
|
|
51
|
+
const cliState_1 = __importDefault(require("../../cliState"));
|
|
46
52
|
const logger_1 = __importDefault(require("../../logger"));
|
|
47
53
|
const invariant_1 = __importDefault(require("../../util/invariant"));
|
|
48
54
|
const remoteGeneration_1 = require("../remoteGeneration");
|
|
49
|
-
// Cache for the ffmpeg module to avoid repeated dynamic imports
|
|
50
55
|
let ffmpegCache = null;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
* @returns The fluent-ffmpeg module
|
|
55
|
-
* @throws Error if fluent-ffmpeg is not installed
|
|
56
|
-
*/
|
|
56
|
+
function shouldShowProgressBar() {
|
|
57
|
+
return !cliState_1.default.webUI && logger_1.default.level !== 'debug';
|
|
58
|
+
}
|
|
57
59
|
async function importFfmpeg() {
|
|
58
|
-
// Return the cached module if available
|
|
59
60
|
if (ffmpegCache) {
|
|
60
61
|
return ffmpegCache;
|
|
61
62
|
}
|
|
62
63
|
try {
|
|
63
|
-
|
|
64
|
-
exports.ffmpegCache = ffmpegCache = await Promise.resolve().then(() => __importStar(require('fluent-ffmpeg')));
|
|
64
|
+
ffmpegCache = await Promise.resolve().then(() => __importStar(require('fluent-ffmpeg')));
|
|
65
65
|
return ffmpegCache;
|
|
66
66
|
}
|
|
67
67
|
catch (error) {
|
|
@@ -73,162 +73,196 @@ async function importFfmpeg() {
|
|
|
73
73
|
'- Windows: Download from ffmpeg.org');
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
async function textToVideo(text) {
|
|
81
|
-
// Special case for test environment - avoid actually generating video
|
|
82
|
-
if ((0, envars_1.getEnvString)('NODE_ENV') === 'test' || (0, envars_1.getEnvString)('JEST_WORKER_ID')) {
|
|
83
|
-
// Return a small dummy base64 string representing a minimal video
|
|
84
|
-
return 'AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAu1tZGF0AAAAMm1vb3YAAABsbXZoZAAAAAAAAAAAAAAAAAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIYdHJhawAAAFx0a2hkAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABNG1kaWEAAAAgbWRoZAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQQAAAAIAQAABkAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAAAAbRtZHhyAAAAAAAAAAEAAAABAAAAQAAAAAAAAAAAAAAEAAAAAK9tZXRhAAAAAAABAAAAJGhtZGEAAAABAAAAAAABJIICSgJYCAAASG1tZXRhZGF0YQosAggADgBMAEkAUwBUAPEAAABpbHN0AP8AAAAbAQAAAG1pbmYBAAAAAAAQAAgAIAASACMAGgAkACUAFAAaABoAHgAeAAcAGQAjABkAGAAVABEAGAAdABgAHQAjAAQACAALABkAAAAgAAgAHwBMAEkAUwBUAHQAAABzdHNkACYAAACac3RzYwAAAAAAAQAAAAsAAAACAAAAAgAAAAEAAAAjAAAAAgAAAAAAAQAAAAEAAAABAAAAIwAAAAEAAAABAAAAAAAAAAEAAAABAAAAAgAAAAIAAAAEAAAAAAAAAAgAAAAEAQAAAIVzdHNzAAAAAAAAAAEAAAAEAAAB4AAAAAkAAAM0c3RzegAAAAAAAAQ+AAAAAQAAAAEAAAHgAAAAAQAAAAEAAAGBAAAAAQAAAAEAAAGkAAAAAQAAAAEAAAGyAAAAAQAAAAEAAAHNAAAAAQAAAAEAAAB7AAABJnN0Y28AAAAAAAAAAQAAACgAAAAYc3RzegAAAAAAAAUAAAAEAAAAJgAAAAIAAAACAAAAAgAAAAEAAAABAAAAAAAAAAABgAAAAQAAAAEAAAAyAAAAAQAAAAEAAAByAAAAAQAAAAIAAACzAAAAAQAAAAMAAABQAAAAAQAAAAMAAABwAAAAAQAAAAMAAADiAAAB+HN0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAUqZGF0YQAAAARMbGF2YwEAAAcAGgA6WCCwACWmgQgJLUAQFoQAAACNAYXWMXjJFgdGRGF0YQAQSZLIwAW+xXLybCo=';
|
|
76
|
+
async function createTempVideoEnvironment(text) {
|
|
77
|
+
const tempDir = path_1.default.join(os_1.default.tmpdir(), 'promptfoo-video');
|
|
78
|
+
if (!fs_1.default.existsSync(tempDir)) {
|
|
79
|
+
fs_1.default.mkdirSync(tempDir, { recursive: true });
|
|
85
80
|
}
|
|
81
|
+
const textFilePath = path_1.default.join(tempDir, 'text.txt');
|
|
82
|
+
const outputPath = path_1.default.join(tempDir, 'output-video.mp4');
|
|
83
|
+
fs_1.default.writeFileSync(textFilePath, text);
|
|
84
|
+
const cleanup = () => {
|
|
85
|
+
try {
|
|
86
|
+
if (fs_1.default.existsSync(textFilePath)) {
|
|
87
|
+
fs_1.default.unlinkSync(textFilePath);
|
|
88
|
+
}
|
|
89
|
+
if (fs_1.default.existsSync(outputPath)) {
|
|
90
|
+
fs_1.default.unlinkSync(outputPath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger_1.default.warn(`Failed to clean up temporary files: ${error}`);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
return { tempDir, textFilePath, outputPath, cleanup };
|
|
98
|
+
}
|
|
99
|
+
function getFallbackBase64(text) {
|
|
100
|
+
return Buffer.from(text).toString('base64');
|
|
101
|
+
}
|
|
102
|
+
async function textToVideo(text) {
|
|
86
103
|
try {
|
|
87
|
-
// Check if remote generation is disabled
|
|
88
104
|
if ((0, remoteGeneration_1.neverGenerateRemote)()) {
|
|
89
|
-
// For simplicity in this initial implementation, we'll create a local video
|
|
90
|
-
// This will be a very basic implementation that doesn't require external services
|
|
91
105
|
const ffmpegModule = await importFfmpeg();
|
|
92
|
-
const
|
|
93
|
-
const os = await Promise.resolve().then(() => __importStar(require('os')));
|
|
94
|
-
const path = await Promise.resolve().then(() => __importStar(require('path')));
|
|
95
|
-
// Create temporary directory for video creation
|
|
96
|
-
const tempDir = path.join(os.tmpdir(), 'promptfoo-video');
|
|
97
|
-
if (!fs.existsSync(tempDir)) {
|
|
98
|
-
fs.mkdirSync(tempDir, { recursive: true });
|
|
99
|
-
}
|
|
100
|
-
// Create a text file with the content
|
|
101
|
-
const textFilePath = path.join(tempDir, 'text.txt');
|
|
102
|
-
fs.writeFileSync(textFilePath, text);
|
|
103
|
-
// Create output video file path
|
|
104
|
-
const outputPath = path.join(tempDir, 'output-video.mp4');
|
|
105
|
-
// Create a promise to handle the ffmpeg process
|
|
106
|
+
const { textFilePath, outputPath, cleanup } = await createTempVideoEnvironment(text);
|
|
106
107
|
return new Promise((resolve, reject) => {
|
|
107
|
-
// Create a simple video with the text
|
|
108
108
|
ffmpegModule()
|
|
109
|
-
.input('color=white:s=640x480:d=5')
|
|
109
|
+
.input('color=white:s=640x480:d=5')
|
|
110
110
|
.inputFormat('lavfi')
|
|
111
111
|
.input(textFilePath)
|
|
112
|
-
.inputOptions(['-f', 'concat'])
|
|
112
|
+
.inputOptions(['-f', 'concat'])
|
|
113
113
|
.complexFilter([
|
|
114
114
|
`[0:v]drawtext=fontfile=/System/Library/Fonts/Helvetica.ttc:text='${text.replace(/'/g, "\\'")}':fontcolor=black:fontsize=24:x=(w-text_w)/2:y=(h-text_h)/2[v]`,
|
|
115
115
|
])
|
|
116
116
|
.outputOptions(['-map', '[v]'])
|
|
117
117
|
.save(outputPath)
|
|
118
118
|
.on('end', async () => {
|
|
119
|
-
// Read the video file and convert to base64
|
|
120
|
-
const videoData = fs.readFileSync(outputPath);
|
|
121
|
-
const base64Video = videoData.toString('base64');
|
|
122
|
-
// Clean up temporary files
|
|
123
119
|
try {
|
|
124
|
-
|
|
125
|
-
|
|
120
|
+
const videoData = fs_1.default.readFileSync(outputPath);
|
|
121
|
+
const base64Video = videoData.toString('base64');
|
|
122
|
+
cleanup();
|
|
123
|
+
resolve(base64Video);
|
|
126
124
|
}
|
|
127
125
|
catch (error) {
|
|
128
|
-
logger_1.default.
|
|
126
|
+
logger_1.default.error(`Error processing video output: ${error}`);
|
|
127
|
+
cleanup();
|
|
128
|
+
reject(error);
|
|
129
129
|
}
|
|
130
|
-
resolve(base64Video);
|
|
131
130
|
})
|
|
132
131
|
.on('error', (err) => {
|
|
133
132
|
logger_1.default.error(`Error creating video: ${err}`);
|
|
133
|
+
cleanup();
|
|
134
134
|
reject(err);
|
|
135
135
|
});
|
|
136
136
|
});
|
|
137
137
|
}
|
|
138
138
|
else {
|
|
139
|
-
// In the future, this could use a remote API for more sophisticated video generation
|
|
140
|
-
// Similar to the audio strategy
|
|
141
139
|
throw new Error('Local video generation requires fluent-ffmpeg. Future versions may support remote generation.');
|
|
142
140
|
}
|
|
143
141
|
}
|
|
144
142
|
catch (error) {
|
|
145
143
|
logger_1.default.error(`Error generating video from text: ${error}`);
|
|
146
|
-
|
|
147
|
-
return Buffer.from(text).toString('base64');
|
|
144
|
+
return getFallbackBase64(text);
|
|
148
145
|
}
|
|
149
146
|
}
|
|
150
|
-
|
|
151
|
-
* Adds video encoding to test cases
|
|
152
|
-
*/
|
|
153
|
-
async function addVideoToBase64(testCases, injectVar) {
|
|
154
|
-
const videoTestCases = [];
|
|
147
|
+
function createProgressBar(total) {
|
|
155
148
|
let progressBar;
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
...testCase,
|
|
170
|
-
assert: testCase.assert?.map((assertion) => ({
|
|
171
|
-
...assertion,
|
|
172
|
-
metric: assertion.type?.startsWith('promptfoo:redteam:')
|
|
173
|
-
? `${assertion.type?.split(':').pop() || assertion.metric}/Video-Encoded`
|
|
174
|
-
: assertion.metric,
|
|
175
|
-
})),
|
|
176
|
-
vars: {
|
|
177
|
-
...testCase.vars,
|
|
178
|
-
[injectVar]: base64Video,
|
|
179
|
-
video_text: originalText, // Store the original text for reference
|
|
180
|
-
},
|
|
181
|
-
metadata: {
|
|
182
|
-
...testCase.metadata,
|
|
183
|
-
strategyId: 'video',
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
|
-
if (progressBar) {
|
|
187
|
-
progressBar.increment(1);
|
|
149
|
+
if (shouldShowProgressBar()) {
|
|
150
|
+
try {
|
|
151
|
+
progressBar = new cli_progress_1.SingleBar({
|
|
152
|
+
format: 'Converting to Videos {bar} {percentage}% | ETA: {eta}s | {value}/{total}',
|
|
153
|
+
hideCursor: true,
|
|
154
|
+
}, cli_progress_1.Presets.shades_classic);
|
|
155
|
+
try {
|
|
156
|
+
progressBar.start(total, 0);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
logger_1.default.warn(`Failed to start progress bar: ${error}`);
|
|
160
|
+
progressBar = undefined;
|
|
161
|
+
}
|
|
188
162
|
}
|
|
189
|
-
|
|
190
|
-
logger_1.default.
|
|
163
|
+
catch (error) {
|
|
164
|
+
logger_1.default.warn(`Failed to create progress bar: ${error}`);
|
|
191
165
|
}
|
|
192
166
|
}
|
|
193
|
-
|
|
194
|
-
|
|
167
|
+
return {
|
|
168
|
+
increment: () => {
|
|
169
|
+
if (progressBar) {
|
|
170
|
+
try {
|
|
171
|
+
progressBar.increment(1);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
logger_1.default.warn(`Failed to increment progress bar: ${error}`);
|
|
175
|
+
progressBar = undefined;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
stop: () => {
|
|
180
|
+
if (progressBar) {
|
|
181
|
+
try {
|
|
182
|
+
progressBar.stop();
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logger_1.default.warn(`Failed to stop progress bar: ${error}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
async function addVideoToBase64(testCases, injectVar, videoGenerator = textToVideo) {
|
|
192
|
+
const videoTestCases = [];
|
|
193
|
+
const progress = createProgressBar(testCases.length);
|
|
194
|
+
try {
|
|
195
|
+
for (const testCase of testCases) {
|
|
196
|
+
try {
|
|
197
|
+
(0, invariant_1.default)(testCase.vars, `Video encoding: testCase.vars is required, but got ${JSON.stringify(testCase)}`);
|
|
198
|
+
const originalText = String(testCase.vars[injectVar]);
|
|
199
|
+
const base64Video = await videoGenerator(originalText);
|
|
200
|
+
videoTestCases.push({
|
|
201
|
+
...testCase,
|
|
202
|
+
assert: testCase.assert?.map((assertion) => ({
|
|
203
|
+
...assertion,
|
|
204
|
+
metric: assertion.type?.startsWith('promptfoo:redteam:')
|
|
205
|
+
? `${assertion.type?.split(':').pop() || assertion.metric}/Video-Encoded`
|
|
206
|
+
: assertion.metric,
|
|
207
|
+
})),
|
|
208
|
+
vars: {
|
|
209
|
+
...testCase.vars,
|
|
210
|
+
[injectVar]: base64Video,
|
|
211
|
+
video_text: originalText,
|
|
212
|
+
},
|
|
213
|
+
metadata: {
|
|
214
|
+
...testCase.metadata,
|
|
215
|
+
strategyId: 'video',
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
logger_1.default.error(`Error processing test case: ${error}`);
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
progress.increment();
|
|
225
|
+
if (logger_1.default.level === 'debug') {
|
|
226
|
+
logger_1.default.debug(`Processed ${videoTestCases.length} of ${testCases.length}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return videoTestCases;
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
progress.stop();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async function writeVideoFile(base64Video, outputFilePath) {
|
|
237
|
+
try {
|
|
238
|
+
const videoBuffer = Buffer.from(base64Video, 'base64');
|
|
239
|
+
fs_1.default.writeFileSync(outputFilePath, videoBuffer);
|
|
240
|
+
logger_1.default.info(`Video file written to: ${outputFilePath}`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
logger_1.default.error(`Failed to write video file: ${error}`);
|
|
244
|
+
throw error;
|
|
195
245
|
}
|
|
196
|
-
return videoTestCases;
|
|
197
246
|
}
|
|
198
|
-
// Main function for direct testing via: npx tsx simpleVideo.ts "Text to convert to video"
|
|
199
247
|
async function main() {
|
|
200
|
-
// Get text from command line arguments or use default
|
|
201
248
|
const textToConvert = process.argv[2] || 'This is a test of the video encoding strategy.';
|
|
202
249
|
logger_1.default.info(`Converting text to video: "${textToConvert}"`);
|
|
203
250
|
try {
|
|
204
|
-
// Convert text to video
|
|
205
251
|
const base64Video = await textToVideo(textToConvert);
|
|
206
|
-
// Log the first 100 characters of the base64 video to avoid terminal clutter
|
|
207
252
|
logger_1.default.info(`Base64 video (first 100 chars): ${base64Video.substring(0, 100)}...`);
|
|
208
253
|
logger_1.default.info(`Total base64 video length: ${base64Video.length} characters`);
|
|
209
|
-
// Create a simple test case
|
|
210
254
|
const testCase = {
|
|
211
255
|
vars: {
|
|
212
256
|
prompt: textToConvert,
|
|
213
257
|
},
|
|
214
258
|
};
|
|
215
|
-
// Process the test case
|
|
216
259
|
const processedTestCases = await addVideoToBase64([testCase], 'prompt');
|
|
217
260
|
logger_1.default.info('Test case processed successfully.');
|
|
218
261
|
logger_1.default.info(`Original prompt length: ${textToConvert.length} characters`);
|
|
219
|
-
// Add type assertion to ensure TypeScript knows this is a string
|
|
220
262
|
const processedPrompt = processedTestCases[0].vars?.prompt;
|
|
221
263
|
logger_1.default.info(`Processed prompt length: ${processedPrompt.length} characters`);
|
|
222
|
-
// Check if we're running this directly (not being imported)
|
|
223
264
|
if (require.main === module) {
|
|
224
|
-
|
|
225
|
-
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
226
|
-
const outputFilePath = 'test-video.mp4';
|
|
227
|
-
// Decode base64 back to binary
|
|
228
|
-
const videoBuffer = Buffer.from(base64Video, 'base64');
|
|
229
|
-
// Write binary data to file
|
|
230
|
-
fs.writeFileSync(outputFilePath, videoBuffer);
|
|
231
|
-
logger_1.default.info(`Video file written to: ${outputFilePath}`);
|
|
265
|
+
await writeVideoFile(base64Video, 'test-video.mp4');
|
|
232
266
|
logger_1.default.info(`You can open it with any video player to verify the conversion.`);
|
|
233
267
|
}
|
|
234
268
|
}
|
|
@@ -236,7 +270,6 @@ async function main() {
|
|
|
236
270
|
logger_1.default.error(`Error generating video from text: ${error}`);
|
|
237
271
|
}
|
|
238
272
|
}
|
|
239
|
-
// Run the main function if this file is executed directly
|
|
240
273
|
if (require.main === module) {
|
|
241
274
|
main();
|
|
242
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpleVideo.js","sourceRoot":"","sources":["../../../../src/redteam/strategies/simpleVideo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simpleVideo.js","sourceRoot":"","sources":["../../../../src/redteam/strategies/simpleVideo.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,oCAkBC;AAED,gEA8BC;AAED,8CAEC;AAED,kCA4CC;AAED,8CAgDC;AAED,4CAqDC;AAED,wCASC;AAED,oBA+BC;AAzQD,+CAAkD;AAClD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,8DAAsC;AACtC,0DAAkC;AAElC,qEAA6C;AAC7C,0DAA0D;AAE1D,IAAI,WAAW,GAAQ,IAAI,CAAC;AAE5B,SAAS,qBAAqB;IAC5B,OAAO,CAAC,kBAAQ,CAAC,KAAK,IAAI,gBAAM,CAAC,KAAK,KAAK,OAAO,CAAC;AACrD,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,WAAW,GAAG,wDAAa,eAAe,GAAC,CAAC;QAC5C,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,IAAI,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,sFAAsF;YACpF,4DAA4D;YAC5D,gCAAgC;YAChC,2CAA2C;YAC3C,qCAAqC,CACxC,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAAC,IAAY;IAM3D,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAE1D,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,IAAI,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,IAAI,IAAA,sCAAmB,GAAE,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,MAAM,YAAY,EAAE,CAAC;YAC1C,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;YAErF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,YAAY,EAAE;qBACX,KAAK,CAAC,2BAA2B,CAAC;qBAClC,WAAW,CAAC,OAAO,CAAC;qBACpB,KAAK,CAAC,YAAY,CAAC;qBACnB,YAAY,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;qBAC9B,aAAa,CAAC;oBACb,oEAAoE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,gEAAgE;iBAC9J,CAAC;qBACD,aAAa,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBAC9B,IAAI,CAAC,UAAU,CAAC;qBAChB,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBACpB,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACjD,OAAO,EAAE,CAAC;wBACV,OAAO,CAAC,WAAW,CAAC,CAAC;oBACvB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,gBAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;wBACxD,OAAO,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC,CAAC;qBACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;oBAC1B,gBAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;oBAC7C,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAI7C,IAAI,WAAkC,CAAC;IAEvC,IAAI,qBAAqB,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,WAAW,GAAG,IAAI,wBAAS,CACzB;gBACE,MAAM,EAAE,0EAA0E;gBAClF,UAAU,EAAE,IAAI;aACjB,EACD,sBAAO,CAAC,cAAc,CACvB,CAAC;YAEF,IAAI,CAAC;gBACH,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;gBACtD,WAAW,GAAG,SAAS,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,IAAI,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,GAAG,EAAE;YACd,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gBAAM,CAAC,IAAI,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;oBAC1D,WAAW,GAAG,SAAS,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,WAAW,CAAC,IAAI,EAAE,CAAC;gBACrB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gBAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,SAAqB,EACrB,SAAiB,EACjB,iBAAoD,WAAW;IAE/D,MAAM,cAAc,GAAe,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,IAAA,mBAAS,EACP,QAAQ,CAAC,IAAI,EACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CACjF,CAAC;gBAEF,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACtD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;gBAEvD,cAAc,CAAC,IAAI,CAAC;oBAClB,GAAG,QAAQ;oBACX,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;wBAC3C,GAAG,SAAS;wBACZ,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC;4BACtD,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,MAAM,gBAAgB;4BACzE,CAAC,CAAC,SAAS,CAAC,MAAM;qBACrB,CAAC,CAAC;oBACH,IAAI,EAAE;wBACJ,GAAG,QAAQ,CAAC,IAAI;wBAChB,CAAC,SAAS,CAAC,EAAE,WAAW;wBACxB,UAAU,EAAE,YAAY;qBACzB;oBACD,QAAQ,EAAE;wBACR,GAAG,QAAQ,CAAC,QAAQ;wBACpB,UAAU,EAAE,OAAO;qBACpB;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gBAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;gBACrD,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAErB,IAAI,gBAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBAC7B,gBAAM,CAAC,KAAK,CAAC,aAAa,cAAc,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,cAAsB;IAC9E,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvD,YAAE,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC9C,gBAAM,CAAC,IAAI,CAAC,0BAA0B,cAAc,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,IAAI;IACxB,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,gDAAgD,CAAC;IAE1F,gBAAM,CAAC,IAAI,CAAC,8BAA8B,aAAa,GAAG,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QAErD,gBAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACnF,gBAAM,CAAC,IAAI,CAAC,8BAA8B,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa;aACtB;SACF,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QAExE,gBAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjD,gBAAM,CAAC,IAAI,CAAC,2BAA2B,aAAa,CAAC,MAAM,aAAa,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAgB,CAAC;QACrE,gBAAM,CAAC,IAAI,CAAC,4BAA4B,eAAe,CAAC,MAAM,aAAa,CAAC,CAAC;QAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACpD,gBAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC"}
|
package/dist/src/share.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/share.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAItC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAoB1D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,GAAG,iBAAiB,CAqBnE;
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/share.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAItC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAoB1D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,GAAG,iBAAiB,CAqBnE;AAwKD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU1D;AAwCD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,IAAI,EACX,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,IAAI,EAChB,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBrE"}
|