UNPKG

pulse-ai-utils

Version:

Utility functions and helpers for AI-powered applications

111 lines 4.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRemoteConfigParam = getRemoteConfigParam; exports.getOpenAIModel = getOpenAIModel; exports.getOpenRouterModel = getOpenRouterModel; exports.getGeminiModel = getGeminiModel; exports.getWebOpenRouterModel = getWebOpenRouterModel; exports.getRagLevel = getRagLevel; const firebase_admin_1 = __importDefault(require("firebase-admin")); const fs_1 = __importDefault(require("fs")); const load_service_account_1 = require("./load-service-account"); // Lazy initialization flag let firebaseInitialized = false; // Initialize Firebase only when needed function initializeFirebaseIfNeeded() { if (firebaseInitialized || firebase_admin_1.default.apps.length > 0) { return; } // In test mode, skip Firebase initialization if (process.env.NODE_ENV === 'test') { console.warn('Skipping Firebase initialization in test mode'); firebaseInitialized = true; return; } try { // Reuse robust helper to locate credentials const serviceAccount = (0, load_service_account_1.loadServiceAccount)(); firebase_admin_1.default.initializeApp({ credential: firebase_admin_1.default.credential.cert(serviceAccount), projectId: serviceAccount.project_id, }); firebaseInitialized = true; } catch (error) { console.error('Firebase initialization failed:', error); throw error; } } let lastFetchTime = 0; let cachedTemplate = null; // Fetch remote config if cache is stale async function getRemoteConfigTemplate() { if (Date.now() - lastFetchTime > 30 * 1000 || !cachedTemplate) { try { // Initialize Firebase before using it initializeFirebaseIfNeeded(); const remoteConfig = firebase_admin_1.default.remoteConfig(); cachedTemplate = await remoteConfig.getTemplate(); lastFetchTime = Date.now(); } catch (err) { // If remote fetch fails, read local config if available console.error('Remote fetch failed, using local config:', err); try { const jsonData = fs_1.default.readFileSync('configs/configs.json', 'utf8'); cachedTemplate = JSON.parse(jsonData); } catch (e) { cachedTemplate = { parameters: {} }; } } } return cachedTemplate; } async function getRemoteConfigParam(paramName) { const template = await getRemoteConfigTemplate(); const param = template.parameters?.[paramName]?.defaultValue?.value; return param ?? null; } // Model configuration functions with proper naming convention async function getOpenAIModel() { const remote = await getRemoteConfigParam('pulse-ai-util-openai-model'); return (remote || process.env.OPENAI_MODEL || 'gpt-4o' // OpenAI format ); } async function getOpenRouterModel() { const remote = await getRemoteConfigParam('pulse-ai-util-openrouter-model'); return (remote || process.env.OPENROUTER_MODEL || 'google/gemini-2.0-flash-exp' // OpenRouter format ); } async function getGeminiModel() { const remote = await getRemoteConfigParam('pulse-ai-util-gemini-model'); return (remote || process.env.GEMINI_MODEL || 'google/gemini-2.0-flash-exp' // OpenRouter format ); } // Special model for web fetch scenarios - allows different optimization async function getWebOpenRouterModel() { const remote = await getRemoteConfigParam('pulse-ai-web-openrouter-model'); return (remote || await getOpenRouterModel() // Fallback to regular OpenRouter model ); } // RAG level ceiling configuration async function getRagLevel() { const remote = await getRemoteConfigParam('rag_level'); const validLevels = ['query_cache', 'rag_cache', 'rag_vector', 'rag_hybrid', 'web_search_llm']; if (remote && validLevels.includes(remote)) { return remote; } return 'web_search_llm'; // Default to highest level (no restrictions) } //# sourceMappingURL=firebase-config.js.map