Skip to content

Commit e9279ff

Browse files
committed
dev: implement message normalization
1 parent e6ad54b commit e9279ff

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const { whatis } = require("../../../util/langutil");
2+
3+
module.exports = class Messages {
4+
static normalize_single_message (message, params = {}) {
5+
params = Object.assign({
6+
role: 'user',
7+
}, params);
8+
9+
if ( typeof message === 'string' ) {
10+
message = {
11+
content: [message],
12+
};
13+
}
14+
if ( whatis(message) !== 'object' ) {
15+
throw new Error('each message must be a string or object');
16+
}
17+
if ( ! message.role ) {
18+
message.role = params.role;
19+
}
20+
if ( ! message.content ) {
21+
throw new Error(`each message must have a 'content' property`);
22+
}
23+
if ( whatis(message.content) !== 'array' ) {
24+
message.content = [message.content];
25+
}
26+
for ( let i=0 ; i < message.content.length ; i++ ) {
27+
if ( whatis(message.content[i]) === 'string' ) {
28+
message.content[i] = {
29+
type: 'text',
30+
text: message.content[i],
31+
};
32+
}
33+
if ( whatis(message.content[i]) !== 'object' ) {
34+
throw new Error('each message content item must be a string or object');
35+
}
36+
if ( ! message.content[i].type ) {
37+
message.content[i].type = 'text';
38+
}
39+
}
40+
41+
console.log('???', message)
42+
return message;
43+
}
44+
static normalize_messages (messages, params = {}) {
45+
for ( let i=0 ; i < messages.length ; i++ ) {
46+
messages[i] = this.normalize_single_message(messages[i], params);
47+
}
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const { expect } = require('chai');
2+
const Messages = require('./Messages.js');
3+
4+
describe('Messages', () => {
5+
describe('normalize_single_message', () => {
6+
const cases = [
7+
{
8+
name: 'string message',
9+
input: 'Hello, world!',
10+
output: {
11+
role: 'user',
12+
content: [
13+
{
14+
type: 'text',
15+
text: 'Hello, world!',
16+
}
17+
]
18+
}
19+
}
20+
];
21+
for ( const tc of cases ) {
22+
it(`should normalize ${tc.name}`, () => {
23+
const output = Messages.normalize_single_message(tc.input);
24+
expect(output).to.deep.equal(tc.output);
25+
});
26+
}
27+
});
28+
});

0 commit comments

Comments
 (0)