@future-agi/sdk
Version:
We help GenAI teams maintain high-accuracy for their Models in production.
155 lines • 7.1 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const __1 = require("../");
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const uuid_1 = require("uuid");
// Integration tests for the Dataset module
// These tests make real API calls and require a running FutureAGI backend
// and valid API keys set in the environment variables.
const describeIf = (condition) => (condition ? describe : describe.skip);
const areEnvVarsSet = !!(process.env.FI_API_KEY && process.env.FI_SECRET_KEY && process.env.FI_BASE_URL);
describeIf(areEnvVarsSet)('Dataset Integration Tests', () => {
let dataset;
const datasetName = `test-dataset-${(0, uuid_1.v4)()}`;
const datasetConfig = {
name: datasetName,
};
beforeAll(() => {
// Increase timeout for integration tests
jest.setTimeout(30000); // 30 seconds
dataset = new __1.Dataset({
fiApiKey: process.env.FI_API_KEY,
fiSecretKey: process.env.FI_SECRET_KEY,
fiBaseUrl: process.env.FI_BASE_URL,
datasetConfig,
});
});
afterAll(() => __awaiter(void 0, void 0, void 0, function* () {
// Clean up the created dataset
try {
yield dataset.delete();
console.log(`✅ Cleaned up dataset: ${datasetName}`);
}
catch (error) {
console.error(`❌ Failed to clean up dataset: ${datasetName}`, error);
}
}));
test('should create an empty dataset', () => __awaiter(void 0, void 0, void 0, function* () {
yield dataset.create();
const config = dataset.getConfig();
expect(config.id).toBeDefined();
expect(config.name).toBe(datasetName);
}));
test('should add columns to the dataset', () => __awaiter(void 0, void 0, void 0, function* () {
const columns = [
(0, __1.createColumn)({ name: 'question', dataType: __1.DataTypeChoices.TEXT }),
(0, __1.createColumn)({ name: 'answer', dataType: __1.DataTypeChoices.TEXT }),
];
yield dataset.addColumns(columns);
// To verify, we'll try to get the column ID
const columnId = yield dataset.getColumnId('question');
expect(columnId).toBeDefined();
}));
test('should add rows to the dataset', () => __awaiter(void 0, void 0, void 0, function* () {
const questionColId = yield dataset.getColumnId('question');
const answerColId = yield dataset.getColumnId('answer');
if (!questionColId || !answerColId) {
throw new Error('Could not get column IDs for testing');
}
const rows = [
(0, __1.createRow)({
cells: [
(0, __1.createCell)({ columnId: questionColId, rowId: 'row-1', value: 'What is FutureAGI?' }),
(0, __1.createCell)({ columnId: answerColId, rowId: 'row-1', value: 'An AI evaluation platform.' }),
],
}),
];
yield dataset.addRows(rows);
}));
test('should download the dataset to a file', () => __awaiter(void 0, void 0, void 0, function* () {
const filePath = path.join(__dirname, `${datasetName}.csv`);
const resultPath = yield dataset.download(filePath, false);
expect(resultPath).toBe(filePath);
expect(fs.existsSync(filePath)).toBe(true);
// Verify content
const content = fs.readFileSync(filePath, 'utf-8');
expect(content).toContain('question,answer');
expect(content).toContain('What is FutureAGI?,An AI evaluation platform.');
// Clean up the downloaded file
fs.unlinkSync(filePath);
}));
test('should create dataset from a file, download, and delete', () => __awaiter(void 0, void 0, void 0, function* () {
const newDatasetName = `test-from-file-${(0, uuid_1.v4)()}`;
const newDatasetConfig = {
name: newDatasetName,
};
const fileDataset = new __1.Dataset({
fiApiKey: process.env.FI_API_KEY,
fiSecretKey: process.env.FI_SECRET_KEY,
fiBaseUrl: process.env.FI_BASE_URL,
datasetConfig: newDatasetConfig,
});
// Create a dummy CSV file
const tempFilePath = path.join(__dirname, 'temp-upload.csv');
fs.writeFileSync(tempFilePath, 'header1,header2\nvalue1,value2');
try {
// Create dataset from file
yield fileDataset.create(tempFilePath);
const createdConfig = fileDataset.getConfig();
expect(createdConfig.id).toBeDefined();
// Download to verify
const downloadedContent = yield fileDataset.download(undefined, true);
expect(downloadedContent.columns).toHaveLength(2);
expect(downloadedContent.rows).toHaveLength(1);
}
finally {
// Clean up
yield fileDataset.delete();
fs.unlinkSync(tempFilePath);
}
}));
});
//# sourceMappingURL=dataset.integration.test.js.map
;