@copilotkit/runtime
Version:
<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />
90 lines (88 loc) • 3.17 kB
JavaScript
require("reflect-metadata");
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
const require_in_memory = require('../../v2/runtime/runner/in-memory.cjs');
const require_telemetry_client = require('../telemetry-client.cjs');
let rxjs = require("rxjs");
let node_crypto = require("node:crypto");
//#region src/lib/runtime/telemetry-agent-runner.ts
/**
* TelemetryAgentRunner - A wrapper around AgentRunner that adds telemetry
* for agent execution streams.
*
* This captures the following telemetry events:
* - oss.runtime.agent_execution_stream_started - when an agent execution starts
* - oss.runtime.agent_execution_stream_ended - when an agent execution completes
* - oss.runtime.agent_execution_stream_errored - when an agent execution fails
*/
/**
* An AgentRunner wrapper that adds telemetry tracking for agent executions.
*
* Usage:
* ```ts
* const runtime = new CopilotRuntime({
* runner: new TelemetryAgentRunner(),
* // or with custom runner:
* runner: new TelemetryAgentRunner({ runner: customRunner }),
* });
* ```
*/
var TelemetryAgentRunner = class {
constructor(config) {
this._runner = config?.runner ?? new require_in_memory.InMemoryAgentRunner();
this.hashedLgcKey = config?.langsmithApiKey ? (0, node_crypto.createHash)("sha256").update(config.langsmithApiKey).digest("hex") : void 0;
}
/**
* Runs an agent with telemetry tracking.
* Wraps the underlying runner's Observable stream with telemetry events.
*/
run(...args) {
const streamInfo = { hashedLgcKey: this.hashedLgcKey };
let streamErrored = false;
require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_started", { hashedLgcKey: this.hashedLgcKey });
return this._runner.run(...args).pipe((0, rxjs.tap)((event) => {
const rawEvent = event.rawEvent;
if (rawEvent?.data) {
const data = rawEvent.data;
if (data?.output?.model) {
streamInfo.model = data.output.model;
streamInfo.provider = data.output.model;
}
}
if (rawEvent?.metadata) {
const metadata = rawEvent.metadata;
if (metadata?.langgraph_host) streamInfo.langGraphHost = metadata.langgraph_host;
if (metadata?.langgraph_version) streamInfo.langGraphVersion = metadata.langgraph_version;
}
}), (0, rxjs.catchError)((error) => {
streamErrored = true;
require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_errored", {
...streamInfo,
error: error instanceof Error ? error.message : String(error)
});
throw error;
}), (0, rxjs.finalize)(() => {
if (!streamErrored) require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_ended", streamInfo);
}));
}
/**
* Delegates to the underlying runner's connect method
*/
connect(...args) {
return this._runner.connect(...args);
}
/**
* Delegates to the underlying runner's isRunning method
*/
isRunning(...args) {
return this._runner.isRunning(...args);
}
/**
* Delegates to the underlying runner's stop method
*/
stop(...args) {
return this._runner.stop(...args);
}
};
//#endregion
exports.TelemetryAgentRunner = TelemetryAgentRunner;
//# sourceMappingURL=telemetry-agent-runner.cjs.map