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
110 lines
3.2 KiB
TypeScript
110 lines
3.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { novaOutputFromMessage, novaParseMessages } from '../../../src/providers/bedrock/util';
|
|
|
|
describe('novaOutputFromMessage', () => {
|
|
it('should handle tool use blocks', () => {
|
|
const response = {
|
|
output: {
|
|
message: {
|
|
role: 'assistant',
|
|
content: [
|
|
{ text: 'Wrapper text' },
|
|
{ toolUse: { name: 'tool1', toolUseId: '123', input: { foo: 'bar' } } },
|
|
{ text: 'More text' },
|
|
{ toolUse: { name: 'tool2', toolUseId: '456', input: { baz: 'qux' } } },
|
|
],
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = novaOutputFromMessage(response);
|
|
expect(result).toBe(
|
|
'{"name":"tool1","toolUseId":"123","input":{"foo":"bar"}}\n\n{"name":"tool2","toolUseId":"456","input":{"baz":"qux"}}',
|
|
);
|
|
});
|
|
|
|
it('should handle text-only blocks', () => {
|
|
const response = {
|
|
output: {
|
|
message: {
|
|
role: 'assistant',
|
|
content: [{ text: 'First message' }, { text: 'Second message' }],
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = novaOutputFromMessage(response);
|
|
expect(result).toBe('First message\n\nSecond message');
|
|
});
|
|
|
|
it('should handle empty response', () => {
|
|
const response = {};
|
|
const result = novaOutputFromMessage(response);
|
|
expect(result).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe('novaParseMessages', () => {
|
|
it('should parse JSON messages', () => {
|
|
const messages = JSON.stringify([
|
|
{ role: 'system', content: 'System message' },
|
|
{ role: 'user', content: 'User message' },
|
|
{ role: 'assistant', content: 'Assistant message' },
|
|
]);
|
|
|
|
const result = novaParseMessages(messages);
|
|
|
|
expect(result.system).toEqual([{ text: 'System message' }]);
|
|
expect(result.extractedMessages).toEqual([
|
|
{ role: 'user', content: [{ text: 'User message' }] },
|
|
{ role: 'assistant', content: [{ text: 'Assistant message' }] },
|
|
]);
|
|
});
|
|
|
|
it('should parse plain text messages', () => {
|
|
const messages = `
|
|
system: System instruction
|
|
user: Hello
|
|
assistant: Hi there
|
|
How are you?
|
|
user: I'm good
|
|
`;
|
|
|
|
const result = novaParseMessages(messages);
|
|
|
|
expect(result.system).toEqual([{ text: 'System instruction' }]);
|
|
expect(result.extractedMessages).toEqual([
|
|
{ role: 'user', content: [{ text: 'Hello' }] },
|
|
{ role: 'assistant', content: [{ text: 'Hi there\nHow are you?' }] },
|
|
{ role: 'user', content: [{ text: "I'm good" }] },
|
|
]);
|
|
});
|
|
|
|
it('should handle single line input as user message', () => {
|
|
const messages = 'Simple message';
|
|
const result = novaParseMessages(messages);
|
|
|
|
expect(result.system).toBeUndefined();
|
|
expect(result.extractedMessages).toEqual([
|
|
{ role: 'user', content: [{ text: 'Simple message' }] },
|
|
]);
|
|
});
|
|
|
|
it('should handle JSON messages with array content', () => {
|
|
const messages = JSON.stringify([
|
|
{
|
|
role: 'user',
|
|
content: [{ text: 'Message 1' }, { text: 'Message 2' }],
|
|
},
|
|
]);
|
|
|
|
const result = novaParseMessages(messages);
|
|
expect(result.extractedMessages).toEqual([
|
|
{
|
|
role: 'user',
|
|
content: [{ text: 'Message 1' }, { text: 'Message 2' }],
|
|
},
|
|
]);
|
|
});
|
|
});
|