85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
import { describe, it, expect, afterAll, beforeEach, afterEach, vi } from 'vitest'
|
|
|
|
import { getClient, getZai } from './utils'
|
|
|
|
import { check } from '@botpress/vai'
|
|
|
|
describe.sequential('zai.learn / generic', { timeout: 60_000 }, () => {
|
|
const client = getClient()
|
|
let tableName = 'ZaiTestInternalTable'
|
|
let taskId = 'test'
|
|
let zai = getZai()
|
|
|
|
beforeEach(async () => {
|
|
zai = getZai().with({
|
|
activeLearning: {
|
|
enable: true,
|
|
taskId,
|
|
tableName,
|
|
},
|
|
})
|
|
})
|
|
|
|
afterEach(async () => {
|
|
try {
|
|
await client.deleteTableRows({ table: tableName, deleteAllRows: true })
|
|
} catch (err) {}
|
|
})
|
|
|
|
afterAll(async () => {
|
|
try {
|
|
await client.deleteTable({ table: tableName })
|
|
} catch (err) {}
|
|
})
|
|
|
|
it('saves examples to tables', async () => {
|
|
const value = await zai
|
|
.learn(taskId)
|
|
.check('This text is very clearly written in English.', 'is an english sentence')
|
|
|
|
const { rows } = await client.findTableRows({ table: tableName })
|
|
|
|
expect(value).toBe(true)
|
|
expect(rows.length).toBe(1)
|
|
|
|
check(rows[0].explanation, 'is an explanation sentence')
|
|
expect(rows[0].explanation).not.toContain('Final Answer:')
|
|
expect(rows[0].output).toMatchObject({ value: true })
|
|
expect(rows[0].input).toMatchInlineSnapshot(`
|
|
{
|
|
"value": "This text is very clearly written in English.",
|
|
}
|
|
`)
|
|
expect(rows[0].taskId).toEqual('zai/test')
|
|
expect(rows[0].taskType).toBe('zai.check')
|
|
})
|
|
|
|
it.skip('works even if tables are down', async () => {
|
|
const upsertTableRows = vi.fn(async () => {
|
|
throw new Error('Table is down')
|
|
})
|
|
|
|
const findTableRows = vi.fn(async () => {
|
|
throw new Error('Table is down')
|
|
})
|
|
|
|
const client = getClient()
|
|
Object.assign(client, {
|
|
upsertTableRows,
|
|
findTableRows,
|
|
})
|
|
|
|
const value = await zai
|
|
.with({ client })
|
|
.learn(taskId)
|
|
.check('This text is very clearly written in English.', 'Text is in English')
|
|
|
|
const { rows } = await getClient().findTableRows({ table: tableName })
|
|
|
|
expect(value).toBe(true)
|
|
expect(rows.length).toBe(0)
|
|
expect(upsertTableRows).toHaveBeenCalledTimes(1)
|
|
expect(findTableRows).toHaveBeenCalledTimes(1)
|
|
})
|
|
})
|