genkit-cli
Version:
CLI for interacting with the Google Genkit AI framework
75 lines • 3.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DOCS_BUNDLE_FILE_PATH = exports.DOCS_URL = void 0;
exports.maybeDownloadDocsBundle = maybeDownloadDocsBundle;
exports.loadDocs = loadDocs;
exports.searchDocs = searchDocs;
const node_fs_1 = require("node:fs");
const promises_1 = require("node:fs/promises");
const node_stream_1 = require("node:stream");
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const version_1 = require("./version");
exports.DOCS_URL = process.env.GENKIT_DOCS_BUNDLE_URL ??
'http://genkit.dev/docs-bundle-experimental.json';
exports.DOCS_BUNDLE_FILE_PATH = path_1.default.resolve(os_1.default.homedir(), '.genkit', 'docs', version_1.version, 'bundle.json');
async function maybeDownloadDocsBundle() {
if ((0, node_fs_1.existsSync)(exports.DOCS_BUNDLE_FILE_PATH)) {
const stats = (0, node_fs_1.statSync)(exports.DOCS_BUNDLE_FILE_PATH);
const DOCS_TTL = 1000 * 60 * 60 * 24 * 7;
if (Date.now() - stats.mtimeMs < DOCS_TTL) {
return;
}
}
const response = await fetch(exports.DOCS_URL);
if (response.status !== 200) {
throw new Error('Failed to download genkit docs bundle. Try again later or/and report the issue.\n\n' +
exports.DOCS_URL);
}
const stream = node_stream_1.Readable.fromWeb(response.body);
(0, node_fs_1.mkdirSync)(path_1.default.dirname(exports.DOCS_BUNDLE_FILE_PATH), { recursive: true });
await (0, promises_1.writeFile)(exports.DOCS_BUNDLE_FILE_PATH + '.pending', stream);
(0, node_fs_1.renameSync)(exports.DOCS_BUNDLE_FILE_PATH + '.pending', exports.DOCS_BUNDLE_FILE_PATH);
}
async function loadDocs() {
await maybeDownloadDocsBundle();
return JSON.parse((0, node_fs_1.readFileSync)(exports.DOCS_BUNDLE_FILE_PATH, { encoding: 'utf8' }));
}
const STOP_WORDS = new Set(['and', 'the', 'for']);
function filterCommonWords(term) {
return term.length > 2 && !STOP_WORDS.has(term);
}
function searchDocs(documents, query, lang) {
const terms = query.toLowerCase().split(/\s+/).filter(filterCommonWords);
const TITLE_SCORE = 10;
const DESC_SCORE = 5;
const HEADERS_SCORE = 3;
const FILE_PATH_SCORE = 5;
const results = Object.keys(documents)
.filter((file) => file.startsWith(lang))
.map((file) => {
const doc = documents[file];
let score = 0;
const title = doc.title.toLowerCase();
const desc = (doc.description || '').toLowerCase();
const headers = (doc.headers || '').toLowerCase();
terms.forEach((term) => {
if (title.includes(term))
score += TITLE_SCORE;
if (desc.includes(term))
score += DESC_SCORE;
if (headers.includes(term))
score += HEADERS_SCORE;
if (file.includes(term))
score += FILE_PATH_SCORE;
});
return { file, doc, score };
})
.filter((r) => r.score > 0)
.sort((a, b) => b.score - a.score);
return results;
}
//# sourceMappingURL=docs.js.map