UNPKG

openlit

Version:

OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications, facilitating the integration of observability into your GenAI-driven projects

79 lines 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.customRuleDetection = customRuleDetection; exports.guardMetrics = guardMetrics; exports.guardMetricAttributes = guardMetricAttributes; exports.toGuardResult = toGuardResult; exports.applyThresholdScore = applyThresholdScore; function customRuleDetection(text, customRules = []) { for (const rule of customRules) { let regex; try { regex = new RegExp(rule.pattern, 'i'); } catch (e) { // eslint-disable-next-line no-console console.warn(`Invalid regex pattern in customRuleDetection: "${rule.pattern}". Skipping rule.`, e); continue; } if (regex.test(text)) { return { verdict: rule.verdict || 'yes', guard: rule.guard || 'custom', score: rule.score ?? 0.5, classification: rule.classification, explanation: rule.explanation || 'Matched custom rule pattern.' }; } } return { score: 0, verdict: 'none', guard: 'none', classification: 'none', explanation: 'none' }; } // Metric helpers (OpenTelemetry) const api_1 = require("@opentelemetry/api"); function guardMetrics() { const meter = api_1.metrics.getMeter('openlit.guard', '0.1.0'); const guardRequests = meter.createCounter('openlit.guard.requests', { description: 'Counter for Guard requests', unit: '1' }); return guardRequests; } function guardMetricAttributes(verdict, score, validator, classification, explanation) { return { 'telemetry.sdk.name': 'openlit', 'openlit.guard.verdict': verdict, 'openlit.guard.score': score, 'openlit.guard.validator': validator, 'openlit.guard.classification': classification, 'openlit.guard.explanation': explanation, }; } function toGuardResult(result, guardType) { const r = result; return { score: typeof r.score === 'number' ? r.score : 0, verdict: typeof r.verdict === 'string' ? r.verdict : 'none', guard: typeof r.guard === 'string' ? r.guard : guardType, classification: typeof r.classification === 'string' ? r.classification : 'none', explanation: typeof r.explanation === 'string' ? r.explanation : 'none', }; } function applyThresholdScore(result, threshold) { if (result.score < threshold) { return { score: 0, verdict: 'none', guard: 'none', classification: 'none', explanation: 'none' }; } return result; } //# sourceMappingURL=utils.js.map