1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
- import { novaOutputFromMessage, novaParseMessages } from '../../src/providers/bedrockUtil';
- 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' }],
- },
- ]);
- });
- });
|