|
- import { config } from 'dotenv';
- import {
- beforeAll,
- beforeEach,
- describe,
- expect,
- it,
- } from 'vitest';
- import {
- createAiClient,
- PlatformEventEmitter,
- OpenAi,
- } from '../src';
-
- describe('ai-utils', () => {
- beforeAll(() => {
- config();
- });
-
- describe('OpenAI', () => {
- let aiClient: PlatformEventEmitter;
-
- beforeEach(() => {
- aiClient = createAiClient({
- platform: OpenAi.PLATFORM_ID,
- platformConfiguration: {
- apiKey: process.env.OPENAI_API_KEY as string,
- organizationId: process.env.OPENAI_ORGANIZATION_ID as string,
- apiVersion: OpenAi.ApiVersion.V1,
- },
- });
- });
-
- describe.skip('createChatCompletion', () => {
- let result: Partial<OpenAi.ChatCompletion> | undefined;
-
- beforeEach(() => {
- result = undefined;
-
- aiClient.on<OpenAi.ChatCompletionChunkDataEvent>('data', (d) => {
- d.choices.forEach((c) => {
- if (!result) {
- result = {
- id: d.id,
- object: OpenAi.ChatCompletionDataEventObjectType.CHAT_COMPLETION,
- created: d.created,
- model: d.model,
- };
- }
-
- if (!Array.isArray(result?.choices)) {
- result.choices = [];
- }
-
- if (!result.choices[c.index]) {
- result.choices[c.index] = {
- message: { content: '' },
- index: c.index,
- finish_reason: c.finish_reason,
- };
- }
-
- if (result.choices[c.index].message) {
- if (c.delta.role) {
- (result.choices[c.index].message as Record<string, unknown>).role = c.delta.role;
- }
-
- if (c.delta.content) {
- (result.choices[c.index].message as Record<string, unknown>)
- .content += c.delta.content;
- }
- }
-
- if (c.finish_reason) {
- result.choices[c.index].finish_reason = c.finish_reason;
- }
- });
- });
- });
-
- it('works', () => new Promise<void>((resolve, reject) => {
- aiClient.on('end', () => {
- expect(result).toHaveProperty('id', expect.any(String));
- expect(result).toHaveProperty('object', OpenAi.ChatCompletionDataEventObjectType.CHAT_COMPLETION);
- expect(result).toHaveProperty('model', expect.any(String));
- expect(result).toHaveProperty('created', expect.any(Number));
- expect(result).toHaveProperty('choices', expect.any(Array));
- resolve();
- });
-
- aiClient.on('error', (error: Error) => {
- reject(error);
- });
-
- aiClient.createChatCompletion({
- messages: 'Count from 1 to 20 in increments of a random number from 1 to 10.',
- model: OpenAi.ChatCompletionModel.GPT_3_5_TURBO,
- n: 2,
- });
- }), { timeout: 10000 });
- });
-
- describe.skip('createImage', () => {
- it('works', () => new Promise<void>((resolve, reject) => {
- aiClient.on<OpenAi.CreateImageDataEvent>('data', (r) => {
- expect(r).toHaveProperty('created', expect.any(Number));
- expect(r).toHaveProperty('data', expect.any(Array));
- expect(r.data.every((d) => d instanceof Buffer)).toBe(true);
- });
-
- aiClient.on('end', () => {
- resolve();
- });
-
- aiClient.on('error', (error: Error) => {
- reject(error);
- });
-
- aiClient.createImage({
- prompt: 'A photo of a cat',
- size: OpenAi.CreateImageSize.SQUARE_256,
- });
- }), { timeout: 10000 });
- });
-
- describe.skip('createCompletion', () => {
- let result: Partial<OpenAi.TextCompletion> | undefined;
-
- beforeEach(() => {
- result = undefined;
-
- aiClient.on<OpenAi.TextCompletionChunkDataEvent>('data', (d) => {
- d.choices.forEach((c) => {
- if (!result) {
- result = {
- id: d.id,
- object: OpenAi.TextCompletionDataEventObjectType.TEXT_COMPLETION,
- created: d.created,
- model: d.model,
- };
- }
-
- if (!Array.isArray(result?.choices)) {
- result.choices = [];
- }
-
- if (!result.choices[c.index]) {
- result.choices[c.index] = {
- text: '',
- index: c.index,
- finish_reason: c.finish_reason,
- logprobs: c.logprobs, // TODO dunno how to use this?
- };
- }
-
- if (c.text) {
- result.choices[c.index].text += c.text;
- }
-
- if (c.finish_reason) {
- result.choices[c.index].finish_reason = c.finish_reason;
- }
- });
- });
- });
-
- it('works', () => new Promise<void>((resolve, reject) => {
- aiClient.on('end', () => {
- expect(result).toHaveProperty('id', expect.any(String));
- expect(result).toHaveProperty('object', OpenAi.TextCompletionDataEventObjectType.TEXT_COMPLETION);
- expect(result).toHaveProperty('model', expect.any(String));
- expect(result).toHaveProperty('created', expect.any(Number));
- expect(result).toHaveProperty('choices', expect.any(Array));
- resolve();
- });
-
- aiClient.on('error', (error: Error) => {
- reject(error);
- });
-
- aiClient.createCompletion({
- prompt: 'Say this is a test',
- model: OpenAi.TextCompletionModel.TEXT_DAVINCI_003,
- maxTokens: 7,
- temperature: 0,
- });
- }), { timeout: 10000 });
- });
-
- describe.skip('createEdit', () => {
- it('works', () => new Promise<void>((resolve, reject) => {
- aiClient.on<OpenAi.CreateEditDataEvent>('data', (r) => {
- expect(r).toHaveProperty('object', OpenAi.EditDataEventObjectType.EDIT);
- expect(r).toHaveProperty('created', expect.any(Number));
- expect(r).toHaveProperty('choices', expect.any(Array));
- });
-
- aiClient.on('end', () => {
- resolve();
- });
-
- aiClient.on('error', (error: Error) => {
- reject(error);
- });
-
- aiClient.createEdit({
- model: OpenAi.EditModel.TEXT_DAVINCI_EDIT_001,
- input: 'What day of the wek is it?',
- instruction: 'Fix the spelling mistakes',
- });
- }), { timeout: 10000 });
- });
- });
- });
|