Files
basango/apps/crawler/src/utils.ts
T
2025-10-28 06:42:45 +02:00

39 lines
979 B
TypeScript

import fs from "node:fs";
import type { RedisOptions } from "ioredis";
import { get_encoding } from "tiktoken";
import type { ProjectPaths } from "./schema";
export const ensureDirectories = (paths: ProjectPaths): void => {
for (const dir of [paths.data, paths.logs, paths.configs]) {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
}
};
export const parseRedisUrl = (url: string): RedisOptions => {
if (!url.startsWith("redis://")) {
return {};
}
const parsed = new URL(url);
return {
host: parsed.hostname,
port: Number(parsed.port || 6379),
password: parsed.password || undefined,
db: Number(parsed.pathname?.replace("/", "") || 0),
};
};
export const countTokens = (text: string, encoding = "cl100k_base"): number => {
try {
const encoder = get_encoding(encoding);
const tokens = encoder.encode(text);
encoder.free();
return tokens.length;
} catch {
return text.length;
}
};