assistant-cloud
Version:
Cloud integration for assistant-ui
57 lines (56 loc) • 2.19 kB
JavaScript
import { normalizeBaseUrl } from "../baseUrl.js";
import { trace } from "@opentelemetry/api";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
// src/telemetry/index.ts
const DEFAULT_BACKEND_BASE_URL = "https://backend.assistant-api.com";
const AI_SPAN_PREFIXES = [
"gen_ai.",
"ai.",
"llm."
];
function assistantCloudTraceExportOptions({ apiKey, baseUrl = DEFAULT_BACKEND_BASE_URL, headers }) {
if (!apiKey) throw new Error("An Assistant Cloud API key is required");
return {
url: `${normalizeBaseUrl(baseUrl)}/v1/traces`,
headers: {
Authorization: `Bearer ${apiKey}`,
...headers
}
};
}
function createAssistantCloudTraceExporter(options) {
return new OTLPTraceExporter(assistantCloudTraceExportOptions(options));
}
function isAssistantCloudSpan(span) {
return typeof span.attributes["gen_ai.operation.name"] === "string" || AI_SPAN_PREFIXES.some((prefix) => span.name.startsWith(prefix));
}
function createAssistantCloudSpanProcessor(exporter, options = {}) {
const processor = new BatchSpanProcessor(exporter);
const filter = options.filter ?? isAssistantCloudSpan;
return {
onStart: (span, parentContext) => processor.onStart(span, parentContext),
onEnd: (span) => {
if (filter(span)) processor.onEnd(span);
},
forceFlush: () => processor.forceFlush(),
shutdown: () => processor.shutdown()
};
}
function assistantCloudTraceMetadata() {
const spanContext = trace.getActiveSpan()?.spanContext();
return spanContext && trace.isSpanContextValid(spanContext) ? { traceId: spanContext.traceId } : {};
}
function withAssistantCloudTraceMetadata(messageMetadata) {
return (options) => {
const metadata = messageMetadata?.(options);
if (options.part.type !== "start") return metadata;
const trace = assistantCloudTraceMetadata();
return trace.traceId === void 0 ? metadata : {
...metadata,
...trace
};
};
}
export { assistantCloudTraceExportOptions, assistantCloudTraceMetadata, createAssistantCloudSpanProcessor, createAssistantCloudTraceExporter, isAssistantCloudSpan, withAssistantCloudTraceMetadata };
//# sourceMappingURL=index.js.map