@convo-lang/convo-lang
Version:
The language of AI
130 lines • 5.03 kB
JavaScript
;
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