node-llama-cpp
Version:
Run AI models locally on your machine with node.js bindings for llama.cpp. Enforce a JSON schema on the model output on the generation level
32 lines • 1.59 kB
JavaScript
import stripAnsi from "strip-ansi";
import sliceAnsi from "slice-ansi";
export function splitAnsiToLines(text, width, maxRoundToWords = Math.min(16, width)) {
if (text == null || text === "")
return [];
const lines = [];
const linesWithoutAnsi = stripAnsi(text).split("\n");
let textIndex = 0;
for (const line of linesWithoutAnsi) {
for (let lineIndex = 0; lineIndex < line.length;) {
let currentWidth = width;
if (maxRoundToWords > 0) {
const currentMaxWidth = Math.min(currentWidth, line.length - lineIndex);
const currentChunkLastChar = line[lineIndex + currentMaxWidth - 1];
const nextChunkFirstChar = line[lineIndex + currentMaxWidth] ?? "";
if (currentChunkLastChar !== " " && nextChunkFirstChar !== "" && nextChunkFirstChar !== " ") {
const lastSpaceIndex = line.lastIndexOf(" ", lineIndex + currentMaxWidth - 1);
if (lastSpaceIndex >= 0) {
const diff = currentMaxWidth - (lastSpaceIndex + " ".length);
if (diff > 0 && diff < maxRoundToWords && diff < currentWidth)
currentWidth -= diff;
}
}
}
lines.push(sliceAnsi(text, textIndex + lineIndex, Math.min(textIndex + lineIndex + currentWidth, textIndex + line.length)));
lineIndex += currentWidth;
}
textIndex += line.length + "\n".length;
}
return lines;
}
//# sourceMappingURL=splitAnsiToLines.js.map