UNPKG

@convo-lang/convo-lang

Version:
130 lines 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getConvoDocReaderAsync = exports.convoDocOutputToString = exports.convoDocPageToString = exports.convoDoQueryOutputToMessageContent = exports.isConvoDocRangeMatch = exports.getConvoSelectContentType = exports.isConvoDocSelectPerPage = exports.isConvoDocSelectMatch = exports.convoDocOutputsToDocument = void 0; const common_1 = require("@iyio/common"); const vfs_1 = require("@iyio/vfs"); const convo_lang_doc_deps_1 = require("./convo-lang-doc.deps"); const convo_lib_1 = require("./convo-lib"); const convoDocOutputsToDocument = (outputs) => { let lastPage = 0; for (const o of outputs) { for (const i of o.pageIndexes) { if (i > lastPage) { lastPage = i; } } } const pages = []; while (pages.length < lastPage) { pages.push({ index: pages.length }); } return { outputs, pages, }; }; exports.convoDocOutputsToDocument = convoDocOutputsToDocument; const isConvoDocSelectMatch = (pageIndex, select) => { return (0, exports.isConvoDocRangeMatch)(pageIndex, select.range); }; exports.isConvoDocSelectMatch = isConvoDocSelectMatch; const isConvoDocSelectPerPage = (select) => { return (select.perPage || (Array.isArray(select.range) ? select.range.length == 1 : (select.range && (typeof select.range === 'object')) ? select.range.to - select.range.from <= 0 : true)); }; exports.isConvoDocSelectPerPage = isConvoDocSelectPerPage; const getConvoSelectContentType = (select, fallback = 'text/plain') => { if (!select?.outputContentType) { return fallback; } const l = select.outputContentType.toLowerCase(); if (l === 'md' || l === 'markdown') { return 'text/markdown'; } if (l === 'json') { return 'application/json'; } return l; }; exports.getConvoSelectContentType = getConvoSelectContentType; const isConvoDocRangeMatch = (pageIndex, range) => { if (pageIndex === range || range === 'all') { return true; } if (range === null || range === undefined) { return false; } if (Array.isArray(range)) { for (const r of range) { if ((0, exports.isConvoDocRangeMatch)(pageIndex, r)) { return true; } } return false; } if (typeof range !== 'object') { return false; } return pageIndex >= range.from && pageIndex <= range.to; }; exports.isConvoDocRangeMatch = isConvoDocRangeMatch; const convoDoQueryOutputToMessageContent = (queryResult, options) => { const lines = []; for (const page of queryResult.pages) { lines.push(`\n\nPage ${page.index + 1}:\n`); for (const output of queryResult.outputs) { if (!output.pageIndexes.includes(page.index)) { continue; } lines.push((0, exports.convoDocOutputToString)(output, options)); } } return lines.join('\n'); }; exports.convoDoQueryOutputToMessageContent = convoDoQueryOutputToMessageContent; const convoDocPageToString = (pageIndex, queryResult, options) => { const outputs = queryResult.outputs.filter(p => p.pageIndexes.includes(pageIndex)); return outputs.map(v => (0, exports.convoDocOutputToString)(v, options)).join(''); }; exports.convoDocPageToString = convoDocPageToString; const convoDocOutputToString = (output, { escapeConvo: esc = true, tagPages = true, } = {}) => { const tag = output.contentType === 'text/markdown' ? 'page-content' : 'page-data'; return `${tagPages ? `<${tag}>\n` : ''}${(typeof output.output === 'string') ? (esc !== false ? (0, convo_lib_1.escapeConvo)(output.output) : output.output) : JSON.stringify(output.output)}\n${tagPages ? `</${tag}>` : ''}\n`; }; exports.convoDocOutputToString = convoDocOutputToString; const getConvoDocReaderAsync = async (src, factory, disableDependencyInjection) => { const url = (0, vfs_1.getVfsItemUrl)(src); if (!url) { return undefined; } const contentType = ((typeof src === 'string') ? null : (src.contentType)) ?? (0, common_1.getContentType)(url); if (factory) { const ary = (0, common_1.asArray)(factory); for (const f of ary) { const reader = await f(contentType, url, src); if (reader) { return reader; } } return undefined; } else if (!factory && !disableDependencyInjection) { const reader = await convo_lang_doc_deps_1.convoDocReaderFactory.getFirstAsync(undefined, async (f) => { const reader = await f(contentType, url, src); return reader ?? common_1.continueFunction; }); return reader; } else { return undefined; } }; exports.getConvoDocReaderAsync = getConvoDocReaderAsync; //# sourceMappingURL=convo-lang-doc-lib.js.map