openlit
Version:
OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications, facilitating the integration of observability into your GenAI-driven projects
85 lines • 3.76 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Openlit = void 0;
const resources_1 = require("@opentelemetry/resources");
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
const sdk_node_1 = require("@opentelemetry/sdk-node");
const tracing_1 = __importDefault(require("./tracing"));
const constant_1 = require("./constant");
const base_1 = __importDefault(require("./features/base"));
const evals_1 = require("./evals");
const prompt_injection_1 = require("./guard/prompt-injection");
const sensitive_topic_1 = require("./guard/sensitive-topic");
const topic_restriction_1 = require("./guard/topic-restriction");
const all_1 = require("./guard/all");
// Factory functions for evals
const evals = {
Hallucination: (options) => new evals_1.Hallucination(options),
Bias: (options) => new evals_1.Bias(options),
Toxicity: (options) => new evals_1.Toxicity(options),
All: (options) => new evals_1.All(options),
};
// Factory functions for guards
const guard = {
PromptInjection: (options) => new prompt_injection_1.PromptInjection(options),
SensitiveTopic: (options) => new sensitive_topic_1.SensitiveTopic(options),
TopicRestriction: (options) => new topic_restriction_1.TopicRestriction(options),
All: (options) => new all_1.All(options),
};
class Openlit extends base_1.default {
static init(options) {
try {
const { environment = constant_1.DEFAULT_ENVIRONMENT, applicationName = constant_1.DEFAULT_APPLICATION_NAME } = options || {};
const otlpEndpoint = options?.otlpEndpoint || process.env.OTEL_EXPORTER_OTLP_ENDPOINT || undefined;
let otlpHeaders = options?.otlpHeaders;
if (!otlpHeaders) {
if (process.env.OTEL_EXPORTER_OTLP_HEADERS) {
otlpHeaders = process.env.OTEL_EXPORTER_OTLP_HEADERS.split(',').reduce((acc, items) => {
const keyVal = items.split('=');
acc[keyVal[0]] = keyVal[1];
return acc;
}, {});
}
else {
otlpHeaders = {};
}
}
this.options = options || {};
this.options.otlpEndpoint = otlpEndpoint;
this.options.otlpHeaders = otlpHeaders;
this.options.disableBatch =
options?.disableBatch === undefined ? true : !!options.disableBatch;
this.resource = new resources_1.Resource({
[semantic_conventions_1.SEMRESATTRS_SERVICE_NAME]: applicationName,
[semantic_conventions_1.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
[semantic_conventions_1.SEMRESATTRS_TELEMETRY_SDK_NAME]: constant_1.SDK_NAME,
});
tracing_1.default.setup({
...this.options,
environment,
applicationName,
otlpEndpoint,
otlpHeaders,
resource: this.resource,
});
this._sdk = new sdk_node_1.NodeSDK({
resource: this.resource,
traceExporter: tracing_1.default.traceExporter,
});
// This was causing the traceProvider initilization with multiple instances.
// this._sdk.start();
}
catch (e) {
console.log('Connection time out', e);
}
}
}
exports.Openlit = Openlit;
Openlit.evals = evals;
Openlit.guard = guard;
const openlit = Openlit;
exports.default = openlit;
//# sourceMappingURL=index.js.map