0d3cb498a3
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Waiting to run
Test and Publish Multi-arch Docker Image / test (push) Waiting to run
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Blocked by required conditions
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) Blocked by required conditions
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Blocked by required conditions
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Blocked by required conditions
Validate Renovate Config / Validate Renovate Configuration (push) Waiting to run
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
32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
module.exports = {
|
|
request: (prompt) => {
|
|
// Most plugins return a string which we need to convert to OpenAI format.
|
|
// Multi-turn strategies like GOAT and Crescendo return the entire chat
|
|
// history in OpenAI format. We can just return the string as is.
|
|
try {
|
|
JSON.parse(prompt); // Throws error if prompt is not valid JSON
|
|
// We can add additional validation here if needed
|
|
// Array.isArray(prompt) && prompt.every(msg => msg.role && msg.content)
|
|
return prompt;
|
|
} catch {
|
|
return JSON.stringify([{ role: 'user', content: prompt }]);
|
|
}
|
|
},
|
|
response: (json, text) => {
|
|
// Can be as simple as json.chat_history[json.chat_history.length - 1]?.content;
|
|
// We may want to add additional validations here if the API returns
|
|
// refusals in a different format or something unexpected.
|
|
if (!json.chat_history || !Array.isArray(json.chat_history)) {
|
|
throw new Error(`No chat history found in response: ${text}`);
|
|
}
|
|
const length = json.chat_history.length;
|
|
const lastMessage = json.chat_history[length - 1].content;
|
|
if (typeof lastMessage !== 'string') {
|
|
throw new Error(
|
|
`No last message found in chat history: ${JSON.stringify(json.chat_history)}`,
|
|
);
|
|
}
|
|
return lastMessage;
|
|
},
|
|
};
|