UNPKG

genkit-cli

Version:

CLI for interacting with the Google Genkit AI framework

75 lines 3.27 kB
"use strict"; 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