pulse-ai-utils
Version:
Utility functions and helpers for AI-powered applications
111 lines • 4.29 kB
JavaScript
;
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