UNPKG

@maximai/maxim-js

Version:

Maxim AI JS SDK. Visit https://getmaxim.ai for more info.

177 lines 7.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Generation = void 0; const utils_1 = require("../utils"); const base_1 = require("./base"); const types_1 = require("./types"); class Generation extends base_1.EvaluatableBaseContainer { constructor(config, writer) { const [processedMessages, attachments] = parseAttachmentsFromMessages(config.messages); const processedConfig = { ...config, messages: processedMessages, }; super(types_1.Entity.GENERATION, processedConfig, writer); this.model = config.model; this.provider = config.provider; this.maximPromptId = config.maximPromptId; this.modelParameters = config.modelParameters; for (const attachment of attachments) { this.addAttachment(attachment); } } setModel(model) { this.model = model; this.commit("update", { model }); } static setModel_(writer, id, model) { base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "update", { model }); } addMessages(messages) { const [processedMessages, attachments] = parseAttachmentsFromMessages(messages); this.commit("update", { messages: processedMessages }); for (const attachment of attachments) { this.addAttachment(attachment); } } static addMessages_(writer, id, messages) { const [processedMessages, attachments] = parseAttachmentsFromMessages(messages); base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "update", { messages: processedMessages }); for (const attachment of attachments) { Generation.addAttachment_(writer, id, attachment); } } setModelParameters(modelParameters) { this.commit("update", { modelParameters }); } static setModelParameters_(writer, id, modelParameters) { base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "update", { modelParameters }); } result(result) { this.commit("result", { result }); this.end(); } static result_(writer, id, result) { base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "result", { result }); base_1.EvaluatableBaseContainer.end_(writer, types_1.Entity.GENERATION, id, { endTimestamp: (0, utils_1.utcNow)() }); } error(error) { this.commit("result", { result: { error: error, id: (0, utils_1.uniqueId)() } }); this.end(); } static error_(writer, id, error) { base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "result", { result: { error: error, id: (0, utils_1.uniqueId)() } }); base_1.EvaluatableBaseContainer.end_(writer, types_1.Entity.GENERATION, id, { endTimestamp: (0, utils_1.utcNow)() }); } addAttachment(attachment) { this.commit("upload-attachment", attachment); } static addAttachment_(writer, id, attachment) { base_1.EvaluatableBaseContainer.commit_(writer, types_1.Entity.GENERATION, id, "upload-attachment", attachment); } static end_(writer, id, data) { base_1.EvaluatableBaseContainer.end_(writer, types_1.Entity.GENERATION, id, data); } data() { return { ...super.data(), provider: this.provider, model: this.model, maximPromptId: this.maximPromptId, modelParameters: this.modelParameters, }; } } exports.Generation = Generation; function parseAttachmentsFromMessages(messages) { const attachments = []; const modifiedMessages = []; for (const message of messages) { const content = message.content; const attachedTo = message.role === "assistant" ? "output" : "input"; if (typeof content === "string") { modifiedMessages.push(message); continue; } if (Array.isArray(content)) { const filteredContent = []; for (const item of content) { if (typeof item === "string") { filteredContent.push({ type: "text", text: item }); continue; } if (item.type === "image_url") { const imageUrl = item.image_url.url; if (imageUrl) { if (imageUrl.startsWith("data:image")) { const match = imageUrl.match(/^data:image\/(\w+);base64,(.+)$/); if (match) { const ext = match[1]; const base64Data = match[2]; try { const binaryData = atob(base64Data); const bytes = new Uint8Array(binaryData.length); for (let i = 0; i < binaryData.length; i++) { bytes[i] = binaryData.charCodeAt(i); } const attachment = { type: "fileData", id: (0, utils_1.uniqueId)(), name: `image.${ext}`, data: Buffer.from(bytes), mimeType: `image/${ext}`, tags: { attachedTo: attachedTo }, }; attachments.push(attachment); } catch (error) { console.error("[MaximSDK] Error while parsing base64 attachment:", error); filteredContent.push(item); } } else { filteredContent.push(item); } } else { const attachment = { type: "url", id: (0, utils_1.uniqueId)(), url: imageUrl, mimeType: "image/*", tags: { attachedTo: attachedTo }, }; attachments.push(attachment); } } } else { filteredContent.push(item); } } if (filteredContent.length === 1 && filteredContent[0].type === "text") { modifiedMessages.push({ ...message, content: filteredContent[0].text, }); } else if (filteredContent.length === 0) { modifiedMessages.push({ ...message, content: "", }); } else { modifiedMessages.push({ ...message, content: filteredContent, }); } } else { modifiedMessages.push(message); } } return [modifiedMessages, attachments]; } //# sourceMappingURL=generation.js.map