@aj-archipelago/cortex 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +1 -1
  2. package/config/default.example.json +18 -0
  3. package/config.js +25 -5
  4. package/graphql/pathwayPrompter.js +8 -0
  5. package/graphql/pathwayResolver.js +9 -1
  6. package/graphql/plugins/azureTranslatePlugin.js +22 -0
  7. package/graphql/plugins/modelPlugin.js +15 -42
  8. package/graphql/plugins/openAiChatPlugin.js +85 -2
  9. package/graphql/plugins/openAiCompletionPlugin.js +32 -2
  10. package/graphql/plugins/openAiWhisperPlugin.js +49 -13
  11. package/graphql/plugins/palmChatPlugin.js +229 -0
  12. package/graphql/plugins/palmCompletionPlugin.js +134 -0
  13. package/graphql/prompt.js +11 -4
  14. package/helper_apps/MediaFileChunker/Dockerfile +20 -0
  15. package/helper_apps/MediaFileChunker/fileChunker.js +50 -6
  16. package/helper_apps/MediaFileChunker/helper.js +13 -1
  17. package/helper_apps/MediaFileChunker/index.js +2 -4
  18. package/helper_apps/MediaFileChunker/package-lock.json +73 -18
  19. package/helper_apps/MediaFileChunker/package.json +2 -1
  20. package/lib/gcpAuthTokenHelper.js +37 -0
  21. package/package.json +3 -1
  22. package/pathways/completions.js +17 -0
  23. package/pathways/index.js +4 -2
  24. package/pathways/{lc_test.mjs → test_langchain.mjs} +1 -1
  25. package/pathways/test_oai_chat.js +18 -0
  26. package/pathways/test_oai_cmpl.js +13 -0
  27. package/pathways/test_palm_chat.js +31 -0
  28. package/pathways/transcribe.js +1 -0
  29. package/pathways/translate.js +2 -1
  30. package/tests/chunking.test.js +8 -6
  31. package/tests/modelPlugin.test.js +2 -14
  32. package/tests/openAiChatPlugin.test.js +125 -0
  33. package/tests/palmChatPlugin.test.js +256 -0
  34. package/tests/palmCompletionPlugin.test.js +87 -0
