venice-dev-tools
Version:
unOfficial SDK for the Venice AI API
160 lines (156 loc) • 5.35 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
VeniceWeb: () => VeniceWeb,
default: () => index_default
});
module.exports = __toCommonJS(index_exports);
// src/venice-web.ts
var import_core = require("@venice-dev-tools/core");
var VeniceWeb = class extends import_core.VeniceAI {
/**
* Create a new Web Venice AI client.
*
* @param config - Configuration options for the client.
*/
constructor(config = {}) {
if (!config.apiKey && typeof localStorage !== "undefined") {
config.apiKey = localStorage.getItem("venice_api_key") || void 0;
}
super(config);
}
/**
* Save the API key to local storage.
*
* @param apiKey - The API key to save.
* @param rememberMe - Whether to remember the API key (store in localStorage).
*/
saveApiKey(apiKey, rememberMe = true) {
this.setApiKey(apiKey);
if (rememberMe && typeof localStorage !== "undefined") {
localStorage.setItem("venice_api_key", apiKey);
} else if (typeof sessionStorage !== "undefined") {
sessionStorage.setItem("venice_api_key", apiKey);
}
}
/**
* Clear the stored API key.
*/
clearApiKey() {
if (typeof localStorage !== "undefined") {
localStorage.removeItem("venice_api_key");
}
if (typeof sessionStorage !== "undefined") {
sessionStorage.removeItem("venice_api_key");
}
}
/**
* Check if an API key is stored.
*
* @returns Whether an API key is stored.
*/
hasStoredApiKey() {
return typeof localStorage !== "undefined" && localStorage.getItem("venice_api_key") !== null || typeof sessionStorage !== "undefined" && sessionStorage.getItem("venice_api_key") !== null;
}
/**
* Generate an image and get it as a blob URL.
*
* @param options - The image generation options.
* @returns The image blob URL and generation response.
*/
async generateImageAsUrl(options) {
const response = await this.images.generate(options);
if (response.data && response.data.url) {
if (response.data.response_format === "url") {
return { url: response.data.url, response };
}
const base64Data = response.data.url;
const blob = this.base64ToBlob(base64Data);
const url = URL.createObjectURL(blob);
return { url, response };
}
throw new Error("No images were generated");
}
/**
* Convert a base64 string to a Blob.
*
* @param base64Data - The base64 image data (can include or exclude data URI prefix).
* @param mimeType - The MIME type of the image.
* @returns The Blob object.
*/
base64ToBlob(base64Data, mimeType = "image/png") {
const base64 = base64Data.includes("base64,") ? base64Data.split("base64,")[1] : base64Data;
const byteString = atob(base64);
const arrayBuffer = new ArrayBuffer(byteString.length);
const uint8Array = new Uint8Array(arrayBuffer);
for (let i = 0; i < byteString.length; i++) {
uint8Array[i] = byteString.charCodeAt(i);
}
return new Blob([uint8Array], { type: mimeType });
}
/**
* Download a generated image.
*
* @param base64Data - The base64 image data.
* @param fileName - The name for the downloaded file.
*/
downloadImage(base64Data, fileName = "venice-image.png") {
const blob = this.base64ToBlob(base64Data);
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = fileName;
link.style.display = "none";
document.body.appendChild(link);
link.click();
setTimeout(() => {
document.body.removeChild(link);
URL.revokeObjectURL(url);
}, 100);
}
/**
* Read a local file as a base64 string.
*
* @param file - The file to read.
* @returns A promise resolving to the base64 string.
*/
async readFileAsBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = () => {
reject(new Error("Failed to read file"));
};
reader.readAsDataURL(file);
});
}
};
// src/index.ts
__reExport(index_exports, require("@venice-dev-tools/core"), module.exports);
var index_default = VeniceWeb;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
VeniceWeb,
...require("@venice-dev-tools/core")
});