@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
327 lines (319 loc) • 9.52 kB
JavaScript
;
var chunkD3BJ5NBH_cjs = require('./chunk-D3BJ5NBH.cjs');
var chunkG3JYQ2UI_cjs = require('./chunk-G3JYQ2UI.cjs');
// src/observability/types/core.ts
var SamplingStrategyType = /* @__PURE__ */ ((SamplingStrategyType2) => {
SamplingStrategyType2["ALWAYS"] = "always";
SamplingStrategyType2["NEVER"] = "never";
SamplingStrategyType2["RATIO"] = "ratio";
SamplingStrategyType2["CUSTOM"] = "custom";
return SamplingStrategyType2;
})(SamplingStrategyType || {});
// src/observability/types/metrics.ts
var DEFAULT_BLOCKED_LABELS = [
"trace_id",
"span_id",
"run_id",
"request_id",
"user_id",
"resource_id",
"session_id",
"thread_id"
];
// src/observability/no-op.ts
var noOpCounter = {
add() {
}
};
var noOpGauge = {
set() {
}
};
var noOpHistogram = {
record() {
}
};
var noOpTracingContext = {
currentSpan: void 0
};
var noOpLoggerContext = {
debug() {
},
info() {
},
warn() {
},
error() {
},
fatal() {
}
};
var noOpMetricsContext = {
emit() {
},
counter() {
return noOpCounter;
},
gauge() {
return noOpGauge;
},
histogram() {
return noOpHistogram;
}
};
var NoOpObservability = class {
setMastraContext(_options) {
return;
}
setLogger(_options) {
return;
}
getSelectedInstance(_options) {
return;
}
async getRecordedTrace(_args) {
return null;
}
async addScore(_args) {
return;
}
async addFeedback(_args) {
return;
}
registerInstance(_name, _instance, _isDefault = false) {
return;
}
getInstance(_name) {
return;
}
getDefaultInstance() {
return;
}
listInstances() {
return /* @__PURE__ */ new Map();
}
unregisterInstance(_name) {
return false;
}
hasInstance(_name) {
return false;
}
setConfigSelector(_selector) {
return;
}
clear() {
return;
}
async shutdown() {
return;
}
};
// src/observability/context-factory.ts
function deriveLoggerContext(tracing) {
const span = tracing.currentSpan;
return span?.observabilityInstance?.getLoggerContext?.(span) ?? noOpLoggerContext;
}
function deriveMetricsContext(tracing) {
const span = tracing.currentSpan;
return span?.observabilityInstance?.getMetricsContext?.(span) ?? noOpMetricsContext;
}
function createObservabilityContext(tracingContext) {
const tracing = tracingContext ?? noOpTracingContext;
return {
tracing,
loggerVNext: deriveLoggerContext(tracing),
metrics: deriveMetricsContext(tracing),
tracingContext: tracing
// alias — preferred at forwarding sites
};
}
function resolveObservabilityContext(partial) {
const tracing = partial.tracing ?? partial.tracingContext ?? noOpTracingContext;
return {
tracing,
loggerVNext: partial.loggerVNext ?? deriveLoggerContext(tracing),
metrics: partial.metrics ?? deriveMetricsContext(tracing),
tracingContext: tracing
// alias — preferred at forwarding sites
};
}
// src/observability/context.ts
var AGENT_GETTERS = ["getAgent", "getAgentById"];
var AGENT_METHODS_TO_WRAP = ["generate", "stream", "generateLegacy", "streamLegacy"];
var WORKFLOW_GETTERS = ["getWorkflow", "getWorkflowById"];
var WORKFLOW_METHODS_TO_WRAP = ["execute", "createRun", "createRun"];
function isNoOpSpan(span) {
return span.constructor.name === "NoOpSpan" || span.__isNoOp === true;
}
function isMastra(mastra) {
const hasAgentGetters = AGENT_GETTERS.every((method) => typeof mastra?.[method] === "function");
const hasWorkflowGetters = WORKFLOW_GETTERS.every((method) => typeof mastra?.[method] === "function");
return hasAgentGetters && hasWorkflowGetters;
}
function wrapMastra(mastra, tracingContext) {
if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {
return mastra;
}
if (!isMastra(mastra)) {
return mastra;
}
try {
return new Proxy(mastra, {
get(target, prop) {
try {
if (AGENT_GETTERS.includes(prop)) {
return (...args) => {
const agent = target[prop](...args);
return wrapAgent(agent, tracingContext);
};
}
if (WORKFLOW_GETTERS.includes(prop)) {
return (...args) => {
const workflow = target[prop](...args);
return wrapWorkflow(workflow, tracingContext);
};
}
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
} catch (error) {
console.warn("Tracing: Failed to wrap method, falling back to original", error);
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
}
}
});
} catch (error) {
console.warn("Tracing: Failed to create proxy, using original Mastra instance", error);
return mastra;
}
}
function wrapAgent(agent, tracingContext) {
if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {
return agent;
}
try {
return new Proxy(agent, {
get(target, prop) {
try {
if (AGENT_METHODS_TO_WRAP.includes(prop)) {
return (input, options = {}) => {
return target[prop](input, {
...options,
...createObservabilityContext(tracingContext)
});
};
}
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
} catch (error) {
console.warn("Tracing: Failed to wrap agent method, falling back to original", error);
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
}
}
});
} catch (error) {
console.warn("Tracing: Failed to create agent proxy, using original instance", error);
return agent;
}
}
function wrapWorkflow(workflow, tracingContext) {
if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {
return workflow;
}
try {
return new Proxy(workflow, {
get(target, prop) {
try {
if (WORKFLOW_METHODS_TO_WRAP.includes(prop)) {
if (prop === "createRun" || prop === "createRun") {
return async (options = {}) => {
const run = await target[prop](options);
return run ? wrapRun(run, tracingContext) : run;
};
}
return (input, options = {}) => {
return target[prop](input, {
...options,
...createObservabilityContext(tracingContext)
});
};
}
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
} catch (error) {
console.warn("Tracing: Failed to wrap workflow method, falling back to original", error);
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
}
}
});
} catch (error) {
console.warn("Tracing: Failed to create workflow proxy, using original instance", error);
return workflow;
}
}
function wrapRun(run, tracingContext) {
if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {
return run;
}
try {
return new Proxy(run, {
get(target, prop) {
try {
if (prop === "start") {
return (startOptions = {}) => {
return target.start({
...startOptions,
...createObservabilityContext(startOptions.tracingContext ?? tracingContext)
});
};
}
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
} catch (error) {
console.warn("Tracing: Failed to wrap run method, falling back to original", error);
const value = target[prop];
return typeof value === "function" ? value.bind(target) : value;
}
}
});
} catch (error) {
console.warn("Tracing: Failed to create run proxy, using original instance", error);
return run;
}
}
// src/observability/rag-ingestion.ts
function startRagIngestion(options) {
const span = chunkD3BJ5NBH_cjs.getOrCreateSpan({
...options,
entityType: chunkG3JYQ2UI_cjs.EntityType.RAG_INGESTION,
type: "rag_ingestion" /* RAG_INGESTION */
});
const observabilityContext = createObservabilityContext(span ? { currentSpan: span } : void 0);
return { span, observabilityContext };
}
async function withRagIngestion(options, fn) {
const { span, observabilityContext } = startRagIngestion(options);
try {
const result = await fn(observabilityContext);
span?.end({ output: result });
return result;
} catch (err) {
span?.error({ error: err, endSpan: true });
throw err;
}
}
exports.DEFAULT_BLOCKED_LABELS = DEFAULT_BLOCKED_LABELS;
exports.NoOpObservability = NoOpObservability;
exports.SamplingStrategyType = SamplingStrategyType;
exports.createObservabilityContext = createObservabilityContext;
exports.noOpLoggerContext = noOpLoggerContext;
exports.noOpMetricsContext = noOpMetricsContext;
exports.noOpTracingContext = noOpTracingContext;
exports.resolveObservabilityContext = resolveObservabilityContext;
exports.startRagIngestion = startRagIngestion;
exports.withRagIngestion = withRagIngestion;
exports.wrapMastra = wrapMastra;
//# sourceMappingURL=chunk-2E7FPUYL.cjs.map
//# sourceMappingURL=chunk-2E7FPUYL.cjs.map