@@ -0,0 +1,256 @@
1
+ // test_palmChatPlugin.js
2
+ import test from 'ava';
3
+ import PalmChatPlugin from '../graphql/plugins/palmChatPlugin.js';
4
+ import { mockConfig } from './mocks.js';
5
+
6
+ test.beforeEach((t) => {
7
+ const pathway = 'testPathway';
8
+ const palmChatPlugin = new PalmChatPlugin(mockConfig, pathway);
9
+ t.context = { palmChatPlugin };
10
+ });
11
+
12
+ test('convertMessagesToPalm', (t) => {
13
+ const { palmChatPlugin } = t.context;
14
+ const messages = [
15
+ { role: 'system', content: 'System Message' },
16
+ { role: 'user', content: 'User Message' },
17
+ { role: 'user', content: 'User Message 2'},
18
+ ];
19
+
20
+ const expectedResult = {
21
+ messages: [
22
+ { author: 'user', content: 'User Message\nUser Message 2' },
23
+ ],
24
+ context: 'System Message',
25
+ };
26
+
27
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
28
+ });
29
+
30
+ test('convertMessagesToPalm - already PaLM format', (t) => {
31
+ const { palmChatPlugin } = t.context;
32
+ const messages = [
33
+ { author: 'user', content: 'User Message' },
34
+ { author: 'user', content: 'User Message 2'},
35
+ ];
36
+
37
+ const expectedResult = {
38
+ messages: [
39
+ { author: 'user', content: 'User Message\nUser Message 2' },
40
+ ],
41
+ context: '',
42
+ };
43
+
44
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
45
+ });
46
+
47
+ test('convertMessagesToPalm - empty string roles', (t) => {
48
+ const { palmChatPlugin } = t.context;
49
+ const messages = [
50
+ { role: '', content: 'Empty role message' },
51
+ { role: 'user', content: 'User Message' },
52
+ ];
53
+
54
+ const expectedResult = {
55
+ messages: [
56
+ { author: 'user', content: 'User Message' },
57
+ ],
58
+ context: '',
59
+ };
60
+
61
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
62
+ });
63
+
64
+ test('convertMessagesToPalm - consecutive system messages', (t) => {
65
+ const { palmChatPlugin } = t.context;
66
+ const messages = [
67
+ { role: 'system', content: 'System Message 1' },
68
+ { role: 'system', content: 'System Message 2' },
69
+ { role: 'user', content: 'User Message' },
70
+ ];
71
+
72
+ const expectedResult = {
73
+ messages: [
74
+ { author: 'user', content: 'User Message' },
75
+ ],
76
+ context: 'System Message 1\nSystem Message 2',
77
+ };
78
+
79
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
80
+ });
81
+
82
+ test('convertMessagesToPalm - multiple authors', (t) => {
83
+ const { palmChatPlugin } = t.context;
84
+ const messages = [
85
+ { role: 'system', content: 'System Message' },
86
+ { author: 'user1', content: 'User1 Message' },
87
+ { author: 'user1', content: 'User1 Message 2' },
88
+ { author: 'user2', content: 'User2 Message' },
89
+ { author: 'assistant', content: 'Assistant Message' },
90
+ ];
91
+
92
+ const expectedResult = {
93
+ messages: [
94
+ { author: 'user1', content: 'User1 Message\nUser1 Message 2' },
95
+ { author: 'user2', content: 'User2 Message' },
96
+ { author: 'assistant', content: 'Assistant Message' },
97
+ ],
98
+ context: 'System Message',
99
+ };
100
+
101
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
102
+ });
103
+
104
+ test('convertMessagesToPalm - no messages', (t) => {
105
+ const { palmChatPlugin } = t.context;
106
+ const messages = [];
107
+
108
+ const expectedResult = {
109
+ messages: [],
110
+ context: '',
111
+ };
112
+
113
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
114
+ });
115
+
116
+ test('convertMessagesToPalm - only system messages', (t) => {
117
+ const { palmChatPlugin } = t.context;
118
+ const messages = [
119
+ { role: 'system', content: 'System Message 1' },
120
+ { role: 'system', content: 'System Message 2' },
121
+ ];
122
+
123
+ const expectedResult = {
124
+ messages: [],
125
+ context: 'System Message 1\nSystem Message 2',
126
+ };
127
+
128
+ t.deepEqual(palmChatPlugin.convertMessagesToPalm(messages), expectedResult);
129
+ });
130
+
131
+ test('getCompiledContext', (t) => {
132
+ const { palmChatPlugin } = t.context;
133
+ const text = 'Hello';
134
+ const parameters = { name: 'John' };
135
+ const context = '{{text}} from {{name}}';
136
+
137
+ const expectedResult = 'Hello from John';
138
+
139
+ t.is(palmChatPlugin.getCompiledContext(text, parameters, context), expectedResult);
140
+ });
141
+
142
+ test('getCompiledExamples', (t) => {
143
+ const { palmChatPlugin } = t.context;
144
+ const text = 'Greetings';
145
+ const parameters = { name: 'Jane' };
146
+ const examples = [
147
+ {
148
+ input: { content: 'Input: {{text}} from {{name}}' },
149
+ output: { content: 'Output: {{text}} to {{name}}' },
150
+ },
151
+ ];
152
+
153
+ const expectedResult = [
154
+ {
155
+ input: { content: 'Input: Greetings from Jane' },
156
+ output: { content: 'Output: Greetings to Jane' },
157
+ },
158
+ ];
159
+
160
+ t.deepEqual(palmChatPlugin.getCompiledExamples(text, parameters, examples), expectedResult);
161
+ });
162
+
163
+ test('getRequestParameters', (t) => {
164
+ const { palmChatPlugin } = t.context;
165
+ const text = 'Hello';
166
+ const parameters = { stream: false, name: 'John'};
167
+ const messages = [
168
+ { role: 'system', content: 'System Message' },
169
+ { role: 'user', content: 'Hello' },
170
+ { role: 'assistant', content: 'What can I do for you?' },
171
+ { role: 'user', content: 'Be my assistant!' },
172
+ ];
173
+ const prompt = { context: '{{text}} from {{name}}', examples: [], messages };
174
+
175
+ const requestParameters = palmChatPlugin.getRequestParameters(text, parameters, prompt);
176
+ const requestMessages = requestParameters.instances[0].messages;
177
+
178
+ t.is(requestMessages[0].author, 'user');
179
+ t.is(requestMessages[0].content, 'Hello');
180
+ });
181
+
182
+ test('getSafetyAttributes', (t) => {
183
+ const { palmChatPlugin } = t.context;
184
+ const responseData = {
185
+ predictions: [
186
+ {
187
+ safetyAttributes: {
188
+ blocked: false,
189
+ },
190
+ },
191
+ ],
192
+ };
193
+
194
+ const expectedResult = {
195
+ blocked: false,
196
+ };
197
+
198
+ t.deepEqual(palmChatPlugin.getSafetyAttributes(responseData), expectedResult);
199
+ });
200
+
201
+ test('parseResponse', (t) => {
202
+ const { palmChatPlugin } = t.context;
203
+ const responseData = {
204
+ predictions: [
205
+ {
206
+ candidates: [
207
+ {
208
+ content: 'Hello, how can I help you today?',
209
+ },
210
+ ],
211
+ },
212
+ ],
213
+ };
214
+
215
+ const expectedResult = 'Hello, how can I help you today?';
216
+
217
+ t.is(palmChatPlugin.parseResponse(responseData), expectedResult);
218
+ });
219
+
220
+ test('logRequestData', (t) => {
221
+ const { palmChatPlugin } = t.context;
222
+ const data = {
223
+ instances: [
224
+ {
225
+ messages: [
226
+ { author: 'user', content: 'Hello' },
227
+ { author: 'assistant', content: 'How can I help you?' },
228
+ ],
229
+ },
230
+ ],
231
+ };
232
+ const responseData = {
233
+ predictions: [
234
+ {
235
+ candidates: [
236
+ {
237
+ content: 'Hello, how can I help you today?',
238
+ },
239
+ ],
240
+ },
241
+ ],
242
+ };
243
+ const prompt = { debugInfo: '' };
244
+
245
+ const consoleLog = console.log;
246
+ let logOutput = '';
247
+ console.log = (msg) => (logOutput += msg + '\n');
248
+
249
+ palmChatPlugin.logRequestData(data, responseData, prompt);
250
+
251
+ console.log = consoleLog;
252
+
253
+ t.true(logOutput.includes('Message 1:'));
254
+ t.true(logOutput.includes('Message 2:'));
255
+ t.true(logOutput.includes('> Hello, how can I help you today?'));
256
+ });
@@ -0,0 +1,87 @@
1
+ // palmCompletionPlugin.test.js
2
+
3
+ import test from 'ava';
4
+ import PalmCompletionPlugin from '../graphql/plugins/palmCompletionPlugin.js';
5
+ import { mockConfig } from './mocks.js';
6
+
7
+ test.beforeEach((t) => {
8
+ const pathway = 'testPathway';
9
+ const palmCompletionPlugin = new PalmCompletionPlugin(mockConfig, pathway);
10
+ t.context = { palmCompletionPlugin };
11
+ });
12
+
13
+ test('getRequestParameters', (t) => {
14
+ const { palmCompletionPlugin } = t.context;
15
+ const text = 'Hello';
16
+ const parameters = { stream: false, name: 'John' };
17
+ const prompt = {prompt:'{{text}} from {{name}}'};
18
+
19
+ const requestParameters = palmCompletionPlugin.getRequestParameters(text, parameters, prompt);
20
+ const requestPrompt = requestParameters.instances[0].prompt;
21
+
22
+ t.is(requestPrompt, 'Hello from John');
23
+ });
24
+
25
+ test('parseResponse', (t) => {
26
+ const { palmCompletionPlugin } = t.context;
27
+ const responseData = {
28
+ predictions: [
29
+ {
30
+ content: 'Hello, how can I help you today?',
31
+ },
32
+ ],
33
+ };
34
+
35
+ const expectedResult = 'Hello, how can I help you today?';
36
+
37
+ t.is(palmCompletionPlugin.parseResponse(responseData), expectedResult);
38
+ });
39
+
40
+ test('getSafetyAttributes', (t) => {
41
+ const { palmCompletionPlugin } = t.context;
42
+ const responseData = {
43
+ predictions: [
44
+ {
45
+ safetyAttributes: {
46
+ blocked: false,
47
+ },
48
+ },
49
+ ],
50
+ };
51
+
52
+ const expectedResult = {
53
+ blocked: false,
54
+ };
55
+
56
+ t.deepEqual(palmCompletionPlugin.getSafetyAttributes(responseData), expectedResult);
57
+ });
58
+
59
+ test('logRequestData', (t) => {
60
+ const { palmCompletionPlugin } = t.context;
61
+ const data = {
62
+ instances: [
63
+ {
64
+ prompt: 'Hello, how can I help you?',
65
+ },
66
+ ],
67
+ };
68
+ const responseData = {
69
+ predictions: [
70
+ {
71
+ content: 'Hello, how can I help you today?',
72
+ },
73
+ ],
74
+ };
75
+ const prompt = { debugInfo: '' };
76
+
77
+ const consoleLog = console.log;
78
+ let logOutput = '';
79
+ console.log = (msg) => (logOutput += msg + '\n');
80
+
81
+ palmCompletionPlugin.logRequestData(data, responseData, prompt);
82
+
83
+ console.log = consoleLog;
84
+
85
+ t.true(logOutput.includes('Hello, how can I help you?'));
86
+ t.true(logOutput.includes('> Hello, how can I help you today?'));
87
+ });