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
JavaScript
;
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