Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

bedrockUtil.test.ts 3.2 KB

You have to be logged in to leave a comment. Sign In
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
  1. import { novaOutputFromMessage, novaParseMessages } from '../../src/providers/bedrockUtil';
  2. describe('novaOutputFromMessage', () => {
  3. it('should handle tool use blocks', () => {
  4. const response = {
  5. output: {
  6. message: {
  7. role: 'assistant',
  8. content: [
  9. { text: 'Wrapper text' },
  10. { toolUse: { name: 'tool1', toolUseId: '123', input: { foo: 'bar' } } },
  11. { text: 'More text' },
  12. { toolUse: { name: 'tool2', toolUseId: '456', input: { baz: 'qux' } } },
  13. ],
  14. },
  15. },
  16. };
  17. const result = novaOutputFromMessage(response);
  18. expect(result).toBe(
  19. '{"name":"tool1","toolUseId":"123","input":{"foo":"bar"}}\n\n{"name":"tool2","toolUseId":"456","input":{"baz":"qux"}}',
  20. );
  21. });
  22. it('should handle text-only blocks', () => {
  23. const response = {
  24. output: {
  25. message: {
  26. role: 'assistant',
  27. content: [{ text: 'First message' }, { text: 'Second message' }],
  28. },
  29. },
  30. };
  31. const result = novaOutputFromMessage(response);
  32. expect(result).toBe('First message\n\nSecond message');
  33. });
  34. it('should handle empty response', () => {
  35. const response = {};
  36. const result = novaOutputFromMessage(response);
  37. expect(result).toBeUndefined();
  38. });
  39. });
  40. describe('novaParseMessages', () => {
  41. it('should parse JSON messages', () => {
  42. const messages = JSON.stringify([
  43. { role: 'system', content: 'System message' },
  44. { role: 'user', content: 'User message' },
  45. { role: 'assistant', content: 'Assistant message' },
  46. ]);
  47. const result = novaParseMessages(messages);
  48. expect(result.system).toEqual([{ text: 'System message' }]);
  49. expect(result.extractedMessages).toEqual([
  50. { role: 'user', content: [{ text: 'User message' }] },
  51. { role: 'assistant', content: [{ text: 'Assistant message' }] },
  52. ]);
  53. });
  54. it('should parse plain text messages', () => {
  55. const messages = `
  56. system: System instruction
  57. user: Hello
  58. assistant: Hi there
  59. How are you?
  60. user: I'm good
  61. `;
  62. const result = novaParseMessages(messages);
  63. expect(result.system).toEqual([{ text: 'System instruction' }]);
  64. expect(result.extractedMessages).toEqual([
  65. { role: 'user', content: [{ text: 'Hello' }] },
  66. { role: 'assistant', content: [{ text: 'Hi there\nHow are you?' }] },
  67. { role: 'user', content: [{ text: "I'm good" }] },
  68. ]);
  69. });
  70. it('should handle single line input as user message', () => {
  71. const messages = 'Simple message';
  72. const result = novaParseMessages(messages);
  73. expect(result.system).toBeUndefined();
  74. expect(result.extractedMessages).toEqual([
  75. { role: 'user', content: [{ text: 'Simple message' }] },
  76. ]);
  77. });
  78. it('should handle JSON messages with array content', () => {
  79. const messages = JSON.stringify([
  80. {
  81. role: 'user',
  82. content: [{ text: 'Message 1' }, { text: 'Message 2' }],
  83. },
  84. ]);
  85. const result = novaParseMessages(messages);
  86. expect(result.extractedMessages).toEqual([
  87. {
  88. role: 'user',
  89. content: [{ text: 'Message 1' }, { text: 'Message 2' }],
  90. },
  91. ]);
  92. });
  93. });
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...