sambanova
Version:
TypeScript/Javascript client for Sambanova AI API with comprehensive model support
47 lines (46 loc) • 2.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBase64Image = exports.validateMessage = exports.isVisionModel = exports.sleep = void 0;
const types_1 = require("./types");
const fs_1 = __importDefault(require("fs"));
const axios_1 = __importDefault(require("axios"));
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
exports.sleep = sleep;
const isVisionModel = (model) => {
return model.toLowerCase().includes('vision');
};
exports.isVisionModel = isVisionModel;
const validateMessage = (message, isVision) => {
if (Array.isArray(message.content)) {
if (!isVision) {
throw new types_1.SambanovaError('Array content is only supported for vision models', 400, 'INVALID_MESSAGE_FORMAT');
}
}
else if (isVision) {
throw new types_1.SambanovaError('Vision models require array content format', 400, 'INVALID_MESSAGE_FORMAT');
}
};
exports.validateMessage = validateMessage;
const getBase64Image = async (pathOrUrl) => {
try {
if (pathOrUrl.startsWith('http')) {
const response = await axios_1.default.get(pathOrUrl, { responseType: 'arraybuffer' });
const base64Image = Buffer.from(response.data, 'binary').toString('base64');
const mimeType = response.headers['content-type'];
return `data:${mimeType};base64,${base64Image}`;
}
else {
const image = fs_1.default.readFileSync(pathOrUrl);
const base64Image = image.toString('base64');
const mimeType = 'image/jpeg';
return `data:${mimeType};base64,${base64Image}`;
}
}
catch (error) {
throw new Error(`Failed to process image: ${pathOrUrl}. Error: ${error}`);
}
};
exports.getBase64Image = getBase64Image;