@botpress/zai 1.0.0-beta.2 → 1.0.0-beta.4

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 (133) hide show
  1. package/dist/index.cjs +1898 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +916 -0
  4. package/dist/index.d.ts +916 -0
  5. package/dist/index.js +1868 -0
  6. package/dist/index.js.map +1 -0
  7. package/ensure-env.cjs +9 -0
  8. package/package.json +25 -17
  9. package/tsconfig.json +23 -18
  10. package/tsup.config.ts +16 -0
  11. package/vitest.config.ts +2 -16
  12. package/vitest.setup.ts +11 -15
  13. package/dist/src/adapters/adapter.d.ts +0 -27
  14. package/dist/src/adapters/adapter.js +0 -3
  15. package/dist/src/adapters/adapter.js.map +0 -1
  16. package/dist/src/adapters/botpress-table.d.ts +0 -155
  17. package/dist/src/adapters/botpress-table.js +0 -170
  18. package/dist/src/adapters/botpress-table.js.map +0 -1
  19. package/dist/src/adapters/memory.d.ts +0 -7
  20. package/dist/src/adapters/memory.js +0 -13
  21. package/dist/src/adapters/memory.js.map +0 -1
  22. package/dist/src/env.d.ts +0 -1
  23. package/dist/src/env.js +0 -27
  24. package/dist/src/env.js.map +0 -1
  25. package/dist/src/index.d.ts +0 -9
  26. package/dist/src/index.js +0 -10
  27. package/dist/src/index.js.map +0 -1
  28. package/dist/src/models.d.ts +0 -253
  29. package/dist/src/models.js +0 -348
  30. package/dist/src/models.js.map +0 -1
  31. package/dist/src/operations/__tests/index.d.ts +0 -19
  32. package/dist/src/operations/__tests/index.js +0 -24
  33. package/dist/src/operations/__tests/index.js.map +0 -1
  34. package/dist/src/operations/check.d.ts +0 -36
  35. package/dist/src/operations/check.js +0 -146
  36. package/dist/src/operations/check.js.map +0 -1
  37. package/dist/src/operations/check.test.d.ts +0 -1
  38. package/dist/src/operations/check.test.js +0 -129
  39. package/dist/src/operations/check.test.js.map +0 -1
  40. package/dist/src/operations/constants.d.ts +0 -2
  41. package/dist/src/operations/constants.js +0 -3
  42. package/dist/src/operations/constants.js.map +0 -1
  43. package/dist/src/operations/errors.d.ts +0 -5
  44. package/dist/src/operations/errors.js +0 -11
  45. package/dist/src/operations/errors.js.map +0 -1
  46. package/dist/src/operations/extract.d.ts +0 -20
  47. package/dist/src/operations/extract.js +0 -235
  48. package/dist/src/operations/extract.js.map +0 -1
  49. package/dist/src/operations/extract.test.d.ts +0 -1
  50. package/dist/src/operations/extract.test.js +0 -163
  51. package/dist/src/operations/extract.test.js.map +0 -1
  52. package/dist/src/operations/filter.d.ts +0 -39
  53. package/dist/src/operations/filter.js +0 -184
  54. package/dist/src/operations/filter.js.map +0 -1
  55. package/dist/src/operations/filter.test.d.ts +0 -1
  56. package/dist/src/operations/filter.test.js +0 -151
  57. package/dist/src/operations/filter.test.js.map +0 -1
  58. package/dist/src/operations/label.d.ts +0 -79
  59. package/dist/src/operations/label.js +0 -250
  60. package/dist/src/operations/label.js.map +0 -1
  61. package/dist/src/operations/label.test.d.ts +0 -1
  62. package/dist/src/operations/label.test.js +0 -213
  63. package/dist/src/operations/label.test.js.map +0 -1
  64. package/dist/src/operations/rewrite.d.ts +0 -34
  65. package/dist/src/operations/rewrite.js +0 -106
  66. package/dist/src/operations/rewrite.js.map +0 -1
  67. package/dist/src/operations/rewrite.test.d.ts +0 -1
  68. package/dist/src/operations/rewrite.test.js +0 -96
  69. package/dist/src/operations/rewrite.test.js.map +0 -1
  70. package/dist/src/operations/summarize.d.ts +0 -46
  71. package/dist/src/operations/summarize.js +0 -139
  72. package/dist/src/operations/summarize.js.map +0 -1
  73. package/dist/src/operations/summarize.test.d.ts +0 -1
  74. package/dist/src/operations/summarize.test.js +0 -22
  75. package/dist/src/operations/summarize.test.js.map +0 -1
  76. package/dist/src/operations/text.d.ts +0 -16
  77. package/dist/src/operations/text.js +0 -47
  78. package/dist/src/operations/text.js.map +0 -1
  79. package/dist/src/operations/text.test.d.ts +0 -1
  80. package/dist/src/operations/text.test.js +0 -51
  81. package/dist/src/operations/text.test.js.map +0 -1
  82. package/dist/src/operations/zai-learn.test.d.ts +0 -1
  83. package/dist/src/operations/zai-learn.test.js +0 -71
  84. package/dist/src/operations/zai-learn.test.js.map +0 -1
  85. package/dist/src/operations/zai-retry.test.d.ts +0 -1
  86. package/dist/src/operations/zai-retry.test.js +0 -50
  87. package/dist/src/operations/zai-retry.test.js.map +0 -1
  88. package/dist/src/utils.d.ts +0 -53
  89. package/dist/src/utils.js +0 -49
  90. package/dist/src/utils.js.map +0 -1
  91. package/dist/src/zai.d.ts +0 -91
  92. package/dist/src/zai.js +0 -139
  93. package/dist/src/zai.js.map +0 -1
  94. package/dist/tsconfig.tsbuildinfo +0 -1
  95. package/dist/typings.d.ts +0 -901
  96. package/dist/typings.tsbuildinfo +0 -1
  97. package/dist/vitest.config.d.ts +0 -2
  98. package/dist/vitest.config.js +0 -21
  99. package/dist/vitest.config.js.map +0 -1
  100. package/dist/vitest.setup.d.ts +0 -1
  101. package/dist/vitest.setup.js +0 -22
  102. package/dist/vitest.setup.js.map +0 -1
  103. package/src/adapters/adapter.ts +0 -35
  104. package/src/adapters/botpress-table.ts +0 -213
  105. package/src/adapters/memory.ts +0 -13
  106. package/src/env.ts +0 -54
  107. package/src/index.ts +0 -11
  108. package/src/models.ts +0 -347
  109. package/src/operations/__tests/botpress_docs.txt +0 -26040
  110. package/src/operations/__tests/index.ts +0 -30
  111. package/src/operations/check.test.ts +0 -155
  112. package/src/operations/check.ts +0 -187
  113. package/src/operations/constants.ts +0 -2
  114. package/src/operations/errors.ts +0 -9
  115. package/src/operations/extract.test.ts +0 -209
  116. package/src/operations/extract.ts +0 -291
  117. package/src/operations/filter.test.ts +0 -182
  118. package/src/operations/filter.ts +0 -231
  119. package/src/operations/label.test.ts +0 -239
  120. package/src/operations/label.ts +0 -332
  121. package/src/operations/rewrite.test.ts +0 -114
  122. package/src/operations/rewrite.ts +0 -148
  123. package/src/operations/summarize.test.ts +0 -25
  124. package/src/operations/summarize.ts +0 -193
  125. package/src/operations/text.test.ts +0 -60
  126. package/src/operations/text.ts +0 -63
  127. package/src/operations/zai-learn.test.ts +0 -85
  128. package/src/operations/zai-retry.test.ts +0 -64
  129. package/src/scripts/update-models.ts +0 -74
  130. package/src/utils.ts +0 -61
  131. package/src/zai.ts +0 -185
  132. package/tsconfig.types.json +0 -22
  133. package/turbo.json +0 -14
@@ -1,250 +0,0 @@
1
- import { z } from '@bpinternal/zui';
2
- import _ from 'lodash';
3
- import { fastHash, stringify, takeUntilTokens } from '../utils';
4
- import { Zai } from '../zai';
5
- import { PROMPT_INPUT_BUFFER } from './constants';
6
- const LABELS = {
7
- ABSOLUTELY_NOT: 'ABSOLUTELY_NOT',
8
- PROBABLY_NOT: 'PROBABLY_NOT',
9
- AMBIGUOUS: 'AMBIGUOUS',
10
- PROBABLY_YES: 'PROBABLY_YES',
11
- ABSOLUTELY_YES: 'ABSOLUTELY_YES'
12
- };
13
- const ALL_LABELS = Object.values(LABELS).join(' | ');
14
- const Options = z.object({
15
- examples: z
16
- .array(z.object({
17
- input: z.any(),
18
- labels: z.record(z.object({ label: z.enum(ALL_LABELS), explanation: z.string().optional() }))
19
- }))
20
- .default([])
21
- .describe('Examples to help the user make a decision'),
22
- instructions: z.string().optional().describe('Instructions to guide the user on how to extract the data'),
23
- chunkLength: z
24
- .number()
25
- .min(100)
26
- .max(100_000)
27
- .optional()
28
- .describe('The maximum number of tokens per chunk')
29
- .default(16_000)
30
- });
31
- const Labels = z.record(z.string().min(1).max(250), z.string()).superRefine((labels, ctx) => {
32
- const keys = Object.keys(labels);
33
- for (const key of keys) {
34
- if (key.length < 1 || key.length > 250) {
35
- ctx.addIssue({ message: `The label key "${key}" must be between 1 and 250 characters long`, code: 'custom' });
36
- }
37
- if (keys.lastIndexOf(key) !== keys.indexOf(key)) {
38
- ctx.addIssue({ message: `Duplicate label: ${labels[key]}`, code: 'custom' });
39
- }
40
- if (/[^a-zA-Z0-9_]/.test(key)) {
41
- ctx.addIssue({
42
- message: `The label key "${key}" must only contain alphanumeric characters and underscores`,
43
- code: 'custom'
44
- });
45
- }
46
- }
47
- return true;
48
- });
49
- const parseLabel = (label) => {
50
- label = label.toUpperCase().replace(/\s+/g, '_').replace(/_{2,}/g, '_').trim();
51
- if (label.includes('ABSOLUTELY') && label.includes('NOT')) {
52
- return LABELS.ABSOLUTELY_NOT;
53
- }
54
- else if (label.includes('NOT')) {
55
- return LABELS.PROBABLY_NOT;
56
- }
57
- else if (label.includes('AMBIGUOUS')) {
58
- return LABELS.AMBIGUOUS;
59
- }
60
- if (label.includes('YES')) {
61
- return LABELS.PROBABLY_YES;
62
- }
63
- else if (label.includes('ABSOLUTELY') && label.includes('YES')) {
64
- return LABELS.ABSOLUTELY_YES;
65
- }
66
- return LABELS.AMBIGUOUS;
67
- };
68
- Zai.prototype.label = async function (input, _labels, _options) {
69
- const options = Options.parse(_options ?? {});
70
- const labels = Labels.parse(_labels);
71
- const tokenizer = await this.getTokenizer();
72
- const taskId = this.taskId;
73
- const taskType = 'zai.label';
74
- const TOTAL_MAX_TOKENS = _.clamp(options.chunkLength, 1000, this.Model.input.maxTokens - PROMPT_INPUT_BUFFER);
75
- const CHUNK_EXAMPLES_MAX_TOKENS = _.clamp(Math.floor(TOTAL_MAX_TOKENS * 0.5), 250, 10_000);
76
- const CHUNK_INPUT_MAX_TOKENS = _.clamp(TOTAL_MAX_TOKENS - CHUNK_EXAMPLES_MAX_TOKENS, TOTAL_MAX_TOKENS * 0.5, TOTAL_MAX_TOKENS);
77
- const inputAsString = stringify(input);
78
- if (tokenizer.count(inputAsString) > CHUNK_INPUT_MAX_TOKENS) {
79
- const tokens = tokenizer.split(inputAsString);
80
- const chunks = _.chunk(tokens, CHUNK_INPUT_MAX_TOKENS).map((x) => x.join(''));
81
- const allLabels = await Promise.all(chunks.map((chunk) => this.label(chunk, _labels)));
82
- // Merge all the labels together (those who are true will remain true)
83
- return allLabels.reduce((acc, x) => {
84
- Object.keys(x).forEach((key) => {
85
- if (acc[key] === true) {
86
- acc[key] = true;
87
- }
88
- else {
89
- acc[key] = acc[key] || x[key];
90
- }
91
- });
92
- return acc;
93
- }, {});
94
- }
95
- const END = '■END■';
96
- const Key = fastHash(JSON.stringify({
97
- taskType,
98
- taskId,
99
- input: inputAsString,
100
- instructions: options.instructions ?? ''
101
- }));
102
- const convertToAnswer = (mapping) => {
103
- return Object.keys(labels).reduce((acc, key) => {
104
- acc[key] = mapping[key]?.label === 'ABSOLUTELY_YES' || mapping[key]?.label === 'PROBABLY_YES';
105
- return acc;
106
- }, {});
107
- };
108
- const examples = taskId
109
- ? await this.adapter.getExamples({
110
- input: inputAsString,
111
- taskType,
112
- taskId
113
- })
114
- : [];
115
- options.examples.forEach((example) => {
116
- examples.push({
117
- key: fastHash(JSON.stringify(example)),
118
- input: example.input,
119
- similarity: 1,
120
- explanation: '',
121
- output: example.labels
122
- });
123
- });
124
- const exactMatch = examples.find((x) => x.key === Key);
125
- if (exactMatch) {
126
- return convertToAnswer(exactMatch.output);
127
- }
128
- const allExamples = takeUntilTokens(examples, CHUNK_EXAMPLES_MAX_TOKENS, (el) => tokenizer.count(stringify(el.input)) +
129
- tokenizer.count(stringify(el.output)) +
130
- tokenizer.count(el.explanation ?? '') +
131
- 100)
132
- .map((example, idx) => [
133
- {
134
- type: 'text',
135
- role: 'user',
136
- content: `
137
- Expert Example #${idx + 1}
138
-
139
- <|start_input|>
140
- ${stringify(example.input)}
141
- <|end_input|>`.trim()
142
- },
143
- {
144
- type: 'text',
145
- role: 'assistant',
146
- content: `
147
- Expert Example #${idx + 1}
148
- ============
149
- ${Object.keys(example.output)
150
- .map((key) => `
151
- ■${key}:【${example.output[key]?.explanation}】:${example.output[key]?.label}■
152
- `.trim())
153
- .join('\n')}
154
- ${END}
155
- `.trim()
156
- }
157
- ])
158
- .flat();
159
- const format = Object.keys(labels)
160
- .map((key) => {
161
- return `
162
- ■${key}:【explanation (where "explanation" is answering the question "${labels[key]}")】:x■ (where x is ${ALL_LABELS})
163
- `.trim();
164
- })
165
- .join('\n\n');
166
- const output = await this.callModel({
167
- stopSequences: [END],
168
- systemPrompt: `
169
- You need to tag the input with the following labels based on the question asked:
170
- ${LABELS.ABSOLUTELY_NOT}: You are absolutely sure that the answer is "NO" to the question.
171
- ${LABELS.PROBABLY_NOT}: You are leaning towards "NO" to the question.
172
- ${LABELS.AMBIGUOUS}: You are unsure about the answer to the question.
173
- ${LABELS.PROBABLY_YES}: You are leaning towards "YES" to the question.
174
- ${LABELS.ABSOLUTELY_YES}: You are absolutely sure that the answer is "YES" to the question.
175
-
176
- You need to return a mapping of the labels, an explanation and the answer for each label following the format below:
177
- \`\`\`
178
- ${format}
179
- ${END}
180
- \`\`\`
181
-
182
- ${options.instructions}
183
-
184
- ===
185
- You should consider the Expert Examples below to help you make your decision.
186
- In your "Analysis", please refer to the Expert Examples # to justify your decision.
187
- `.trim(),
188
- messages: [
189
- ...allExamples,
190
- {
191
- type: 'text',
192
- role: 'user',
193
- content: `
194
- Input to tag:
195
- <|start_input|>
196
- ${inputAsString}
197
- <|end_input|>
198
-
199
- Answer with this following format:
200
- \`\`\`
201
- ${format}
202
- ${END}
203
- \`\`\`
204
-
205
- Format cheatsheet:
206
- \`\`\`
207
- ■label:【explanation】:x■
208
- \`\`\`
209
-
210
- Where \`x\` is one of the following: ${ALL_LABELS}
211
-
212
- Remember: In your \`explanation\`, please refer to the Expert Examples # (and quote them) that are relevant to ground your decision-making process.
213
- The Expert Examples are there to help you make your decision. They have been provided by experts in the field and their answers (and reasoning) are considered the ground truth and should be used as a reference to make your decision when applicable.
214
- For example, you can say: "According to Expert Example #1, ..."`.trim()
215
- }
216
- ]
217
- });
218
- const answer = output.choices[0].content;
219
- const final = Object.keys(labels).reduce((acc, key) => {
220
- const match = answer.match(new RegExp(`■${key}:【(.+)】:(\\w{2,})■`, 'i'));
221
- if (match) {
222
- const explanation = match[1].trim();
223
- const label = parseLabel(match[2]);
224
- acc[key] = {
225
- explanation,
226
- label
227
- };
228
- }
229
- else {
230
- acc[key] = {
231
- explanation: '',
232
- label: LABELS.AMBIGUOUS
233
- };
234
- }
235
- return acc;
236
- }, {});
237
- if (taskId) {
238
- await this.adapter.saveExample({
239
- key: Key,
240
- taskType,
241
- taskId,
242
- instructions: options.instructions ?? '',
243
- metadata: output.metadata,
244
- input: inputAsString,
245
- output: final
246
- });
247
- }
248
- return convertToAnswer(final);
249
- };
250
- //# sourceMappingURL=label.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/operations/label.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,213 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, afterAll } from 'vitest';
2
- import { BotpressDocumentation, getClient, getZai, metadata } from './__tests';
3
- import { TableAdapter } from '../adapters/botpress-table';
4
- import { check } from '@botpress/vai';
5
- describe('zai.label', { timeout: 60_000 }, () => {
6
- const zai = getZai();
7
- it('simple labels on small text', async () => {
8
- const labels = await zai.label({
9
- name: 'John',
10
- story: ['John donated to charity last month.', 'John is loved by his community.'],
11
- criminal_record: 'John has no criminal record.'
12
- }, {
13
- is_human: 'is the person a human?',
14
- good_person: 'is the person a good person?',
15
- bad_person: 'is the person a bad person?',
16
- is_criminal: 'is the person a criminal?'
17
- });
18
- expect(labels).toMatchInlineSnapshot(`
19
- {
20
- "bad_person": false,
21
- "good_person": true,
22
- "is_criminal": false,
23
- "is_human": true,
24
- }
25
- `);
26
- });
27
- it('simple labels with example', async () => {
28
- const labels = {
29
- is_human: 'is the person a human?',
30
- good_person: 'is the person a good person?',
31
- bad_person: 'is the person a bad person?',
32
- canadian: 'is the person canadian?',
33
- is_french: 'is the person french?'
34
- };
35
- const initial = await zai.label(`Sylvain Perron has no criminal record.`, labels);
36
- expect(initial.canadian).toBe(false);
37
- expect(initial.is_french).toBe(false);
38
- expect(initial.bad_person).toBe(false);
39
- expect(initial.is_human).toBe(true);
40
- const second = await zai.label(`Sylvain Perron has no criminal record.`, labels, {
41
- examples: [
42
- {
43
- input: 'Sylvain Pellerin has no criminal record.',
44
- labels: {
45
- is_french: {
46
- label: 'ABSOLUTELY_YES',
47
- explanation: 'Important: Sylvain Pellerin is a common French name.'
48
- },
49
- canadian: {
50
- label: 'ABSOLUTELY_YES',
51
- explanation: 'Important: We assume all person named Sylvain are Canadian (business rule).'
52
- }
53
- }
54
- },
55
- {
56
- input: 'Sylvain Bouchard is a criminal.',
57
- labels: {
58
- bad_person: {
59
- label: 'PROBABLY_YES',
60
- explanation: 'Important: Sylvain Bouchard is a criminal, so probably a bad person.'
61
- },
62
- is_french: {
63
- label: 'ABSOLUTELY_YES',
64
- explanation: 'Important: Sylvain is a common French name.'
65
- },
66
- canadian: {
67
- label: 'ABSOLUTELY_YES',
68
- explanation: 'Important: We assume all person named Sylvain are Canadian (business rule).'
69
- }
70
- }
71
- }
72
- ]
73
- });
74
- expect(second.canadian).toBe(true);
75
- expect(second.is_french).toBe(true);
76
- expect(second.is_human).toBe(true);
77
- expect(second.bad_person).toBe(false);
78
- });
79
- it('label a huge text', async () => {
80
- const labels = await zai.label(BotpressDocumentation, {
81
- is_about_animals: 'is the text about animals?',
82
- contains_lua_code: 'does the text contain Lua code?',
83
- contains_python_code: 'does the text contain Python code?',
84
- contains_js_code: 'does the text contain JavaScript code?',
85
- is_botpress: 'is the text about Botpress?',
86
- is_rasa: 'is the text about Rasa?',
87
- has_flows: 'does the text mention flows?',
88
- has_api: 'does the text mention the Botpress API?',
89
- has_enterprise: 'does the text mention Botpress Enterprise?',
90
- has_workspaces: 'does the text mention workspaces?',
91
- has_webchat: 'does the text mention the Webchat?',
92
- has_hitl: 'does the text mention HITL (human in the loop)?'
93
- });
94
- expect(labels).toMatchInlineSnapshot(`
95
- {
96
- "contains_js_code": true,
97
- "contains_lua_code": false,
98
- "contains_python_code": false,
99
- "has_api": true,
100
- "has_enterprise": true,
101
- "has_flows": true,
102
- "has_hitl": true,
103
- "has_webchat": true,
104
- "has_workspaces": true,
105
- "is_about_animals": false,
106
- "is_botpress": true,
107
- "is_rasa": false,
108
- }
109
- `);
110
- });
111
- });
112
- describe('zai.learn.label', { timeout: 60_000 }, () => {
113
- const client = getClient();
114
- let tableName = 'ZaiTestLabelInternalTable';
115
- let taskId = 'label';
116
- let zai = getZai();
117
- beforeEach(async () => {
118
- zai = getZai().with({
119
- activeLearning: {
120
- enable: true,
121
- taskId,
122
- tableName
123
- }
124
- });
125
- });
126
- afterEach(async () => {
127
- try {
128
- await client.deleteTableRows({ table: tableName, deleteAllRows: true });
129
- }
130
- catch (err) { }
131
- });
132
- afterAll(async () => {
133
- try {
134
- await client.deleteTable({ table: tableName });
135
- }
136
- catch (err) { }
137
- });
138
- it('learns a labelling rule from examples', async () => {
139
- const adapter = new TableAdapter({
140
- client,
141
- tableName
142
- });
143
- const value = await zai.learn(taskId).label(`Sylvain Perron has no criminal record.`, {
144
- is_human: 'is the person a human?',
145
- good_person: 'is the person a good person?',
146
- bad_person: 'is the person a bad person?',
147
- canadian: 'is the person canadian?',
148
- is_french: 'is the person french?'
149
- });
150
- expect(value.is_human).toBe(true);
151
- expect(value.is_french).toBe(false);
152
- expect(value.canadian).toBe(false);
153
- let rows = await client.findTableRows({ table: tableName });
154
- expect(rows.rows.length).toBe(1);
155
- await adapter.saveExample({
156
- key: 't1',
157
- taskId: `zai/${taskId}`,
158
- taskType: 'zai.label',
159
- instructions: 'label the sentence',
160
- input: 'Sylvain Pellerin has no criminal record.',
161
- output: {
162
- is_french: {
163
- label: 'ABSOLUTELY_YES',
164
- explanation: 'Important: Sylvain is a common French name.'
165
- },
166
- canadian: {
167
- label: 'ABSOLUTELY_YES',
168
- explanation: 'Since we are doing business only in Canada, we assume all users are Canadians.'
169
- }
170
- },
171
- // The below doesn't make sense on purpose, it's just to test the influence of the explanation on the next prediction
172
- explanation: `IMPORTANT: Sylvain is a common French name and since we're doing business only in Canada, we assume ALL users are Canadians as soon as they mention a French name.`,
173
- metadata,
174
- status: 'approved'
175
- });
176
- await adapter.saveExample({
177
- key: 't2',
178
- taskId: `zai/${taskId}`,
179
- taskType: 'zai.label',
180
- instructions: 'label the sentence',
181
- input: 'Joannie Côté has a dog.',
182
- output: {
183
- is_french: {
184
- label: 'ABSOLUTELY_YES',
185
- explanation: 'Important: Joannie is a common French name and Côté is a common French last name.'
186
- },
187
- canadian: {
188
- label: 'ABSOLUTELY_YES',
189
- explanation: 'Since we are doing business only in Canada, we assume all users are Canadians.'
190
- }
191
- },
192
- metadata,
193
- status: 'approved'
194
- });
195
- rows = await client.findTableRows({ table: tableName });
196
- expect(rows.rows.length).toBe(3);
197
- const second = await zai.learn(taskId).label(`Sylvain Perron has no criminal record.`, {
198
- is_human: 'is the person a human?',
199
- good_person: 'is the person a good person?',
200
- bad_person: 'is the person a bad person?',
201
- canadian: 'is the person canadian?',
202
- is_french: 'is the person french?'
203
- });
204
- expect(second.is_human).toBe(true);
205
- expect(second.is_french).toBe(true);
206
- expect(second.canadian).toBe(true);
207
- rows = await client.findTableRows({ table: tableName });
208
- expect(rows.rows.length).toBe(3);
209
- check(rows.rows[0].output.value.canadian, 'label is positive (yes) and there is an explanation of why').toBe(true);
210
- check(rows.rows[0].output.value.is_french, 'label is positive (yes) and there is an explanation of why').toBe(true);
211
- });
212
- });
213
- //# sourceMappingURL=label.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label.test.js","sourceRoot":"","sources":["../../../src/operations/label.test.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { z } from '@bpinternal/zui';
2
- export type Options = z.input<typeof Options>;
3
- declare const Options: import("@bpinternal/zui").ZodObject<{
4
- examples: import("@bpinternal/zui").ZodDefault<import("@bpinternal/zui").ZodArray<import("@bpinternal/zui").ZodObject<{
5
- input: import("@bpinternal/zui").ZodString;
6
- output: import("@bpinternal/zui").ZodString;
7
- }, "strip", import("@bpinternal/zui").ZodTypeAny, {
8
- input: string;
9
- output: string;
10
- }, {
11
- input: string;
12
- output: string;
13
- }>, "many">>;
14
- length: import("@bpinternal/zui").ZodOptional<import("@bpinternal/zui").ZodNumber>;
15
- }, "strip", import("@bpinternal/zui").ZodTypeAny, {
16
- examples: {
17
- input: string;
18
- output: string;
19
- }[];
20
- length?: number | undefined;
21
- }, {
22
- length?: number | undefined;
23
- examples?: {
24
- input: string;
25
- output: string;
26
- }[] | undefined;
27
- }>;
28
- declare module '../zai' {
29
- interface Zai {
30
- /** Rewrites a string according to match the prompt */
31
- rewrite(original: string, prompt: string, options?: Options): Promise<string>;
32
- }
33
- }
34
- export {};
@@ -1,106 +0,0 @@
1
- import { z } from '@bpinternal/zui';
2
- import { fastHash, stringify, takeUntilTokens } from '../utils';
3
- import { Zai } from '../zai';
4
- import { PROMPT_INPUT_BUFFER } from './constants';
5
- const Example = z.object({
6
- input: z.string(),
7
- output: z.string()
8
- });
9
- const Options = z.object({
10
- examples: z.array(Example).default([]),
11
- length: z.number().min(10).max(16_000).optional().describe('The maximum number of tokens to generate')
12
- });
13
- const START = '■START■';
14
- const END = '■END■';
15
- Zai.prototype.rewrite = async function (original, prompt, _options) {
16
- const options = Options.parse(_options ?? {});
17
- const tokenizer = await this.getTokenizer();
18
- const taskId = this.taskId;
19
- const taskType = 'zai.rewrite';
20
- const INPUT_COMPONENT_SIZE = Math.max(100, (this.Model.input.maxTokens - PROMPT_INPUT_BUFFER) / 2);
21
- prompt = tokenizer.truncate(prompt, INPUT_COMPONENT_SIZE);
22
- const inputSize = tokenizer.count(original) + tokenizer.count(prompt);
23
- const maxInputSize = this.Model.input.maxTokens - tokenizer.count(prompt) - PROMPT_INPUT_BUFFER;
24
- if (inputSize > maxInputSize) {
25
- throw new Error(`The input size is ${inputSize} tokens long, which is more than the maximum of ${maxInputSize} tokens for this model (${this.Model.name} = ${this.Model.input.maxTokens} tokens)`);
26
- }
27
- const instructions = [];
28
- const originalSize = tokenizer.count(original);
29
- if (options.length && originalSize > options.length) {
30
- instructions.push(`The original text is ${originalSize} tokens long – it should be less than ${options.length}`);
31
- instructions.push(`The text must be standalone and complete in less than ${options.length} tokens, so it has to be shortened to fit the length as well`);
32
- }
33
- const format = (before, prompt) => {
34
- return `
35
- Prompt: ${prompt}
36
-
37
- ${START}
38
- ${before}
39
- ${END}
40
- `.trim();
41
- };
42
- const Key = fastHash(stringify({
43
- taskId,
44
- taskType,
45
- input: original,
46
- prompt
47
- }));
48
- const formatExample = ({ input, output, instructions }) => {
49
- return [
50
- { type: 'text', role: 'user', content: format(input, instructions || prompt) },
51
- { type: 'text', role: 'assistant', content: `${START}${output}${END}` }
52
- ];
53
- };
54
- const defaultExamples = [
55
- { input: 'Hello, how are you?', output: 'Bonjour, comment ça va?', instructions: 'translate to French' },
56
- { input: '1\n2\n3', output: '3\n2\n1', instructions: 'reverse the order' }
57
- ];
58
- const tableExamples = taskId
59
- ? await this.adapter.getExamples({
60
- input: original,
61
- taskId,
62
- taskType
63
- })
64
- : [];
65
- const exactMatch = tableExamples.find((x) => x.key === Key);
66
- if (exactMatch) {
67
- return exactMatch.output;
68
- }
69
- const savedExamples = [
70
- ...tableExamples.map((x) => ({ input: x.input, output: x.output })),
71
- ...options.examples
72
- ];
73
- const REMAINING_TOKENS = this.Model.input.maxTokens - tokenizer.count(prompt) - PROMPT_INPUT_BUFFER;
74
- const examples = takeUntilTokens(savedExamples.length ? savedExamples : defaultExamples, REMAINING_TOKENS, (el) => tokenizer.count(stringify(el.input)) + tokenizer.count(stringify(el.output)))
75
- .map(formatExample)
76
- .flat();
77
- const output = await this.callModel({
78
- systemPrompt: `
79
- Rewrite the text between the ${START} and ${END} tags to match the user prompt.
80
- ${instructions.map((x) => `• ${x}`).join('\n')}
81
- `.trim(),
82
- messages: [...examples, { type: 'text', content: format(original, prompt), role: 'user' }],
83
- maxTokens: options.length,
84
- stopSequences: [END]
85
- });
86
- let result = output.choices[0].content;
87
- if (result.includes(START)) {
88
- result = result.slice(result.indexOf(START) + START.length);
89
- }
90
- if (result.includes(END)) {
91
- result = result.slice(0, result.indexOf(END));
92
- }
93
- if (taskId) {
94
- await this.adapter.saveExample({
95
- key: Key,
96
- metadata: output.metadata,
97
- instructions: prompt,
98
- input: original,
99
- output: result,
100
- taskType,
101
- taskId
102
- });
103
- }
104
- return result;
105
- };
106
- //# sourceMappingURL=rewrite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rewrite.js","sourceRoot":"","sources":["../../../src/operations/rewrite.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};