/**
 * Minified by jsDelivr using Terser v5.48.0.
 * Original file: /npm/braintrust@3.23.1/dist/browser.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(t,e)=>{for(var n in e)__defProp(t,n,{get:e[n],enumerable:!0})},__copyProps=(t,e,n,r)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let o of __getOwnPropNames(e))__hasOwnProp.call(t,o)||o===n||__defProp(t,o,{get:()=>e[o],enumerable:!(r=__getOwnPropDesc(e,o))||r.enumerable});return t},__toESM=(t,e,n)=>(n=null!=t?__create(__getProtoOf(t)):{},__copyProps(!e&&t&&t.__esModule?n:__defProp(n,"default",{value:t,enumerable:!0}),t)),__toCommonJS=t=>__copyProps(__defProp({},"__esModule",{value:!0}),t),browser_exports={};__export(browser_exports,{Attachment:()=>Attachment,AttachmentReference:()=>AttachmentReference,BAGGAGE_HEADER:()=>BAGGAGE_HEADER,BRAINTRUST_CURRENT_SPAN_STORE:()=>BRAINTRUST_CURRENT_SPAN_STORE,BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME:()=>BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME,BRAINTRUST_PARENT_KEY:()=>BRAINTRUST_PARENT_KEY,BaseAttachment:()=>BaseAttachment,BaseExperiment:()=>BaseExperiment,BraintrustLangChainCallbackHandler:()=>BraintrustLangChainCallbackHandler,BraintrustMiddleware:()=>BraintrustMiddleware,BraintrustObservabilityExporter:()=>BraintrustObservabilityExporter,BraintrustState:()=>BraintrustState,BraintrustStream:()=>BraintrustStream,CachedSpanFetcher:()=>CachedSpanFetcher,CodeFunction:()=>CodeFunction,CodePrompt:()=>CodePrompt,ContextManager:()=>ContextManager,DEFAULT_FETCH_BATCH_SIZE:()=>DEFAULT_FETCH_BATCH_SIZE,DEFAULT_MAX_REQUEST_SIZE:()=>DEFAULT_MAX_REQUEST_SIZE,Dataset:()=>Dataset2,DatasetPipeline:()=>DatasetPipeline,ERR_PERMALINK:()=>ERR_PERMALINK,Eval:()=>Eval,EvalResultWithSummary:()=>EvalResultWithSummary,Experiment:()=>Experiment2,ExternalAttachment:()=>ExternalAttachment,FailedHTTPResponse:()=>FailedHTTPResponse,IDGenerator:()=>IDGenerator,JSONAttachment:()=>JSONAttachment,LEGACY_CACHED_HEADER:()=>LEGACY_CACHED_HEADER,LOGS3_OVERFLOW_REFERENCE_TYPE:()=>LOGS3_OVERFLOW_REFERENCE_TYPE,LazyValue:()=>LazyValue,LocalTrace:()=>LocalTrace,Logger:()=>Logger,LoginInvalidOrgError:()=>LoginInvalidOrgError,NOOP_SPAN:()=>NOOP_SPAN,NOOP_SPAN_PERMALINK:()=>NOOP_SPAN_PERMALINK,NoopSpan:()=>NoopSpan,OTELIDGenerator:()=>OTELIDGenerator,ObjectFetcher:()=>ObjectFetcher,Project:()=>Project2,ProjectNameIdMap:()=>ProjectNameIdMap,Prompt:()=>Prompt2,PromptBuilder:()=>PromptBuilder,ReadonlyAttachment:()=>ReadonlyAttachment,ReadonlyExperiment:()=>ReadonlyExperiment,Reporter:()=>Reporter,ScorerBuilder:()=>ScorerBuilder,SpanFetcher:()=>SpanFetcher,SpanImpl:()=>SpanImpl,TRACEPARENT_HEADER:()=>TRACEPARENT_HEADER,TRACESTATE_HEADER:()=>TRACESTATE_HEADER,TestBackgroundLogger:()=>TestBackgroundLogger,ToolBuilder:()=>ToolBuilder,UUIDGenerator:()=>UUIDGenerator,X_CACHED_HEADER:()=>X_CACHED_HEADER,_exportsForTestingOnly:()=>_exportsForTestingOnly,_internalGetGlobalState:()=>_internalGetGlobalState,_internalIso:()=>isomorph_default,_internalSetInitialState:()=>_internalSetInitialState,addAzureBlobHeaders:()=>addAzureBlobHeaders,agentAssertionScorer:()=>agentAssertionScorer,braintrustAISDKTelemetry:()=>braintrustAISDKTelemetry,braintrustEveHook:()=>braintrustEveHook,braintrustEveInstrumentation:()=>braintrustEveInstrumentation,braintrustFlueInstrumentation:()=>braintrustFlueInstrumentation,braintrustFlueObserver:()=>braintrustFlueObserver,braintrustStreamChunkSchema:()=>braintrustStreamChunkSchema,buildLocalSummary:()=>buildLocalSummary,configureInstrumentation:()=>configureInstrumentation,constructLogs3OverflowRequest:()=>constructLogs3OverflowRequest,createFinalValuePassThroughStream:()=>createFinalValuePassThroughStream,currentExperiment:()=>currentExperiment,currentLogger:()=>currentLogger,currentSpan:()=>currentSpan,deepCopyEvent:()=>deepCopyEvent,default:()=>exports_exports,defaultErrorScoreHandler:()=>defaultErrorScoreHandler,deserializePlainStringAsJSON:()=>deserializePlainStringAsJSON,devNullWritableStream:()=>devNullWritableStream,evaluatorDefinitionSchema:()=>evaluatorDefinitionSchema,evaluatorDefinitionsSchema:()=>evaluatorDefinitionsSchema,extractTraceContextFromHeaders:()=>extractTraceContextFromHeaders,flush:()=>flush,getContextManager:()=>getContextManager,getIdGenerator:()=>getIdGenerator,getPromptVersions:()=>getPromptVersions,getSpanParentObject:()=>getSpanParentObject,getTemplateRenderer:()=>getTemplateRenderer,graph:()=>graph_framework_exports,init:()=>init,initDataset:()=>initDataset,initExperiment:()=>initExperiment,initFunction:()=>initFunction,initLogger:()=>initLogger,initNodeTestSuite:()=>initNodeTestSuite,injectTraceContext:()=>injectTraceContext,invoke:()=>invoke,isTemplateFormat:()=>isTemplateFormat,loadParameters:()=>loadParameters,loadPrompt:()=>loadPrompt,log:()=>log,logError:()=>logError,login:()=>login,loginToState:()=>loginToState,logs3OverflowUploadSchema:()=>logs3OverflowUploadSchema,newId:()=>newId,parseCachedHeader:()=>parseCachedHeader,parseTemplateFormat:()=>parseTemplateFormat,permalink:()=>permalink,pickLogs3OverflowObjectIds:()=>pickLogs3OverflowObjectIds,projects:()=>projects,promptContentsSchema:()=>promptContentsSchema,promptDefinitionSchema:()=>promptDefinitionSchema,promptDefinitionToPromptData:()=>promptDefinitionToPromptData,promptDefinitionWithToolsSchema:()=>promptDefinitionWithToolsSchema,registerOtelFlush:()=>registerOtelFlush,registerSandbox:()=>registerSandbox,registerTemplatePlugin:()=>registerTemplatePlugin,renderMessage:()=>renderMessage,renderPromptParams:()=>renderPromptParams,renderTemplateContent:()=>renderTemplateContent,reportFailures:()=>reportFailures,runEvaluator:()=>runEvaluator,setFetch:()=>setFetch,setMaskingFunction:()=>setMaskingFunction,spanComponentsToObjectId:()=>spanComponentsToObjectId,startSpan:()=>startSpan,summarize:()=>summarize,templateRegistry:()=>templateRegistry,toolFunctionDefinitionSchema:()=>ToolFunctionDefinition,traceable:()=>traceable,traced:()=>traced,updateSpan:()=>updateSpan,uploadLogs3OverflowPayload:()=>uploadLogs3OverflowPayload,utf8ByteLength:()=>utf8ByteLength2,withCurrent:()=>withCurrent,withDataset:()=>withDataset,withExperiment:()=>withExperiment,withLogger:()=>withLogger,withParent:()=>withParent,wrapAISDK:()=>wrapAISDK,wrapAISDKModel:()=>wrapAISDKModel,wrapAgentClass:()=>wrapAgentClass,wrapAnthropic:()=>wrapAnthropic,wrapBedrockRuntime:()=>wrapBedrockRuntime,wrapClaudeAgentSDK:()=>wrapClaudeAgentSDK,wrapCohere:()=>wrapCohere,wrapCopilotClient:()=>wrapCopilotClient,wrapCursorSDK:()=>wrapCursorSDK,wrapGenkit:()=>wrapGenkit,wrapGoogleADK:()=>wrapGoogleADK,wrapGoogleGenAI:()=>wrapGoogleGenAI,wrapGroq:()=>wrapGroq,wrapHuggingFace:()=>wrapHuggingFace,wrapLangSmithClient:()=>wrapLangSmithClient,wrapLangSmithRunTrees:()=>wrapLangSmithRunTrees,wrapLangSmithTraceable:()=>wrapLangSmithTraceable,wrapMastraAgent:()=>wrapMastraAgent,wrapMistral:()=>wrapMistral,wrapOpenAI:()=>wrapOpenAI,wrapOpenAICodexSDK:()=>wrapOpenAICodexSDK,wrapOpenAIv4:()=>wrapOpenAIv4,wrapOpenRouter:()=>wrapOpenRouter,wrapOpenRouterAgent:()=>wrapOpenRouterAgent,wrapPiCodingAgentSDK:()=>wrapPiCodingAgentSDK,wrapStrandsAgentSDK:()=>wrapStrandsAgentSDK,wrapTraced:()=>wrapTraced,wrapVitest:()=>wrapVitest}),module.exports=__toCommonJS(browser_exports);var import_dc_browser=require("dc-browser"),DefaultAsyncLocalStorage=class{constructor(){}enterWith(t){}run(t,e){return e()}getStore(){}},DefaultChannel=class{constructor(t){this.name=t}hasSubscribers=!1;subscribe(t){}unsubscribe(t){return!1}bindStore(t,e){}unbindStore(t){return!1}publish(t){}runStores(t,e,n,...r){return e.apply(n,r)}},DefaultTracingChannel=class{start;end;asyncStart;asyncEnd;error;constructor(t){if("string"==typeof t)return this.start=new DefaultChannel(`tracing:${t}:start`),this.end=new DefaultChannel(`tracing:${t}:end`),this.asyncStart=new DefaultChannel(`tracing:${t}:asyncStart`),this.asyncEnd=new DefaultChannel(`tracing:${t}:asyncEnd`),void(this.error=new DefaultChannel(`tracing:${t}:error`));this.start=t.start??new DefaultChannel("tracing:start"),this.end=t.end??new DefaultChannel("tracing:end"),this.asyncStart=t.asyncStart??new DefaultChannel("tracing:asyncStart"),this.asyncEnd=t.asyncEnd??new DefaultChannel("tracing:asyncEnd"),this.error=t.error??new DefaultChannel("tracing:error")}get hasSubscribers(){return this.start.hasSubscribers||this.end.hasSubscribers||this.asyncStart.hasSubscribers||this.asyncEnd.hasSubscribers||this.error.hasSubscribers}subscribe(t){}unsubscribe(t){return!1}traceSync(t,e,n,...r){return t.apply(n,r)}tracePromise(t,e,n,...r){return t.apply(n,r)}traceCallback(t,e,n,r,...o){return t.apply(r,o)}},iso={buildType:"unknown",getRepoInfo:async t=>{},getPastNAncestors:async()=>[],getEnv:t=>{},getBraintrustApiKey:async()=>{},getCallerLocation:()=>{},newAsyncLocalStorage:()=>new DefaultAsyncLocalStorage,newTracingChannel:t=>new DefaultTracingChannel(t),processOn:(t,e)=>{},basename:t=>t.split(/[\\/]/).pop()||t,writeln:t=>console.log(t)},isomorph_default=iso,import_uuid2=require("uuid"),PREFIX="[braintrust]",DEBUG_LOG_LEVEL_SYMBOL=Symbol.for("braintrust-debug-log-level"),LOG_LEVEL_PRIORITY={error:0,warn:1,info:2,debug:3},hasWarnedAboutInvalidEnvValue=!1,debugLogStateResolver=void 0;function warnInvalidEnvValue(t){hasWarnedAboutInvalidEnvValue||(hasWarnedAboutInvalidEnvValue=!0,console.warn(PREFIX,`Invalid BRAINTRUST_DEBUG_LOG_LEVEL value "${t}". Expected "error", "warn", "info", or "debug".`))}function normalizeDebugLogLevelOption(t){if(!1!==t){if("error"===t||"warn"===t||"info"===t||"debug"===t)return t;throw new Error(`Invalid debugLogLevel value "${t}". Expected false, "error", "warn", "info", or "debug".`)}}function parseDebugLogLevelEnv(t){if(t)return"error"===t||"warn"===t||"info"===t||"debug"===t?t:void warnInvalidEnvValue(t)}function getEnvDebugLogLevel(){return parseDebugLogLevelEnv(isomorph_default.getEnv("BRAINTRUST_DEBUG_LOG_LEVEL"))}function setGlobalDebugLogLevel(t){globalThis[DEBUG_LOG_LEVEL_SYMBOL]=t}function resetDebugLoggerForTests(){hasWarnedAboutInvalidEnvValue=!1,setGlobalDebugLogLevel(void 0)}function setDebugLogStateResolver(t){debugLogStateResolver=t}function resolveDebugLogLevel(t){const e=t?.getDebugLogLevel?.();if(t?.hasDebugLogLevelOverride?.()??!1)return e;const n=globalThis[DEBUG_LOG_LEVEL_SYMBOL];return void 0!==n?!1===n?void 0:n:getEnvDebugLogLevel()}function emit(t,e,n){const r=resolveDebugLogLevel(e);!r||LOG_LEVEL_PRIORITY[t]>LOG_LEVEL_PRIORITY[r]||("info"===t?console.log(PREFIX,...n):"debug"===t?console.debug(PREFIX,...n):"warn"===t?console.warn(PREFIX,...n):console.error(PREFIX,...n))}function createDebugLogger(t){const e=()=>t??debugLogStateResolver?.();return{info(...t){emit("info",e(),t)},debug(...t){emit("debug",e(),t)},warn(...t){emit("warn",e(),t)},error(...t){emit("error",e(),t)}}}var debugLogger={...createDebugLogger(),forState:t=>createDebugLogger(t)},DEFAULT_QUEUE_SIZE=15e3,Queue=class{items=[];maxSize;enforceSizeLimit=!1;constructor(t){t<1&&(debugLogger.warn(`maxSize ${t} is <1, using default ${DEFAULT_QUEUE_SIZE}`),t=DEFAULT_QUEUE_SIZE),this.maxSize=t}enforceQueueSizeLimit(t){this.enforceSizeLimit=t}push(...t){const e=[];for(const n of t)this.enforceSizeLimit&&this.items.length>=this.maxSize?e.push(n):this.items.push(n);return e}peek(){return this.items[0]}drain(){const t=[...this.items];return this.items=[],t}clear(){this.items=[]}length(){return this.items.length}get capacity(){return this.maxSize}},import_uuid=require("uuid"),IDGenerator=class{},UUIDGenerator=class extends IDGenerator{getSpanId(){return(0,import_uuid.v4)()}getTraceId(){return(0,import_uuid.v4)()}shareRootSpanId(){return!0}};function generateHexId(t){let e="";for(let n=0;n<t;n++)e+=Math.floor(256*Math.random()).toString(16).padStart(2,"0");return e}var OTELIDGenerator=class extends IDGenerator{getSpanId(){return generateHexId(8)}getTraceId(){return generateHexId(16)}shareRootSpanId(){return!1}};function parseEnvBool(t){const e=isomorph_default.getEnv(t);if(null==e)return!1;const n=e.trim().toLowerCase();return"true"===n||"1"===n||"yes"===n||"y"===n||"on"===n}var _warnedLegacyUuidConflict=!1;function resolveUseLegacyUuidIds(){const t=parseEnvBool("BRAINTRUST_LEGACY_IDS");return parseEnvBool("BRAINTRUST_OTEL_COMPAT")?(t&&!_warnedLegacyUuidConflict&&(_warnedLegacyUuidConflict=!0,debugLogger.warn("BRAINTRUST_LEGACY_IDS is ignored because BRAINTRUST_OTEL_COMPAT requires OpenTelemetry-compatible hex span IDs. Using hex IDs.")),!1):t}function getIdGenerator(){return void 0!==globalThis.BRAINTRUST_ID_GENERATOR?new globalThis.BRAINTRUST_ID_GENERATOR:resolveUseLegacyUuidIds()?new UUIDGenerator:new OTELIDGenerator}var TRACEPARENT_HEADER="traceparent",TRACESTATE_HEADER="tracestate",BAGGAGE_HEADER="baggage",BRAINTRUST_PARENT_KEY="braintrust.parent",DEFAULT_TRACE_FLAGS="01",TRACEPARENT_RE=/^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/,ZERO_TRACE_ID="0".repeat(32),ZERO_SPAN_ID="0".repeat(16),MAX_BAGGAGE_LENGTH=8192,MAX_BAGGAGE_MEMBERS=64,_utf8Encoder=new TextEncoder;function utf8ByteLength(t){return _utf8Encoder.encode(t).length}function capBaggageToMemberBoundary(t){const e=utf8ByteLength(t)<=MAX_BAGGAGE_LENGTH;let n=0;for(let e=0;e<t.length;e++)44===t.charCodeAt(e)&&n++;if(e&&n<MAX_BAGGAGE_MEMBERS)return t;const r=[];let o=0;for(const e of t.split(",")){if(r.length>=MAX_BAGGAGE_MEMBERS)break;const t=utf8ByteLength(e)+(r.length?1:0);if(o+t>MAX_BAGGAGE_LENGTH)break;r.push(e),o+=t}return r.length?r.join(","):""}function isTraceContextHeaderTupleArray(t){return Array.isArray(t)&&t.every(t=>Array.isArray(t)&&"string"==typeof t[0]&&"string"==typeof t[1])}function isListHeader(t){const e=t.toLowerCase();return e===BAGGAGE_HEADER||e===TRACESTATE_HEADER}function headerValueToString(t,e){if(null!=t){if(Array.isArray(t)){const n=t.filter(t=>"string"==typeof t);if(!n.length)return;return isListHeader(e)?n.join(","):n[0]}return"string"==typeof t?t:String(t)}}function getHeader(t,e){if(!t)return;if(isTraceContextHeaderTupleArray(t)){const n=e.toLowerCase(),r=t.filter(([t])=>t.toLowerCase()===n).map(([,t])=>t);if(!r.length)return;return headerValueToString(r,e)}const n=t.get;if("function"==typeof n)try{const r=headerValueToString(n.call(t,e),e);if(void 0!==r)return r}catch{}const r=t.getHeader;if("function"==typeof r)try{const n=headerValueToString(r.call(t,e),e);if(void 0!==n)return n}catch{}const o=t,a=headerValueToString(o[e],e);if(void 0!==a)return a;const i=e.toLowerCase();for(const n of Object.keys(t))if(n!==e&&n.toLowerCase()===i){const t=headerValueToString(o[n],e);if(void 0!==t)return t}}function isHex(t,e){if("string"!=typeof t||t.length!==e)return!1;for(let e=0;e<t.length;e++){const n=t[e];if(!(n>="0"&&n<="9")&&!(n>="a"&&n<="f"))return!1}return!0}function parseTraceparent(t){if(!t||"string"!=typeof t)return;const e=TRACEPARENT_RE.exec(t.trim());if(!e)return;const n=e[1],r=e[2],o=e[3];return n!==ZERO_TRACE_ID&&r!==ZERO_SPAN_ID?{traceId:n,spanId:r,traceFlags:o}:void 0}function formatTraceparent(t,e,n=DEFAULT_TRACE_FLAGS){if(!isHex(t,32)||t===ZERO_TRACE_ID)return;if(!isHex(e,16)||e===ZERO_SPAN_ID)return;return`00-${t}-${e}-${isHex(n,2)?n:DEFAULT_TRACE_FLAGS}`}function percentEncode(t){return encodeURIComponent(t)}function percentDecode(t){if(!t.includes("%"))return t;try{return decodeURIComponent(t)}catch{return t}}function parseBaggage(t){const e={};if(!t||"string"!=typeof t)return e;const n=capBaggageToMemberBoundary(t);for(let t of n.split(",")){if(t=t.trim(),!t||!t.includes("="))continue;t=t.split(";",1)[0];const n=t.indexOf("="),r=percentDecode(t.slice(0,n).trim()),o=t.slice(n+1).trim();r&&(e[r]=percentDecode(o))}return e}function mergeBaggage(t,e){let n;if(e){n=`${percentEncode(BRAINTRUST_PARENT_KEY)}=${percentEncode(String(e))}`,utf8ByteLength(n)>MAX_BAGGAGE_LENGTH&&(n=void 0)}let r=MAX_BAGGAGE_LENGTH,o=MAX_BAGGAGE_MEMBERS;void 0!==n&&(r-=utf8ByteLength(n)+1,o-=1);const a=[];let i=0;if(t&&"string"==typeof t)for(const e of t.split(",")){const t=e.trim();if(!t||!t.includes("="))continue;if(percentDecode(t.split(";",1)[0].split("=",1)[0].trim())===BRAINTRUST_PARENT_KEY)continue;if(a.length>=o)break;const n=utf8ByteLength(t)+(a.length?1:0);if(i+n>r)break;a.push(t),i+=n}const s=void 0!==n?[...a,n]:a;if(s.length)return s.join(",")}var TRANSACTION_ID_FIELD="_xact_id",OBJECT_DELETE_FIELD="_object_delete",IS_MERGE_FIELD="_is_merge",AUDIT_SOURCE_FIELD="_audit_source",AUDIT_METADATA_FIELD="_audit_metadata",VALID_SOURCES=["app","api","external"],OBJECT_ID_KEYS=["experiment_id","dataset_id","prompt_session_id","project_id","log_id","function_data"],uuid3=__toESM(require("uuid")),uuid2=__toESM(require("uuid")),uuid=__toESM(require("uuid")),import_v3=require("zod/v3");function tryMakeUuid(t){try{const e=uuid.parse(t);if(16!==e.length)throw new Error;return{bytes:Buffer.from(e),isUUID:!0}}catch(e){return{bytes:Buffer.from(t,"utf-8"),isUUID:!1}}}var ENCODING_VERSION_NUMBER=1,INVALID_ENCODING_ERRMSG="SpanComponents string is not properly encoded. This may be due to a version mismatch between the SDK library used to export the span and the library used to decode it. Please make sure you are using the same SDK version across the board",SpanObjectTypeV1=(t=>(t[t.EXPERIMENT=1]="EXPERIMENT",t[t.PROJECT_LOGS=2]="PROJECT_LOGS",t))(SpanObjectTypeV1||{}),SpanObjectTypeV1EnumSchema=import_v3.z.nativeEnum(SpanObjectTypeV1),SpanRowIdsV1=class{rowId;spanId;rootSpanId;constructor(t){if(this.rowId=t.rowId,this.spanId=t.spanId,this.rootSpanId=t.rootSpanId,!this.rowId)throw new Error("rowId must be nonempty string");if(!this.spanId)throw new Error("spanId must be nonempty string");if(!this.rootSpanId)throw new Error("rootSpanId must be nonempty string")}toObject(){return{rowId:this.rowId,spanId:this.spanId,rootSpanId:this.rootSpanId}}},SpanComponentsV1=class t{objectType;objectId;rowIds;constructor(t){this.objectType=t.objectType,this.objectId=t.objectId,this.rowIds=t.rowIds}toStr(){const t=[],{bytes:e,isUUID:n}=this.rowIds?tryMakeUuid(this.rowIds.rowId):{bytes:Buffer.from(""),isUUID:!1};t.push(Buffer.from([ENCODING_VERSION_NUMBER,this.objectType,this.rowIds?1:0,n?1:0]));const{bytes:r,isUUID:o}=tryMakeUuid(this.objectId);if(!o)throw new Error("object_id component must be a valid UUID");if(t.push(r),this.rowIds){const{bytes:n,isUUID:r}=tryMakeUuid(this.rowIds.spanId);if(!r)throw new Error("span_id component must be a valid UUID");const{bytes:o,isUUID:a}=tryMakeUuid(this.rowIds.rootSpanId);if(!a)throw new Error("root_span_id component must be a valid UUID");t.push(n,o,e)}return Buffer.concat(t).toString("base64")}static fromStr(e){try{const n=Buffer.from(e,"base64");if(n[0]!==ENCODING_VERSION_NUMBER)throw new Error;const r=SpanObjectTypeV1EnumSchema.parse(n[1]);if(![0,1].includes(n[2]))throw new Error;if(![0,1].includes(n[3]))throw new Error;const o=1==n[2],a=1==n[3],i=uuid.stringify(n.subarray(4,20)),s=(()=>{if(!o)return;const t=uuid.stringify(n.subarray(20,36)),e=uuid.stringify(n.subarray(36,52)),r=a?uuid.stringify(n.subarray(52)):n.subarray(52).toString("utf-8");return new SpanRowIdsV1({rowId:r,spanId:t,rootSpanId:e})})();return new t({objectType:r,objectId:i,rowIds:s})}catch(t){throw new Error(INVALID_ENCODING_ERRMSG)}}objectIdFields(){switch(this.objectType){case 1:return{experiment_id:this.objectId};case 2:return{project_id:this.objectId,log_id:"g"};default:throw new Error("Impossible")}}toObject(){return{objectType:this.objectType,objectId:this.objectId,rowIds:this.rowIds?.toObject()}}},import_v32=require("zod/v3");function tryMakeUuid2(t){try{const e=uuid2.parse(t);if(16!==e.length)throw new Error;return{bytes:Buffer.from(e),isUUID:!0}}catch(e){return{bytes:Buffer.from(t,"utf-8"),isUUID:!1}}}var ENCODING_VERSION_NUMBER2=2,INVALID_ENCODING_ERRMSG2=`SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER2}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`,INTEGER_ENCODING_NUM_BYTES=4,SpanObjectTypeV2=(t=>(t[t.EXPERIMENT=1]="EXPERIMENT",t[t.PROJECT_LOGS=2]="PROJECT_LOGS",t))(SpanObjectTypeV2||{}),SpanObjectTypeV2EnumSchema=import_v32.z.nativeEnum(SpanObjectTypeV2),SpanRowIdsV2=class{rowId;spanId;rootSpanId;constructor(t){if(this.rowId=t.rowId,this.spanId=t.spanId,this.rootSpanId=t.rootSpanId,!this.rowId)throw new Error("rowId must be nonempty string");if(!this.spanId)throw new Error("spanId must be nonempty string");if(!this.rootSpanId)throw new Error("rootSpanId must be nonempty string")}toObject(){return{rowId:this.rowId,spanId:this.spanId,rootSpanId:this.rootSpanId}}},SpanComponentsV2=class t{objectType;objectId;computeObjectMetadataArgs;rowIds;constructor(t){if(this.objectType=t.objectType,this.objectId=t.objectId,this.computeObjectMetadataArgs=t.computeObjectMetadataArgs,this.rowIds=t.rowIds,!this.objectId&&!this.computeObjectMetadataArgs)throw new Error("Must provide either objectId or computeObjectMetadataArgs")}toStr(){const t=[],{bytes:e,isUUID:n}=this.rowIds?tryMakeUuid2(this.rowIds.rowId):{bytes:Buffer.from(""),isUUID:!1};if(t.push(Buffer.from([ENCODING_VERSION_NUMBER2,this.objectType,this.objectId?1:0,this.computeObjectMetadataArgs?1:0,this.rowIds?1:0,n?1:0])),this.objectId){const{bytes:e,isUUID:n}=tryMakeUuid2(this.objectId);if(!n)throw new Error("object_id component must be a valid UUID");t.push(e)}if(this.computeObjectMetadataArgs){const e=Buffer.from(JSON.stringify(this.computeObjectMetadataArgs),"utf-8"),n=Buffer.alloc(INTEGER_ENCODING_NUM_BYTES);n.writeInt32BE(e.length),t.push(n,e)}if(this.rowIds){const{bytes:n,isUUID:r}=tryMakeUuid2(this.rowIds.spanId);if(!r)throw new Error("span_id component must be a valid UUID");const{bytes:o,isUUID:a}=tryMakeUuid2(this.rowIds.rootSpanId);if(!a)throw new Error("root_span_id component must be a valid UUID");t.push(n,o,e)}return Buffer.concat(t).toString("base64")}static fromStr(e){try{const n=Buffer.from(e,"base64");if(n[0]<ENCODING_VERSION_NUMBER2){const n=SpanComponentsV1.fromStr(e);return new t({objectType:SpanObjectTypeV2EnumSchema.parse(n.objectType),objectId:n.objectId,rowIds:n.rowIds?new SpanRowIdsV2({rowId:n.rowIds.rowId,spanId:n.rowIds.spanId,rootSpanId:n.rowIds.rootSpanId}):void 0})}if(n[0]!==ENCODING_VERSION_NUMBER2)throw new Error;const r=SpanObjectTypeV2EnumSchema.parse(n[1]);for(let t=2;t<6;++t)if(![0,1].includes(n[t]))throw new Error;const o=1==n[2],a=1==n[3],i=1==n[4],s=1==n[5];let c,u,p=6;if(o){const t=p+16;c=uuid2.stringify(n.subarray(p,t)),p=t}if(a){let t=p+INTEGER_ENCODING_NUM_BYTES;const e=n.readInt32BE(p);p=t,t=p+e,u=JSON.parse(n.subarray(p,t).toString("utf-8")),p=t}const l=(()=>{if(!i)return;let t=p+16;const e=uuid2.stringify(n.subarray(p,t));p=t,t=p+16;const r=uuid2.stringify(n.subarray(p,t));p=t;const o=s?uuid2.stringify(n.subarray(p)):n.subarray(p).toString("utf-8");return new SpanRowIdsV2({rowId:o,spanId:e,rootSpanId:r})})();return new t({objectType:r,objectId:c,computeObjectMetadataArgs:u,rowIds:l})}catch(t){throw new Error(INVALID_ENCODING_ERRMSG2)}}objectIdFields(){if(!this.objectId)throw new Error("Impossible: cannot invoke `object_id_fields` unless SpanComponentsV2 is initialized with an `object_id`");switch(this.objectType){case 1:return{experiment_id:this.objectId};case 2:return{project_id:this.objectId,log_id:"g"};default:throw new Error("Impossible")}}toObject(){return{objectType:this.objectType,objectId:this.objectId,computeObjectMetadataArgs:this.computeObjectMetadataArgs,rowIds:this.rowIds?.toObject()}}},import_v33=require("zod/v3");function concatUint8Arrays(...t){const e=t.reduce((t,e)=>t+e.length,0),n=new Uint8Array(e);let r=0;for(const e of t)n.set(e,r),r+=e.length;return n}function uint8ArrayToBase64(t){let e="";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return btoa(e)}function base64ToUint8Array(t){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}function uint8ArrayToString(t){return new TextDecoder("utf-8").decode(t)}function stringToUint8Array(t){return(new TextEncoder).encode(t)}function tryMakeUuid3(t){try{const e=uuid3.parse(t);if(16!==e.length)throw new Error;return{bytes:new Uint8Array(e),isUUID:!0}}catch{return{bytes:void 0,isUUID:!1}}}var ENCODING_VERSION_NUMBER3=3,INVALID_ENCODING_ERRMSG3=`SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER3}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`,SpanObjectTypeV3=(t=>(t[t.EXPERIMENT=1]="EXPERIMENT",t[t.PROJECT_LOGS=2]="PROJECT_LOGS",t[t.PLAYGROUND_LOGS=3]="PLAYGROUND_LOGS",t))(SpanObjectTypeV3||{}),spanObjectTypeV3EnumSchema=import_v33.z.nativeEnum(SpanObjectTypeV3);function spanObjectTypeV3ToTypedString(t){switch(t){case 1:return"experiment";case 2:return"project_logs";case 3:return"playground_logs";default:throw new Error(`Unknown SpanObjectTypeV3: ${t}`)}}function spanObjectTypeV3ToString(t){return spanObjectTypeV3ToTypedString(t)}var InternalSpanComponentUUIDFields=(t=>(t[t.OBJECT_ID=1]="OBJECT_ID",t[t.ROW_ID=2]="ROW_ID",t[t.SPAN_ID=3]="SPAN_ID",t[t.ROOT_SPAN_ID=4]="ROOT_SPAN_ID",t))(InternalSpanComponentUUIDFields||{}),internalSpanComponentUUIDFieldsEnumSchema=import_v33.z.nativeEnum(InternalSpanComponentUUIDFields),_INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME={1:"object_id",2:"row_id",3:"span_id",4:"root_span_id"},spanComponentsV3Schema=import_v33.z.object({object_type:spanObjectTypeV3EnumSchema,propagated_event:import_v33.z.record(import_v33.z.unknown()).nullish()}).and(import_v33.z.union([import_v33.z.object({object_id:import_v33.z.string().nullish(),compute_object_metadata_args:import_v33.z.optional(import_v33.z.null())}),import_v33.z.object({object_id:import_v33.z.optional(import_v33.z.null()),compute_object_metadata_args:import_v33.z.record(import_v33.z.unknown())})])).and(import_v33.z.union([import_v33.z.object({row_id:import_v33.z.string(),span_id:import_v33.z.string(),root_span_id:import_v33.z.string()}),import_v33.z.object({row_id:import_v33.z.optional(import_v33.z.null()),span_id:import_v33.z.optional(import_v33.z.null()),root_span_id:import_v33.z.optional(import_v33.z.null())})])),SpanComponentsV3=class t{constructor(t){this.data=t}toStr(){const t={compute_object_metadata_args:this.data.compute_object_metadata_args||void 0,propagated_event:this.data.propagated_event||void 0},e=[];e.push(new Uint8Array([ENCODING_VERSION_NUMBER3,this.data.object_type]));const n=[];function r(e,r){const o=tryMakeUuid3(e);o.isUUID?n.push(concatUint8Arrays(new Uint8Array([r]),o.bytes)):t[_INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME[r]]=e}if(this.data.object_id&&r(this.data.object_id,1),this.data.row_id&&r(this.data.row_id,2),this.data.span_id&&r(this.data.span_id,3),this.data.root_span_id&&r(this.data.root_span_id,4),n.length>255)throw new Error("Impossible: too many UUID entries to encode");return e.push(new Uint8Array([n.length])),e.push(...n),Object.keys(t).length>0&&e.push(stringToUint8Array(JSON.stringify(t))),uint8ArrayToBase64(concatUint8Arrays(...e))}static fromStr(e){try{const n=base64ToUint8Array(e),r={};if(n[0]<ENCODING_VERSION_NUMBER3){const t=SpanComponentsV2.fromStr(e);r.object_type=t.objectType,r.object_id=t.objectId,r.compute_object_metadata_args=t.computeObjectMetadataArgs,t.rowIds&&(r.row_id=t.rowIds.rowId,r.span_id=t.rowIds.spanId,r.root_span_id=t.rowIds.rootSpanId)}else{r.object_type=n[1];const t=n[2];let e=3;for(let o=0;o<t;++o){const t=internalSpanComponentUUIDFieldsEnumSchema.parse(n[e]),o=n.subarray(e+1,e+17);e+=17,r[_INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME[t]]=uuid3.stringify(o)}if(e<n.length){const t=JSON.parse(uint8ArrayToString(n.subarray(e)));Object.assign(r,t)}}return t.fromJsonObj(r)}catch{throw new Error(INVALID_ENCODING_ERRMSG3)}}objectIdFields(){if(!this.data.object_id)throw new Error("Impossible: cannot invoke `objectIdFields` unless SpanComponentsV3 is initialized with an `object_id`");switch(this.data.object_type){case 1:return{experiment_id:this.data.object_id};case 2:return{project_id:this.data.object_id,log_id:"g"};case 3:return{prompt_session_id:this.data.object_id,log_id:"x"};default:throw this.data.object_type,new Error("Impossible")}}async export(){return this.toStr()}static fromJsonObj(e){return new t(spanComponentsV3Schema.parse(e))}};function isObject(t){return t instanceof Object&&!(t instanceof Array)}function isArray(t){return t instanceof Array}function isObjectOrArray(t){return t instanceof Object}function isPromiseLike(t){return null!=t&&("object"==typeof t||"function"==typeof t)&&"then"in t&&"function"==typeof t.then}var SET_UNION_FIELDS=new Set(["tags"]),FORBIDDEN_MERGE_KEYS=new Set(["__proto__","constructor","prototype"]);function mergeDictsWithPaths({mergeInto:t,mergeFrom:e,mergePaths:n}){return mergeDictsWithPathsHelper({mergeInto:t,mergeFrom:e,path:[],mergePaths:new Set(n.map(t=>JSON.stringify(t)))})}function mergeDictsWithPathsHelper({mergeInto:t,mergeFrom:e,path:n,mergePaths:r}){return Object.entries(e).forEach(([e,o])=>{if(FORBIDDEN_MERGE_KEYS.has(e))return;const a=n.concat([e]),i=JSON.stringify(a),s=recordFind(t,e);if(0===n.length&&SET_UNION_FIELDS.has(e)&&!r.has(i)&&isArray(s)&&isArray(o)){const n=new Set,r=[];for(const t of[...s,...o]){const e="object"==typeof t?JSON.stringify(t):String(t);n.has(e)||(n.add(e),r.push(t))}t[e]=r}else isObject(s)&&isObject(o)&&!r.has(i)?mergeDictsWithPathsHelper({mergeInto:s,mergeFrom:o,path:a,mergePaths:r}):void 0!==o&&(t[e]=o)}),t}function mergeDicts(t,e){return mergeDictsWithPaths({mergeInto:t,mergeFrom:e,mergePaths:[]})}function recordFind(t,e){return t[e]}function getObjValueByPath(t,e){let n=t;for(const t of e){if(!isObjectOrArray(n))return null;n=n[t]}return n}function generateMergedRowKey(t){return JSON.stringify(["org_id","project_id","experiment_id","dataset_id","prompt_session_id","log_id","id"].map(e=>t[e]))}var MERGE_ROW_SKIP_FIELDS=["created","span_id","root_span_id","span_parents","_parent_id"];function popMergeRowSkipFields(t){const e={};for(const n of MERGE_ROW_SKIP_FIELDS)n in t&&(e[n]=t[n],delete t[n]);return e}function restoreMergeRowSkipFields(t,e){for(const n of MERGE_ROW_SKIP_FIELDS)delete t[n],n in e&&(t[n]=e[n])}function mergeRowBatch(t){for(const e of t)if(void 0===e.id)throw new Error("Logged row is missing an id. This is an internal braintrust error. Please contact us at info@braintrust.dev for help");const e=new Map;for(const n of t){const t=generateMergedRowKey(n),r=e.get(t);if(void 0!==r&&n[IS_MERGE_FIELD]){const t=popMergeRowSkipFields(r),e=!r[IS_MERGE_FIELD];mergeDicts(r,n),restoreMergeRowSkipFields(r,t),e&&delete r[IS_MERGE_FIELD]}else e.set(t,n)}return[...e.values()]}function batchItems(t){const{items:e}=t,n=t.batchMaxNumItems??Number.POSITIVE_INFINITY,r=t.batchMaxNumBytes??Number.POSITIVE_INFINITY,o=t.getByteSize,a=[];let i=[],s=0;function c(t){i.push(t),s+=o(t)}function u(){a.push(i),i=[],s=0}for(const t of e){const e=o(t);i.length>0&&!(e+s<r&&i.length<n)&&u(),c(t)}return i.length>0&&u(),a}var DEFAULT_IS_LEGACY_DATASET=!1;function ensureDatasetRecord(t,e){return e?ensureLegacyDatasetRecord(t):ensureNewDatasetRecord(t)}function ensureLegacyDatasetRecord(t){if("output"in t)return t;const e={...t,output:t.expected};return delete e.expected,e}function ensureNewDatasetRecord(t){if("expected"in t)return t;const e={...t,tags:null,expected:t.output};return delete e.output,e}function constructJsonArray(t){return`[${t.join(",")}]`}function _urljoin(...t){return t.map((e,n)=>e.replace(/^\//,"").replace(n<t.length-1?/\/$/:"","")).filter(t=>""!==t.trim()).join("/")}function slugify(t,e){if("string"!=typeof t)throw new Error("slugify: string argument expected");const n={$:"dollar","%":"percent","&":"and","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","ÿ":"y"},r=!1!==e?.trim;let o=t.normalize().split("").reduce((t,e)=>{const r=n[e]||e;return t+("-"===r?" ":r).replace(/[^\w\s$*_+~.()'"!\-:@]+/g,"")},"");return e?.strict&&(o=o.replace(/[^A-Za-z0-9\s]/g,"")),r&&(o=o.trim()),o=o.replace(/\s+/g,"-"),e?.lower&&(o=o.toLowerCase()),o}var import_v34=require("zod/v3"),ENCODING_VERSION_NUMBER_V4=4;function tryMakeHexTraceId(t){try{if("string"==typeof t&&32===t.length){const e=new Uint8Array(16);for(let n=0;n<16;n++){const r=t.substr(2*n,2),o=parseInt(r,16);if(isNaN(o))throw new Error;e[n]=o}return{bytes:e,isHex:!0}}}catch{}return{bytes:void 0,isHex:!1}}function tryMakeHexSpanId(t){try{if("string"==typeof t&&16===t.length){const e=new Uint8Array(8);for(let n=0;n<8;n++){const r=t.substr(2*n,2),o=parseInt(r,16);if(isNaN(o))throw new Error;e[n]=o}return{bytes:e,isHex:!0}}}catch{}return{bytes:void 0,isHex:!1}}var INVALID_ENCODING_ERRMSG_V4=`SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER_V4}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`,FIELDS_ID_TO_NAME={1:"object_id",2:"row_id",3:"span_id",4:"root_span_id"},spanComponentsV4Schema=import_v34.z.object({object_type:spanObjectTypeV3EnumSchema,propagated_event:import_v34.z.record(import_v34.z.unknown()).nullish()}).and(import_v34.z.union([import_v34.z.object({object_id:import_v34.z.string().nullish(),compute_object_metadata_args:import_v34.z.optional(import_v34.z.null())}),import_v34.z.object({object_id:import_v34.z.optional(import_v34.z.null()),compute_object_metadata_args:import_v34.z.record(import_v34.z.unknown())})])).and(import_v34.z.union([import_v34.z.object({row_id:import_v34.z.string(),span_id:import_v34.z.string(),root_span_id:import_v34.z.string()}),import_v34.z.object({row_id:import_v34.z.optional(import_v34.z.null()),span_id:import_v34.z.optional(import_v34.z.null()),root_span_id:import_v34.z.optional(import_v34.z.null())})])),SpanComponentsV4=class t{constructor(t){this.data=t}toStr(){const t={compute_object_metadata_args:this.data.compute_object_metadata_args||void 0,propagated_event:this.data.propagated_event||void 0};Object.keys(t).forEach(e=>{void 0===t[e]&&delete t[e]});const e=[];e.push(new Uint8Array([ENCODING_VERSION_NUMBER_V4,this.data.object_type]));const n=[];function r(e,r){let o;o=3===r?tryMakeHexSpanId(e):4===r?tryMakeHexTraceId(e):{bytes:void 0,isHex:!1},o.isHex?n.push(concatUint8Arrays(new Uint8Array([r]),o.bytes)):t[FIELDS_ID_TO_NAME[r]]=e}if(this.data.object_id&&r(this.data.object_id,1),this.data.row_id&&r(this.data.row_id,2),this.data.span_id&&r(this.data.span_id,3),this.data.root_span_id&&r(this.data.root_span_id,4),n.length>255)throw new Error("Impossible: too many hex entries to encode");return e.push(new Uint8Array([n.length])),e.push(...n),Object.keys(t).length>0&&e.push(stringToUint8Array(JSON.stringify(t))),uint8ArrayToBase64(concatUint8Arrays(...e))}static fromStr(e){try{const n=base64ToUint8Array(e),r={};if(n[0]<ENCODING_VERSION_NUMBER_V4){const t=SpanComponentsV3.fromStr(e);r.object_type=t.data.object_type,r.object_id=t.data.object_id,r.compute_object_metadata_args=t.data.compute_object_metadata_args,r.row_id=t.data.row_id,r.span_id=t.data.span_id,r.root_span_id=t.data.root_span_id,r.propagated_event=t.data.propagated_event}else{r.object_type=n[1];const t=n[2];let e=3;for(let o=0;o<t;o++){const t=n[e];if(3===t){const o=n.subarray(e+1,e+9);e+=9,r[FIELDS_ID_TO_NAME[t]]=Array.from(o,t=>t.toString(16).padStart(2,"0")).join("")}else if(4===t){const o=n.subarray(e+1,e+17);e+=17,r[FIELDS_ID_TO_NAME[t]]=Array.from(o,t=>t.toString(16).padStart(2,"0")).join("")}else{const o=n.subarray(e+1,e+17);e+=17,r[FIELDS_ID_TO_NAME[t]]=Array.from(o,t=>t.toString(16).padStart(2,"0")).join("")}}if(e<n.length){const t=JSON.parse(uint8ArrayToString(n.subarray(e)));Object.assign(r,t)}}return t.fromJsonObj(r)}catch{throw new Error(INVALID_ENCODING_ERRMSG_V4)}}objectIdFields(){if(!this.data.object_id)throw new Error("Impossible: cannot invoke `objectIdFields` unless SpanComponentsV4 is initialized with an `object_id`");switch(this.data.object_type){case 1:return{experiment_id:this.data.object_id};case 2:return{project_id:this.data.object_id,log_id:"g"};case 3:return{prompt_session_id:this.data.object_id,log_id:"x"};default:throw this.data.object_type,new Error(`Invalid object_type ${this.data.object_type}`)}}async export(){return this.toStr()}static fromJsonObj(e){return new t(spanComponentsV4Schema.parse(e))}};function makeScorerPropagatedEvent(t){return mergeDicts({...t?SpanComponentsV4.fromStr(t).data.propagated_event??{}:{}},{span_attributes:{purpose:"scorer"}})}function mergeGitMetadataSettings(t,e){if("all"===t.collect)return e;if("all"===e.collect)return t;if("none"===t.collect)return t;if("none"===e.collect)return e;const n=(t.fields??[]).filter(t=>(e.fields??[]).includes(t));return{collect:n.length>0?"some":"none",fields:n}}var TOP_BITS=BigInt("0x0DE1")<<BigInt(48),MOD=BigInt(1)<<BigInt(64),COPRIME=BigInt("205891132094649"),COPRIME_INVERSE=BigInt("1522336535492693385");function modularMultiply(t,e){return t*e%MOD}function prettifyXact(t){return modularMultiply(BigInt(t),COPRIME).toString(16).padStart(16,"0")}function loadPrettyXact(t){if(16!==t.length)return t;const e=modularMultiply(BigInt(`0x${t}`),COPRIME_INVERSE);return(TOP_BITS|e).toString()}var import_v35=require("zod/v3"),GLOBAL_PROJECT="Global";function runCatchFinally(t,e,n){let r=!0;try{const o=t();return o instanceof Promise?(r=!1,o.catch(e).finally(n)):o}catch(t){return e(t)}finally{r&&n()}}function getCurrentUnixTimestamp(){return(new Date).getTime()/1e3}function isEmpty2(t){return null==t}var LazyValue=class{callable;resolvedValue=void 0;value={computedState:"uninitialized"};constructor(t){this.callable=t}get(){return"uninitialized"!==this.value.computedState||(this.value={computedState:"in_progress",val:this.callable().then(t=>(this.value.computedState="succeeded",this.resolvedValue=t,t))}),this.value.val}getSync(){return{resolved:"succeeded"===this.value.computedState,value:this.resolvedValue}}get hasSucceeded(){return"succeeded"===this.value.computedState}},SyncLazyValue=class{callable;value={computedState:"uninitialized"};constructor(t){this.callable=t}get(){if("uninitialized"!==this.value.computedState)return this.value.val;const t=this.callable();return this.value={computedState:"succeeded",val:t},t}get hasSucceeded(){return"succeeded"===this.value.computedState}};function addAzureBlobHeaders(t,e){e.includes("blob.core.windows.net")&&(t["x-ms-blob-type"]="BlockBlob")}var InternalAbortError=class extends Error{constructor(t){super(t),this.name="InternalAbortError"}};function filterFrom(t,e){const n={};for(const r of Object.keys(t))e.includes(r)||(n[r]=t[r]);return n}var import_v36=require("zod/v3"),AclObjectType=import_v36.z.union([import_v36.z.enum(["organization","project","experiment","dataset","prompt","prompt_session","group","role","org_member","project_log","org_project","org_audit_logs"]),import_v36.z.null()]),Permission=import_v36.z.enum(["create","read","update","delete","create_acls","read_acls","update_acls","delete_acls"]),Acl=import_v36.z.object({id:import_v36.z.string().uuid(),object_type:AclObjectType.and(import_v36.z.string()),object_id:import_v36.z.string().uuid(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),group_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),permission:Permission.and(import_v36.z.union([import_v36.z.string(),import_v36.z.null()])).optional(),restrict_object_type:AclObjectType.and(import_v36.z.unknown()).optional(),role_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),_object_org_id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),Agent=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),slug:import_v36.z.string(),kind:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional()}),AISecret=import_v36.z.object({id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),updated_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),secret_updated_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),org_id:import_v36.z.string().uuid(),name:import_v36.z.string(),type:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),secret_updated_by_user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),preview_secret:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),ResponseFormatJsonSchema=import_v36.z.object({name:import_v36.z.string(),description:import_v36.z.string().optional(),schema:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.string()]).optional(),strict:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional()}),ResponseFormatNullish=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("json_object")}),import_v36.z.object({type:import_v36.z.literal("json_schema"),json_schema:ResponseFormatJsonSchema}),import_v36.z.object({type:import_v36.z.literal("text")}),import_v36.z.null()]),AnyModelParams=import_v36.z.object({temperature:import_v36.z.number().optional(),top_p:import_v36.z.number().optional(),max_tokens:import_v36.z.number(),max_completion_tokens:import_v36.z.number().optional(),frequency_penalty:import_v36.z.number().optional(),presence_penalty:import_v36.z.number().optional(),response_format:ResponseFormatNullish.optional(),tool_choice:import_v36.z.union([import_v36.z.literal("auto"),import_v36.z.literal("none"),import_v36.z.literal("required"),import_v36.z.object({type:import_v36.z.literal("function"),function:import_v36.z.object({name:import_v36.z.string()})})]).optional(),function_call:import_v36.z.union([import_v36.z.literal("auto"),import_v36.z.literal("none"),import_v36.z.object({name:import_v36.z.string()})]).optional(),n:import_v36.z.number().optional(),stop:import_v36.z.array(import_v36.z.string()).optional(),reasoning_effort:import_v36.z.enum(["none","minimal","low","medium","high"]).optional(),verbosity:import_v36.z.enum(["low","medium","high"]).optional(),top_k:import_v36.z.number().optional(),stop_sequences:import_v36.z.array(import_v36.z.string()).optional(),reasoning_enabled:import_v36.z.boolean().optional(),reasoning_budget:import_v36.z.number().optional(),max_tokens_to_sample:import_v36.z.number().optional(),maxOutputTokens:import_v36.z.number().optional(),topP:import_v36.z.number().optional(),topK:import_v36.z.number().optional(),use_cache:import_v36.z.boolean().optional()}),ApiKey=import_v36.z.object({id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),preview_name:import_v36.z.string(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_email:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_given_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_family_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),org_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),TriggeredFunctionState=import_v36.z.object({triggered_xact_id:import_v36.z.string(),completed_xact_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),idempotency_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),attempts:import_v36.z.number().int().gte(0).optional().default(0),scope:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("span")}),import_v36.z.object({type:import_v36.z.literal("trace")}),import_v36.z.object({type:import_v36.z.literal("group"),key:import_v36.z.string(),value:import_v36.z.string()})])}),AsyncScoringState=import_v36.z.union([import_v36.z.object({status:import_v36.z.literal("enabled"),token:import_v36.z.string(),function_ids:import_v36.z.array(import_v36.z.unknown()),skip_logging:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),triggered_functions:import_v36.z.union([import_v36.z.record(TriggeredFunctionState),import_v36.z.null()]).optional()}),import_v36.z.object({status:import_v36.z.literal("disabled")}),import_v36.z.null(),import_v36.z.null()]),AsyncScoringControl=import_v36.z.union([import_v36.z.object({kind:import_v36.z.literal("score_update"),token:import_v36.z.string().optional()}),import_v36.z.object({kind:import_v36.z.literal("state_override"),state:AsyncScoringState}),import_v36.z.object({kind:import_v36.z.literal("state_force_reselect")}),import_v36.z.object({kind:import_v36.z.literal("state_enabled_force_rescore")}),import_v36.z.object({kind:import_v36.z.literal("trigger_functions"),triggered_functions:import_v36.z.array(import_v36.z.object({function_id:import_v36.z.unknown().optional(),scope:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("span")}),import_v36.z.object({type:import_v36.z.literal("trace")})]),idempotency_key:import_v36.z.string().optional()})).min(1)}),import_v36.z.object({kind:import_v36.z.literal("complete_triggered_functions"),function_ids:import_v36.z.array(import_v36.z.unknown()).min(1),triggered_xact_id:import_v36.z.string()}),import_v36.z.object({kind:import_v36.z.literal("mark_attempt_failed"),function_ids:import_v36.z.array(import_v36.z.unknown()).min(1)})]),BraintrustAttachmentReference=import_v36.z.object({type:import_v36.z.literal("braintrust_attachment"),filename:import_v36.z.string().min(1),content_type:import_v36.z.string().min(1),key:import_v36.z.string().min(1)}),ExternalAttachmentReference=import_v36.z.object({type:import_v36.z.literal("external_attachment"),filename:import_v36.z.string().min(1),content_type:import_v36.z.string().min(1),url:import_v36.z.string().min(1)}),AttachmentReference=import_v36.z.discriminatedUnion("type",[BraintrustAttachmentReference,ExternalAttachmentReference]),UploadStatus=import_v36.z.enum(["uploading","done","error"]),AttachmentStatus=import_v36.z.object({upload_status:UploadStatus,error_message:import_v36.z.string().optional()}),AutomationStatus=import_v36.z.enum(["active","paused"]),FunctionTypeEnum=import_v36.z.enum(["llm","scorer","task","tool","custom_view","preprocessor","facet","classifier","tag","parameters","sandbox"]),NullableSavedFunctionId=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.null()]),TopicMapGenerationSettings=import_v36.z.object({algorithm:import_v36.z.enum(["hdbscan","kmeans"]),dimension_reduction:import_v36.z.enum(["umap","pca","none"]),sample_size:import_v36.z.number().int().gt(0).optional(),n_clusters:import_v36.z.number().int().gt(0).optional(),min_cluster_size:import_v36.z.number().int().gt(0).optional(),min_samples:import_v36.z.number().int().gt(0).optional(),hierarchy_threshold:import_v36.z.number().int().gt(0).optional(),naming_model:import_v36.z.string().optional()}),TopicMapData=import_v36.z.object({type:import_v36.z.literal("topic_map"),source_facet:import_v36.z.string(),embedding_model:import_v36.z.string(),bundle_key:import_v36.z.string().optional(),report_key:import_v36.z.string().optional(),topic_names:import_v36.z.record(import_v36.z.string()).optional(),generation_settings:TopicMapGenerationSettings.optional(),disable_reconciliation:import_v36.z.boolean().optional(),distance_threshold:import_v36.z.number().optional(),btql_filter:import_v36.z.string().optional(),automation_btql_filter:import_v36.z.string().optional()}),BatchedFacetData=import_v36.z.object({type:import_v36.z.literal("batched_facet"),preprocessor:NullableSavedFunctionId.and(import_v36.z.unknown()).optional(),facets:import_v36.z.array(import_v36.z.object({name:import_v36.z.string(),prompt:import_v36.z.string(),model:import_v36.z.string().optional(),embedding_model:import_v36.z.string().optional(),no_match_pattern:import_v36.z.string().optional()})),topic_maps:import_v36.z.record(import_v36.z.array(import_v36.z.object({function_name:import_v36.z.string(),topic_map_id:import_v36.z.string().optional(),topic_map_data:TopicMapData}))).optional()}),BraintrustModelParams=import_v36.z.object({use_cache:import_v36.z.boolean(),reasoning_enabled:import_v36.z.boolean(),reasoning_budget:import_v36.z.number()}).partial(),CallEvent=import_v36.z.union([import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("text_delta")}),import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("reasoning_delta")}),import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("json_delta")}),import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("progress")}),import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("error")}),import_v36.z.object({id:import_v36.z.string().optional(),data:import_v36.z.string(),event:import_v36.z.literal("console")}),import_v36.z.object({id:import_v36.z.string().optional(),event:import_v36.z.literal("start"),data:import_v36.z.literal("")}),import_v36.z.object({id:import_v36.z.string().optional(),event:import_v36.z.literal("done"),data:import_v36.z.literal("")})]),ChatCompletionContentPartTextWithTitle=import_v36.z.object({text:import_v36.z.string().default(""),type:import_v36.z.literal("text"),cache_control:import_v36.z.object({type:import_v36.z.literal("ephemeral"),ttl:import_v36.z.enum(["5m","1h"]).optional()}).optional()}),ChatCompletionContentPartImageWithTitle=import_v36.z.object({image_url:import_v36.z.object({url:import_v36.z.string(),detail:import_v36.z.union([import_v36.z.literal("auto"),import_v36.z.literal("low"),import_v36.z.literal("high")]).optional()}),type:import_v36.z.literal("image_url"),cache_control:import_v36.z.object({type:import_v36.z.literal("ephemeral"),ttl:import_v36.z.enum(["5m","1h"]).optional()}).optional()}),ChatCompletionContentPartFileFile=import_v36.z.object({file_data:import_v36.z.string(),filename:import_v36.z.string(),file_id:import_v36.z.string()}).partial(),ChatCompletionContentPartFileWithTitle=import_v36.z.object({file:ChatCompletionContentPartFileFile,type:import_v36.z.literal("file"),cache_control:import_v36.z.object({type:import_v36.z.literal("ephemeral"),ttl:import_v36.z.enum(["5m","1h"]).optional()}).optional()}),ChatCompletionContentPart=import_v36.z.union([ChatCompletionContentPartTextWithTitle,ChatCompletionContentPartImageWithTitle,ChatCompletionContentPartFileWithTitle]),ChatCompletionContentPartText=import_v36.z.object({text:import_v36.z.string().default(""),type:import_v36.z.literal("text"),cache_control:import_v36.z.object({type:import_v36.z.literal("ephemeral"),ttl:import_v36.z.enum(["5m","1h"]).optional()}).optional()}),ChatCompletionMessageToolCall=import_v36.z.object({id:import_v36.z.string(),function:import_v36.z.object({arguments:import_v36.z.string(),name:import_v36.z.string()}),type:import_v36.z.literal("function")}),ChatCompletionMessageReasoning=import_v36.z.object({id:import_v36.z.string(),content:import_v36.z.string()}).partial(),ChatCompletionMessageParam=import_v36.z.union([import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("system"),name:import_v36.z.string().optional()}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPart)]),role:import_v36.z.literal("user"),name:import_v36.z.string().optional()}),import_v36.z.object({role:import_v36.z.literal("assistant"),content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText),import_v36.z.null()]).optional(),function_call:import_v36.z.object({arguments:import_v36.z.string(),name:import_v36.z.string()}).optional(),name:import_v36.z.string().optional(),tool_calls:import_v36.z.array(ChatCompletionMessageToolCall).optional(),reasoning:import_v36.z.array(ChatCompletionMessageReasoning).optional(),reasoning_signature:import_v36.z.string().optional()}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("tool"),tool_call_id:import_v36.z.string().default("")}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),name:import_v36.z.string(),role:import_v36.z.literal("function")}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("developer"),name:import_v36.z.string().optional()}),import_v36.z.object({role:import_v36.z.literal("model"),content:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()})]),ChatCompletionOpenAIMessageParam=import_v36.z.union([import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("system"),name:import_v36.z.string().optional()}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPart)]),role:import_v36.z.literal("user"),name:import_v36.z.string().optional()}),import_v36.z.object({role:import_v36.z.literal("assistant"),content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText),import_v36.z.null()]).optional(),function_call:import_v36.z.object({arguments:import_v36.z.string(),name:import_v36.z.string()}).optional(),name:import_v36.z.string().optional(),tool_calls:import_v36.z.array(ChatCompletionMessageToolCall).optional(),reasoning:import_v36.z.array(ChatCompletionMessageReasoning).optional(),reasoning_signature:import_v36.z.string().optional()}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("tool"),tool_call_id:import_v36.z.string().default("")}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),name:import_v36.z.string(),role:import_v36.z.literal("function")}),import_v36.z.object({content:import_v36.z.union([import_v36.z.string(),import_v36.z.array(ChatCompletionContentPartText)]),role:import_v36.z.literal("developer"),name:import_v36.z.string().optional()})]),ChatCompletionTool=import_v36.z.object({function:import_v36.z.object({name:import_v36.z.string(),description:import_v36.z.string().optional(),parameters:import_v36.z.object({}).partial().passthrough().optional()}),type:import_v36.z.literal("function")}),CodeBundle=import_v36.z.object({runtime_context:import_v36.z.object({runtime:import_v36.z.enum(["node","python","browser","quickjs"]),version:import_v36.z.string()}),location:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("experiment"),eval_name:import_v36.z.string(),position:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("task")}),import_v36.z.object({type:import_v36.z.literal("scorer"),index:import_v36.z.number().int().gte(0)}),import_v36.z.object({type:import_v36.z.literal("classifier"),index:import_v36.z.number().int().gte(0)})])}),import_v36.z.object({type:import_v36.z.literal("function"),index:import_v36.z.number().int().gte(0)}),import_v36.z.object({type:import_v36.z.literal("sandbox"),sandbox_spec:import_v36.z.union([import_v36.z.object({provider:import_v36.z.literal("modal"),snapshot_ref:import_v36.z.string()}),import_v36.z.object({provider:import_v36.z.literal("lambda")})]),entrypoints:import_v36.z.array(import_v36.z.string()).optional(),eval_name:import_v36.z.string(),parameters:import_v36.z.object({}).partial().passthrough().optional(),evaluator_definition:import_v36.z.unknown().optional()})]),bundle_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),preview:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),Dataset=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),url_slug:import_v36.z.string()}),ObjectReferenceNullish=import_v36.z.union([import_v36.z.object({object_type:import_v36.z.enum(["project_logs","experiment","dataset","prompt","function","prompt_session"]),object_id:import_v36.z.string().uuid(),id:import_v36.z.string(),_xact_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_v36.z.null()]),SavedFunctionId=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")})]),DatasetEvent=import_v36.z.object({id:import_v36.z.string(),_xact_id:import_v36.z.string(),created:import_v36.z.string().datetime({offset:!0}),_pagination_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),project_id:import_v36.z.string().uuid(),dataset_id:import_v36.z.string().uuid(),input:import_v36.z.unknown().optional(),expected:import_v36.z.unknown().optional(),metadata:import_v36.z.union([import_v36.z.object({model:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),span_id:import_v36.z.string(),root_span_id:import_v36.z.string(),is_root:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),origin:ObjectReferenceNullish.optional(),comments:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),audit_data:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),facets:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(),import_v36.z.null()])),import_v36.z.null()]).optional(),classifications:import_v36.z.union([import_v36.z.record(import_v36.z.array(import_v36.z.object({id:import_v36.z.string(),label:import_v36.z.string().optional(),confidence:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),source:SavedFunctionId.and(import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.null()])).optional()}))),import_v36.z.null()]).optional()}),DatasetSnapshot=import_v36.z.object({id:import_v36.z.string().uuid(),dataset_id:import_v36.z.string().uuid(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),xact_id:import_v36.z.string(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}),EnvVar=import_v36.z.object({id:import_v36.z.string().uuid(),object_type:import_v36.z.enum(["organization","project","function"]),object_id:import_v36.z.string().uuid(),name:import_v36.z.string(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),secret_updated_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),secret_updated_by_user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),used:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),preview_secret:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),secret_type:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),secret_category:import_v36.z.enum(["env_var","ai_provider","sandbox_provider"]).optional().default("env_var")}),RepoInfo=import_v36.z.union([import_v36.z.object({commit:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),branch:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),tag:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),dirty:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),author_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),author_email:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),commit_message:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),commit_time:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),git_diff:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial(),import_v36.z.null()]),Experiment=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),repo_info:RepoInfo.optional(),commit:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),base_exp_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),dataset_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),dataset_version:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),internal_metadata:import_v36.z.union([import_v36.z.object({dataset_filter:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),parameters_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),parameters_version:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),public:import_v36.z.boolean(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()}),SpanType=import_v36.z.union([import_v36.z.enum(["llm","score","function","eval","task","tool","automation","facet","preprocessor","classifier","review"]),import_v36.z.null()]),SpanAttributes=import_v36.z.union([import_v36.z.object({name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),type:SpanType,purpose:import_v36.z.union([import_v36.z.literal("scorer"),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]),ExperimentEvent=import_v36.z.object({id:import_v36.z.string(),_xact_id:import_v36.z.string(),created:import_v36.z.string().datetime({offset:!0}),_pagination_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),project_id:import_v36.z.string().uuid(),experiment_id:import_v36.z.string().uuid(),input:import_v36.z.unknown().optional(),output:import_v36.z.unknown().optional(),expected:import_v36.z.unknown().optional(),error:import_v36.z.unknown().optional(),scores:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.number(),import_v36.z.null()])),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({model:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),metrics:import_v36.z.union([import_v36.z.record(import_v36.z.number()),import_v36.z.null()]).optional(),context:import_v36.z.union([import_v36.z.object({caller_functionname:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),caller_filename:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),caller_lineno:import_v36.z.union([import_v36.z.number(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),span_id:import_v36.z.string(),span_parents:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),root_span_id:import_v36.z.string(),span_attributes:SpanAttributes.optional(),is_root:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),origin:ObjectReferenceNullish.optional(),comments:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),audit_data:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),facets:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(),import_v36.z.null()])),import_v36.z.null()]).optional(),classifications:import_v36.z.union([import_v36.z.record(import_v36.z.array(import_v36.z.object({id:import_v36.z.string(),label:import_v36.z.string().optional(),confidence:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),source:SavedFunctionId.and(import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.null()])).optional()}))),import_v36.z.null()]).optional()}),ExtendedSavedFunctionId=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.object({type:import_v36.z.literal("slug"),project_id:import_v36.z.string(),slug:import_v36.z.string()})]),FacetData=import_v36.z.object({type:import_v36.z.literal("facet"),preprocessor:NullableSavedFunctionId.and(import_v36.z.unknown()).optional(),prompt:import_v36.z.string(),model:import_v36.z.string().optional(),embedding_model:import_v36.z.string().optional(),no_match_pattern:import_v36.z.string().optional()}),PromptBlockDataNullish=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("chat"),messages:import_v36.z.array(ChatCompletionMessageParam),tools:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("completion"),content:import_v36.z.string()}),import_v36.z.null()]),ModelParams=import_v36.z.union([import_v36.z.object({use_cache:import_v36.z.boolean(),reasoning_enabled:import_v36.z.boolean(),reasoning_budget:import_v36.z.number(),temperature:import_v36.z.number(),top_p:import_v36.z.number(),max_tokens:import_v36.z.number(),max_completion_tokens:import_v36.z.number(),frequency_penalty:import_v36.z.number(),presence_penalty:import_v36.z.number(),response_format:ResponseFormatNullish,tool_choice:import_v36.z.union([import_v36.z.literal("auto"),import_v36.z.literal("none"),import_v36.z.literal("required"),import_v36.z.object({type:import_v36.z.literal("function"),function:import_v36.z.object({name:import_v36.z.string()})})]),function_call:import_v36.z.union([import_v36.z.literal("auto"),import_v36.z.literal("none"),import_v36.z.object({name:import_v36.z.string()})]),n:import_v36.z.number(),stop:import_v36.z.array(import_v36.z.string()),reasoning_effort:import_v36.z.enum(["none","minimal","low","medium","high"]),verbosity:import_v36.z.enum(["low","medium","high"])}).partial().passthrough(),import_v36.z.object({use_cache:import_v36.z.boolean().optional(),reasoning_enabled:import_v36.z.boolean().optional(),reasoning_budget:import_v36.z.number().optional(),max_tokens:import_v36.z.number(),temperature:import_v36.z.number(),top_p:import_v36.z.number().optional(),top_k:import_v36.z.number().optional(),stop_sequences:import_v36.z.array(import_v36.z.string()).optional(),max_tokens_to_sample:import_v36.z.number().optional()}).passthrough(),import_v36.z.object({use_cache:import_v36.z.boolean(),reasoning_enabled:import_v36.z.boolean(),reasoning_budget:import_v36.z.number(),temperature:import_v36.z.number(),maxOutputTokens:import_v36.z.number(),topP:import_v36.z.number(),topK:import_v36.z.number()}).partial().passthrough(),import_v36.z.object({use_cache:import_v36.z.boolean(),reasoning_enabled:import_v36.z.boolean(),reasoning_budget:import_v36.z.number(),temperature:import_v36.z.number(),topK:import_v36.z.number()}).partial().passthrough(),import_v36.z.object({use_cache:import_v36.z.boolean(),reasoning_enabled:import_v36.z.boolean(),reasoning_budget:import_v36.z.number()}).partial().passthrough()]),PromptOptionsNullish=import_v36.z.union([import_v36.z.object({model:import_v36.z.string(),params:ModelParams,position:import_v36.z.string()}).partial(),import_v36.z.null()]),PromptParserNullish=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("llm_classifier"),use_cot:import_v36.z.boolean(),choice_scores:import_v36.z.record(import_v36.z.number().gte(0).lte(1)).optional(),choice:import_v36.z.array(import_v36.z.string()).optional(),allow_no_match:import_v36.z.boolean().optional(),allow_skip:import_v36.z.boolean().optional()}),import_v36.z.null()]),PromptDataNullish=import_v36.z.union([import_v36.z.object({prompt:PromptBlockDataNullish,options:PromptOptionsNullish,parser:PromptParserNullish,tool_functions:import_v36.z.union([import_v36.z.array(SavedFunctionId),import_v36.z.null()]),template_format:import_v36.z.union([import_v36.z.enum(["mustache","nunjucks","none"]),import_v36.z.null()]),mcp:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("id"),id:import_v36.z.string().uuid(),is_disabled:import_v36.z.boolean().optional(),enabled_tools:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()}),import_v36.z.object({type:import_v36.z.literal("url"),url:import_v36.z.string(),is_disabled:import_v36.z.boolean().optional(),enabled_tools:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()})])),import_v36.z.null()]),origin:import_v36.z.union([import_v36.z.object({prompt_id:import_v36.z.string(),project_id:import_v36.z.string(),prompt_version:import_v36.z.string()}).partial(),import_v36.z.null()])}).partial(),import_v36.z.null()]),FunctionTypeEnumNullish=import_v36.z.union([import_v36.z.enum(["llm","scorer","task","tool","custom_view","preprocessor","facet","classifier","tag","parameters","sandbox"]),import_v36.z.null()]),FunctionIdRef=import_v36.z.object({}).partial().passthrough(),PromptBlockData=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("chat"),messages:import_v36.z.array(ChatCompletionMessageParam),tools:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("completion"),content:import_v36.z.string()})]),GraphNode=import_v36.z.union([import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("function"),function:FunctionIdRef}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("input")}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("output")}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("literal"),value:import_v36.z.unknown().optional()}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("btql"),expr:import_v36.z.string()}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("gate"),condition:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("aggregator")}),import_v36.z.object({description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.object({x:import_v36.z.number(),y:import_v36.z.number()}),import_v36.z.null()]).optional(),type:import_v36.z.literal("prompt_template"),prompt:PromptBlockData})]),GraphEdge=import_v36.z.object({source:import_v36.z.object({node:import_v36.z.string().max(1024),variable:import_v36.z.string()}),target:import_v36.z.object({node:import_v36.z.string().max(1024),variable:import_v36.z.string()}),purpose:import_v36.z.enum(["control","data","messages"])}),GraphData=import_v36.z.object({type:import_v36.z.literal("graph"),nodes:import_v36.z.record(GraphNode),edges:import_v36.z.record(GraphEdge)}),FunctionData=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("prompt")}),import_v36.z.object({type:import_v36.z.literal("code"),data:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("bundle")}).and(CodeBundle),import_v36.z.object({type:import_v36.z.literal("inline"),runtime_context:import_v36.z.object({runtime:import_v36.z.enum(["node","python","browser","quickjs"]),version:import_v36.z.string()}),code:import_v36.z.string(),code_hash:import_v36.z.string().optional()})])}),GraphData,import_v36.z.object({type:import_v36.z.literal("remote_eval"),endpoint:import_v36.z.string(),eval_name:import_v36.z.string(),parameters:import_v36.z.object({}).partial().passthrough(),parameters_version:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer"),config:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional()}),FacetData,BatchedFacetData,import_v36.z.object({type:import_v36.z.literal("parameters"),data:import_v36.z.object({}).partial().passthrough(),__schema:import_v36.z.object({type:import_v36.z.literal("object"),properties:import_v36.z.record(import_v36.z.object({}).partial().passthrough()),required:import_v36.z.array(import_v36.z.string()).optional(),additionalProperties:import_v36.z.boolean().optional()})}),TopicMapData.and(import_v36.z.unknown())]),Function=import_v36.z.object({id:import_v36.z.string().uuid(),_xact_id:import_v36.z.string(),project_id:import_v36.z.string().uuid(),log_id:import_v36.z.literal("p"),org_id:import_v36.z.string().uuid(),name:import_v36.z.string(),slug:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),prompt_data:PromptDataNullish.optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),function_type:FunctionTypeEnumNullish.optional(),function_data:FunctionData,origin:import_v36.z.union([import_v36.z.object({object_type:AclObjectType.and(import_v36.z.string()),object_id:import_v36.z.string().uuid(),internal:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional()}),import_v36.z.null()]).optional(),function_schema:import_v36.z.union([import_v36.z.object({parameters:import_v36.z.unknown(),returns:import_v36.z.unknown()}).partial(),import_v36.z.null()]).optional()}),FunctionFormat=import_v36.z.enum(["llm","code","global","graph","topic_map"]),PromptData=import_v36.z.object({prompt:PromptBlockDataNullish,options:PromptOptionsNullish,parser:PromptParserNullish,tool_functions:import_v36.z.union([import_v36.z.array(SavedFunctionId),import_v36.z.null()]),template_format:import_v36.z.union([import_v36.z.enum(["mustache","nunjucks","none"]),import_v36.z.null()]),mcp:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("id"),id:import_v36.z.string().uuid(),is_disabled:import_v36.z.boolean().optional(),enabled_tools:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()}),import_v36.z.object({type:import_v36.z.literal("url"),url:import_v36.z.string(),is_disabled:import_v36.z.boolean().optional(),enabled_tools:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()})])),import_v36.z.null()]),origin:import_v36.z.union([import_v36.z.object({prompt_id:import_v36.z.string(),project_id:import_v36.z.string(),prompt_version:import_v36.z.string()}).partial(),import_v36.z.null()])}).partial(),FunctionId=import_v36.z.union([import_v36.z.object({function_id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({project_name:import_v36.z.string(),slug:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({global_function:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.object({prompt_session_id:import_v36.z.string(),prompt_session_function_id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({inline_context:import_v36.z.object({runtime:import_v36.z.enum(["node","python","browser","quickjs"]),version:import_v36.z.string()}),code:import_v36.z.string(),function_type:FunctionTypeEnum.and(import_v36.z.unknown()).optional(),name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_v36.z.object({inline_prompt:PromptData.optional(),inline_function:import_v36.z.object({}).partial().passthrough(),function_type:FunctionTypeEnum.optional().default("scorer"),name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_v36.z.object({inline_prompt:PromptData,function_type:FunctionTypeEnum.optional().default("scorer"),name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()})]),FunctionObjectType=import_v36.z.enum(["prompt","tool","scorer","task","workflow","custom_view","preprocessor","facet","classifier","parameters","sandbox"]),FunctionOutputType=import_v36.z.enum(["completion","score","facet","classification","any"]),GitMetadataSettings=import_v36.z.object({collect:import_v36.z.enum(["all","none","some"]),fields:import_v36.z.array(import_v36.z.enum(["commit","branch","tag","dirty","author_name","author_email","commit_message","commit_time","git_diff"])).optional()}),Group=import_v36.z.object({id:import_v36.z.string().uuid(),org_id:import_v36.z.string().uuid(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),member_users:import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()),import_v36.z.null()]).optional(),member_groups:import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()),import_v36.z.null()]).optional()}),GroupScope=import_v36.z.object({type:import_v36.z.literal("group"),group_by:import_v36.z.string(),interval_seconds:import_v36.z.number().gte(1).optional(),max_traces:import_v36.z.number().int().gte(1).lte(64).optional(),placement:import_v36.z.enum(["first","each"]),idle_seconds:import_v36.z.number().optional()}),IfExists=import_v36.z.enum(["error","ignore","replace"]),ImageRenderingMode=import_v36.z.union([import_v36.z.enum(["auto","click_to_load","blocked"]),import_v36.z.null()]),InvokeParent=import_v36.z.union([import_v36.z.object({object_type:import_v36.z.enum(["project_logs","experiment","playground_logs"]),object_id:import_v36.z.string(),row_ids:import_v36.z.union([import_v36.z.object({id:import_v36.z.string(),span_id:import_v36.z.string(),root_span_id:import_v36.z.string()}),import_v36.z.null()]).optional(),propagated_event:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional()}),import_v36.z.string()]),StreamingMode=import_v36.z.union([import_v36.z.enum(["auto","parallel","json","text"]),import_v36.z.null()]),InvokeFunction=FunctionId.and(import_v36.z.object({input:import_v36.z.unknown(),expected:import_v36.z.unknown(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),messages:import_v36.z.array(ChatCompletionMessageParam),parent:InvokeParent,stream:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),mode:StreamingMode,strict:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),mcp_auth:import_v36.z.record(import_v36.z.object({oauth_token:import_v36.z.string()}).partial()),overrides:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()])}).partial()),MCPServer=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),url:import_v36.z.string()}),MessageRole=import_v36.z.enum(["system","user","assistant","function","tool","model","developer"]),ObjectReference=import_v36.z.object({object_type:import_v36.z.enum(["project_logs","experiment","dataset","prompt","function","prompt_session"]),object_id:import_v36.z.string().uuid(),id:import_v36.z.string(),_xact_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),SpanScope=import_v36.z.object({type:import_v36.z.literal("span")}),TraceScope=import_v36.z.object({type:import_v36.z.literal("trace"),idle_seconds:import_v36.z.number().optional()}),OnlineScoreConfig=import_v36.z.union([import_v36.z.object({sampling_rate:import_v36.z.number().gte(0).lte(1),scorers:import_v36.z.array(SavedFunctionId),btql_filter:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),apply_to_root_span:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),apply_to_span_names:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),skip_logging:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),scope:import_v36.z.union([SpanScope,TraceScope,GroupScope,import_v36.z.null()]).optional()}),import_v36.z.null()]),Organization=import_v36.z.object({id:import_v36.z.string().uuid(),name:import_v36.z.string(),api_url:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),is_universal_api:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),is_dataplane_private:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),proxy_url:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),realtime_url:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),image_rendering_mode:ImageRenderingMode.optional()}),ProjectSettings=import_v36.z.union([import_v36.z.object({comparison_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),baseline_experiment_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),spanFieldOrder:import_v36.z.union([import_v36.z.array(import_v36.z.object({object_type:import_v36.z.string(),column_id:import_v36.z.string(),position:import_v36.z.string(),layout:import_v36.z.union([import_v36.z.literal("full"),import_v36.z.literal("two_column"),import_v36.z.null()]).optional()})),import_v36.z.null()]),remote_eval_sources:import_v36.z.union([import_v36.z.array(import_v36.z.object({url:import_v36.z.string(),name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()})),import_v36.z.null()]),disable_realtime_queries:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),default_preprocessor:NullableSavedFunctionId}).partial(),import_v36.z.null()]),Project=import_v36.z.object({id:import_v36.z.string().uuid(),org_id:import_v36.z.string().uuid(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),settings:ProjectSettings.optional()}),RetentionObjectType=import_v36.z.enum(["project_logs","experiment","dataset"]),TopicAutomationFacetModel=import_v36.z.union([import_v36.z.enum(["brain-facet-latest","brain-facet-1","brain-facet-2"]),import_v36.z.null()]),TopicMapFunctionAutomation=import_v36.z.object({function:SavedFunctionId.and(import_v36.z.unknown()),btql_filter:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),TopicAutomationDataScope=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("project_logs")}),import_v36.z.object({type:import_v36.z.literal("project_experiments")}),import_v36.z.object({type:import_v36.z.literal("experiment"),experiment_id:import_v36.z.string()}),import_v36.z.null()]),TopicAutomationConfig=import_v36.z.object({event_type:import_v36.z.literal("topic"),status:AutomationStatus.optional(),sampling_rate:import_v36.z.number().gte(0).lte(1),facet_model:TopicAutomationFacetModel.optional(),facet_functions:import_v36.z.array(SavedFunctionId),topic_map_functions:import_v36.z.array(TopicMapFunctionAutomation),scope:import_v36.z.union([SpanScope,TraceScope,GroupScope,import_v36.z.null()]).optional(),data_scope:TopicAutomationDataScope.optional(),btql_filter:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),rerun_seconds:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),relabel_overlap_seconds:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),backfill_time_range:import_v36.z.union([import_v36.z.string(),import_v36.z.object({from:import_v36.z.string(),to:import_v36.z.string()}),import_v36.z.null()]).optional()}),TopicDigestAutomationConfig=import_v36.z.object({event_type:import_v36.z.literal("topic_digest"),status:AutomationStatus.optional(),window_seconds:import_v36.z.number().int().gte(3600).lte(2592e3).optional().default(86400),scheduled_time_minutes_utc:import_v36.z.number().int().gte(0).lte(1439),action:import_v36.z.object({type:import_v36.z.literal("slack"),workspace_id:import_v36.z.string(),channel:import_v36.z.string(),message_template:import_v36.z.string().optional()}),topic_map_function_ids:import_v36.z.array(import_v36.z.string()).max(10).optional()}),ProjectAutomation=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),config:import_v36.z.union([import_v36.z.object({event_type:import_v36.z.literal("logs"),btql_filter:import_v36.z.string(),interval_seconds:import_v36.z.number().gte(1).lte(2592e3),action:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("webhook"),url:import_v36.z.string()}),import_v36.z.object({type:import_v36.z.literal("slack"),workspace_id:import_v36.z.string(),channel:import_v36.z.string(),message_template:import_v36.z.string().optional()})])}),import_v36.z.object({event_type:import_v36.z.literal("btql_export"),status:AutomationStatus.optional(),export_definition:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("log_traces")}),import_v36.z.object({type:import_v36.z.literal("log_spans")}),import_v36.z.object({type:import_v36.z.literal("btql_query"),btql_query:import_v36.z.string()})]),scope:import_v36.z.union([SpanScope,TraceScope,GroupScope,import_v36.z.null()]).optional(),export_path:import_v36.z.string(),format:import_v36.z.enum(["jsonl","parquet"]),interval_seconds:import_v36.z.number().gte(1).lte(2592e3),credentials:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("aws_iam"),role_arn:import_v36.z.string(),external_id:import_v36.z.string()}),import_v36.z.object({type:import_v36.z.literal("gcp_service_account"),service_account_email:import_v36.z.string()})]),batch_size:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional()}),import_v36.z.object({event_type:import_v36.z.literal("async_query"),status:AutomationStatus.optional(),created_by_user_id:import_v36.z.string().uuid(),object_type:import_v36.z.enum(["project_logs","experiment","dataset","playground_logs"]),object_id:import_v36.z.string(),query:import_v36.z.string(),format:import_v36.z.literal("jsonl"),batch_size:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional()}),import_v36.z.object({event_type:import_v36.z.literal("retention"),object_type:RetentionObjectType,retention_days:import_v36.z.number().gte(0)}),import_v36.z.object({event_type:import_v36.z.literal("environment_update"),environment_filter:import_v36.z.array(import_v36.z.string()).optional(),action:import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("webhook"),url:import_v36.z.string()}),import_v36.z.object({type:import_v36.z.literal("slack"),workspace_id:import_v36.z.string(),channel:import_v36.z.string(),message_template:import_v36.z.string().optional()})])}),TopicAutomationConfig,TopicDigestAutomationConfig])}),ProjectLogsEvent=import_v36.z.object({id:import_v36.z.string(),_xact_id:import_v36.z.string(),_pagination_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.string().datetime({offset:!0}),org_id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),log_id:import_v36.z.literal("g"),input:import_v36.z.unknown().optional(),output:import_v36.z.unknown().optional(),expected:import_v36.z.unknown().optional(),error:import_v36.z.unknown().optional(),scores:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.number(),import_v36.z.null()])),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({model:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),metrics:import_v36.z.union([import_v36.z.record(import_v36.z.number()),import_v36.z.null()]).optional(),context:import_v36.z.union([import_v36.z.object({caller_functionname:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),caller_filename:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),caller_lineno:import_v36.z.union([import_v36.z.number(),import_v36.z.null()])}).partial().passthrough(),import_v36.z.null()]).optional(),span_id:import_v36.z.string(),span_parents:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),root_span_id:import_v36.z.string(),is_root:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),span_attributes:SpanAttributes.optional(),origin:ObjectReferenceNullish.optional(),comments:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),audit_data:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]).optional(),_async_scoring_state:import_v36.z.unknown().optional(),facets:import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(),import_v36.z.null()])),import_v36.z.null()]).optional(),classifications:import_v36.z.union([import_v36.z.record(import_v36.z.array(import_v36.z.object({id:import_v36.z.string(),label:import_v36.z.string().optional(),confidence:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),source:SavedFunctionId.and(import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("function"),id:import_v36.z.string(),version:import_v36.z.string().optional()}),import_v36.z.object({type:import_v36.z.literal("global"),name:import_v36.z.string(),function_type:FunctionTypeEnum.optional().default("scorer")}),import_v36.z.null()])).optional()}))),import_v36.z.null()]).optional()}),ProjectScoreType=import_v36.z.enum(["slider","categorical","weighted","minimum","maximum","online","free-form"]),ProjectScoreCategory=import_v36.z.object({name:import_v36.z.string(),value:import_v36.z.number()}),ProjectScoreCategories=import_v36.z.union([import_v36.z.array(ProjectScoreCategory),import_v36.z.record(import_v36.z.number()),import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),ProjectScoreCondition=import_v36.z.union([import_v36.z.object({when:import_v36.z.object({clauses:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),subspan_clauses:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),trace_clauses:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()])}).partial(),behavior:import_v36.z.literal("hidden").optional().default("hidden")}),import_v36.z.null()]),ProjectScoreConfig=import_v36.z.union([import_v36.z.object({multi_select:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),destination:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),visibility:import_v36.z.union([import_v36.z.object({users:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),groups:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()])}).partial(),import_v36.z.null()]),online:OnlineScoreConfig,condition:ProjectScoreCondition,object_types:import_v36.z.union([import_v36.z.array(import_v36.z.enum(["project_logs","dataset","experiment"])),import_v36.z.null()])}).partial(),import_v36.z.null()]),ProjectScore=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),score_type:ProjectScoreType,categories:ProjectScoreCategories.optional(),config:ProjectScoreConfig.optional(),position:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),ProjectTag=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),color:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),position:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),Prompt=import_v36.z.object({id:import_v36.z.string().uuid(),_xact_id:import_v36.z.string(),project_id:import_v36.z.string().uuid(),log_id:import_v36.z.literal("p"),org_id:import_v36.z.string().uuid(),name:import_v36.z.string(),slug:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),prompt_data:PromptDataNullish.optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional(),metadata:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional(),function_type:FunctionTypeEnumNullish.optional()}),PromptOptions=import_v36.z.object({model:import_v36.z.string(),params:ModelParams,position:import_v36.z.string()}).partial(),PromptSessionEvent=import_v36.z.object({id:import_v36.z.string(),_xact_id:import_v36.z.string(),created:import_v36.z.string().datetime({offset:!0}),_pagination_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),project_id:import_v36.z.string().uuid(),prompt_session_id:import_v36.z.string().uuid(),prompt_session_data:import_v36.z.unknown().optional(),prompt_data:import_v36.z.unknown().optional(),function_data:import_v36.z.unknown().optional(),function_type:FunctionTypeEnumNullish.optional(),object_data:import_v36.z.unknown().optional(),completion:import_v36.z.unknown().optional(),tags:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]).optional()}),ResponseFormat=import_v36.z.union([import_v36.z.object({type:import_v36.z.literal("json_object")}),import_v36.z.object({type:import_v36.z.literal("json_schema"),json_schema:ResponseFormatJsonSchema}),import_v36.z.object({type:import_v36.z.literal("text")})]),Role=import_v36.z.object({id:import_v36.z.string().uuid(),org_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),member_permissions:import_v36.z.union([import_v36.z.array(import_v36.z.object({permission:Permission,restrict_object_type:AclObjectType.optional()})),import_v36.z.null()]).optional(),member_roles:import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()),import_v36.z.null()]).optional()}),RunEval=import_v36.z.object({project_id:import_v36.z.string(),data:import_v36.z.union([import_v36.z.object({dataset_id:import_v36.z.string(),dataset_version:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),dataset_environment:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),_internal_btql:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional()}),import_v36.z.object({project_name:import_v36.z.string(),dataset_name:import_v36.z.string(),dataset_version:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),dataset_environment:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),_internal_btql:import_v36.z.union([import_v36.z.object({}).partial().passthrough(),import_v36.z.null()]).optional()}),import_v36.z.object({data:import_v36.z.array(import_v36.z.unknown())})]),name:import_v36.z.string().optional(),parameters:import_v36.z.object({}).partial().passthrough().optional(),task:FunctionId.and(import_v36.z.unknown()),scores:import_v36.z.array(FunctionId),experiment_name:import_v36.z.string().optional(),metadata:import_v36.z.object({}).partial().passthrough().optional(),parent:InvokeParent.and(import_v36.z.unknown()).optional(),stream:import_v36.z.boolean().optional(),trial_count:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),is_public:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),timeout:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional(),max_concurrency:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]).optional().default(10),base_experiment_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),base_experiment_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),git_metadata_settings:GitMetadataSettings.and(import_v36.z.union([import_v36.z.object({}).partial(),import_v36.z.null()])).optional(),repo_info:RepoInfo.and(import_v36.z.unknown()).optional(),strict:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional(),stop_token:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),extra_messages:import_v36.z.string().optional(),tags:import_v36.z.array(import_v36.z.string()).optional(),mcp_auth:import_v36.z.record(import_v36.z.object({oauth_token:import_v36.z.string()}).partial()).optional()}),ServiceToken=import_v36.z.object({id:import_v36.z.string().uuid(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),preview_name:import_v36.z.string(),service_account_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),service_account_email:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),service_account_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),org_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),SpanIFrame=import_v36.z.object({id:import_v36.z.string().uuid(),project_id:import_v36.z.string().uuid(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),name:import_v36.z.string(),description:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),url:import_v36.z.string(),post_message:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional()}),SSEConsoleEventData=import_v36.z.object({stream:import_v36.z.enum(["stderr","stdout"]),message:import_v36.z.string()}),SSEProgressEventData=import_v36.z.object({id:import_v36.z.string(),object_type:FunctionObjectType,origin:ObjectReferenceNullish.and(import_v36.z.unknown()).optional(),format:FunctionFormat,output_type:FunctionOutputType,name:import_v36.z.string(),event:import_v36.z.enum(["reasoning_delta","text_delta","json_delta","error","console","start","done","progress"]),data:import_v36.z.string()}),ToolFunctionDefinition=import_v36.z.object({type:import_v36.z.literal("function"),function:import_v36.z.object({name:import_v36.z.string(),description:import_v36.z.string().optional(),parameters:import_v36.z.object({}).partial().passthrough().optional(),strict:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional()})}),User=import_v36.z.object({id:import_v36.z.string().uuid(),given_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),family_name:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),email:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),avatar_url:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),ViewDataSearch=import_v36.z.union([import_v36.z.object({filter:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]),tag:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]),match:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()]),sort:import_v36.z.union([import_v36.z.array(import_v36.z.unknown()),import_v36.z.null()])}).partial(),import_v36.z.null()]),ViewData=import_v36.z.union([import_v36.z.object({search:ViewDataSearch,custom_charts:import_v36.z.unknown()}).partial(),import_v36.z.null()]),ViewOptions=import_v36.z.union([import_v36.z.object({viewType:import_v36.z.literal("monitor"),options:import_v36.z.object({spanType:import_v36.z.union([import_v36.z.enum(["range","frame"]),import_v36.z.null()]),rangeValue:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),frameStart:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),frameEnd:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),tzUTC:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),chartVisibility:import_v36.z.union([import_v36.z.record(import_v36.z.boolean()),import_v36.z.null()]),projectId:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),type:import_v36.z.union([import_v36.z.enum(["project","experiment"]),import_v36.z.null()]),groupBy:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial(),freezeColumns:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]).optional()}),import_v36.z.object({columnVisibility:import_v36.z.union([import_v36.z.record(import_v36.z.boolean()),import_v36.z.null()]),columnOrder:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),columnSizing:import_v36.z.union([import_v36.z.record(import_v36.z.number()),import_v36.z.null()]),grouping:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),rowHeight:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),tallGroupRows:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()]),layout:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),topicMapReportKey:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),chartHeight:import_v36.z.union([import_v36.z.number(),import_v36.z.null()]),excludedMeasures:import_v36.z.union([import_v36.z.array(import_v36.z.object({type:import_v36.z.enum(["none","score","metric","metadata"]),value:import_v36.z.string()})),import_v36.z.null()]),yMetric:import_v36.z.union([import_v36.z.object({type:import_v36.z.enum(["none","score","metric","metadata"]),value:import_v36.z.string()}),import_v36.z.null()]),xAxis:import_v36.z.union([import_v36.z.object({type:import_v36.z.enum(["none","score","metric","metadata"]),value:import_v36.z.string()}),import_v36.z.null()]),symbolGrouping:import_v36.z.union([import_v36.z.object({type:import_v36.z.enum(["none","score","metric","metadata"]),value:import_v36.z.string()}),import_v36.z.null()]),xAxisAggregation:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),chartAnnotations:import_v36.z.union([import_v36.z.array(import_v36.z.object({id:import_v36.z.string(),text:import_v36.z.string()})),import_v36.z.null()]),timeRangeFilter:import_v36.z.union([import_v36.z.string(),import_v36.z.object({from:import_v36.z.string(),to:import_v36.z.string()}),import_v36.z.null()]),queryShape:import_v36.z.union([import_v36.z.enum(["traces","spans","topics"]),import_v36.z.null()]),cluster:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),freezeColumns:import_v36.z.union([import_v36.z.boolean(),import_v36.z.null()])}).partial(),import_v36.z.null()]),View=import_v36.z.object({id:import_v36.z.string().uuid(),object_type:AclObjectType.and(import_v36.z.string()),object_id:import_v36.z.string().uuid(),view_type:import_v36.z.enum(["projects","experiments","experiment","playgrounds","playground","datasets","dataset","prompts","parameters","tools","scorers","classifiers","logs","monitor","for_review_project_log","for_review_experiments","for_review_datasets"]),name:import_v36.z.string(),created:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),view_data:ViewData.optional(),options:ViewOptions.optional(),user_id:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),deleted_at:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional()}),import_functions=require("@vercel/functions"),import_mustache2=__toESM(require("mustache")),import_mustache=__toESM(require("mustache"));function lintTemplate(t,e){const n=getMustacheVars(t);for(const t of n){if(!(void 0!==getObjValueByPath(e,t[1].replaceAll(/\.\d+/g,".0").split("."))))throw new Error(`Variable '${t[1]}' does not exist.`)}}function getMustacheVars(t){try{return import_mustache.default.parse(t).filter(t=>"name"===t[0]||"&"===t[0])}catch{return[]}}var jsonEscape=t=>"string"==typeof t?t:JSON.stringify(t),mustachePlugin={name:"mustache",defaultOptions:{strict:!0,escape:jsonEscape},createRenderer(){const t=this.defaultOptions??{},e=t?.escape??jsonEscape,n="boolean"!=typeof t?.strict||t.strict;return{render(t,r,o,a){const i=o??e;return("boolean"==typeof a?a:n)&&lintTemplate(t,r),import_mustache2.default.render(t,r,void 0,{escape:i})},lint(t,e){lintTemplate(t,e)}}}},TemplatePluginRegistry=class{plugins=new Map;register(t){this.plugins.has(t.name)&&console.warn(`Template plugin '${t.name}' already registered, overwriting`);const e={plugin:t,renderer:void 0!==t.defaultOptions?t.createRenderer():void 0};this.plugins.set(t.name,e)}getAvailable(){return Array.from(this.plugins.keys())}get(t){return this.plugins.get(t)?.renderer}isRegistered(t){return this.plugins.has(t)}},templateRegistry=new TemplatePluginRegistry,registerTemplatePlugin=templateRegistry.register.bind(templateRegistry),getTemplateRenderer=templateRegistry.get.bind(templateRegistry);function isTemplateFormat(t){return"mustache"===t||"nunjucks"===t||"none"===t}function parseTemplateFormat(t,e="mustache"){return isTemplateFormat(t)?t:e}function renderTemplateContent(t,e,n,r){const o=!!r.strict,a=parseTemplateFormat(r.templateFormat);if("none"===a)return t;const i=getTemplateRenderer(a);if(!i){if("nunjucks"===a)throw new Error("Nunjucks templating requires @braintrust/template-nunjucks. Install and import it to enable templateFormat: 'nunjucks'.");throw new Error(`No template renderer registered for ${a}`)}return o&&i.lint&&i.lint(t,e),i.render(t,e,n,o)}registerTemplatePlugin(mustachePlugin);var import_v38=require("zod/v3"),import_eventsource_parser=require("eventsource-parser"),import_v37=require("zod/v3"),braintrustStreamChunkSchema=import_v37.z.union([import_v37.z.object({type:import_v37.z.literal("text_delta"),data:import_v37.z.string()}),import_v37.z.object({type:import_v37.z.literal("reasoning_delta"),data:import_v37.z.string()}),import_v37.z.object({type:import_v37.z.literal("json_delta"),data:import_v37.z.string()}),import_v37.z.object({type:import_v37.z.literal("error"),data:import_v37.z.string()}),import_v37.z.object({type:import_v37.z.literal("console"),data:SSEConsoleEventData}),import_v37.z.object({type:import_v37.z.literal("progress"),data:SSEProgressEventData}),import_v37.z.object({type:import_v37.z.literal("start"),data:import_v37.z.string()}),import_v37.z.object({type:import_v37.z.literal("done"),data:import_v37.z.string()})]),BraintrustStream=class t{stream;memoizedFinalValue;signal;constructor(t,{signal:e}={}){this.signal=e,this.stream=t.pipeThrough(btStreamParser(),{signal:e})}copy(){const[e,n]=this.stream.tee();return this.stream=n,new t(e,{signal:this.signal})}toReadableStream(){return this.stream}[Symbol.asyncIterator](){const t=this.stream.getReader();return{async next(){const{done:e,value:n}=await t.read();return e?(t.releaseLock(),{done:!0,value:void 0}):{done:!1,value:n}},return:async()=>(t.releaseLock(),{done:!0,value:void 0}),async throw(e){throw t.releaseLock(),e}}}finalValue(){return this.memoizedFinalValue||(this.memoizedFinalValue=new Promise((t,e)=>{this.stream.pipeThrough(createFinalValuePassThroughStream(t,e),{signal:this.signal}).pipeTo(devNullWritableStream(),{signal:this.signal}).catch(e)})),this.memoizedFinalValue}static parseRawEvent(t){switch(t.event){case"text_delta":return{type:"text_delta",data:JSON.parse(t.data)};case"reasoning_delta":return{type:"reasoning_delta",data:JSON.parse(t.data)};case"json_delta":return{type:"json_delta",data:t.data};case"error":return{type:"error",data:JSON.parse(t.data)};case"progress":return{type:"progress",data:SSEProgressEventData.parse(JSON.parse(t.data))};case"console":return{type:"console",data:SSEConsoleEventData.parse(JSON.parse(t.data))};case"start":return{type:"start",data:""};case"done":return{type:"done",data:""};default:{const e=t;throw new Error(`Unknown event type ${JSON.stringify(e)}`)}}}static serializeRawEvent(t){switch(t.type){case"text_delta":return{event:"text_delta",data:JSON.stringify(t.data)};case"reasoning_delta":return{event:"reasoning_delta",data:JSON.stringify(t.data)};case"json_delta":return{event:"json_delta",data:t.data};case"error":return{event:"error",data:JSON.stringify(t.data)};case"progress":return{event:"progress",data:JSON.stringify(t.data)};case"console":return{event:"console",data:JSON.stringify(t.data)};case"start":return{event:"start",data:""};case"done":return{event:"done",data:""};default:{const e=t;throw new Error(`Unknown event type ${JSON.stringify(e)}`)}}}};function btStreamParser(){const t=new TextDecoder;let e;return new TransformStream({async start(t){e=(0,import_eventsource_parser.createParser)(e=>{if("reconnect-interval"===e.type)return;const n=CallEvent.safeParse(e);if(!n.success)throw new Error(`Failed to parse event: ${n.error}`);t.enqueue(BraintrustStream.parseRawEvent(n.data))})},async transform(n,r){n instanceof Uint8Array?e.feed(t.decode(n,{stream:!0})):"string"==typeof n?e.feed(n):r.enqueue(n)},async flush(n){const r=t.decode();r&&e.feed(r),n.terminate()}})}function createFinalValuePassThroughStream(t,e){const n=new TextDecoder,r=[],o=[],a=[];return new TransformStream({transform(t,i){if("string"==typeof t)r.push(t),i.enqueue({type:"text_delta",data:t});else if(t instanceof Uint8Array)r.push(n.decode(t)),i.enqueue({type:"text_delta",data:n.decode(t)});else if(braintrustStreamChunkSchema.safeParse(t).success){const n=t.type;switch(n){case"text_delta":r.push(t.data);break;case"json_delta":o.push(t.data);break;case"reasoning_delta":a.push(t.data);break;case"error":e(t.data);break;case"progress":case"start":case"done":case"console":break;default:e(`Unknown chunk type: ${n}`)}i.enqueue(t)}else e(`Unknown chunk type ${JSON.stringify(t)}`)},flush(e){o.length>0?t(JSON.parse(o.join(""))):r.length>0?t(r.join("")):a.length>0?t(a.join("")):t(void 0),e.terminate()}})}function devNullWritableStream(){return new WritableStream({write(t){},close(){},abort(t){},start(t){}})}function canUseDiskCache(){return!!(isomorph_default.hash&&isomorph_default.gunzip&&isomorph_default.gzip&&isomorph_default.stat&&isomorph_default.readFile&&isomorph_default.writeFile&&isomorph_default.utimes&&isomorph_default.readdir&&isomorph_default.mkdir&&isomorph_default.unlink&&isomorph_default.homedir)}var DiskCache=class{dir;max;mkdir;logWarnings;constructor(t){if(!canUseDiskCache())throw new Error("Disk cache is not supported on this platform");this.dir=t.cacheDir,this.max=t.max,this.logWarnings=t.logWarnings??!0,this.mkdir=t.mkdir??!0}getEntryPath(t){const e=isomorph_default.hash(t);return isomorph_default.pathJoin(this.dir,e)}async get(t){try{const e=this.getEntryPath(t),n=await isomorph_default.gunzip(await isomorph_default.readFile(e));return await isomorph_default.utimes(e,new Date,new Date),JSON.parse(n.toString())}catch(t){if("ENOENT"===t.code)return;return void(this.logWarnings&&console.warn("Failed to read from disk cache",t))}}async set(t,e){try{this.mkdir&&await isomorph_default.mkdir(this.dir,{recursive:!0});const n=this.getEntryPath(t),r=await isomorph_default.gzip(JSON.stringify(e));await isomorph_default.writeFile(n,r),await this.evictOldestIfFull()}catch(t){return void(this.logWarnings&&console.warn("Failed to write to disk cache",t))}}async evictOldestIfFull(){if(!this.max)return;const t=(await isomorph_default.readdir(this.dir)).map(t=>isomorph_default.pathJoin(this.dir,t));if(t.length<=this.max)return;const e=await Promise.all(t.map(async t=>({path:t,mtime:(await isomorph_default.stat(t)).mtime.getTime()})));e.sort((t,e)=>t.mtime-e.mtime);const n=e.slice(0,e.length-this.max);await Promise.all(n.map(t=>isomorph_default.unlink(t.path)))}},LRUCache=class{cache;maxSize;constructor(t={}){this.cache=new Map,this.maxSize=t.max}get(t){const e=this.cache.get(t);if(void 0!==e)return this.cache.delete(t),this.cache.set(t,e),e.value}has(t){return!!this.cache.has(t)&&(this.get(t),!0)}set(t,e){if(this.cache.has(t))this.cache.delete(t);else if(this.maxSize&&this.cache.size>=this.maxSize){const t=this.cache.keys().next().value;this.cache.delete(t)}this.cache.set(t,{value:e})}delete(t){return this.cache.delete(t)}*entries(){for(const[t,e]of this.cache)yield[t,e.value]}keys(){return this.cache.keys()}*values(){for(const t of this.cache.values())yield t.value}[Symbol.iterator](){return this.entries()}clear(){this.cache.clear()}},CACHE_LOCATION_ENV_VAR="BRAINTRUST_CACHE_LOCATION",DEFAULT_CACHE_MEMORY_MAX=1024,DEFAULT_CACHE_DISK_MAX=1<<20,warnedInvalidCacheModeEnvValue=!1,warnedUnavailableDiskCacheMode=!1;function warnInvalidCacheMode(t){warnedInvalidCacheModeEnvValue||(warnedInvalidCacheModeEnvValue=!0,debugLogger.warn(`Invalid ${CACHE_LOCATION_ENV_VAR} value "${t}". Expected "mixed", "memory", "disk", or "none". Falling back to "mixed".`))}function warnUnavailableDiskCache(){warnedUnavailableDiskCacheMode||(warnedUnavailableDiskCacheMode=!0,debugLogger.warn(`Disk cache is not supported on this platform, so ${CACHE_LOCATION_ENV_VAR}="disk" disables prompt and parameters caching.`))}function parseCacheMode(){const t=isomorph_default.getEnv(CACHE_LOCATION_ENV_VAR),e=t?.trim().toLowerCase();return e?"mixed"===e||"memory"===e||"disk"===e||"none"===e?e:(warnInvalidCacheMode(t??""),"mixed"):"mixed"}function parsePositiveIntegerEnv(t,e){const n=Number(isomorph_default.getEnv(t));return Number.isInteger(n)&&n>0?n:e}function createCacheLayers({memoryMaxEnvVar:t,diskCacheDirEnvVar:e,diskMaxEnvVar:n,getDefaultDiskCacheDir:r}){const o=parseCacheMode(),a="mixed"===o||"memory"===o?new LRUCache({max:parsePositiveIntegerEnv(t,DEFAULT_CACHE_MEMORY_MAX)}):void 0;let i;return"mixed"!==o&&"disk"!==o||(canUseDiskCache()?i=new DiskCache({cacheDir:isomorph_default.getEnv(e)??r(),max:parsePositiveIntegerEnv(n,DEFAULT_CACHE_DISK_MAX)}):"disk"===o&&warnUnavailableDiskCache()),i?{memoryCache:a,diskCache:i}:{memoryCache:a}}function createCacheKey(t){if(t.id)return`id:${t.id}`;const e=t.projectId??t.projectName;if(!e)throw new Error("Either projectId or projectName must be provided");if(!t.slug)throw new Error("Slug must be provided when not using ID");return`${e}:${t.slug}:${t.version??"latest"}`}var PromptCache=class{memoryCache;diskCache;constructor(t){this.memoryCache=t.memoryCache,this.diskCache=t.diskCache}async get(t){const e=createCacheKey(t);if(this.memoryCache){const t=this.memoryCache.get(e);if(void 0!==t)return t}if(this.diskCache){const t=await this.diskCache.get(e);if(!t)return;return this.memoryCache?.set(e,t),t}}async set(t,e){const n=createCacheKey(t);this.memoryCache?.set(n,e),this.diskCache&&await this.diskCache.set(n,e)}};function createCacheKey2(t){if(t.id)return`parameters:id:${t.id}`;const e=t.projectId??t.projectName;if(!e)throw new Error("Either projectId or projectName must be provided");if(!t.slug)throw new Error("Slug must be provided when not using ID");return`parameters:${e}:${t.slug}:${t.version??"latest"}`}var ParametersCache=class{memoryCache;diskCache;constructor(t){this.memoryCache=t.memoryCache,this.diskCache=t.diskCache}async get(t){const e=createCacheKey2(t);if(this.memoryCache){const t=this.memoryCache.get(e);if(void 0!==t)return t}if(this.diskCache){const t=await this.diskCache.get(e);if(!t)return;return this.memoryCache?.set(e,t),t}}async set(t,e){const n=createCacheKey2(t);this.memoryCache?.set(n,e),this.diskCache&&await this.diskCache.set(n,e)}},activeCaches=new Set,exitHandlersRegistered=!1;function canUseSpanCache(){return!!(isomorph_default.pathJoin&&isomorph_default.tmpdir&&isomorph_default.writeFileSync&&isomorph_default.appendFileSync&&isomorph_default.readFileSync&&isomorph_default.unlinkSync&&isomorph_default.openFile)}var SpanCache=class{cacheFilePath=null;fileHandle=null;initialized=!1;initPromise=null;_explicitlyDisabled;_enabled=!1;_activeEvalCount=0;rootSpanIndex=new Set;constructor(t){this._explicitlyDisabled=t?.disabled??!1}disable(){this._explicitlyDisabled=!0}start(){this._explicitlyDisabled||(this._enabled=!0,this._activeEvalCount++)}stop(){this._activeEvalCount--,this._activeEvalCount<=0&&(this._activeEvalCount=0,this._enabled=!1)}get disabled(){return this._explicitlyDisabled||!this._enabled||!canUseSpanCache()}async ensureInitialized(){if(!this.disabled&&!this.initialized)return this.initPromise||(this.initPromise=(async()=>{if(!isomorph_default.tmpdir||!isomorph_default.pathJoin||!isomorph_default.openFile)return;const t=isomorph_default.tmpdir(),e=`${Date.now()}-${Math.random().toString(36).slice(2)}`;this.cacheFilePath=isomorph_default.pathJoin(t,`braintrust-span-cache-${e}.jsonl`),this.fileHandle=await isomorph_default.openFile(this.cacheFilePath,"a+"),this.initialized=!0,this.registerExitHandler()})()),this.initPromise}registerExitHandler(){if(activeCaches.add(this),"undefined"!=typeof process&&process.on&&!exitHandlersRegistered){exitHandlersRegistered=!0;const t=()=>{for(const t of activeCaches){if(t.fileHandle)try{t.fileHandle.close().catch(()=>{}),t.fileHandle=null}catch{}if(t.cacheFilePath&&canUseSpanCache()&&isomorph_default.unlinkSync)try{isomorph_default.unlinkSync(t.cacheFilePath)}catch{}}};process.on("exit",t),process.on("SIGINT",t),process.on("SIGTERM",t),process.on("beforeExit",t)}}writeBuffer=[];flushScheduled=!1;flushPromise=null;queueWrite(t,e,n){if(this.disabled)return;const r={rootSpanId:t,spanId:e,data:n};this.writeBuffer.push(r),this.rootSpanIndex.add(t),this.flushScheduled||(this.flushScheduled=!0,this.flushPromise=this.flushWriteBuffer())}async flushWriteBuffer(){const t=[...this.writeBuffer];if(this.flushScheduled=!1,0===t.length)return;if(await this.ensureInitialized(),!this.fileHandle)return;const e=t.map(t=>JSON.stringify(t)+"\n").join("");await this.fileHandle.appendFile(e,"utf8"),this.writeBuffer=this.writeBuffer.filter(e=>!t.includes(e))}async waitForPendingWrites(){this.flushPromise&&(await this.flushPromise,this.flushPromise=null)}getByRootSpanId(t){if(this.disabled)return;if(!this.rootSpanIndex.has(t))return;const e=new Map;if(this.initialized&&this.cacheFilePath&&isomorph_default.readFileSync)try{const n=isomorph_default.readFileSync(this.cacheFilePath,"utf8").trim().split("\n").filter(Boolean);for(const r of n)try{const n=JSON.parse(r);if(n.rootSpanId!==t)continue;const o=e.get(n.spanId);o?mergeDicts(o,n.data):e.set(n.spanId,n.data)}catch{}}catch{}for(const n of this.writeBuffer){if(n.rootSpanId!==t)continue;const r=e.get(n.spanId);r?mergeDicts(r,n.data):e.set(n.spanId,n.data)}return 0!==e.size?Array.from(e.values()):void 0}has(t){return!this.disabled&&this.rootSpanIndex.has(t)}clear(t){this.rootSpanIndex.delete(t)}clearAll(){this.rootSpanIndex.clear(),this.dispose()}get size(){return this.rootSpanIndex.size}dispose(){if(!(this._activeEvalCount>0)){if(activeCaches.delete(this),this.writeBuffer=[],this.flushScheduled=!1,this.flushPromise=null,this.fileHandle&&(this.fileHandle.close().catch(()=>{}),this.fileHandle=null),this.cacheFilePath&&canUseSpanCache()&&isomorph_default.unlinkSync){try{isomorph_default.unlinkSync(this.cacheFilePath)}catch{}this.cacheFilePath=null}this.initialized=!1,this.initPromise=null,this.rootSpanIndex.clear()}}},BRAINTRUST_ATTACHMENT=BraintrustAttachmentReference.shape.type.value,EXTERNAL_ATTACHMENT=ExternalAttachmentReference.shape.type.value,LOGS3_OVERFLOW_REFERENCE_TYPE="logs3_overflow",BRAINTRUST_PARAMS=Object.keys(BraintrustModelParams.shape),RESET_CONTEXT_MANAGER_STATE=Symbol.for("braintrust.resetContextManagerState"),DEFAULT_MAX_REQUEST_SIZE=6291456,datasetSnapshotRegisterResponseSchema=import_v38.z.object({dataset_snapshot:DatasetSnapshot,found_existing:import_v38.z.boolean().optional()}),datasetRestorePreviewResultSchema=import_v38.z.object({rows_to_restore:import_v38.z.number(),rows_to_delete:import_v38.z.number()}),datasetRestoreResultSchema=import_v38.z.object({xact_id:import_v38.z.string().nullable(),rows_restored:import_v38.z.number(),rows_deleted:import_v38.z.number()}),parametersRowSchema=import_v38.z.object({id:import_v38.z.string().uuid(),_xact_id:import_v38.z.string(),project_id:import_v38.z.string().uuid(),name:import_v38.z.string(),slug:import_v38.z.string(),description:import_v38.z.union([import_v38.z.string(),import_v38.z.null()]).optional(),function_type:import_v38.z.literal("parameters"),function_data:import_v38.z.object({type:import_v38.z.literal("parameters"),data:import_v38.z.record(import_v38.z.unknown()).optional(),__schema:import_v38.z.record(import_v38.z.unknown())}),metadata:import_v38.z.union([import_v38.z.object({}).partial().passthrough(),import_v38.z.null()]).optional()}),InlineAttachmentReferenceSchema=import_v38.z.object({type:import_v38.z.literal("inline_attachment"),src:import_v38.z.string().min(1),content_type:import_v38.z.string().optional(),filename:import_v38.z.string().optional()}),LoginInvalidOrgError=class extends Error{constructor(t){super(t),this.message=t}},REDACTION_FIELDS=["input","output","expected","metadata","context","scores","metrics"],MaskingError=class{constructor(t,e){this.fieldName=t,this.errorType=e}get errorMsg(){return`ERROR: Failed to mask field '${this.fieldName}' - ${this.errorType}`}};function applyMaskingToField(t,e,n){try{return t(e)}catch(t){const e=t instanceof Error?t.constructor.name:"Error";return"scores"===n||"metrics"===n?new MaskingError(n,e):"metadata"===n?{error:`ERROR: Failed to mask field '${n}' - ${e}`}:`ERROR: Failed to mask field '${n}' - ${e}`}}var INITIAL_SPAN_WRITE_AS_MERGE=Symbol("braintrust.initial-span-write-as-merge"),BRAINTRUST_CURRENT_SPAN_STORE=Symbol.for("braintrust.currentSpanStore"),ContextManager=class{wrapSpanForStore(t){return t}},BraintrustContextManager=class extends ContextManager{_currentSpan;[BRAINTRUST_CURRENT_SPAN_STORE];constructor(){super(),this._currentSpan=isomorph_default.newAsyncLocalStorage(),this[BRAINTRUST_CURRENT_SPAN_STORE]=this._currentSpan}getParentSpanIds(){const t=this._currentSpan.getStore();if(t)return{rootSpanId:t.rootSpanId,spanParents:[t.spanId]}}runInContext(t,e){return this._currentSpan.run(t,e)}getCurrentSpan(){return this._currentSpan.getStore()}};function getSpanComponentsClass(){return globalThis.BRAINTRUST_SPAN_COMPONENT?globalThis.BRAINTRUST_SPAN_COMPONENT:resolveUseLegacyUuidIds()?SpanComponentsV3:SpanComponentsV4}function getContextManager(){return globalThis.BRAINTRUST_CONTEXT_MANAGER?new globalThis.BRAINTRUST_CONTEXT_MANAGER:new BraintrustContextManager}var NoopSpan=class{id;spanId;rootSpanId;spanParents;kind="span";constructor(){this.id="",this.spanId="",this.rootSpanId="",this.spanParents=[]}log(t){}logFeedback(t){}traced(t,e){return t(this)}getParentInfo(){}startSpan(t){return this}end(t){return t?.endTime??getCurrentUnixTimestamp()}async export(){return""}inject(t){return t??{}}async permalink(){return NOOP_SPAN_PERMALINK}link(){return NOOP_SPAN_PERMALINK}async flush(){}close(t){return this.end(t)}setAttributes(t){}startSpanWithParents(t,e,n){return this}state(){return _internalGetGlobalState()}[Symbol.for("nodejs.util.inspect.custom")](){return`NoopSpan {\n  kind: '${this.kind}',\n  id: '${this.id}',\n  spanId: '${this.spanId}',\n  rootSpanId: '${this.rootSpanId}',\n  spanParents: ${JSON.stringify(this.spanParents)}\n}`}toString(){return`NoopSpan(id=${this.id}, spanId=${this.spanId})`}},NOOP_SPAN=new NoopSpan,NOOP_SPAN_PERMALINK="https://braintrust.dev/noop-span",loginSchema=import_v38.z.strictObject({appUrl:import_v38.z.string(),appPublicUrl:import_v38.z.string(),orgName:import_v38.z.string(),apiUrl:import_v38.z.string(),proxyUrl:import_v38.z.string(),loginToken:import_v38.z.string(),orgId:import_v38.z.string().nullish(),gitMetadataSettings:GitMetadataSettings.nullish(),debugLogLevel:import_v38.z.enum(["error","warn","info","debug"]).optional(),debugLogLevelDisabled:import_v38.z.boolean().optional()}),stateNonce=0,V1_PROXY_SUFFIX="/v1/proxy";function normalizeProxyConnUrl(t){return t.endsWith(V1_PROXY_SUFFIX)?t.slice(0,t.length-V1_PROXY_SUFFIX.length):t}var _globalState,BraintrustState=class t{constructor(t){this.loginParams=t,this.id=`${(new Date).toLocaleString()}-${stateNonce++}`,this.currentExperiment=void 0,this.currentLogger=void 0,this.currentParent=isomorph_default.newAsyncLocalStorage(),this.currentSpan=isomorph_default.newAsyncLocalStorage(),t.fetch&&(this.fetch=t.fetch);const e=async()=>(await this.login({}),this.apiConn());this._bgLogger=new SyncLazyValue(()=>new HTTPBackgroundLogger(new LazyValue(e),t)),void 0!==t.debugLogLevel?(this.debugLogLevelConfigured=!0,this.debugLogLevel=normalizeDebugLogLevelOption(t.debugLogLevel),setGlobalDebugLogLevel(this.debugLogLevel??!1)):(this.debugLogLevel=getEnvDebugLogLevel(),setGlobalDebugLogLevel(void 0)),this.resetLoginInfo();const{memoryCache:n,diskCache:r}=createCacheLayers({memoryMaxEnvVar:"BRAINTRUST_PROMPT_CACHE_MEMORY_MAX",diskCacheDirEnvVar:"BRAINTRUST_PROMPT_CACHE_DIR",diskMaxEnvVar:"BRAINTRUST_PROMPT_CACHE_DISK_MAX",getDefaultDiskCacheDir:()=>`${isomorph_default.getEnv("HOME")??isomorph_default.homedir()}/.braintrust/prompt_cache`});this.promptCache=new PromptCache({memoryCache:n,diskCache:r});const{memoryCache:o,diskCache:a}=createCacheLayers({memoryMaxEnvVar:"BRAINTRUST_PARAMETERS_CACHE_MEMORY_MAX",diskCacheDirEnvVar:"BRAINTRUST_PARAMETERS_CACHE_DIR",diskMaxEnvVar:"BRAINTRUST_PARAMETERS_CACHE_DISK_MAX",getDefaultDiskCacheDir:()=>`${isomorph_default.getEnv("HOME")??isomorph_default.homedir()}/.braintrust/parameters_cache`});this.parametersCache=new ParametersCache({memoryCache:o,diskCache:a}),this.spanCache=new SpanCache({disabled:t.disableSpanCache})}id;currentExperiment;currentLogger;currentParent;currentSpan;_bgLogger;_overrideBgLogger=null;appUrl=null;appPublicUrl=null;loginToken=null;orgId=null;orgName=null;apiUrl=null;proxyUrl=null;loggedIn=!1;gitMetadataSettings;debugLogLevel;debugLogLevelConfigured=!1;fetch=globalThis.fetch;_appConn=null;_apiConn=null;_proxyConn=null;promptCache;parametersCache;spanCache;_idGenerator=null;_contextManager=null;_otelFlushCallback=null;resetLoginInfo(){this.appUrl=null,this.appPublicUrl=null,this.loginToken=null,this.orgId=null,this.orgName=null,this.apiUrl=null,this.proxyUrl=null,this.loggedIn=!1,this.gitMetadataSettings=void 0,this._appConn=null,this._apiConn=null,this._proxyConn=null}resetIdGenState(){this._idGenerator=null}[RESET_CONTEXT_MANAGER_STATE](){this._contextManager=null}get idGenerator(){return null===this._idGenerator&&(this._idGenerator=getIdGenerator()),this._idGenerator}get contextManager(){return null===this._contextManager&&(this._contextManager=getContextManager()),this._contextManager}registerOtelFlush(t){this._otelFlushCallback=t}async flushOtel(){this._otelFlushCallback&&await this._otelFlushCallback()}copyLoginInfo(t){this.appUrl=t.appUrl,this.appPublicUrl=t.appPublicUrl,this.loginToken=t.loginToken,this.orgId=t.orgId,this.orgName=t.orgName,this.apiUrl=t.apiUrl,this.proxyUrl=t.proxyUrl,this.loggedIn=t.loggedIn,this.gitMetadataSettings=t.gitMetadataSettings,this.debugLogLevel=t.debugLogLevel,this.debugLogLevelConfigured=t.debugLogLevelConfigured,setGlobalDebugLogLevel(this.debugLogLevelConfigured?this.debugLogLevel??!1:void 0),this._appConn=t._appConn,this._apiConn=t._apiConn,this.loginReplaceApiConn(this.apiConn()),this._proxyConn=t._proxyConn}serialize(){if(!this.loggedIn)throw new Error("Cannot serialize BraintrustState without being logged in");if(!(this.appUrl&&this.appPublicUrl&&this.apiUrl&&this.proxyUrl&&this.orgName&&this.loginToken&&this.loggedIn))throw new Error("Cannot serialize BraintrustState without all login attributes");return{appUrl:this.appUrl,appPublicUrl:this.appPublicUrl,loginToken:this.loginToken,orgId:this.orgId,orgName:this.orgName,apiUrl:this.apiUrl,proxyUrl:this.proxyUrl,gitMetadataSettings:this.gitMetadataSettings,...this.debugLogLevel?{debugLogLevel:this.debugLogLevel}:{},...this.debugLogLevelConfigured&&!this.debugLogLevel?{debugLogLevelDisabled:!0}:{}}}static deserialize(e,n){const r=loginSchema.safeParse(e);if(!r.success)throw new Error(`Cannot deserialize BraintrustState: ${r.error.message}`);const o=new t({...n});for(const t of Object.keys(loginSchema.shape))o[t]=r.data[t];if(!o.loginToken)throw new Error("Cannot deserialize BraintrustState without a login token");return o.apiConn().set_token(o.loginToken),o.apiConn().make_long_lived(),o.appConn().set_token(o.loginToken),o.proxyUrl&&(o.proxyConn().make_long_lived(),o.proxyConn().set_token(o.loginToken)),o.loggedIn=!0,o.debugLogLevelConfigured="debugLogLevel"in r.data||!!r.data.debugLogLevelDisabled,setGlobalDebugLogLevel(o.debugLogLevelConfigured?o.debugLogLevel??!1:void 0),o.loginReplaceApiConn(o.apiConn()),o}setFetch(t){this.loginParams.fetch=t,this.fetch=t,this._apiConn?.setFetch(t),this._appConn?.setFetch(t)}setMaskingFunction(t){this.bgLogger().setMaskingFunction(t)}setDebugLogLevel(t){void 0!==t&&(this.debugLogLevelConfigured=!0,this.debugLogLevel=normalizeDebugLogLevelOption(t),setGlobalDebugLogLevel(this.debugLogLevel??!1))}getDebugLogLevel(){return this.debugLogLevel}hasDebugLogLevelOverride(){return this.debugLogLevelConfigured}async login(t){if(this.setDebugLogLevel(t.debugLogLevel),this.apiUrl&&!t.forceLogin)return;const e=await loginToState({...this.loginParams,...Object.fromEntries(Object.entries(t).filter(([t,e])=>!isEmpty2(e)))});this.copyLoginInfo(e)}appConn(){if(!this._appConn){if(!this.appUrl)throw new Error("Must initialize appUrl before requesting appConn");this._appConn=new HTTPConnection(this.appUrl,this.fetch)}return this._appConn}apiConn(){if(!this._apiConn){if(!this.apiUrl)throw new Error("Must initialize apiUrl before requesting apiConn");this._apiConn=new HTTPConnection(this.apiUrl,this.fetch)}return this._apiConn}proxyConn(){if(!this.proxyUrl)return this.apiConn();if(!this._proxyConn){if(!this.proxyUrl)throw new Error("Must initialize proxyUrl before requesting proxyConn");this._proxyConn=new HTTPConnection(normalizeProxyConnUrl(this.proxyUrl),this.fetch)}return this._proxyConn}bgLogger(){return this._overrideBgLogger?this._overrideBgLogger:this._bgLogger.get()}httpLogger(){return this._bgLogger.get()}setOverrideBgLogger(t){this._overrideBgLogger=t}loginReplaceApiConn(t){this._bgLogger.get().internalReplaceApiConn(t)}disable(){this._bgLogger.get().disable()}enforceQueueSizeLimit(t){this._bgLogger.get().enforceQueueSizeLimit(t)}toJSON(){return{id:this.id,orgId:this.orgId,orgName:this.orgName,appUrl:this.appUrl,appPublicUrl:this.appPublicUrl,apiUrl:this.apiUrl,proxyUrl:this.proxyUrl,loggedIn:this.loggedIn}}[Symbol.for("nodejs.util.inspect.custom")](){return`BraintrustState {\n  id: '${this.id}',\n  orgId: ${this.orgId?`'${this.orgId}'`:"null"},\n  orgName: ${this.orgName?`'${this.orgName}'`:"null"},\n  appUrl: ${this.appUrl?`'${this.appUrl}'`:"null"},\n  apiUrl: ${this.apiUrl?`'${this.apiUrl}'`:"null"},\n  proxyUrl: ${this.proxyUrl?`'${this.proxyUrl}'`:"null"},\n  loggedIn: ${this.loggedIn},\n  loginToken: '[REDACTED]'\n}`}toString(){return`BraintrustState(id=${this.id}, org=${this.orgName||"none"}, loggedIn=${this.loggedIn})`}};function useTestBackgroundLogger(){const t=_internalGetGlobalState();if(!t)throw new Error("global state not set yet");const e=new TestBackgroundLogger;return t.setOverrideBgLogger(e),e}function clearTestBackgroundLogger(){_internalGetGlobalState()?.setOverrideBgLogger(null)}function initTestExperiment(t,e,n={}){setInitialTestState();const r=_internalGetGlobalState(),o=e??t,a=new LazyValue(async()=>({project:{id:o,name:o,fullInfo:{}},experiment:{id:t,name:t,fullInfo:n}}));return new Experiment2(r,a)}function _internalSetInitialState(){if(_globalState)return;const t=Symbol.for("braintrust-state");let e=globalThis[t];if(!e){const n=new BraintrustState({});globalThis[t]=n,e=n}_globalState=e}var _internalGetGlobalState=()=>_globalState;function registerOtelFlush(t){_globalState?.registerOtelFlush(t),_globalState?.spanCache?.disable()}setDebugLogStateResolver(()=>_internalGetGlobalState());var FailedHTTPResponse=class extends Error{status;text;data;constructor(t,e,n){super(`${t}: ${e} (${n})`),this.status=t,this.text=e,this.data=n}};async function checkResponse(t){if(t.ok)return t;throw new FailedHTTPResponse(t.status,t.statusText,await t.text())}var HTTPConnection=class t{base_url;token;headers;fetch;constructor(t,e){this.base_url=t,this.token=null,this.headers={},this._reset(),this.fetch=e}setFetch(t){this.fetch=t}async ping(){try{return 200===(await this.get("ping")).status}catch{return!1}}make_long_lived(){this._reset()}static sanitize_token(t){return t.trim()}set_token(e){e=t.sanitize_token(e),this.token=e,this._reset()}_reset(){this.headers={},this.token&&(this.headers.Authorization=`Bearer ${this.token}`)}async get(t,e=void 0,n){const{headers:r,...o}=n||{},a=new URL(_urljoin(this.base_url,t));a.search=new URLSearchParams(e?Object.entries(e).filter(([t,e])=>void 0!==e).flatMap(([t,e])=>void 0!==e?"string"==typeof e?[[t,e]]:e.map(e=>[t,e]):[]):[]).toString();const i=this.fetch,s=this.headers;return await checkResponse(await i(a.toString(),{headers:{Accept:"application/json",...s,...r},keepalive:!0,...o}))}async post(t,e,n,r=0){const{headers:o,...a}=n||{},i=this.fetch,s=this.base_url,c=this.headers,u=r+1;for(let r=0;r<u;r++)try{return await checkResponse(await i(_urljoin(s,t),{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",...c,...o},body:"string"==typeof e?e:e?JSON.stringify(e):void 0,keepalive:!0,...a}))}catch(e){if(n?.signal?.aborted)throw getAbortReason(n.signal);if(r===u-1||!isRetryableHTTPError(e))throw e;debugLogger.debug(`Retrying API request ${t} after ${formatHTTPError(e)}`);const o=1e3*HTTP_RETRY_BASE_SLEEP_TIME_S*2**r+Math.random()*HTTP_RETRY_JITTER_MS;debugLogger.info(`Sleeping for ${o}ms before retrying API request`),await waitForRetry(o,n?.signal)}throw new Error("Unexpected retry state")}async get_json(t,e=void 0,n=0){const r=n+1;for(let n=0;n<r;n++)try{const n=await this.get(`${t}`,e);return await n.json()}catch(o){if(n<r-1){debugLogger.debug(`Retrying API request ${t} ${JSON.stringify(e)} ${o.status} ${o.text}`);const r=HTTP_RETRY_BASE_SLEEP_TIME_S*2**n;debugLogger.info(`Sleeping for ${r}s before retrying API request`),await new Promise(t=>setTimeout(t,1e3*r));continue}throw o}}async post_json(t,e=void 0){const n=await this.post(`${t}`,e,{headers:{"Content-Type":"application/json"}});return await n.json()}[Symbol.for("nodejs.util.inspect.custom")](){return`HTTPConnection {\n  base_url: '${this.base_url}',\n  token: '[REDACTED]'\n}`}toString(){return`HTTPConnection(${this.base_url})`}},BaseAttachment=class{reference},Attachment=class extends BaseAttachment{reference;uploader;_data;state;dataDebugString;constructor({data:t,filename:e,contentType:n,state:r}){super(),this.reference={type:BRAINTRUST_ATTACHMENT,filename:e,content_type:n,key:newId()},this.state=r,this.dataDebugString="string"==typeof t?t:"<in-memory data>",this._data=this.initData(t),this.uploader=this.initUploader()}async upload(){return await this.uploader.get()}async data(){return this._data.get()}debugInfo(){return{inputData:this.dataDebugString,reference:this.reference,state:this.state}}initUploader(){const t=async(t,e)=>{const n={key:this.reference.key,filename:this.reference.filename,content_type:this.reference.content_type,org_id:e},[r,o]=await Promise.allSettled([t.post("/attachment",n),this._data.get()]);if("rejected"===r.status){const t=JSON.stringify(r.reason);throw new Error(`Failed to request signed URL from API server: ${t}`)}if("rejected"===o.status){const t=JSON.stringify(o.reason);throw new Error(`Failed to read file: ${t}`)}const a=r.value,i=o.value;let s,c,u;try{({signedUrl:s,headers:c}=import_v38.z.object({signedUrl:import_v38.z.string().url(),headers:import_v38.z.record(import_v38.z.string())}).parse(await a.json()))}catch(t){if(t instanceof import_v38.ZodError){const e=JSON.stringify(t.flatten());throw new Error(`Invalid response from API server: ${e}`)}throw t}addAzureBlobHeaders(c,s);try{u=await checkResponse(await fetch(s,{method:"PUT",headers:c,body:i})),await(u.body?.cancel())}catch(t){if(t instanceof FailedHTTPResponse)throw new Error(`Failed to upload attachment to object store: ${t.status} ${t.text} ${t.data}`);throw t}return{signedUrl:s,metadataResponse:a,objectStoreResponse:u}};return new LazyValue(async()=>{const e={upload_status:"done"},n=this.state??_globalState;await n.login({});const r=n.apiConn(),o=n.orgId??"";try{await t(r,o)}catch(t){e.upload_status="error",e.error_message=t instanceof Error?t.message:JSON.stringify(t)}const a={key:this.reference.key,org_id:o,status:e},i=await r.post("/attachment/status",a);if(await(i.body?.cancel()),!i.ok){const t=JSON.stringify(i);throw new Error(`Couldn't log attachment status: ${t}`)}return e})}initData(t){if("string"==typeof t){this.ensureFileReadable(t);const e=isomorph_default.readFile;if(!e)throw new Error("This platform does not support reading the filesystem. Construct the Attachment\nwith a Blob/ArrayBuffer, or run the program on Node.js.");return new LazyValue(async()=>new Blob([await e(t)]))}return new LazyValue(async()=>new Blob([t]))}ensureFileReadable(t){const e=isomorph_default.statSync;if(!e)throw new Error("This platform does not support reading the filesystem. Construct the Attachment\nwith a Blob/ArrayBuffer, or run the program on Node.js.");try{e(t)}catch(t){debugLogger.warn(`Failed to read file: ${t}`)}}},ExternalAttachment=class extends BaseAttachment{reference;_data;state;constructor({url:t,filename:e,contentType:n,state:r}){super(),this.reference={type:EXTERNAL_ATTACHMENT,filename:e,content_type:n,url:t},this._data=this.initData()}async upload(){return{upload_status:"done"}}async data(){return this._data.get()}debugInfo(){return{url:this.reference.url,reference:this.reference,state:this.state}}initData(){return new LazyValue(async()=>{const t=new ReadonlyAttachment(this.reference,this.state);return await t.data()})}},attachmentMetadataSchema=import_v38.z.object({downloadUrl:import_v38.z.string(),status:AttachmentStatus}),ReadonlyAttachment=class{reference;_data;state;constructor(t,e){this.reference=t,this.state=e,this._data=this.initDownloader()}async data(){return this._data.get()}async asBase64Url(){const t=await(await this.data()).arrayBuffer(),e=Buffer.from(t).toString("base64");return`data:${this.reference.content_type};base64,${e}`}async metadata(){const t=this.state??_globalState;await t.login({});const e={filename:this.reference.filename,content_type:this.reference.content_type,org_id:t.orgId||""};"braintrust_attachment"===this.reference.type?e.key=this.reference.key:"external_attachment"===this.reference.type&&(e.url=this.reference.url);const n=await t.apiConn().get("/attachment",e);if(!n.ok){const t=JSON.stringify(n);throw new Error(`Invalid response from API server: ${t}`)}return attachmentMetadataSchema.parse(await n.json())}async status(){return(await this.metadata()).status}initDownloader(){return new LazyValue(async()=>{const{downloadUrl:t,status:e}=await this.metadata();if("done"!==e.upload_status)throw new Error(`Expected attachment status "done", got "${e.upload_status}"`);const n=await fetch(t);if(200!==n.status){const t=await n.text();throw new Error(`Couldn't download attachment: ${t}`)}return await n.blob()})}},JSONAttachment=class extends Attachment{constructor(t,e){const{filename:n="data.json",pretty:r=!1,state:o}=e??{},a=globalThis.__BT_DATASET_PIPELINE_DEFER_JSON_ATTACHMENT__;if(a)return super({data:new Blob([]),filename:n,contentType:"application/json",state:o}),a(t,{filename:n,pretty:r});const i=r?JSON.stringify(t,null,2):JSON.stringify(t);super({data:new Blob([i],{type:"application/json"}),filename:n,contentType:"application/json",state:o})}};function logFeedbackImpl(t,e,n,{id:r,expected:o,scores:a,metadata:i,tags:s,comment:c,source:u}){const p=u??"external";if(!VALID_SOURCES.includes(p))throw new Error(`source must be one of ${VALID_SOURCES}`);if(isEmpty2(a)&&isEmpty2(o)&&isEmpty2(s)&&isEmpty2(c))throw new Error("At least one of scores, expected, tags, or comment must be specified");const l=validateAndSanitizeExperimentLogPartialArgs({scores:a,metadata:i,expected:o,tags:s}),{metadata:d,...m}=deepCopyEvent(l),g=Object.fromEntries(Object.entries(m).filter(([t,e])=>!isEmpty2(e))),f=async()=>new SpanComponentsV3({object_type:e,object_id:await n.get()}).objectIdFields();if(Object.keys(g).length>0){const e=new LazyValue(async()=>({id:r,...g,...await f(),[AUDIT_SOURCE_FIELD]:p,[AUDIT_METADATA_FIELD]:d,[IS_MERGE_FIELD]:!0}));t.bgLogger().log([e])}if(!isEmpty2(c)){const e=new LazyValue(async()=>({id:(0,import_uuid2.v4)(),created:(new Date).toISOString(),origin:{id:r},comment:{text:c},...await f(),[AUDIT_SOURCE_FIELD]:p,[AUDIT_METADATA_FIELD]:d}));t.bgLogger().log([e])}}function updateSpanImpl({state:t,parentObjectType:e,parentObjectId:n,id:r,root_span_id:o,span_id:a,event:i}){if(isEmpty2(o)!==isEmpty2(a))throw new Error("both root_span_id and span_id must be set, or neither");const s=deepCopyEvent(validateAndSanitizeExperimentLogPartialArgs({...i,id:r,...void 0!==o&&void 0!==a?{root_span_id:o,span_id:a}:{}})),c=async()=>new SpanComponentsV3({object_type:e,object_id:await n.get()}).objectIdFields(),u=new LazyValue(async()=>({id:r,...s,...await c(),[IS_MERGE_FIELD]:!0}));t.bgLogger().log([u])}function updateSpan({exported:t,state:e,...n}){const r=e??_globalState,o=SpanComponentsV4.fromStr(t);if(!o.data.row_id)throw new Error("Exported span must have a row id");updateSpanImpl({state:r,parentObjectType:o.data.object_type,parentObjectId:new LazyValue(spanComponentsToObjectIdLambda(r,o)),id:o.data.row_id,root_span_id:o.data.root_span_id,span_id:o.data.span_id,event:n})}function spanComponentsToObjectIdLambda(t,e){if(e.data.object_id){const t=e.data.object_id;return async()=>t}if(!e.data.compute_object_metadata_args)throw new Error("Impossible: must provide either objectId or computeObjectMetadataArgs");switch(e.data.object_type){case 1:throw new Error("Impossible: computeObjectMetadataArgs not supported for experiments");case 3:throw new Error("Impossible: computeObjectMetadataArgs not supported for prompt sessions");case 2:return async()=>(await computeLoggerMetadata(t,{...e.data.compute_object_metadata_args})).project.id;default:const n=e.data.object_type;throw new Error(`Unknown object type: ${n}`)}}async function spanComponentsToObjectId({components:t,state:e}){return await spanComponentsToObjectIdLambda(e??_globalState,t)()}var ERR_PERMALINK="https://braintrust.dev/error-generating-link";function getErrPermlink(t){return""==t?ERR_PERMALINK:`${ERR_PERMALINK}?msg=${encodeURIComponent(t)}`}function _getAppUrl(t){return t||isomorph_default.getEnv("BRAINTRUST_APP_URL")||"https://www.braintrust.dev"}function _getOrgName(t){return t||isomorph_default.getEnv("BRAINTRUST_ORG_NAME")||void 0}function _getLinkBaseUrl(t,e){const n=_getAppUrl(t.appUrl||e?.app_url),r=_getOrgName(t.orgName||e?.org_name);return r?`${n}/app/${r}`:null}async function permalink(t,e){if(""===t)return NOOP_SPAN_PERMALINK;const n=e?.state??_globalState,r=async()=>{if(e?.orgName)return e.orgName;if(await n.login({}),!n.orgName)throw new Error("provide-org-or-login");return n.orgName},o=async()=>{if(e?.appUrl)return e.appUrl;if(await n.login({}),!n.appUrl)throw new Error("provide-app-url-or-login");return n.appUrl};try{const e=SpanComponentsV4.fromStr(t),a=spanObjectTypeV3ToString(e.data.object_type),[i,s,c]=await Promise.all([r(),o(),spanComponentsToObjectId({components:e,state:n})]),u=e.data.row_id;if(!u)throw new Error("Span slug does not refer to an individual row");return`${s}/app/${i}/object?${new URLSearchParams({object_type:a,object_id:c,id:u})}`}catch(t){return getErrPermlink(t instanceof FailedHTTPResponse?`http-error-${t.status}`:t instanceof Error?t.message:String(t))}}function startSpanParentArgs(t){let e,n,r,o;const{parentSlug:a,propagatedState:i}=normalizeParent(t.parent,t.state);if(a){if(t.parentSpanIds)throw new Error("Cannot specify both parent and parentSpanIds");const s=SpanComponentsV4.fromStr(a);if(t.parentObjectType!==s.data.object_type)throw new Error(`Mismatch between expected span parent object type ${t.parentObjectType} and provided type ${s.data.object_type}`);e=t.parentObjectId,s.data.row_id&&parentSpanIdsUsable(s.data.span_id,s.data.root_span_id)&&(n={spanId:s.data.span_id,rootSpanId:s.data.root_span_id}),r=t.propagatedEvent??s.data.propagated_event??void 0;const c=t.propagatedState??i;if(c){const{braintrustParent:t,...e}=c;o=e}}else e=t.parentObjectId,n=t.parentSpanIds,r=t.propagatedEvent,o=t.propagatedState;return{parentObjectType:t.parentObjectType,parentObjectId:e,parentComputeObjectMetadataArgs:t.parentComputeObjectMetadataArgs,parentSpanIds:n,propagatedEvent:r,propagatedState:o}}var Logger=class{state;lazyMetadata;_asyncFlush;computeMetadataArgs;_linkArgs;lastStartTime;lazyId;calledStartSpan;kind="logger";constructor(t,e,n={}){this.lazyMetadata=e,this._asyncFlush=n.asyncFlush,this.computeMetadataArgs=n.computeMetadataArgs,this._linkArgs=n.linkArgs,this.lastStartTime=getCurrentUnixTimestamp(),this.lazyId=new LazyValue(async()=>await this.id),this.calledStartSpan=!1,this.state=t}get org_id(){return(async()=>(await this.lazyMetadata.get()).org_id)()}get project(){return(async()=>(await this.lazyMetadata.get()).project)()}get id(){return(async()=>(await this.project).id)()}get loggingState(){return this.state}parentObjectType(){return 2}log(t,e){if(this.calledStartSpan&&!e?.allowConcurrentWithSpans)throw new Error("Cannot run toplevel `log` method while using spans. To log to the span, call `logger.traced` and then log with `span.log`");const n=this.startSpanImpl({startTime:this.lastStartTime,event:t});this.lastStartTime=n.end();const r=n.id;return!0===this.asyncFlush?r:(async()=>(await this.flush(),r))()}traced(t,e){const{setCurrent:n,...r}=e??{},o=this.startSpan(r),a=runCatchFinally(()=>n??1?withCurrent(o,t):t(o),t=>{throw logError(o,t),t},()=>o.end());return this.asyncFlush?a:(async()=>{const t=await a;return await this.flush(),t})()}startSpan(t){return this.calledStartSpan=!0,this.startSpanImpl(t)}startSpanImpl(t){return new SpanImpl({...t,state:this.state,...startSpanParentArgs({state:this.state,parent:t?.parent,parentObjectType:this.parentObjectType(),parentObjectId:this.lazyId,parentComputeObjectMetadataArgs:this.computeMetadataArgs,parentSpanIds:t?.parentSpanIds,propagatedEvent:t?.propagatedEvent}),defaultRootType:"task"})}logFeedback(t){logFeedbackImpl(this.state,this.parentObjectType(),this.lazyId,t)}updateSpan(t){const{id:e,root_span_id:n,span_id:r,...o}=t;if(!e)throw new Error("Span id is required to update a span");updateSpanImpl({state:this.state,parentObjectType:this.parentObjectType(),parentObjectId:this.lazyId,id:e,root_span_id:n,span_id:r,event:o})}async export(){return new(getSpanComponentsClass())({object_type:this.parentObjectType(),...this.computeMetadataArgs&&!this.lazyId.hasSucceeded?{compute_object_metadata_args:this.computeMetadataArgs}:{object_id:await this.lazyId.get()}}).toStr()}async flush(){return await this.state.bgLogger().flush()}get asyncFlush(){return this._asyncFlush}_getLinkBaseUrl(){return _getLinkBaseUrl(this.state,this._linkArgs)}_getOtelParent(){const t=this.computeMetadataArgs?.project_id||this.lazyId.getSync().value;if(t)return`project_id:${t}`;const e=this.computeMetadataArgs?.project_name;return e?`project_name:${e}`:void 0}};function castLogger(t,e){if(void 0!==t){if(void 0!==e&&!!e!=!!t.asyncFlush)throw new Error(`Asserted asyncFlush setting ${e} does not match stored logger's setting ${t.asyncFlush}`);return t}}var logs3OverflowUploadSchema=import_v38.z.object({method:import_v38.z.enum(["PUT","POST"]),signedUrl:import_v38.z.string().url(),headers:import_v38.z.record(import_v38.z.string()).optional(),fields:import_v38.z.record(import_v38.z.string()).optional(),key:import_v38.z.string().min(1)});function constructLogs3Data(t){return`{"rows": ${constructJsonArray(t.map(t=>t.str))}, "api_version": 2}`}function constructLogs3OverflowRequest(t){return{rows:{type:LOGS3_OVERFLOW_REFERENCE_TYPE,key:t},api_version:2}}function pickLogs3OverflowObjectIds(t){const e={};for(const n of OBJECT_ID_KEYS)n in t&&(e[n]=t[n]);return e}async function uploadLogs3OverflowPayload(t,e,n=fetch){if("POST"===t.method){if(!t.fields)throw new Error("Missing logs3 overflow upload fields");if("undefined"==typeof FormData||"undefined"==typeof Blob)throw new Error("FormData is not available for logs3 overflow upload");const r=new FormData;for(const[e,n]of Object.entries(t.fields))r.append(e,n);const o=t.fields["Content-Type"]??"application/json";r.append("file",new Blob([e],{type:o}));const a={};for(const[e,n]of Object.entries(t.headers??{}))"content-type"!==e.toLowerCase()&&(a[e]=n);const i=await n(t.signedUrl,{method:"POST",headers:a,body:r});if(!i.ok){const t=await i.text().catch(()=>"");throw new Error(`Failed to upload logs3 overflow payload: ${i.status} ${t}`)}return}const r={...t.headers??{}};addAzureBlobHeaders(r,t.signedUrl);const o=await n(t.signedUrl,{method:"PUT",headers:r,body:e});if(!o.ok){const t=await o.text().catch(()=>"");throw new Error(`Failed to upload logs3 overflow payload: ${o.status} ${t}`)}}function stringifyWithOverflowMeta(t){const e=JSON.stringify(t),n=t;return{str:e,overflowMeta:{object_ids:pickLogs3OverflowObjectIds(n),is_delete:!0===n[OBJECT_DELETE_FIELD],input_row:{byte_size:utf8ByteLength2(e)}}}}function utf8ByteLength2(t){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(t).length:t.length}function now(){return(new Date).getTime()}var DEFAULT_FLUSH_BACKPRESSURE_BYTES=10485760,TestBackgroundLogger=class{items=[];maskingFunction=null;log(t){this.items.push(t)}setMaskingFunction(t){this.maskingFunction=t}async flush(){return Promise.resolve()}pendingFlushBytes(){return 0}flushBackpressureBytes(){return DEFAULT_FLUSH_BACKPRESSURE_BYTES}async drain(){const t=this.items;this.items=[];const e=[];for(const n of t)for(const t of n)e.push(await t.get());let n=mergeRowBatch(e);return this.maskingFunction&&(n=n.map(t=>{const e={...t};for(const n of REDACTION_FIELDS)if(void 0!==t[n]){const r=applyMaskingToField(this.maskingFunction,t[n],n);r instanceof MaskingError?(delete e[n],e.error?e.error=`${e.error}; ${r.errorMsg}`:e.error=r.errorMsg):e[n]=r}return e})),n}},BACKGROUND_LOGGER_BASE_SLEEP_TIME_S=1,HTTP_RETRY_BASE_SLEEP_TIME_S=1,HTTP_RETRY_JITTER_MS=200,BTQL_HTTP_RETRIES=3,RETRYABLE_HTTP_STATUS_CODES=new Set([500,502,503,504]);function isRetryableHTTPError(t){return!(t instanceof FailedHTTPResponse)||RETRYABLE_HTTP_STATUS_CODES.has(t.status)}function formatHTTPError(t){return t instanceof FailedHTTPResponse?`${t.status} ${t.text}`:t instanceof Error?t.message:String(t)}function getAbortReason(t){return t.reason??new Error("Request aborted")}async function waitForRetry(t,e){if(e){if(e.aborted)throw getAbortReason(e);await new Promise((n,r)=>{const o=()=>{clearTimeout(a),e.removeEventListener("abort",o),r(getAbortReason(e))},a=setTimeout(()=>{e.removeEventListener("abort",o),n()},t);e.addEventListener("abort",o,{once:!0}),e.aborted&&o()})}else await new Promise(e=>setTimeout(e,t))}var HTTPBackgroundLogger=class t{apiConn;queue;activeFlush=Promise.resolve();activeFlushResolved=!0;activeFlushError=void 0;onFlushError;maskingFunction=null;syncFlush=!1;maxRequestSizeOverride=null;_maxRequestSizePromise=null;defaultBatchSize=100;numTries=3;queueDropExceedingMaxsize=DEFAULT_QUEUE_SIZE;queueDropLoggingPeriod=60;failedPublishPayloadsDir=void 0;allPublishPayloadsDir=void 0;_flushBackpressureBytes=DEFAULT_FLUSH_BACKPRESSURE_BYTES;_pendingBytes=0;_disabled=!1;queueDropLoggingState={numDropped:0,lastLoggedTimestamp:0};constructor(t,e){e=e??{},this.apiConn=t;const n=Number(isomorph_default.getEnv("BRAINTRUST_SYNC_FLUSH"));isNaN(n)||(this.syncFlush=Boolean(n));const r=Number(isomorph_default.getEnv("BRAINTRUST_DEFAULT_BATCH_SIZE"));isNaN(r)||(this.defaultBatchSize=r);const o=Number(isomorph_default.getEnv("BRAINTRUST_MAX_REQUEST_SIZE"));isNaN(o)||(this.maxRequestSizeOverride=o);const a=Number(isomorph_default.getEnv("BRAINTRUST_NUM_RETRIES"));isNaN(a)||(this.numTries=a+1);const i=Number(isomorph_default.getEnv("BRAINTRUST_QUEUE_DROP_EXCEEDING_MAXSIZE"));isNaN(i)||(this.queueDropExceedingMaxsize=i),this.queue=new Queue(this.queueDropExceedingMaxsize);const s=Number(isomorph_default.getEnv("BRAINTRUST_QUEUE_DROP_LOGGING_PERIOD"));isNaN(s)||(this.queueDropLoggingPeriod=s),isomorph_default.getEnv("BRAINTRUST_LOG_FLUSH_CHUNK_SIZE")&&debugLogger.warn("BRAINTRUST_LOG_FLUSH_CHUNK_SIZE is deprecated and no longer has any effect. Log flushing now sends all items at once and batches them automatically. This environment variable will be removed in a future major release.");const c=Number(isomorph_default.getEnv("BRAINTRUST_FLUSH_BACKPRESSURE_BYTES"));!isNaN(c)&&c>0&&(this._flushBackpressureBytes=c);const u=isomorph_default.getEnv("BRAINTRUST_FAILED_PUBLISH_PAYLOADS_DIR");u&&(this.failedPublishPayloadsDir=u);const p=isomorph_default.getEnv("BRAINTRUST_ALL_PUBLISH_PAYLOADS_DIR");p&&(this.allPublishPayloadsDir=p),e.noExitFlush||isomorph_default.processOn("beforeExit",async()=>{await this.flush()}),this.onFlushError=e.onFlushError}setMaskingFunction(t){this.maskingFunction=t}pendingFlushBytes(){return this._pendingBytes}flushBackpressureBytes(){return this._flushBackpressureBytes}log(t){if(this._disabled)return;const e=this.queue.push(...t);this.syncFlush||this.triggerActiveFlush(),e.length&&(this.registerDroppedItemCount(e.length),(this.allPublishPayloadsDir||this.failedPublishPayloadsDir)&&this.dumpDroppedEvents(e))}getMaxRequestSize(){return this._maxRequestSizePromise||(this._maxRequestSizePromise=(async()=>{let t=null;try{const e=await this.apiConn.get(),n=await e.get_json("version");t=import_v38.z.object({logs3_payload_max_bytes:import_v38.z.number().nullish()}).parse(n).logs3_payload_max_bytes??null}catch(t){debugLogger.warn("Failed to fetch version info for payload limit:",t)}const e=null!==t&&t>0?t:null,n=null!==e;let r=DEFAULT_MAX_REQUEST_SIZE;return null!==this.maxRequestSizeOverride?r=null!==e?Math.min(this.maxRequestSizeOverride,e):this.maxRequestSizeOverride:null!==e&&(r=e),{maxRequestSize:r,canUseOverflow:n}})()),this._maxRequestSizePromise}async flush(){if(this.syncFlush&&this.triggerActiveFlush(),await this.activeFlush,this.activeFlushError){const t=this.activeFlushError;if(this.activeFlushError=void 0,this.syncFlush)throw t}}async flushOnce(t){if(this._disabled)return void this.queue.clear();const e=t?.batchSize??this.defaultBatchSize,n=this.queue.drain();0!==n.length&&(await this.flushWrappedItemsChunk(n,e),this.queue.length()>0&&await this.flushOnce(t))}async flushWrappedItemsChunk(t,e){if(!t.length)return;const[n,r]=await this.unwrapLazyValues(t);if(0===n.length)return;let o=0;const a=n.map(t=>{const e=stringifyWithOverflowMeta(t);return o+=e.str.length,e});this._pendingBytes+=o;const i=await this.getMaxRequestSize(),s=batchItems({items:a,batchMaxNumItems:e,batchMaxNumBytes:i.maxRequestSize/2,getByteSize:t=>t.str.length}).map(t=>(async()=>{try{return await this.submitLogsRequest(t,i),{type:"success"}}catch(t){return{type:"error",value:t}}})()),c=await Promise.all(s);this._pendingBytes=Math.max(0,this._pendingBytes-o);const u=c.map(t=>"success"===t.type?void 0:t.value).filter(t=>void 0!==t);if(u.length)throw new AggregateError(u,"Encountered the following errors while logging:");const p=[];for(const t of r)try{const e=await t.upload();if("error"===e.upload_status)throw new Error(e.error_message)}catch(t){p.push(t)}if(1===p.length)throw p[0];if(p.length>1)throw new AggregateError(p,"Encountered the following errors while uploading attachments:")}async unwrapLazyValues(t){for(let e=0;e<this.numTries;++e)try{const e=await Promise.all(t.map(t=>t.get())),n=[];e.forEach(t=>extractAttachments(t,n));let r=mergeRowBatch(e);return this.maskingFunction&&(r=r.map(t=>{const e={...t};for(const n of REDACTION_FIELDS)if(void 0!==t[n]){const r=applyMaskingToField(this.maskingFunction,t[n],n);r instanceof MaskingError?(delete e[n],e.error?e.error=`${e.error}; ${r.errorMsg}`:e.error=r.errorMsg):e[n]=r}return e})),[r,n]}catch(t){let n="Encountered error when constructing records to flush";const r=e+1<this.numTries;if(r&&(n+=". Retrying"),debugLogger.warn(n),!r)throw debugLogger.warn(`Failed to construct log records to flush after ${this.numTries} attempts. Dropping batch`),t;{debugLogger.warn(t);const n=BACKGROUND_LOGGER_BASE_SLEEP_TIME_S*2**e;debugLogger.info(`Sleeping for ${n}s`),await new Promise(t=>setTimeout(t,1e3*n))}}throw new Error("Impossible")}async requestLogs3OverflowUpload(t,e){let n;try{n=await t.post_json("logs3/overflow",{content_type:"application/json",size_bytes:e.sizeBytes,rows:e.rows})}catch(t){const e=JSON.stringify(t);throw new Error(`Failed to request logs3 overflow upload URL: ${e}`)}try{return logs3OverflowUploadSchema.parse(n)}catch(t){if(t instanceof import_v38.ZodError){const e=JSON.stringify(t.flatten());throw new Error(`Invalid response from API server: ${e}`)}throw t}}async _uploadLogs3OverflowPayload(t,e,n){await uploadLogs3OverflowPayload(e,n,t.fetch.bind(t))}async submitLogsRequest(e,{maxRequestSize:n,canUseOverflow:r}){const o=await this.apiConn.get(),a=constructLogs3Data(e),i=utf8ByteLength2(a),s=r&&i>n;this.allPublishPayloadsDir&&await t.writePayloadToDir({payloadDir:this.allPublishPayloadsDir,payload:a});let c=null;const u=s?e.map(t=>t.overflowMeta):null;for(let e=0;e<this.numTries;e++){const n=now();let r;try{if(u){if(!c){const t=await this.requestLogs3OverflowUpload(o,{rows:u,sizeBytes:i});await this._uploadLogs3OverflowPayload(o,t,a),c=t}await o.post_json("logs3",constructLogs3OverflowRequest(c.key))}else await o.post_json("logs3",a)}catch(t){r=t}if(void 0===r)return;const s=e+1<this.numTries,p=s?"":" Retrying",l=(()=>r instanceof FailedHTTPResponse?`${r.status} (${r.text}): ${r.data}`:`${r}`)(),d=`log request failed. Elapsed time: ${(now()-n)/1e3} seconds. Payload size: ${i}.${p}\nError: ${l}`;if(!s&&this.failedPublishPayloadsDir&&(await t.writePayloadToDir({payloadDir:this.failedPublishPayloadsDir,payload:a}),this.logFailedPayloadsDir()),!s)throw debugLogger.warn(`log request failed after ${this.numTries} retries. Dropping batch`),new Error(d);if(debugLogger.warn(d),s){const t=BACKGROUND_LOGGER_BASE_SLEEP_TIME_S*2**e;debugLogger.info(`Sleeping for ${t}s`),await new Promise(e=>setTimeout(e,1e3*t))}}}registerDroppedItemCount(t){if(t<=0)return;this.queueDropLoggingState.numDropped+=t;const e=getCurrentUnixTimestamp();e-this.queueDropLoggingState.lastLoggedTimestamp>this.queueDropLoggingPeriod&&(debugLogger.warn(`Dropped ${this.queueDropLoggingState.numDropped} elements due to full queue`),this.failedPublishPayloadsDir&&this.logFailedPayloadsDir(),this.queueDropLoggingState.numDropped=0,this.queueDropLoggingState.lastLoggedTimestamp=e)}async dumpDroppedEvents(e){const n=[this.allPublishPayloadsDir,this.failedPublishPayloadsDir].reduce((t,e)=>e?t.concat([e]):t,new Array);if(e.length&&n.length)try{const[r,o]=await this.unwrapLazyValues(e),a=constructLogs3Data(r.map(t=>stringifyWithOverflowMeta(t))),i=`{"data": ${a}, "attachments": ${JSON.stringify(o.map(t=>t.debugInfo()))}}\n`;for(const e of n)await t.writePayloadToDir({payloadDir:e,payload:i})}catch(t){debugLogger.error(t)}}static async writePayloadToDir({payloadDir:t,payload:e}){if(!(isomorph_default.pathJoin&&isomorph_default.mkdir&&isomorph_default.writeFile))return void debugLogger.warn("Cannot dump payloads: filesystem-operations not supported on this platform");const n=isomorph_default.pathJoin(t,`payload_${getCurrentUnixTimestamp()}_${(0,import_uuid2.v4)().slice(0,8)}.json`);try{await isomorph_default.mkdir(t,{recursive:!0}),await isomorph_default.writeFile(n,e)}catch(t){debugLogger.error(`Failed to write failed payload to output file ${n}:\n`,t)}}triggerActiveFlush(){this.activeFlushResolved&&(this.activeFlushResolved=!1,this.activeFlushError=void 0,this.activeFlush=(async()=>{try{await this.flushOnce()}catch(t){if(t instanceof AggregateError)for(const e of t.errors)this.onFlushError?.(e);else this.onFlushError?.(t);this.activeFlushError=t}finally{this.activeFlushResolved=!0}})(),(0,import_functions.waitUntil)(this.activeFlush))}logFailedPayloadsDir(){debugLogger.warn(`Logging failed payloads to ${this.failedPublishPayloadsDir}`)}internalReplaceApiConn(t){this.apiConn=new LazyValue(async()=>t)}disable(){this._disabled=!0}enforceQueueSizeLimit(t){this.queue.enforceQueueSizeLimit(t)}};function isDatasetSnapshotNameLookup(t){return"snapshotName"in t}function assertDatasetSnapshotLookup(t){if(void 0!==t.snapshotName===(void 0!==t.xactId))throw new Error("Exactly one of snapshotName or xactId must be provided")}function getExperimentDatasetFilter({dataset:t,_internal_btql:e}){if(void 0!==e)return e;if(!(t instanceof Dataset2))return;const n=Reflect.get(t,"_internal_btql");return isObject(n)?n:void 0}function getInternalBtqlLimit(t){const e=t?.limit;return"number"==typeof e?e:void 0}function init(t,e){const n=(()=>{if("string"==typeof t)return{...e,project:t};if(void 0!==e)throw new Error("Cannot specify options struct as both parameters. Must call either init(project, options) or init(options).");return t})(),{project:r,experiment:o,description:a,dataset:i,_internal_btql:s,parameters:c,baseExperiment:u,isPublic:p,open:l,update:d,appUrl:m,apiKey:g,orgName:f,forceLogin:h,fetch:_,metadata:y,tags:v,gitMetadataSettings:b,projectId:S,baseExperimentId:T,repoInfo:C,state:A}=n;if(!r&&!S)throw new Error("Must specify at least one of project or projectId");if(l&&d)throw new Error("Cannot open and update an experiment at the same time");const w=A??_globalState;if(w.enforceQueueSizeLimit(!1),l){if(isEmpty2(o))throw new Error("Cannot open an experiment without specifying its name");const t=new LazyValue(async()=>{await w.login({apiKey:g,appUrl:m,orgName:f,fetch:_,forceLogin:h});const t={project_name:r,project_id:S,org_name:w.orgName,experiment_name:o},e=await w.appConn().post_json("api/experiment/get",t);if(0===e.length)throw new Error(`Experiment ${o} not found in project ${S??r}.`);const n=e[0];return{project:{id:n.project_id,name:r??"UNKNOWN_PROJECT",fullInfo:{}},experiment:{id:n.id,name:n.name,fullInfo:n}}});return new ReadonlyExperiment(A??_globalState,t)}const I=new LazyValue(async()=>{await w.login({apiKey:g,appUrl:m,orgName:f});const t={project_name:r,project_id:S,org_id:w.orgId,update:d};o&&(t.experiment_name=o),a&&(t.description=a);const e=await(async()=>{if(C)return C;const t=null==w.gitMetadataSettings?b??{collect:"none"}:mergeGitMetadataSettings(w.gitMetadataSettings,b??{collect:"all"});return await isomorph_default.getRepoInfo(t)})();if(e&&(t.repo_info=e),T?t.base_exp_id=T:u?t.base_experiment=u:t.ancestor_commits=await isomorph_default.getPastNAncestors(),void 0!==i){const e=await serializeDatasetForExperiment({dataset:i,state:w});t.dataset_id=e.datasetId,void 0!==e.datasetVersion&&(t.dataset_version=e.datasetVersion)}const n=getExperimentDatasetFilter({dataset:i,_internal_btql:s});void 0!==n&&(t.internal_metadata={dataset_filter:n}),void 0!==c&&(RemoteEvalParameters.isParameters(c)?(t.parameters_id=c.id,t.parameters_version=c.version):(t.parameters_id=c.id,void 0!==c.version&&(t.parameters_version=c.version))),void 0!==p&&(t.public=p),y&&(t.metadata=y),v&&(validateTags(v),t.tags=v);let l=null;for(;;)try{l=await w.appConn().post_json("api/experiment/register",t);break}catch(e){if(!t.base_experiment||!`${"data"in e&&e.data}`.includes("base experiment"))throw e;debugLogger.forState(w).warn(`Base experiment ${t.base_experiment} not found.`),delete t.base_experiment}return{project:{id:l.project.id,name:l.project.name,fullInfo:l.project},experiment:{id:l.experiment.id,name:l.experiment.name,created:l.experiment.created,fullInfo:l.experiment}}}),E=new Experiment2(w,I,void 0!==i?i:void 0);return(n.setCurrent??1)&&(w.currentExperiment=E),E}function initExperiment(t,e){return init((()=>{if("string"==typeof t)return{...e,project:t};if(void 0!==e)throw new Error("Cannot specify options struct as both parameters. Must call either init(project, options) or init(options).");return t})())}function withExperiment(t,e,n={}){debugLogger.forState(n.state).warn("withExperiment is deprecated and will be removed in a future version of braintrust. Simply create the experiment with `init`.");return e(init(t,n))}function withLogger(t,e={}){debugLogger.forState(e.state).warn("withLogger is deprecated and will be removed in a future version of braintrust. Simply create the logger with `initLogger`.");return t(initLogger(e))}async function getDatasetSnapshots(t){const{state:e,datasetId:n}=t;return DatasetSnapshot.array().parse(await e.appConn().post_json("api/dataset_snapshot/get",{dataset_id:n,..."snapshotName"in t?{name:t.snapshotName}:{},..."xactId"in t?{xact_id:t.xactId}:{}}))}async function getDatasetSnapshot(t){assertDatasetSnapshotLookup(t);const e=await getDatasetSnapshots(t);if(e.length>1)throw new Error(isDatasetSnapshotNameLookup(t)?`Expected a unique dataset snapshot named "${t.snapshotName}" for ${t.datasetId}`:`Expected a unique dataset snapshot for xact_id "${t.xactId}" in ${t.datasetId}`);return e[0]}function normalizeDatasetSelection({version:t,environment:e,snapshotName:n}){return void 0!==t?{version:t}:void 0!==n?{snapshotName:n}:void 0!==e?{environment:e}:{}}async function resolveDatasetSnapshotName({state:t,datasetId:e,snapshotName:n}){const r=await getDatasetSnapshot({state:t,datasetId:e,snapshotName:n});if(void 0===r)throw new Error(`Dataset snapshot "${n}" not found for ${e}`);return r.xact_id}async function resolveDatasetSnapshotNameForMetadata({state:t,lazyMetadata:e,snapshotName:n}){const r=await e.get();return await resolveDatasetSnapshotName({state:t,datasetId:r.dataset.id,snapshotName:n})}async function resolveDatasetEnvironment({state:t,datasetId:e,environment:n}){const r=`environment-object/dataset/${e}/${encodeURIComponent(n)}`,o=null==t.orgName?await t.apiConn().get_json(r):await t.apiConn().get_json(r,{org_name:t.orgName});return import_v38.z.object({object_version:import_v38.z.string()}).parse(o).object_version}async function resolveDatasetEnvironmentForMetadata({state:t,lazyMetadata:e,environment:n}){const r=await e.get();return await resolveDatasetEnvironment({state:t,datasetId:r.dataset.id,environment:n})}async function serializeDatasetForExperiment({dataset:t,state:e}){if(!Dataset2.isDataset(t)){const n=normalizeDatasetSelection(t);return void 0!==n.version?{datasetId:t.id,datasetVersion:n.version}:void 0!==n.snapshotName?{datasetId:t.id,datasetVersion:await resolveDatasetSnapshotName({state:e,datasetId:t.id,snapshotName:n.snapshotName})}:void 0!==n.environment?{datasetId:t.id,datasetVersion:await resolveDatasetEnvironment({state:e,datasetId:t.id,environment:n.environment})}:{datasetId:t.id}}const n=await t.toEvalData(),r=normalizeDatasetSelection({version:n.dataset_version,environment:n.dataset_environment,snapshotName:n.dataset_snapshot_name});if(void 0!==r.version)return{datasetId:n.dataset_id,datasetVersion:r.version};const o=await t.version();return void 0!==o?{datasetId:n.dataset_id,datasetVersion:o}:{datasetId:n.dataset_id}}function initDataset(t,e){const n=(()=>{if("string"==typeof t)return{...e,project:t};if(void 0!==e)throw new Error("Cannot specify options struct as both parameters. Must call either initDataset(project, options) or initDataset(options).");return t})(),{project:r,dataset:o,description:a,version:i,snapshotName:s,environment:c,appUrl:u,apiKey:p,orgName:l,fetch:d,forceLogin:m,projectId:g,metadata:f,useOutput:h,state:_,_internal_btql:y}=n,v=normalizeDatasetSelection({version:i,environment:c,snapshotName:s}),b=v.version,S=v.environment,T=v.snapshotName,C=globalThis.__bt_eval_internal_btql,A=void 0===C?y:void 0===y?C:isObject(y)?{...C,...y}:y,w=_??_globalState,I=new LazyValue(async()=>{await w.login({orgName:l,apiKey:p,appUrl:u,fetch:d,forceLogin:m});const t={org_id:w.orgId,project_name:r,project_id:g,dataset_name:o,description:a,metadata:f},e=await w.appConn().post_json("api/dataset/register",t);return{project:{id:e.project.id,name:e.project.name,fullInfo:e.project},dataset:{id:e.dataset.id,name:e.dataset.name,fullInfo:e.dataset}}}),E=void 0!==b?b:void 0!==T?new LazyValue(async()=>await resolveDatasetSnapshotNameForMetadata({state:w,lazyMetadata:I,snapshotName:T})):void 0!==S?new LazyValue(async()=>await resolveDatasetEnvironmentForMetadata({state:w,lazyMetadata:I,environment:S})):void 0;return new Dataset2(_??_globalState,I,"string"==typeof E?E:void 0,h,A,E instanceof LazyValue||void 0!==S||void 0!==T?{...E instanceof LazyValue?{lazyPinnedVersion:E}:{},...void 0!==S?{pinnedEnvironment:S}:{},...void 0!==T?{pinnedSnapshotName:T}:{}}:void 0)}function withDataset(t,e,n={}){debugLogger.forState(n.state).warn("withDataset is deprecated and will be removed in a future version of braintrust. Simply create the dataset with `initDataset`.");return e(initDataset(t,n))}async function computeLoggerMetadata(t,{project_name:e,project_id:n}){await t.login({});const r=t.orgId;if(isEmpty2(n)){const n=await t.appConn().post_json("api/project/register",{project_name:e||GLOBAL_PROJECT,org_id:r});return{org_id:r,project:{id:n.project.id,name:n.project.name,fullInfo:n.project}}}if(isEmpty2(e)){const e=await t.appConn().get_json("api/project",{id:n});return{org_id:r,project:{id:n,name:e.name,fullInfo:e.project}}}return{org_id:r,project:{id:n,name:e,fullInfo:{}}}}function initLogger(t={}){const{projectName:e,projectId:n,asyncFlush:r,appUrl:o,apiKey:a,orgName:i,forceLogin:s,debugLogLevel:c,fetch:u,state:p}=t||{},l=void 0===r||r,d={project_name:e,project_id:n},m={org_name:i,app_url:o,project_name:e,project_id:n},g=p??_globalState;g.setDebugLogLevel(c),g.enforceQueueSizeLimit(!0);const f=new LazyValue(async()=>(await g.login({orgName:i,apiKey:a,appUrl:o,forceLogin:s,fetch:u}),computeLoggerMetadata(g,d))),h=new Logger(g,f,{asyncFlush:l,computeMetadataArgs:d,linkArgs:m});return(t.setCurrent??1)&&(g.currentLogger=h),h}async function loadPrompt({projectName:t,projectId:e,slug:n,version:r,environment:o,id:a,defaults:i,noTrace:s=!1,appUrl:c,apiKey:u,orgName:p,fetch:l,forceLogin:d,state:m}){const g=r?{version:r}:o?{environment:o}:{};if(a);else{if(isEmpty2(t)&&isEmpty2(e))throw new Error("Must specify either projectName or projectId");if(isEmpty2(n))throw new Error("Must specify slug")}const f=m??_globalState;let h;try{await f.login({orgName:p,apiKey:u,appUrl:c,fetch:l,forceLogin:d}),a?(h=await f.apiConn().get_json(`v1/prompt/${a}`,g),h&&(h={objects:[h]})):h=await f.apiConn().get_json("v1/prompt",{project_name:t,project_id:e,slug:n,...g})}catch(i){if(r||o)throw new Error(`Prompt not found with specified parameters: ${i}`);let s;if(debugLogger.forState(f).warn("Failed to load prompt, attempting to fall back to cache:",i),a){if(s=await f.promptCache.get({id:a}),!s)throw new Error(`Prompt with id ${a} not found (not found on server or in local cache): ${i}`)}else if(s=await f.promptCache.get({slug:n,projectId:e,projectName:t,version:r??"latest"}),!s)throw new Error(`Prompt ${n} (version ${r??"latest"}) not found in ${[t??e]} (not found on server or in local cache): ${i}`);return s}if(!("objects"in h)||0===h.objects.length)throw a?new Error(`Prompt with id ${a} not found.`):new Error(`Prompt ${n} not found in ${[t??e]}`);if(h.objects.length>1)throw a?new Error(`Multiple prompts found with id ${a}. This should never happen.`):new Error(`Multiple prompts found with slug ${n} in project ${t??e}. This should never happen.`);const _=Prompt.parse(h.objects[0]),y=new Prompt2(_,i||{},s);try{a?await f.promptCache.set({id:a},y):n&&await f.promptCache.set({slug:n,projectId:e,projectName:t,version:r??"latest"},y)}catch(t){debugLogger.forState(f).warn("Failed to set prompt in cache:",t)}return y}async function loadParameters({projectName:t,projectId:e,slug:n,version:r,environment:o,id:a,appUrl:i,apiKey:s,orgName:c,fetch:u,forceLogin:p,state:l}){const d=r?{version:r}:o?{environment:o}:{};if(a);else{if(isEmpty2(t)&&isEmpty2(e))throw new Error("Must specify either projectName or projectId");if(isEmpty2(n))throw new Error("Must specify slug")}const m=l??_globalState;let g;try{await m.login({orgName:c,apiKey:s,appUrl:i,fetch:u,forceLogin:p}),a?(g=await m.apiConn().get_json(`v1/function/${a}`,{...d}),g&&(g={objects:[g]})):g=await m.apiConn().get_json("v1/function",{project_name:t,project_id:e,slug:n,function_type:"parameters",...d})}catch(i){if(r||o)throw new Error(`Parameters not found with specified parameters: ${i}`);let s;if(debugLogger.forState(m).warn("Failed to load parameters, attempting to fall back to cache:",i),a){if(s=await m.parametersCache.get({id:a}),!s)throw new Error(`Parameters with id ${a} not found (not found on server or in local cache): ${i}`)}else if(s=await m.parametersCache.get({slug:n,projectId:e,projectName:t,version:r??"latest"}),!s)throw new Error(`Parameters ${n} (version ${r??"latest"}) not found in ${[t??e]} (not found on server or in local cache): ${i}`);return s}if(!("objects"in g)||0===g.objects.length)throw a?new Error(`Parameters with id ${a} not found.`):new Error(`Parameters ${n} not found in ${[t??e]}`);if(g.objects.length>1)throw a?new Error(`Multiple parameters found with id ${a}. This should never happen.`):new Error(`Multiple parameters found with slug ${n} in project ${t??e}. This should never happen.`);const f=parametersRowSchema.parse(g.objects[0]),h=new RemoteEvalParameters(f);try{a?await m.parametersCache.set({id:a},h):n&&await m.parametersCache.set({slug:n,projectId:e,projectName:t,version:r??"latest"},h)}catch(t){debugLogger.forState(m).warn("Failed to set parameters in cache:",t)}return h}function setMaskingFunction(t){_internalGetGlobalState().setMaskingFunction(t)}async function login(t={}){const{forceLogin:e=!1}=t||{};_internalGetGlobalState()||_internalSetInitialState();const n=_internalGetGlobalState();if(n.setDebugLogLevel(t.debugLogLevel),n.loggedIn&&!e){let e=function(t,e,n){if(!isEmpty2(e)&&!isEmpty2(n)&&e!==n)throw new Error(`Re-logging in with different ${t} (${e}) than original (${n}). To force re-login, pass \`forceLogin: true\``)};return e("appUrl",t.appUrl,n.appUrl),e("apiKey",t.apiKey?HTTPConnection.sanitize_token(t.apiKey):void 0,n.loginToken),e("orgName",t.orgName,n.orgName),n}return await n.login(t),n}async function loginToState(t={}){const{appUrl:e=isomorph_default.getEnv("BRAINTRUST_APP_URL")||"https://www.braintrust.dev",apiKey:n,orgName:r=isomorph_default.getEnv("BRAINTRUST_ORG_NAME"),fetch:o=globalThis.fetch}=t||{},a=void 0!==n?n:await isomorph_default.getBraintrustApiKey(),i=isomorph_default.getEnv("BRAINTRUST_APP_PUBLIC_URL")||e,s=new BraintrustState(t);s.resetLoginInfo(),s.appUrl=e,s.appPublicUrl=i;let c=null;if(!a)throw new Error("Please specify an api key (e.g. by setting BRAINTRUST_API_KEY).");if(a===TEST_API_KEY){const t=[{id:"test-org-id",name:"test-org-name",api_url:"https://braintrust.dev/fake-api-url"}];return s.loggedIn=!0,s.loginToken=TEST_API_KEY,_saveOrgInfo(s,t,t[0].name),s}{const t=await checkResponse(await o(_urljoin(s.appUrl,"/api/apikey/login"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`}}));if(_saveOrgInfo(s,(await t.json()).org_info,r),!s.apiUrl)throw r?new Error(`Unable to log into organization '${r}'. Are you sure this credential is scoped to the organization?`):new Error("Unable to log into any organization with the provided credential.");if(c=s.apiConn(),c.set_token(a),!c)throw new Error("Conn should be set at this point (a bug)");c.make_long_lived(),s.appConn().set_token(a),s.proxyUrl&&s.proxyConn().set_token(a),s.loginToken=c.token,s.loggedIn=!0,s.loginReplaceApiConn(c)}return s}function log(t){debugLogger.warn("braintrust.log is deprecated and will be removed in a future version of braintrust. Use `experiment.log` instead.");const e=currentExperiment();if(!e)throw new Error("Not initialized. Please call init() first");return e.log(t)}async function summarize(t={}){debugLogger.warn("braintrust.summarize is deprecated and will be removed in a future version of braintrust. Use `experiment.summarize` instead.");const e=currentExperiment();if(!e)throw new Error("Not initialized. Please call init() first");return await e.summarize(t)}function currentExperiment(t){return(t?.state??_globalState).currentExperiment}function currentLogger(t){return castLogger((t?.state??_globalState).currentLogger,t?.asyncFlush)}function currentSpan(t){return(t?.state??_globalState).contextManager.getCurrentSpan()??NOOP_SPAN}function getSpanParentObjectAndPropagatedState(t){const e=t?.state??_globalState,n=currentSpan({state:e});if(!Object.is(n,NOOP_SPAN))return{parentObject:n,propagatedState:void 0};const r=t?.parent??e.currentParent.getStore(),{parentSlug:o,propagatedState:a}=normalizeParent(r,e);if(o)return{parentObject:SpanComponentsV4.fromStr(o),propagatedState:a};const i=currentExperiment();if(i)return{parentObject:i,propagatedState:void 0};const s=currentLogger(t);return s?{parentObject:s,propagatedState:void 0}:{parentObject:NOOP_SPAN,propagatedState:void 0}}function getSpanParentObject(t){return getSpanParentObjectAndPropagatedState(t).parentObject}function currentBraintrustParent(t){const e=t??_globalState,n=currentExperiment({state:e});if(n)try{return n._getOtelParent()??void 0}catch{return}const r=currentLogger({state:e});if(r)try{return r._getOtelParent()??void 0}catch{return}}function braintrustParentToComponents(t){if(t){if(t.startsWith("project_id:")){const e=t.slice(11);return e?{objectType:2,objectId:e,computeArgs:void 0}:void 0}if(t.startsWith("project_name:")){const e=t.slice(13);return e?{objectType:2,objectId:void 0,computeArgs:{project_name:e}}:void 0}if(t.startsWith("experiment_id:")){const e=t.slice(14);return e?{objectType:1,objectId:e,computeArgs:void 0}:void 0}}}function isMutableHeaderTupleArray(t){return Array.isArray(t)&&t.every(t=>Array.isArray(t)&&"string"==typeof t[0])}function setHeader(t,e,n){if(isMutableHeaderTupleArray(t)){const r=e.toLowerCase();for(let e=t.length-1;e>=0;e--)t[e][0].toLowerCase()===r&&t.splice(e,1);return void t.push([e,n])}const r=t.set;if("function"==typeof r){const o=t.delete;if("function"==typeof o)try{o.call(t,e)}catch{}return void r.call(t,e,n)}const o=t.setHeader;if("function"==typeof o){const r=t.removeHeader;if("function"==typeof r)try{r.call(t,e)}catch{}return void o.call(t,e,n)}const a=t.header;if("function"==typeof a){const r=t.delete;if("function"==typeof r)try{r.call(t,e)}catch{}const o=t.removeHeader;if("function"==typeof o)try{o.call(t,e)}catch{}return void a.call(t,e,n)}const i=t,s=e.toLowerCase();for(const t of Object.keys(i))t!==e&&t.toLowerCase()===s&&delete i[t];i[e]=n}function deleteHeader(t,e){const n=e.toLowerCase();if(isMutableHeaderTupleArray(t)){for(let e=t.length-1;e>=0;e--)t[e][0].toLowerCase()===n&&t.splice(e,1);return}const r=t.delete;if("function"==typeof r)try{return void r.call(t,e)}catch{}const o=t.removeHeader;if("function"==typeof o)try{return void o.call(t,e)}catch{}const a=t;for(const t of Object.keys(a))t.toLowerCase()===n&&delete a[t]}function _injectIntoCarrier(t,e){const n=e.propagatedState?.traceFlags,r=n?formatTraceparent(e.traceId,e.spanId,n):formatTraceparent(e.traceId,e.spanId);if(void 0===r)return;setHeader(t,TRACEPARENT_HEADER,r);const o=e.propagatedState?.tracestate;o&&setHeader(t,TRACESTATE_HEADER,o);const a=getHeader(t,BAGGAGE_HEADER),i=mergeBaggage(a,e.braintrustParent);void 0!==i?setHeader(t,BAGGAGE_HEADER,i):void 0!==a&&deleteHeader(t,BAGGAGE_HEADER)}function injectTraceContext(t,e){const n=t??{},r=e?.span??currentSpan({state:e?.state});try{return r.inject(n)}catch(t){return debugLogger.warn(`Error injecting trace context: ${t}`),n}}function extractTraceContextFromHeaders(t){if(!t)return;const e=getHeader(t,TRACEPARENT_HEADER);if(!e||void 0===parseTraceparent(e))return;const n={[TRACEPARENT_HEADER]:e},r=getHeader(t,BAGGAGE_HEADER);r&&(n[BAGGAGE_HEADER]=r);const o=getHeader(t,TRACESTATE_HEADER);return o&&(n[TRACESTATE_HEADER]=o),n}function resolveW3cParent(t,e){const n=getHeader(t,TRACEPARENT_HEADER),r=n?parseTraceparent(n):void 0;if(void 0===r)return{parentSlug:void 0,propagatedState:void 0};const{traceId:o,spanId:a,traceFlags:i}=r;let s;const c=getHeader(t,BAGGAGE_HEADER);if(c&&(s=parseBaggage(c)[BRAINTRUST_PARENT_KEY]),s||(s=currentBraintrustParent(e)),!s)return debugLogger.warn("Received traceparent without a braintrust.parent and no active logger/experiment; cannot route the trace. Starting a fresh local span instead."),{parentSlug:void 0,propagatedState:void 0};const u=braintrustParentToComponents(s);if(void 0===u)return debugLogger.warn(`Invalid braintrust.parent: ${JSON.stringify(s)}`),{parentSlug:void 0,propagatedState:void 0};const{objectType:p,objectId:l,computeArgs:d}=u,m=getHeader(t,TRACESTATE_HEADER);return{parentSlug:new SpanComponentsV4({object_type:p,...d?{compute_object_metadata_args:d}:{object_id:l},row_id:"bt-propagation",span_id:a,root_span_id:o}).toStr(),propagatedState:{tracestate:m,traceFlags:i,braintrustParent:s}}}function normalizeParent(t,e){return t&&"object"==typeof t?resolveW3cParent(t,e):{parentSlug:t??void 0,propagatedState:void 0}}function parentSpanIdsUsable(t,e){return Boolean(t)&&Boolean(e)}function logError(t,e){let n="<error>",r="";e instanceof Error?(n=e.message,r=e.stack||""):n=String(e),t.log({error:`${n}\n\n${r}`})}function traced(t,e){const{span:n,isSyncFlushLogger:r}=startSpanAndIsLogger(e),o=runCatchFinally(()=>e?.setCurrent??1?withCurrent(n,t):t(n),t=>{throw logError(n,t),t},()=>n.end());return void 0===e?.asyncFlush||e?.asyncFlush?o:(async()=>{const t=await o;return r&&await n.flush(),t})()}function isGeneratorFunction(t){return"[object GeneratorFunction]"===Object.prototype.toString.call(t)}function isAsyncGeneratorFunction(t){return"[object AsyncGeneratorFunction]"===Object.prototype.toString.call(t)}function wrapTracedSyncGenerator(t,e,n){const r=function*(...r){const o=startSpan(e);try{n||o.log({input:r});const e=isomorph_default.getEnv("BRAINTRUST_MAX_GENERATOR_ITEMS"),a=void 0!==e?Number(e):1e3;if(n||0===a){const e=generatorWithCurrent(o,t.apply(this,r));for(const t of e)yield t}else{let e=[],n=!1;const i=generatorWithCurrent(o,t.apply(this,r));try{for(const t of i)-1===a||!n&&e.length<a?e.push(t):(n=!0,e=[],debugLogger.warn(`Generator output exceeded limit of ${a} items, output not logged. Increase BRAINTRUST_MAX_GENERATOR_ITEMS or set to -1 to disable limit.`)),yield t;n||o.log({output:e})}catch(t){throw logError(o,t),!n&&e.length>0&&o.log({output:e}),t}}}finally{o.end()}};return Object.defineProperty(r,"name",{value:t.name}),r}function wrapTracedAsyncGenerator(t,e,n){const r=async function*(...r){const o=startSpan(e);try{n||o.log({input:r});const e=isomorph_default.getEnv("BRAINTRUST_MAX_GENERATOR_ITEMS"),a=void 0!==e?Number(e):1e3;if(n||0===a){const e=asyncGeneratorWithCurrent(o,t.apply(this,r));for await(const t of e)yield t}else{let e=[],n=!1;const i=asyncGeneratorWithCurrent(o,t.apply(this,r));try{for await(const t of i)-1===a||!n&&e.length<a?e.push(t):(n=!0,e=[],debugLogger.warn(`Generator output exceeded limit of ${a} items, output not logged. Increase BRAINTRUST_MAX_GENERATOR_ITEMS or set to -1 to disable limit.`)),yield t;n||o.log({output:e})}catch(t){throw logError(o,t),!n&&e.length>0&&o.log({output:e}),t}}}finally{o.end()}};return Object.defineProperty(r,"name",{value:t.name}),r}function wrapTraced(t,e){const n={name:t.name,type:"function",...e},r=e&&e.event&&"input"in e.event&&void 0!==e.event.input,o=e&&e.event&&void 0!==e.event.output,a=e?.noTraceIO||r||o;return isGeneratorFunction(t)?wrapTracedSyncGenerator(t,n,!!a):isAsyncGeneratorFunction(t)?wrapTracedAsyncGenerator(t,n,!!a):e?.asyncFlush?(...e)=>traced(n=>{r||n.log({input:e});const a=t(...e);if(!o){if(a instanceof Promise)return(async()=>{const t=await a;return n.log({output:t}),t})();n.log({output:a})}return a},n):(...e)=>traced(async n=>{r||n.log({input:e});const a=t(...e),i=await a;return o||n.log({output:i}),i},n)}var traceable=wrapTraced;function startSpan(t){return startSpanAndIsLogger(t).span}function _internalStartSpanWithInitialMerge(t){return startSpanAndIsLogger({...t,[INITIAL_SPAN_WRITE_AS_MERGE]:!0}).span}async function flush(t){const e=t?.state??_globalState;return await e.bgLogger().flush()}function setFetch(t){_internalGetGlobalState().setFetch(t)}function startSpanAndIsLogger(t){const e=t?.state??_globalState,{parentObject:n,propagatedState:r}=getSpanParentObjectAndPropagatedState({asyncFlush:t?.asyncFlush,parent:t?.parent,state:e});if(n instanceof SpanComponentsV3||n instanceof SpanComponentsV4){const o=n.data.row_id&&parentSpanIdsUsable(n.data.span_id,n.data.root_span_id)?{spanId:n.data.span_id,rootSpanId:n.data.root_span_id}:void 0,{parent:a,...i}=t??{};return{span:new SpanImpl({state:e,...i,parentObjectType:n.data.object_type,parentObjectId:new LazyValue(spanComponentsToObjectIdLambda(e,n)),parentComputeObjectMetadataArgs:n.data.compute_object_metadata_args??void 0,parentSpanIds:o,propagatedEvent:t?.propagatedEvent??n.data.propagated_event??void 0,propagatedState:r}),isSyncFlushLogger:2===n.data.object_type&&!1===t?.asyncFlush}}return{span:n.startSpan(t),isSyncFlushLogger:"logger"===n.kind&&!1===n.asyncFlush}}function withCurrent(t,e,n=void 0){return(n??_globalState).contextManager.runInContext(t,()=>e(t))}function*generatorWithCurrent(t,e,n=void 0){let r;for(;;){const o=withCurrent(t,()=>{try{return e.next(r)}catch(t){return{value:void 0,done:!0,error:t}}},n);if("error"in o)throw o.error;if(o.done)return o.value;r=yield o.value}}async function*asyncGeneratorWithCurrent(t,e,n=void 0){let r;for(;;){const o=await withCurrent(t,async()=>{try{return await e.next(r)}catch(t){return{value:void 0,done:!0,error:t}}},n);if("error"in o)throw o.error;if(o.done)return o.value;r=yield o.value}}function withParent(t,e,n=void 0){return(n??_globalState).currentParent.run(t,()=>e())}function _saveOrgInfo(t,e,n){if(0===e.length)throw new LoginInvalidOrgError("This user is not part of any organizations.");for(const r of e)if(void 0===n||r.name===n){t.orgId=r.id,t.orgName=r.name,t.apiUrl=isomorph_default.getEnv("BRAINTRUST_API_URL")??r.api_url,t.proxyUrl=isomorph_default.getEnv("BRAINTRUST_PROXY_URL")??r.proxy_url,t.gitMetadataSettings=r.git_metadata||void 0;break}if(void 0===t.orgId)throw new LoginInvalidOrgError(`Organization ${n} not found. Must be one of ${e.map(t=>t.name).join(", ")}`)}function validateTags(t){const e=new Set;for(const n of t){if("string"!=typeof n)throw new Error("tags must be strings");if(e.has(n))throw new Error(`duplicate tag: ${n}`);e.add(n)}}function validateAndSanitizeExperimentLogPartialArgs(t){if(t.scores){if(Array.isArray(t.scores))throw new Error("scores must be an object, not an array");for(const[e,n]of Object.entries(t.scores)){let r=n;if("string"!=typeof e)throw new Error("score names must be strings");if(null!=r){if("boolean"==typeof r&&(r=r?1:0,t.scores[e]=r),"number"!=typeof r)throw new Error("score values must be numbers");if(r<0||r>1)throw new Error("score values must be between 0 and 1")}}}if(t.metadata)for(const e of Object.keys(t.metadata))if("string"!=typeof e)throw new Error("metadata keys must be strings");if(t.metrics)for(const[e,n]of Object.entries(t.metrics)){if("string"!=typeof e)throw new Error("metric keys must be strings");if(void 0!==n&&"number"!=typeof n)throw new Error("metric values must be numbers")}if("input"in t&&t.input&&"inputs"in t&&t.inputs)throw new Error("Only one of input or inputs (deprecated) can be specified. Prefer input.");if("tags"in t&&t.tags&&validateTags(t.tags),"inputs"in t){const{inputs:e,...n}=t;return{input:e,...n}}return{...t}}function deepCopyEvent(t){const e=[],n="_bt_internal_saved_attachment_idx",r="_bt_internal_saved_attachment_marker",o=++deepCopyEventMarkerCounter,a=JSON.stringify(t,(t,a)=>{if(a instanceof SpanImpl||a instanceof NoopSpan)return"<span>";if(a instanceof Experiment2)return"<experiment>";if(a instanceof Dataset2)return"<dataset>";if(a instanceof Logger)return"<logger>";if(a instanceof BaseAttachment){const t=e.push(a);return{[n]:t-1,[r]:o}}return a instanceof ReadonlyAttachment?a.reference:a});return JSON.parse(a,(t,r)=>isDeepCopyAttachmentPlaceholder(r,o)?e[r[n]]:r)}var deepCopyEventMarkerCounter=0;function isDeepCopyAttachmentPlaceholder(t,e){if(!t||"object"!=typeof t||Array.isArray(t))return!1;const n=t;if(!Object.hasOwn(n,"_bt_internal_saved_attachment_idx")||!Object.hasOwn(n,"_bt_internal_saved_attachment_marker"))return!1;if(2!==Object.keys(n).length)return!1;const r=n._bt_internal_saved_attachment_idx,o=n._bt_internal_saved_attachment_marker;return Number.isInteger(r)&&r>=0&&o===e}function extractAttachments(t,e){for(const[n,r]of Object.entries(t))if(r)if(r instanceof BaseAttachment)e.push(r),t[n]=r.reference;else if(r?.type!==BRAINTRUST_ATTACHMENT||!r.key||r.uploader){if(r?.reference?.type===BRAINTRUST_ATTACHMENT&&r?.uploader){const o=new Attachment({data:r.dataDebugString,filename:r.reference.filename,contentType:r.reference.content_type});e.push(o),t[n]=o.reference;continue}r instanceof Object&&extractAttachments(r,e)}}function enrichAttachments(t,e){for(const[n,r]of Object.entries(t)){const o=AttachmentReference.safeParse(r);o.success?t[n]=new ReadonlyAttachment(o.data,e):r instanceof Object&&enrichAttachments(r,e)}return t}async function resolveAttachmentsToBase64(t,e){for(const[n,r]of Object.entries(t))r instanceof ReadonlyAttachment?t[n]=await r.asBase64Url():r instanceof Object&&await resolveAttachmentsToBase64(r,e);return t}function validateAndSanitizeExperimentLogFullArgs(t,e){if("input"in t&&!isEmpty2(t.input)&&"inputs"in t&&!isEmpty2(t.inputs)||!("input"in t)&&!("inputs"in t))throw new Error("Exactly one of input or inputs (deprecated) must be specified. Prefer input.");if(isEmpty2(t.output))throw new Error("output must be specified");if(isEmpty2(t.scores))throw new Error("scores must be specified");if(e&&void 0===t.datasetRecordId)throw new Error("datasetRecordId must be specified when using a dataset");if(!e&&void 0!==t.datasetRecordId)throw new Error("datasetRecordId cannot be specified when not using a dataset");return t}var DEFAULT_FETCH_BATCH_SIZE=1e3,MAX_BTQL_ITERATIONS=1e4,ObjectFetcher=class{constructor(t,e,n,r,o=!0){this.objectType=t,this.pinnedVersion=e,this.mutateRecord=n,this._internal_btql=r,this._internalBrainstoreRealtime=o}_fetchedData=void 0;get id(){throw new Error("ObjectFetcher subclasses must have an 'id' attribute")}async getState(){throw new Error("ObjectFetcher subclasses must have a 'getState' method")}getPinnedVersion(){return this.pinnedVersion}setPinnedVersion(t){this.pinnedVersion=t}getInternalBtql(){return this._internal_btql}async*fetchRecordsFromApi(t){const e=await this.getState(),n=await this.id,r=t??DEFAULT_FETCH_BATCH_SIZE,o=getInternalBtqlLimit(this._internal_btql),a=void 0!==t?t:o??r,i=Object.fromEntries(Object.entries(this._internal_btql??{}).filter(([t])=>"cursor"!==t&&"limit"!==t&&"select"!==t&&"from"!==t));let s,c=0;for(;;){const t=await e.apiConn().post("btql",{query:{select:[{op:"star"}],from:{op:"function",name:{op:"ident",name:[this.objectType]},args:[{op:"literal",value:n}]},cursor:s,limit:a,...i},use_columnstore:!1,brainstore_realtime:this._internalBrainstoreRealtime,query_source:`js_sdk_object_fetcher_${this.objectType}`,...void 0!==this.pinnedVersion?{version:this.pinnedVersion}:{}},{headers:{"Accept-Encoding":"gzip"}},BTQL_HTTP_RETRIES),r=await t.json(),o=this.mutateRecord;for(const t of r.data??[])yield o?o(t):t;if(!r.cursor)break;if(s=r.cursor,c++,c>MAX_BTQL_ITERATIONS)throw new Error("Too many BTQL iterations")}}async*fetch(t){if(void 0===this._fetchedData)for await(const e of this.fetchRecordsFromApi(t?.batchSize))yield e;else for(const t of this._fetchedData)yield t}[Symbol.asyncIterator](){return this.fetch()}async fetchedData(t){if(void 0===this._fetchedData){const e=[];for await(const n of this.fetchRecordsFromApi(t?.batchSize))e.push(n);this._fetchedData=e}return this._fetchedData||[]}clearCache(){this._fetchedData=void 0}async version(t){if(void 0!==this.pinnedVersion)return this.pinnedVersion;{let e;for await(const n of this.fetch(t)){const t=String(n[TRANSACTION_ID_FIELD]??"0");(void 0===e||t>e)&&(e=t)}return e}}},Experiment2=class extends ObjectFetcher{lazyMetadata;dataset;lastStartTime;lazyId;calledStartSpan;state;kind="experiment";constructor(t,e,n){super("experiment",void 0,e=>enrichAttachments(e,t)),this.lazyMetadata=e,this.dataset=n,this.lastStartTime=getCurrentUnixTimestamp(),this.lazyId=new LazyValue(async()=>await this.id),this.calledStartSpan=!1,this.state=t}get id(){return(async()=>(await this.lazyMetadata.get()).experiment.id)()}get loggingState(){return this.state}async _waitForId(){await this.lazyId.get().catch(()=>{})}get name(){return(async()=>(await this.lazyMetadata.get()).experiment.name)()}get project(){return(async()=>(await this.lazyMetadata.get()).project)()}async _getBaseExperimentId(){const t=(await this.lazyMetadata.get()).experiment.fullInfo.base_exp_id;return"string"==typeof t&&t?t:void 0}parentObjectType(){return 1}async getState(){return await this.lazyMetadata.get(),this.state}log(t,e){if(this.calledStartSpan&&!e?.allowConcurrentWithSpans)throw new Error("Cannot run toplevel `log` method while using spans. To log to the span, call `experiment.traced` and then log with `span.log`");t=validateAndSanitizeExperimentLogFullArgs(t,!!this.dataset);const n=this.startSpanImpl({startTime:this.lastStartTime,event:t});return this.lastStartTime=n.end(),n.id}traced(t,e){const{setCurrent:n,...r}=e??{},o=this.startSpan(r);return runCatchFinally(()=>n??1?withCurrent(o,t):t(o),t=>{throw logError(o,t),t},()=>o.end())}startSpan(t){return this.calledStartSpan=!0,this.startSpanImpl(t)}startSpanImpl(t){return new SpanImpl({...t,state:this.state,...startSpanParentArgs({state:this.state,parent:t?.parent,parentObjectType:this.parentObjectType(),parentObjectId:this.lazyId,parentComputeObjectMetadataArgs:void 0,parentSpanIds:void 0,propagatedEvent:t?.propagatedEvent}),defaultRootType:"eval"})}async fetchBaseExperiment(){const t=(await this.getState()).appConn();try{const e=await t.post("/api/base_experiment/get_id",{id:await this.id}),n=await e.json();return{id:n.base_exp_id,name:n.base_exp_name}}catch(t){if(t instanceof FailedHTTPResponse&&400===t.status)return null;throw t}}async summarize(t={}){const{summarizeScores:e=!0,comparisonExperimentId:n}=t||{};let r=n;const o=await this.getState(),a=`${o.appPublicUrl}/app/${encodeURIComponent(o.orgName)}/p/${encodeURIComponent((await this.project).name)}`,i=`${a}/experiments/${encodeURIComponent(await this.name)}`;let s,c,u;if(e){if(await this.flush(),void 0===r){const t=await this.fetchBaseExperiment();null!==t&&(r=t.id,u=t.name)}else try{const t=await o.apiConn().get_json(`v1/experiment/${r}`);"string"==typeof t.name&&(u=t.name)}catch{}try{const t=await o.apiConn().get_json("/experiment-comparison2",{experiment_id:await this.id,base_experiment_id:r},3);s=t.scores,c=t.metrics}catch(t){debugLogger.forState(o).warn(`Failed to fetch experiment scores and metrics: ${t}\n\nView complete results in Braintrust or run experiment.summarize() again.`),s={},c={}}}return{projectName:(await this.project).name,experimentName:await this.name,projectId:(await this.project).id,experimentId:await this.id,projectUrl:a,experimentUrl:i,comparisonExperimentName:u,scores:s??{},metrics:c??{}}}logFeedback(t){logFeedbackImpl(this.state,this.parentObjectType(),this.lazyId,t)}updateSpan(t){const{id:e,root_span_id:n,span_id:r,...o}=t;if(!e)throw new Error("Span id is required to update a span");updateSpanImpl({state:this.state,parentObjectType:this.parentObjectType(),parentObjectId:this.lazyId,id:e,root_span_id:n,span_id:r,event:o})}async export(){return new(getSpanComponentsClass())({object_type:this.parentObjectType(),object_id:await this.id}).toStr()}_getOtelParent(){const t=this.lazyId.getSync().value;return t?`experiment_id:${t}`:void 0}async flush(){return await this.state.bgLogger().flush()}async close(){return debugLogger.forState(this.state).warn("close is deprecated and will be removed in a future version of braintrust. It is now a no-op and can be removed"),this.id}},ReadonlyExperiment=class extends ObjectFetcher{constructor(t,e){super("experiment",void 0,e=>enrichAttachments(e,t)),this.state=t,this.lazyMetadata=e}get id(){return(async()=>(await this.lazyMetadata.get()).experiment.id)()}get name(){return(async()=>(await this.lazyMetadata.get()).experiment.name)()}get loggingState(){return this.state}async getState(){return await this.lazyMetadata.get(),this.state}async*asDataset(t){const e=this.fetch(t);for await(const t of e){if(!(t.is_root??t.root_span_id===t.span_id))continue;const{output:e,expected:n,metadata:r}=t,o=n??e;yield{input:t.input,tags:t.tags,expected:o,metadata:r}}}},executionCounter=0;function newId(){return(0,import_uuid2.v4)()}function _resolveSpanIds(t,e,n,r,o){const a=t??r.getSpanId();if(e)return{spanId:a,rootSpanId:e.rootSpanId,spanParents:"parentSpanIds"in e?e.parentSpanIds:[e.spanId]};if(n){const t=o.getParentSpanIds();if(t)return{spanId:a,rootSpanId:t.rootSpanId,spanParents:t.spanParents}}let i;return i=r.shareRootSpanId()?a:r.getTraceId(),{spanId:a,rootSpanId:i,spanParents:void 0}}var SpanImpl=class t{_state;isMerge;loggedEndTime;propagatedEvent;parentObjectType;parentObjectId;parentComputeObjectMetadataArgs;_id;_spanId;_rootSpanId;_spanParents;_propagatedState;kind="span";constructor(t){this._state=t.state,this._propagatedState=t.propagatedState;const e=t.spanAttributes??{},n=t.event??{},r=t.type??(t.parentSpanIds?void 0:t.defaultRootType);this.loggedEndTime=void 0,this.parentObjectType=t.parentObjectType,this.parentObjectId=t.parentObjectId,this.parentComputeObjectMetadataArgs=t.parentComputeObjectMetadataArgs,this.propagatedEvent=t.propagatedEvent,this.propagatedEvent&&mergeDicts(n,this.propagatedEvent);const{id:o,...a}=n,i=isomorph_default.getCallerLocation(),s=(()=>{if(t.name)return t.name;if(!t.parentSpanIds)return"root";if(i){const t=i.caller_filename.split("/"),e=t[t.length-1];return[i.caller_functionname].concat(e?[`${e}:${i.caller_lineno}`]:[]).join(":")}return"subspan"})(),c={metrics:{start:t.startTime??getCurrentUnixTimestamp()},context:{...i},span_attributes:{name:s,type:r,...e,exec_counter:executionCounter++},created:(new Date).toISOString()};this._id=o??this._state.idGenerator.getSpanId();const u=_resolveSpanIds(t.spanId,t.parentSpanIds,!0,this._state.idGenerator,this._state.contextManager);this._spanId=u.spanId,this._rootSpanId=u.rootSpanId,this._spanParents=u.spanParents,this.isMerge=!0===t[INITIAL_SPAN_WRITE_AS_MERGE],this.logInternal({event:a,internalData:c}),this.isMerge=!0}getParentInfo(){return{objectType:this.parentObjectType,objectId:this.parentObjectId,computeObjectMetadataArgs:this.parentComputeObjectMetadataArgs&&{...this.parentComputeObjectMetadataArgs}}}get id(){return this._id}get spanId(){return this._spanId}get rootSpanId(){return this._rootSpanId}get spanParents(){return this._spanParents??[]}setAttributes(t){this.logInternal({internalData:{span_attributes:t}})}setSpanParents(t){this.logInternal({internalData:{span_parents:t}})}log(t){this.logInternal({event:t})}logInternal({event:t,internalData:e}){const[n,r]=splitLoggingData({event:t,internalData:e}),o=deepCopyEvent({id:this.id,span_id:this._spanId,root_span_id:this._rootSpanId,span_parents:this._spanParents,...n,[IS_MERGE_FIELD]:this.isMerge});if("number"==typeof o.metrics?.end&&(this.loggedEndTime=o.metrics.end),1===this.parentObjectType){const t={input:o.input,output:o.output,expected:o.expected,error:o.error,scores:o.scores,metrics:o.metrics,metadata:o.metadata,tags:o.tags,span_id:this._spanId,span_parents:this._spanParents,is_root:!this._spanParents||0===this._spanParents.length,span_attributes:o.span_attributes};this._state.spanCache.queueWrite(this._rootSpanId,this._spanId,t)}this._state.bgLogger().log([new LazyValue(async()=>({...o,...Object.fromEntries(await Promise.all(Object.entries(r).map(async([t,e])=>[t,await e.get()]))),...new SpanComponentsV3({object_type:this.parentObjectType,object_id:await this.parentObjectId.get()}).objectIdFields()}))])}logFeedback(t){logFeedbackImpl(this._state,this.parentObjectType,this.parentObjectId,{...t,id:this.id})}traced(t,e){const{setCurrent:n,...r}=e??{},o=this.startSpan(r);return runCatchFinally(()=>n??1?withCurrent(o,t):t(o),t=>{throw logError(o,t),t},()=>o.end())}startSpan(e){const n=e?.parent?void 0:{spanId:this._spanId,rootSpanId:this._rootSpanId};return new t({state:this._state,...e,...startSpanParentArgs({state:this._state,parent:e?.parent,parentObjectType:this.parentObjectType,parentObjectId:this.parentObjectId,parentComputeObjectMetadataArgs:this.parentComputeObjectMetadataArgs,parentSpanIds:n,propagatedEvent:e?.propagatedEvent??this.propagatedEvent,propagatedState:this._propagatedState})})}startSpanWithParents(e,n,r){const o={parentSpanIds:n,rootSpanId:this._rootSpanId};return new t({state:this._state,...r,...startSpanParentArgs({state:this._state,parent:r?.parent,parentObjectType:this.parentObjectType,parentObjectId:this.parentObjectId,parentComputeObjectMetadataArgs:this.parentComputeObjectMetadataArgs,parentSpanIds:o,propagatedEvent:r?.propagatedEvent??this.propagatedEvent,propagatedState:this._propagatedState}),spanId:e})}end(t){let e,n={};return this.loggedEndTime?e=this.loggedEndTime:(e=t?.endTime??getCurrentUnixTimestamp(),n={metrics:{end:e}}),this.logInternal({internalData:n}),e}async export(){return this._state.spanCache.disable(),new(getSpanComponentsClass())({object_type:this.parentObjectType,...this.parentComputeObjectMetadataArgs&&!this.parentObjectId.hasSucceeded?{compute_object_metadata_args:this.parentComputeObjectMetadataArgs}:{object_id:await this.parentObjectId.get()},row_id:this.id,span_id:this._spanId,root_span_id:this._rootSpanId,propagated_event:this.propagatedEvent}).toStr()}_getOtelParent(){if(2===this.parentObjectType){const t=this.parentComputeObjectMetadataArgs?.project_id||this.parentObjectId.getSync().value,e=this.parentComputeObjectMetadataArgs?.project_name;if(t)return`project_id:${t}`;if(e)return`project_name:${e}`}else if(1===this.parentObjectType){const t=this.parentComputeObjectMetadataArgs?.experiment_id||this.parentObjectId.getSync().value;if(t)return`experiment_id:${t}`}}inject(t){const e=t??{};try{_injectIntoCarrier(e,{traceId:this._rootSpanId,spanId:this._spanId,braintrustParent:this._getOtelParent()??this._propagatedState?.braintrustParent,propagatedState:this._propagatedState})}catch(t){debugLogger.warn(`Error injecting trace context: ${t}`)}return e}async permalink(){return await permalink(await this.export(),{state:this._state})}link(){if(!this.id)return NOOP_SPAN_PERMALINK;try{let t=null;if(2===this.parentObjectType){const e=this._state.currentLogger;e&&(t=e._getLinkBaseUrl())}if(!t&&(t=_getLinkBaseUrl(this._state),!t))throw new Error("log-in-or-provide-org-name");return this._link(t)}catch(t){return getErrPermlink(t instanceof Error?t.message:String(t))}}_link(t){const e=this.parentComputeObjectMetadataArgs;switch(this.parentObjectType){case 2:{const n=e?.project_id||this.parentObjectId.getSync().value,r=e?.project_name;return n?`${t}/object?object_type=project_logs&object_id=${n}&id=${this._id}`:r?`${t}/p/${r}/logs?oid=${this._id}`:getErrPermlink("provide-project-name-or-id")}case 1:{const n=e?.experiment_id||this.parentObjectId?.getSync()?.value;return n?`${t}/object?object_type=experiment&object_id=${n}&id=${this._id}`:getErrPermlink("provide-experiment-id")}case 3:return NOOP_SPAN_PERMALINK;default:this.parentObjectType;return NOOP_SPAN_PERMALINK}}async flush(){return await this._state.bgLogger().flush()}close(t){return this.end(t)}state(){return this._state}[Symbol.for("nodejs.util.inspect.custom")](){return`SpanImpl {\n  kind: '${this.kind}',\n  id: '${this.id}',\n  spanId: '${this.spanId}',\n  rootSpanId: '${this.rootSpanId}',\n  spanParents: ${JSON.stringify(this.spanParents)}\n}`}toString(){return`SpanImpl(id=${this.id}, spanId=${this.spanId})`}};function splitLoggingData({event:t,internalData:e}){const n=validateAndSanitizeExperimentLogPartialArgs(t??{}),r={};mergeDicts(r,e||{}),mergeDicts(r,n);const o={},a={};for(const[t,e]of Object.entries(r))if(e instanceof BraintrustStream){const n=e.copy();a[t]=new LazyValue(async()=>await new Promise((t,e)=>{n.toReadableStream().pipeThrough(createFinalValuePassThroughStream(t,e)).pipeTo(devNullWritableStream())}))}else e instanceof ReadableStream?a[t]=new LazyValue(async()=>await new Promise((t,n)=>{e.pipeThrough(createFinalValuePassThroughStream(t,n)).pipeTo(devNullWritableStream())})):o[t]=e;return[o,a]}var Dataset2=class extends ObjectFetcher{constructor(t,e,n,r,o,a){const i=r??DEFAULT_IS_LEGACY_DATASET;i&&debugLogger.forState(t).warn('Records will be fetched from this dataset in the legacy format, with the "expected" field renamed to "output". Please update your code to use "expected", and use `braintrust.initDataset()` with `{ useOutput: false }`, which will become the default in a future version of Braintrust.'),super("dataset",n,t=>ensureDatasetRecord(enrichAttachments(t,this.state),i),o),this.state=t,this.__braintrust_dataset_marker,this.lazyMetadata=e,this.lazyPinnedVersion=a?.lazyPinnedVersion,this.pinnedEnvironment=a?.pinnedEnvironment,this.pinnedSnapshotName=a?.pinnedSnapshotName}lazyMetadata;__braintrust_dataset_marker=!0;newRecords=0;lazyPinnedVersion;pinnedEnvironment;pinnedSnapshotName;get id(){return(async()=>(await this.lazyMetadata.get()).dataset.id)()}get name(){return(async()=>(await this.lazyMetadata.get()).dataset.name)()}get project(){return(async()=>(await this.lazyMetadata.get()).project)()}get loggingState(){return this.state}async toEvalData(){await this.getState();const t=await this.lazyMetadata.get(),e=this.getPinnedVersion(),n=this.getInternalBtql();return{dataset_id:t.dataset.id,...void 0!==this.pinnedEnvironment?{dataset_environment:this.pinnedEnvironment}:{},...void 0===this.pinnedEnvironment&&void 0!==this.pinnedSnapshotName?{dataset_snapshot_name:this.pinnedSnapshotName}:{},...void 0===this.pinnedEnvironment&&void 0===this.pinnedSnapshotName&&void 0!==e?{dataset_version:e}:{},...void 0!==n?{_internal_btql:n}:{}}}async getState(){return await this.lazyMetadata.get(),void 0!==this.lazyPinnedVersion&&void 0===this.getPinnedVersion()&&this.setPinnedVersion(await this.lazyPinnedVersion.get()),this.state}async version(t){const e=this.getPinnedVersion();return void 0!==e?e:(await this.getState(),await super.version(t))}validateEvent({metadata:t,expected:e,output:n,tags:r}){if(void 0!==t)for(const e of Object.keys(t))if("string"!=typeof e)throw new Error("metadata keys must be strings");if(void 0!==e&&void 0!==n)throw new Error("Only one of expected or output (deprecated) can be specified. Prefer expected.");r&&validateTags(r)}createArgs({id:t,input:e,expected:n,metadata:r,tags:o,output:a,origin:i,isMerge:s}){return new LazyValue(async()=>{const c=await this.id;return{id:t,input:e,expected:void 0===n?a:n,tags:o,dataset_id:c,created:s?void 0:(new Date).toISOString(),metadata:r,origin:i,...s?{[IS_MERGE_FIELD]:!0}:{}}})}insert({input:t,expected:e,metadata:n,tags:r,id:o,output:a,origin:i}){this.validateEvent({metadata:n,expected:e,output:a,tags:r});const s=o||(0,import_uuid2.v4)(),c=this.createArgs(deepCopyEvent({id:s,input:t,expected:e,metadata:n,tags:r,output:a,origin:i,isMerge:!1}));return this.state.bgLogger().log([c]),this.newRecords++,s}update({input:t,expected:e,metadata:n,tags:r,id:o}){this.validateEvent({metadata:n,expected:e,tags:r});const a=this.createArgs(deepCopyEvent({id:o,input:t,expected:e,metadata:n,tags:r,isMerge:!0}));return this.state.bgLogger().log([a]),o}delete(t){const e=new LazyValue(async()=>({id:t,dataset_id:await this.id,created:(new Date).toISOString(),_object_delete:!0}));return this.state.bgLogger().log([e]),t}async createSnapshot({name:t,description:e,update:n}){await this.flush();const r=await this.getState(),o=await this.id,a=await this.version();if(void 0===a)throw new Error("Cannot create snapshot: dataset has no version");const i=await r.appConn().post_json("api/dataset_snapshot/register",{dataset_id:o,dataset_snapshot_name:t,description:e,xact_id:a,update:n});return datasetSnapshotRegisterResponseSchema.parse(i).dataset_snapshot}async listSnapshots(){const t=await this.getState();return await getDatasetSnapshots({state:t,datasetId:await this.id})}async getSnapshot(t){const e=await this.getState(),n=await this.id;return await getDatasetSnapshot({state:e,datasetId:n,...t})}async updateSnapshot(t,{name:e,description:n}){const r=await this.getState();return DatasetSnapshot.parse(await r.appConn().post_json("api/dataset_snapshot/patch_id",{id:t,name:e,description:n}))}async deleteSnapshot(t){const e=await this.getState();return DatasetSnapshot.parse(await e.appConn().post_json("api/dataset_snapshot/delete_id",{id:t}))}async restorePreview({version:t}){await this.flush();const e=await this.getState(),n=await this.id;return datasetRestorePreviewResultSchema.parse(await e.apiConn().post_json(`v1/dataset/${n}/restore/preview`,{version:t}))}async restore({version:t}){await this.flush();const e=await this.getState(),n=await this.id;return datasetRestoreResultSchema.parse(await e.apiConn().post_json(`v1/dataset/${n}/restore`,{version:t}))}async summarize(t={}){const{summarizeData:e=!0}=t||{};await this.flush();const n=await this.getState(),r=`${n.appPublicUrl}/app/${encodeURIComponent(n.orgName)}/p/${encodeURIComponent((await this.project).name)}`,o=`${r}/datasets/${encodeURIComponent(await this.name)}`;let a;if(e){const t=import_v38.z.object({total_records:import_v38.z.number()}).parse(await n.apiConn().get_json("dataset-summary",{dataset_id:await this.id},3));a={newRecords:this.newRecords,totalRecords:t.total_records}}return{projectName:(await this.project).name,datasetName:await this.name,projectUrl:r,datasetUrl:o,dataSummary:a}}async flush(){return await this.state.bgLogger().flush()}async close(){return debugLogger.forState(this.state).warn("close is deprecated and will be removed in a future version of braintrust. It is now a no-op and can be removed"),this.id}static isDataset(t){return"object"==typeof t&&null!==t&&"__braintrust_dataset_marker"in t}};function isAttachmentObject(t){return BraintrustAttachmentReference.safeParse(t).success||InlineAttachmentReferenceSchema.safeParse(t).success||ExternalAttachmentReference.safeParse(t).success}function isURL(t){try{const e=new URL(t.trim());return"http:"===e.protocol||"https:"===e.protocol}catch{return!1}}function expandAttachmentArrayPreTemplate(t,e){if("string"!=typeof t)return null;const n=t.match(/^\{\{\s*([\w.]+)\s*\}\}$/);if(!n)return null;const r=n[1],o=r.includes(".")?getObjValueByPath(e,r.split(".")):e[r];if(!Array.isArray(o))return null;return o.every(t=>isAttachmentObject(t)||"string"==typeof t&&isURL(t))?o.map(t=>({type:"image_url",image_url:{url:t}})):null}function renderMessage(t,e){return renderMessageImpl(t,e,{})}function renderMessageImpl(t,e,n){return{...e,..."content"in e?{content:isEmpty2(e.content)?void 0:"string"==typeof e.content?t(e.content):e.content.flatMap(e=>{switch(e.type){case"text":return[{...e,text:t(e.text)}];case"image_url":if(isObject(e.image_url.url))throw new Error("Attachments must be replaced with URLs before calling `build()`");if(n){const t=expandAttachmentArrayPreTemplate(e.image_url.url,n);if(t)return t}return[{...e,image_url:{...e.image_url,url:t(e.image_url.url)}}];case"file":return[{...e,file:{...e.file.file_data&&{file_data:t(e.file.file_data)},...e.file.file_id&&{file_id:t(e.file.file_id)},...e.file.filename&&{filename:t(e.file.filename)}}}];default:return e}})}:{},..."tool_calls"in e?{tool_calls:isEmpty2(e.tool_calls)?void 0:e.tool_calls.map(e=>({type:e.type,id:t(e.id),function:{name:t(e.function.name),arguments:t(e.function.arguments)}}))}:{},..."tool_call_id"in e?{tool_call_id:t(e.tool_call_id)}:{}}}function deserializePlainStringAsJSON(t){if(""===t.trim())return{value:null,error:void 0};try{return{value:JSON.parse(t),error:void 0}}catch(e){return{value:t,error:e}}}function renderTemplatedObject(t,e,n){return"string"==typeof t?renderTemplateContent(t,e,t=>"string"==typeof t?t:JSON.stringify(t),{strict:n.strict,templateFormat:n.templateFormat}):isArray(t)?t.map(t=>renderTemplatedObject(t,e,n)):isObject(t)?Object.fromEntries(Object.entries(t).map(([t,r])=>[t,renderTemplatedObject(r,e,n)])):t}function renderPromptParams(t,e,n={}){const r=parseTemplateFormat(n.templateFormat),o=!!n.strict,a=import_v38.z.object({response_format:import_v38.z.object({type:import_v38.z.literal("json_schema"),json_schema:ResponseFormatJsonSchema.omit({schema:!0}).extend({schema:import_v38.z.unknown()})})}).safeParse(t);if(a.success){const n=renderTemplatedObject(a.data.response_format.json_schema.schema,e,{strict:o,templateFormat:r}),i="string"==typeof n?deserializePlainStringAsJSON(n).value:n;return{...t,response_format:{...a.data.response_format,json_schema:{...a.data.response_format.json_schema,schema:i}}}}return t}var Prompt2=class t{constructor(t,e,n){this.metadata=t,this.defaults=e,this.noTrace=n,this.__braintrust_prompt_marker}parsedPromptData;hasParsedPromptData=!1;__braintrust_prompt_marker=!0;get id(){return this.metadata.id}get projectId(){return this.metadata.project_id}get name(){return"name"in this.metadata?this.metadata.name:`Playground function ${this.metadata.id}`}get slug(){return"slug"in this.metadata?this.metadata.slug:this.metadata.id}get prompt(){return this.getParsedPromptData()?.prompt}get version(){return this.metadata[TRANSACTION_ID_FIELD]}get options(){return this.getParsedPromptData()?.options||{}}get templateFormat(){return this.getParsedPromptData()?.template_format}get promptData(){return this.getParsedPromptData()}build(t,e={}){return this.runBuild(t,{flavor:e.flavor??"chat",messages:e.messages,strict:e.strict,templateFormat:e.templateFormat})}async buildWithAttachments(t,e={}){const n=t instanceof Object?await resolveAttachmentsToBase64(t,e.state):t;return this.runBuild(n,{flavor:e.flavor??"chat",messages:e.messages,strict:e.strict,templateFormat:e.templateFormat})}runBuild(e,n){const{flavor:r}=n,o=Object.fromEntries(Object.entries({...this.defaults,...Object.fromEntries(Object.entries(this.options.params||{}).filter(([t,e])=>!BRAINTRUST_PARAMS.includes(t))),...isEmpty2(this.options.model)?{}:{model:this.options.model}}).filter(([t,e])=>"response_format"!==t||null!==e));if(!("model"in o)||isEmpty2(o.model))throw new Error("No model specified. Either specify it in the prompt or as a default");const a=this.noTrace?{}:{span_info:{metadata:{prompt:this.id?{variables:e,id:this.id,project_id:this.projectId,version:this.version,..."prompt_session_id"in this.metadata?{prompt_session_id:this.metadata.prompt_session_id}:{}}:void 0}}},i=this.prompt;if(!i)throw new Error("Empty prompt");const s=import_v38.z.record(import_v38.z.unknown()).safeParse(e),c={input:e,...s.success?s.data:{}},u=this.templateFormat,p=parseTemplateFormat(n.templateFormat??u),l=t.renderPrompt({prompt:i,buildArgs:e,options:{...n,templateFormat:p}});if("chat"===r){if("chat"!==l.type)throw new Error("Prompt is a completion prompt. Use buildCompletion() instead");return{...renderPromptParams(o,c,{strict:n.strict,templateFormat:p}),...a,messages:l.messages,...l.tools?{tools:ChatCompletionTool.array().parse(JSON.parse(l.tools))}:void 0}}if("completion"===r){if("completion"!==l.type)throw new Error("Prompt is a chat prompt. Use flavor: 'chat' instead");return{...renderPromptParams(o,c,{strict:n.strict,templateFormat:p}),...a,prompt:l.content}}throw new Error("never!")}static renderPrompt({prompt:t,buildArgs:e,options:n}){const r=t=>{if(void 0===t)throw new Error("Missing!");if("string"==typeof t)return t;if(t instanceof ReadonlyAttachment)throw new Error("Use buildWithAttachments() to build prompts with attachments");return JSON.stringify(t)},o=import_v38.z.record(import_v38.z.unknown()).safeParse(e),a={input:e,...o.success?o.data:{}},i=parseTemplateFormat(n.templateFormat);if("chat"===t.type){const e=t=>renderTemplateContent(t,a,r,{strict:n.strict,templateFormat:i}),o=(t.messages||[]).map(t=>renderMessageImpl(e,t,a)),s=o.some(t=>"system"===t.role);return{type:"chat",messages:[...o,...(n.messages??[]).filter(t=>!(s&&"system"===t.role))],...t.tools?.trim()?{tools:e(t.tools)}:void 0}}if("completion"===t.type){if(n.messages)throw new Error("extra messages are not supported for completion prompts");return{type:"completion",content:renderTemplateContent(t.content,a,r,{strict:n.strict,templateFormat:i})}}throw new Error(`Invalid prompt type: ${t}`)}getParsedPromptData(){return this.hasParsedPromptData||(this.parsedPromptData=PromptData.parse(this.metadata.prompt_data),this.hasParsedPromptData=!0),this.parsedPromptData}static isPrompt(t){return"object"==typeof t&&null!==t&&"__braintrust_prompt_marker"in t}static fromPromptData(e,n){return new t({name:e,slug:e,prompt_data:n},{},!1)}},RemoteEvalParameters=class{constructor(t){this.metadata=t,this.__braintrust_parameters_marker}__braintrust_parameters_marker=!0;get id(){return this.metadata.id}get projectId(){return this.metadata.project_id}get name(){return this.metadata.name}get slug(){return this.metadata.slug}get version(){return this.metadata[TRANSACTION_ID_FIELD]}get schema(){return this.metadata.function_data.__schema}get data(){return this.metadata.function_data.data??{}}validate(t){if("object"!=typeof t||null===t)return!1;const e=this.schema.properties;if("object"!=typeof e||null===e)return!0;for(const n of Object.keys(e))if(!(n in t)){if((Array.isArray(this.schema.required)?this.schema.required:[]).includes(n))return!1}return!0}static isParameters(t){return"object"==typeof t&&null!==t&&"__braintrust_parameters_marker"in t&&!0===t.__braintrust_parameters_marker}},TEST_API_KEY="___TEST_API_KEY__THIS_IS_NOT_REAL___";function setInitialTestState(){_internalGetGlobalState()||_internalSetInitialState()}async function simulateLoginForTests(){return await login({apiKey:TEST_API_KEY,appUrl:"https://braintrust.dev"})}function simulateLogoutForTests(){const t=_internalGetGlobalState();return t.resetLoginInfo(),t.resetIdGenState(),t[RESET_CONTEXT_MANAGER_STATE](),t.appUrl="https://www.braintrust.dev",t}async function getPromptVersions(t,e){const n=_internalGetGlobalState();if(!n)throw new Error("Must log in first");await n.login({});const r={from:{op:"function",name:{op:"ident",name:["project_prompts"]},args:[{op:"literal",value:t}]},select:[{op:"star"}],filter:{op:"eq",left:{op:"ident",name:["id"]},right:{op:"literal",value:e}}},o=await n.apiConn().post("btql",{query:r,audit_log:!0,use_columnstore:!1,brainstore_realtime:!0},{headers:{"Accept-Encoding":"gzip"}},BTQL_HTTP_RETRIES);if(!o.ok)throw new Error(`API request failed: ${o.status} ${o.statusText}`);const a=await o.json();return a.data?.filter(t=>["upsert","merge"].includes(t.audit_data?.action)).map(t=>prettifyXact(t._xact_id))||[]}function resetIdGenStateForTests(){const t=_internalGetGlobalState();t&&t.resetIdGenState()}var _exportsForTestingOnly={extractAttachments:extractAttachments,deepCopyEvent:deepCopyEvent,useTestBackgroundLogger:useTestBackgroundLogger,clearTestBackgroundLogger:clearTestBackgroundLogger,resetDebugLoggerForTests:resetDebugLoggerForTests,simulateLoginForTests:simulateLoginForTests,simulateLogoutForTests:simulateLogoutForTests,setInitialTestState:setInitialTestState,initTestExperiment:initTestExperiment,isGeneratorFunction:isGeneratorFunction,isAsyncGeneratorFunction:isAsyncGeneratorFunction,resetIdGenStateForTests:resetIdGenStateForTests,validateTags:validateTags,isomorph:isomorph_default};function isAsyncIterable(t){return null!==t&&"object"==typeof t&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function hasAsyncIteratorMethods(t){return null!==t&&"object"==typeof t&&"next"in t&&"function"==typeof t.next}function isSelfAsyncIterator(t){try{return t[Symbol.asyncIterator]()===t}catch{return!1}}function patchStreamIfNeeded(t,e){if(!isAsyncIterable(t))return t;if(Object.isFrozen(t)||Object.isSealed(t))return console.warn("Cannot patch frozen/sealed stream. Stream output will not be collected."),t;if(hasAsyncIteratorMethods(t)&&isSelfAsyncIterator(t)){if("__braintrust_patched_iterator_methods"in t)return t;try{const n=t.next.bind(t),r="function"==typeof t.return?t.return.bind(t):null,o="function"==typeof t.throw?t.throw.bind(t):null,a=[];let i=!1;return t.next=async(...t)=>{try{const r=await runNextWithWrapper(e,()=>n(...t));if(r.done){if(!i){i=!0;try{await e.onComplete(a)}catch(t){console.error("Error in stream onComplete handler:",t)}}}else{const t=r.value;if((!e.shouldCollect||e.shouldCollect(t))&&(a.push(t),e.onChunk))try{await e.onChunk(t)}catch(t){console.error("Error in stream onChunk handler:",t)}}return r}catch(t){if(!i&&(i=!0,e.onError))try{await e.onError(t instanceof Error?t:new Error(String(t)),a)}catch(t){console.error("Error in stream onError handler:",t)}throw t}},r&&(t.return=async(...t)=>{if(!i){i=!0;try{await e.onComplete(a)}catch(t){console.error("Error in stream onComplete handler:",t)}}return r(...t)}),o&&(t.throw=async(...t)=>{if(!i){i=!0;const n=t[0],r=n instanceof Error?n:new Error(String(n));if(e.onError)try{await e.onError(r,a)}catch(t){console.error("Error in stream onError handler:",t)}}return o(...t)}),Object.defineProperty(t,"__braintrust_patched_iterator_methods",{value:!0}),t}catch(t){console.warn("Failed to patch stream iterator methods:",t)}}const n=t[Symbol.asyncIterator];if("__braintrust_patched"in n&&n.__braintrust_patched)return t;try{const r=function(){const t=n.call(this),r=t.next.bind(t),o=[];let a=!1;if(t.next=async function(...t){try{const n=await runNextWithWrapper(e,()=>r(...t));if(n.done){if(!a){a=!0;try{await e.onComplete(o)}catch(t){console.error("Error in stream onComplete handler:",t)}}}else{const t=n.value;if((!e.shouldCollect||e.shouldCollect(t))&&(o.push(t),e.onChunk))try{await e.onChunk(t)}catch(t){console.error("Error in stream onChunk handler:",t)}}return n}catch(t){if(!a&&(a=!0,e.onError))try{await e.onError(t instanceof Error?t:new Error(String(t)),o)}catch(t){console.error("Error in stream onError handler:",t)}throw t}},t.return){const n=t.return.bind(t);t.return=async function(...t){if(!a){a=!0;try{await e.onComplete(o)}catch(t){console.error("Error in stream onComplete handler:",t)}}return n(...t)}}if(t.throw){const n=t.throw.bind(t);t.throw=async function(...t){if(!a){a=!0;const n=t[0],r=n instanceof Error?n:new Error(String(n));if(e.onError)try{await e.onError(r,o)}catch(t){console.error("Error in stream onError handler:",t)}}return n(...t)}}return t};return Object.defineProperty(r,"__braintrust_patched",{value:!0}),t[Symbol.asyncIterator]=r,t}catch(e){return console.warn("Failed to patch stream:",e),t}}function runNextWithWrapper(t,e){return t.aroundNext?t.aroundNext(e):e()}function hasChannelSpanInfo(t){return isObject(t)&&isObject(t.span_info)}function getChannelSpanInfo(t){if(isObject(t.span_info))return t.span_info;const e=t.arguments?.[0];return hasChannelSpanInfo(e)?e.span_info:void 0}function buildStartSpanArgs(t,e){const n=getChannelSpanInfo(e),r={type:t.type};return isObject(n?.spanAttributes)&&mergeDicts(r,n.spanAttributes),{name:"string"==typeof n?.name&&n.name?n.name:resolveConfigName(t.name,e),spanAttributes:r,spanInfoMetadata:isObject(n?.metadata)?n.metadata:void 0}}function resolveConfigName(t,e){if("string"==typeof t)return t;try{return t(e.arguments??[],e)||"unknown"}catch(t){return debugLogger.error("Error resolving instrumentation span name:",t),"unknown"}}function mergeInputMetadata(t,e){if(!e)return isObject(t)?t:void 0;const n={};return mergeDicts(n,e),isObject(t)&&mergeDicts(n,t),n}var autoInstrumentationSuppressionStore,BasePlugin=class{enabled=!1;unsubscribers=[];enable(){this.enabled||(this.enabled=!0,this.onEnable())}disable(){this.enabled&&(this.enabled=!1,this.onDisable())}subscribe(t,e){isomorph_default.newTracingChannel(t).subscribe(e)}subscribeToChannel(t,e){const n=isomorph_default.newTracingChannel(t),r=new WeakMap,o={start:n=>{const{name:o,spanAttributes:a,spanInfoMetadata:i}=buildStartSpanArgs(e,n),s=startSpan({name:o,spanAttributes:a}),c=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:c});try{const{input:t,metadata:r}=e.extractInput(n.arguments);s.log({input:t,metadata:mergeInputMetadata(r,i)})}catch(e){console.error(`Error extracting input for ${t}:`,e)}},asyncEnd:n=>{const o=r.get(n);if(!o)return;const{span:a,startTime:i}=o;try{const t=e.extractOutput(n.result,n),r=e.extractMetrics(n.result,i,n),o=e.extractMetadata?.(n.result,n);a.log({output:t,...void 0!==o?{metadata:o}:{},metrics:r})}catch(e){console.error(`Error extracting output for ${t}:`,e)}finally{a.end(),r.delete(n)}},error:t=>{const e=r.get(t);if(!e)return;const{span:n}=e;n.log({error:t.error.message}),n.end(),r.delete(t)}};n.subscribe(o),this.unsubscribers.push(()=>{n.unsubscribe(o)})}subscribeToStreamingChannel(t,e){const n=isomorph_default.newTracingChannel(t),r=new WeakMap,o={start:n=>{const{name:o,spanAttributes:a,spanInfoMetadata:i}=buildStartSpanArgs(e,n),s=startSpan({name:o,spanAttributes:a}),c=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:c});try{const{input:t,metadata:r}=e.extractInput(n.arguments);s.log({input:t,metadata:mergeInputMetadata(r,i)})}catch(e){console.error(`Error extracting input for ${t}:`,e)}},asyncEnd:n=>{const o=r.get(n);if(!o)return;const{span:a,startTime:i}=o;if(isAsyncIterable(n.result)){let r;patchStreamIfNeeded(n.result,{onChunk:()=>{void 0===r&&(r=getCurrentUnixTimestamp())},onComplete:o=>{try{let t,s,c;if(e.aggregateChunks){const r=e.aggregateChunks(o,n.result,n);t=r.output,s=r.metrics,c=r.metadata}else t=e.extractOutput(o,n),s=e.extractMetrics(o,i,n);void 0===s.time_to_first_token&&void 0!==r?s.time_to_first_token=r-i:void 0===s.time_to_first_token&&o.length>0&&(s.time_to_first_token=getCurrentUnixTimestamp()-i),a.log({output:t,...void 0!==c?{metadata:c}:{},metrics:s})}catch(e){console.error(`Error extracting output for ${t}:`,e)}finally{a.end()}},onError:t=>{a.log({error:t.message}),a.end()}})}else try{const t=e.extractOutput(n.result,n),r=e.extractMetadata?e.extractMetadata(n.result,n):void 0,o=e.extractMetrics(n.result,i,n);a.log({output:t,...void 0!==r?{metadata:r}:{},metrics:o})}catch(e){console.error(`Error extracting output for ${t}:`,e)}finally{a.end(),r.delete(n)}},error:t=>{const e=r.get(t);if(!e)return;const{span:n}=e;n.log({error:t.error.message}),n.end(),r.delete(t)}};n.subscribe(o),this.unsubscribers.push(()=>{n.unsubscribe(o)})}subscribeToSyncStreamChannel(t,e){const n=isomorph_default.newTracingChannel(t),r=new WeakMap,o={start:n=>{const{name:o,spanAttributes:a,spanInfoMetadata:i}=buildStartSpanArgs(e,n),s=startSpan({name:o,spanAttributes:a}),c=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:c});try{const{input:t,metadata:r}=e.extractInput(n.arguments);s.log({input:t,metadata:mergeInputMetadata(r,i)})}catch(e){console.error(`Error extracting input for ${t}:`,e)}},end:n=>{const o=r.get(n);if(!o)return;const{span:a,startTime:i}=o,s=n.result;if(!s||"function"!=typeof s.on)return a.end(),void r.delete(n);let c=!0;s.on("chunk",t=>{if(c){const t=getCurrentUnixTimestamp();a.log({metrics:{time_to_first_token:t-i}}),c=!1}}),s.on("chatCompletion",e=>{try{a.log({output:e.choices})}catch(e){console.error(`Error extracting chatCompletion for ${t}:`,e)}}),s.on("event",n=>{if(e.extractFromEvent)try{if(c){const t=getCurrentUnixTimestamp();a.log({metrics:{time_to_first_token:t-i}}),c=!1}const t=e.extractFromEvent(n);t&&Object.keys(t).length>0&&a.log(t)}catch(e){console.error(`Error extracting event for ${t}:`,e)}}),s.on("end",()=>{a.end(),r.delete(n)})},error:t=>{const e=r.get(t);if(!e)return;const{span:n}=e;n.log({error:t.error.message}),n.end(),r.delete(t)}};n.subscribe(o),this.unsubscribers.push(()=>{n.unsubscribe(o)})}};function toLoggedError(t){if(t instanceof Error)return t.message;if("string"==typeof t)return t;try{const e=JSON.stringify(t);return void 0===e?String(t):e}catch{try{return String(t)}catch{return"<unserializable error>"}}}function suppressionStore(){return autoInstrumentationSuppressionStore??=isomorph_default.newAsyncLocalStorage(),autoInstrumentationSuppressionStore}function currentFrames(){return suppressionStore().getStore()?.frames??[]}function isAutoInstrumentationSuppressed(){const t=currentFrames();return"suppress"===t[t.length-1]?.mode}function runWithAutoInstrumentationSuppressed(t){const e={id:Symbol("braintrust.auto-instrumentation-suppress"),mode:"suppress"};return suppressionStore().run({frames:[...currentFrames(),e]},t)}function bindAutoInstrumentationSuppressionToStart(t){const e=t.start;if(!e)return;const n=suppressionStore();return e.bindStore(n,()=>({frames:[...currentFrames(),{id:Symbol("braintrust.auto-instrumentation-suppress"),mode:"suppress"}]})),()=>{e.unbindStore(n)}}function enterAutoInstrumentationAllowed(){const t={id:Symbol("braintrust.auto-instrumentation-allow"),mode:"allow"};return suppressionStore().enterWith({frames:[...currentFrames(),t]}),()=>{const e=currentFrames().filter(e=>e.id!==t.id);suppressionStore().enterWith(e.length>0?{frames:e}:void 0)}}function isSyncStreamLike(t){return!!t&&"object"==typeof t&&"function"==typeof t.on}function hasChoices(t){return!!t&&"object"==typeof t&&"choices"in t}function normalizeMetadata(t){return isObject(t)?t:void 0}function startSpanForEvent(t,e,n){const{name:r,spanAttributes:o,spanInfoMetadata:a}=buildStartSpanArgs(t,e),i=startSpan({name:r,spanAttributes:o}),s=getCurrentUnixTimestamp();try{const{input:n,metadata:r}=t.extractInput(e.arguments,e,i);i.log({input:n,metadata:mergeInputMetadata(r,a)})}catch(t){debugLogger.error(`Error extracting input for ${n}:`,t)}return{span:i,startTime:s}}function shouldTraceEvent(t,e,n){if(!t.shouldTrace)return!0;try{return t.shouldTrace(e.arguments,e)}catch(t){return debugLogger.error(`Error checking trace predicate for ${n}:`,t),!0}}function ensureSpanStateForEvent(t,e,n,r){const o=n,a=t.get(o);if(a)return a;if(!shouldTraceEvent(e,n,r))return;const i=startSpanForEvent(e,n,r);return t.set(o,i),i}function bindCurrentSpanStoreToStart(t,e,n,r){const o=_internalGetGlobalState(),a=t.start,i=o?.contextManager,s=i?i[BRAINTRUST_CURRENT_SPAN_STORE]:void 0;if(s&&a)return a.bindStore(s,t=>{if(isAutoInstrumentationSuppressed())return s.getStore();const o=ensureSpanStateForEvent(e,n,t,r);return o?i.wrapSpanForStore(o.span):s.getStore()}),()=>{a.unbindStore(s)}}function logErrorAndEnd(t,e){const n=t.get(e);n&&(n.span.log({error:e.error.message}),n.span.end(),t.delete(e))}function runStreamingCompletionHook(t){if(t.config.onComplete)try{t.config.onComplete({channelName:t.channelName,...t.chunks?{chunks:t.chunks}:{},endEvent:t.endEvent,...void 0!==t.metadata?{metadata:t.metadata}:{},metrics:t.metrics,output:t.output,result:t.result,span:t.span,startTime:t.startTime})}catch(e){debugLogger.error(`Error in onComplete hook for ${t.channelName}:`,e)}}function runStreamingErrorHook(t){if(t.config.onError)try{t.config.onError({channelName:t.channelName,error:t.error,event:t.event,span:t.span,startTime:t.startTime})}catch(e){debugLogger.error(`Error in onError hook for ${t.channelName}:`,e)}}function traceAsyncChannel(t,e){const n=t.tracingChannel(),r=new WeakMap,o=t.channelName,a=bindCurrentSpanStoreToStart(n,r,e,o),i={start:t=>{isAutoInstrumentationSuppressed()||ensureSpanStateForEvent(r,e,t,o)},asyncEnd:t=>{const n=r.get(t);if(!n)return;const a=t,{span:i,startTime:s}=n;try{const t=e.extractOutput(a.result,a),n=e.extractMetrics(a.result,s,a),r=e.extractMetadata?.(a.result,a);i.log({output:t,...void 0!==normalizeMetadata(r)?{metadata:normalizeMetadata(r)}:{},metrics:n})}catch(t){debugLogger.error(`Error extracting output for ${o}:`,t)}finally{i.end(),r.delete(t)}},error:t=>{logErrorAndEnd(r,t)}};return n.subscribe(i),()=>{a?.(),n.unsubscribe(i)}}function traceStreamingChannel(t,e){const n=t.tracingChannel(),r=new WeakMap,o=t.channelName,a=bindCurrentSpanStoreToStart(n,r,e,o),i={start:t=>{isAutoInstrumentationSuppressed()||ensureSpanStateForEvent(r,e,t,o)},asyncEnd:t=>{const n=r.get(t);if(!n)return;const a=t,{span:i,startTime:s}=n;if(isAsyncIterable(a.result)){let n;return void patchStreamIfNeeded(a.result,{onChunk:()=>{void 0===n&&(n=getCurrentUnixTimestamp())},onComplete:c=>{try{let t,r,u;if(e.aggregateChunks){const n=e.aggregateChunks(c,a.result,a,s);t=n.output,r=n.metrics,u=n.metadata}else t=e.extractOutput(c,a),r=e.extractMetrics(c,s,a);void 0===r.time_to_first_token&&void 0!==n?r.time_to_first_token=n-s:void 0===r.time_to_first_token&&c.length>0&&(r.time_to_first_token=getCurrentUnixTimestamp()-s),runStreamingCompletionHook({channelName:o,chunks:c,config:e,endEvent:a,...void 0!==u?{metadata:u}:{},metrics:r,output:t,result:a.result,span:i,startTime:s}),i.log({output:t,...void 0!==u?{metadata:u}:{},metrics:r})}catch(t){debugLogger.error(`Error extracting output for ${o}:`,t)}finally{i.end(),r.delete(t)}},onError:n=>{runStreamingErrorHook({channelName:o,config:e,error:n,event:a,span:i,startTime:s}),i.log({error:n.message}),i.end(),r.delete(t)}})}if(e.patchResult?.({channelName:o,endEvent:a,result:a.result,span:i,startTime:s}))r.delete(t);else try{const t=e.extractOutput(a.result,a),n=e.extractMetrics(a.result,s,a),r=e.extractMetadata?.(a.result,a);runStreamingCompletionHook({channelName:o,config:e,endEvent:a,...void 0!==normalizeMetadata(r)?{metadata:normalizeMetadata(r)}:{},metrics:n,output:t,result:a.result,span:i,startTime:s}),i.log({output:t,...void 0!==normalizeMetadata(r)?{metadata:normalizeMetadata(r)}:{},metrics:n})}catch(t){debugLogger.error(`Error extracting output for ${o}:`,t)}finally{i.end(),r.delete(t)}},error:t=>{const n=r.get(t);n&&runStreamingErrorHook({channelName:o,config:e,error:t.error,event:t,span:n.span,startTime:n.startTime}),logErrorAndEnd(r,t)}};return n.subscribe(i),()=>{a?.(),n.unsubscribe(i)}}function traceSyncStreamChannel(t,e){const n=t.tracingChannel(),r=new WeakMap,o=t.channelName,a=bindCurrentSpanStoreToStart(n,r,e,o),i={start:t=>{isAutoInstrumentationSuppressed()||ensureSpanStateForEvent(r,e,t,o)},end:t=>{const n=r.get(t);if(!n)return;const{span:a,startTime:i}=n,s=t;(n=>{const c={...s,result:n};if(e.patchResult?.({channelName:o,endEvent:c,result:n,span:a,startTime:i}))return;const u=n;if(!isSyncStreamLike(u))return a.end(),void r.delete(t);let p=!0;u.on("chunk",()=>{p&&(a.log({metrics:{time_to_first_token:getCurrentUnixTimestamp()-i}}),p=!1)}),u.on("chatCompletion",t=>{try{hasChoices(t)&&a.log({output:t.choices})}catch(t){debugLogger.error(`Error extracting chatCompletion for ${o}:`,t)}}),u.on("event",t=>{if(e.extractFromEvent)try{p&&(a.log({metrics:{time_to_first_token:getCurrentUnixTimestamp()-i}}),p=!1);const n=e.extractFromEvent(t);n&&Object.keys(n).length>0&&a.log(n)}catch(t){debugLogger.error(`Error extracting event for ${o}:`,t)}}),u.on("end",()=>{a.end(),r.delete(t)}),u.on("error",e=>{a.log({error:e.message}),a.end(),r.delete(t)})})(s.result)},error:t=>{logErrorAndEnd(r,t)}};return n.subscribe(i),()=>{a?.(),n.unsubscribe(i)}}function unsubscribeAll(t){for(const e of t)e();return[]}function getExtensionFromMediaType(t){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","audio/mpeg":"mp3","audio/wav":"wav","audio/ogg":"ogg","video/mp4":"mp4","video/webm":"webm","application/pdf":"pdf","application/json":"json","text/plain":"txt","text/html":"html","text/csv":"csv"}[t]||"bin"}function convertDataToBlob(t,e){try{if("string"==typeof t){if(!t.startsWith("data:")){if(t.startsWith("http://")||t.startsWith("https://"))return null;{const n=atob(t),r=new Uint8Array(n.length);for(let t=0;t<n.length;t++)r[t]=n.charCodeAt(t);return new Blob([r],{type:e})}}{const n=t.match(/^data:[^;]+;base64,(.+)$/);if(n){const t=n[1],r=atob(t),o=new Uint8Array(r.length);for(let t=0;t<r.length;t++)o[t]=r.charCodeAt(t);return new Blob([o],{type:e})}}}else{if(t instanceof Uint8Array)return new Blob([t],{type:e});if(t instanceof ArrayBuffer)return new Blob([t],{type:e});if("undefined"!=typeof Buffer&&t instanceof Buffer)return new Blob([t],{type:e})}}catch{return null}return null}function processInputAttachments(t){if(!t)return t;let e=0;const n=(t,e)=>{const n=t.match(/^data:([^;]+);/);return n?.[1]||e},r=(t,e,n)=>{const r=convertDataToBlob(t,e);return r?new Attachment({data:r,filename:n,contentType:e}):null},o=t=>{if(Array.isArray(t))return t.map(o);if(!t||"object"!=typeof t)return t;if("image_url"===t.type&&t.image_url&&"object"==typeof t.image_url&&"string"==typeof t.image_url.url&&t.image_url.url.startsWith("data:")){const e=n(t.image_url.url,"image/png"),o=`image.${getExtensionFromMediaType(e)}`,a=r(t.image_url.url,e,o);if(a)return{...t,image_url:{...t.image_url,url:a}}}if("file"===t.type&&t.file&&"object"==typeof t.file&&"string"==typeof t.file.file_data&&t.file.file_data.startsWith("data:")){const e=n(t.file.file_data,"application/octet-stream"),o="string"==typeof t.file.filename&&t.file.filename?t.file.filename:`document.${getExtensionFromMediaType(e)}`,a=r(t.file.file_data,e,o);if(a)return{...t,file:{...t.file,file_data:a}}}if("image"===t.type&&t.image){let o="image/png";"string"==typeof t.image&&t.image.startsWith("data:")?o=n(t.image,o):t.mediaType&&(o=t.mediaType);const a=`input_image_${e}.${getExtensionFromMediaType(o)}`,i=r(t.image,o,a);if(i)return e++,{...t,image:i}}if("file"===t.type&&t.data){const n=t.mediaType||"application/octet-stream",o=t.filename||`input_file_${e}.${getExtensionFromMediaType(n)}`,a=r(t.data,n,o);if(a)return e++,{...t,data:a}}const a={};for(const[e,n]of Object.entries(t))a[e]=o(n);return a};return Array.isArray(t)?t.map(o):o(t)}function channel(t){return t}function defineChannels(t,e){return Object.fromEntries(Object.entries(e).map(([e,n])=>{const r=`orchestrion:${t}:${n.channelName}`;if("async"===n.kind){const t=()=>isomorph_default.newTracingChannel(r);return[e,{...n,tracingChannel:t,tracePromise:(e,n)=>t().tracePromise(e,n)}]}const o=()=>isomorph_default.newTracingChannel(r);return[e,{...n,tracingChannel:o,traceSync:(t,e)=>o().traceSync(t,e)}]}))}var openAIChannels=defineChannels("openai",{chatCompletionsCreate:channel({channelName:"chat.completions.create",kind:"async"}),embeddingsCreate:channel({channelName:"embeddings.create",kind:"async"}),betaChatCompletionsParse:channel({channelName:"beta.chat.completions.parse",kind:"async"}),betaChatCompletionsStream:channel({channelName:"beta.chat.completions.stream",kind:"sync-stream"}),moderationsCreate:channel({channelName:"moderations.create",kind:"async"}),responsesCreate:channel({channelName:"responses.create",kind:"async"}),responsesStream:channel({channelName:"responses.stream",kind:"sync-stream"}),responsesParse:channel({channelName:"responses.parse",kind:"async"}),responsesCompact:channel({channelName:"responses.compact",kind:"async"})}),BRAINTRUST_CACHED_STREAM_METRIC="__braintrust_cached_metric",LEGACY_CACHED_HEADER="x-cached",X_CACHED_HEADER="x-bt-cached",TOKEN_NAME_MAP={input_tokens:"prompt_tokens",output_tokens:"completion_tokens",total_tokens:"tokens"},TOKEN_PREFIX_MAP={input:"prompt",output:"completion"};function parseMetricsFromUsage(t){if(!t)return{};const e={};for(const[n,r]of Object.entries(t)){if("number"==typeof r){e[TOKEN_NAME_MAP[n]||n]=r;continue}if(!n.endsWith("_tokens_details")||!isObject(r))continue;const t=n.slice(0,-15),o=TOKEN_PREFIX_MAP[t]||t;for(const[t,n]of Object.entries(r))"number"==typeof n&&(e[`${o}_${t}`]=n)}return e}function parseCachedHeader(t){if(t)return["true","hit"].includes(t.toLowerCase())?1:0}function getCachedMetricFromHeaders(t){if(!t||"function"!=typeof t.get)return;const e=t.get(X_CACHED_HEADER);return parseCachedHeader(e||t.get(LEGACY_CACHED_HEADER))}var OpenAIPlugin=class extends BasePlugin{constructor(){super()}onEnable(){this.unsubscribers.push(traceStreamingChannel(openAIChannels.chatCompletionsCreate,{name:"Chat Completion",type:"llm",extractInput:([t])=>{const{messages:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractOutput:t=>t?.choices,extractMetrics:(t,e,n)=>{const r=withCachedMetric(parseMetricsFromUsage(t?.usage),t,n);return e&&(r.time_to_first_token=getCurrentUnixTimestamp()-e),r},aggregateChunks:aggregateChatCompletionChunks})),this.unsubscribers.push(traceAsyncChannel(openAIChannels.embeddingsCreate,{name:"Embedding",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:e,metadata:{...n,provider:"openai"}}},extractOutput:t=>{const e=t?.data?.[0]?.embedding;return Array.isArray(e)?{embedding_length:e.length}:void 0},extractMetrics:(t,e,n)=>withCachedMetric(parseMetricsFromUsage(t?.usage),t,n)})),this.unsubscribers.push(traceStreamingChannel(openAIChannels.betaChatCompletionsParse,{name:"Chat Completion",type:"llm",extractInput:([t])=>{const{messages:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractOutput:t=>t?.choices,extractMetrics:(t,e,n)=>{const r=withCachedMetric(parseMetricsFromUsage(t?.usage),t,n);return e&&(r.time_to_first_token=getCurrentUnixTimestamp()-e),r},aggregateChunks:aggregateChatCompletionChunks})),this.unsubscribers.push(traceSyncStreamChannel(openAIChannels.betaChatCompletionsStream,{name:"Chat Completion",type:"llm",extractInput:([t])=>{const{messages:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}}})),this.unsubscribers.push(traceAsyncChannel(openAIChannels.moderationsCreate,{name:"Moderation",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:e,metadata:{...n,provider:"openai"}}},extractOutput:t=>t?.results,extractMetrics:(t,e,n)=>withCachedMetric(parseMetricsFromUsage(t?.usage),t,n)})),this.unsubscribers.push(traceStreamingChannel(openAIChannels.responsesCreate,{name:"openai.responses.create",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractOutput:t=>processImagesInOutput(t?.output),extractMetadata:t=>{if(!t)return;const{output:e,usage:n,...r}=t;return Object.keys(r).length>0?r:void 0},extractMetrics:(t,e,n)=>{const r=withCachedMetric(parseMetricsFromUsage(t?.usage),t,n);return e&&(r.time_to_first_token=getCurrentUnixTimestamp()-e),r},aggregateChunks:aggregateResponseStreamEvents})),this.unsubscribers.push(traceSyncStreamChannel(openAIChannels.responsesStream,{name:"openai.responses.create",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractFromEvent:t=>{if("response.completed"!==t.type||!t.response)return{};const e=t.response,n={};void 0!==e.output&&(n.output=processImagesInOutput(e.output));const{usage:r,output:o,...a}=e;return Object.keys(a).length>0&&(n.metadata=a),n.metrics=parseMetricsFromUsage(e.usage),n}})),this.unsubscribers.push(traceStreamingChannel(openAIChannels.responsesParse,{name:"openai.responses.parse",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractOutput:t=>processImagesInOutput(t?.output),extractMetadata:t=>{if(!t)return;const{output:e,usage:n,...r}=t;return Object.keys(r).length>0?r:void 0},extractMetrics:(t,e,n)=>{const r=withCachedMetric(parseMetricsFromUsage(t?.usage),t,n);return e&&(r.time_to_first_token=getCurrentUnixTimestamp()-e),r},aggregateChunks:aggregateResponseStreamEvents})),this.unsubscribers.push(traceAsyncChannel(openAIChannels.responsesCompact,{name:"openai.responses.compact",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"openai"}}},extractOutput:t=>processImagesInOutput(t?.output),extractMetadata:t=>{if(!t)return;const{output:e,usage:n,...r}=t;return Object.keys(r).length>0?r:void 0},extractMetrics:(t,e,n)=>{const r=withCachedMetric(parseMetricsFromUsage(t?.usage),t,n);return e&&(r.time_to_first_token=getCurrentUnixTimestamp()-e),r}}))}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}};function getCachedMetricFromEndEvent(t){if(!isObject(t))return;const e=t.response;if(!isObject(e))return;const n=e.headers;return n&&"function"==typeof n.get?getCachedMetricFromHeaders(n):void 0}function withCachedMetric(t,e,n){if(void 0!==t.cached)return t;const r=getCachedMetricFromEndEvent(n);if(void 0!==r)return{...t,cached:r};if(!isObject(e))return t;const o=e[BRAINTRUST_CACHED_STREAM_METRIC];return"number"!=typeof o?t:{...t,cached:o}}function processImagesInOutput(t){if(Array.isArray(t))return t.map(processImagesInOutput);if(isObject(t)&&"image_generation_call"===t.type&&t.result&&"string"==typeof t.result){const e=t.output_format||"png",n=`image/${e}`,r=`${t.revised_prompt&&"string"==typeof t.revised_prompt?t.revised_prompt.slice(0,50).replace(/[^a-zA-Z0-9]/g,"_"):"generated_image"}.${e}`,o=atob(t.result),a=new Uint8Array(o.length);for(let t=0;t<o.length;t++)a[t]=o.charCodeAt(t);const i=new Blob([a],{type:n}),s=new Attachment({data:i,filename:r,contentType:n});return{...t,result:s}}return t}function mergeLogprobTokens(t,e){return void 0===e?t:null===e?t??null:Array.isArray(t)?[...t,...e]:[...e]}function aggregateChatLogprobs(t,e){if(void 0===e)return t;if(null===e)return t??null;const n=t&&null!==t?{...t,...e}:{...e},r=mergeLogprobTokens(t?.content,e.content);void 0!==r&&(n.content=r);const o=mergeLogprobTokens(t?.refusal,e.refusal);return void 0!==o&&(n.refusal=o),n}function aggregateChatCompletionChunks(t,e,n){let r,o,a,i,s,c,u={};for(const e of t){e.usage&&(u={...u,...parseMetricsFromUsage(e.usage)});const t=e.choices?.[0];if(!t)continue;t.finish_reason&&(c=t.finish_reason),s=aggregateChatLogprobs(s,t.logprobs);const n=t.delta;if(n&&(n.finish_reason&&(c=n.finish_reason),!r&&n.role&&(r=n.role),n.content&&(o=(o||"")+n.content),n.refusal&&(a=(a||"")+n.refusal),n.tool_calls)){const t=n.tool_calls[0];!i||t.id&&i[i.length-1].id!==t.id?i=[...i||[],{id:t.id,type:t.type,function:t.function}]:i[i.length-1].function.arguments+=t.function.arguments}}return u=withCachedMetric(u,e,n),{metrics:u,output:[{index:0,message:{role:r,content:o,...void 0!==a?{refusal:a}:{},tool_calls:i},logprobs:s??null,finish_reason:c}]}}function aggregateResponseStreamEvents(t,e,n){let r,o,a={};for(const e of t){if(!e||!e.type||!e.response)continue;if("response.completed"!==e.type)continue;const t=e.response;void 0!==t?.output&&(r=processImagesInOutput(t.output));const{usage:n,output:i,...s}=t||{};Object.keys(s).length>0&&(o=s),a=parseMetricsFromUsage(t?.usage)}return{output:r,metrics:withCachedMetric(a,void 0,n),...void 0!==o?{metadata:o}:{}}}var openAICodexChannels=defineChannels("@openai/codex-sdk",{run:channel({channelName:"Thread.run",kind:"async"}),runStreamed:channel({channelName:"Thread.runStreamed",kind:"async"})}),PATCHED_STREAMED_TURN=Symbol.for("braintrust.openai-codex.patched-streamed-turn"),OpenAICodexPlugin=class extends BasePlugin{onEnable(){this.subscribeToRun(),this.subscribeToRunStreamed()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[]}subscribeToRun(){const t=openAICodexChannels.run.tracingChannel(),e=new WeakMap,n={start:t=>{e.set(t,startCodexRun(t,"Thread.run"))},asyncEnd:async t=>{const n=e.get(t);n&&(e.delete(t),await finalizeCompletedRun(n,t.result))},error:async t=>{const n=e.get(t);n&&(e.delete(t),await finalizeCodexRun(n,{error:t.error}))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}subscribeToRunStreamed(){const t=openAICodexChannels.runStreamed.tracingChannel(),e=new WeakMap,n={start:t=>{e.set(t,startCodexRun(t,"Thread.runStreamed"))},asyncEnd:async t=>{const n=e.get(t);n&&(e.delete(t),await patchStreamedTurn(t.result,n))},error:async t=>{const n=e.get(t);n&&(e.delete(t),await finalizeCodexRun(n,{error:t.error}))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}};function startCodexRun(t,e){const n=t.arguments[0],r=t.arguments[1],o=t.thread??extractThreadFromEvent(t),a=sanitizeInput(n),i={...extractThreadMetadata(o),...extractTurnOptionsMetadata(r),"openai_codex.operation":e,provider:"openai",...t.moduleVersion?{"openai_codex.version":t.moduleVersion}:{}},s=startSpan({name:"OpenAI Codex",spanAttributes:{type:"task"}}),c=getCurrentUnixTimestamp();return safeLog(s,{input:a,metadata:i}),{activeItemSpans:new Map,completedItems:[],finalized:!1,input:a,llmSequence:0,metadata:i,metrics:{},outputText:[],span:s,startTime:c}}async function patchStreamedTurn(t,e){if(!t||"object"!=typeof t)return void await finalizeCodexRun(e,{output:t});const n=t;if(!n[PATCHED_STREAMED_TURN]&&isAsyncIterable2(n.events))try{Object.defineProperty(n,PATCHED_STREAMED_TURN,{configurable:!1,enumerable:!1,value:!0}),n.events=patchCodexEventStream(n.events,e)}catch{await finalizeCodexRun(e,{output:t})}}async function*patchCodexEventStream(t,e){try{for await(const n of t){try{await handleCodexEvent(e,n)}catch(t){logInstrumentationError("OpenAI Codex stream event",t)}yield n}await finalizeCodexRun(e)}catch(t){throw await finalizeCodexRun(e,{error:t}),t}}async function handleCodexEvent(t,e){switch(e.type){case"thread.started":return void(t.metadata["openai_codex.thread_id"]=e.thread_id);case"turn.completed":return void Object.assign(t.metrics,extractUsageMetrics(e.usage));case"turn.failed":return void await finalizeCodexRun(t,{error:e.error?.message??"Codex turn failed"});case"item.started":return void await handleCodexItemStarted(t,e.item);case"item.updated":return void await handleCodexItemUpdated(t,e.item);case"item.completed":return void await handleCodexItemCompleted(t,e.item);case"error":return void(e.message&&debugLogger.debug("OpenAI Codex stream event:",e.message));default:return}}async function finalizeCompletedRun(t,e){if(e){Object.assign(t.metrics,extractUsageMetrics(e.usage)),t.finalResponse=e.finalResponse;for(const n of e.items??[])await handleCodexItemCompleted(t,n);await finalizeCodexRun(t,{output:e.finalResponse})}else await finalizeCodexRun(t,{output:e})}async function finalizeCodexRun(t,e={}){if(t.finalized)return;t.finalized=!0;const n=e.output??t.finalResponse??(t.outputText.length>0?t.outputText.join("\n"):void 0),r={...cleanMetrics(t.metrics),...buildDurationMetrics(t.startTime)};await finishActiveLlmSpan(t,e.error);try{const o=e.error;safeLog(t.span,{...o?{error:toLoggedError(o)}:{},metadata:t.metadata,metrics:r,output:n})}finally{endOpenItemSpans(t),t.span.end()}}async function handleCodexItemStarted(t,e){if(isCodexToolItem(e))return await finishActiveLlmSpan(t),void await startCodexItemSpan(t,e);await recordCodexLlmItem(t,e,{allowAnonymousText:!1})}async function handleCodexItemUpdated(t,e){updateCodexItem(t,e),await recordCodexLlmItem(t,e,{allowAnonymousText:!1})}async function handleCodexItemCompleted(t,e){if(t.completedItems.push(e),collectOutputText(t,e),isCodexToolItem(e))return await finishActiveLlmSpan(t),void await finishCodexItemSpan(t,e);await recordCodexLlmItem(t,e,{allowAnonymousText:!0})}async function createCompletedItemSpan(t,e){const n=await itemSpanArgs(t,e);if(!n)return;const r=startSpan(n.start);safeLog(r,n.end),r.end()}async function recordCodexLlmItem(t,e,n){if("agent_message"!==e.type&&"reasoning"!==e.type)return;const r="string"==typeof e.text?e.text:void 0,o=await ensureActiveLlmSpan(t);r&&("agent_message"===e.type?e.id?o.messagesById.set(e.id,r):n.allowAnonymousText&&o.anonymousMessages.push(r):e.id?o.reasoningById.set(e.id,r):n.allowAnonymousText&&o.anonymousReasoning.push(r))}async function ensureActiveLlmSpan(t){if(t.activeLlmSpan)return t.activeLlmSpan;const e=t.llmSequence+1;t.llmSequence=e;const n={...t.metadata.provider?{provider:t.metadata.provider}:{},...t.metadata.model?{model:t.metadata.model}:{},...t.metadata["openai_codex.model"]?{"openai_codex.model":t.metadata["openai_codex.model"]}:{},...t.metadata["openai_codex.model_reasoning_effort"]?{"openai_codex.model_reasoning_effort":t.metadata["openai_codex.model_reasoning_effort"]}:{},...t.metadata["openai_codex.operation"]?{"openai_codex.operation":t.metadata["openai_codex.operation"]}:{},...t.metadata["openai_codex.thread_id"]?{"openai_codex.thread_id":t.metadata["openai_codex.thread_id"]}:{},"openai_codex.llm_sequence":e},r=startSpan({event:{...1===e?{input:t.input}:{},metadata:n},name:"OpenAI Codex LLM",parent:await t.span.export(),spanAttributes:{type:"llm"}});return t.activeLlmSpan={anonymousMessages:[],anonymousReasoning:[],messagesById:new Map,metadata:n,reasoningById:new Map,span:r},t.activeLlmSpan}async function finishActiveLlmSpan(t,e){const n=t.activeLlmSpan;if(!n)return;t.activeLlmSpan=void 0;const r=buildLlmOutput(n);safeLog(n.span,{...e?{error:toLoggedError(e)}:{},metadata:n.metadata,...r?{output:r}:{}}),n.span.end()}function buildLlmOutput(t){const e=[...t.reasoningById.values(),...t.anonymousReasoning].filter(t=>t.length>0).join("\n"),n=[...t.messagesById.values(),...t.anonymousMessages].filter(t=>t.length>0).join("\n"),r={...e?{reasoning:e}:{},...n?{message:n}:{}};return Object.keys(r).length>0?r:void 0}async function startCodexItemSpan(t,e){const n=e.id;if(!n||t.activeItemSpans.has(n))return;const r=await itemSpanArgs(t,e);r&&t.activeItemSpans.set(n,startSpan(r.start))}function updateCodexItem(t,e){"agent_message"===e.type&&"string"==typeof e.text&&(t.finalResponse=e.text)}async function finishCodexItemSpan(t,e){const n=e.id;if(!n)return void await createCompletedItemSpan(t,e);const r=t.activeItemSpans.get(n);if(!r)return void await createCompletedItemSpan(t,e);t.activeItemSpans.delete(n);const o=await itemSpanArgs(t,e);o&&safeLog(r,o.end),r.end()}function isCodexToolItem(t){return"command_execution"===t.type||"file_change"===t.type||"mcp_tool_call"===t.type||"web_search"===t.type}async function itemSpanArgs(t,e){const n=await t.span.export(),r={"openai_codex.item_id":e.id,"openai_codex.item_type":e.type};switch(e.type){case"command_execution":return commandSpanArgs(n,r,e);case"mcp_tool_call":return mcpToolSpanArgs(n,r,e);case"web_search":return webSearchSpanArgs(n,r,e);case"file_change":return fileChangeSpanArgs(n,r,e);default:return}}function commandSpanArgs(t,e,n){const r={...e,"gen_ai.tool.name":"command_execution","openai_codex.command.exit_code":n.exit_code,"openai_codex.command.status":n.status};return{start:{event:{input:n.command,metadata:r},name:"tool: command_execution",parent:t,spanAttributes:{type:"tool"}},end:{..."failed"===n.status?{error:n.aggregated_output||"Command execution failed"}:{},metadata:r,output:n.aggregated_output}}}function mcpToolSpanArgs(t,e,n){const r=n.tool||"mcp_tool_call",o={...e,"gen_ai.tool.name":r,"openai_codex.mcp.server":n.server,"openai_codex.mcp.status":n.status};return{start:{event:{input:{arguments:n.arguments,server:n.server,tool:n.tool},metadata:o},name:`tool: ${r}`,parent:t,spanAttributes:{type:"tool"}},end:{...n.error?.message?{error:n.error.message}:{},metadata:o,output:n.result}}}function webSearchSpanArgs(t,e,n){const r={...e,"gen_ai.tool.name":"web_search"};return{start:{event:{input:n.query,metadata:r},name:"tool: web_search",parent:t,spanAttributes:{type:"tool"}},end:{metadata:r}}}function fileChangeSpanArgs(t,e,n){const r={...e,"gen_ai.tool.name":"file_change","openai_codex.file_change.status":n.status};return{start:{event:{input:n.changes,metadata:r},name:"tool: file_change",parent:t,spanAttributes:{type:"tool"}},end:{..."failed"===n.status?{error:"File change failed"}:{},metadata:r,output:n.changes}}}function endOpenItemSpans(t){for(const[,e]of t.activeItemSpans)safeLog(e,{error:"Codex item did not complete"}),e.end();t.activeItemSpans.clear()}function collectOutputText(t,e){"agent_message"===e.type&&"string"==typeof e.text?(t.finalResponse=e.text,t.outputText.push(e.text)):"reasoning"!==e.type||"string"!=typeof e.text||t.finalResponse||t.outputText.push(e.text)}function extractThreadFromEvent(t){return t.self&&"object"==typeof t.self?t.self:void 0}function extractThreadMetadata(t){const e=extractThreadOptions(t);return{...t?.id?{"openai_codex.thread_id":t.id}:{},...extractThreadOptionsMetadata(e)}}function extractThreadOptions(t){if(!t||"object"!=typeof t)return;const e=Reflect.get(t,"_threadOptions");return e&&"object"==typeof e?e:void 0}function extractThreadOptionsMetadata(t){return t?{...t.model?{model:t.model}:{},...t.model?{"openai_codex.model":t.model}:{},...t.sandboxMode?{"openai_codex.sandbox_mode":t.sandboxMode}:{},...t.workingDirectory?{"openai_codex.working_directory":t.workingDirectory}:{},...void 0!==t.skipGitRepoCheck?{"openai_codex.skip_git_repo_check":t.skipGitRepoCheck}:{},...t.modelReasoningEffort?{"openai_codex.model_reasoning_effort":t.modelReasoningEffort}:{},...void 0!==t.networkAccessEnabled?{"openai_codex.network_access_enabled":t.networkAccessEnabled}:{},...t.webSearchMode?{"openai_codex.web_search_mode":t.webSearchMode}:{},...void 0!==t.webSearchEnabled?{"openai_codex.web_search_enabled":t.webSearchEnabled}:{},...t.approvalPolicy?{"openai_codex.approval_policy":t.approvalPolicy}:{},...t.additionalDirectories?{"openai_codex.additional_directories":t.additionalDirectories}:{}}:{}}function extractTurnOptionsMetadata(t){return t?{...void 0!==t.outputSchema?{"openai_codex.output_schema":!0}:{}}:{}}function sanitizeInput(t){return"string"==typeof t?t:t.map(t=>"local_image"===t.type?{path:t.path,type:"local_image"}:t)}function extractUsageMetrics(t){if(!t)return{};const e={},n=firstNumber(t.prompt_tokens,t.input_tokens);void 0!==n&&(e.prompt_tokens=n);const r=firstNumber(t.prompt_cached_tokens,t.cached_input_tokens);void 0!==r&&(e.prompt_cached_tokens=r);const o=firstNumber(t.completion_tokens,t.output_tokens);void 0!==o&&(e.completion_tokens=o);const a=firstNumber(t.completion_reasoning_tokens,t.reasoning_output_tokens);void 0!==a&&(e.completion_reasoning_tokens=a);const i=firstNumber(t.totalTokens,t.tokens,t.total_tokens);return void 0!==i&&(e.tokens=i),e}function firstNumber(...t){for(const e of t)if("number"==typeof e)return e}function buildDurationMetrics(t){const e=getCurrentUnixTimestamp();return{duration:e-t,end:e,start:t}}function cleanMetrics(t){const e={};for(const[n,r]of Object.entries(t))void 0!==r&&Number.isFinite(r)&&(e[n]=r);return e}function isAsyncIterable2(t){return!!t&&"object"==typeof t&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function safeLog(t,e){try{t.log(e)}catch(t){logInstrumentationError("OpenAI Codex span log",t)}}function logInstrumentationError(t,e){debugLogger.error(`Error processing ${t}:`,e)}function finalizeAnthropicTokens(t){const e=(t.prompt_tokens||0)+(t.prompt_cached_tokens||0)+(t.prompt_cache_creation_tokens||0);return{...t,prompt_tokens:e,tokens:e+(t.completion_tokens||0)}}function extractAnthropicCacheTokens(t=0,e=0){const n={};return t>0&&(n.prompt_cached_tokens=t),e>0&&(n.prompt_cache_creation_tokens=e),n}var anthropicChannels=defineChannels("@anthropic-ai/sdk",{messagesCreate:channel({channelName:"messages.create",kind:"async"}),betaMessagesCreate:channel({channelName:"beta.messages.create",kind:"async"}),betaMessagesToolRunner:channel({channelName:"beta.messages.toolRunner",kind:"sync-stream"})}),ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED=Symbol.for("braintrust.anthropic_tool_runner_tool_wrapped"),AnthropicPlugin=class extends BasePlugin{onEnable(){this.subscribeToAnthropicChannels(),this.subscribeToAnthropicToolRunner()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToAnthropicChannels(){const t={name:"anthropic.messages.create",type:"llm",extractInput:t=>{const e=t[0]||{},n=coalesceInput(e.messages||[],e.system),r=filterFrom(e,["messages","system"]);return{input:processAttachmentsInInput(n),metadata:{...r,provider:"anthropic"}}},extractOutput:t=>t?{role:t.role,content:t.content}:null,extractMetrics:(t,e)=>{const n=parseMetricsFromUsage2(t?.usage);e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e);const r=finalizeAnthropicTokens(n);return Object.fromEntries(Object.entries(r).filter(t=>void 0!==t[1]))},extractMetadata:t=>{const e={},n=["stop_reason","stop_sequence"];for(const r of n)void 0!==t?.[r]&&(e[r]=t[r]);return e},aggregateChunks:t=>aggregateAnthropicStreamChunks(t)};this.unsubscribers.push(traceStreamingChannel(anthropicChannels.messagesCreate,t)),this.unsubscribers.push(traceStreamingChannel(anthropicChannels.betaMessagesCreate,{...t,name:"anthropic.messages.create"}))}subscribeToAnthropicToolRunner(){const t=anthropicChannels.betaMessagesToolRunner.tracingChannel(),e=new WeakMap,n={start:t=>{if(isAutoInstrumentationSuppressed())return;const n=t.arguments[0]??{},r=startSpan({name:"anthropic.beta.messages.toolRunner",spanAttributes:{type:"task"}});r.log({input:processAttachmentsInInput(coalesceInput(n.messages??[],n.system)),metadata:{...extractAnthropicToolRunnerMetadata(n),provider:"anthropic"}});const o={aggregatedMetrics:{},finalized:!1,iterationCount:0,seenMessages:new WeakSet,span:r,startTime:getCurrentUnixTimestamp()};e.set(t,o)},end:t=>{const n=e.get(t);n&&patchAnthropicToolRunner({runner:t.result,state:n})},error:t=>{const n=e.get(t);n&&t.error&&(finalizeAnthropicToolRunnerError(n,t.error),e.delete(t))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}};function parseMetricsFromUsage2(t){if(!t)return{};const e={};function n(n,r){const o=t[n];null!=o&&"number"==typeof o&&(e[r]=o)}if(n("input_tokens","prompt_tokens"),n("output_tokens","completion_tokens"),n("cache_read_input_tokens","prompt_cached_tokens"),n("cache_creation_input_tokens","prompt_cache_creation_tokens"),isObject(t.server_tool_use))for(const[n,r]of Object.entries(t.server_tool_use))"number"==typeof r&&(e[`server_tool_use_${n}`]=r);return e}function extractAnthropicToolRunnerMetadata(t){const e=filterFrom(t,["messages","system","tools"]),n=extractAnthropicToolNames(t.tools);return{...e,operation:"toolRunner",...n.length>0?{tool_names:n}:{}}}function extractAnthropicToolNames(t){const e=[];for(const n of t){if(!n||"object"!=typeof n)continue;const t=n;"string"!=typeof t.name?"string"==typeof t.mcp_server_name&&e.push(t.mcp_server_name):e.push(t.name)}return e}function getAnthropicToolRunnerInput(t){return t.length>0?t[0]:void 0}function wrapAnthropicToolRunnerTools(t,e){Array.isArray(t.tools)&&(t.tools=t.tools.map((t,n)=>wrapAnthropicToolRunnerTool(t,n,e)))}function wrapAnthropicToolRunnerTool(t,e,n){if(!t||"object"!=typeof t||"function"!=typeof t.run||t[ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED])return t;const r="string"==typeof t.name?t.name:`tool[${e}]`,o=t.run,a=Object.getOwnPropertyDescriptor(t,"run"),i=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t));return Object.defineProperty(i,"run",{configurable:a?.configurable??!0,enumerable:a?.enumerable??!0,value:function(...t){return n.span.traced(e=>{const n=t=>(e.log({output:t}),t),r=t=>{throw e.log({error:toLoggedError(t)}),t};try{const e=Reflect.apply(o,this,t);return isPromiseLike(e)?e.then(n,r):n(e)}catch(t){return r(t)}},{event:{input:getAnthropicToolRunnerInput(t),metadata:{"gen_ai.tool.name":r,provider:"anthropic"}},name:`tool: ${r}`,spanAttributes:{type:"tool"}})},writable:a?.writable??!0}),Object.defineProperty(i,ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED,{configurable:!1,enumerable:!1,value:!0,writable:!1}),i}function getAnthropicToolRunnerParams(t){const e=Reflect.get(t,"params");return e&&"object"==typeof e?e:void 0}function ensureAnthropicToolRunnerToolsWrapped(t,e){const n=getAnthropicToolRunnerParams(t);n&&wrapAnthropicToolRunnerTools(n,e)}function wrapAnthropicToolRunnerSetMessagesParams(t,e){const n=Reflect.get(t,"setMessagesParams");"function"==typeof n&&Reflect.set(t,"setMessagesParams",function(...r){const o=Reflect.apply(n,this,r),a=getAnthropicToolRunnerParams(t);return a&&wrapAnthropicToolRunnerTools(a,e),o})}function isAnthropicMessage(t){return!!t&&"object"==typeof t&&"string"==typeof t.role&&Array.isArray(t.content)}function isAnthropicMessageStream(t){return!!t&&"object"==typeof t&&isAsyncIterable(t)&&"finalMessage"in t&&"function"==typeof t.finalMessage}function recordAnthropicToolRunnerMessage(t,e){if("object"!=typeof e||null===e)return;if(t.seenMessages.has(e))return void(t.lastMessage=e);t.seenMessages.add(e),t.lastMessage=e;const n=parseMetricsFromUsage2(e.usage);for(const[e,r]of Object.entries(n))"number"==typeof r&&(t.aggregatedMetrics[e]=(t.aggregatedMetrics[e]??0)+r)}function instrumentAnthropicMessageStream(t,e){if(!("__braintrust_tool_runner_stream_patched"in t)){if(Object.isFrozen(t)||Object.isSealed(t)||patchStreamIfNeeded(t,{onChunk:()=>{void 0===e.firstTokenTime&&(e.firstTokenTime=getCurrentUnixTimestamp())},onComplete:()=>{}}),"function"==typeof t.finalMessage){const n=t.finalMessage.bind(t);t.finalMessage=async()=>{const t=await n();return recordAnthropicToolRunnerMessage(e,t),t}}Object.defineProperty(t,"__braintrust_tool_runner_stream_patched",{value:!0})}}async function finalizeAnthropicToolRunner(t,e){if(t.finalized)return;t.finalized=!0;const n=e??t.lastMessage;n&&recordAnthropicToolRunnerMessage(t,n);const r=finalizeAnthropicTokens({...t.aggregatedMetrics});void 0!==t.firstTokenTime&&(r.time_to_first_token=t.firstTokenTime-t.startTime);const o={anthropic_tool_runner_iterations:t.iterationCount};void 0!==n?.stop_reason&&(o.stop_reason=n.stop_reason),void 0!==n?.stop_sequence&&(o.stop_sequence=n.stop_sequence),t.span.log({...n?{output:{role:n.role,content:n.content}}:{},metadata:o,metrics:Object.fromEntries(Object.entries(r).filter(t=>void 0!==t[1]))}),t.span.end()}function finalizeAnthropicToolRunnerError(t,e){t.finalized||(t.finalized=!0,t.span.log({error:toLoggedError(e)}),t.span.end())}async function resolveAnthropicToolRunnerFinalMessage(t){return"function"==typeof t.done?await t.done():"function"==typeof t.runUntilDone?await t.runUntilDone():void 0}function wrapAnthropicToolRunnerPromiseMethod(t,e,n){const r=t[e];"function"==typeof r&&(t[e]=async(...e)=>(ensureAnthropicToolRunnerToolsWrapped(t,n),await withCurrent(n.span,async()=>{try{const o=await r.apply(t,e);return recordAnthropicToolRunnerMessage(n,o),await finalizeAnthropicToolRunner(n,o),o}catch(t){throw finalizeAnthropicToolRunnerError(n,t),t}})))}function patchAnthropicToolRunner(t){const{runner:e,state:n}=t;if(!e||"object"!=typeof e)return void finalizeAnthropicToolRunner(n);const r=e;if("__braintrust_tool_runner_patched"in r)return;if(ensureAnthropicToolRunnerToolsWrapped(r,n),wrapAnthropicToolRunnerSetMessagesParams(r,n),wrapAnthropicToolRunnerPromiseMethod(r,"done",n),wrapAnthropicToolRunnerPromiseMethod(r,"runUntilDone",n),!isAsyncIterable(r))return void Object.defineProperty(r,"__braintrust_tool_runner_patched",{value:!0});const o=r[Symbol.asyncIterator].bind(r);r[Symbol.asyncIterator]=function(){const t=o();return{async next(o){try{ensureAnthropicToolRunnerToolsWrapped(r,n);const a=await withCurrent(n.span,()=>void 0===o?t.next():t.next(o));if(a.done){const t=await resolveAnthropicToolRunnerFinalMessage(e);return await finalizeAnthropicToolRunner(n,t),a}return n.iterationCount+=1,isAnthropicMessage(a.value)?(void 0===n.firstTokenTime&&(n.firstTokenTime=getCurrentUnixTimestamp()),recordAnthropicToolRunnerMessage(n,a.value)):isAnthropicMessageStream(a.value)&&instrumentAnthropicMessageStream(a.value,n),a}catch(t){throw finalizeAnthropicToolRunnerError(n,t),t}},async return(o){try{ensureAnthropicToolRunnerToolsWrapped(r,n);const a="function"==typeof t.return?await withCurrent(n.span,()=>t.return(o)):{done:!0,value:o},i=await resolveAnthropicToolRunnerFinalMessage(e).catch(()=>{});return await finalizeAnthropicToolRunner(n,i),a}catch(t){throw finalizeAnthropicToolRunnerError(n,t),t}},async throw(e){if(finalizeAnthropicToolRunnerError(n,e),"function"==typeof t.throw)return await withCurrent(n.span,()=>t.throw(e));throw e},[Symbol.asyncIterator](){return this}}},Object.defineProperty(r,"__braintrust_tool_runner_patched",{value:!0})}function aggregateAnthropicStreamChunks(t){const e=[],n={},r={};let o,a={},i={};for(const s of t)switch(s?.type){case"message_start":if(s.message?.usage){const t=parseMetricsFromUsage2(s.message.usage);a={...a,...t}}"string"==typeof s.message?.role&&(o=s.message.role);break;case"content_block_start":s.content_block&&(n[s.index]=s.content_block,r[s.index]={textDeltas:[],citations:[]});break;case"content_block_delta":{const t=r[s.index],n=s.delta;if(!n)break;if("text_delta"===n.type&&"text"in n){const r=n.text;r&&(void 0!==t?t.textDeltas.push(r):e.push(r))}else if("input_json_delta"===n.type&&"partial_json"in n){const e=n.partial_json;e&&void 0!==t&&t.textDeltas.push(e)}else if("thinking_delta"===n.type&&"thinking"in n){const e=n.thinking;e&&void 0!==t&&t.textDeltas.push(e)}else if("citations_delta"===n.type&&"citation"in n){const e=n.citation;e&&void 0!==t&&t.citations.push(e)}break}case"content_block_stop":finalizeContentBlock(s.index,n,r,e);break;case"message_delta":if(s.usage){const t=parseMetricsFromUsage2(s.usage);a={...a,...t}}s.delta&&(i={...i,...s.delta})}const s=Object.entries(n).map(([t,e])=>({block:e,index:Number(t)})).filter(({block:t})=>void 0!==t).sort((t,e)=>t.index-e.index).map(({block:t})=>t);let c=e.join("");s.length>0&&(c=s.every(isTextContentBlock)&&s.every(t=>!t.citations?.length)?s.map(t=>t.text).join(""):{...o?{role:o}:{},content:s});const u=finalizeAnthropicTokens(a);return{output:c,metrics:Object.fromEntries(Object.entries(u).filter(t=>void 0!==t[1])),metadata:i}}function finalizeContentBlock(t,e,n,r){const o=e[t];if(!o)return;const a=n[t],i=a?.textDeltas.join("")??"";if(!isToolUseLikeContentBlock(o)){if(isTextContentBlock(o)){if(!i)return void delete e[t];const n={...o,text:i};return a?.citations.length&&(n.citations=a.citations),void(e[t]=n)}return isThinkingContentBlock(o)?i?void(e[t]={...o,thinking:i}):void delete e[t]:void 0}if(i)try{const n=JSON.parse(i);if(!isObject(n))return r.push(i),void delete e[t];const a={type:o.type,id:o.id,name:o.name,input:n};e[t]=a}catch{r.push(i),delete e[t]}}function isTextContentBlock(t){return"text"===t.type}function isToolUseLikeContentBlock(t){return("tool_use"===t.type||"server_tool_use"===t.type)&&"string"==typeof t.id&&"string"==typeof t.name&&isObject(t.input)}function isThinkingContentBlock(t){return"thinking"===t.type}function isAnthropicBase64ContentBlock(t){return("image"===t.type||"document"===t.type)&&isObject(t.source)&&"base64"===t.source.type}function convertBase64ToAttachment(t,e){const n="string"==typeof t.media_type?t.media_type:"image/png",r=t.data;if(r&&"string"==typeof r){const o=atob(r),a=new Uint8Array(o.length);for(let t=0;t<o.length;t++)a[t]=o.charCodeAt(t);const i=new Blob([a],{type:n}),s=n.split("/")[1]||"bin",c=new Attachment({data:i,filename:`${"document"===e?"document":"image"}.${s}`,contentType:n});return{...t,data:c}}return{...t}}function processAttachmentsInInput(t){if(Array.isArray(t))return t.map(processAttachmentsInInput);if(isObject(t)){if(isAnthropicBase64ContentBlock(t))return{...t,source:convertBase64ToAttachment(t.source,t.type)};const e={};for(const[n,r]of Object.entries(t))e[n]=processAttachmentsInInput(r);return e}return t}function coalesceInput(t,e){const n=(t||[]).slice();return e&&n.unshift({role:"system",content:e}),n}var REMOVE_NORMALIZED_VALUE=Symbol("braintrust.ai-sdk.remove-normalized");function normalizeAISDKLoggedOutput(t){const e=normalizeAISDKLoggedValue(t);return e===REMOVE_NORMALIZED_VALUE?{}:e}function normalizeAISDKLoggedValue(t,e={}){if(Array.isArray(t))return t.map(t=>normalizeAISDKLoggedValue(t,e)).filter(t=>t!==REMOVE_NORMALIZED_VALUE);if(!t||"object"!=typeof t)return t;const n=e.inProviderMetadata||"providerMetadata"===e.parentKey||"experimental_providerMetadata"===e.parentKey,r=[];for(const[o,a]of Object.entries(t)){if("cachedPromptTokens"===o&&0===a)continue;if("request"===e.parentKey&&"body"===o&&"<omitted>"===a)continue;const t=normalizeAISDKLoggedValue(a,{inProviderMetadata:n,parentKey:o});t!==REMOVE_NORMALIZED_VALUE&&r.push([o,t])}return 0===r.length?"request"===e.parentKey||n?REMOVE_NORMALIZED_VALUE:{}:Object.fromEntries(r)}var import_zod_to_json_schema=require("zod-to-json-schema"),z42=__toESM(require("zod/v4"));function isZodV4(t){return"object"==typeof t&&null!==t&&"_zod"in t&&void 0!==t._zod}function zodToJsonSchema(t){return isZodV4(t)?z42.toJSONSchema(t,{target:"draft-7"}):(0,import_zod_to_json_schema.zodToJsonSchema)(t)}function isZodSchema(t){return null!=t&&"object"==typeof t&&"_def"in t&&"object"==typeof t._def}function serializeZodSchema(t){try{return zodToJsonSchema(t)}catch{return{type:"object",description:"Zod schema (conversion failed)"}}}function serializeTool(t){if(!t||"object"!=typeof t)return t;const e={...t};return isZodSchema(e.inputSchema)&&(e.inputSchema=serializeZodSchema(e.inputSchema)),isZodSchema(e.parameters)&&(e.parameters=serializeZodSchema(e.parameters)),"execute"in e&&delete e.execute,"render"in e&&delete e.render,e}function serializeAISDKToolsForLogging(t){if(!t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(serializeTool);const e={};for(const[n,r]of Object.entries(t))e[n]=serializeTool(r);return e}var BRAINTRUST_AI_SDK_V7_OPERATION_KEY=Symbol.for("braintrust.ai-sdk.v7.telemetry-operation-key"),workflowAgentWrapperSpans=new Map;function registerWorkflowAgentWrapperSpan(t){t.spanId&&workflowAgentWrapperSpans.set(t.spanId,t)}function unregisterWorkflowAgentWrapperSpan(t){t.spanId&&workflowAgentWrapperSpans.delete(t.spanId)}function currentWorkflowAgentWrapperSpan(){const t=_internalGetGlobalState().contextManager.getParentSpanIds()?.spanParents??[];for(const e of t){const t=workflowAgentWrapperSpans.get(e);if(t)return t}}function braintrustAISDKTelemetry(){const t=new Map,e=new Map,n=isomorph_default.newAsyncLocalStorage(),r=new Map,o=new Map,a=new Map,i=new Map,s=new Map;let c=0;const u=(t,e)=>{try{e()}catch(e){console.error(`Error in Braintrust AI SDK telemetry ${t}:`,e)}},p=(e,n,r,o)=>{const a=t.get(e)?.span,i={name:n,spanAttributes:{type:r},...o?{event:o}:{}},s=a?a.startSpan(i):startSpan(i),c=t.get(e);return c&&"llm"===r&&(c.hadModelChild=!0),s},l=r=>{const o=t.get(r);if(!o)return;t.delete(r),n.getStore()===r&&n.enterWith(void 0);const a=e.get(o.callId);if(!a)return;const i=a.indexOf(r);i>=0&&a.splice(i,1),0===a.length&&e.delete(o.callId)},d=t=>{if(!isObject(t))return;const e=t[BRAINTRUST_AI_SDK_V7_OPERATION_KEY];return"string"==typeof e?e:void 0},m=(r,o="active")=>{const a=e.get(r);if(!a||0===a.length)return t.has(r)?r:void 0;if(1===a.length)return a[0];const i=currentWorkflowAgentWrapperSpan();if(i?.spanId){const e=a.find(e=>t.get(e)?.span.spanId===i.spanId);if(e)return e}const s=n.getStore();return s&&a.includes(s)?s:"workflow-agent"!==r?"finish"===o?a[0]:a[a.length-1]:void 0},g=(r,o="active")=>{const a=d(r);if(a&&t.has(a))return a;if(isObject(r)){const e=r.callId;if("string"==typeof e){const r=m(e,o);if(r)return r;const a=n.getStore();return a&&t.has(a)?a:"workflow-agent"===e?void 0:e}}const i=n.getStore();if(i&&t.has(i))return i;const s=currentWorkflowAgentWrapperSpan();if(s?.spanId)for(const[e,n]of t)if("WorkflowAgent.stream"===n.operationName&&n.span.spanId===s.spanId)return e;const c=e.get("workflow-agent");return 1===c?.length?c[0]:1===t.size?t.keys().next().value:void 0},f=(t,e)=>{const n=r.get(t);if(n){for(const t of n)void 0!==e&&logError(t,e),t.end();r.delete(t)}const c=o.get(t);c&&(void 0!==e&&logError(c,e),c.end(),o.delete(t));for(const[n,r]of a)r.operationKey===t&&(void 0!==e&&logError(r.span,e),r.span.end(),a.delete(n));const u=i.get(t);u&&(void 0!==e&&logError(u,e),u.end(),i.delete(t));for(const[n,r]of s)r.operationKey===t&&(void 0!==e&&logError(r.span,e),r.span.end(),s.delete(n))},h=t=>"WorkflowAgent.stream"===t?.operationName&&!t.ownsSpan;return{onStart(r){u("onStart",()=>{const o=operationNameFromId(r.operationId),a="WorkflowAgent.stream"===o,i=a?currentWorkflowAgentWrapperSpan():void 0,s=!i,u=s?startSpan({name:o,spanAttributes:{type:"function"}}):i,p=((t,e)=>{const n=d(t);return n||("WorkflowAgent.stream"===e?(c+=1,`${t.callId}:${c}`):t.callId)})(r,o);if((n=>{t.set(n.operationKey,n);const r=e.get(n.callId)??[];r.push(n.operationKey),e.set(n.callId,r)})({callId:r.callId,hadModelChild:!1,loggedInput:!1,operationName:o,operationKey:p,ownsSpan:s,span:u,startTime:getCurrentUnixTimestamp()}),!s)return;a&&n.enterWith(p);let l=metadataFromEvent(r);const m={metadata:l},g=a?operationInput(r,o):void 0;if(g&&(l={...l,...extractWorkflowMetadataFromCallParams(g)},m.metadata=l),shouldRecordInputs(r)){const e=g??operationInput(r,o),{input:n,outputPromise:i}=a?processAISDKWorkflowAgentCallInput(e):processAISDKCallInput(e);m.input=n;const s=t.get(p);s&&(s.loggedInput=hasPromptLikeInput(n)),i&&!a&&n&&"object"==typeof n&&i.then(t=>{u.log({input:{...n,...t}})}).catch(()=>{})}u.log(m)})},onLanguageModelCallStart(e){u("onLanguageModelCallStart",()=>{const n=g(e),o=n?t.get(n):void 0;if(h(o))return;const a=o?.operationName??"generateText",i=operationInput(e,a),s="WorkflowAgent.stream"===a,c=shouldRecordInputs(e)&&s?processAISDKWorkflowAgentModelCallInput(i).input:shouldRecordInputs(e)?processAISDKCallInput(i).input:void 0;s&&o?.ownsSpan&&!o.loggedInput&&hasPromptLikeInput(c)&&(o.span.log({input:c,metadata:{...metadataFromEvent(e),...extractWorkflowMetadataFromCallParams(i)}}),o.loggedInput=!0);const u=n?r.get(n):void 0;if(n&&u){for(const t of u)t.end();r.delete(n)}const l=p(n??e.callId,"streamText"===a?"doStream":"doGenerate","llm",{...shouldRecordInputs(e)?{input:c}:{},metadata:s?{...metadataFromEvent(e),...extractWorkflowMetadataFromCallParams(i)}:metadataFromEvent(e)}),d=n??e.callId,m=r.get(d)??[];m.push(l),r.set(d,m)})},onLanguageModelCallEnd(e){u("onLanguageModelCallEnd",()=>{const n=g(e),o=n?t.get(n):void 0;if(h(o))return;const a=n?shiftModelSpan(r,n):void 0;if(!a)return;const i=safePerformance(e)?.timeToFirstOutputMs;"streamText"===o?.operationName&&void 0===o.firstChunkTime&&"number"==typeof i&&(o.firstChunkTime=o.startTime+i/1e3);const s={...e,response:e.responseId?{id:e.responseId}:void 0};a.log({...shouldRecordOutputs(e)?{output:processAISDKOutput(s,DEFAULT_DENY_OUTPUT_PATHS)}:{},metrics:extractTokenMetrics(s)}),a.end()})},onObjectStepStart(e){u("onObjectStepStart",()=>{const n=g(e),r=n?t.get(n):void 0;if(h(r))return;const a=n?o.get(n):void 0;n&&a&&(a.end(),o.delete(n));const i=p(n??e.callId,"streamObject"===r?.operationName?"doStream":"doGenerate","llm",{...shouldRecordInputs(e)?{input:{prompt:e.promptMessages}}:{},metadata:metadataFromEvent(e)});o.set(n??e.callId,i)})},onObjectStepEnd:t=>{u("onObjectStepEnd",()=>{const e=g(t),n=e?o.get(e):void 0;if(!e||!n)return;const r={...t,text:t.objectText};n.log({...shouldRecordOutputs(t)?{output:processAISDKOutput(r,DEFAULT_DENY_OUTPUT_PATHS)}:{},metrics:extractTokenMetrics(r)}),n.end(),o.delete(e)})},onEmbedStart(e){u("onEmbedStart",()=>{const n=g(e),r=n?t.get(n):void 0;if(h(r))return;for(const[t,o]of a)o.operationKey!==n||"embed"!==r?.operationName&&o.values!==e.values||(o.span.end(),a.delete(t));const o=p(n??e.callId,"doEmbed","llm",{...shouldRecordInputs(e)?{input:{values:e.values}}:{},metadata:metadataFromEvent(e)});a.set(e.embedCallId,{operationKey:n??e.callId,span:o,values:e.values})})},onEmbedEnd:t=>{u("onEmbedEnd",()=>{const e=a.get(t.embedCallId);if(!e)return;const n={...t,embeddings:t.embeddings};e.span.log({...shouldRecordOutputs(t)?{output:processAISDKEmbeddingOutput(n,DEFAULT_DENY_OUTPUT_PATHS)}:{},metrics:extractTokenMetrics(n)}),e.span.end(),a.delete(t.embedCallId)})},onRerankStart(e){u("onRerankStart",()=>{const n=g(e),r=n?t.get(n):void 0;if(h(r))return;const o=n?i.get(n):void 0;n&&o&&(o.end(),i.delete(n));const a=p(n??e.callId,"doRerank","llm",{...shouldRecordInputs(e)?{input:{documents:e.documents,query:e.query,topN:e.topN}}:{},metadata:metadataFromEvent(e)});i.set(n??e.callId,a)})},onRerankEnd:t=>{u("onRerankEnd",()=>{const e=g(t),n=e?i.get(e):void 0;if(!e||!n)return;const r={ranking:t.ranking?.map(t=>({originalIndex:t.index,score:t.relevanceScore}))};n.log({...shouldRecordOutputs(t)?{output:processAISDKRerankOutput(r,DEFAULT_DENY_OUTPUT_PATHS)}:{}}),n.end(),i.delete(e)})},onToolExecutionStart(e){u("onToolExecutionStart",()=>{const n=g(e),r=n?t.get(n):void 0;if(h(r))return;const o=e.toolCall.toolCallId;if(!n||!o)return;const a=p(n,e.toolCall.toolName||"tool","tool",{...shouldRecordInputs(e)?{input:e.toolCall.input}:{},metadata:{...createAISDKIntegrationMetadata(),toolCallId:o,..."string"==typeof e.toolCall.toolName?{toolName:e.toolCall.toolName}:{}}});s.set(o,{operationKey:n,span:a})})},onToolExecutionEnd(t){u("onToolExecutionEnd",()=>{const e=t.toolCall.toolCallId,n=e?s.get(e):void 0;if(!e||!n)return;const r=t.toolOutput,o=!1===t.success&&"error"in t?t.error:void 0;if("tool-error"===r?.type||void 0!==o){const e=r?.error??o;n.span.log({error:e instanceof Error?e.message:String(e),metrics:"number"==typeof t.durationMs?{duration_ms:t.durationMs}:{}})}else{const e=r&&"output"in r?r.output:t.output;n.span.log({...shouldRecordOutputs(t)?{output:e}:{},metrics:"number"==typeof t.durationMs?{duration_ms:t.durationMs}:{}})}n.span.end(),s.delete(e)})},onChunk(e){u("onChunk",()=>{const n=e.chunk?.callId;if(!n)return;const r=m(n),o=r?t.get(r):void 0;o&&void 0===o.firstChunkTime&&(o.firstChunkTime=getCurrentUnixTimestamp())})},onEnd:e=>{u("onEnd",()=>{const n=g(e,"finish"),r=n?t.get(n):void 0;if(!r)return;if(!r.ownsSpan)return void l(r.operationKey);const o=finishResult(e,r.operationName),a=r.hadModelChild?{}:extractTokenMetrics(o),i="WorkflowAgent.stream"===r.operationName?void 0:extractTimeToFirstToken(o,r);void 0!==i&&(a.time_to_first_token=i),r.span.log({...shouldRecordOutputs(e)?{output:finishOutput(o,r.operationName)}:{},metrics:a}),r.span.end(),l(r.operationKey)})},onAbort(e){u("onAbort",()=>{const n=g(e,"finish"),r=n?t.get(n):void 0;if(!n||!r)return;const o=(t=>{if(isObject(t)){const e=t;if(void 0!==e.error)return e.error;if(void 0!==e.reason)return e.reason}return new Error("AI SDK operation aborted")})(e);f(n,o),r.ownsSpan&&(logError(r.span,o),r.span.end()),l(n)})},onError(e){u("onError",()=>{const n=isObject(e)?e:{},r=g(n,"finish"),o=r?t.get(r):void 0;if(!r||!o)return;const a=n.error??e;f(r,a),o.ownsSpan&&(logError(o.span,a),o.span.end()),l(r)})},executeTool({toolCallId:t,execute:e}){const n=s.get(t);return n?withCurrent(n.span,()=>e()):e()}}}function shouldRecordInputs(t){return!1!==t.recordInputs}function shouldRecordOutputs(t){return!1!==t.recordOutputs}function hasPromptLikeInput(t){return!!isObject(t)&&(void 0!==t.prompt||void 0!==t.messages)}function operationNameFromId(t){return"ai.workflowAgent.stream"===t?"WorkflowAgent.stream":t?.startsWith("ai.")?t.slice(3):t||"ai-sdk"}function modelFromEvent(t){return t.modelId?{modelId:t.modelId,...t.provider?{provider:t.provider}:{}}:void 0}function metadataFromEvent(t){const e=createAISDKIntegrationMetadata(),{model:n,provider:r}=serializeModelWithProvider(modelFromEvent(t));return n&&(e.model=n),r&&(e.provider=r),"string"==typeof t.functionId&&(e.functionId=t.functionId),e}function operationInput(t,e){return"embed"===e?{model:modelFromEvent(t),value:t.value}:"embedMany"===e?{model:modelFromEvent(t),values:Array.isArray(t.value)?t.value??[]:void 0}:"rerank"===e?{model:modelFromEvent(t),documents:t.documents,query:t.query,topN:t.topN}:{model:modelFromEvent(t),instructions:t.instructions,system:t.system,prompt:t.prompt,messages:t.messages,tools:t.tools,toolChoice:t.toolChoice,activeTools:t.activeTools,output:t.output,schema:t.schema,schemaName:t.schemaName,schemaDescription:t.schemaDescription,maxOutputTokens:t.maxOutputTokens,temperature:t.temperature,topP:t.topP,topK:t.topK,presencePenalty:t.presencePenalty,frequencyPenalty:t.frequencyPenalty,seed:t.seed,maxRetries:t.maxRetries,headers:t.headers,providerOptions:t.providerOptions}}function shiftModelSpan(t,e){const n=t.get(e),r=n?.shift();return n&&0===n.length&&t.delete(e),r}function finishResult(t,e){return"embed"===e?{...t,embedding:t.embedding}:"embedMany"===e?{...t,embeddings:t.embedding}:t}function extractTimeToFirstToken(t,e){if(void 0!==e.firstChunkTime)return e.firstChunkTime-e.startTime;const n=[safePerformance(t),safePerformance(t.finalStep),...Array.isArray(t.steps)?(t.steps??[]).map(safePerformance):[]];for(const t of n){const e=t?.timeToFirstOutputMs;if("number"==typeof e)return e/1e3}}function safePerformance(t){if(!isObject(t))return;const e=t.performance;return isObject(e)?e:void 0}function finishOutput(t,e){return"embed"===e||"embedMany"===e?processAISDKEmbeddingOutput(t,DEFAULT_DENY_OUTPUT_PATHS):"rerank"===e?processAISDKRerankOutput(t,DEFAULT_DENY_OUTPUT_PATHS):processAISDKOutput(t,DEFAULT_DENY_OUTPUT_PATHS)}var aiSDKChannels=defineChannels("ai",{generateText:channel({channelName:"generateText",kind:"async"}),streamText:channel({channelName:"streamText",kind:"async"}),streamTextSync:channel({channelName:"streamText.sync",kind:"sync-stream"}),generateObject:channel({channelName:"generateObject",kind:"async"}),streamObject:channel({channelName:"streamObject",kind:"async"}),streamObjectSync:channel({channelName:"streamObject.sync",kind:"sync-stream"}),embed:channel({channelName:"embed",kind:"async"}),embedMany:channel({channelName:"embedMany",kind:"async"}),rerank:channel({channelName:"rerank",kind:"async"}),agentGenerate:channel({channelName:"Agent.generate",kind:"async"}),agentStream:channel({channelName:"Agent.stream",kind:"async"}),agentStreamSync:channel({channelName:"Agent.stream.sync",kind:"sync-stream"}),toolLoopAgentGenerate:channel({channelName:"ToolLoopAgent.generate",kind:"async"}),toolLoopAgentStream:channel({channelName:"ToolLoopAgent.stream",kind:"async"}),workflowAgentStream:channel({channelName:"WorkflowAgent.stream",kind:"async"}),v7CreateTelemetryDispatcher:channel({channelName:"createTelemetryDispatcher",kind:"sync-stream"})}),DEFAULT_DENY_OUTPUT_PATHS=["roundtrips[].request.body","roundtrips[].request.headers","roundtrips[].response.headers","rawResponse.headers","responseMessages","request.body","request.headers","responses[].headers","response.body","response.headers","steps[].request.body","steps[].request.headers","steps[].responses[].headers","steps[].response.body","steps[].response.headers"],AUTO_PATCHED_MODEL=Symbol.for("braintrust.ai-sdk.auto-patched-model"),AUTO_PATCHED_TOOL=Symbol.for("braintrust.ai-sdk.auto-patched-tool"),AUTO_PATCHED_V7_TELEMETRY_DISPATCHER=Symbol.for("braintrust.ai-sdk.v7.auto-patched-telemetry-dispatcher"),RUNTIME_DENY_OUTPUT_PATHS=Symbol.for("braintrust.ai-sdk.deny-output-paths"),aiSDKV7TelemetryOperationCounter=0,TRANSPORT_PAYLOAD_ROOT_PATHS=["rawResponse","request","response","responses[]","roundtrips[].request","roundtrips[].response","steps[].request","steps[].response","steps[].responses[]"],AI_SDK_V7_TELEMETRY_CALLBACKS=["onStart","onStepStart","onLanguageModelCallStart","onLanguageModelCallEnd","onToolExecutionStart","onToolExecutionEnd","onChunk","onStepEnd","onStepFinish","onObjectStepStart","onObjectStepEnd","onEmbedStart","onEmbedEnd","onRerankStart","onRerankEnd","onEnd","onAbort","onError"],AISDKPlugin=class extends BasePlugin{config;constructor(t={}){super(),this.config=t}onEnable(){this.subscribeToAISDK()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToAISDK(){const t=this.config.denyOutputPaths||DEFAULT_DENY_OUTPUT_PATHS;this.unsubscribers.push(subscribeToAISDKV7TelemetryDispatcher()),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.generateText,{name:"generateText",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),extractOutput:(e,n)=>(finalizeAISDKChildTracing(n),processAISDKOutput(e,resolveDenyOutputPaths(n,t))),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n),aggregateChunks:aggregateAISDKChunks})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.streamText,{name:"streamText",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),extractOutput:(e,n)=>processAISDKOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n,e),aggregateChunks:aggregateAISDKChunks,patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceSyncStreamChannel(aiSDKChannels.streamTextSync,{name:"streamText",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.generateObject,{name:"generateObject",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),extractOutput:(e,n)=>(finalizeAISDKChildTracing(n),processAISDKOutput(e,resolveDenyOutputPaths(n,t))),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n),aggregateChunks:aggregateAISDKChunks})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.streamObject,{name:"streamObject",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),extractOutput:(e,n)=>processAISDKOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n,e),aggregateChunks:aggregateAISDKChunks,patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceSyncStreamChannel(aiSDKChannels.streamObjectSync,{name:"streamObject",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t),patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceAsyncChannel(aiSDKChannels.embed,{name:"embed",type:"function",extractInput:([t],e)=>prepareAISDKEmbedInput(t,e.self),extractOutput:(e,n)=>processAISDKEmbeddingOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n)})),this.unsubscribers.push(traceAsyncChannel(aiSDKChannels.embedMany,{name:"embedMany",type:"function",extractInput:([t],e)=>prepareAISDKEmbedInput(t,e.self),extractOutput:(e,n)=>processAISDKEmbeddingOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n)})),this.unsubscribers.push(traceAsyncChannel(aiSDKChannels.rerank,{name:"rerank",type:"function",extractInput:([t],e)=>prepareAISDKRerankInput(t,e.self),extractOutput:(e,n)=>processAISDKRerankOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n)})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.agentGenerate,{name:"Agent.generate",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t,{agentOwner:!0}),extractOutput:(e,n)=>(finalizeAISDKChildTracing(n),processAISDKOutput(e,resolveDenyOutputPaths(n,t))),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n),aggregateChunks:aggregateAISDKChunks})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.agentStream,{name:"Agent.stream",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t,{agentOwner:!0}),extractOutput:(e,n)=>processAISDKOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n,e),aggregateChunks:aggregateAISDKChunks,patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceSyncStreamChannel(aiSDKChannels.agentStreamSync,{name:"Agent.stream",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t,{agentOwner:!0}),patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.toolLoopAgentGenerate,{name:"ToolLoopAgent.generate",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t,{agentOwner:!0}),extractOutput:(e,n)=>(finalizeAISDKChildTracing(n),processAISDKOutput(e,resolveDenyOutputPaths(n,t))),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n),aggregateChunks:aggregateAISDKChunks})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.toolLoopAgentStream,{name:"ToolLoopAgent.stream",type:"function",extractInput:([e],n,r)=>prepareAISDKCallInput(e,n,r,t,{agentOwner:!0}),extractOutput:(e,n)=>processAISDKOutput(e,resolveDenyOutputPaths(n,t)),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n,e),aggregateChunks:aggregateAISDKChunks,patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,result:n,span:r,startTime:o})})),this.unsubscribers.push(traceStreamingChannel(aiSDKChannels.workflowAgentStream,{name:"WorkflowAgent.stream",type:"function",extractInput:([e],n,r)=>prepareAISDKWorkflowAgentStreamInput(e,n,r,t),extractOutput:(e,n)=>(finalizeAISDKChildTracing(n),processAISDKOutput(e,resolveDenyOutputPaths(n,t))),extractMetrics:(t,e,n)=>extractTopLevelAISDKMetrics(t,n),aggregateChunks:aggregateAISDKChunks,onComplete:({span:t})=>{unregisterWorkflowAgentWrapperSpan(t)},onError:({event:t,span:e})=>{finalizeAISDKChildTracing(t),unregisterWorkflowAgentWrapperSpan(e)},patchResult:({endEvent:e,result:n,span:r,startTime:o})=>patchAISDKStreamingResult({defaultDenyOutputPaths:t,endEvent:e,onComplete:()=>unregisterWorkflowAgentWrapperSpan(r),result:n,span:r,startTime:o})}))}};function subscribeToAISDKV7TelemetryDispatcher(){const t=aiSDKChannels.v7CreateTelemetryDispatcher.tracingChannel(),e=braintrustAISDKTelemetry(),n={end:t=>{const n=t.arguments?.[0]?.telemetry;!1!==n?.isEnabled&&patchAISDKV7TelemetryDispatcher(t.result,e,n)}};return t.subscribe(n),()=>{t.unsubscribe(n)}}function patchAISDKV7TelemetryDispatcher(t,e,n){if(!isObject(t))return;const r=t;if(r[AUTO_PATCHED_V7_TELEMETRY_DISPATCHER])return;let o;r[AUTO_PATCHED_V7_TELEMETRY_DISPATCHER]=!0;const a={};"boolean"==typeof n?.recordInputs&&(a.recordInputs=n.recordInputs),"boolean"==typeof n?.recordOutputs&&(a.recordOutputs=n.recordOutputs),"string"==typeof n?.functionId&&(a.functionId=n.functionId);const i=t=>{if(!isObject(t))return t;const e=t,n="string"==typeof e.callId?e.callId:"unknown";if(o??=`${n}:${++aiSDKV7TelemetryOperationCounter}`,Object.keys(a).length>0){const e={...a,...t};try{Object.defineProperty(e,BRAINTRUST_AI_SDK_V7_OPERATION_KEY,{configurable:!0,enumerable:!1,value:o})}catch{e[BRAINTRUST_AI_SDK_V7_OPERATION_KEY]=o}return e}try{return Object.defineProperty(e,BRAINTRUST_AI_SDK_V7_OPERATION_KEY,{configurable:!0,enumerable:!1,value:o}),t}catch{return{...t,[BRAINTRUST_AI_SDK_V7_OPERATION_KEY]:o}}};for(const n of AI_SDK_V7_TELEMETRY_CALLBACKS){const o=e[n];if("function"!=typeof o)continue;const a=r[n];r[n]=n=>{const r="function"==typeof a?a.call(t,n):void 0;try{const t=o.call(e,i(n));isPromiseLike(t)&&Promise.resolve(t).catch(()=>{})}catch{}return r}}const s=e.executeTool;if("function"!=typeof s)return;const c=r.executeTool;r.executeTool=n=>s.call(e,{...n,...o?{[BRAINTRUST_AI_SDK_V7_OPERATION_KEY]:o}:{},execute:()=>"function"==typeof c?c.call(t,n):n.execute()})}function resolveDenyOutputPaths(t,e){if(Array.isArray(t?.denyOutputPaths))return t.denyOutputPaths;const n=t?.arguments&&t.arguments.length>0?t.arguments[0]:void 0;if(!n||"object"!=typeof n)return e;const r=n[RUNTIME_DENY_OUTPUT_PATHS];return Array.isArray(r)&&r.every(t=>"string"==typeof t)?r:e}var isZodSchema2=t=>null!=t&&"object"==typeof t&&"_def"in t&&"object"==typeof t._def,serializeZodSchema2=t=>{try{return zodToJsonSchema(t)}catch{return{type:"object",description:"Zod schema (conversion failed)"}}},isOutputObject=t=>{if(null==t||"object"!=typeof t)return!1;const e=t;return"responseFormat"in e&&("object"===e.type||"text"===e.type||("function"==typeof e.responseFormat||"object"==typeof e.responseFormat))},serializeOutputObject=(t,e)=>{try{const n={response_format:null};let r;if(t.type&&(n.type=t.type),"function"==typeof t.responseFormat){const n={supportsStructuredOutputs:!0,...e&&"object"==typeof e?e:{}};r=t.responseFormat({model:n})}else null!=t.responseFormat&&"object"==typeof t.responseFormat&&(r=t.responseFormat);if(r)if("function"==typeof r.then)n.response_format=Promise.resolve(r).then(t=>t.schema&&isZodSchema2(t.schema)?{...t,schema:serializeZodSchema2(t.schema)}:t);else{const t=r;t.schema&&isZodSchema2(t.schema)&&(r={...t,schema:serializeZodSchema2(t.schema)}),n.response_format=r}return n}catch{return{response_format:null}}},processInputAttachmentsSync=t=>{if(!t)return{input:t};const e={...t};let n;if(delete e.headers,delete e.experimental_output,t.messages&&Array.isArray(t.messages)&&(e.messages=t.messages.map(processMessage)),t.prompt&&"object"==typeof t.prompt&&(Array.isArray(t.prompt)?e.prompt=t.prompt.map(processMessage):e.prompt=processPromptContent(t.prompt)),t.schema&&isZodSchema2(t.schema)&&(e.schema=serializeZodSchema2(t.schema)),t.callOptionsSchema&&isZodSchema2(t.callOptionsSchema)&&(e.callOptionsSchema=serializeZodSchema2(t.callOptionsSchema)),t.tools&&(e.tools=serializeAISDKToolsForLogging(t.tools)),t.output&&isOutputObject(t.output)){const r=serializeOutputObject(t.output,t.model);r.response_format&&"function"==typeof r.response_format.then?(e.output={...r,response_format:{}},n=r.response_format.then(t=>({output:{...r,response_format:t}}))):e.output=r}return{input:sanitizeAISDKCallInputValue(e),outputPromise:n}},processMessage=t=>t&&"object"==typeof t?Array.isArray(t.content)?{...t,content:t.content.map(processContentPart)}:"object"==typeof t.content&&null!==t.content?{...t,content:processContentPart(t.content)}:t:t,processPromptContent=t=>{if(Array.isArray(t))return t.map(processContentPart);if(t.content){if(Array.isArray(t.content))return{...t,content:t.content.map(processContentPart)};if("object"==typeof t.content)return{...t,content:processContentPart(t.content)}}return t},processContentPart=t=>{if(!t||"object"!=typeof t)return t;try{if("image"===t.type&&t.image){const e=convertImageToAttachment(t.image,t.mimeType||t.mediaType);if(e)return{...t,image:e}}if("file"===t.type&&t.data&&(t.mimeType||t.mediaType)){const e=convertDataToAttachment(t.data,t.mimeType||t.mediaType,t.name||t.filename);if(e)return{...t,data:e}}if("image_url"===t.type&&t.image_url&&"object"==typeof t.image_url&&t.image_url.url){const e=convertImageToAttachment(t.image_url.url);if(e)return{...t,image_url:{...t.image_url,url:e}}}}catch(t){console.warn("Error processing content part:",t)}return t},convertImageToAttachment=(t,e)=>{try{if("string"==typeof t&&t.startsWith("data:")){const[e,n]=t.split(","),r=e.match(/data:(.*?);/)?.[1];if(r&&n){const t=convertDataToBlob(n,r);if(t)return new Attachment({data:t,filename:`image.${getExtensionFromMediaType(r)}`,contentType:r})}}if(e){if(t instanceof Uint8Array)return new Attachment({data:new Blob([t],{type:e}),filename:`image.${getExtensionFromMediaType(e)}`,contentType:e});if("undefined"!=typeof Buffer&&Buffer.isBuffer(t))return new Attachment({data:new Blob([t],{type:e}),filename:`image.${getExtensionFromMediaType(e)}`,contentType:e})}if(t instanceof Blob&&t.type)return new Attachment({data:t,filename:`image.${getExtensionFromMediaType(t.type)}`,contentType:t.type});if(t instanceof Attachment)return t}catch(t){console.warn("Error converting image to attachment:",t)}return null},convertDataToAttachment=(t,e,n)=>{if(!e)return null;try{let r=null;if("string"==typeof t&&t.startsWith("data:")){const[,n]=t.split(",");n&&(r=convertDataToBlob(n,e))}else"string"==typeof t&&t.length>0?r=convertDataToBlob(t,e):t instanceof Uint8Array||"undefined"!=typeof Buffer&&Buffer.isBuffer(t)?r=new Blob([t],{type:e}):t instanceof Blob&&(r=t);if(r)return new Attachment({data:r,filename:n||`file.${getExtensionFromMediaType(e)}`,contentType:e})}catch(t){console.warn("Error converting data to attachment:",t)}return null};function processAISDKCallInput(t){return processInputAttachmentsSync(t)}function processAISDKWorkflowAgentCallInput(t){const e=processAISDKCallInput(t);return{...e,input:extractWorkflowAgentInput(e.input)}}function processAISDKWorkflowAgentModelCallInput(t){const e=processAISDKCallInput(t);return{...e,input:extractWorkflowAgentModelInput(e.input)}}function prepareAISDKCallInput(t,e,n,r,o={}){const{input:a,outputPromise:i}=processAISDKCallInput(t);i&&a&&"object"==typeof a&&i.then(t=>{n.log({input:{...a,...t}})}).catch(()=>{});const s=extractMetadataFromCallParams(t,e.self),c=prepareAISDKChildTracing(t,e.self,n,r,e.aiSDK,o);return e.modelWrapped=c.modelWrapped,c.cleanup&&(e.__braintrust_ai_sdk_cleanup=c.cleanup),{input:a,metadata:s}}function prepareAISDKWorkflowAgentStreamInput(t,e,n,r){registerWorkflowAgentWrapperSpan(n);const{input:o}=processAISDKWorkflowAgentCallInput(t),a=extractWorkflowMetadataFromCallParams(t,e.self),i=prepareAISDKChildTracing(t,e.self,n,r,e.aiSDK,{agentOwner:!0,workflowAgent:!0});return e.modelWrapped=i.modelWrapped,i.cleanup&&(e.__braintrust_ai_sdk_cleanup=i.cleanup),{input:o,metadata:a}}function prepareAISDKEmbedInput(t,e){return{input:{...t},metadata:extractMetadataFromEmbedParams(t,e)}}function prepareAISDKRerankInput(t,e){const{documents:n,query:r}=t;return{input:{documents:n,query:r},metadata:extractMetadataFromRerankParams(t,e)}}function extractTopLevelAISDKMetrics(t,e,n){const r=hasModelChildTracing(e)?{}:extractTokenMetrics(t);return n&&(r.time_to_first_token=getCurrentUnixTimestamp()-n),r}function hasModelChildTracing(t){return!0===t?.modelWrapped||!0===t?.__braintrust_ai_sdk_model_wrapped}function serializeToolExecutionInput(t){return t.length>0?t[0]:t}function createAISDKIntegrationMetadata(){return{braintrust:{integration_name:"ai-sdk",sdk_language:"typescript"}}}function resolveModelFromSelf(t){return t&&"object"==typeof t&&"model"in t&&t.model?t.model:t&&"object"==typeof t&&"settings"in t&&t.settings?.model?t.settings?.model:void 0}function resolveToolsFromSelf(t){if(!t||"object"!=typeof t)return;const e=t;return e.tools??e.settings?.tools}function extractBaseMetadata(t,e){const n=createAISDKIntegrationMetadata(),{model:r,provider:o}=serializeModelWithProvider(t??resolveModelFromSelf(e));return r&&(n.model=r),o&&(n.provider=o),n}function extractMetadataFromCallParams(t,e){const n=extractBaseMetadata(t.model,e),r=serializeAISDKToolsForLogging(t.tools??resolveToolsFromSelf(e));return r&&(n.tools=r),n}function extractWorkflowMetadataFromCallParams(t,e){const n=extractMetadataFromCallParams(t,e),r=extractAISDKCallOptionsForMetadata(t);return Object.keys(r).length>0&&(n.options=r),n}function extractWorkflowAgentInput(t){const e={};return void 0!==t.instructions&&(e.instructions=t.instructions),void 0!==t.system&&(e.system=t.system),Array.isArray(t.messages)?{...e,messages:t.messages}:"string"==typeof t.prompt||Array.isArray(t.prompt)?{...e,prompt:t.prompt}:e}function extractWorkflowAgentModelInput(t){const e={};return void 0!==t.instructions&&(e.instructions=t.instructions),void 0!==t.system&&(e.system=t.system),Array.isArray(t.messages)?{...e,messages:t.messages}:"string"==typeof t.prompt?{...e,prompt:t.prompt}:Array.isArray(t.prompt)?{...e,messages:t.prompt}:e}function sanitizeAISDKCallInputValue(t,e=0){if(void 0===t||"function"==typeof t)return;if(null===t||"object"!=typeof t)return t;if(isPromiseLike(t))return"[Promise]";if("undefined"!=typeof AbortSignal&&t instanceof AbortSignal)return"[AbortSignal]";if(e>=8)return"[Object]";if(Array.isArray(t))return t.map(t=>sanitizeAISDKCallInputValue(t,e+1)).filter(t=>void 0!==t);if(!isObject(t))return t;const n=Object.getPrototypeOf(t);if(n!==Object.prototype&&null!==n)return t;const r={};for(const[n,o]of Object.entries(t)){if("__proto__"===n||"constructor"===n||"prototype"===n||"headers"===n.toLowerCase())continue;const t=sanitizeAISDKCallInputValue(o,e+1);void 0!==t&&(r[n]=t)}return r}function extractAISDKCallOptionsForMetadata(t){const e={},n=new Set(["model","instructions","messages","prompt","system","tools","headers","abortSignal","signal","experimental_output"]);for(const[r,o]of Object.entries(t)){if(n.has(r)||"__proto__"===r||"constructor"===r||"prototype"===r||/^on[A-Z]/.test(r)&&"function"==typeof o)continue;const t=sanitizeAISDKMetadataValue(o);void 0!==t&&(e[r]=t)}return e}function sanitizeAISDKMetadataValue(t,e=0){if(void 0===t)return;if("function"==typeof t)return"[Function]";if(null===t||"object"!=typeof t)return t;if(isPromiseLike(t))return"[Promise]";if("undefined"!=typeof AbortSignal&&t instanceof AbortSignal)return"[AbortSignal]";if(e>=8)return"[Object]";if(Array.isArray(t))return t.map(t=>sanitizeAISDKMetadataValue(t,e+1)).filter(t=>void 0!==t);if(!isObject(t))return t;const n={};for(const[r,o]of Object.entries(t)){if("__proto__"===r||"constructor"===r||"prototype"===r||"headers"===r.toLowerCase())continue;const t=sanitizeAISDKMetadataValue(o,e+1);void 0!==t&&(n[r]=t)}return n}function buildAISDKModelStartEvent(t,e,n){return n.workflowAgent?{input:processAISDKWorkflowAgentModelCallInput(t).input,metadata:{...e,...extractWorkflowMetadataFromCallParams(t)}}:{input:processAISDKCallInput(t).input,metadata:e}}function extractMetadataFromEmbedParams(t,e){return extractBaseMetadata(t.model,e)}function extractMetadataFromRerankParams(t,e){const n=extractBaseMetadata(t.model,e);return"number"==typeof t.topN&&(n.topN=t.topN),Array.isArray(t.documents)&&(n.document_count=t.documents.length),n}function activeAISDKChildPatchEntry(t){const e=currentSpan(),n=e.spanId;if(n)for(let e=t.length-1;e>=0;e-=1){const r=t[e];if(r?.activeSpanIds.has(n))return r}const r=e.spanParents??[];for(let e=t.length-1;e>=0;e-=1){const n=t[e];if(n?.parentSpan.spanId&&r.includes(n.parentSpan.spanId))return n}for(let e=t.length-1;e>=0;e-=1){const r=t[e];if(r?.parentSpan.spanId===n)return r}return t[t.length-1]}function attachNestedAISDKChildPatchEntry(t,e,n){const r=currentSpan().spanId;if(!r||r===e.spanId)return!1;for(let o=t.length-1;o>=0;o-=1){const a=t[o];if(a?.parentSpan.spanId===r||a?.activeSpanIds.has(r))return a.activeSpanIds.add(e.spanId),n.push(()=>{a.activeSpanIds.delete(e.spanId)}),!0}return!1}function shadowActiveAISDKChildPatchEntry(t,e,n,r){const o=currentSpan().spanId;if(o&&o!==n.spanId)for(let n=t.length-1;n>=0;n-=1){const a=t[n];if(a?.parentSpan.spanId===o||a?.activeSpanIds.has(o))return e.activeSpanIds.add(o),void r.push(()=>{e.activeSpanIds.delete(o)})}}function closeOpenAISDKModelPatchSpans(t){for(const e of t.openSpans)e.end();t.openSpans.clear()}function prepareAISDKChildTracing(t,e,n,r,o,a={}){const i=[],s=new WeakMap,c=new WeakSet;let u=!1;const p=t=>{const e=resolveAISDKModel(t,o);if(!e||"object"!=typeof e||"function"!=typeof e.doGenerate)return e;const c=s.get(e);if(c)return u=!0,c;u=!0;const p=e,l={activeSpanIds:new Set([n.spanId]),baseMetadata:buildAISDKChildMetadata(e),childTracingOptions:a,denyOutputPaths:r,openSpans:new Set,parentSpan:n},d=(t,e)=>{closeOpenAISDKModelPatchSpans(l);const n=t.entries.indexOf(l);n>=0&&t.entries.splice(n,1),t.entries.length>0||(e.doGenerate=t.originalDoGenerate,e.doStream=t.originalDoStream,delete e[AUTO_PATCHED_MODEL])},m=p[AUTO_PATCHED_MODEL];if(m)return s.set(e,e),a.agentOwner&&attachNestedAISDKChildPatchEntry(m.entries,n,i)||(a.agentOwner||shadowActiveAISDKChildPatchEntry(m.entries,l,n,i),m.entries.push(l),i.push(()=>{d(m,p)})),e;const g=e.doGenerate,f=e.doStream,h=Object.create(Object.getPrototypeOf(e));Object.defineProperties(h,Object.getOwnPropertyDescriptors(e));const _=h,y={entries:[l],originalDoGenerate:g,originalDoStream:f};return Object.defineProperty(h,AUTO_PATCHED_MODEL,{configurable:!0,value:y}),h.doGenerate=async function(t){const n=activeAISDKChildPatchEntry(y.entries);return n?(closeOpenAISDKModelPatchSpans(n),n.parentSpan.traced(async r=>{n.openSpans.add(r);try{const o=await Reflect.apply(g,e,[t]),a=processAISDKOutput(o,n.denyOutputPaths),i=extractTokenMetrics(o),s=buildResolvedMetadataPayload(o),c=buildMissingUsageMetadata(a,i,"ai_sdk_result_missing_usage");return r.log({output:a,metrics:i,...mergeMetadataPayload(s,c)}),o}finally{n.openSpans.delete(r)}},{name:"doGenerate",spanAttributes:{type:"llm"},event:buildAISDKModelStartEvent(t,n.baseMetadata,{workflowAgent:n.childTracingOptions.workflowAgent})})):Reflect.apply(g,e,[t])},f&&(h.doStream=async function(t){const n=activeAISDKChildPatchEntry(y.entries);if(!n)return Reflect.apply(f,e,[t]);closeOpenAISDKModelPatchSpans(n);const r=n.parentSpan.startSpan({name:"doStream",spanAttributes:{type:"llm"},event:buildAISDKModelStartEvent(t,n.baseMetadata,{workflowAgent:n.childTracingOptions.workflowAgent})});n.openSpans.add(r);const o=getCurrentUnixTimestamp(),a=await withCurrent(r,()=>Reflect.apply(f,e,[t]));let i;const s={};let c="",u="";const p=[];let l,d=!1;const m=t=>{if(d)return;s.text=c,s.reasoning=u,s.toolCalls=p,void 0!==l&&(s.object=l);const e=extractTokenMetrics(s);void 0===i||n.childTracingOptions.workflowAgent||(e.time_to_first_token=Math.max(i-o,1e-6));const a=buildResolvedMetadataPayload(s),m=t?{usage_unavailable_reason:t}:buildMissingUsageMetadata(s,e,"ai_sdk_result_missing_usage");r.log({output:processAISDKOutput(s,n.denyOutputPaths),metrics:e,...mergeMetadataPayload(a,m)}),n.openSpans.delete(r),r.end(),d=!0},g=new TransformStream({transform(t,e){switch(void 0===i&&isAISDKContentStreamChunk(t)&&(i=getCurrentUnixTimestamp()),t.type){case"text-delta":c+=extractTextDelta(t);break;case"reasoning-delta":t.delta?u+=t.delta:t.text&&(u+=t.text);break;case"tool-call":p.push(t);break;case"object":l=t.object;break;case"raw":if(t.rawValue){const e=t.rawValue;e.delta?.content?c+=e.delta.content:e.choices?.[0]?.delta?.content?c+=e.choices[0].delta.content:"string"==typeof e.text?c+=e.text:"string"==typeof e.content&&(c+=e.content)}break;case"finish":s.finishReason=t.finishReason,s.usage=t.usage,m()}e.enqueue(t)},flush(){m("ai_sdk_stream_finished_without_usage")}});return{...a,stream:a.stream.pipeThrough(g)}}),i.push(()=>{d(y,_)}),s.set(e,h),s.set(h,h),h},l=(t,e)=>{if(null==t||"object"!=typeof t||!("execute"in t)||"function"!=typeof t.execute||c.has(t))return;c.add(t);const r=t,o={activeSpanIds:new Set([n.spanId]),childTracingOptions:a,name:e,parentSpan:n},s=e=>{const n=e.entries.indexOf(o);n>=0&&e.entries.splice(n,1),e.entries.length>0||(t.execute=e.originalExecute,delete r[AUTO_PATCHED_TOOL])},u=r[AUTO_PATCHED_TOOL];if(u){if(a.agentOwner&&attachNestedAISDKChildPatchEntry(u.entries,n,i))return;return a.agentOwner||shadowActiveAISDKChildPatchEntry(u.entries,o,n,i),u.entries.push(o),void i.push(()=>{s(u)})}const p=r.execute,l={entries:[o],originalExecute:p};r[AUTO_PATCHED_TOOL]=l,t.execute=function(...t){const e=activeAISDKChildPatchEntry(l.entries),n=Reflect.apply(p,this,t);return e?isAsyncGenerator(n)?async function*(){const r=e.parentSpan.startSpan({name:e.name,spanAttributes:{type:"tool"}});r.log({input:serializeToolExecutionInput(t)});try{let t;for await(const e of n)t=e,yield e;r.log({output:t})}catch(t){throw r.log({error:toLoggedError(t)}),t}finally{r.end()}}():e.parentSpan.traced(async e=>{e.log({input:serializeToolExecutionInput(t)});const r=await n;return e.log({output:r}),r},{name:e.name,spanAttributes:{type:"tool"}}):n},i.push(()=>{s(l)})},d=t=>{if(!t)return;if(Array.isArray(t))t.forEach((t,e)=>l(t,((t,e)=>t&&(t.name||t.toolName||t.id)||e)(t,`tool[${e}]`)));else for(const[e,n]of Object.entries(t))l(n,e)};if(t&&"object"==typeof t){const e=t.model,n=p(e);n&&n!==e&&(t.model=n,i.push(()=>{t.model=e})),d(t.tools)}if(e&&"object"==typeof e){const t=e;if(void 0!==t.model){const e=t.model,n=p(e);n&&n!==e&&(t.model=n,i.push(()=>{t.model=e}))}if(void 0!==t.tools&&d(t.tools),t.settings&&"object"==typeof t.settings){if(void 0!==t.settings.model){const e=t.settings.model,n=p(e);n&&n!==e&&(t.settings.model=n,i.push(()=>{t.settings&&(t.settings.model=e)}))}void 0!==t.settings.tools&&d(t.settings.tools)}}return{cleanup:i.length>0?()=>{for(;i.length>0;)i.pop()?.()}:void 0,modelWrapped:u}}function finalizeAISDKChildTracing(t){const e=t?.__braintrust_ai_sdk_cleanup;t&&"function"==typeof e&&(e(),delete t.__braintrust_ai_sdk_cleanup)}function extractAISDKStreamPart(t){return isObject(t)&&isObject(t.part)?t.part:t}function stringContent(t){return"string"==typeof t&&t.length>0?t:void 0}function rawValueHasAISDKContent(t){if(null==t)return!1;if("string"==typeof t)return t.length>0;if(!isObject(t))return!0;const e=t.delta;return!!(stringContent(t.content)||stringContent(t.text)||stringContent(t.delta)||stringContent(t.arguments)||stringContent(t.partial_json)||isObject(e)&&(stringContent(e.content)||stringContent(e.text)||stringContent(e.arguments)||stringContent(e.partial_json)||stringContent(e.thinking))||Array.isArray(t.choices)&&t.choices.some(t=>{if(!isObject(t)||!isObject(t.delta))return!1;const e=t.delta;return!(!stringContent(e.content)&&!stringContent(e.text))||(!(!isObject(e.function_call)||!stringContent(e.function_call.arguments))||Array.isArray(e.tool_calls)&&e.tool_calls.some(t=>isObject(t)&&isObject(t.function)&&stringContent(t.function.arguments)))}))}function isAISDKContentStreamChunk(t){const e=extractAISDKStreamPart(t);if("string"==typeof e)return e.length>0;if(!isObject(e)||"string"!=typeof e.type)return!1;switch(e.type){case"text-delta":return void 0!==stringContent(e.textDelta)||void 0!==stringContent(e.delta)||void 0!==stringContent(e.text)||void 0!==stringContent(e.content);case"reasoning-delta":return void 0!==stringContent(e.delta)||void 0!==stringContent(e.text)||void 0!==stringContent(e.content);case"tool-call":case"object":case"file":return!0;case"tool-input-delta":case"tool-call-delta":return void 0!==stringContent(e.argsTextDelta)||void 0!==stringContent(e.inputTextDelta)||void 0!==stringContent(e.delta)||void 0!==stringContent(e.text)||void 0!==stringContent(e.content);case"raw":return rawValueHasAISDKContent(e.rawValue);default:return!1}}function isAISDKContentAsyncIterableChunk(t){if(isAISDKContentStreamChunk(t))return!0;const e=extractAISDKStreamPart(t);return isObject(e)&&"string"!=typeof e.type}function patchAISDKStreamingResult(t){const{defaultDenyOutputPaths:e,endEvent:n,onComplete:r,result:o,span:a,startTime:i}=t;if(!o||"object"!=typeof o)return!1;const s=o;attachKnownResultPromiseHandlers(s);let c=!1;const u=()=>{c||(c=!0,finalizeAISDKChildTracing(n),a.end(),r?.())};let p=!1;const l=async t=>{if(!p){p=!0;try{const r=extractTopLevelAISDKMetrics(o,n);void 0===r.time_to_first_token&&void 0!==t&&(r.time_to_first_token=t-i);const s=await processAISDKStreamingOutput(o,resolveDenyOutputPaths(n,e)),c=buildResolvedMetadataPayload(o).metadata;a.log({output:s,...c?{metadata:c}:{},metrics:r})}catch(t){a.log({error:toLoggedError(t)})}finally{u()}}},d=()=>{let t;return{onChunk:e=>{void 0===t&&isAISDKContentAsyncIterableChunk(e)&&(t=getCurrentUnixTimestamp())},onComplete:async()=>{await l(t)},onError:t=>{p||(p=!0,a.log({error:t.message})),u()},onCancel:u}},m=t=>isReadableStreamLike(t)?createPatchedReadableStream(t,d()):createPatchedAsyncIterable(t,d()),g=t=>{let e,n=s;for(;n&&(e=Object.getOwnPropertyDescriptor(n,t),!e);)n=Object.getPrototypeOf(n);if(!e||n===s&&!e.configurable)return!1;if("value"in e){if(!isAsyncIterable(e.value))return!1;try{return Object.defineProperty(s,t,{configurable:n!==s||e.configurable,enumerable:e.enumerable,value:m(e.value),writable:e.writable}),!0}catch{return!1}}if("function"!=typeof e.get)return!1;const r=e.get,o=e.set;try{return Object.defineProperty(s,t,{configurable:n!==s||e.configurable,enumerable:e.enumerable,get(){const t=r.call(this);return isAsyncIterable(t)?m(t):t},...o?{set(t){o.call(this,t)}}:{}}),!0}catch{return!1}};let f=!1;if(isReadableStreamLike(s.baseStream)){let t;const e=s.baseStream.pipeThrough(new TransformStream({transform(e,n){void 0===t&&isAISDKContentStreamChunk(e)&&(t=getCurrentUnixTimestamp()),n.enqueue(e)},async flush(){await l(t)}})).getReader(),n=new ReadableStream({async pull(t){try{const{done:n,value:r}=await e.read();if(n)return void t.close();t.enqueue(r)}catch(e){a.log({error:toLoggedError(e)}),u(),t.error(e)}},async cancel(t){try{u()}finally{await e.cancel(t)}}});Object.defineProperty(s,"baseStream",{configurable:!0,enumerable:!0,value:n,writable:!0}),f=!0}for(const t of["partialObjectStream","textStream","fullStream","stream"])f=g(t)||f;return f}function attachKnownResultPromiseHandlers(t){const e=["content","text","object","value","values","finishReason","embedding","embeddings","usage","totalUsage","responses","steps"];for(const n of e)try{if(!(n in t))continue;const e=t[n];isPromiseLike(e)&&Promise.resolve(e).catch(()=>{})}catch{}}function isReadableStreamLike(t){return null!=t&&"object"==typeof t&&"function"==typeof t.getReader&&"function"==typeof t.pipeThrough}function createPatchedReadableStream(t,e){let n,r=!1;return new ReadableStream({async pull(o){n??=t.getReader();try{const{done:t,value:a}=await n.read();if(t)return r=!0,await e.onComplete(),void o.close();e.onChunk(a),o.enqueue(a)}catch(t){r=!0,e.onError(t instanceof Error?t:new Error(String(t))),o.error(t)}},async cancel(o){if(!r){r=!0;try{await(e.onCancel?.())}catch{}}n?await n.cancel(o):t.cancel&&await t.cancel(o)}})}function createPatchedAsyncIterable(t,e){return{async*[Symbol.asyncIterator](){let n=!1;try{for await(const n of t)e.onChunk(n),yield n;n=!0,await e.onComplete()}catch(t){throw n=!0,e.onError(t instanceof Error?t:new Error(String(t))),t}finally{if(!n)try{await(e.onCancel?.())}catch{}}}}}async function processAISDKStreamingOutput(t,e){const n=processAISDKOutput(t,e);if(!n||"object"!=typeof n)return n;const r=n,o=null!=t&&"object"==typeof t&&"partialObjectStream"in t;try{if(!o&&"text"in t){const e=await Promise.resolve(t.text);"string"==typeof e&&(r.text=e)}}catch{}try{if("object"in t){const e=await Promise.resolve(t.object);void 0!==e&&(r.object=e)}}catch{}try{if("finishReason"in t){const e=await Promise.resolve(t.finishReason);void 0!==e&&(r.finishReason=e)}}catch{}return r}function buildAISDKChildMetadata(t){const{model:e,provider:n}=serializeModelWithProvider(t);return{...e?{model:e}:{},...n?{provider:n}:{},braintrust:{integration_name:"ai-sdk",sdk_language:"typescript"}}}function buildResolvedMetadataPayload(t){const e=extractGatewayRoutingInfo(t),n={};let r;e?.provider&&(n.provider=e.provider),e?.model&&(n.model=e.model);try{r=t.finishReason}catch{r=void 0}return isPromiseLike(r)?Promise.resolve(r).catch(()=>{}):void 0!==r&&(n.finish_reason=r),Object.keys(n).length>0?{metadata:n}:{}}function mergeMetadataPayload(t,e){return e&&0!==Object.keys(e).length?{metadata:{...t.metadata??{},...e}}:t}function buildMissingUsageMetadata(t,e,n){if(hasLoggedOutput(t)&&!hasTokenUsageMetrics(e))return{usage_unavailable_reason:n}}function hasLoggedOutput(t){return null!=t&&(Array.isArray(t)?t.length>0:"object"!=typeof t||Object.keys(t).length>0)}function hasTokenUsageMetrics(t){return Object.keys(t).some(t=>"estimated_cost"!==t&&"time_to_first_token"!==t)}function resolveAISDKModel(t,e){if("string"!=typeof t)return t;const n=globalThis.AI_SDK_DEFAULT_PROVIDER??e?.gateway??null;return n&&"function"==typeof n.languageModel?n.languageModel(t):t}function extractTextDelta(t){return"string"==typeof t.textDelta?t.textDelta:"string"==typeof t.delta?t.delta:"string"==typeof t.text?t.text:"string"==typeof t.content?t.content:""}function isAsyncGenerator(t){return null!=t&&"object"==typeof t&&"function"==typeof t[Symbol.asyncIterator]&&"function"==typeof t.next&&"function"==typeof t.return&&"function"==typeof t.throw}function processAISDKOutput(t,e){if(!t)return t;const n=extractSerializableOutputFields(t),r=e.filter(t=>t.toLowerCase().endsWith("headers")),o=omit(n,e,r);for(const t of TRANSPORT_PAYLOAD_ROOT_PATHS){const e=[{obj:o,keys:parsePath(t)}];for(;e.length>0;){const t=e.pop();if(!t||0===t.keys.length)continue;const n=t.keys[0],r=t.keys.slice(1);if("[]"===n){if(Array.isArray(t.obj))for(const n of t.obj)e.push({obj:n,keys:r});continue}if(!t.obj||"object"!=typeof t.obj||!(n in t.obj))continue;const o=t.obj;0!==r.length?e.push({obj:o[n],keys:r}):o[n]=sanitizeAISDKMetadataValue(o[n])}}return normalizeAISDKLoggedOutput(o)}function processAISDKEmbeddingOutput(t,e){if(!t||"object"!=typeof t)return t;const n={},r=["usage","totalUsage","warnings","providerMetadata","experimental_providerMetadata"];for(const e of r){const r=safeSerializableFieldRead(t,e);void 0!==r&&isSerializableOutputValue(r)&&(n[e]=r)}const o=safeSerializableFieldRead(t,"embedding");Array.isArray(o)&&(n.embedding_length=o.length);const a=safeSerializableFieldRead(t,"embeddings");if(Array.isArray(a)){n.embedding_count=a.length;const t=a.find(t=>Array.isArray(t));Array.isArray(t)&&(n.embedding_length=t.length)}return normalizeAISDKLoggedOutput(omit(n,e))}function processAISDKRerankOutput(t,e){if(!t||"object"!=typeof t)return t;const n=safeSerializableFieldRead(t,"ranking");return Array.isArray(n)?n.slice(0,100).map(t=>{const e=t&&"object"==typeof t?t:void 0;return{index:"number"==typeof e?.originalIndex?e.originalIndex:void 0,relevance_score:"number"==typeof e?.score?e.score:void 0}}):void 0}function extractTokenMetrics(t){const e={};let n;const r=safeResultFieldRead(t,"totalUsage");if(void 0===r||isPromiseLike(r)||(n=r),!n){const e=safeResultFieldRead(t,"usage");void 0===e||isPromiseLike(e)||(n=e)}if(!n)return e;const o=firstNumber2(n.inputTokens?.total,n.inputTokens,n.promptTokens,n.prompt_tokens);void 0!==o&&(e.prompt_tokens=o);const a=firstNumber2(n.outputTokens?.total,n.outputTokens,n.completionTokens,n.completion_tokens);void 0!==a&&(e.completion_tokens=a);const i=firstNumber2(n.totalTokens,n.tokens,n.total_tokens);void 0!==i?e.tokens=i:void 0!==o&&void 0!==a&&(e.tokens=o+a);const s=firstNumber2(n.inputTokens?.cacheRead,n.inputTokenDetails?.cacheReadTokens,n.cachedInputTokens,n.promptCachedTokens,n.prompt_cached_tokens);void 0!==s&&(e.prompt_cached_tokens=s);const c=firstNumber2(n.inputTokens?.cacheWrite,n.inputTokenDetails?.cacheWriteTokens,n.promptCacheCreationTokens,n.prompt_cache_creation_tokens,extractAnthropicCacheCreationTokens(t));void 0!==c&&(e.prompt_cache_creation_tokens=c);const u=firstNumber2(n.promptReasoningTokens,n.prompt_reasoning_tokens);void 0!==u&&(e.prompt_reasoning_tokens=u);const p=firstNumber2(n.completionCachedTokens,n.completion_cached_tokens);void 0!==p&&(e.completion_cached_tokens=p);const l=firstNumber2(n.outputTokens?.reasoning,n.reasoningTokens,n.completionReasoningTokens,n.completion_reasoning_tokens,n.reasoning_tokens,n.thinkingTokens,n.thinking_tokens);void 0!==l&&(e.completion_reasoning_tokens=l,e.reasoning_tokens=l);const d=firstNumber2(n.completionAudioTokens,n.completion_audio_tokens);void 0!==d&&(e.completion_audio_tokens=d);const m=extractCostFromResult(t);return void 0!==m&&(e.estimated_cost=m),e}function extractAnthropicCacheCreationTokens(t){const e=safeSerializableFieldRead(t,"providerMetadata"),n=e?.anthropic;if(n)return firstNumber2(n.cacheCreationInputTokens,n.usage?.cache_creation_input_tokens)}function safeResultFieldRead(t,e){return safeSerializableFieldRead(t,e)}function safeSerializableFieldRead(t,e){try{const n=t?.[e];return isPromiseLike(n)?void Promise.resolve(n).catch(()=>{}):n}catch{return}}function aggregateAISDKChunks(t,e,n){const r=t[t.length-1],o={};let a,i={};if(r){i=hasModelChildTracing(n)?{}:extractTokenMetrics(r),a=buildResolvedMetadataPayload(r).metadata;const t=safeSerializableFieldRead(r,"text");void 0!==t&&(o.text=t);const e=safeSerializableFieldRead(r,"object");void 0!==e&&(o.object=e);const s=safeSerializableFieldRead(r,"finishReason");void 0!==s&&(o.finishReason=s);const c=safeSerializableFieldRead(r,"toolCalls");void 0!==c&&(o.toolCalls=c)}return finalizeAISDKChildTracing(n),{output:o,metrics:i,metadata:a}}function extractGetterValues(t){const e={},n=["content","messages","text","output","object","value","values","embedding","embeddings","finishReason","usage","totalUsage","toolCalls","toolResults","warnings","responses","experimental_providerMetadata","providerMetadata","rawResponse","response"];for(const r of n)try{if(!t||!(r in t))continue;const n=t[r];if(isPromiseLike(n)){Promise.resolve(n).catch(()=>{});continue}isSerializableOutputValue(n)&&(e[r]=n)}catch{}return e}function extractSerializableOutputFields(t){const e={},n=["messages","steps","output","request","responseMessages","warnings","rawResponse","response","providerMetadata","experimental_providerMetadata"];for(const r of n)try{const n=t?.[r];if(isPromiseLike(n)){Promise.resolve(n).catch(()=>{});continue}isSerializableOutputValue(n)&&(e[r]=n)}catch{}return{...e,...extractGetterValues(t)}}function isSerializableOutputValue(t){return"function"!=typeof t&&(!isPromiseLike(t)&&((!t||"object"!=typeof t||"function"!=typeof t.getReader)&&(!t||"object"!=typeof t||"function"!=typeof t[Symbol.asyncIterator])))}function serializeModelWithProvider(t){const e="string"==typeof t?t:t?.modelId,n="object"==typeof t?t?.provider:void 0;if(!e)return{model:e,provider:n};const r=parseGatewayModelString(e);return{model:r.model,provider:n||r.provider}}function parseGatewayModelString(t){if(!t||"string"!=typeof t)return{model:t};const e=t.indexOf("/");return e>0&&e<t.length-1?{provider:t.substring(0,e),model:t.substring(e+1)}:{model:t}}function extractGatewayRoutingInfo(t){const e=safeSerializableFieldRead(t,"steps");if(Array.isArray(e)&&e.length>0){const t=e[0]?.providerMetadata?.gateway?.routing;if(t)return{provider:t.resolvedProvider||t.finalProvider,model:t.resolvedProviderApiModelId}}const n=safeSerializableFieldRead(t,"providerMetadata"),r=n?.gateway?.routing;return r?{provider:r.resolvedProvider||r.finalProvider,model:r.resolvedProviderApiModelId}:null}function extractCostFromResult(t){const e=safeSerializableFieldRead(t,"steps");if(Array.isArray(e)&&e.length>0){let t=0,n=!1;for(const r of e){const e=r?.providerMetadata?.gateway,o=parseGatewayCost(e?.cost)||parseGatewayCost(e?.marketCost);void 0!==o&&o>0&&(t+=o,n=!0)}if(n)return t}const n=safeSerializableFieldRead(t,"providerMetadata"),r=n?.gateway,o=parseGatewayCost(r?.cost)||parseGatewayCost(r?.marketCost);if(void 0!==o&&o>0)return o}function parseGatewayCost(t){if(null!=t){if("number"==typeof t)return t;if("string"==typeof t){const e=parseFloat(t);if(!isNaN(e))return e}}}function firstNumber2(...t){for(const e of t)if("number"==typeof e)return e}function deepCopy(t){return JSON.parse(JSON.stringify(t))}function parsePath(t){const e=[];let n="";for(let r=0;r<t.length;r++){const o=t[r];if("."===o)n&&(e.push(n),n="");else if("["===o){n&&(e.push(n),n="");let o="";for(r++;r<t.length&&"]"!==t[r];)o+=t[r],r++;if(""===o)e.push("[]");else{const t=parseInt(o,10);e.push(isNaN(t)?o:t)}}else n+=o}return n&&e.push(n),e}function omitAtPath(t,e,n=!1){if(0===e.length)return;const r=e[0],o=e.slice(1);"[]"===r?Array.isArray(t)&&t.forEach(t=>{o.length>0&&omitAtPath(t,o,n)}):0===o.length?t&&"object"==typeof t&&r in t&&(n?delete t[r]:t[r]="<omitted>"):t&&"object"==typeof t&&r in t&&omitAtPath(t[r],o,n)}function omit(t,e,n=[]){const r=deepCopy(t),o=new Set(n);for(const t of e){omitAtPath(r,parsePath(t),o.has(t))}return r}var claudeAgentSDKChannels=defineChannels("@anthropic-ai/claude-agent-sdk",{query:channel({channelName:"query",kind:"sync-stream"})}),CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION="__braintrust_skip_local_tool_hooks",LOCAL_TOOL_CONTEXT_ASYNC_ITERATOR_PATCHED=Symbol.for("braintrust.claude_agent_sdk.local_tool_context_async_iterator_patched");function createLocalToolContextStore(){const t=isomorph_default;if("function"==typeof t.newAsyncLocalStorage)return t.newAsyncLocalStorage();let e;return{enterWith(t){e=t},getStore:()=>e,run(t,n){const r=e;e=t;try{return n()}finally{e=r}}}}var fallbackLocalToolParentResolver,localToolContextStore=createLocalToolContextStore();function createClaudeLocalToolContext(){return{}}function runWithClaudeLocalToolContext(t,e){return localToolContextStore.run(e??createClaudeLocalToolContext(),t)}function ensureClaudeLocalToolContext(){const t=localToolContextStore.getStore();if(t)return t;const e={};return localToolContextStore.enterWith(e),e}function setClaudeLocalToolParentResolver(t){fallbackLocalToolParentResolver=t;const e=ensureClaudeLocalToolContext();e&&(e.resolveLocalToolParent=t)}function getClaudeLocalToolParentResolver(){return localToolContextStore.getStore()?.resolveLocalToolParent??fallbackLocalToolParentResolver}function isAsyncIterable3(t){return null!==t&&"object"==typeof t&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function bindClaudeLocalToolContextToAsyncIterable(t,e){if(!isAsyncIterable3(t)||Object.isFrozen(t)||Object.isSealed(t))return t;const n=t,r=n[Symbol.asyncIterator];if(r[LOCAL_TOOL_CONTEXT_ASYNC_ITERATOR_PATCHED])return t;const o=function(){return runWithClaudeLocalToolContext(()=>{const t=Reflect.apply(r,this,[]);if(!t||"object"!=typeof t)return t;const n=n=>{const r=Reflect.get(t,n);"function"==typeof r&&Reflect.set(t,n,(...n)=>runWithClaudeLocalToolContext(()=>Reflect.apply(r,t,n),e))};return n("next"),n("return"),n("throw"),t},e)};return Object.defineProperty(o,LOCAL_TOOL_CONTEXT_ASYNC_ITERATOR_PATCHED,{configurable:!1,enumerable:!1,value:!0,writable:!1}),Reflect.set(n,Symbol.asyncIterator,o),t}var LOCAL_TOOL_HANDLER_WRAPPED=Symbol.for("braintrust.claude_agent_sdk.local_tool_handler_wrapped");function getToolUseIdFromExtra(t){if(!t||"object"!=typeof t||!("_meta"in t))return;const e=Reflect.get(t,"_meta");if(!e||"object"!=typeof e)return;const n=Reflect.get(e,"claudecode/toolUseId");return"string"==typeof n?n:void 0}function wrapLocalClaudeToolHandler(t,e){if(t[LOCAL_TOOL_HANDLER_WRAPPED])return t;const n=function(...n){const r=e(),o=r.serverName?`mcp__${r.serverName}__${r.toolName}`:r.toolName,a=getToolUseIdFromExtra(n[1]),i=getClaudeLocalToolParentResolver(),s=r.serverName?`tool: ${r.serverName}/${r.toolName}`:`tool: ${r.toolName}`;return(async()=>{const e=a&&i?await i(a).catch(()=>{}):void 0,c=startSpan({event:{input:n[0],metadata:{"claude_agent_sdk.raw_tool_name":o,"gen_ai.tool.name":r.toolName,...a&&{"gen_ai.tool.call.id":a},...r.serverName&&{"mcp.server":r.serverName}}},name:s,...e&&{parent:e},spanAttributes:{type:"tool"}}),u=()=>Reflect.apply(t,this,n),p=t=>(c.log({output:t}),c.end(),t),l=t=>{throw c.log({error:toLoggedError(t)}),c.end(),t};return withCurrent(c,()=>{try{const t=u();return isPromiseLike(t)?t.then(p,l):p(t)}catch(t){return l(t)}})})()};return Object.defineProperty(n,LOCAL_TOOL_HANDLER_WRAPPED,{configurable:!1,enumerable:!1,value:!0,writable:!1}),n}function getRegisteredTools(t){if(!t||"object"!=typeof t)return;if(!("_registeredTools"in t))return;const e=Reflect.get(t,"_registeredTools");return e instanceof Map||e&&"object"==typeof e?e:void 0}function wrapLocalMcpServerToolHandlers(t,e){if(!e||"object"!=typeof e)return!1;if(!("instance"in e))return!1;const n=getRegisteredTools(Reflect.get(e,"instance"));if(!n)return!1;let r=!1;const o=(e,n)=>{if(!n||"object"!=typeof n)return;const o=Reflect.get(n,"handler");if("function"!=typeof o)return;const a=wrapLocalClaudeToolHandler(o,()=>({serverName:t,toolName:e}));a!==o&&(Reflect.set(n,"handler",a),r=!0)};if(n instanceof Map){for(const[t,e]of n.entries())o(t,e);return r}for(const[t,e]of Object.entries(n))o(t,e);return r}function collectLocalMcpServerToolHookNames(t,e){const n=new Set;if(!e||"object"!=typeof e)return n;if("instance"in e){const r=getRegisteredTools(Reflect.get(e,"instance"));if(r instanceof Map)for(const e of r.keys())n.add(e),n.add(`mcp__${t}__${e}`);else if(r)for(const e of Object.keys(r))n.add(e),n.add(`mcp__${t}__${e}`)}if("tools"in e){const r=Reflect.get(e,"tools");if(Array.isArray(r))for(const e of r){if(!e||"object"!=typeof e)continue;const r=Reflect.get(e,"name");"string"==typeof r&&(n.add(r),n.add(`mcp__${t}__${r}`))}}return n}var ROOT_LLM_PARENT_KEY="__root__",SUB_AGENT_PROMPT_SOURCE_PRIORITY={delegation:0,lifecycle:1,sidechain:2};function llmParentKey(t){return t??ROOT_LLM_PARENT_KEY}function isSubAgentDelegationToolName(t){return"Agent"===t||"Task"===t}function filterSerializableOptions(t){const e=["model","maxTurns","cwd","continue","allowedTools","disallowedTools","additionalDirectories","permissionMode","debug","agentName","instructions"],n={};for(const r of e)void 0!==t[r]&&(n[r]=t[r]);return n}function getNumberProperty(t,e){if(!t||"object"!=typeof t||!(e in t))return;const n=Reflect.get(t,e);return"number"==typeof n?n:void 0}function getStringProperty(t,e){if(!t||"object"!=typeof t||!(e in t))return;const n=Reflect.get(t,e);return"string"==typeof n?n:void 0}function upsertSubAgentDetails(t,e,n){const r={...t.get(e)??{},...Object.fromEntries(Object.entries(n).filter(([,t])=>void 0!==t))};return t.set(e,r),r}function formatSubAgentSpanName(t){return t?.description?`Agent: ${t.description}`:t?.agentType?`Agent: ${t.agentType}`:"Agent: sub-agent"}function subAgentDetailsToMetadata(t){if(!t)return{};const e={};return t.agentId&&(e["claude_agent_sdk.agent_id"]=t.agentId),t.agentType&&(e["claude_agent_sdk.agent_type"]=t.agentType),t.description&&(e["claude_agent_sdk.description"]=t.description),t.taskId&&(e["claude_agent_sdk.task_id"]=t.taskId),t.taskType&&(e["claude_agent_sdk.task_type"]=t.taskType),t.toolUseId&&(e["claude_agent_sdk.tool_use_id"]=t.toolUseId),t.workflowName&&(e["claude_agent_sdk.workflow_name"]=t.workflowName),e}function resolveTaskToolUseId(t,e){const n="string"==typeof e.tool_use_id?e.tool_use_id:void 0;return n&&"string"==typeof e.task_id&&t.set(e.task_id,n),n||("string"==typeof e.task_id?t.get(e.task_id):void 0)}function seedTaskToolUseIdMapping(t,e){"string"==typeof e.task_id&&"string"==typeof e.tool_use_id&&t.set(e.task_id,e.tool_use_id)}function extractUsageFromMessage(t){const e={};let n;if("assistant"===t.type?n=t.message?.usage:"result"===t.type&&(n=t.usage),!n||"object"!=typeof n)return e;const r=getNumberProperty(n,"input_tokens");void 0!==r&&(e.prompt_tokens=r);const o=getNumberProperty(n,"output_tokens");void 0!==o&&(e.completion_tokens=o);const a=getNumberProperty(n,"cache_read_input_tokens")||0,i=getNumberProperty(n,"cache_creation_input_tokens")||0;return(a>0||i>0)&&Object.assign(e,extractAnthropicCacheTokens(a,i)),Object.keys(e).length>0&&Object.assign(e,finalizeAnthropicTokens(e)),e}function buildLLMInput(t,e){const n=[...t,...e];return n.length>0?n:void 0}function conversationMessageFromSDKMessage(t){const e=t.message?.role,n=t.message?.content;if(e&&void 0!==n)return{content:n,role:e}}function messageContentHasBlockType(t,e){const n=t.message?.content;return Array.isArray(n)&&n.some(t=>"object"==typeof t&&null!==t&&"type"in t&&t.type===e)}function buildRootPromptMessages(t,e){return"string"==typeof t?[{content:t,role:"user"}]:e&&0!==e.length?e.map(conversationMessageFromSDKMessage).filter(t=>void 0!==t):[]}function formatCapturedMessages(t){return t.length>0?t:[]}async function createLLMSpanForMessages(t,e,n,r,o,a,i){if(0===t.length)return;const s=t[t.length-1];if("assistant"!==s.type||!s.message?.usage)return;const c=s.message.model||r.model,u=extractUsageFromMessage(s),p=buildLLMInput(e,n),l=t.map(t=>t.message?.content&&t.message?.role?{content:t.message.content,role:t.message.role}:void 0).filter(t=>void 0!==t),d=i??startSpan({name:"anthropic.messages.create",parent:a,spanAttributes:{type:"llm"},startTime:o});d.log({input:p,metadata:c?{model:c}:void 0,metrics:u,output:l});const m=await d.export();await d.end();return{finalMessage:s.message?.content&&s.message?.role?{content:s.message.content,role:s.message.role}:void 0,spanExport:m}}function getMcpServerMetadata(t,e){if(!t||!e)return{};const n=e[t];if(!n)return{};const r={};return n.type?r["mcp.type"]=n.type:"object"==typeof n&&"transport"in n&&(r["mcp.type"]="sdk"),n.url&&(r["mcp.url"]=n.url),n.command&&(r["mcp.command"]=n.command,n.args&&(r["mcp.args"]=n.args.join(" "))),r}function parseToolName(t){const e=t.match(/^mcp__([^_]+)__(.+)$/);if(e){const[,n,r]=e;return{displayName:`tool: ${n}/${r}`,mcpServer:n,rawToolName:t,toolName:r}}return{displayName:`tool: ${t}`,rawToolName:t,toolName:t}}function isLocalToolUse(t,e){const n=parseToolName(t);if(!n.mcpServer||!e)return!1;const r=e[n.mcpServer];return!(!r||"object"!=typeof r)&&("sdk"===r.type||"transport"in r)}function prepareLocalToolHandlersInMcpServers(t){const e=new Set;if(!t)return{hasLocalToolHandlers:!1,localToolHookNames:e};let n=!1;for(const[r,o]of Object.entries(t)){const t=collectLocalMcpServerToolHookNames(r,o);for(const n of t)e.add(n);t.size>0&&(n=!0),wrapLocalMcpServerToolHandlers(r,o)&&(n=!0)}return{hasLocalToolHandlers:n,localToolHookNames:e}}function createToolTracingHooks(t,e,n,r,o,a,i,s){return{postToolUse:async(t,c)=>{if("PostToolUse"!==t.hook_event_name||!c)return{};if(o&&(isLocalToolUse(t.tool_name,n)||r.has(t.tool_name)))return{};const u=i.get(c),p=e.get(c);if(u){if(s.has(c))return{};try{const e=t.tool_response,n={...subAgentDetailsToMetadata(a.get(c))};e?.status&&(n["claude_agent_sdk.status"]=e.status),e?.totalDurationMs&&(n["claude_agent_sdk.duration_ms"]=e.totalDurationMs),void 0!==e?.totalToolUseCount&&(n["claude_agent_sdk.tool_use_count"]=e.totalToolUseCount),u.log({metadata:n,output:e?.content})}finally{u.end(),s.add(c)}if(p)try{p.log({output:t.tool_response})}finally{p.end(),e.delete(c)}return{}}if(!p)return{};try{p.log({output:t.tool_response})}finally{p.end(),e.delete(c)}return{}},postToolUseFailure:async(t,c)=>{if("PostToolUseFailure"!==t.hook_event_name||!c)return{};if(o&&(isLocalToolUse(t.tool_name,n)||r.has(t.tool_name)))return{};const u=i.get(c),p=e.get(c);if(u){if(s.has(c))return{};try{u.log({error:t.error,metadata:subAgentDetailsToMetadata(a.get(c))})}finally{u.end(),s.add(c)}if(p){const n=parseToolName(t.tool_name);try{p.log({error:t.error,metadata:{"claude_agent_sdk.is_interrupt":t.is_interrupt,"claude_agent_sdk.session_id":t.session_id,"claude_agent_sdk.raw_tool_name":n.rawToolName,"gen_ai.tool.call.id":c,"gen_ai.tool.name":n.toolName,...n.mcpServer&&{"mcp.server":n.mcpServer}}})}finally{p.end(),e.delete(c)}}return{}}if(!p)return{};const l=parseToolName(t.tool_name);try{p.log({error:t.error,metadata:{"claude_agent_sdk.is_interrupt":t.is_interrupt,"claude_agent_sdk.session_id":t.session_id,"gen_ai.tool.call.id":c,"gen_ai.tool.name":l.toolName,...l.mcpServer&&{"mcp.server":l.mcpServer}}})}finally{p.end(),e.delete(c)}return{}},preToolUse:async(a,i)=>{if("PreToolUse"!==a.hook_event_name||!i)return{};if(o&&(isLocalToolUse(a.tool_name,n)||r.has(a.tool_name)))return{};const s=parseToolName(a.tool_name),c=startSpan({event:{input:a.tool_input,metadata:{"claude_agent_sdk.cwd":a.cwd,"claude_agent_sdk.raw_tool_name":s.rawToolName,"claude_agent_sdk.session_id":a.session_id,"gen_ai.tool.call.id":i,"gen_ai.tool.name":s.toolName,...s.mcpServer&&{"mcp.server":s.mcpServer},...getMcpServerMetadata(s.mcpServer,n)}},name:s.displayName,parent:await t(i,{agentId:a.agent_id}),spanAttributes:{type:"tool"}});return e.set(i,c),{}},subagentStart:async(t,e)=>{if("SubagentStart"!==t.hook_event_name||!e)return{};const n=upsertSubAgentDetails(a,e,{agentId:t.agent_id,agentType:t.agent_type,toolUseId:e}),r=i.get(e);return r&&!s.has(e)&&r.log({metadata:subAgentDetailsToMetadata(n)}),{}},subagentStop:async(t,e)=>{if("SubagentStop"!==t.hook_event_name||!e)return{};const n=upsertSubAgentDetails(a,e,{agentId:t.agent_id,agentType:t.agent_type,toolUseId:e}),r=i.get(e);if(!r||s.has(e))return{};const o={...subAgentDetailsToMetadata(n),...t.agent_transcript_path&&{"claude_agent_sdk.agent_transcript_path":t.agent_transcript_path},"claude_agent_sdk.stop_hook_active":t.stop_hook_active};try{r.log({metadata:o,output:t.last_assistant_message})}finally{r.end(),s.add(e)}return{}}}}function injectTracingHooks(t,e,n,r,o,a,i,s){const{preToolUse:c,postToolUse:u,postToolUseFailure:p,subagentStart:l,subagentStop:d}=createToolTracingHooks(e,n,t.mcpServers,r,o,a,i,s),m=t.hooks??{};return{...t,hooks:{...m,PostToolUse:[...m.PostToolUse??[],{hooks:[u]}],PostToolUseFailure:[...m.PostToolUseFailure??[],{hooks:[p]}],PreToolUse:[...m.PreToolUse??[],{hooks:[c]}],SubagentStart:[...m.SubagentStart??[],{hooks:[l]}],SubagentStop:[...m.SubagentStop??[],{hooks:[d]}]}}}function setSubAgentPromptMessages(t,e,n,r){if(0===n.length)return;const o=llmParentKey(e),a=SUB_AGENT_PROMPT_SOURCE_PRIORITY[r];a>(t.promptSourcePriorityByParentKey.get(o)??-1)&&(t.promptMessagesByParentKey.set(o,n),t.promptSourcePriorityByParentKey.set(o,a))}function getConversationHistory(t,e){let n=t.conversationHistoryByParentKey.get(e);return n||(n=[],t.conversationHistoryByParentKey.set(e,n)),n}async function finalizeCurrentMessageGroup(t){if(0===t.currentMessages.length)return;const e=t.currentMessages[0]?.parent_tool_use_id??null,n=llmParentKey(e),r=getConversationHistory(t,n),o=e?t.promptMessagesByParentKey.get(n)??[]:buildRootPromptMessages(t.originalPrompt,t.capturedPromptMessages);let a=await t.span.export();if(e){const n=t.subAgentSpans.get(e);n&&(a=await n.export())}const i=t.activeLlmSpansByParentToolUse.get(n),s=await createLLMSpanForMessages(t.currentMessages,o,r,t.options,t.currentMessageStartTime,a,i);s&&(e?t.latestLlmParentBySubAgentToolUse.set(e,s.spanExport):t.latestRootLlmParentRef.value=s.spanExport,s.finalMessage&&(r.push(s.finalMessage),t.finalResults.push(s.finalMessage))),t.activeLlmSpansByParentToolUse.delete(n);const c=t.currentMessages[t.currentMessages.length-1];c?.message?.usage&&(t.accumulatedOutputTokens+=getNumberProperty(c.message.usage,"output_tokens")||0),t.currentMessages.length=0}function maybeTrackToolUseContext(t,e){if(seedTaskToolUseIdMapping(t.taskIdToToolUseId,e),"assistant"!==e.type||!Array.isArray(e.message?.content))return;const n=e.parent_tool_use_id??null;for(const r of e.message.content)if("object"==typeof r&&null!==r&&"type"in r&&"tool_use"===r.type&&"id"in r&&"string"==typeof r.id&&(t.toolUseToParent.set(r.id,n),"string"==typeof r.name&&isSubAgentDelegationToolName(r.name)&&"object"==typeof r.input&&null!==r.input)){upsertSubAgentDetails(t.subAgentDetailsByToolUseId,r.id,{agentType:getStringProperty(r.input,"subagent_type"),description:getStringProperty(r.input,"description"),toolUseId:r.id});const e=getStringProperty(r.input,"prompt");e&&setSubAgentPromptMessages(t,r.id,[{content:e,role:"user"}],"delegation")}}async function maybeStartSubAgentSpan(t,e){if(!("parent_tool_use_id"in e))return;const n=e.parent_tool_use_id;n&&await ensureSubAgentSpan(t.subAgentDetailsByToolUseId,t.span,t.activeToolSpans,t.subAgentSpans,n)}async function ensureSubAgentSpan(t,e,n,r,o){const a=r.get(o);if(a)return a;const i=t.get(o),s=formatSubAgentSpanName(i),c=n.get(o),u=c?await c.export():await e.export(),p=startSpan({event:{metadata:subAgentDetailsToMetadata(i)},name:s,parent:u,spanAttributes:{type:"task"}});return r.set(o,p),p}async function ensureActiveLlmSpanForParentToolUse(t,e,n,r,o,a,i){const s=llmParentKey(a),c=e.get(s);if(c)return c;let u=await t.export();if(a){const e=await ensureSubAgentSpan(n,t,r,o,a);u=await e.export()}const p=startSpan({name:"anthropic.messages.create",parent:u,spanAttributes:{type:"llm"},startTime:i});return e.set(s,p),p}async function maybeHandleTaskLifecycleMessage(t,e){if("system"!==e.type)return!1;if("task_started"!==e.subtype&&"task_progress"!==e.subtype&&"task_notification"!==e.subtype)return!1;const n=resolveTaskToolUseId(t.taskIdToToolUseId,e);if(!n)return!0;const r=upsertSubAgentDetails(t.subAgentDetailsByToolUseId,n,{description:getStringProperty(e,"description"),taskId:getStringProperty(e,"task_id"),taskType:getStringProperty(e,"task_type"),toolUseId:n,workflowName:getStringProperty(e,"workflow_name")}),o=await ensureSubAgentSpan(t.subAgentDetailsByToolUseId,t.span,t.activeToolSpans,t.subAgentSpans,n);if(t.endedSubAgentSpans.has(n))return!0;const a=e.usage,i=getNumberProperty(a,"total_tokens"),s=getNumberProperty(a,"tool_uses"),c=getNumberProperty(a,"duration_ms"),u={...subAgentDetailsToMetadata(r),"claude_agent_sdk.tool_use_id":n,...void 0!==i&&{"claude_agent_sdk.total_tokens":i},...void 0!==s&&{"claude_agent_sdk.tool_use_count":s},...void 0!==c&&{"claude_agent_sdk.duration_ms":c}};if("task_started"===e.subtype){const r=getStringProperty(e,"prompt");return r&&setSubAgentPromptMessages(t,n,[{content:r,role:"user"}],"lifecycle"),o.log({input:r,metadata:u}),!0}const p=getStringProperty(e,"summary");if(p&&(u["claude_agent_sdk.summary"]=p),"task_progress"===e.subtype){const t=getStringProperty(e,"last_tool_name");return t&&(u["claude_agent_sdk.last_tool_name"]=t),o.log({metadata:u,output:p}),!0}const l=getStringProperty(e,"status"),d=getStringProperty(e,"output_file");l&&(u["claude_agent_sdk.task_status"]=l),d&&(u["claude_agent_sdk.output_file"]=d);const m=p||d?{...p&&{summary:p},...d&&{output_file:d}}:void 0;try{o.log({metadata:u,output:m})}finally{o.end(),t.endedSubAgentSpans.add(n)}return!0}async function handleStreamMessage(t,e){if(maybeTrackToolUseContext(t,e),await maybeHandleTaskLifecycleMessage(t,e))return;await maybeStartSubAgentSpan(t,e);const n=e.parent_tool_use_id;if(n&&"user"===e.type){const r=conversationMessageFromSDKMessage(e);if("user"===r?.role){await finalizeCurrentMessageGroup(t);const o=llmParentKey(n),a=getConversationHistory(t,o),i=t.promptSourcePriorityByParentKey.get(o)??-1;return 0===a.length&&i<SUB_AGENT_PROMPT_SOURCE_PRIORITY.sidechain&&!messageContentHasBlockType(e,"tool_result")?void setSubAgentPromptMessages(t,n,[r],"sidechain"):void a.push(r)}}const r=e.message?.id;if(r&&r!==t.currentMessageId&&(await finalizeCurrentMessageGroup(t),t.currentMessageId=r,t.currentMessageStartTime=getCurrentUnixTimestamp()),"assistant"===e.type&&e.message?.usage){const n=e.parent_tool_use_id??null;await ensureActiveLlmSpanForParentToolUse(t.span,t.activeLlmSpansByParentToolUse,t.subAgentDetailsByToolUseId,t.activeToolSpans,t.subAgentSpans,n,t.currentMessageStartTime),t.currentMessages.push(e)}if("result"!==e.type||!e.usage)return;const o=extractUsageFromMessage(e);if(t.currentMessages.length>0&&void 0!==o.completion_tokens){const n=t.currentMessages[t.currentMessages.length-1];if(n?.message?.usage){const r=o.completion_tokens-t.accumulatedOutputTokens;r>=0&&(n.message.usage.output_tokens=r);const a=e.usage;if(a&&"object"==typeof a){const t=getNumberProperty(a,"cache_read_input_tokens");void 0!==t&&(n.message.usage.cache_read_input_tokens=t);const e=getNumberProperty(a,"cache_creation_input_tokens");void 0!==e&&(n.message.usage.cache_creation_input_tokens=e)}}}const a={};void 0!==e.num_turns&&(a.num_turns=e.num_turns),void 0!==e.session_id&&(a.session_id=e.session_id),Object.keys(a).length>0&&t.span.log({metadata:a})}async function finalizeQuerySpan(t){try{await finalizeCurrentMessageGroup(t),t.span.log({output:t.finalResults.length>0?t.finalResults[t.finalResults.length-1]:void 0}),t.capturedPromptMessages&&(t.promptStarted()&&await t.promptDone,t.capturedPromptMessages.length>0&&t.span.log({input:formatCapturedMessages(t.capturedPromptMessages)}))}finally{for(const e of t.activeLlmSpansByParentToolUse.values())e.end();t.activeLlmSpansByParentToolUse.clear();for(const e of t.activeToolSpans.values())e.end();t.activeToolSpans.clear();for(const[e,n]of t.subAgentSpans)t.endedSubAgentSpans.has(e)||n.end();t.subAgentSpans.clear(),t.span.end()}}var ClaudeAgentSDKPlugin=class extends BasePlugin{onEnable(){this.subscribeToQuery()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[]}subscribeToQuery(){const t=claudeAgentSDKChannels.query.tracingChannel(),e=new WeakMap,n={start:t=>{const n=t.arguments[0]??{},r=n.prompt,o=n.options??{},a=isAsyncIterable(r);let i,s,c=!1;const u=new Promise(t=>{s=t});if(a){i=[];const t=r;n.prompt=async function*(){c=!0;try{for await(const e of t)i.push(e),yield e}finally{s?.()}}()}const p=startSpan({name:"Claude Agent",spanAttributes:{type:"task"}}),l=getCurrentUnixTimestamp();try{p.log({input:"string"==typeof r?r:a?void 0:void 0!==r?String(r):void 0,metadata:filterSerializableOptions(o)})}catch(t){console.error("Error extracting input for Claude Agent SDK:",t)}const d=new Map,m=new Map,g=new Map,f=new Map,h=new Set,_=new Map,y=new Map,v={value:void 0},b=new Map,S=new Map,T=new Map,C=new Map,A=createClaudeLocalToolContext(),{hasLocalToolHandlers:w,localToolHookNames:I}=prepareLocalToolHandlersInMcpServers(o.mcpServers),E=!0===o[CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION]||w,z=async(t,e)=>{const n=_.get(t)??(e?.agentId?S.get(e.agentId)??null:null),r=llmParentKey(n),o=m.get(r),a=n?y.get(n):v.value;if(o||a||await ensureActiveLlmSpanForParentToolUse(p,m,b,d,f,n,getCurrentUnixTimestamp()),n){return(await ensureSubAgentSpan(b,p,d,f,n)).export()}return p.export()};A.resolveLocalToolParent=z,setClaudeLocalToolParentResolver(z);const x=injectTracingHooks(o,z,d,I,E,b,f,h);n.options=x,t.arguments[0]=n,e.set(t,{accumulatedOutputTokens:0,activeLlmSpansByParentToolUse:m,activeToolSpans:d,conversationHistoryByParentKey:g,capturedPromptMessages:i,currentMessageId:void 0,currentMessageStartTime:l,currentMessages:[],endedSubAgentSpans:h,finalResults:[],options:x,originalPrompt:r,processing:Promise.resolve(),promptDone:u,promptMessagesByParentKey:T,promptStarted:()=>c,promptSourcePriorityByParentKey:C,span:p,subAgentDetailsByToolUseId:b,subAgentSpans:f,taskIdToToolUseId:S,latestLlmParentBySubAgentToolUse:y,latestRootLlmParentRef:v,toolUseToParent:_,localToolContext:A})},end:t=>{const n=e.get(t);if(!n)return;const r=bindClaudeLocalToolContextToAsyncIterable(t.result,n.localToolContext);if(void 0===r)return n.span.end(),void e.delete(t);if(isAsyncIterable(r))patchStreamIfNeeded(r,{onChunk:t=>{maybeTrackToolUseContext(n,t),n.processing=n.processing.then(()=>handleStreamMessage(n,t)).catch(t=>{console.error("Error processing Claude Agent SDK stream chunk:",t)})},onComplete:()=>n.processing.then(()=>finalizeQuerySpan(n)).finally(()=>{e.delete(t)}),onError:r=>n.processing.then(()=>{n.span.log({error:r.message})}).then(()=>finalizeQuerySpan(n)).finally(()=>{e.delete(t)})});else try{n.span.log({output:r})}catch(t){console.error("Error extracting output for Claude Agent SDK:",t)}finally{n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}},cursorSDKChannels=defineChannels("@cursor/sdk",{create:channel({channelName:"Agent.create",kind:"async"}),resume:channel({channelName:"Agent.resume",kind:"async"}),prompt:channel({channelName:"Agent.prompt",kind:"async"}),send:channel({channelName:"agent.send",kind:"async"})}),PATCHED_AGENT=Symbol.for("braintrust.cursor-sdk.auto-patched-agent"),PATCHED_RUN=Symbol.for("braintrust.cursor-sdk.patched-run"),WRAPPED_AGENT=Symbol.for("braintrust.cursor-sdk.wrapped-agent"),CursorSDKPlugin=class extends BasePlugin{promptDepth=0;onEnable(){this.subscribeToAgentFactories(),this.subscribeToPrompt(),this.subscribeToSend()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[],this.promptDepth=0}subscribeToAgentFactories(){this.subscribeToAgentFactory(cursorSDKChannels.create),this.subscribeToAgentFactory(cursorSDKChannels.resume)}subscribeToAgentFactory(t){const e=t.tracingChannel(),n={asyncEnd:t=>{patchCursorAgentInPlace(t.result)},error:()=>{}};e.subscribe(n),this.unsubscribers.push(()=>{e.unsubscribe(n)})}subscribeToPrompt(){const t=cursorSDKChannels.prompt.tracingChannel(),e=new WeakMap,n={start:t=>{this.promptDepth+=1;const n=t.arguments[0],r={...extractAgentOptionsMetadata(t.arguments[1]),"cursor_sdk.operation":"Agent.prompt",provider:"cursor",...t.moduleVersion?{"cursor_sdk.version":t.moduleVersion}:{}},o=startSpan({name:"Cursor Agent",spanAttributes:{type:"task"}}),a=getCurrentUnixTimestamp();safeLog2(o,{input:sanitizeUserMessage(n),metadata:r}),e.set(t,{metadata:r,span:o,startTime:a})},asyncEnd:t=>{this.promptDepth=Math.max(0,this.promptDepth-1);const n=e.get(t);if(n)try{safeLog2(n.span,{metadata:{...n.metadata,...extractRunResultMetadata(t.result)},metrics:buildDurationMetrics2(n.startTime),output:t.result?.result??t.result})}finally{n.span.end(),e.delete(t)}},error:t=>{this.promptDepth=Math.max(0,this.promptDepth-1);const n=e.get(t);n&&t.error&&(safeLog2(n.span,{error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}subscribeToSend(){const t=cursorSDKChannels.send.tracingChannel(),e=new WeakMap,n={start:t=>{if(this.promptDepth>0)return;const n=t.arguments[0],r=t.arguments[1],o=t.agent,a={...extractSendMetadata(r),...o?extractAgentMetadata(o):{},"cursor_sdk.operation":"agent.send",provider:"cursor",...t.moduleVersion?{"cursor_sdk.version":t.moduleVersion}:{}},i=startSpan({name:"Cursor Agent",spanAttributes:{type:"task"}}),s=getCurrentUnixTimestamp();safeLog2(i,{input:sanitizeUserMessage(n),metadata:a});const c={activeToolSpans:new Map,agent:o,conversationText:[],deltaText:[],finalized:!1,input:n,metadata:a,metrics:{},span:i,startTime:s,streamMessages:[],streamText:[],stepText:[],taskText:[]};hasCursorCallbacks(r)&&(t.arguments[1]=wrapSendOptionsCallbacks(r,c)),e.set(t,c)},asyncEnd:t=>{const n=e.get(t);n&&t.result&&(n.run=t.result,n.metadata={...n.metadata,...extractRunMetadata(t.result)},patchCursorRun(t.result,n))},error:t=>{const n=e.get(t);n&&t.error&&(safeLog2(n.span,{error:t.error.message}),endOpenToolSpans(n,t.error.message),n.span.end(),n.finalized=!0,e.delete(t))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}};function patchCursorAgentInPlace(t){if(!t||"object"!=typeof t)return;const e=t;if(e[PATCHED_AGENT]||e[WRAPPED_AGENT]||"function"!=typeof e.send)return;const n=e.send.bind(e);try{Object.defineProperty(e,PATCHED_AGENT,{configurable:!1,enumerable:!1,value:!0}),Object.defineProperty(e,"send",{configurable:!0,value(t,r){const o=[t,r];return cursorSDKChannels.send.tracePromise(()=>n(...o),{agent:e,arguments:o,operation:"send"})},writable:!0})}catch{}}function wrapSendOptionsCallbacks(t,e){const n=t.onDelta,r=t.onStep;return{...t,async onDelta(t){try{await handleInteractionUpdate(e,t.update)}catch(t){logInstrumentationError2("Cursor SDK onDelta",t)}if(n)return n(t)},async onStep(t){try{handleStepUpdate(e,t.step)}catch(t){logInstrumentationError2("Cursor SDK onStep",t)}if(r)return r(t)}}}function hasCursorCallbacks(t){return!!t&&("function"==typeof t.onDelta||"function"==typeof t.onStep)}function patchCursorRun(t,e){if(!t||"object"!=typeof t)return;const n=t;if(!n[PATCHED_RUN])try{if(Object.defineProperty(n,PATCHED_RUN,{configurable:!1,enumerable:!1,value:!0}),"function"==typeof n.stream){const t=n.stream.bind(n);Object.defineProperty(n,"stream",{configurable:!0,value:()=>patchCursorStream(t(),e),writable:!0})}if("function"==typeof n.wait){const t=n.wait.bind(n);Object.defineProperty(n,"wait",{configurable:!0,async value(){try{const n=await t();return e.lastResult=n,await finalizeCursorRun(e,{result:n}),n}catch(t){throw await finalizeCursorRun(e,{error:t}),t}},writable:!0})}if("function"==typeof n.conversation){const t=n.conversation.bind(n);Object.defineProperty(n,"conversation",{configurable:!0,async value(){try{const n=await t();return await handleConversation(e,n),await finalizeCursorRun(e),n}catch(t){throw await finalizeCursorRun(e,{error:t}),t}},writable:!0})}}catch{finalizeCursorRun(e,{output:t})}}async function*patchCursorStream(t,e){try{for await(const n of t){try{await handleStreamMessage2(e,n)}catch(t){logInstrumentationError2("Cursor SDK stream",t)}yield n}await finalizeCursorRun(e)}catch(t){throw await finalizeCursorRun(e,{error:t}),t}}async function handleInteractionUpdate(t,e){switch(e.type){case"text-delta":return void("string"==typeof e.text&&t.deltaText.push(e.text));case"token-delta":return void("number"==typeof e.tokens&&(t.metrics["cursor_sdk.delta_tokens"]=(t.metrics["cursor_sdk.delta_tokens"]??0)+e.tokens));case"tool-call-started":case"partial-tool-call":case"tool-call-completed":return void await handleToolUpdate(t,e);case"turn-ended":return void addUsageMetrics(t.metrics,e.usage);case"summary":return void("string"==typeof e.summary&&t.taskText.push(e.summary));case"step-completed":return"number"==typeof e.stepDurationMs&&(t.metrics["cursor_sdk.step_duration_ms"]=(t.metrics["cursor_sdk.step_duration_ms"]??0)+e.stepDurationMs),void(t.metrics["cursor_sdk.steps"]=(t.metrics["cursor_sdk.steps"]??0)+1);default:return}}async function handleToolUpdate(t,e){const n=e.callId;if(!n)return;const r=e.toolCall,o=extractToolName(r),a=extractToolArgs(r),i=extractToolResult(r);if("tool-call-started"===e.type||"partial-tool-call"===e.type)return void(t.activeToolSpans.has(n)||t.activeToolSpans.set(n,await startToolSpan(t,{args:a,callId:n,name:o,status:"running",toolCall:r})));finishToolSpan(t.activeToolSpans.get(n)??await startToolSpan(t,{args:a,callId:n,name:o,status:"completed",toolCall:r}),{error:"error"===r?.status?toLoggedError(i):void 0,metadata:{"cursor_sdk.tool.status":r?.status??"completed"},output:i}),t.activeToolSpans.delete(n)}async function handleStreamMessage2(t,e){if(t.streamMessages.push(e),"system"===e.type){const n=e;return void(t.metadata={...t.metadata,...extractModelMetadata(n.model),...n.agent_id?{"cursor_sdk.agent_id":n.agent_id}:{},...n.run_id?{"cursor_sdk.run_id":n.run_id}:{},...n.tools?{"cursor_sdk.tools":n.tools}:{}})}if("assistant"===e.type){const n=e;for(const e of n.message?.content??[])"text"===e?.type&&"string"==typeof e.text?t.streamText.push(e.text):"tool_use"===e?.type&&e.id&&t.activeToolSpans.set(e.id,await startToolSpan(t,{args:e.input,callId:e.id,name:e.name,status:"running"}));return}"tool_call"!==e.type?"task"!==e.type||"string"!=typeof e.text?"status"===e.type&&e.status&&(t.metadata["cursor_sdk.status"]=e.status):t.taskText.push(e.text):await handleToolMessage(t,e)}async function handleToolMessage(t,e){const n=e.call_id;if(!n)return;if("running"===e.status)return void(t.activeToolSpans.has(n)||t.activeToolSpans.set(n,await startToolSpan(t,{args:e.args,callId:n,name:e.name,status:e.status,truncated:e.truncated})));finishToolSpan(t.activeToolSpans.get(n)??await startToolSpan(t,{args:e.args,callId:n,name:e.name,status:e.status,truncated:e.truncated}),{error:"error"===e.status?toLoggedError(e.result):void 0,metadata:{"cursor_sdk.tool.status":e.status},output:e.result}),t.activeToolSpans.delete(n)}async function handleConversation(t,e){t.conversationOutput=e;for(const n of e)if("agentConversationTurn"===n.type)for(const e of n.turn?.steps??[])await handleConversationStep(t,e);else if("shellConversationTurn"===n.type){const e=n.turn?.shellCommand?.command;if(e){const r=`shell:${t.activeToolSpans.size}:${e}`;finishToolSpan(await startToolSpan(t,{args:n.turn?.shellCommand,callId:r,name:"shell",status:"completed"}),{metadata:{"cursor_sdk.tool.status":"completed"},output:n.turn?.shellOutput})}}}async function handleConversationStep(t,e){if("assistantMessage"===e.type&&"string"==typeof e.message?.text)return void t.conversationText.push(e.message.text);if("toolCall"!==e.type)return;const n=e.message,r="string"==typeof n?.callId?n.callId:`conversation-tool:${t.activeToolSpans.size}`;finishToolSpan(await startToolSpan(t,{args:extractToolArgs(n),callId:r,name:extractToolName(n),status:n?.status,toolCall:n}),{error:"error"===n?.status?toLoggedError(n.result):void 0,metadata:{"cursor_sdk.tool.status":n?.status??"completed"},output:extractToolResult(n)})}function handleStepUpdate(t,e){if(t.metrics["cursor_sdk.steps"]=(t.metrics["cursor_sdk.steps"]??0)+1,e.type){const n=t.metadata["cursor_sdk.step_types"];Array.isArray(n)?n.includes(e.type)||n.push(e.type):t.metadata["cursor_sdk.step_types"]=[e.type]}"assistantMessage"===e.type&&"string"==typeof e.message?.text&&t.stepText.push(e.message.text)}async function startToolSpan(t,e){const n=e.name||"unknown",r={"cursor_sdk.tool.status":e.status,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":n};void 0!==e.truncated?.args&&(r["cursor_sdk.tool.args_truncated"]=e.truncated.args),void 0!==e.truncated?.result&&(r["cursor_sdk.tool.result_truncated"]=e.truncated.result);const o=startSpan({event:{input:e.args,metadata:r},name:`tool: ${n}`,parent:await t.span.export(),spanAttributes:{type:"tool"}});let a;return isSubAgentToolName(n)&&(a=startSpan({event:{input:e.args,metadata:{"cursor_sdk.subagent.tool_call_id":e.callId,"gen_ai.tool.name":n}},name:formatSubAgentSpanName2(e.toolCall,e.args),parent:await o.export(),spanAttributes:{type:"task"}})),{span:o,subAgentSpan:a}}function finishToolSpan(t,e){try{e.error?(safeLog2(t.span,{error:e.error,metadata:e.metadata,output:e.output}),t.subAgentSpan&&safeLog2(t.subAgentSpan,{error:e.error,metadata:e.metadata,output:e.output})):(safeLog2(t.span,{metadata:e.metadata,output:e.output}),t.subAgentSpan&&safeLog2(t.subAgentSpan,{metadata:e.metadata,output:e.output}))}finally{t.subAgentSpan?.end(),t.span.end()}}async function finalizeCursorRun(t,e={}){if(t.finalized)return;t.finalized=!0;const n=e.error,r=e.result??t.lastResult,o=e.output??r?.result??t.run?.result??(t.conversationText.length>0?t.conversationText.join("\n"):void 0)??t.conversationOutput??(t.streamText.length>0?t.streamText.join(""):void 0)??(t.deltaText.length>0?t.deltaText.join(""):void 0)??(t.stepText.length>0?t.stepText.join("\n"):void 0)??(t.taskText.length>0?t.taskText.join("\n"):void 0);try{const e={...t.metadata,...t.run?extractRunMetadata(t.run):{},...r?extractRunResultMetadata(r):{}};safeLog2(t.span,n?{error:toLoggedError(n),metadata:e,metrics:{...cleanMetrics2(t.metrics),...buildDurationMetrics2(t.startTime)},output:o}:{metadata:e,metrics:{...cleanMetrics2(t.metrics),...buildDurationMetrics2(t.startTime)},output:o})}finally{endOpenToolSpans(t),t.span.end()}}function endOpenToolSpans(t,e){for(const[,n]of t.activeToolSpans)finishToolSpan(n,{error:e});t.activeToolSpans.clear()}function sanitizeUserMessage(t){return"string"==typeof t||void 0===t?t:{...t,images:t.images?.map(t=>{const e=t;return{..."string"==typeof e.url?{url:e.url}:{},..."string"==typeof e.mimeType?{mimeType:e.mimeType}:{},...t.dimension?{dimension:t.dimension}:{},hasData:"string"==typeof e.data}})}}function extractAgentOptionsMetadata(t){return t?{...extractModelMetadata(t.model),...t.agentId?{"cursor_sdk.agent_id":t.agentId}:{},...t.name?{"cursor_sdk.agent_name":t.name}:{},...t.local?{"cursor_sdk.runtime":"local","cursor_sdk.local.cwd":Array.isArray(t.local.cwd)?t.local.cwd.join(","):t.local.cwd}:{},...t.cloud?{"cursor_sdk.runtime":"cloud","cursor_sdk.cloud.auto_create_pr":t.cloud.autoCreatePR,"cursor_sdk.cloud.env_type":t.cloud.env?.type,"cursor_sdk.cloud.env_name":t.cloud.env?.name,"cursor_sdk.cloud.repos":t.cloud.repos?.map(t=>t.url).filter(t=>"string"==typeof t)}:{}}:{}}function extractSendMetadata(t){return t?{...extractModelMetadata(t.model),...void 0!==t.local?.force?{"cursor_sdk.local.force":t.local.force}:{}}:{}}function extractAgentMetadata(t){return{...t.agentId?{"cursor_sdk.agent_id":t.agentId}:{},...extractModelMetadata(t.model)}}function extractRunMetadata(t){return t?{...t.id?{"cursor_sdk.run_id":t.id}:{},...t.agentId?{"cursor_sdk.agent_id":t.agentId}:{},...t.status?{"cursor_sdk.status":t.status}:{},...void 0!==t.durationMs?{"cursor_sdk.duration_ms":t.durationMs}:{},...extractModelMetadata(t.model),...extractGitMetadata(t.git)}:{}}function extractRunResultMetadata(t){return t?{...t.id?{"cursor_sdk.run_id":t.id}:{},...t.status?{"cursor_sdk.status":t.status}:{},...void 0!==t.durationMs?{"cursor_sdk.duration_ms":t.durationMs}:{},...extractModelMetadata(t.model),...extractGitMetadata(t.git)}:{}}function extractGitMetadata(t){const e=t?.branches;return e&&0!==e.length?{"cursor_sdk.git.branches":e.map(t=>({branch:t.branch,prUrl:t.prUrl,repoUrl:t.repoUrl}))}:{}}function extractModelMetadata(t){return t?.id?{model:t.id,"cursor_sdk.model":t.id,...t.params?{"cursor_sdk.model.params":t.params}:{}}:{}}function addUsageMetrics(t,e){e&&(void 0!==e.inputTokens&&(t.prompt_tokens=(t.prompt_tokens??0)+e.inputTokens),void 0!==e.outputTokens&&(t.completion_tokens=(t.completion_tokens??0)+e.outputTokens),void 0!==e.cacheReadTokens&&(t.prompt_cached_tokens=(t.prompt_cached_tokens??0)+e.cacheReadTokens),void 0!==e.cacheWriteTokens&&(t.prompt_cache_creation_tokens=(t.prompt_cache_creation_tokens??0)+e.cacheWriteTokens),t.tokens=(t.prompt_tokens??0)+(t.completion_tokens??0)+(t.prompt_cached_tokens??0)+(t.prompt_cache_creation_tokens??0))}function buildDurationMetrics2(t){const e=getCurrentUnixTimestamp();return{duration:e-t,end:e,start:t}}function extractToolName(t){return t?"string"==typeof t.name?t.name:"string"==typeof t.type?t.type:"unknown":"unknown"}function extractToolArgs(t){return t&&"args"in t?t.args:void 0}function extractToolResult(t){return t&&"result"in t?t.result:void 0}function isSubAgentToolName(t){return"Agent"===t||"Task"===t||"task"===t}function formatSubAgentSpanName2(t,e){const n=t??e,r=getString(n,"description")??getString(n,"subagent_type")??getString(n,"type")??getString(n,"name");return r?`Agent: ${r}`:"Agent: sub-agent"}function getString(t,e){const n=t?.[e];return"string"==typeof n?n:void 0}function safeLog2(t,e){try{t.log(e)}catch(t){logInstrumentationError2("Cursor SDK span log",t)}}function logInstrumentationError2(t,e){debugLogger.error(`Error processing ${t}:`,e)}function cleanMetrics2(t){const e={};for(const[n,r]of Object.entries(t))void 0!==r&&Number.isFinite(r)&&(e[n]=r);return e}var openAIAgentsCoreChannels=defineChannels("@openai/agents-core",{onTraceStart:channel({channelName:"tracing.processor.onTraceStart",kind:"async"}),onTraceEnd:channel({channelName:"tracing.processor.onTraceEnd",kind:"async"}),onSpanStart:channel({channelName:"tracing.processor.onSpanStart",kind:"async"}),onSpanEnd:channel({channelName:"tracing.processor.onSpanEnd",kind:"async"})});function isSpanData(t,e){return t.type===e}function spanTypeFromAgents(t){const e=t.spanData.type;return"function"===e||"guardrail"===e||"mcp_tools"===e?"tool":"generation"===e||"response"===e||"transcription"===e||"speech"===e?"llm":"task"}function spanNameFromAgents(t){const e=t.spanData;if("name"in e&&e.name)return e.name;switch(e.type){case"generation":return"Generation";case"response":return"Response";case"handoff":return"Handoff";case"mcp_tools":return isSpanData(e,"mcp_tools")&&e.server?`List Tools (${e.server})`:"MCP List Tools";case"transcription":return"Transcription";case"speech":return"Speech";case"speech_group":return"Speech Group";default:return"Unknown"}}function getTimeElapsed(t,e){if(!e||!t)return;const n=new Date(e).getTime(),r=new Date(t).getTime();return Number.isNaN(n)||Number.isNaN(r)?void 0:(r-n)/1e3}function getNumberProperty2(t,e){if(!isObject(t)||!(e in t))return;const n=t[e];return"number"==typeof n?n:void 0}function parseUsageMetrics(t){const e={};if(!isObject(t))return e;const n=getNumberProperty2(t,"prompt_tokens")??getNumberProperty2(t,"input_tokens")??getNumberProperty2(t,"promptTokens")??getNumberProperty2(t,"inputTokens"),r=getNumberProperty2(t,"completion_tokens")??getNumberProperty2(t,"output_tokens")??getNumberProperty2(t,"completionTokens")??getNumberProperty2(t,"outputTokens"),o=getNumberProperty2(t,"total_tokens")??getNumberProperty2(t,"totalTokens");void 0!==n&&(e.prompt_tokens=n),void 0!==r&&(e.completion_tokens=r),void 0!==o?e.tokens=o:void 0!==n&&void 0!==r&&(e.tokens=n+r);const a=t.input_tokens_details,i=getNumberProperty2(a,"cached_tokens"),s=getNumberProperty2(a,"cache_write_tokens");return void 0!==i&&(e.prompt_cached_tokens=i),void 0!==s&&(e.prompt_cache_creation_tokens=s),e}var OpenAIAgentsTraceProcessor=class t{static DEFAULT_MAX_TRACES=1e4;logger;maxTraces;traceSpans=new Map;traceOrder=[];_traceSpans=this.traceSpans;constructor(e={}){this.logger=e.logger,this.maxTraces=e.maxTraces??t.DEFAULT_MAX_TRACES}evictOldestTrace(){const t=this.traceOrder.shift();t&&this.traceSpans.delete(t)}onTraceStart(t){if(!t?.traceId)return Promise.resolve();this.traceOrder.length>=this.maxTraces&&this.evictOldestTrace();const e=currentSpan(),n=e&&e!==NOOP_SPAN?e.startSpan({name:t.name,type:"task"}):this.logger?this.logger.startSpan({name:t.name,type:"task"}):startSpan({name:t.name,type:"task"});return n.log({input:"Agent workflow started",metadata:{group_id:t.groupId,...t.metadata||{}}}),this.traceSpans.set(t.traceId,{rootSpan:n,childSpans:new Map,metadata:{firstInput:null,lastOutput:null}}),this.traceOrder.push(t.traceId),Promise.resolve()}async onTraceEnd(t){const e=this.traceSpans.get(t?.traceId);if(e)try{e.rootSpan.log({input:e.metadata.firstInput,output:e.metadata.lastOutput}),e.rootSpan.end(),await e.rootSpan.flush()}finally{this.traceSpans.delete(t.traceId);const e=this.traceOrder.indexOf(t.traceId);e>-1&&this.traceOrder.splice(e,1)}}onSpanStart(t){if(!t?.spanId||!t.traceId)return Promise.resolve();const e=this.traceSpans.get(t.traceId);if(!e)return Promise.resolve();const n=t.parentId?e.childSpans.get(t.parentId):e.rootSpan;if(!n)return Promise.resolve();const r=n.startSpan({name:spanNameFromAgents(t),type:spanTypeFromAgents(t)});return e.childSpans.set(t.spanId,r),Promise.resolve()}onSpanEnd(t){if(!t?.spanId||!t.traceId)return Promise.resolve();const e=this.traceSpans.get(t.traceId);if(!e)return Promise.resolve();const n=e.childSpans.get(t.spanId);if(!n)return Promise.resolve();const r=this.extractLogData(t);n.log({error:t.error,...r}),n.end(),e.childSpans.delete(t.spanId);const o=r.input,a=r.output;return null===e.metadata.firstInput&&null!=o&&(e.metadata.firstInput=o),null!=a&&(e.metadata.lastOutput=a),Promise.resolve()}async shutdown(){this.logger&&"function"==typeof this.logger.flush&&await this.logger.flush()}async forceFlush(){this.logger&&"function"==typeof this.logger.flush&&await this.logger.flush()}extractLogData(t){const e=t.spanData;switch(e.type){case"agent":return this.extractAgentLogData(e);case"response":return this.extractResponseLogData(e,t);case"function":return this.extractFunctionLogData(e);case"handoff":return this.extractHandoffLogData(e);case"guardrail":return this.extractGuardrailLogData(e);case"generation":return this.extractGenerationLogData(e,t);case"custom":return this.extractCustomLogData(e);case"mcp_tools":return this.extractMCPListToolsLogData(e);case"transcription":return this.extractTranscriptionLogData(e);case"speech":return this.extractSpeechLogData(e);case"speech_group":return this.extractSpeechGroupLogData(e);default:return{}}}extractAgentLogData(t){return{metadata:{tools:t.tools,handoffs:t.handoffs,output_type:t.output_type}}}extractResponseLogData(t,e){const n=t._response,r=isObject(n)?n.output:void 0,o=isObject(n)?n.usage:void 0,a={...this.extractTimingMetrics(e),...parseUsageMetrics(o)};return{input:t._input,output:r,metadata:isObject(n)?this.omitKeys(n,["output","usage"]):{},metrics:a}}extractFunctionLogData(t){return{input:t.input,output:t.output}}extractHandoffLogData(t){return{metadata:{from_agent:t.from_agent,to_agent:t.to_agent}}}extractGuardrailLogData(t){return{metadata:{triggered:t.triggered}}}extractGenerationLogData(t,e){return{input:t.input,output:t.output,metadata:{model:t.model,model_config:t.model_config},metrics:{...this.extractTimingMetrics(e),...parseUsageMetrics(t.usage)}}}extractCustomLogData(t){return t.data||{}}extractMCPListToolsLogData(t){return{output:t.result,metadata:{server:t.server}}}extractTranscriptionLogData(t){return{input:t.input,output:t.output,metadata:{model:t.model,model_config:t.model_config}}}extractSpeechLogData(t){return{input:t.input,output:t.output,metadata:{model:t.model,model_config:t.model_config}}}extractSpeechGroupLogData(t){return{input:t.input}}extractTimingMetrics(t){const e=getTimeElapsed(t.endedAt??void 0,t.startedAt??void 0);return void 0===e?{}:{time_to_first_token:e}}omitKeys(t,e){const n={};for(const[r,o]of Object.entries(t))e.includes(r)||(n[r]=o);return n}};function firstArgument(t){return Array.isArray(t)?t[0]:isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0?Array.from(t)[0]:void 0}function isOpenAIAgentsTrace(t){return isObject(t)&&"trace"===t.type&&"string"==typeof t.traceId}function isOpenAIAgentsSpan(t){return isObject(t)&&"trace.span"===t.type&&"string"==typeof t.traceId&&"string"==typeof t.spanId}var OpenAIAgentsPlugin=class extends BasePlugin{processor=new OpenAIAgentsTraceProcessor;onEnable(){this.subscribeToTraceLifecycle()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers),this.processor.shutdown()}subscribeToTraceLifecycle(){const t=openAIAgentsCoreChannels.onTraceStart.tracingChannel(),e={start:t=>{const e=firstArgument(t.arguments);isOpenAIAgentsTrace(e)&&this.processor.onTraceStart(e)}};t.subscribe(e),this.unsubscribers.push(()=>t.unsubscribe(e));const n=openAIAgentsCoreChannels.onTraceEnd.tracingChannel(),r={start:t=>{const e=firstArgument(t.arguments);isOpenAIAgentsTrace(e)&&this.processor.onTraceEnd(e)}};n.subscribe(r),this.unsubscribers.push(()=>n.unsubscribe(r));const o=openAIAgentsCoreChannels.onSpanStart.tracingChannel(),a={start:t=>{const e=firstArgument(t.arguments);isOpenAIAgentsSpan(e)&&this.processor.onSpanStart(e)}};o.subscribe(a),this.unsubscribers.push(()=>o.unsubscribe(a));const i=openAIAgentsCoreChannels.onSpanEnd.tracingChannel(),s={start:t=>{const e=firstArgument(t.arguments);isOpenAIAgentsSpan(e)&&this.processor.onSpanEnd(e)}};i.subscribe(s),this.unsubscribers.push(()=>i.unsubscribe(s))}},googleGenAIChannels=defineChannels("@google/genai",{generateContent:channel({channelName:"models.generateContent",kind:"async"}),generateContentStream:channel({channelName:"models.generateContentStream",kind:"async"}),embedContent:channel({channelName:"models.embedContent",kind:"async"}),interactionsCreate:channel({channelName:"interactions.create",kind:"async"})}),GOOGLE_GENAI_INTERNAL_CONTEXT={caller_filename:"<node-internal>",caller_functionname:"<node-internal>",caller_lineno:0};function createWrapperParityEvent(t){return{context:GOOGLE_GENAI_INTERNAL_CONTEXT,input:t.input,metadata:t.metadata}}var GoogleGenAIPlugin=class extends BasePlugin{onEnable(){this.subscribeToGoogleGenAIChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToGoogleGenAIChannels(){this.subscribeToGenerateContentChannel(),this.subscribeToGenerateContentStreamChannel(),this.subscribeToEmbedContentChannel(),this.subscribeToInteractionsCreateChannel()}subscribeToGenerateContentChannel(){const t=googleGenAIChannels.generateContent.tracingChannel(),e=new WeakMap,n=bindCurrentSpanStoreToStart2(t,e,t=>{const e=t.arguments[0];return{span:startSpan({name:"generate_content",spanAttributes:{type:"llm"},event:createWrapperParityEvent({input:serializeGenerateContentInput(e),metadata:extractGenerateContentMetadata(e)})}),startTime:getCurrentUnixTimestamp()}}),r={start:t=>{ensureSpanState(e,t,()=>{const e=t.arguments[0];return{span:startSpan({name:"generate_content",spanAttributes:{type:"llm"},event:createWrapperParityEvent({input:serializeGenerateContentInput(e),metadata:extractGenerateContentMetadata(e)})}),startTime:getCurrentUnixTimestamp()}})},asyncEnd:t=>{const n=e.get(t);if(n)try{const e=extractResponseMetadata(t.result);n.span.log({...e?{metadata:e}:{},metrics:cleanMetrics3(extractGenerateContentMetrics(t.result,n.startTime)),output:t.result})}finally{n.span.end(),e.delete(t)}},error:t=>{logErrorAndEndSpan(e,t)}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}subscribeToGenerateContentStreamChannel(){const t=googleGenAIChannels.generateContentStream.tracingChannel(),e={start:t=>{const e=t,n=t.arguments[0];e.googleGenAIInput=serializeGenerateContentInput(n),e.googleGenAIMetadata=extractGenerateContentMetadata(n),e.googleGenAIStartTime=getCurrentUnixTimestamp()},asyncEnd:t=>{const e=t;patchGoogleGenAIStreamingResult({input:e.googleGenAIInput,metadata:e.googleGenAIMetadata,startTime:e.googleGenAIStartTime,result:e.result})},error:()=>{}};t.subscribe(e),this.unsubscribers.push(()=>{t.unsubscribe(e)})}subscribeToEmbedContentChannel(){const t=googleGenAIChannels.embedContent.tracingChannel(),e=new WeakMap,n=bindCurrentSpanStoreToStart2(t,e,t=>{const e=t.arguments[0];return{span:startSpan({name:"embed_content",spanAttributes:{type:"llm"},event:createWrapperParityEvent({input:serializeEmbedContentInput(e),metadata:extractEmbedContentMetadata(e)})}),startTime:getCurrentUnixTimestamp()}}),r={start:t=>{ensureSpanState(e,t,()=>{const e=t.arguments[0];return{span:startSpan({name:"embed_content",spanAttributes:{type:"llm"},event:createWrapperParityEvent({input:serializeEmbedContentInput(e),metadata:extractEmbedContentMetadata(e)})}),startTime:getCurrentUnixTimestamp()}})},asyncEnd:t=>{const n=e.get(t);if(n)try{const e=summarizeEmbedContentOutput(t.result);n.span.log({...e?{output:e}:{},metrics:cleanMetrics3(extractEmbedContentMetrics(t.result,n.startTime))})}finally{n.span.end(),e.delete(t)}},error:t=>{logErrorAndEndSpan(e,t)}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}subscribeToInteractionsCreateChannel(){this.unsubscribers.push(traceStreamingChannel(googleGenAIChannels.interactionsCreate,{name:"create_interaction",shouldTrace:([t])=>!isBackgroundInteractionCreate(t),type:"llm",extractInput:([t])=>({input:serializeInteractionInput(t),metadata:extractInteractionMetadata(t)}),extractOutput:t=>serializeInteractionValue(t),extractMetadata:t=>extractInteractionResponseMetadata(t),extractMetrics:(t,e)=>cleanMetrics3(extractInteractionMetrics(t,e)),aggregateChunks:(t,e,n,r)=>aggregateInteractionEvents(t,r)}))}};function isBackgroundInteractionCreate(t){return!0===tryToDict(t)?.background}function ensureSpanState(t,e,n){const r=t.get(e);if(r)return r;const o=n();return t.set(e,o),o}function bindCurrentSpanStoreToStart2(t,e,n){const r=_internalGetGlobalState(),o=r?.contextManager,a=t.start,i=o?o[BRAINTRUST_CURRENT_SPAN_STORE]:void 0;if(a?.bindStore&&i)return a.bindStore(i,t=>{const r=ensureSpanState(e,t,()=>n(t)).span;return o.wrapSpanForStore(r)}),()=>{a.unbindStore?.(i)}}function logErrorAndEndSpan(t,e){const n=t.get(e);n&&(n.span.log({error:e.error.message}),n.span.end(),t.delete(e))}function patchGoogleGenAIStreamingResult(t){const{input:e,metadata:n,result:r,startTime:o}=t;if(!e||!n||!r||"object"!=typeof r||"function"!=typeof r.next)return!1;const a=[];let i=null,s=!1,c=null;const u=o??getCurrentUnixTimestamp(),p=()=>(c||(c=startSpan({name:"generate_content_stream",spanAttributes:{type:"llm"},event:{input:e,metadata:n}})),c),l=t=>{if(!s&&c){if(s=!0,t.result){const{end:e,...n}=t.result.metrics,r=extractResponseMetadata(t.result.aggregated);return c.log({...r?{metadata:r}:{},metrics:cleanMetrics3(n),output:t.result.aggregated}),void c.end("number"==typeof e?{endTime:e}:void 0)}void 0!==t.error&&c.log({error:t.error instanceof Error?t.error.message:String(t.error)}),c.end()}},d=t=>{if("object"!=typeof t||null===t||"__braintrustGoogleGenAIPatched"in t)return t;const e=t,n="function"==typeof e.next?e.next.bind(t):void 0,r="function"==typeof e.return?e.return.bind(t):void 0,o="function"==typeof e.throw?e.throw.bind(t):void 0,s=e[Symbol.asyncIterator],c="function"==typeof s?s.bind(t):void 0;return Object.defineProperty(e,"__braintrustGoogleGenAIPatched",{configurable:!0,enumerable:!1,value:!0,writable:!1}),n&&(e.next=async(...t)=>{p();try{const e=await n(...t);return!e.done&&e.value&&(null===i&&(i=getCurrentUnixTimestamp()),a.push(e.value)),e.done&&l({result:aggregateGenerateContentChunks(a,u,i)}),e}catch(t){throw l({error:t}),t}}),r&&(e.return=async(...t)=>{p();try{return await r(...t)}finally{a.length>0?l({result:aggregateGenerateContentChunks(a,u,i)}):l({})}}),o&&(e.throw=async(...t)=>{p();try{return await o(...t)}catch(t){throw l({error:t}),t}}),e[Symbol.asyncIterator]=()=>{const e=c?c():t;return d(e)},t};return d(r),!0}function serializeGenerateContentInput(t){const e={model:t.model,contents:serializeContentCollection(t.contents)},n=t.config?tryToDict(t.config):null;if(n){const t={};Object.keys(n).forEach(e=>{"tools"!==e&&(t[e]=n[e])}),e.config=t}return e}function serializeEmbedContentInput(t){const e={model:t.model,contents:serializeContentCollection(t.contents)},n=t.config?tryToDict(t.config):null;return n&&(e.config=n),e}function serializeInteractionInput(t){const e={input:serializeInteractionValue(t.input)};for(const n of["model","agent","agent_config","api_version","background","environment","generation_config","previous_interaction_id","response_format","response_mime_type","response_modalities","service_tier","store","stream","system_instruction","webhook_config"]){const r=t[n];void 0!==r&&(e[n]=serializeInteractionValue(r))}return e}function extractInteractionMetadata(t){const e={};for(const n of["model","agent","agent_config","generation_config","system_instruction","response_format","response_mime_type","response_modalities","service_tier"]){const r=t[n];void 0!==r&&(e[n]=serializeInteractionValue(r))}return Array.isArray(t.tools)&&(e.tools=t.tools.map(t=>serializeInteractionValue(t))),e}function serializeContentCollection(t){return null==t?null:Array.isArray(t)?t.map(t=>serializeContentItem(t)):serializeContentItem(t)}function serializeContentItem(t){return"object"==typeof t&&null!==t?t.parts&&Array.isArray(t.parts)?{...t,parts:t.parts.map(t=>serializePart(t))}:t:"string"==typeof t?{text:t}:t}function serializePart(t){if(!t||"object"!=typeof t)return t;if(t.inlineData&&t.inlineData.data){const{data:e,mimeType:n}=t.inlineData,r=createAttachmentFromInlineData(e,n);if(r)return{image_url:{url:r}}}return t}function serializeInteractionValue(t,e=new WeakSet){if(null==t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>serializeInteractionValue(t,e));const n=tryToDict(t);if(null==n||"object"!=typeof n)return n;if(Array.isArray(n))return n.map(t=>serializeInteractionValue(t,e));if(e.has(n))return"[Circular]";e.add(n);try{const t={},r="mime_type"in n&&"string"==typeof n.mime_type?n.mime_type:"mimeType"in n&&"string"==typeof n.mimeType?n.mimeType:void 0,o=r&&"data"in n&&void 0!==n.data?createAttachmentFromInlineData(n.data,r):null;for(const[r,a]of Object.entries(n))t[r]="data"===r&&o?o:serializeInteractionValue(a,e);return t}finally{e.delete(n)}}function createAttachmentFromInlineData(t,e){if(!(t instanceof Uint8Array||"undefined"!=typeof Buffer&&Buffer.isBuffer(t)||"string"==typeof t))return null;const n=`file.${e?e.split("/")[1]:"bin"}`,r="string"==typeof t?"undefined"!=typeof Buffer?Buffer.from(t,"base64"):new Uint8Array(atob(t).split("").map(t=>t.charCodeAt(0))):"undefined"!=typeof Buffer?Buffer.from(t):new Uint8Array(t),o=r instanceof Uint8Array?r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength):r;return new Attachment({data:o,filename:n,contentType:e||"application/octet-stream"})}function serializeGenerateContentTools(t){const e=t.config?tryToDict(t.config):null,n=e?.tools;if(!Array.isArray(n))return null;try{const t=[];for(const e of n){const n=tryToDict(e);n&&t.push(n)}return t.length>0?t:null}catch{return null}}function extractGenerateContentMetadata(t){const e={};if(t.model&&(e.model=t.model),t.config){const n=tryToDict(t.config);n&&Object.keys(n).forEach(t=>{"tools"!==t&&(e[t]=n[t])})}const n=serializeGenerateContentTools(t);return n&&(e.tools=n),e}function extractEmbedContentMetadata(t){const e={};t.model&&(e.model=t.model);const n=t.config?tryToDict(t.config):null;return n&&Object.keys(n).forEach(t=>{e[t]=n[t]}),e}function extractGenerateContentMetrics(t,e){const n={};if(void 0!==e){const t=getCurrentUnixTimestamp();n.start=e,n.end=t,n.duration=t-e}return t?.usageMetadata&&populateUsageMetrics(n,t.usageMetadata),n}function extractEmbedContentMetrics(t,e){const n={};if(void 0!==e){const t=getCurrentUnixTimestamp();n.start=e,n.end=t,n.duration=t-e}t?.usageMetadata&&populateUsageMetrics(n,t.usageMetadata);const r=extractEmbedPromptTokenCount(t);return void 0!==r&&(n.prompt_tokens=r,n.tokens=r),n}function extractInteractionMetrics(t,e){const n={};if(void 0!==e){const t=getCurrentUnixTimestamp();n.start=e,n.end=t,n.duration=t-e}return t?.usage&&populateInteractionUsageMetrics(n,t.usage),n}function extractInteractionResponseMetadata(t){const e=tryToDict(t);if(!e)return;const n={};return"string"==typeof e.id&&(n.interaction_id=e.id),"string"==typeof e.status&&(n.status=e.status),Object.keys(n).length>0?n:void 0}function extractEmbedPromptTokenCount(t){if(!t)return;const e=t.usageMetadata?.promptTokenCount;if("number"==typeof e&&Number.isFinite(e))return e;const n=t.usageMetadata?.totalTokenCount;if("number"==typeof n&&Number.isFinite(n))return n;const r=Array.isArray(t.embeddings)?t.embeddings:t.embedding?[t.embedding]:[];if(0===r.length)return;let o=0,a=!1;for(const t of r){const e=tryToDict(tryToDict(t)?.statistics),n=e?.tokenCount;"number"==typeof n&&Number.isFinite(n)&&(o+=n,a=!0)}return a?o:void 0}function summarizeEmbedContentOutput(t){if(!t)return;const e=Array.isArray(t.embeddings)?t.embeddings:t.embedding?[t.embedding]:[];if(0===e.length)return;const n=e[0]?.values;return Array.isArray(n)?{embedding_count:e.length,embedding_length:n.length}:void 0}function populateUsageMetrics(t,e){void 0!==e.promptTokenCount&&(t.prompt_tokens=e.promptTokenCount),void 0!==e.candidatesTokenCount&&(t.completion_tokens=e.candidatesTokenCount),void 0!==e.totalTokenCount&&(t.tokens=e.totalTokenCount),void 0!==e.cachedContentTokenCount&&(t.prompt_cached_tokens=e.cachedContentTokenCount),void 0!==e.thoughtsTokenCount&&(t.completion_reasoning_tokens=e.thoughtsTokenCount)}function populateInteractionUsageMetrics(t,e){"number"==typeof e.total_input_tokens&&(t.prompt_tokens=e.total_input_tokens),"number"==typeof e.total_output_tokens&&(t.completion_tokens=e.total_output_tokens),"number"==typeof e.total_tokens&&(t.tokens=e.total_tokens),"number"==typeof e.total_cached_tokens&&(t.prompt_cached_tokens=e.total_cached_tokens),"number"==typeof e.total_thought_tokens&&(t.completion_reasoning_tokens=e.total_thought_tokens)}function aggregateGenerateContentChunks(t,e,n){const r=getCurrentUnixTimestamp(),o={start:e,end:r,duration:r-e};if(null!==n&&(o.time_to_first_token=n-e),0===t.length)return{aggregated:{},metrics:o};let a="",i="";const s=[];let c,u=null,p=null;for(const e of t)if(p=e,e.usageMetadata&&(u=e.usageMetadata),void 0!==e.groundingMetadata&&(c=e.groundingMetadata),e.candidates&&Array.isArray(e.candidates))for(const t of e.candidates)if(t.content?.parts)for(const e of t.content.parts)void 0!==e.text?e.thought?i+=e.text:a+=e.text:e.functionCall?s.push({functionCall:e.functionCall}):e.codeExecutionResult?s.push({codeExecutionResult:e.codeExecutionResult}):e.executableCode&&s.push({executableCode:e.executableCode});const l={},d=[];if(i&&d.push({text:i,thought:!0}),a&&d.push({text:a}),d.push(...s),d.length>0&&p?.candidates){const t=[];for(const e of p.candidates){const n={content:{parts:d,role:"model"}};void 0!==e.finishReason&&(n.finishReason=e.finishReason),void 0!==e.groundingMetadata&&(n.groundingMetadata=e.groundingMetadata,void 0===c&&(c=e.groundingMetadata)),e.safetyRatings&&(n.safetyRatings=e.safetyRatings),t.push(n)}l.candidates=t}return u&&(l.usageMetadata=u,populateUsageMetrics(o,u)),void 0!==c&&(l.groundingMetadata=c),a&&(l.text=a),{aggregated:l,metrics:o}}function aggregateInteractionEvents(t,e){const n=getCurrentUnixTimestamp(),r={};let o,a,i;void 0!==e&&(r.start=e,r.end=n,r.duration=n-e);let s="";const c=new Map;for(const e of t){const t=tryToDict(e);if(!t)continue;const n=extractInteractionUsageFromEvent(t);n&&(a=n);const r=tryToDict(t.interaction);r&&(o=serializeInteractionValue(r),"string"==typeof r.status&&(i=r.status)),"string"==typeof t.status&&(i=t.status);const u="number"==typeof t.index?t.index:void 0;if(void 0!==u){if("step.start"===t.event_type){const e=compactInteractionStep(t.step);e.index=u,c.set(u,e);continue}if("step.delta"===t.event_type){const e=c.get(u)??{index:u},n=applyInteractionDelta(e,t.delta);n&&(s+=n),c.set(u,e)}}}a&&populateInteractionUsageMetrics(r,a);const u=o?{...o}:{};i&&(u.status=i),s&&(u.output_text=s),a&&(u.usage=serializeInteractionValue(a));const p=Array.from(c.values()).sort((t,e)=>Number(t.index??0)-Number(e.index??0));p.length>0&&(u.steps=p);const l={};return"string"==typeof u.id&&(l.interaction_id=u.id),"string"==typeof u.status&&(l.status=u.status),{output:u,metrics:cleanMetrics3(r),...Object.keys(l).length>0?{metadata:l}:{}}}function extractInteractionUsageFromEvent(t){const e=tryToDict(t.metadata),n=tryToDict(e?.usage);if(n)return n;const r=tryToDict(e?.total_usage);if(r)return r;const o=tryToDict(t.interaction),a=tryToDict(o?.usage);return a||void 0}function compactInteractionStep(t){const e=tryToDict(t);if(!e)return{};const n={};for(const t of["type","content","name","server_name","arguments","result","is_error"])void 0!==e[t]&&(n[t]=serializeInteractionValue(e[t]));return Object.keys(n).length>0?n:serializeInteractionValue(e)}function applyInteractionDelta(t,e){const n=tryToDict(e);if(!n)return;const r=n.type;if("string"==typeof r&&"string"!=typeof t.type&&(t.type="text"===r?"model_output":r),"text"===r&&"string"==typeof n.text)return t.text=`${"string"==typeof t.text?t.text:""}${n.text}`,n.text;if("arguments_delta"===r&&"string"==typeof n.arguments)return void(t.arguments=`${"string"==typeof t.arguments?t.arguments:""}${n.arguments}`);const o=Array.isArray(t.deltas)?t.deltas:[];o.push(serializeInteractionValue(n)),t.deltas=o}function cleanMetrics3(t){const e={};for(const[n,r]of Object.entries(t))null!=r&&(e[n]=r);return e}function extractResponseMetadata(t){const e=tryToDict(t);if(!e)return;const n={},r=e.groundingMetadata,o=[];if(Array.isArray(e.candidates))for(const t of e.candidates){const e=tryToDict(t);void 0!==e?.groundingMetadata&&o.push(e.groundingMetadata)}return void 0!==r?n.groundingMetadata=r:1===o.length?[n.groundingMetadata]=o:o.length>1&&(n.groundingMetadata=o),Object.keys(n).length>0?n:void 0}function tryToDict(t){return null==t?null:"object"==typeof t?"toJSON"in t&&"function"==typeof t.toJSON?t.toJSON():t:null}var huggingFaceChannels=defineChannels("@huggingface/inference",{chatCompletion:channel({channelName:"chatCompletion",kind:"async"}),chatCompletionStream:channel({channelName:"chatCompletionStream",kind:"sync-stream"}),textGeneration:channel({channelName:"textGeneration",kind:"async"}),textGenerationStream:channel({channelName:"textGenerationStream",kind:"sync-stream"}),featureExtraction:channel({channelName:"featureExtraction",kind:"async"})}),REQUEST_METADATA_ALLOWLIST=new Set(["dimensions","encoding_format","endpointUrl","max_tokens","model","provider","seed","stop","stream","temperature","tool_choice","tools","top_p"]),RESPONSE_METADATA_ALLOWLIST=new Set(["created","id","model","object"]),HuggingFacePlugin=class extends BasePlugin{onEnable(){this.unsubscribers.push(traceAsyncChannel(huggingFaceChannels.chatCompletion,{name:"huggingface.chat_completion",type:"llm",extractInput:extractChatInputWithMetadata,extractOutput:t=>t?.choices,extractMetadata:t=>extractResponseMetadata2(t),extractMetrics:t=>parseMetricsFromUsage(t?.usage)}),traceSyncStreamChannel(huggingFaceChannels.chatCompletionStream,{name:"huggingface.chat_completion_stream",type:"llm",extractInput:extractChatInputWithMetadata,patchResult:({result:t,span:e,startTime:n})=>patchChatCompletionStream({result:t,span:e,startTime:n})}),traceAsyncChannel(huggingFaceChannels.textGeneration,{name:"huggingface.text_generation",type:"llm",extractInput:extractTextGenerationInputWithMetadata,extractOutput:t=>isObject(t)?{generated_text:t.generated_text}:t,extractMetadata:extractTextGenerationMetadata,extractMetrics:t=>extractTextGenerationMetrics(t?.details??null)}),traceSyncStreamChannel(huggingFaceChannels.textGenerationStream,{name:"huggingface.text_generation_stream",type:"llm",extractInput:extractTextGenerationInputWithMetadata,patchResult:({result:t,span:e,startTime:n})=>patchTextGenerationStream({result:t,span:e,startTime:n})}),traceAsyncChannel(huggingFaceChannels.featureExtraction,{name:"huggingface.feature_extraction",type:"llm",extractInput:extractFeatureExtractionInputWithMetadata,extractOutput:summarizeFeatureExtractionOutput,extractMetrics:()=>({})}))}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}};function addProviderMetadata(t){return{...t,provider:t.provider??"huggingface"}}function normalizeArgs(t){return Array.isArray(t)?t:isArrayLike(t)?Array.from(t):[t]}function isArrayLike(t){return isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0}function getFirstObjectArg(t){const e=normalizeArgs(t).find(t=>isObject(t));return isObject(e)?e:void 0}function pickRequestMetadata(t){if(!t)return addProviderMetadata({});const e={};for(const n of REQUEST_METADATA_ALLOWLIST){const r=t[n];void 0!==r&&(e[n]=r)}return isObject(t.parameters)&&(e.parameters=t.parameters),addProviderMetadata(e)}function extractChatInputWithMetadata(t){const e=getFirstObjectArg(t),{messages:n,...r}=e??{};return{input:n,metadata:pickRequestMetadata(r)}}function extractTextGenerationInputWithMetadata(t){const e=getFirstObjectArg(t),{inputs:n,...r}=e??{};return{input:n,metadata:pickRequestMetadata(r)}}function extractFeatureExtractionInputWithMetadata(t){const e=getFirstObjectArg(t),{inputs:n,...r}=e??{};return{input:n,metadata:pickRequestMetadata(r)}}function extractResponseMetadata2(t){if(!isObject(t))return;const e={};for(const n of RESPONSE_METADATA_ALLOWLIST){const r=t[n];void 0!==r&&(e[n]=r)}return Object.keys(e).length>0?e:void 0}function extractTextGenerationMetrics(t){if(!isObject(t))return{};const e=Array.isArray(t.prefill)?t.prefill.length:void 0,n="number"==typeof t.generated_tokens?t.generated_tokens:Array.isArray(t.tokens)?t.tokens.length:void 0,r={};return void 0!==e&&(r.prompt_tokens=e),void 0!==n&&(r.completion_tokens=n),void 0===e&&void 0===n||(r.tokens=(e??0)+(n??0)),r}function extractTextGenerationMetadata(t){if(isObject(t?.details))return"string"==typeof t.details.finish_reason?{finish_reason:t.details.finish_reason}:void 0}function summarizeFeatureExtractionOutput(t){if(!Array.isArray(t))return;const e=t[0];return"number"==typeof e?{embedding_length:t.length}:Array.isArray(e)&&e.every(t=>"number"==typeof t)?{embedding_count:t.length,embedding_length:e.length}:Array.isArray(e)&&e.length>0&&Array.isArray(e[0])&&e[0].every(t=>"number"==typeof t)?{embedding_batch_count:t.length,embedding_count:e.length,embedding_length:e[0].length}:void 0}function patchChatCompletionStream(t){const{result:e,span:n,startTime:r}=t;if(!e||!isAsyncIterable(e))return!1;let o;return patchStreamIfNeeded(e,{onChunk:()=>{void 0===o&&(o=getCurrentUnixTimestamp())},onComplete:t=>{const e=t.at(-1),a=extractResponseMetadata2(e),i={...parseMetricsFromUsage(e?.usage),...void 0!==o?{time_to_first_token:o-r}:{}};n.log({output:aggregateChatCompletionChunks2(t),...a?{metadata:a}:{},metrics:i}),n.end()},onError:t=>{n.log({error:t.message}),n.end()}}),!0}function patchTextGenerationStream(t){const{result:e,span:n,startTime:r}=t;if(!e||!isAsyncIterable(e))return!1;let o;return patchStreamIfNeeded(e,{onChunk:()=>{void 0===o&&(o=getCurrentUnixTimestamp())},onComplete:t=>{const e=t.at(-1),a=extractTextGenerationStreamMetadata(t);n.log({output:aggregateTextGenerationStreamChunks(t),...a?{metadata:a}:{},metrics:{...extractTextGenerationMetrics(e?.details??null),...parseMetricsFromUsage(e?.usage),...void 0!==o?{time_to_first_token:o-r}:{}}}),n.end()},onError:t=>{n.log({error:t.message}),n.end()}}),!0}function aggregateChatCompletionChunks2(t){if(0===t.length)return;const e=new Map;for(const n of t)for(const t of n.choices??[]){const n="number"==typeof t.index?t.index:0,r=e.get(n)??{content:"",toolCallsByIndex:new Map},o=isObject(t.delta)?t.delta:void 0,a=isObject(t.message)?t.message:void 0;"string"==typeof o?.content?r.content+=o.content:"string"==typeof a?.content&&(r.content=a.content),"string"==typeof o?.role?r.role=o.role:"string"==typeof a?.role&&(r.role=a.role),void 0!==t.finish_reason&&(r.finish_reason=t.finish_reason);const i=getChatToolCallDeltas(o)??getChatToolCallDeltas(a);i&&mergeChatToolCallDeltas(r.toolCallsByIndex,i),e.set(n,r)}return{choices:[...e.entries()].map(([t,e])=>({index:t,message:{content:e.content,role:e.role??"assistant",...e.toolCallsByIndex.size>0?{tool_calls:[...e.toolCallsByIndex.entries()].sort(([t],[e])=>t-e).map(([,t])=>t)}:{}},...void 0!==e.finish_reason?{finish_reason:e.finish_reason}:{}}))}}function getChatToolCallDeltas(t){if(!Array.isArray(t?.tool_calls))return;const e=t.tool_calls.filter(t=>isObject(t));return e.length>0?e:void 0}function mergeChatToolCallDeltas(t,e){for(const n of e){const e="number"==typeof n.index&&n.index>=0?n.index:0,r=t.get(e);r?mergeChatToolCall(r,n):t.set(e,createChatToolCall(n))}}function createChatToolCall(t){const e=isObject(t.function)?t.function:{},n={arguments:"string"==typeof e.arguments?e.arguments:""};"string"==typeof e.name&&(n.name=e.name);const r={function:n};return"string"==typeof t.id&&(r.id=t.id),"string"==typeof t.type&&(r.type=t.type),r}function mergeChatToolCall(t,e){const n=isObject(t.function)?t.function:{},r=isObject(e.function)?e.function:{},o="string"==typeof n.arguments?n.arguments:"",a="string"==typeof r.arguments?r.arguments:"";"string"==typeof e.id&&"string"!=typeof t.id&&(t.id=e.id),"string"==typeof e.type&&"string"!=typeof t.type&&(t.type=e.type);const i={...n,arguments:`${o}${a}`};"string"==typeof r.name&&"string"!=typeof n.name&&(i.name=r.name),t.function=i}function aggregateTextGenerationStreamChunks(t){if(0===t.length)return;let e,n="";for(const r of t){if("string"==typeof r.generated_text)n=r.generated_text;else if("string"!=typeof r.token?.text||r.token.special){if(Array.isArray(r.choices))for(const t of r.choices)"string"==typeof t.text&&(n+=t.text),void 0!==t.finish_reason&&(e=t.finish_reason)}else n+=r.token.text;isObject(r.details)&&"string"==typeof r.details.finish_reason&&(e=r.details.finish_reason)}return{generated_text:n,...void 0!==e?{finish_reason:e}:{}}}function extractTextGenerationStreamMetadata(t){for(let e=t.length-1;e>=0;e--){const n=t[e];if(isObject(n?.details)&&"string"==typeof n.details.finish_reason)return{finish_reason:n.details.finish_reason};if(Array.isArray(n?.choices))for(let t=n.choices.length-1;t>=0;t--){const e=n.choices[t];if(void 0!==e?.finish_reason)return{finish_reason:e.finish_reason}}}}var openRouterAgentChannels=defineChannels("@openrouter/agent",{callModel:channel({channelName:"callModel",kind:"sync-stream"}),callModelTurn:channel({channelName:"callModel.turn",kind:"async"}),toolExecute:channel({channelName:"tool.execute",kind:"async"})}),OpenRouterAgentPlugin=class extends BasePlugin{onEnable(){this.subscribeToOpenRouterAgentChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToOpenRouterAgentChannels(){this.unsubscribers.push(traceSyncStreamChannel(openRouterAgentChannels.callModel,{name:"openrouter.callModel",type:"task",extractInput:t=>{const e=getOpenRouterCallModelRequestArg(t);return{input:e?extractOpenRouterCallModelInput(e):void 0,metadata:e?extractOpenRouterCallModelMetadata(e):{provider:"openrouter"}}},patchResult:({endEvent:t,result:e,span:n})=>patchOpenRouterCallModelResult({request:getOpenRouterCallModelRequestArg(t.arguments),result:e,span:n})})),this.unsubscribers.push(traceAsyncChannel(openRouterAgentChannels.callModelTurn,{name:"openrouter.beta.responses.send",type:"llm",extractInput:(t,e)=>{const n=getOpenRouterCallModelRequestArg(t),r=n?extractOpenRouterCallModelMetadata(n):{provider:"openrouter"};return isObject(r)&&"tools"in r&&delete r.tools,{input:n?extractOpenRouterCallModelInput(n):void 0,metadata:{...r,step:e.step,step_type:e.stepType}}},extractOutput:t=>extractOpenRouterResponseOutput(t),extractMetadata:(t,e)=>isObject(t)?{...extractOpenRouterResponseMetadata(t)||{},...void 0!==e?.step?{step:e.step}:{},...e?.stepType?{step_type:e.stepType}:{}}:{step:e?.step,step_type:e?.stepType},extractMetrics:t=>isObject(t)?parseOpenRouterMetricsFromUsage(t.usage):{}})),this.unsubscribers.push(traceStreamingChannel(openRouterAgentChannels.toolExecute,{name:"openrouter.tool",type:"tool",extractInput:(t,e)=>({input:t[0],metadata:{provider:"openrouter",tool_name:e.toolName,...e.toolCallId?{tool_call_id:e.toolCallId}:{}}}),extractOutput:t=>t,extractMetrics:()=>({}),aggregateChunks:t=>({output:t.length>0?t[t.length-1]:void 0,metrics:{}})}));const t=openRouterAgentChannels.callModel.tracingChannel(),e={start:t=>{const e=getOpenRouterCallModelRequestArg(t.arguments);e&&patchOpenRouterCallModelRequestTools(e)}};t.subscribe(e),this.unsubscribers.push(()=>{t.unsubscribe(e)})}};function normalizeArgs2(t){return Array.isArray(t)?t:isArrayLike2(t)?Array.from(t):[t]}function isArrayLike2(t){return isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0}function getOpenRouterCallModelRequestArg(t){const e=normalizeArgs2(t),n=e.find(t=>isObject(t)&&("input"in t||"model"in t||"tools"in t));if(isObject(n))return n;const r=e.find(t=>isObject(t));return isObject(r)?r:void 0}var TOKEN_NAME_MAP2={promptTokens:"prompt_tokens",inputTokens:"prompt_tokens",completionTokens:"completion_tokens",outputTokens:"completion_tokens",totalTokens:"tokens",prompt_tokens:"prompt_tokens",input_tokens:"prompt_tokens",completion_tokens:"completion_tokens",output_tokens:"completion_tokens",total_tokens:"tokens"},TOKEN_DETAIL_PREFIX_MAP={promptTokensDetails:"prompt",inputTokensDetails:"prompt",completionTokensDetails:"completion",outputTokensDetails:"completion",costDetails:"cost",prompt_tokens_details:"prompt",input_tokens_details:"prompt",completion_tokens_details:"completion",output_tokens_details:"completion",cost_details:"cost"};function camelToSnake(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function parseOpenRouterMetricsFromUsage(t){if(!isObject(t))return{};const e={};for(const[n,r]of Object.entries(t)){if("number"==typeof r){e[TOKEN_NAME_MAP2[n]||camelToSnake(n)]=r;continue}if(!isObject(r))continue;const t=TOKEN_DETAIL_PREFIX_MAP[n];if(t)for(const[n,o]of Object.entries(r))"number"==typeof o&&(e[`${t}_${camelToSnake(n)}`]=o)}return e}function extractOpenRouterUsageMetadata(t){if(!isObject(t))return;const e={};return"boolean"==typeof t.isByok?e.is_byok=t.isByok:"boolean"==typeof t.is_byok&&(e.is_byok=t.is_byok),Object.keys(e).length>0?e:void 0}var OMITTED_OPENROUTER_KEYS=new Set(["execute","render","nextTurnParams","requireApproval"]);function parseOpenRouterModelString(t){if("string"!=typeof t)return{model:t};const e=t.indexOf("/");return e>0&&e<t.length-1?{provider:t.substring(0,e),model:t.substring(e+1)}:{model:t}}function isZodSchema3(t){return null!=t&&"object"==typeof t&&"_def"in t&&"object"==typeof t._def}function serializeZodSchema3(t){try{return zodToJsonSchema(t)}catch{return{type:"object",description:"Zod schema (conversion failed)"}}}function serializeOpenRouterTool(t){if(!isObject(t))return t;const e={};for(const[n,r]of Object.entries(t))OMITTED_OPENROUTER_KEYS.has(n)||("function"===n&&isObject(r)?e.function=sanitizeOpenRouterLoggedValue(r):e[n]=sanitizeOpenRouterLoggedValue(r));return e}function serializeOpenRouterToolsForLogging(t){if(Array.isArray(t))return t.map(t=>serializeOpenRouterTool(t))}function sanitizeOpenRouterLoggedValue(t){if(isZodSchema3(t))return serializeZodSchema3(t);if("function"==typeof t)return"[Function]";if(Array.isArray(t))return t.map(t=>sanitizeOpenRouterLoggedValue(t));if(!isObject(t))return t;const e={};for(const[n,r]of Object.entries(t))OMITTED_OPENROUTER_KEYS.has(n)||("tools"===n&&Array.isArray(r)?e.tools=serializeOpenRouterToolsForLogging(r):e[n]=sanitizeOpenRouterLoggedValue(r));return e}function buildOpenRouterMetadata(t,e,n,r,o){const a=sanitizeOpenRouterLoggedValue(t),i=isObject(a)?a:{},{model:s,provider:c,...u}=i,p=parseOpenRouterModelString(s);return{...u,...void 0!==p.model?{model:p.model}:{},...void 0!==c?{providerRouting:c}:{},...void 0!==e?{httpReferer:e}:{},...void 0!==n?{appTitle:n}:{},...void 0!==r?{appCategories:r}:{},...void 0!==o?{xTitle:o}:{},provider:p.provider||"openrouter"}}function extractOpenRouterCallModelInput(t){return isObject(t)&&"input"in t?sanitizeOpenRouterLoggedValue(t.input):void 0}function extractOpenRouterCallModelMetadata(t){if(!isObject(t))return{provider:"openrouter"};const{input:e,...n}=t;return buildOpenRouterMetadata(n,void 0,void 0,void 0,void 0)}function extractOpenRouterResponseMetadata(t){if(!isObject(t))return;const{output:e,data:n,usage:r,...o}=t,a=sanitizeOpenRouterLoggedValue(o),i=isObject(a)?a:{},{model:s,provider:c,...u}=i,p=parseOpenRouterModelString(s),l=("string"==typeof c?c:void 0)||p.provider,d=extractOpenRouterUsageMetadata(r),m={...u,...void 0!==p.model?{model:p.model}:{},...d||{},...void 0!==l?{provider:l}:{}};return Object.keys(m).length>0?m:void 0}function extractOpenRouterResponseOutput(t,e){return isObject(t)&&"output"in t&&void 0!==t.output?sanitizeOpenRouterLoggedValue(t.output):void 0!==e?sanitizeOpenRouterLoggedValue(e):void 0}var OPENROUTER_WRAPPED_TOOL=Symbol("braintrust.openrouter.wrappedTool");function patchOpenRouterCallModelRequestTools(t){if(!Array.isArray(t.tools)||0===t.tools.length)return;const e=t.tools,n=e.map(t=>wrapOpenRouterTool(t));return n.some((t,n)=>t!==e[n])?(t.tools=n,()=>{t.tools=e}):void 0}function wrapOpenRouterTool(t){if(isWrappedTool(t)||!t.function||"object"!=typeof t.function||"function"!=typeof t.function.execute)return t;const e=t.function.name||"tool",n=t.function.execute,r={...t,function:{...t.function,execute(...t){return traceToolExecution({args:t,execute:()=>Reflect.apply(n,this,t),toolCallId:getToolCallId(t[1]),toolName:e})}}};return Object.defineProperty(r,OPENROUTER_WRAPPED_TOOL,{value:!0,enumerable:!1,configurable:!1}),r}function isWrappedTool(t){return Boolean(t[OPENROUTER_WRAPPED_TOOL])}function traceToolExecution(t){const e=openRouterAgentChannels.toolExecute.tracingChannel(),n={arguments:[t.args.length>0?t.args[0]:void 0],span_info:{name:t.toolName},toolCallId:t.toolCallId,toolName:t.toolName};e.start.publish(n);try{return publishToolResult(e,n,t.execute())}catch(t){throw n.error=normalizeError(t),e.error.publish(n),t}}function publishToolResult(t,e,n){return isPromiseLike(n)?n.then(n=>(e.result=n,t.asyncEnd.publish(e),n),n=>{throw e.error=normalizeError(n),t.error.publish(e),n}):(e.result=n,t.asyncEnd.publish(e),n)}function getToolCallId(t){const e=t;return"string"==typeof e?.toolCall?.id?e.toolCall.id:void 0}var OPENROUTER_WRAPPED_CALL_MODEL_RESULT=Symbol("braintrust.openrouter.wrappedCallModelResult"),OPENROUTER_CALL_MODEL_STREAM_METHODS=["getFullResponsesStream","getItemsStream","getNewMessagesStream","getReasoningStream","getTextStream","getToolCallsStream","getToolStream"],OPENROUTER_CALL_MODEL_CONTEXT_METHODS=["cancel","getPendingToolCalls","getState","getToolCalls","requiresApproval"];function patchOpenRouterCallModelResult(t){const{request:e,result:n,span:r}=t;if(!isObject(n)||isWrappedCallModelResult(n))return!1;const o=n;if(!("function"==typeof o.getResponse||"function"==typeof o.getText||OPENROUTER_CALL_MODEL_STREAM_METHODS.some(t=>"function"==typeof o[t])))return!1;Object.defineProperty(o,OPENROUTER_WRAPPED_CALL_MODEL_RESULT,{value:!0,enumerable:!1,configurable:!1});const a="function"==typeof o.getResponse?o.getResponse.bind(o):void 0,i="function"==typeof o.getInitialResponse?o.getInitialResponse.bind(o):void 0,s="function"==typeof o.makeFollowupRequest?o.makeFollowupRequest.bind(o):void 0;let c=!1,u=0;const p=async(t,e)=>{if(c)return;c=!0;const n=getFinalOpenRouterCallModelResponse(o,t);if(n){const t=getOpenRouterCallModelRounds(o),a=extractOpenRouterCallModelResultMetadata(n,t.length+1),i=0===u?aggregateOpenRouterCallModelMetrics(t,n):void 0;return r.log({output:extractOpenRouterResponseOutput(n,e),...a?{metadata:a}:{},...i&&Object.keys(i).length>0?{metrics:i}:{}}),void r.end()}void 0!==e&&r.log({output:e}),r.end()},l=t=>{c||(c=!0,r.log({error:toLoggedError(t)}),r.end())},d=async t=>{if(a)try{await p(await a(),t)}catch{await p(void 0,t)}else await p(void 0,t)};if(a&&(o.getResponse=async(...t)=>await withCurrent(r,async()=>{try{const e=await a(...t);return await p(e),e}catch(t){throw l(t),t}})),"function"==typeof o.getText){const t=o.getText.bind(o);o.getText=async(...e)=>await withCurrent(r,async()=>{try{const n=await t(...e);return await d(n),n}catch(t){throw l(t),t}})}for(const t of OPENROUTER_CALL_MODEL_CONTEXT_METHODS){if("function"!=typeof o[t])continue;const e=o[t];o[t]=async(...t)=>await withCurrent(r,async()=>await e.apply(o,t))}for(const t of OPENROUTER_CALL_MODEL_STREAM_METHODS){if("function"!=typeof o[t])continue;const e=o[t];o[t]=(...t)=>{const n=withCurrent(r,()=>e.apply(o,t));return isAsyncIterable4(n)?wrapAsyncIterableWithSpan({finalize:d,iteratorFactory:()=>n[Symbol.asyncIterator](),onError:l,span:r}):n}}if(i){let t=!1;o.getInitialResponse=async(...n)=>{if(t)return await withCurrent(r,async()=>await i(...n));t=!0;const a=u+1,s=0===u?"initial":"continue";return await traceOpenRouterCallModelTurn({fn:async()=>{const t=await i(...n);return u++,t},parentSpan:r,request:getOpenRouterResolvedRequest(o,e),step:a,stepType:s})}}return s&&(o.makeFollowupRequest=async(...t)=>{const n=t[0],a=Array.isArray(t[1])?t[1]:[],i=u+1;return await traceOpenRouterCallModelTurn({fn:async()=>{const e=await s(...t);return u++,e},parentSpan:r,request:buildOpenRouterFollowupRequest(getOpenRouterResolvedRequest(o,e),n,a),step:i,stepType:"continue"})}),!0}async function traceOpenRouterCallModelTurn(t){const e={arguments:[t.request],step:t.step,stepType:t.stepType};return await withCurrent(t.parentSpan,()=>openRouterAgentChannels.callModelTurn.tracePromise(t.fn,e))}function isWrappedCallModelResult(t){return Boolean(isObject(t)&&t[OPENROUTER_WRAPPED_CALL_MODEL_RESULT])}function extractOpenRouterCallModelResultMetadata(t,e){const n={...extractOpenRouterResponseMetadata(t)||{},...void 0!==e?{turn_count:e}:{}};return Object.keys(n).length>0?n:void 0}function getFinalOpenRouterCallModelResponse(t,e){return isObject(e)?e:isObject(t.finalResponse)?t.finalResponse:void 0}function getOpenRouterCallModelRounds(t){return Array.isArray(t.allToolExecutionRounds)?t.allToolExecutionRounds.filter(t=>isObject(t)).map(t=>({response:isObject(t.response)?t.response:void 0,round:"number"==typeof t.round?t.round:void 0,toolResults:Array.isArray(t.toolResults)?t.toolResults:[]})).filter(t=>void 0!==t.response):[]}function aggregateOpenRouterCallModelMetrics(t,e){const n={},r=[...t.map(t=>t.response).filter(isObject),e];for(const t of r){const e=parseOpenRouterMetricsFromUsage(t.usage);for(const[t,r]of Object.entries(e))n[t]=(n[t]||0)+r}return n}function buildNextOpenRouterCallModelInput(t,e,n){return[...Array.isArray(t)?[...t]:void 0===t?[]:[t],...Array.isArray(e.output)?e.output:void 0===e.output?[]:[e.output],...n].map(t=>sanitizeOpenRouterLoggedValue(t))}function getOpenRouterResolvedRequest(t,e){return isObject(t.resolvedRequest)?t.resolvedRequest:e}function buildOpenRouterFollowupRequest(t,e,n){if(t)return{...t,input:buildNextOpenRouterCallModelInput(extractOpenRouterCallModelInput(t),isObject(e)?e:{},n),stream:!1}}function wrapAsyncIterableWithSpan(t){return{[Symbol.asyncIterator](){const e=t.iteratorFactory();return{next:n=>withCurrent(t.span,()=>void 0===n?e.next():e.next(n)).then(async e=>(e.done&&await t.finalize(),e),e=>{throw t.onError(e),e}),return:n=>"function"!=typeof e.return?t.finalize().then(()=>({done:!0,value:n})):withCurrent(t.span,()=>e.return(n)).then(async e=>(await t.finalize(),e),e=>{throw t.onError(e),e}),throw:n=>(t.onError(n),"function"!=typeof e.throw?Promise.reject(n):withCurrent(t.span,()=>e.throw(n))),[Symbol.asyncIterator](){return this}}}}}function isAsyncIterable4(t){return!!t&&("object"==typeof t||"function"==typeof t)&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function normalizeError(t){return t instanceof Error?t:new Error(String(t))}var openRouterChannels=defineChannels("@openrouter/sdk",{chatSend:channel({channelName:"chat.send",kind:"async"}),embeddingsGenerate:channel({channelName:"embeddings.generate",kind:"async"}),rerankRerank:channel({channelName:"rerank.rerank",kind:"async"}),betaResponsesSend:channel({channelName:"beta.responses.send",kind:"async"}),callModel:channel({channelName:"callModel",kind:"sync-stream"}),callModelTurn:channel({channelName:"callModel.turn",kind:"async"}),toolExecute:channel({channelName:"tool.execute",kind:"async"})}),OpenRouterPlugin=class extends BasePlugin{onEnable(){this.subscribeToOpenRouterChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToOpenRouterChannels(){this.unsubscribers.push(traceStreamingChannel(openRouterChannels.chatSend,{name:"openrouter.chat.send",type:"llm",extractInput:t=>{const e=getOpenRouterRequestArg(t),n=isObject(e?.chatGenerationParams)?e.chatGenerationParams:{},r=e?.httpReferer,o=e?.xTitle,{messages:a,...i}=n;return{input:a,metadata:buildOpenRouterMetadata2(i,r,o)}},extractOutput:t=>isObject(t)?t.choices:void 0,extractMetrics:(t,e)=>{const n=parseOpenRouterMetricsFromUsage2(t?.usage);return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n},aggregateChunks:aggregateOpenRouterChatChunks})),this.unsubscribers.push(traceAsyncChannel(openRouterChannels.embeddingsGenerate,{name:"openrouter.embeddings.generate",type:"llm",extractInput:t=>{const e=getOpenRouterRequestArg(t),n=isObject(e?.requestBody)?e.requestBody:{},r=e?.httpReferer,o=e?.xTitle,{input:a,...i}=n;return{input:a,metadata:buildOpenRouterEmbeddingMetadata(i,r,o)}},extractOutput:t=>{if(!isObject(t))return;const e=t.data?.[0]?.embedding;return Array.isArray(e)?{embedding_length:e.length}:void 0},extractMetadata:t=>{if(isObject(t))return extractOpenRouterResponseMetadata2(t)},extractMetrics:t=>isObject(t)?parseOpenRouterMetricsFromUsage2(t.usage):{}})),this.unsubscribers.push(traceAsyncChannel(openRouterChannels.rerankRerank,{name:"openrouter.rerank.rerank",type:"llm",extractInput:t=>{const e=getOpenRouterRequestArg(t),n=isObject(e?.requestBody)?e.requestBody:{},r=e?.httpReferer,o=e?.xTitle??e?.appTitle,{documents:a,query:i,...s}=n;return{input:{documents:a,query:i},metadata:buildOpenRouterRerankMetadata(s,a,r,o)}},extractOutput:t=>extractOpenRouterRerankOutput(t),extractMetadata:t=>extractOpenRouterResponseMetadata2(t),extractMetrics:t=>isObject(t)?parseOpenRouterMetricsFromUsage2(t.usage):{}})),this.unsubscribers.push(traceStreamingChannel(openRouterChannels.betaResponsesSend,{name:"openrouter.beta.responses.send",type:"llm",extractInput:t=>{const e=getOpenRouterRequestArg(t),n=isObject(e?.openResponsesRequest)?e.openResponsesRequest:{},r=e?.httpReferer,o=e?.xTitle,{input:a,...i}=n;return{input:a,metadata:buildOpenRouterMetadata2(i,r,o)}},extractOutput:t=>extractOpenRouterResponseOutput2(t),extractMetadata:t=>extractOpenRouterResponseMetadata2(t),extractMetrics:(t,e)=>{const n=parseOpenRouterMetricsFromUsage2(t?.usage);return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n},aggregateChunks:aggregateOpenRouterResponseStreamEvents})),this.unsubscribers.push(traceSyncStreamChannel(openRouterChannels.callModel,{name:"openrouter.callModel",type:"task",extractInput:t=>{const e=getOpenRouterCallModelRequestArg2(t);return{input:e?extractOpenRouterCallModelInput2(e):void 0,metadata:e?extractOpenRouterCallModelMetadata2(e):{provider:"openrouter"}}},patchResult:({endEvent:t,result:e,span:n})=>patchOpenRouterCallModelResult2({request:getOpenRouterCallModelRequestArg2(t.arguments),result:e,span:n})})),this.unsubscribers.push(traceAsyncChannel(openRouterChannels.callModelTurn,{name:"openrouter.beta.responses.send",type:"llm",extractInput:(t,e)=>{const n=getOpenRouterCallModelRequestArg2(t),r=n?extractOpenRouterCallModelMetadata2(n):{provider:"openrouter"};return isObject(r)&&"tools"in r&&delete r.tools,{input:n?extractOpenRouterCallModelInput2(n):void 0,metadata:{...r,step:e.step,step_type:e.stepType}}},extractOutput:t=>extractOpenRouterResponseOutput2(t),extractMetadata:(t,e)=>isObject(t)?{...extractOpenRouterResponseMetadata2(t)||{},...void 0!==e?.step?{step:e.step}:{},...e?.stepType?{step_type:e.stepType}:{}}:{step:e?.step,step_type:e?.stepType},extractMetrics:t=>isObject(t)?parseOpenRouterMetricsFromUsage2(t.usage):{}})),this.unsubscribers.push(traceStreamingChannel(openRouterChannels.toolExecute,{name:"openrouter.tool",type:"tool",extractInput:(t,e)=>({input:t[0],metadata:{provider:"openrouter",tool_name:e.toolName,...e.toolCallId?{tool_call_id:e.toolCallId}:{}}}),extractOutput:t=>t,extractMetrics:()=>({}),aggregateChunks:t=>({output:t.length>0?t[t.length-1]:void 0,metrics:{}})}));const t=openRouterChannels.callModel.tracingChannel(),e={start:t=>{const e=getOpenRouterCallModelRequestArg2(t.arguments);e&&patchOpenRouterCallModelRequestTools2(e)}};t.subscribe(e),this.unsubscribers.push(()=>{t.unsubscribe(e)})}};function normalizeArgs3(t){return Array.isArray(t)?t:isArrayLike3(t)?Array.from(t):[t]}function isArrayLike3(t){return isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0}function getOpenRouterRequestArg(t){const e=normalizeArgs3(t),n=e.find(t=>isObject(t)&&("chatGenerationParams"in t||"requestBody"in t||"openResponsesRequest"in t));if(isObject(n))return n;const r=e.find(t=>isObject(t));return isObject(r)?r:void 0}function getOpenRouterCallModelRequestArg2(t){const e=normalizeArgs3(t).find(t=>isObject(t));return isObject(e)?e:void 0}var TOKEN_NAME_MAP3={promptTokens:"prompt_tokens",inputTokens:"prompt_tokens",completionTokens:"completion_tokens",outputTokens:"completion_tokens",totalTokens:"tokens",prompt_tokens:"prompt_tokens",input_tokens:"prompt_tokens",completion_tokens:"completion_tokens",output_tokens:"completion_tokens",total_tokens:"tokens"},TOKEN_DETAIL_PREFIX_MAP2={promptTokensDetails:"prompt",inputTokensDetails:"prompt",completionTokensDetails:"completion",outputTokensDetails:"completion",costDetails:"cost",prompt_tokens_details:"prompt",input_tokens_details:"prompt",completion_tokens_details:"completion",output_tokens_details:"completion",cost_details:"cost"};function camelToSnake2(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function parseOpenRouterMetricsFromUsage2(t){if(!isObject(t))return{};const e={};for(const[n,r]of Object.entries(t)){if("number"==typeof r){e[TOKEN_NAME_MAP3[n]||camelToSnake2(n)]=r;continue}if(!isObject(r))continue;const t=TOKEN_DETAIL_PREFIX_MAP2[n];if(t)for(const[n,o]of Object.entries(r))"number"==typeof o&&(e[`${t}_${camelToSnake2(n)}`]=o)}return e}function extractOpenRouterUsageMetadata2(t){if(!isObject(t))return;const e={};return"boolean"==typeof t.isByok?e.is_byok=t.isByok:"boolean"==typeof t.is_byok&&(e.is_byok=t.is_byok),Object.keys(e).length>0?e:void 0}var OMITTED_OPENROUTER_KEYS2=new Set(["execute","render","nextTurnParams","requireApproval"]);function parseOpenRouterModelString2(t){if("string"!=typeof t)return{model:t};const e=t.indexOf("/");return e>0&&e<t.length-1?{provider:t.substring(0,e),model:t.substring(e+1)}:{model:t}}function isZodSchema4(t){return null!=t&&"object"==typeof t&&"_def"in t&&"object"==typeof t._def}function serializeZodSchema4(t){try{return zodToJsonSchema(t)}catch{return{type:"object",description:"Zod schema (conversion failed)"}}}function serializeOpenRouterTool2(t){if(!isObject(t))return t;const e={};for(const[n,r]of Object.entries(t))OMITTED_OPENROUTER_KEYS2.has(n)||("function"===n&&isObject(r)?e.function=sanitizeOpenRouterLoggedValue2(r):e[n]=sanitizeOpenRouterLoggedValue2(r));return e}function serializeOpenRouterToolsForLogging2(t){if(Array.isArray(t))return t.map(t=>serializeOpenRouterTool2(t))}function sanitizeOpenRouterLoggedValue2(t){if(isZodSchema4(t))return serializeZodSchema4(t);if("function"==typeof t)return"[Function]";if(Array.isArray(t))return t.map(t=>sanitizeOpenRouterLoggedValue2(t));if(!isObject(t))return t;const e={};for(const[n,r]of Object.entries(t))OMITTED_OPENROUTER_KEYS2.has(n)||("tools"===n&&Array.isArray(r)?e.tools=serializeOpenRouterToolsForLogging2(r):e[n]=sanitizeOpenRouterLoggedValue2(r));return e}function buildOpenRouterMetadata2(t,e,n){const r=sanitizeOpenRouterLoggedValue2(t),o=isObject(r)?r:{},{model:a,provider:i,...s}=o,c=parseOpenRouterModelString2(a);return{...s,...void 0!==c.model?{model:c.model}:{},...void 0!==i?{providerRouting:i}:{},...void 0!==e?{httpReferer:e}:{},...void 0!==n?{xTitle:n}:{},provider:c.provider||"openrouter"}}function buildOpenRouterEmbeddingMetadata(t,e,n){const r=buildOpenRouterMetadata2(t,e,n);return"string"==typeof r.model?{...r,embedding_model:r.model}:r}function buildOpenRouterRerankMetadata(t,e,n,r){return{...buildOpenRouterMetadata2(t,n,r),...Array.isArray(e)?{document_count:e.length}:{}}}function extractOpenRouterCallModelInput2(t){return isObject(t)&&"input"in t?sanitizeOpenRouterLoggedValue2(t.input):void 0}function extractOpenRouterCallModelMetadata2(t){if(!isObject(t))return{provider:"openrouter"};const{input:e,...n}=t;return buildOpenRouterMetadata2(n,void 0,void 0)}function extractOpenRouterResponseMetadata2(t){if(!isObject(t))return;const{output:e,data:n,usage:r,...o}=t,a=sanitizeOpenRouterLoggedValue2(o),i=isObject(a)?a:{},{model:s,provider:c,...u}=i,p=parseOpenRouterModelString2(s),l=("string"==typeof c?c.toLowerCase():void 0)||p.provider,d=extractOpenRouterUsageMetadata2(r),m={...u,...void 0!==p.model?{model:p.model}:{},...d||{},...void 0!==l?{provider:l}:{}};return Object.keys(m).length>0?m:void 0}function extractOpenRouterResponseOutput2(t,e){return isObject(t)&&"output"in t&&void 0!==t.output?sanitizeOpenRouterLoggedValue2(t.output):void 0!==e?sanitizeOpenRouterLoggedValue2(e):void 0}function extractOpenRouterRerankOutput(t){if(isObject(t)&&Array.isArray(t.results))return t.results.slice(0,100).map(t=>({index:isObject(t)&&"number"==typeof t.index?t.index:void 0,relevance_score:isObject(t)&&"number"==typeof t.relevanceScore?t.relevanceScore:isObject(t)&&"number"==typeof t.relevance_score?t.relevance_score:void 0}))}var OPENROUTER_WRAPPED_TOOL2=Symbol("braintrust.openrouter.wrappedTool");function patchOpenRouterCallModelRequestTools2(t){if(!Array.isArray(t.tools)||0===t.tools.length)return;const e=t.tools,n=e.map(t=>wrapOpenRouterTool2(t));return n.some((t,n)=>t!==e[n])?(t.tools=n,()=>{t.tools=e}):void 0}function wrapOpenRouterTool2(t){if(isWrappedTool2(t)||!t.function||"object"!=typeof t.function||"function"!=typeof t.function.execute)return t;const e=t.function.name||"tool",n=t.function.execute,r={...t,function:{...t.function,execute(...t){return traceToolExecution2({args:t,execute:()=>Reflect.apply(n,this,t),toolCallId:getToolCallId2(t[1]),toolName:e})}}};return Object.defineProperty(r,OPENROUTER_WRAPPED_TOOL2,{value:!0,enumerable:!1,configurable:!1}),r}function isWrappedTool2(t){return Boolean(t[OPENROUTER_WRAPPED_TOOL2])}function traceToolExecution2(t){const e=openRouterChannels.toolExecute.tracingChannel(),n={arguments:[t.args.length>0?t.args[0]:void 0],span_info:{name:t.toolName},toolCallId:t.toolCallId,toolName:t.toolName};e.start.publish(n);try{return publishToolResult2(e,n,t.execute())}catch(t){throw n.error=normalizeError2(t),e.error.publish(n),t}}function publishToolResult2(t,e,n){return isPromiseLike(n)?n.then(n=>(e.result=n,t.asyncEnd.publish(e),n),n=>{throw e.error=normalizeError2(n),t.error.publish(e),n}):(e.result=n,t.asyncEnd.publish(e),n)}function getToolCallId2(t){const e=t;return"string"==typeof e?.toolCall?.id?e.toolCall.id:void 0}function aggregateOpenRouterChatChunks(t){let e,n,r,o,a="",i="",s=!1,c="",u=!1,p={};for(const l of t){p={...p,...parseOpenRouterMetricsFromUsage2(l?.usage)};const t=l?.choices?.[0],d=t?.delta;if(!d){void 0!==t?.finish_reason&&(o=t.finish_reason);continue}!e&&d.role&&(e=d.role),"string"==typeof d.content&&(a+=d.content),"string"==typeof d.reasoning&&(i+=d.reasoning,s=!0),"string"==typeof d.reasoning_content&&(i+=d.reasoning_content,c+=d.reasoning_content,u=!0),Array.isArray(d.reasoning_details)&&(n=[...n||[],...d.reasoning_details]);const m=t?.finishReason??t?.finish_reason??void 0,g=d.finishReason??d.finish_reason??void 0;void 0!==m?o=m:void 0!==g&&(o=g);const f=Array.isArray(d.toolCalls)?d.toolCalls:Array.isArray(d.tool_calls)?d.tool_calls:void 0;if(f)for(const t of f){if(!t?.function)continue;const e=t.index??0,n=r?.[e];if(!n||t.id&&void 0!==n.id&&n.id!==t.id){const n=[...r||[]];n[e]={index:e,id:t.id,type:t.type,function:{name:t.function.name,arguments:t.function.arguments||""}},r=n;continue}const o=n;t.id&&!o.id&&(o.id=t.id),t.type&&!o.type&&(o.type=t.type),t.function.name&&!o.function.name&&(o.function.name=t.function.name),o.function.arguments+=t.function.arguments||""}}return{output:[{index:0,message:{role:e,content:a||void 0,...s||u?{reasoning:i}:{},...u?{reasoning_content:c}:{},...n?{reasoning_details:n}:{},...r?{tool_calls:r}:{}},logprobs:null,finish_reason:o}],metrics:p}}function aggregateOpenRouterResponseStreamEvents(t){let e;for(const n of t){const t=n?.response;t&&("response.completed"!==n.type&&"response.incomplete"!==n.type&&"response.failed"!==n.type||(e=t))}return e?{output:extractOpenRouterResponseOutput2(e),metrics:parseOpenRouterMetricsFromUsage2(e.usage),...extractOpenRouterResponseMetadata2(e)?{metadata:extractOpenRouterResponseMetadata2(e)}:{}}:{output:void 0,metrics:{}}}var OPENROUTER_WRAPPED_CALL_MODEL_RESULT2=Symbol("braintrust.openrouter.wrappedCallModelResult"),OPENROUTER_CALL_MODEL_STREAM_METHODS2=["getFullResponsesStream","getItemsStream","getNewMessagesStream","getReasoningStream","getTextStream","getToolCallsStream","getToolStream"],OPENROUTER_CALL_MODEL_CONTEXT_METHODS2=["cancel","getPendingToolCalls","getState","getToolCalls","requiresApproval"];function patchOpenRouterCallModelResult2(t){const{request:e,result:n,span:r}=t;if(!isObject(n)||isWrappedCallModelResult2(n))return!1;const o=n;if(!("function"==typeof o.getResponse||"function"==typeof o.getText||OPENROUTER_CALL_MODEL_STREAM_METHODS2.some(t=>"function"==typeof o[t])))return!1;Object.defineProperty(o,OPENROUTER_WRAPPED_CALL_MODEL_RESULT2,{value:!0,enumerable:!1,configurable:!1});const a="function"==typeof o.getResponse?o.getResponse.bind(o):void 0,i="function"==typeof o.getInitialResponse?o.getInitialResponse.bind(o):void 0,s="function"==typeof o.makeFollowupRequest?o.makeFollowupRequest.bind(o):void 0;let c=!1,u=0;const p=async(t,e)=>{if(c)return;c=!0;const n=getFinalOpenRouterCallModelResponse2(o,t);if(n){const t=getOpenRouterCallModelRounds2(o),a=extractOpenRouterCallModelResultMetadata2(n,t.length+1),i=0===u?aggregateOpenRouterCallModelMetrics2(t,n):void 0;return r.log({output:extractOpenRouterResponseOutput2(n,e),...a?{metadata:a}:{},...i&&Object.keys(i).length>0?{metrics:i}:{}}),void r.end()}void 0!==e&&r.log({output:e}),r.end()},l=t=>{c||(c=!0,r.log({error:toLoggedError(t)}),r.end())},d=async t=>{if(a)try{await p(await a(),t)}catch{await p(void 0,t)}else await p(void 0,t)};if(a&&(o.getResponse=async(...t)=>await withCurrent(r,async()=>{try{const e=await a(...t);return await p(e),e}catch(t){throw l(t),t}})),"function"==typeof o.getText){const t=o.getText.bind(o);o.getText=async(...e)=>await withCurrent(r,async()=>{try{const n=await t(...e);return await d(n),n}catch(t){throw l(t),t}})}for(const t of OPENROUTER_CALL_MODEL_CONTEXT_METHODS2){if("function"!=typeof o[t])continue;const e=o[t];o[t]=async(...t)=>await withCurrent(r,async()=>await e.apply(o,t))}for(const t of OPENROUTER_CALL_MODEL_STREAM_METHODS2){if("function"!=typeof o[t])continue;const e=o[t];o[t]=(...t)=>{const n=withCurrent(r,()=>e.apply(o,t));return isAsyncIterable5(n)?wrapAsyncIterableWithSpan2({finalize:d,iteratorFactory:()=>n[Symbol.asyncIterator](),onError:l,span:r}):n}}if(i){let t=!1;o.getInitialResponse=async(...n)=>{if(t)return await withCurrent(r,async()=>await i(...n));t=!0;const a=u+1,s=0===u?"initial":"continue";return await traceOpenRouterCallModelTurn2({fn:async()=>{const t=await i(...n);return u++,t},parentSpan:r,request:getOpenRouterResolvedRequest2(o,e),step:a,stepType:s})}}return s&&(o.makeFollowupRequest=async(...t)=>{const n=t[0],a=Array.isArray(t[1])?t[1]:[],i=u+1;return await traceOpenRouterCallModelTurn2({fn:async()=>{const e=await s(...t);return u++,e},parentSpan:r,request:buildOpenRouterFollowupRequest2(getOpenRouterResolvedRequest2(o,e),n,a),step:i,stepType:"continue"})}),!0}async function traceOpenRouterCallModelTurn2(t){const e={arguments:[t.request],step:t.step,stepType:t.stepType};return await withCurrent(t.parentSpan,()=>openRouterChannels.callModelTurn.tracePromise(t.fn,e))}function isWrappedCallModelResult2(t){return Boolean(isObject(t)&&t[OPENROUTER_WRAPPED_CALL_MODEL_RESULT2])}function extractOpenRouterCallModelResultMetadata2(t,e){const n={...extractOpenRouterResponseMetadata2(t)||{},...void 0!==e?{turn_count:e}:{}};return Object.keys(n).length>0?n:void 0}function getFinalOpenRouterCallModelResponse2(t,e){return isObject(e)?e:isObject(t.finalResponse)?t.finalResponse:void 0}function getOpenRouterCallModelRounds2(t){return Array.isArray(t.allToolExecutionRounds)?t.allToolExecutionRounds.filter(t=>isObject(t)).map(t=>({response:isObject(t.response)?t.response:void 0,round:"number"==typeof t.round?t.round:void 0,toolResults:Array.isArray(t.toolResults)?t.toolResults:[]})).filter(t=>void 0!==t.response):[]}function aggregateOpenRouterCallModelMetrics2(t,e){const n={},r=[...t.map(t=>t.response).filter(isObject),e];for(const t of r){const e=parseOpenRouterMetricsFromUsage2(t.usage);for(const[t,r]of Object.entries(e))n[t]=(n[t]||0)+r}return n}function buildNextOpenRouterCallModelInput2(t,e,n){return[...Array.isArray(t)?[...t]:void 0===t?[]:[t],...Array.isArray(e.output)?e.output:void 0===e.output?[]:[e.output],...n].map(t=>sanitizeOpenRouterLoggedValue2(t))}function getOpenRouterResolvedRequest2(t,e){return isObject(t.resolvedRequest)?t.resolvedRequest:e}function buildOpenRouterFollowupRequest2(t,e,n){if(t)return{...t,input:buildNextOpenRouterCallModelInput2(extractOpenRouterCallModelInput2(t),isObject(e)?e:{},n),stream:!1}}function wrapAsyncIterableWithSpan2(t){return{[Symbol.asyncIterator](){const e=t.iteratorFactory();return{next:n=>withCurrent(t.span,()=>void 0===n?e.next():e.next(n)).then(async e=>(e.done&&await t.finalize(),e),e=>{throw t.onError(e),e}),return:n=>"function"!=typeof e.return?t.finalize().then(()=>({done:!0,value:n})):withCurrent(t.span,()=>e.return(n)).then(async e=>(await t.finalize(),e),e=>{throw t.onError(e),e}),throw:n=>(t.onError(n),"function"!=typeof e.throw?Promise.reject(n):withCurrent(t.span,()=>e.throw(n))),[Symbol.asyncIterator](){return this}}}}}function isAsyncIterable5(t){return!!t&&("object"==typeof t||"function"==typeof t)&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function normalizeError2(t){return t instanceof Error?t:new Error(String(t))}var mistralChannels=defineChannels("@mistralai/mistralai",{chatComplete:channel({channelName:"chat.complete",kind:"async"}),chatStream:channel({channelName:"chat.stream",kind:"async"}),embeddingsCreate:channel({channelName:"embeddings.create",kind:"async"}),classifiersModerate:channel({channelName:"classifiers.moderate",kind:"async"}),classifiersModerateChat:channel({channelName:"classifiers.moderateChat",kind:"async"}),classifiersClassify:channel({channelName:"classifiers.classify",kind:"async"}),classifiersClassifyChat:channel({channelName:"classifiers.classifyChat",kind:"async"}),fimComplete:channel({channelName:"fim.complete",kind:"async"}),fimStream:channel({channelName:"fim.stream",kind:"async"}),agentsComplete:channel({channelName:"agents.complete",kind:"async"}),agentsStream:channel({channelName:"agents.stream",kind:"async"})}),MistralPlugin=class extends BasePlugin{onEnable(){this.subscribeToMistralChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToMistralChannels(){this.unsubscribers.push(traceStreamingChannel(mistralChannels.chatComplete,{name:"mistral.chat.complete",type:"llm",extractInput:extractMessagesInputWithMetadata,extractOutput:t=>t?.choices,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralMetrics(t?.usage,e)})),this.unsubscribers.push(traceStreamingChannel(mistralChannels.chatStream,{name:"mistral.chat.stream",type:"llm",extractInput:extractMessagesInputWithMetadata,extractOutput:extractMistralStreamOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralStreamingMetrics(t,e),aggregateChunks:aggregateMistralStreamChunks})),this.unsubscribers.push(traceAsyncChannel(mistralChannels.embeddingsCreate,{name:"mistral.embeddings.create",type:"llm",extractInput:extractEmbeddingInputWithMetadata,extractOutput:t=>{const e=t?.data?.[0]?.embedding;return Array.isArray(e)?{embedding_length:e.length}:void 0},extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:t=>parseMistralMetricsFromUsage(t?.usage)})),this.unsubscribers.push(traceAsyncChannel(mistralChannels.classifiersModerate,{name:"mistral.classifiers.moderate",type:"llm",extractInput:extractClassifierInputWithMetadata,extractOutput:extractClassifierOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:t=>parseMistralMetricsFromUsage(t?.usage)})),this.unsubscribers.push(traceAsyncChannel(mistralChannels.classifiersModerateChat,{name:"mistral.classifiers.moderateChat",type:"llm",extractInput:extractClassifierInputWithMetadata,extractOutput:extractClassifierOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:t=>parseMistralMetricsFromUsage(t?.usage)})),this.unsubscribers.push(traceAsyncChannel(mistralChannels.classifiersClassify,{name:"mistral.classifiers.classify",type:"llm",extractInput:extractClassifierInputWithMetadata,extractOutput:extractClassifierOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:t=>parseMistralMetricsFromUsage(t?.usage)})),this.unsubscribers.push(traceAsyncChannel(mistralChannels.classifiersClassifyChat,{name:"mistral.classifiers.classifyChat",type:"llm",extractInput:extractClassifierInputWithMetadata,extractOutput:extractClassifierOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:t=>parseMistralMetricsFromUsage(t?.usage)})),this.unsubscribers.push(traceStreamingChannel(mistralChannels.fimComplete,{name:"mistral.fim.complete",type:"llm",extractInput:extractPromptInputWithMetadata,extractOutput:t=>t?.choices,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralMetrics(t?.usage,e)})),this.unsubscribers.push(traceStreamingChannel(mistralChannels.fimStream,{name:"mistral.fim.stream",type:"llm",extractInput:extractPromptInputWithMetadata,extractOutput:extractMistralStreamOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralStreamingMetrics(t,e),aggregateChunks:aggregateMistralStreamChunks})),this.unsubscribers.push(traceStreamingChannel(mistralChannels.agentsComplete,{name:"mistral.agents.complete",type:"llm",extractInput:extractMessagesInputWithMetadata,extractOutput:t=>t?.choices,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralMetrics(t?.usage,e)})),this.unsubscribers.push(traceStreamingChannel(mistralChannels.agentsStream,{name:"mistral.agents.stream",type:"llm",extractInput:extractMessagesInputWithMetadata,extractOutput:extractMistralStreamOutput,extractMetadata:t=>extractMistralResponseMetadata(t),extractMetrics:(t,e)=>extractMistralStreamingMetrics(t,e),aggregateChunks:aggregateMistralStreamChunks}))}},TOKEN_NAME_MAP4={promptTokens:"prompt_tokens",inputTokens:"prompt_tokens",completionTokens:"completion_tokens",outputTokens:"completion_tokens",totalTokens:"tokens",prompt_tokens:"prompt_tokens",input_tokens:"prompt_tokens",completion_tokens:"completion_tokens",output_tokens:"completion_tokens",total_tokens:"tokens",promptAudioSeconds:"prompt_audio_seconds",prompt_audio_seconds:"prompt_audio_seconds"},TOKEN_DETAIL_PREFIX_MAP3={promptTokensDetails:"prompt",inputTokensDetails:"prompt",completionTokensDetails:"completion",outputTokensDetails:"completion",prompt_tokens_details:"prompt",input_tokens_details:"prompt",completion_tokens_details:"completion",output_tokens_details:"completion"},MISTRAL_REQUEST_METADATA_ALLOWLIST=new Set(["agentId","agent_id","encodingFormat","encoding_format","frequencyPenalty","frequency_penalty","maxTokens","max_tokens","model","n","presencePenalty","presence_penalty","randomSeed","random_seed","reasoningEffort","reasoning_effort","responseFormat","response_format","safePrompt","safe_prompt","stream","stop","temperature","toolChoice","tool_choice","topP","top_p"]),MISTRAL_RESPONSE_METADATA_ALLOWLIST=new Set(["agentId","agent_id","created","id","model","object"]);function camelToSnake3(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function normalizeArgs4(t){return Array.isArray(t)?t:isArrayLike4(t)?Array.from(t):[t]}function isArrayLike4(t){return isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0}function getMistralRequestArg(t){const e=normalizeArgs4(t).find(t=>isObject(t));return isObject(e)?e:void 0}function addMistralProviderMetadata(t){return{...t,provider:"mistral"}}function pickAllowedMetadata(t,e){if(!t)return{};const n={};for(const r of e){const e=t[r];void 0!==e&&(n[r]=e)}return n}function extractMistralRequestMetadata(t){return pickAllowedMetadata(t,MISTRAL_REQUEST_METADATA_ALLOWLIST)}function isMistralChatCompletionChunk(t){return isObject(t)}function isMistralChunkChoice(t){return isObject(t)}function extractMessagesInputWithMetadata(t){const e=getMistralRequestArg(t),{messages:n,...r}=e||{};return{input:processInputAttachments(n),metadata:addMistralProviderMetadata(extractMistralRequestMetadata(r))}}function extractEmbeddingInputWithMetadata(t){const e=getMistralRequestArg(t),{inputs:n,...r}=e||{};return{input:n,metadata:addMistralProviderMetadata(extractMistralRequestMetadata(r))}}function extractClassifierInputWithMetadata(t){const e=getMistralRequestArg(t),{input:n,inputs:r,...o}=e||{};return{input:processInputAttachments(r??n),metadata:addMistralProviderMetadata(extractMistralRequestMetadata(o))}}function extractPromptInputWithMetadata(t){const e=getMistralRequestArg(t),{prompt:n,...r}=e||{};return{input:n,metadata:addMistralProviderMetadata(extractMistralRequestMetadata(r))}}function extractMistralResponseMetadata(t){if(!isObject(t))return;const{choices:e,usage:n,data:r,...o}=t,a=pickAllowedMetadata(o,MISTRAL_RESPONSE_METADATA_ALLOWLIST);return Object.keys(a).length>0?a:void 0}function extractMistralMetrics(t,e){const n=parseMistralMetricsFromUsage(t);return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n}function extractMistralStreamOutput(t){return isObject(t)?t.choices:void 0}function extractClassifierOutput(t){return isObject(t)?t.results:void 0}function extractMistralStreamingMetrics(t,e){const n=isObject(t)?parseMistralMetricsFromUsage(t.usage):{};return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n}function extractDeltaText(t){if("string"==typeof t)return t;if(!Array.isArray(t))return;const e=t.map(t=>isObject(t)&&"text"===t.type&&"string"==typeof t.text?t.text:"").filter(t=>t.length>0);return e.length>0?e.join(""):void 0}function normalizeMistralTextContentPart(t){if(isObject(t)&&"text"===t.type&&"string"==typeof t.text)return{type:"text",text:t.text}}function normalizeMistralThinkingContentPart(t){if(!isObject(t)||"thinking"!==t.type)return;return{type:"thinking",thinking:Array.isArray(t.thinking)?t.thinking.map(t=>normalizeMistralTextContentPart(t)).filter(t=>void 0!==t&&"string"==typeof t.text):[]}}function normalizeMistralContentParts(t){return Array.isArray(t)?t.map(t=>normalizeMistralTextContentPart(t)||normalizeMistralThinkingContentPart(t)).filter(t=>void 0!==t):[]}function mergeMistralTextSegments(t,e){const n=t.map(t=>({...t}));for(const t of e){const e=n[n.length-1];e&&"text"===e.type&&"string"==typeof e.text&&"string"==typeof t.text?e.text+=t.text:n.push({...t})}return n}function mergeMistralContentParts(t,e){const n=[...(t||[]).map(t=>structuredClone(t))];for(const t of e){const e=n[n.length-1];"text"!==t.type||"text"!==e?.type||"string"!=typeof e.text||"string"!=typeof t.text?"thinking"===t.type&&"thinking"===e?.type&&Array.isArray(e.thinking)&&Array.isArray(t.thinking)?e.thinking=mergeMistralTextSegments(e.thinking,t.thinking):n.push(structuredClone(t)):e.text+=t.text}return n}function appendMistralContent(t,e){if("string"==typeof e)return t.contentParts?void(t.contentParts=mergeMistralContentParts(t.contentParts,[{type:"text",text:e}])):void(t.content=`${t.content||""}${e}`);const n=normalizeMistralContentParts(e);if(0===n.length)return;const r=n.some(t=>"text"!==t.type);if(!t.contentParts&&!r){const n=extractDeltaText(e);return void(n&&(t.content=`${t.content||""}${n}`))}t.contentParts=mergeMistralContentParts(t.contentParts||(t.content?[{type:"text",text:t.content}]:[]),n),delete t.content}function getDeltaToolCalls(t){return(Array.isArray(t.toolCalls)&&t.toolCalls||Array.isArray(t.tool_calls)&&t.tool_calls||[]).filter(t=>isObject(t))}function getToolCallIndex(t){return"number"==typeof t.index&&t.index>=0?t.index:void 0}function createMergedToolCallDelta(t){return{...t,function:{...t.function,arguments:"string"==typeof t.function?.arguments?t.function.arguments:""}}}function mergeToolCallDeltaPair(t,e){const n="string"==typeof t.function?.arguments?t.function.arguments:"",r="string"==typeof e.function?.arguments?e.function.arguments:"";return{...t,...e,function:{...t.function||{},...e.function||{},arguments:`${n}${r}`}}}function mergeToolCallDeltas(t,e){if(0===e.length)return t;const n=t?[...t]:[],r=new Map,o=new Map;for(const[t,e]of n.entries()){const n=getToolCallIndex(e);void 0===n||r.has(n)||r.set(n,t),"string"!=typeof e.id||o.has(e.id)||o.set(e.id,t)}for(const t of e){const e=getToolCallIndex(t),a=void 0!==e?r.get(e):void 0,i="string"==typeof t.id?o.get(t.id):void 0,s=a??i;if(void 0===s){const e=createMergedToolCallDelta(t);n.push(e);const a=n.length-1,i=getToolCallIndex(e);void 0===i||r.has(i)||r.set(i,a),"string"!=typeof e.id||o.has(e.id)||o.set(e.id,a);continue}const c=mergeToolCallDeltaPair(n[s],t);n[s]=c;const u=getToolCallIndex(c);void 0===u||r.has(u)||r.set(u,s),"string"!=typeof c.id||o.has(c.id)||o.set(c.id,s)}return n.length>0?n:void 0}function getChoiceFinishReason(t){return"string"==typeof t.finishReason||null===t.finishReason?t.finishReason:"string"==typeof t.finish_reason||null===t.finish_reason?t.finish_reason:void 0}function parseMistralMetricsFromUsage(t){if(!isObject(t))return{};const e={};for(const[n,r]of Object.entries(t)){if("number"==typeof r){e[TOKEN_NAME_MAP4[n]||camelToSnake3(n)]=r;continue}if(!isObject(r))continue;const t=TOKEN_DETAIL_PREFIX_MAP3[n];if(t)for(const[n,o]of Object.entries(r))"number"==typeof o&&(e[`${t}_${camelToSnake3(n)}`]=o)}return e}function aggregateMistralStreamChunks(t){const e=new Map,n=new Map,r=new Map;let o,a=0,i={};for(const s of t){const t=isMistralChatCompletionChunk(s?.data)?s.data:void 0;if(!t)continue;isObject(t.usage)&&(i={...i,...parseMistralMetricsFromUsage(t.usage)});const c=extractMistralResponseMetadata(t);c&&(o={...o||{},...c});for(const[o,i]of(t.choices||[]).entries()){if(!isMistralChunkChoice(i))continue;const t=i,s="number"==typeof t.index&&t.index>=0?t.index:void 0;let c=void 0!==s?n.get(s):void 0;if(c||(c=r.get(o)),!c){const t=s??o;c=`${void 0!==s?"index":"position"}:${t}`,e.set(c,{index:t,order:a++})}const u=e.get(c);if(!u)continue;void 0!==s&&(u.index=s,n.set(s,c)),r.set(o,c);const p=isObject(t.delta)?t.delta:void 0;p&&(u.role||"string"!=typeof p.role||(u.role=p.role),appendMistralContent(u,p.content),u.toolCalls=mergeToolCallDeltas(u.toolCalls,getDeltaToolCalls(p)));const l=getChoiceFinishReason(t);void 0!==l&&(u.finishReason=l)}}return{output:Array.from(e.values()).sort((t,e)=>t.index===e.index?t.order-e.order:t.index-e.index).map(t=>({index:t.index,message:{...t.role?{role:t.role}:{},content:t.contentParts??t.content??null,...t.toolCalls?{toolCalls:t.toolCalls}:{}},...void 0!==t.finishReason?{finishReason:t.finishReason}:{}})),metrics:i,...o?{metadata:o}:{}}}var googleADKChannels=defineChannels("@google/adk",{runnerRunAsync:channel({channelName:"runner.runAsync",kind:"sync-stream"}),agentRunAsync:channel({channelName:"agent.runAsync",kind:"sync-stream"}),toolRunAsync:channel({channelName:"tool.runAsync",kind:"async"})}),GoogleADKPlugin=class extends BasePlugin{activeRunnerSpans=new Map;activeAgentSpans=new Map;onEnable(){this.subscribeToRunnerRunAsync(),this.subscribeToAgentRunAsync(),this.subscribeToToolRunAsync()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[],this.activeRunnerSpans.clear(),this.activeAgentSpans.clear()}subscribeToRunnerRunAsync(){const t=googleADKChannels.runnerRunAsync.tracingChannel(),e=new WeakMap,n=t=>{const e=t.arguments[0]??{},n=extractRunnerContextKey(e),r=startSpan({name:"Google ADK Runner",spanAttributes:{type:"task"}}),o=getCurrentUnixTimestamp();try{const t=extractRunnerMetadata(e);r.log({input:extractRunnerInput(e),metadata:t})}catch{}return n&&this.activeRunnerSpans.set(n,r),{span:r,startTime:o,events:[],contextKey:n}},r=bindCurrentSpanStoreToStart3(t,e,n),o={start:t=>{ensureState(e,t,()=>n(t))},end:t=>{const n=e.get(t);if(!n)return;const r=t.result;if(isAsyncIterable(r))return bindAsyncIterableToCurrentSpan(r,n.span),void patchStreamIfNeeded(r,{onChunk:t=>{n.events.push(t)},onComplete:()=>{finalizeRunnerSpan(n,this.activeRunnerSpans),e.delete(t)},onError:r=>{cleanupActiveRunnerSpan(n,this.activeRunnerSpans),n.span.log({error:r.message}),n.span.end(),e.delete(t)}});try{n.span.log({output:r})}finally{cleanupActiveRunnerSpan(n,this.activeRunnerSpans),n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(cleanupActiveRunnerSpan(n,this.activeRunnerSpans),n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(o),this.unsubscribers.push(()=>{r?.(),t.unsubscribe(o)})}subscribeToAgentRunAsync(){const t=googleADKChannels.agentRunAsync.tracingChannel(),e=new WeakMap,n=t=>{const e=t.arguments[0],n=t.self,r=extractAgentName(n,e),o=findRunnerParentSpan(e,this.activeRunnerSpans),a=extractInvocationContextKey(e),i=startSpan({name:r?`Agent: ${r}`:"Google ADK Agent",spanAttributes:{type:"task"},...o?{parentSpanIds:{spanId:o.spanId,rootSpanId:o.rootSpanId}}:{}}),s=getCurrentUnixTimestamp();try{const t={provider:"google-adk"};r&&(t["google_adk.agent_name"]=r);const o=extractModelName(n,e);o&&(t.model=o),i.log({metadata:t})}catch{}return a&&r&&this.activeAgentSpans.set(agentContextKey(a,r),i),{span:i,startTime:s,events:[],contextKey:a,name:r}},r=bindCurrentSpanStoreToStart3(t,e,n),o={start:t=>{ensureState(e,t,()=>n(t))},end:t=>{const n=e.get(t);if(!n)return;const r=t.result;if(isAsyncIterable(r))return bindAsyncIterableToCurrentSpan(r,n.span),void patchStreamIfNeeded(r,{onChunk:t=>{n.events.push(t)},onComplete:()=>{finalizeAgentSpan(n,this.activeAgentSpans),e.delete(t)},onError:r=>{cleanupActiveAgentSpan(n,this.activeAgentSpans),n.span.log({error:r.message}),n.span.end(),e.delete(t)}});try{n.span.log({output:r})}finally{cleanupActiveAgentSpan(n,this.activeAgentSpans),n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(cleanupActiveAgentSpan(n,this.activeAgentSpans),n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(o),this.unsubscribers.push(()=>{r?.(),t.unsubscribe(o)})}subscribeToToolRunAsync(){const t=googleADKChannels.toolRunAsync.tracingChannel(),e=new WeakMap,n={start:t=>{const n=t.arguments[0]??{},r=t.self,o=extractToolName2(n,r),a=findToolParentSpan(n,this.activeAgentSpans,this.activeRunnerSpans),i=()=>startSpan({name:o?`tool: ${o}`:"Google ADK Tool",spanAttributes:{type:"tool"},event:{input:n.args,metadata:{provider:"google-adk",...o&&{"google_adk.tool_name":o},...extractToolCallId(n)&&{"google_adk.tool_call_id":extractToolCallId(n)}}}}),s=a?withCurrent(a,()=>i()):i(),c=getCurrentUnixTimestamp();e.set(t,{span:s,startTime:c})},asyncEnd:t=>{const n=e.get(t);if(n)try{const e={},r=getCurrentUnixTimestamp();e.start=n.startTime,e.end=r,e.duration=r-n.startTime,n.span.log({output:t.result,metrics:cleanMetrics4(e)})}finally{n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(n),this.unsubscribers.push(()=>{t.unsubscribe(n)})}};function ensureState(t,e,n){const r=t.get(e);if(r)return r;const o=n();return t.set(e,o),o}function bindAsyncIterableToCurrentSpan(t,e){if(!isAsyncIterable(t))return t;if(Object.isFrozen(t)||Object.isSealed(t))return t;if("next"in t&&"function"==typeof t.next){if("__braintrust_current_span_bound"in t)return t;try{const n=t,r=n.next.bind(n);if(n.next=(...t)=>withCurrent(e,()=>r(...t)),"function"==typeof n.return){const t=n.return.bind(n);n.return=(...n)=>withCurrent(e,()=>t(...n))}if("function"==typeof n.throw){const t=n.throw.bind(n);n.throw=(...n)=>withCurrent(e,()=>t(...n))}return Object.defineProperty(t,"__braintrust_current_span_bound",{value:!0}),t}catch{return t}}const n=t[Symbol.asyncIterator];if("__braintrust_current_span_bound"in n&&n.__braintrust_current_span_bound)return t;try{const r=function(){const t=n.call(this),r=t.next.bind(t);if(t.next=(...t)=>withCurrent(e,()=>r(...t)),"function"==typeof t.return){const n=t.return.bind(t);t.return=(...t)=>withCurrent(e,()=>n(...t))}if("function"==typeof t.throw){const n=t.throw.bind(t);t.throw=(...t)=>withCurrent(e,()=>n(...t))}return t};Object.defineProperty(r,"__braintrust_current_span_bound",{value:!0}),t[Symbol.asyncIterator]=r}catch{return t}return t}function bindCurrentSpanStoreToStart3(t,e,n){const r=_internalGetGlobalState(),o=r?.contextManager,a=t.start,i=o?o[BRAINTRUST_CURRENT_SPAN_STORE]:void 0;if(a?.bindStore&&i)return a.bindStore(i,t=>{const r=ensureState(e,t,()=>n(t)).span;return o.wrapSpanForStore(r)}),()=>{a.unbindStore?.(i)}}function extractRunnerContextKey(t){const e="userId"in t?t.userId:void 0,n="sessionId"in t?t.sessionId:void 0;if("string"==typeof e&&"string"==typeof n)return`${e}:${n}`;return extractInvocationContextKey(t)}function extractInvocationContextKey(t){const e=t?.session,n=e?.userId,r=e?.id;if("string"==typeof n&&"string"==typeof r)return`${n}:${r}`}function findRunnerParentSpan(t,e){const n=extractInvocationContextKey(t);return n?e.get(n):void 0}function cleanupActiveRunnerSpan(t,e){t.contextKey&&e.delete(t.contextKey)}function agentContextKey(t,e){return`${t}:${e}`}function cleanupActiveAgentSpan(t,e){t.contextKey&&t.name&&e.delete(agentContextKey(t.contextKey,t.name))}function extractRunnerInput(t){const e="newMessage"in t?t.newMessage:t.userContent;if(!e||"object"!=typeof e)return;const n=e;if(n.parts&&Array.isArray(n.parts)){const t=n.parts.filter(t=>void 0!==t.text).map(t=>t.text);if(t.length>0)return{messages:[{role:n.role??"user",content:t.join("")}]}}return{messages:[n]}}function extractRunnerMetadata(t){const e={provider:"google-adk"},n="userId"in t?t.userId:void 0,r="sessionId"in t?t.sessionId:void 0;"string"==typeof n&&(e["google_adk.user_id"]=n),"string"==typeof r&&(e["google_adk.session_id"]=r);const o="session"in t?t.session:void 0;return void 0===e["google_adk.user_id"]&&"string"==typeof o?.userId&&(e["google_adk.user_id"]=o.userId),void 0===e["google_adk.session_id"]&&"string"==typeof o?.id&&(e["google_adk.session_id"]=o.id),e}function extractAgentName(t,e){if("string"==typeof t?.name&&t.name.length>0)return t.name;if(!e)return;const n=e.agent;return"string"==typeof n?.name&&n.name.length>0?n.name:void 0}function extractModelName(t,e){const n=t??e?.agent;if(n?.model)return"string"==typeof n.model?n.model:"object"==typeof n.model&&"model"in n.model?n.model.model:void 0}function extractToolCallId(t){const e=t.toolContext;return e?.functionCallId}function extractToolName2(t,e){if("string"==typeof e?.name&&e.name.length>0)return e.name;const n=t.toolContext,r=n?.invocationContext,o=r?.tool,a=o?.name;return"string"==typeof a&&a.length>0?a:void 0}function extractToolAgentName(t){const e=t.toolContext,n=e?.agentName;if("string"==typeof n&&n.length>0)return n;const r=e?.invocationContext;return extractAgentName(void 0,r)}function findToolParentSpan(t,e,n){const r=t.toolContext,o=r?.invocationContext,a=extractInvocationContextKey(o),i=extractToolAgentName(t);if(a&&i){const t=e.get(agentContextKey(a,i));if(t)return t}return a?n.get(a):void 0}function finalizeRunnerSpan(t,e){try{const e=getLastNonPartialEvent(t.events),n={},r=getCurrentUnixTimestamp();n.start=t.startTime,n.end=r,n.duration=r-t.startTime;const o=aggregateUsageFromEvents(t.events);o&&populateUsageMetrics2(n,o),t.span.log({output:e?extractEventOutput(e):void 0,metrics:cleanMetrics4(n)})}finally{cleanupActiveRunnerSpan(t,e),t.span.end()}}function finalizeAgentSpan(t,e){try{const e=getLastNonPartialEvent(t.events),n={},r=getCurrentUnixTimestamp();n.start=t.startTime,n.end=r,n.duration=r-t.startTime,t.span.log({output:e?extractEventOutput(e):void 0,metrics:cleanMetrics4(n)})}finally{cleanupActiveAgentSpan(t,e),t.span.end()}}function getLastNonPartialEvent(t){for(let e=t.length-1;e>=0;e--)if(!t[e].partial)return t[e];return t.length>0?t[t.length-1]:void 0}function extractEventOutput(t){if(!t.content)return;const e={};if(t.content.role&&(e.role=t.content.role),t.content.parts&&Array.isArray(t.content.parts)){const n=t.content.parts.filter(t=>void 0!==t.text&&!t.thought).map(t=>t.text),r=t.content.parts.filter(t=>void 0!==t.text&&t.thought).map(t=>t.text),o=t.content.parts.filter(t=>t.functionCall).map(t=>t.functionCall);n.length>0&&(e.content=n.join("")),r.length>0&&(e.thought=r.join("")),o.length>0&&(e.functionCalls=o)}return t.author&&(e.author=t.author),Object.keys(e).length>0?e:void 0}function aggregateUsageFromEvents(t){let e=!1;const n={};for(const r of t){if(!r.usageMetadata)continue;e=!0;const t=r.usageMetadata;void 0!==t.promptTokenCount&&(n.promptTokenCount=(n.promptTokenCount??0)+t.promptTokenCount),void 0!==t.candidatesTokenCount&&(n.candidatesTokenCount=(n.candidatesTokenCount??0)+t.candidatesTokenCount),void 0!==t.totalTokenCount&&(n.totalTokenCount=(n.totalTokenCount??0)+t.totalTokenCount),void 0!==t.cachedContentTokenCount&&(n.cachedContentTokenCount=(n.cachedContentTokenCount??0)+t.cachedContentTokenCount),void 0!==t.thoughtsTokenCount&&(n.thoughtsTokenCount=(n.thoughtsTokenCount??0)+t.thoughtsTokenCount)}return e?n:void 0}function populateUsageMetrics2(t,e){void 0!==e.promptTokenCount&&(t.prompt_tokens=e.promptTokenCount),void 0!==e.candidatesTokenCount&&(t.completion_tokens=e.candidatesTokenCount),void 0!==e.totalTokenCount&&(t.tokens=e.totalTokenCount),void 0!==e.cachedContentTokenCount&&(t.prompt_cached_tokens=e.cachedContentTokenCount),void 0!==e.thoughtsTokenCount&&(t.completion_reasoning_tokens=e.thoughtsTokenCount)}function cleanMetrics4(t){const e={};for(const[n,r]of Object.entries(t))null!=r&&(e[n]=r);return e}var cohereChannels=defineChannels("cohere-ai",{chat:channel({channelName:"chat",kind:"async"}),chatStream:channel({channelName:"chatStream",kind:"async"}),embed:channel({channelName:"embed",kind:"async"}),rerank:channel({channelName:"rerank",kind:"async"})}),CoherePlugin=class extends BasePlugin{onEnable(){this.subscribeToCohereChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToCohereChannels(){this.unsubscribers.push(traceStreamingChannel(cohereChannels.chat,{name:"cohere.chat",type:"llm",extractInput:extractChatInputWithMetadata2,extractOutput:t=>extractCohereChatOutput(t),extractMetadata:t=>extractCohereResponseMetadata(t),extractMetrics:(t,e)=>{const n=parseCohereMetricsFromUsage(t);return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n}})),this.unsubscribers.push(traceStreamingChannel(cohereChannels.chatStream,{name:"cohere.chatStream",type:"llm",extractInput:extractChatInputWithMetadata2,extractOutput:()=>{},extractMetadata:()=>{},extractMetrics:()=>({}),aggregateChunks:aggregateCohereChatStreamChunks})),this.unsubscribers.push(traceAsyncChannel(cohereChannels.embed,{name:"cohere.embed",type:"llm",extractInput:extractEmbedInputWithMetadata,extractOutput:extractCohereEmbeddingOutput,extractMetadata:t=>extractCohereResponseMetadata(t),extractMetrics:t=>parseCohereMetricsFromUsage(t)})),this.unsubscribers.push(traceAsyncChannel(cohereChannels.rerank,{name:"cohere.rerank",type:"llm",extractInput:extractRerankInputWithMetadata,extractOutput:t=>{if(isObject(t)&&Array.isArray(t.results))return t.results.slice(0,100).map(t=>({index:isObject(t)?t.index:void 0,relevance_score:isObject(t)?("number"==typeof t.relevanceScore?t.relevanceScore:t.relevance_score)??null:null}))},extractMetadata:t=>extractCohereResponseMetadata(t),extractMetrics:t=>parseCohereMetricsFromUsage(t)}))}},CHAT_REQUEST_METADATA_ALLOWLIST=new Set(["conversationId","conversation_id","frequencyPenalty","frequency_penalty","k","maxInputTokens","max_input_tokens","maxTokens","max_tokens","model","p","preamble","presencePenalty","presence_penalty","priority","promptTruncation","prompt_truncation","rawPrompting","raw_prompting","responseFormat","response_format","safetyMode","safety_mode","searchQueriesOnly","search_queries_only","seed","stopSequences","stop_sequences","strictTools","strict_tools","temperature","thinking","thinkingTokenBudget","thinkingType","thinking_token_budget","thinking_type","toolChoice","tool_choice"]),EMBED_REQUEST_METADATA_ALLOWLIST=new Set(["embeddingTypes","embedding_types","inputType","input_type","maxTokens","max_tokens","model","outputDimension","output_dimension","priority","truncate"]),RERANK_REQUEST_METADATA_ALLOWLIST=new Set(["maxChunksPerDoc","max_chunks_per_doc","maxTokensPerDoc","max_tokens_per_doc","model","priority","rankFields","rank_fields","returnDocuments","return_documents","topN","top_n"]),RESPONSE_METADATA_ALLOWLIST2=new Set(["finishReason","finish_reason","generationId","generation_id","id","responseId","responseType","response_id","response_type"]);function normalizeArgs5(t){return Array.isArray(t)?t:isArrayLike5(t)?Array.from(t):[t]}function isArrayLike5(t){return isObject(t)&&"length"in t&&"number"==typeof t.length&&Number.isInteger(t.length)&&t.length>=0}function getRequestArg(t){const e=normalizeArgs5(t).find(t=>isObject(t));return isObject(e)?e:void 0}function addCohereProviderMetadata(t){return{...t,provider:"cohere"}}function pickAllowedMetadata2(t,e){if(!t)return{};const n={};for(const r of e){const e=t[r];void 0!==e&&(n[r]=e)}return n}function extractChatInputWithMetadata2(t){const e=getRequestArg(t),{message:n,messages:r,...o}=e||{};return{input:processInputAttachments(r??n),metadata:addCohereProviderMetadata(pickAllowedMetadata2(o,CHAT_REQUEST_METADATA_ALLOWLIST))}}function extractEmbedInputWithMetadata(t){const e=getRequestArg(t),{inputs:n,texts:r,images:o,...a}=e||{};return{input:n??r??o,metadata:addCohereProviderMetadata(pickAllowedMetadata2(a,EMBED_REQUEST_METADATA_ALLOWLIST))}}function extractRerankInputWithMetadata(t){const e=getRequestArg(t),{query:n,documents:r,...o}=e||{};return{input:{documents:r,query:n},metadata:addCohereProviderMetadata({...pickAllowedMetadata2(o,RERANK_REQUEST_METADATA_ALLOWLIST),...Array.isArray(r)?{document_count:r.length}:{}})}}function extractCohereResponseMetadata(t){if(!isObject(t))return;const e=pickAllowedMetadata2(t,RESPONSE_METADATA_ALLOWLIST2),n=isObject(t.meta)?t.meta:void 0,r=isObject(n?.apiVersion)&&"string"==typeof n.apiVersion.version&&n.apiVersion.version||isObject(n?.api_version)&&"string"==typeof n.api_version.version&&n.api_version.version,o={...e,...r?{api_version:r}:{}};return Object.keys(o).length>0?o:void 0}function extractCohereChatOutput(t){if(!isObject(t))return;if(isObject(t.message))return t.message;if("string"!=typeof t.text)return;const e=Array.isArray(t.toolCalls)?t.toolCalls:Array.isArray(t.tool_calls)?t.tool_calls:void 0;return e&&e.length>0?{content:t.text,role:"assistant",toolCalls:e}:t.text}function extractCohereEmbeddingOutput(t){if(!isObject(t))return;const e=getFirstEmbeddingLength(t.embeddings);return void 0!==e?{embedding_length:e}:void 0}function getFirstEmbeddingLength(t){if(Array.isArray(t)&&Array.isArray(t[0]))return t[0].length;if(isObject(t))for(const e of Object.keys(t)){const n=t[e];if(Array.isArray(n)&&Array.isArray(n[0]))return n[0].length}}function setMetricIfNumber(t,e,n){"number"==typeof n&&Number.isFinite(n)&&(t[e]=n)}function mergeUsageMetrics(t,e){if(!isObject(e))return t;const n=e;setMetricIfNumber(t,"prompt_tokens",n.inputTokens??n.input_tokens),setMetricIfNumber(t,"completion_tokens",n.outputTokens??n.output_tokens),setMetricIfNumber(t,"tokens",n.totalTokens??n.total_tokens),setMetricIfNumber(t,"prompt_cached_tokens",n.cachedTokens??n.cached_tokens);const r=isObject(n.tokens)?n.tokens:void 0;r&&(setMetricIfNumber(t,"prompt_tokens",r.inputTokens??r.input_tokens),setMetricIfNumber(t,"completion_tokens",r.outputTokens??r.output_tokens),setMetricIfNumber(t,"tokens",r.totalTokens??r.total_tokens),setMetricIfNumber(t,"reasoning_tokens",r.reasoningTokens??r.reasoning_tokens??r.thinkingTokens??r.thinking_tokens));const o=(isObject(n.billedUnits)?n.billedUnits:void 0)||(isObject(n.billed_units)?n.billed_units:void 0);return o&&(setMetricIfNumber(t,"prompt_tokens",o.inputTokens??o.input_tokens),setMetricIfNumber(t,"completion_tokens",o.outputTokens??o.output_tokens),setMetricIfNumber(t,"search_units",o.searchUnits??o.search_units),setMetricIfNumber(t,"classifications",o.classifications),setMetricIfNumber(t,"images",o.images),setMetricIfNumber(t,"image_tokens",o.imageTokens??o.image_tokens)),t}function parseCohereMetricsFromUsage(t){if(!isObject(t))return{};const e={};return mergeUsageMetrics(e,t),"usage"in t&&mergeUsageMetrics(e,t.usage),"meta"in t&&mergeUsageMetrics(e,t.meta),void 0===e.tokens&&"number"==typeof e.prompt_tokens&&"number"==typeof e.completion_tokens&&(e.tokens=e.prompt_tokens+e.completion_tokens),e}function toToolCallArray(t){return Array.isArray(t)?t.filter(t=>isObject(t)):isObject(t)?[t]:[]}function getToolCallIndex2(t,e){return"number"==typeof t.index&&Number.isInteger(t.index)?t.index:e}function appendToolCallDelta(t,e){const n=isObject(t?.function)&&"string"==typeof t.function.arguments?t.function.arguments:"",r=isObject(e.function)&&"string"==typeof e.function.arguments?e.function.arguments:"";return{...t,...e,function:{...isObject(t?.function)?t.function:{},...isObject(e.function)?e.function:{},...r?{arguments:`${n}${r}`}:{}}}}function extractV8DeltaText(t){if(!isObject(t.delta)||!isObject(t.delta.message))return;const e=t.delta.message.content;return"string"==typeof e?e:isObject(e)&&"string"==typeof e.text?e.text:void 0}function getV8ContentIndex(t){return"number"==typeof t.index?t.index:0}function toContentBlockType(t){return"text"===t||"thinking"===t?t:void 0}function getOrCreateContentBlock(t,e,n){return e.includes(n)||e.push(n),n in t||(t[n]={text:"",thinking:""}),t[n]}function appendV8ContentBlock(t,e,n,r){if("string"==typeof r){const o=getOrCreateContentBlock(t,e,n);return o.type??="text",void(o.text+=r)}if(!isObject(r))return;const o=getOrCreateContentBlock(t,e,n),a=toContentBlockType(r.type);a&&(o.type=a),"string"==typeof r.text&&(o.type??="text",o.text+=r.text),"string"==typeof r.thinking&&(o.type??="thinking",o.thinking+=r.thinking)}function serializeAggregatedContentBlocks(t,e){return e.sort((t,e)=>t-e).flatMap(e=>{const n=t[e];return n?"thinking"===n.type&&n.thinking.length>0?[{type:"thinking",thinking:n.thinking}]:n.text.length>0?[{type:"text",text:n.text}]:n.thinking.length>0?[{type:"thinking",thinking:n.thinking}]:[]:[]})}function hasThinkingContent(t){return t.some(t=>"thinking"===t.type)}function aggregateCohereChatStreamChunks(t){const e=[],n={},r=[],o={},a=[];let i,s,c,u="",p={},l={};for(const d of t){if(!isObject(d))continue;const t="string"==typeof d.eventType?d.eventType:"string"==typeof d.event_type?d.event_type:"string"==typeof d.type?d.type:void 0;if("text-generation"!==t||"string"!=typeof d.text){if("tool-calls-generation"===t){const t=toToolCallArray(Array.isArray(d.toolCalls)?d.toolCalls:d.tool_calls);for(const[e,n]of t.entries()){const t=getToolCallIndex2(n,e);a.includes(t)||a.push(t),o[t]={...o[t],...n}}"string"==typeof d.text&&e.push(d.text);continue}if("stream-end"===t&&isObject(d.response)){i=d.response,l={...l,...parseCohereMetricsFromUsage(d.response)},p={...p,...extractCohereResponseMetadata(d.response)||{}};c=("string"==typeof d.response.finishReason?d.response.finishReason:"string"==typeof d.response.finish_reason?d.response.finish_reason:void 0)??c;continue}if("message-start"!==t){if("content-delta"===t){appendV8ContentBlock(n,r,getV8ContentIndex(d),isObject(d.delta)&&isObject(d.delta.message)?d.delta.message.content:void 0);const t=extractV8DeltaText(d);t&&e.push(t);continue}if("content-start"!==t){if("tool-plan-delta"!==t){if("tool-call-start"===t){const t=isObject(d.delta)&&isObject(d.delta.message)?toToolCallArray(Array.isArray(d.delta.message.toolCalls)?d.delta.message.toolCalls:d.delta.message.toolCalls??d.delta.message.tool_calls):[];for(const[e,n]of t.entries()){const t=getToolCallIndex2(n,"number"==typeof d.index?d.index:e);a.includes(t)||a.push(t),o[t]={...o[t],...n}}continue}if("tool-call-delta"===t){const t=isObject(d.delta)&&isObject(d.delta.message)?toToolCallArray(d.delta.message.toolCalls??d.delta.message.tool_calls):[];if(t.length>0){const e=t[0],n=getToolCallIndex2(e,d.index??0);a.includes(n)||a.push(n),o[n]=appendToolCallDelta(o[n],e)}continue}if("message-end"===t&&isObject(d.delta)){const t=d.delta;"string"==typeof t.finishReason?c=t.finishReason:"string"==typeof t.finish_reason&&(c=t.finish_reason),void 0!==t.error&&(p.error=t.error),l={...l,...parseCohereMetricsFromUsage(t.usage)}}}else if(isObject(d.delta)&&isObject(d.delta.message)){const t="string"==typeof d.delta.message.toolPlan?d.delta.message.toolPlan:"string"==typeof d.delta.message.tool_plan?d.delta.message.tool_plan:void 0;t&&(u+=t)}}else appendV8ContentBlock(n,r,getV8ContentIndex(d),isObject(d.delta)&&isObject(d.delta.message)?d.delta.message.content:void 0)}else if("string"==typeof d.id&&(p.id=d.id),isObject(d.delta)&&isObject(d.delta.message)){const t=d.delta.message.role;"string"==typeof t&&(s=t)}}else e.push(d.text)}const d=a.sort((t,e)=>t-e).map(t=>o[t]).filter(t=>isObject(t)),m=serializeAggregatedContentBlocks(n,r);let g=extractCohereChatOutput(i);if(void 0===g){const t=e.join("");if(hasThinkingContent(m)||u.length>0)g={...s?{role:s}:{},...m.length>0?{content:m}:{},...u.length>0?{toolPlan:u}:{},...d.length>0?{toolCalls:d}:{}};else if(d.length>0||s||t.length>0||m.length>0){const e=t.length>0?t:"text"===m[0]?.type?m[0].text:void 0;g={...s?{role:s}:{},...e?{content:e}:{},...d.length>0?{toolCalls:d}:{}}}}return c&&(p={...p,finish_reason:c}),{metadata:p,metrics:l,output:g}}var groqChannels=defineChannels("groq-sdk",{chatCompletionsCreate:channel({channelName:"chat.completions.create",kind:"async"}),embeddingsCreate:channel({channelName:"embeddings.create",kind:"async"})}),GroqPlugin=class extends BasePlugin{onEnable(){this.unsubscribers.push(traceStreamingChannel(groqChannels.chatCompletionsCreate,{name:"groq.chat.completions.create",type:"llm",extractInput:([t])=>{const{messages:e,...n}=t;return{input:processInputAttachments(e),metadata:{...n,provider:"groq"}}},extractOutput:t=>t?.choices,extractMetrics:(t,e)=>{const n=parseGroqMetrics(t);return e&&(n.time_to_first_token=getCurrentUnixTimestamp()-e),n},aggregateChunks:aggregateGroqChatCompletionChunks})),this.unsubscribers.push(traceAsyncChannel(groqChannels.embeddingsCreate,{name:"groq.embeddings.create",type:"llm",extractInput:([t])=>{const{input:e,...n}=t;return{input:e,metadata:{...n,provider:"groq"}}},extractOutput:t=>{const e=t?.data?.[0]?.embedding;return Array.isArray(e)?{embedding_length:e.length}:void 0},extractMetrics:t=>parseGroqMetrics(t)}))}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}};function parseGroqMetrics(t){const e=parseMetricsFromUsage(t?.usage),n=t?.x_groq;if(!n||"object"!=typeof n)return e;const r="usage"in n?n.usage:void 0;if(!r||"object"!=typeof r)return e;const o=r.dram_cached_tokens,a=r.sram_cached_tokens;return{...e,..."number"==typeof o?{dram_cached_tokens:o}:{},..."number"==typeof a?{sram_cached_tokens:a}:{}}}function aggregateGroqChatCompletionChunks(t,e,n){const r=aggregateChatCompletionChunks(t,e,n),o=aggregateGroqReasoning(t);if(void 0!==o){const t=r.output[0]?.message;t&&(t.reasoning=o)}return{metrics:r.metrics,output:r.output}}function aggregateGroqReasoning(t){let e="";for(const n of t){const t=n.choices?.[0]?.delta,r=t?.reasoning;"string"==typeof r&&(e+=r)}return e.length>0?e:void 0}var clientSendChannel=channel({channelName:"client.send",kind:"async"}),bedrockRuntimeChannels=defineChannels("aws-bedrock-runtime",{clientSend:clientSendChannel}),smithyCoreChannels=defineChannels("@smithy/core",{clientSend:clientSendChannel}),smithyClientChannels=defineChannels("@smithy/smithy-client",{clientSend:clientSendChannel}),BEDROCK_RUNTIME_COMMAND_OPERATIONS={ConverseCommand:"converse",ConverseStreamCommand:"converseStream",InvokeModelCommand:"invokeModel",InvokeModelWithBidirectionalStreamCommand:"invokeModelWithBidirectionalStream",InvokeModelWithResponseStreamCommand:"invokeModelWithResponseStream"};function getBedrockRuntimeCommandName(t){if(!isObject(t)||!isObject(t.constructor))return;const e=t.input;if(!isObject(e)||"string"!=typeof e.modelId)return;const n=t.constructor.name;return isBedrockRuntimeCommandName(n)?n:void 0}function getBedrockRuntimeOperation(t){const e=getBedrockRuntimeCommandName(t);return e?BEDROCK_RUNTIME_COMMAND_OPERATIONS[e]:void 0}function getBedrockRuntimeCommandInput(t){return isObject(t)?t.input:void 0}function buildBedrockRuntimeSpanInfo(t){const e=getBedrockRuntimeCommandName(t),n=getBedrockRuntimeOperation(t);return{name:n?`bedrock.${n}`:"bedrock.client.send",metadata:{...e?{command:e}:{},...n?{operation:n}:{}}}}function isBedrockRuntimeCommandName(t){return"ConverseCommand"===t||"ConverseStreamCommand"===t||"InvokeModelCommand"===t||"InvokeModelWithBidirectionalStreamCommand"===t||"InvokeModelWithResponseStreamCommand"===t}var BedrockRuntimePlugin=class extends BasePlugin{onEnable(){this.unsubscribers.push(...[bedrockRuntimeChannels.clientSend,smithyCoreChannels.clientSend,smithyClientChannels.clientSend].map(t=>traceBedrockRuntimeClientSendChannel(t)))}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}};function traceBedrockRuntimeClientSendChannel(t){return traceStreamingChannel(t,{name:([t])=>buildBedrockRuntimeSpanInfo(t).name,shouldTrace:([t,e,n])=>void 0!==getBedrockRuntimeOperation(t)&&"function"!=typeof e&&"function"!=typeof n,type:"llm",extractInput:([t])=>extractBedrockRuntimeInput(t),extractOutput:(t,e)=>extractBedrockRuntimeOutput(e?.arguments?.[0],t),extractMetadata:(t,e)=>extractBedrockRuntimeResponseMetadata(e?.arguments?.[0],t),extractMetrics:t=>extractBedrockRuntimeResponseMetrics(t),patchResult:({endEvent:t,result:e,span:n,startTime:r})=>patchBedrockRuntimeStreamingResult({command:t.arguments?.[0],result:e,span:n,startTime:r})})}function extractBedrockRuntimeInput(t){const e=getBedrockRuntimeOperation(t),n=getBedrockRuntimeCommandName(t),r=getBedrockRuntimeCommandInput(t),o={provider:"aws-bedrock",...n?{command:n}:{},...e?{operation:e}:{},...extractBedrockRuntimeRequestMetadata(r)};if("converse"===e||"converseStream"===e){const t=isObject(r)?r:void 0;return{input:sanitizeBedrockValue({messages:t?.messages,system:t?.system}),metadata:o}}if("invokeModel"===e||"invokeModelWithBidirectionalStream"===e||"invokeModelWithResponseStream"===e){const t=isObject(r)?r:void 0;return{input:parseJsonBody(t?.body)??summarizeBody(t?.body),metadata:o}}return{input:sanitizeBedrockValue(r),metadata:o}}function extractBedrockRuntimeRequestMetadata(t){if(!isObject(t))return{};const e={};for(const n of["modelId","contentType","accept","trace","guardrailIdentifier","guardrailVersion","performanceConfig","performanceConfigLatency","serviceTier"]){const r=t[n];void 0!==r&&(e["modelId"===n?"model":n]=r)}return isObject(t.inferenceConfig)&&Object.assign(e,sanitizeBedrockValue(t.inferenceConfig)),e}function extractBedrockRuntimeOutput(t,e){const n=getBedrockRuntimeOperation(t);if("converse"===n)return sanitizeBedrockValue(e?.output?.message);if("invokeModel"===n){const t=isObject(e)?e:void 0;return parseJsonBody(t?.body)??summarizeBody(t?.body)}return sanitizeBedrockValue(e)}function extractBedrockRuntimeResponseMetadata(t,e){const n=getBedrockRuntimeOperation(t);if(!isObject(e))return;const r={};for(const t of["stopReason","contentType","performanceConfig","performanceConfigLatency","serviceTier"]){const n=e[t];void 0!==n&&(r[t]=n)}return"converse"===n&&void 0!==e.additionalModelResponseFields&&(r.additionalModelResponseFields=sanitizeBedrockValue(e.additionalModelResponseFields)),Object.keys(r).length>0?r:void 0}function extractBedrockRuntimeResponseMetrics(t){if(!isObject(t))return{};const e=parseJsonBody(t.body);if(isObject(e)){const t=isObject(e.metadata)?e.metadata:void 0,n=parseBedrockRuntimeMetrics(e.usage??t?.usage,e.metrics??t?.metrics);if(Object.keys(n).length>0)return n}return parseBedrockRuntimeMetrics(t.usage,t.metrics)}function parseBedrockRuntimeMetrics(t,e){const n={},r=isObject(t)?t:{},o=firstNumber3(r.inputTokens,r.inputTokenCount,r.input_tokens,r.prompt_tokens);void 0!==o&&(n.prompt_tokens=o);const a=firstNumber3(r.outputTokens,r.outputTokenCount,r.output_tokens,r.completion_tokens);void 0!==a&&(n.completion_tokens=a);const i=firstNumber3(r.totalTokens,r.totalTokenCount,r.total_tokens,r.tokens);void 0!==i&&(n.tokens=i);const s=firstNumber3(r.cacheReadInputTokens,r.cacheReadInputTokenCount,r.cache_read_input_tokens,r.prompt_cached_tokens);void 0!==s&&(n.prompt_cached_tokens=s);const c=firstNumber3(r.cacheWriteInputTokens,r.cacheWriteInputTokenCount,r.cache_write_input_tokens,r.cache_creation_input_tokens,r.prompt_cache_creation_tokens);if(void 0!==c&&(n.prompt_cache_creation_tokens=c),void 0===n.tokens){const t=[o,a,s,c].filter(t=>void 0!==t);t.length>0&&(n.tokens=t.reduce((t,e)=>t+e,0))}return isObject(e)&&"number"==typeof e.latencyMs&&(n.latency_ms=e.latencyMs),n}function firstNumber3(...t){return t.find(t=>"number"==typeof t)}function patchBedrockRuntimeStreamingResult(t){const e=getBedrockRuntimeOperation(t.command);return!!isObject(t.result)&&("converseStream"===e&&isAsyncIterable(t.result.stream)?(patchConverseStream(t.result.stream,t.span,t.startTime),!0):!("invokeModelWithBidirectionalStream"!==e&&"invokeModelWithResponseStream"!==e||!isAsyncIterable(t.result.body))&&(patchInvokeModelResponseStream(t.result.body,t.span,t.startTime),!0))}function patchConverseStream(t,e,n){let r;patchStreamIfNeeded(t,{onChunk:t=>{void 0===r&&isObject(t.contentBlockDelta)&&(r=getCurrentUnixTimestamp())},onComplete:t=>{const o=aggregateBedrockConverseStreamChunks(t),a={...o.metrics};void 0!==r&&(a.time_to_first_token=r-n),logBedrockStreamAggregation(e,o,a),e.end()},onError:t=>{e.log({error:t.message}),e.end()}})}function patchInvokeModelResponseStream(t,e,n){let r;patchStreamIfNeeded(t,{onChunk:t=>{void 0===r&&isObject(t.chunk)&&(r=getCurrentUnixTimestamp())},onComplete:t=>{const o=aggregateInvokeModelResponseStreamChunks(t),a={...o.metrics};void 0!==r&&(a.time_to_first_token=r-n),logBedrockStreamAggregation(e,o,a),e.end()},onError:t=>{e.log({error:t.message}),e.end()}})}var BEDROCK_STREAM_EXCEPTION_KEYS=["internalServerException","modelStreamErrorException","validationException","throttlingException","modelTimeoutException","serviceUnavailableException"];function aggregateBedrockConverseStreamChunks(t){let e,n,r,o;const a=new Map,i={};for(const s of t){const t=extractBedrockStreamException(s);if(t)return t;"string"==typeof s.messageStart?.role&&(e=s.messageStart.role);const c=s.contentBlockStart?.contentBlockIndex;"number"==typeof c&&a.set(c,{...a.get(c)??{},...sanitizeRecord(s.contentBlockStart?.start)});const u=s.contentBlockDelta?.contentBlockIndex,p=s.contentBlockDelta?.delta;if("number"==typeof u&&isObject(p)){const t=a.get(u)??{};a.set(u,mergeContentBlockDelta(t,p))}"string"==typeof s.messageStop?.stopReason&&(n=s.messageStop.stopReason),void 0!==s.messageStop?.additionalModelResponseFields&&(i.additionalModelResponseFields=sanitizeBedrockValue(s.messageStop.additionalModelResponseFields)),void 0!==s.metadata?.usage&&(r=s.metadata.usage),void 0!==s.metadata?.metrics&&(o=s.metadata.metrics),void 0!==s.metadata?.performanceConfig&&(i.performanceConfig=sanitizeBedrockValue(s.metadata.performanceConfig)),void 0!==s.metadata?.serviceTier&&(i.serviceTier=s.metadata.serviceTier)}void 0!==n&&(i.stopReason=n);return{output:{role:e,content:[...a.entries()].sort(([t],[e])=>t-e).map(([,t])=>t).filter(t=>Object.keys(t).length>0)},metrics:parseBedrockRuntimeMetrics(r,o),...Object.keys(i).length>0?{metadata:i}:{}}}function aggregateInvokeModelResponseStreamChunks(t){for(const e of t){const t=extractBedrockStreamException(e);if(t)return t}const e=t.map(t=>parseJsonBody(t.chunk?.bytes)).filter(t=>void 0!==t),n=e.filter(isObject),r=e.map(extractTextFromJsonLike).join(""),o=n.slice().reverse().find(t=>isObject(t.metadata)),a=isObject(o?.metadata)?sanitizeRecord(o.metadata):void 0;let i;for(const t of n){const e=t.message;for(const n of[isObject(t.usage)?t.usage:void 0,isObject(e)&&isObject(e.usage)?e.usage:void 0])void 0!==n&&(i={...i,...sanitizeRecord(n)})}return{output:r.length>0?{text:r}:{chunk_count:t.length,chunks:sanitizeBedrockValue((n.length>0?n:t).slice(0,20))},metrics:parseBedrockRuntimeMetrics(i??(isObject(a)?a.usage:void 0),isObject(a)?a.metrics:void 0),...a?{metadata:a}:{}}}function logBedrockStreamAggregation(t,e,n){t.log(void 0!==e.error?{error:e.error,...e.metadata?{metadata:e.metadata}:{},metrics:n}:{output:e.output,...e.metadata?{metadata:e.metadata}:{},metrics:n})}function extractBedrockStreamException(t){if(isObject(t))for(const[e,n]of Object.entries(t)){if(!isBedrockStreamExceptionKey(e)||!isObject(n))continue;const t="string"==typeof n.name?n.name:e,r="string"==typeof n.message?n.message:"string"==typeof n.originalMessage?n.originalMessage:void 0,o={exception:e};return"string"==typeof n.name&&(o.exceptionName=n.name),"string"==typeof n.$fault&&(o.fault=n.$fault),"string"==typeof n.originalMessage&&(o.originalMessage=n.originalMessage),"number"==typeof n.originalStatusCode&&(o.originalStatusCode=n.originalStatusCode),{error:r?`${t}: ${r}`:t,metadata:o,metrics:{}}}}function isBedrockStreamExceptionKey(t){return BEDROCK_STREAM_EXCEPTION_KEYS.some(e=>e===t)}function mergeContentBlockDelta(t,e){const n={...t};if("string"==typeof e.text&&(n.text=`${"string"==typeof n.text?n.text:""}${e.text}`),isObject(e.reasoningContent)){const t=isObject(n.reasoningContent)?n.reasoningContent:{};n.reasoningContent={...t,...sanitizeRecord(e.reasoningContent),..."string"==typeof e.reasoningContent.text?{text:`${"string"==typeof t.text?t.text:""}${e.reasoningContent.text}`}:{}}}if(isObject(e.toolUse)){const t=isObject(n.toolUse)?n.toolUse:{};n.toolUse={...t,...sanitizeRecord(e.toolUse),..."string"==typeof e.toolUse.input?{input:`${"string"==typeof t.input?t.input:""}${e.toolUse.input}`}:{}}}for(const[t,r]of Object.entries(e))"text"!==t&&"reasoningContent"!==t&&"toolUse"!==t&&isSafeBedrockObjectKey(t)&&(n[t]=sanitizeBedrockValue(r));return n}function parseJsonBody(t){const e=decodeBodyToString(t);if(void 0!==e&&0!==e.length)try{return sanitizeBedrockValue(JSON.parse(e))}catch{return}}function summarizeBody(t){if(null==t)return;const e=decodeBodyToString(t);return void 0!==e?e.length>2e3?`${e.slice(0,2e3)}...`:e:sanitizeBedrockValue(t)}function decodeBodyToString(t){return"string"==typeof t?t:t instanceof Uint8Array?(new TextDecoder).decode(t):t instanceof ArrayBuffer?(new TextDecoder).decode(new Uint8Array(t)):void 0}function sanitizeRecord(t){return isObject(t)?sanitizeBedrockValue(t):{}}function sanitizeBedrockValue(t,e=0){if(null==t)return t;if("object"!=typeof t)return t;if(t instanceof Uint8Array)return{byte_length:t.byteLength};if(t instanceof ArrayBuffer)return{byte_length:t.byteLength};if(Array.isArray(t))return e>20?"[MaxDepth]":t.map(t=>sanitizeBedrockValue(t,e+1));if(!isObject(t))return String(t);if(e>20)return"[MaxDepth]";const n={};for(const[r,o]of Object.entries(t))isSafeBedrockObjectKey(r)&&(n[r]=sanitizeBedrockValue(o,e+1));return n}function isSafeBedrockObjectKey(t){return"__proto__"!==t&&"constructor"!==t&&"prototype"!==t}function extractTextFromJsonLike(t){if("string"==typeof t)return t;if(Array.isArray(t))return t.map(extractTextFromJsonLike).join("");if(!isObject(t))return"";const e=t.contentBlockDelta;return isObject(e)?extractTextFromJsonLike(e.delta):isObject(t.delta)?extractTextFromJsonLike(t.delta):"string"==typeof t.text?t.text:"string"==typeof t.outputText?t.outputText:"string"==typeof t.completion?t.completion:"string"==typeof t.generation?t.generation:Array.isArray(t.content)?t.content.map(extractTextFromJsonLike).join(""):Array.isArray(t.output)?t.output.map(extractTextFromJsonLike).join(""):Array.isArray(t.outputs)?t.outputs.map(extractTextFromJsonLike).join(""):""}var genkitChannels=defineChannels("@genkit-ai/ai",{generate:channel({channelName:"generate",kind:"async"}),generateStream:channel({channelName:"generateStream",kind:"sync-stream"}),embed:channel({channelName:"embed",kind:"async"}),embedMany:channel({channelName:"embedMany",kind:"async"}),actionRun:channel({channelName:"action.run",kind:"async"}),actionStream:channel({channelName:"action.stream",kind:"sync-stream"})}),genkitCoreChannels=defineChannels("@genkit-ai/core",{actionSpan:channel({channelName:"action.span",kind:"async"})}),GenkitPlugin=class extends BasePlugin{onEnable(){this.subscribeToGenkitChannels()}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers)}subscribeToGenkitChannels(){this.unsubscribers.push(traceAsyncChannel(genkitChannels.generate,{name:"genkit.generate",type:"llm",extractInput:([t])=>extractGenerateInput(t),extractOutput:extractGenerateOutput,extractMetadata:(t,e)=>extractGenerateResponseMetadata(t,e?.arguments?.[0]),extractMetrics:t=>parseGenkitUsageMetrics(t?.usage)})),this.unsubscribers.push(traceSyncStreamChannel(genkitChannels.generateStream,{name:"genkit.generateStream",type:"llm",extractInput:([t])=>extractGenerateInput(t),patchResult:({result:t,span:e,startTime:n})=>patchGenerateStreamResult(t,e,n)})),this.unsubscribers.push(traceAsyncChannel(genkitChannels.embed,{name:"genkit.embed",type:"function",extractInput:([t])=>extractEmbedInput(t),extractOutput:t=>summarizeEmbeddingResult(t),extractMetadata:(t,e)=>extractEmbedMetadata(e?.arguments?.[0]),extractMetrics:()=>({})})),this.unsubscribers.push(traceAsyncChannel(genkitChannels.embedMany,{name:"genkit.embedMany",type:"function",extractInput:([t])=>extractEmbedManyInput(t),extractOutput:summarizeEmbeddingResult,extractMetadata:(t,e)=>extractEmbedMetadata(e?.arguments?.[0]),extractMetrics:()=>({})})),this.subscribeToActionRun(),this.subscribeToActionSpan(),this.subscribeToActionStream()}subscribeToActionRun(){const t=genkitChannels.actionRun.tracingChannel(),e=new WeakMap,n=bindActionCurrentSpanStoreToStart(t,e,t=>startActionRunSpan(t)),r={start:t=>{ensureActionSpanState(e,t,()=>startActionRunSpan(t))},asyncEnd:t=>{const n=e.get(t);if(n)try{n.span.log({output:extractActionOutput(t.result),metrics:durationMetrics(n.startTime)})}finally{n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}subscribeToActionSpan(){const t=genkitCoreChannels.actionSpan.tracingChannel(),e=new WeakMap,n=bindActionCurrentSpanStoreToStart(t,e,t=>startActionSpan(t)),r={start:t=>{ensureActionSpanState(e,t,()=>startActionSpan(t))},asyncEnd:t=>{const n=e.get(t);if(n)try{n.span.log({input:extractActionSpanInput(t.arguments),output:extractActionOutput(t.result),metrics:durationMetrics(n.startTime)})}finally{n.span.end(),e.delete(t)}},error:t=>{const n=e.get(t);n&&t.error&&(n.span.log({error:t.error.message}),n.span.end(),e.delete(t))}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}subscribeToActionStream(){this.unsubscribers.push(traceSyncStreamChannel(genkitChannels.actionStream,{name:"genkit.action.stream",type:"task",extractInput:([t],e)=>({input:t,metadata:actionMetadataForLog(extractActionMetadata(e.self))}),patchResult:({result:t,span:e,startTime:n})=>patchActionStreamResult(t,e,n)}))}};function startActionRunSpan(t){const e=extractActionMetadata(t.self),n=e||"string"!=typeof t.arguments[0]?void 0:t.arguments[0];return startActionSpanState({input:n?t.arguments[1]:t.arguments[0],metadata:e,runStepName:n})}function startActionSpan(t){const e=extractActionSpanMetadata(t.arguments);if(e)return startActionSpanState({input:extractActionSpanInput(t.arguments),metadata:e})}function startActionSpanState(t){if(!shouldTraceAction(t.metadata,t.runStepName))return;const e=startSpan({name:actionSpanName(t.metadata,t.runStepName),spanAttributes:{type:actionSpanType(t.metadata)}}),n=getCurrentUnixTimestamp();return e.log({input:t.input,metadata:actionMetadataForLog(t.metadata,t.runStepName)}),{span:e,startTime:n}}function ensureActionSpanState(t,e,n){const r=t.get(e);if(r)return r;const o=n();return o&&t.set(e,o),o}function bindActionCurrentSpanStoreToStart(t,e,n){const r=_internalGetGlobalState(),o=r?.contextManager,a=t.start,i=o?o[BRAINTRUST_CURRENT_SPAN_STORE]:void 0;if(a?.bindStore&&i)return a.bindStore(i,t=>{const r=ensureActionSpanState(e,t,()=>n(t));return r?o.wrapSpanForStore(r.span):i.getStore()}),()=>{a.unbindStore?.(i)}}function normalizeInput(t){return"string"==typeof t||Array.isArray(t)?{prompt:t}:t}function extractGenerateInput(t){const e=normalizeInput(t);if(!isObject(e))return{input:void 0,metadata:genkitProviderMetadata()};const n=e;return{input:processInputAttachments(n.prompt??n.messages??n.system),metadata:{...genkitProviderMetadata(),...pickDefined({model:modelName(n.model),temperature:configValue(n.config,"temperature"),maxOutputTokens:configValue(n.config,"maxOutputTokens"),max_output_tokens:configValue(n.config,"max_output_tokens")})}}}function extractGenerateOutput(t){return isObject(t)?pickDefined({text:safeGet(t,"text"),output:safeGet(t,"output"),message:safeGet(t,"message"),finishReason:safeGet(t,"finishReason"),finishMessage:safeGet(t,"finishMessage")}):t}function extractGenerateResponseMetadata(t,e){const n=e?normalizeInput(e):void 0,r=isObject(t?.request)?t?.request:isObject(n)?n:void 0;return{...genkitProviderMetadata(),...pickDefined({model:modelName(t?.model??r?.model),finishReason:t?.finishReason,finishMessage:t?.finishMessage})}}function extractEmbedInput(t){return{input:processInputAttachments(t?.content),metadata:extractEmbedMetadata(t)}}function extractEmbedManyInput(t){return{input:processInputAttachments(t?.content),metadata:extractEmbedMetadata(t)}}function extractEmbedMetadata(t){return{...genkitProviderMetadata(),...pickDefined({model:modelName(t?.embedder)})}}function summarizeEmbeddingResult(t){return Array.isArray(t)?{embedding_count:t.length,dimensions:Array.isArray(t[0])||Array.isArray(t[0]?.embedding)?t[0].length||t[0]?.embedding?.length:void 0}:isObject(t)&&Array.isArray(t.embeddings)?{embedding_count:t.embeddings.length,dimensions:Array.isArray(t.embeddings[0])?t.embeddings[0].length:void 0}:t}function patchGenerateStreamResult(t,e,n){if(!isObject(t)||!isAsyncIterable(t.stream))return!1;let r;const o=createDeferredSpanFinalizer(e);return patchStreamIfNeeded(t.stream,{onChunk:()=>{void 0===r&&(r=getCurrentUnixTimestamp())},onComplete:a=>{o(async()=>{const o=a.map(t=>safeGet(t,"text")).join(""),i=await t.response,s=parseGenkitUsageMetrics(i?.usage);void 0!==r&&(s.time_to_first_token=r-n),e.log({output:{...extractGenerateOutput(i),streamedText:o},metadata:extractGenerateResponseMetadata(i,void 0),metrics:s})})},onError:t=>{o(()=>{e.log({error:t.message})})}}),!0}function patchActionStreamResult(t,e,n){if(!isObject(t)||!isAsyncIterable(t.stream))return!1;const r=createDeferredSpanFinalizer(e);return patchStreamIfNeeded(t.stream,{onComplete:o=>{r(async()=>{e.log({output:{chunks:o,result:await t.output},metrics:durationMetrics(n)})})},onError:t=>{r(()=>{e.log({error:t.message})})}}),!0}function createDeferredSpanFinalizer(t){let e=!1;return n=>{e||(e=!0,(async()=>{try{await n()}catch(e){t.log({error:toLoggedError(e)})}finally{t.end()}})())}}function parseGenkitUsageMetrics(t){return isObject(t)?pickNumberMetrics({tokens:t.totalTokens,prompt_tokens:t.inputTokens,completion_tokens:t.outputTokens,cached_tokens:t.cachedContentTokens,reasoning_tokens:t.thoughtsTokens}):{}}function durationMetrics(t){const e=getCurrentUnixTimestamp();return{start:t,end:e,duration:e-t}}function extractActionMetadata(t){if(isObject(t)&&isObject(t.__action))return t.__action}function extractActionSpanMetadata(t){const e=extractRunInNewSpanOptions(t),n=isObject(e?.labels)?e.labels:void 0,r=isObject(e?.metadata)?e.metadata:void 0,o=stringValue(n?.["genkit:metadata:subtype"]),a=stringValue(r?.name);if(o&&a)return{actionType:o,key:stringValue(n?.["genkit:key"]),name:a}}function extractActionSpanInput(t){const e=extractRunInNewSpanOptions(t);if(isObject(e?.metadata))return e.metadata.input}function extractRunInNewSpanOptions(t){const e=3===t.length?t[1]:t[0];return isObject(e)?e:void 0}function shouldTraceAction(t,e){if(e)return!0;switch(t?.actionType){case"model":case"background-model":case"embedder":return!1;default:return Boolean(t)}}function actionSpanName(t,e){const n=t?.actionType,r=t?.name;return n&&r?`genkit.${n}: ${r}`:r?`genkit.action: ${r}`:e?`genkit.run: ${e}`:"genkit.action"}function actionSpanType(t){switch(t?.actionType){case"tool":case"tool.v2":return"tool";case"model":case"embedder":return"llm";default:return"task"}}function actionMetadataForLog(t,e){return{...genkitProviderMetadata(),...pickDefined({"genkit.action_type":t?.actionType,"genkit.action_name":t?.name,"genkit.action_key":t?.key,"genkit.run_name":e})}}function extractActionOutput(t){return isObject(t)&&"result"in t?t.result:t}function genkitProviderMetadata(){return{provider:"genkit"}}function safeGet(t,e){if(isObject(t))try{return t[e]}catch{return}}function configValue(t,e){return isObject(t)?t[e]:void 0}function modelName(t){if("string"==typeof t)return t;if(isObject(t)){const e=t.name??t.model;return"string"==typeof e?e:void 0}}function pickDefined(t){return Object.fromEntries(Object.entries(t).filter(([,t])=>void 0!==t))}function pickNumberMetrics(t){return Object.fromEntries(Object.entries(t).filter(t=>{const e=t[1];return"number"==typeof e&&Number.isFinite(e)}))}function stringValue(t){return"string"==typeof t?t:void 0}var gitHubCopilotChannels=defineChannels("@github/copilot-sdk",{createSession:channel({channelName:"client.createSession",kind:"async"}),resumeSession:channel({channelName:"client.resumeSession",kind:"async"}),sendAndWait:channel({channelName:"session.sendAndWait",kind:"async"})}),ROOT_AGENT_KEY="__root__";function agentKey(t){return t??ROOT_AGENT_KEY}function getStringProperty2(t,e){if(!t||"object"!=typeof t||!(e in t))return;const n=Reflect.get(t,e);return"string"==typeof n?n:void 0}function extractMetricsFromUsage(t){const e={prompt_tokens:t.inputTokens,completion_tokens:t.outputTokens,...extractAnthropicCacheTokens(t.cacheReadTokens,t.cacheWriteTokens)};void 0!==t.reasoningTokens&&(e.completion_reasoning_tokens=t.reasoningTokens,e.reasoning_tokens=t.reasoningTokens),Object.assign(e,finalizeAnthropicTokens(e));const n={model:t.model};return void 0!==t.cost&&(n["github_copilot.cost"]=t.cost),void 0!==t.duration&&(n["github_copilot.duration_ms"]=t.duration),void 0!==t.ttftMs&&(n["github_copilot.time_to_first_token_ms"]=t.ttftMs),void 0!==t.interTokenLatencyMs&&(n["github_copilot.intertoken_latency_ms"]=t.interTokenLatencyMs),void 0!==t.apiCallId&&(n["github_copilot.api_call_id"]=t.apiCallId),void 0!==t.providerCallId&&(n["github_copilot.provider_call_id"]=t.providerCallId),void 0!==t.interactionId&&(n["github_copilot.interaction_id"]=t.interactionId),void 0!==t.initiator&&(n["github_copilot.initiator"]=t.initiator),void 0!==t.reasoningEffort&&(n["github_copilot.reasoning_effort"]=t.reasoningEffort),void 0!==t.copilotUsage&&(n["github_copilot.copilot_usage"]=t.copilotUsage),void 0!==t.quotaSnapshots&&(n["github_copilot.quota_snapshots"]=t.quotaSnapshots),{metadata:n,metrics:e}}function makeSpanWithId(t){return{span:t,id:t.export()}}async function getParentIdForAgent(t,e){if(e){const n=t.agentIdToToolCallId.get(e);if(n){const e=t.subAgents.get(n);if(e)return e.id}}return t.session.id}async function getToolParentId(t,e){const n=t.activeTurns.get(agentKey(e));return n?n.id:t.session.id}async function handleTurnStart(t,e){const n=agentKey(e);if(t.activeTurns.has(n))return;const r=startSpan({name:"Copilot Turn",parent:await getParentIdForAgent(t,e),spanAttributes:{type:"task"}}),o=t.pendingUserMessages.get(n);o&&(r.log({input:o}),t.pendingUserMessages.delete(n)),t.activeTurns.set(n,makeSpanWithId(r))}function handleTurnEnd(t,e){const n=agentKey(e),r=t.activeTurns.get(n);r&&(r.span.end(),t.activeTurns.delete(n),t.currentMessageContent.delete(n))}function handleAssistantMessage(t,e,n){t.currentMessageContent.set(agentKey(e),n);const r=t.activeTurns.get(agentKey(e));r&&r.span.log({output:n})}async function handleUsage(t,e,n){const r=agentKey(e),o=t.activeTurns.get(r),a=o?await o.id:await t.session.id,i=t.currentMessageContent.get(r),{metrics:s,metadata:c}=extractMetricsFromUsage(n),u=startSpan({name:"github.copilot.llm",parent:a,spanAttributes:{type:"llm"}});u.log({output:i??void 0,metadata:c,metrics:s}),u.end(),t.currentMessageContent.delete(r),t.totalInputTokens+=n.inputTokens??0,t.totalOutputTokens+=n.outputTokens??0}function handleUserMessage(t,e,n){const r=agentKey(e),o=t.activeTurns.get(r);o?o.span.log({input:n}):t.pendingUserMessages.set(r,n)}async function handleToolStart(t,e,n,r,o,a){if(t.activeTools.has(n))return;const i=startSpan({name:a?`tool: ${a}/${r}`:`tool: ${r}`,parent:await getToolParentId(t,e),spanAttributes:{type:"tool"}}),s={"gen_ai.tool.name":r,"gen_ai.tool.call.id":n};a&&(s["mcp.server"]=a),i.log({input:o,metadata:s}),t.activeTools.set(n,makeSpanWithId(i))}function handleToolComplete(t,e,n,r,o){const a=t.activeTools.get(e);if(a)try{!n&&o?a.span.log({error:o.message??"tool execution failed"}):a.span.log({output:r})}finally{a.span.end(),t.activeTools.delete(e)}}async function handleSubagentStarted(t,e,n,r,o){if(t.subAgents.has(n))return;e&&t.agentIdToToolCallId.set(e,n);const a=t.activeTools.get(n),i=startSpan({name:`Agent: ${r}`,parent:a?await a.id:await t.session.id,spanAttributes:{type:"task"}});i.log({metadata:{"github_copilot.agent_name":r,"github_copilot.agent_description":o}}),t.subAgents.set(n,makeSpanWithId(i))}function handleSubagentCompleted(t,e,n,r,o,a){const i=t.subAgents.get(e);if(i)try{const t={};void 0!==n&&(t["github_copilot.agent_model"]=n),void 0!==r&&(t["github_copilot.agent_total_tokens"]=r),void 0!==o&&(t["github_copilot.agent_tool_calls"]=o),void 0!==a&&(t["github_copilot.agent_duration_ms"]=a),i.span.log({metadata:t})}finally{i.span.end(),t.subAgents.delete(e)}}function handleSubagentFailed(t,e,n){const r=t.subAgents.get(e);if(r)try{r.span.log({error:n})}finally{r.span.end(),t.subAgents.delete(e)}}function handleSessionEnd(t,e,n){try{for(const e of t.activeTools.values())e.span.end();t.activeTools.clear();for(const e of t.subAgents.values())e.span.end();t.subAgents.clear();for(const e of t.activeTurns.values())e.span.end();t.activeTurns.clear(),t.agentIdToToolCallId.clear();const r={"github_copilot.end_reason":e};(t.totalInputTokens>0||t.totalOutputTokens>0)&&(r["github_copilot.total_input_tokens"]=t.totalInputTokens,r["github_copilot.total_output_tokens"]=t.totalOutputTokens),n?t.session.span.log({error:n,metadata:r}):t.session.span.log({metadata:r})}finally{t.session.span.end()}}async function dispatchEvent(t,e){switch(e.type){case"user.message":{const n=getStringProperty2(e.data,"content");void 0!==n&&handleUserMessage(t,e.agentId,n);break}case"assistant.turn_start":await handleTurnStart(t,e.agentId);break;case"assistant.message":{const n=getStringProperty2(e.data,"content");void 0!==n&&handleAssistantMessage(t,e.agentId,n);break}case"assistant.usage":{const n=e.data;n&&"object"==typeof n&&"string"==typeof n.model&&await handleUsage(t,e.agentId,n);break}case"assistant.turn_end":handleTurnEnd(t,e.agentId);break;case"tool.execution_start":{const n=e.data;n&&"string"==typeof n.toolCallId&&"string"==typeof n.toolName&&await handleToolStart(t,e.agentId,n.toolCallId,n.toolName,n.arguments,n.mcpServerName);break}case"tool.execution_complete":{const n=e.data;n&&"string"==typeof n.toolCallId&&handleToolComplete(t,n.toolCallId,n.success??!1,n.result,n.error);break}case"subagent.started":{const n=e.data;n&&"string"==typeof n.toolCallId&&await handleSubagentStarted(t,e.agentId,n.toolCallId,n.agentDisplayName??"sub-agent",n.agentDescription??"");break}case"subagent.completed":{const n=e.data;n&&"string"==typeof n.toolCallId&&handleSubagentCompleted(t,n.toolCallId,n.model,n.totalTokens,n.totalToolCalls,n.durationMs);break}case"subagent.failed":{const n=e.data;n&&"string"==typeof n.toolCallId&&handleSubagentFailed(t,n.toolCallId,n.error??"sub-agent failed");break}case"session.usage_info":{const n=e.data;n&&"number"==typeof n.currentTokens&&t.session.span.log({metadata:{"github_copilot.context_window.limit":n.tokenLimit,"github_copilot.context_window.current":n.currentTokens,"github_copilot.context_window.messages":n.messagesLength}});break}}}function injectTracingHooks2(t,e){const n=t.hooks??{};t.hooks={...n,onSessionEnd:async(t,r)=>{try{await(n.onSessionEnd?.(t,r))}finally{handleSessionEnd(e,t.reason,t.error),e.unsubscribeEvents?.()}}}}function attachSessionEventListener(t,e){e.unsubscribeEvents=t.on(t=>{e.processing=e.processing.then(()=>dispatchEvent(e,t)).catch(t=>{console.error("[Braintrust] Error processing GitHub Copilot SDK event:",t)})})}function isGitHubCopilotSession(t){return null!==t&&"object"==typeof t&&"function"==typeof t.on}function makeSessionHandlers(t,e,n){return{start:r=>{const o=r.arguments[e];if(!o||"object"!=typeof o)return;const a=startSpan({name:"Copilot Session",spanAttributes:{type:"task"}}),i={};o.model&&(i["github_copilot.model"]=o.model),n&&o.provider?.type&&(i["github_copilot.provider_type"]=o.provider.type),Object.keys(i).length>0&&a.log({metadata:i});const s={session:makeSpanWithId(a),activeTurns:new Map,pendingUserMessages:new Map,currentMessageContent:new Map,activeTools:new Map,subAgents:new Map,agentIdToToolCallId:new Map,processing:Promise.resolve(),totalInputTokens:0,totalOutputTokens:0};injectTracingHooks2(o,s),t.set(r,s)},asyncEnd:e=>{const n=t.get(e);if(!n)return;const r=e.result;isGitHubCopilotSession(r)?attachSessionEventListener(r,n):n.session.span.end(),t.delete(e)},error:e=>{const n=t.get(e);n&&e.error&&(n.session.span.log({error:e.error.message}),n.session.span.end(),t.delete(e))}}}var GitHubCopilotPlugin=class extends BasePlugin{onEnable(){this.subscribeToSessionChannels()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[]}subscribeToSessionChannels(){const t=gitHubCopilotChannels.createSession.tracingChannel(),e=gitHubCopilotChannels.resumeSession.tracingChannel(),n=new WeakMap,r=makeSessionHandlers(n,0,!0),o=makeSessionHandlers(n,1,!1);t.subscribe(r),e.subscribe(o),this.unsubscribers.push(()=>t.unsubscribe(r),()=>e.unsubscribe(o))}},flueChannels=defineChannels("@flue/runtime",{createContext:channel({channelName:"createFlueContext",kind:"sync-stream"})}),FLUE_AUTO_STATE=Symbol.for("braintrust.flue.auto-state"),FLUE_INSTRUMENTATION_KEY=Symbol.for("braintrust.flue.instrumentation"),FLUE_OBSERVE_BRIDGE=Symbol.for("braintrust.flue.observe-bridge");function observeFlue(t,e){getObserveBridge().handle(t,e)}var interceptFlueExecution=(t,e,n)=>getObserveBridge().intercept(t,e,n);function braintrustFlueInstrumentation(){return{dispose(){},interceptor:interceptFlueExecution,key:FLUE_INSTRUMENTATION_KEY,observe:observeFlue}}var braintrustFlueObserver=Object.assign(observeFlue,braintrustFlueInstrumentation()),FluePlugin=class extends BasePlugin{onEnable(){this.unsubscribers.push(enableFlueAutoInstrumentation())}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[]}};function enableFlueAutoInstrumentation(){const t=getAutoState();if(t.refCount+=1,!t.createContextHandlers){const e=flueChannels.createContext.tracingChannel(),n={end:e=>{subscribeToFlueContext(e.result,t)}};e.subscribe(n),t.createContextChannel=e,t.createContextHandlers=n}let e=!1;return()=>{e||(e=!0,releaseAutoState(t))}}function getAutoState(){const t=Reflect.get(globalThis,FLUE_AUTO_STATE);if(isAutoState(t))return t;const e={contexts:new WeakSet,refCount:0};return Reflect.set(globalThis,FLUE_AUTO_STATE,e),e}function getObserveBridge(){const t=Reflect.get(globalThis,FLUE_OBSERVE_BRIDGE);if(isFlueObserveBridge(t))return t;const e=new FlueObserveBridge;return Reflect.set(globalThis,FLUE_OBSERVE_BRIDGE,e),e}function isFlueObserveBridge(t){return isObjectLike(t)&&"function"==typeof Reflect.get(t,"handle")&&"function"==typeof Reflect.get(t,"reset")}function isAutoState(t){return isObjectLike(t)&&Reflect.get(t,"contexts")instanceof WeakSet&&"number"==typeof Reflect.get(t,"refCount")}function releaseAutoState(t){if(t.refCount-=1,!(t.refCount>0))try{t.createContextChannel&&t.createContextHandlers&&t.createContextChannel.unsubscribe(t.createContextHandlers)}finally{Reflect.deleteProperty(globalThis,FLUE_AUTO_STATE)}}function subscribeToFlueContext(t,e){if(!isObservableFlueContext(t)||e.contexts.has(t))return;const n=flueContextFromUnknown(t);let r,o=!1;const a=()=>{if(!o){o=!0;try{r?.()}catch(t){logInstrumentationError3("Flue context unsubscribe",t)}}};try{r=t.subscribeEvent(t=>{e.refCount<=0?a():(braintrustFlueObserver(t,n),isAutoContextTerminalEvent(t,n)&&a())}),e.contexts.add(t)}catch(t){logInstrumentationError3("Flue context subscription",t)}}function isAutoContextTerminalEvent(t,e){if(!isObjectLike(t))return!1;const n=Reflect.get(t,"type");return"run_end"===n||"operation"===n&&(!e?.runId&&"string"!=typeof Reflect.get(t,"runId"))}function isObservableFlueContext(t){return isObjectLike(t)&&"function"==typeof Reflect.get(t,"subscribeEvent")}function isFlueEvent(t){const e=Reflect.get(t,"type");return"run_start"===e||"run_resume"===e||"run_end"===e||"operation_start"===e||"operation"===e||"turn_request"===e||"turn"===e||"tool_start"===e||"tool_call"===e||"tool"===e||"task_start"===e||"task"===e||"compaction_start"===e||"compaction"===e}function flueContextFromUnknown(t){if(!isObjectLike(t))return;const e=Reflect.get(t,"id"),n=Reflect.get(t,"runId");return{..."string"==typeof e?{id:e}:{},..."string"==typeof n?{runId:n}:{}}}function isObjectLike(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}var FlueObserveBridge=class{compactionsByKey=new Map;operationsById=new Map;runsById=new Map;seenEvents=new WeakSet;tasksById=new Map;toolsByKey=new Map;turnsByKey=new Map;handle(t,e){if(isObjectLike(t)&&isFlueEvent(t)&&!this.seenEvents.has(t)){this.seenEvents.add(t);try{this.handleEvent(t,flueContextFromUnknown(e))}catch(t){logInstrumentationError3("Flue observe",t)}}}reset(){this.compactionsByKey.clear(),this.operationsById.clear(),this.runsById.clear(),this.seenEvents=new WeakSet,this.tasksById.clear(),this.toolsByKey.clear(),this.turnsByKey.clear()}intercept(t,e,n){let r;try{r=this.spanForExecutionOperation(t,e)}catch(t){logInstrumentationError3("Flue execution interceptor",t)}return r?runWithCurrentSpanStore(r,n):n()}spanForExecutionOperation(t,e){switch(t.type){case"workflow":return this.ensureWorkflowSpanForExecution(t,e);case"agent":return this.operationsById.get(t.operationId)?.span;case"model":return this.turnsByKey.get(t.turnId)?.span;case"tool":return this.spanForToolExecution(t,e);case"task":return this.tasksById.get(t.taskId)?.span;default:return}}ensureWorkflowSpanForExecution(t,e){const n=this.runsById.get(t.runId);if(n)return n.span;const r=flueContextFromUnknown(e.eventContext)??flueContextFromUnknown({id:t.workflowName,runId:t.runId});return"resume"===t.phase?this.handleRunResume({eventIndex:0,runId:t.runId,startedAt:t.startedAt,timestamp:(new Date).toISOString(),type:"run_resume",v:3,workflowName:t.workflowName},r):this.handleRunStart({eventIndex:0,input:void 0,runId:t.runId,startedAt:t.startedAt,timestamp:(new Date).toISOString(),type:"run_start",v:3,workflowName:t.workflowName},r),this.runsById.get(t.runId)?.span}spanForToolExecution(t,e){const n=this.toolsByKey.get(toolKey({...e,toolCallId:t.toolCallId}));if(n)return n.span;let r;for(const e of this.toolsByKey.values())if(e.metadata["flue.tool_call_id"]===t.toolCallId){if(e.metadata["flue.tool_name"]===t.toolName)return e.span;r??=e.span}return r}handleEvent(t,e){switch(t.type){case"run_start":return void this.handleRunStart(t,e);case"run_resume":return void this.handleRunResume(t,e);case"run_end":return void this.handleRunEnd(t);case"operation_start":return void this.handleOperationStart(t);case"operation":return void this.handleOperation(t);case"turn_request":return void this.handleTurnRequest(t);case"turn":return void this.handleTurn(t);case"tool_start":return void this.handleToolStart(t);case"tool_call":case"tool":return void this.handleToolCall(t);case"task_start":return void this.handleTaskStart(t);case"task":return void this.handleTask(t);case"compaction_start":return void this.handleCompactionStart(t);case"compaction":return void this.handleCompaction(t);default:return}}handleRunStart(t,e){if(!t.runId)return;const n=t.workflowName??t.owner?.workflowName??("string"==typeof e?.id?e.id:"unknown"),r=flueRunInput(t),o={...extractPayloadMetadata(r),...extractEventMetadata(t,e),...n?{"flue.workflow_name":n}:{},provider:"flue"},a=this.runsById.get(t.runId);if(a)return a.metadata=o,void safeLog3(a.span,{input:r,metadata:o});const i=startSpan({name:`workflow:${n}`,spanAttributes:{type:"task"},startTime:eventTime(t.startedAt??t.timestamp),event:{input:r,metadata:o}});this.runsById.set(t.runId,{metadata:o,span:i})}handleRunResume(t,e){if(!t.runId)return;const n=t.workflowName??("string"==typeof e?.id?e.id:"unknown"),r={...extractEventMetadata(t,e),...n?{"flue.workflow_name":n}:{},"flue.workflow_phase":"resume",provider:"flue"},o=this.runsById.get(t.runId);if(o)return o.metadata=r,void safeLog3(o.span,{metadata:r});const a=startSpan({name:`workflow:${n}`,spanAttributes:{type:"task"},startTime:eventTime(t.startedAt??t.timestamp),event:{metadata:r}});this.runsById.set(t.runId,{metadata:r,span:a})}handleRunEnd(t){const e=this.runsById.get(t.runId);this.finishPendingSpansForRun(t),e&&(safeLog3(e.span,{...t.isError?{error:toLoggedError(t.error)}:{},metadata:{...e.metadata,...extractEventMetadata(t),...void 0!==t.isError?{"flue.is_error":t.isError}:{}},metrics:durationMetrics2(t.durationMs),output:t.result}),safeEnd(e.span,eventTime(t.timestamp)),this.runsById.delete(t.runId)),flush().catch(t=>{logInstrumentationError3("Flue flush",t)})}handleOperationStart(t){if(!t.operationId||!isInstrumentedOperation(t.operationKind))return;const e={...extractEventMetadata(t),"flue.operation":t.operationKind,provider:"flue"},n=startFlueSpan(this.parentSpanForEvent(t),{name:`flue.${t.operationKind}`,spanAttributes:{type:"task"},startTime:eventTime(t.timestamp),event:{metadata:e}});this.operationsById.set(t.operationId,{metadata:e,span:n})}handleOperation(t){if(!isInstrumentedOperation(t.operationKind))return;const e=this.operationsById.get(t.operationId)??this.startSyntheticOperation(t),n=operationOutput(t),r={...e.metadata,...extractEventMetadata(t),...void 0!==t.isError?{"flue.is_error":t.isError}:{},...t.usage?{"flue.usage":t.usage}:{}};this.finishPendingChildrenForOperation(t,n),safeLog3(e.span,{...t.isError?{error:toLoggedError(t.error)}:{},metadata:r,metrics:durationMetrics2(t.durationMs),output:n}),safeEnd(e.span,eventTime(t.timestamp)),this.operationsById.delete(t.operationId)}handleTurnRequest(t){const e=turnKey(t);if(!e)return;const n=flueTurnRequestInput(t),r=flueTurnRequestModel(t),o=flueTurnRequestProvider(t),a=flueTurnRequestApi(t),i=flueTurnRequestReasoning(t),s={...extractEventMetadata(t),...a?{"flue.api":a}:{},...r?{model:r,"flue.model":r}:{},...o?{provider:o}:{provider:"flue"},...o?{"flue.provider":o}:{},...t.purpose?{"flue.turn_purpose":t.purpose}:{},...i?{reasoning:i}:{},...n?.systemPrompt?{"flue.system_prompt":n.systemPrompt}:{},...n?.tools?{tools:n.tools}:{}},c=startFlueSpan(this.parentSpanForTurn(t),{name:`llm:${r??t.purpose??"unknown"}`,spanAttributes:{type:"llm"},startTime:eventTime(t.timestamp),event:{input:n?.messages,metadata:s}});this.logOperationInput(t.operationId,n?.messages??n),this.turnsByKey.set(e,{metadata:s,span:c})}handleTurn(t){const e=turnKey(t);if(!e)return;const n=this.turnsByKey.get(e)??this.startSyntheticTurn(t),r=flueTurnModel(t),o=flueTurnProvider(t),a=flueTurnApi(t),i=flueTurnStopReason(t),s=flueTurnUsage(t),c=flueTurnOutput(t),u=flueTurnError(t),p={...n.metadata,...extractEventMetadata(t),...a?{"flue.api":a}:{},...r?{model:r,"flue.model":r}:{},...o?{provider:o}:{},...o?{"flue.provider":o}:{},...t.purpose?{"flue.turn_purpose":t.purpose}:{},...i?{"flue.stop_reason":i}:{},...void 0!==t.isError?{"flue.is_error":t.isError}:{}};safeLog3(n.span,{...t.isError?{error:toLoggedError(u)}:{},metadata:p,metrics:{...durationMetrics2(t.durationMs),...metricsFromUsage(s)},output:c}),safeEnd(n.span,eventTime(t.timestamp)),this.turnsByKey.delete(e)}handleToolStart(t){if(!t.toolCallId)return;const e=flueToolInput(t),n={...extractEventMetadata(t),...t.toolName?{"flue.tool_name":t.toolName}:{},"flue.tool_call_id":t.toolCallId,provider:"flue"},r=startFlueSpan(this.parentSpanForTool(t),{name:`tool:${t.toolName??"unknown"}`,spanAttributes:{type:"tool"},startTime:eventTime(t.timestamp),event:{input:e,metadata:n}});this.toolsByKey.set(toolKey(t),{metadata:n,span:r})}handleToolCall(t){if(!t.toolCallId)return;const e=toolKey(t),n=this.toolsByKey.get(e)??this.startSyntheticTool(t),r=flueToolOutput(t),o=flueToolError(t),a={...n.metadata,...extractEventMetadata(t),...t.toolName?{"flue.tool_name":t.toolName}:{},"flue.tool_call_id":t.toolCallId,...void 0!==t.isError?{"flue.is_error":t.isError}:{}};safeLog3(n.span,{...t.isError?{error:toLoggedError(o)}:{},metadata:a,metrics:durationMetrics2(t.durationMs),output:r}),safeEnd(n.span,eventTime(t.timestamp)),this.toolsByKey.delete(e)}handleTaskStart(t){if(!t.taskId)return;const e={...extractEventMetadata(t),...t.agent?{"flue.agent":t.agent}:{},...t.cwd?{"flue.cwd":t.cwd}:{},"flue.task_id":t.taskId,provider:"flue"},n=startFlueSpan(this.parentSpanForEvent(t),{name:t.agent?`task:${t.agent}`:"flue.task",spanAttributes:{type:"task"},startTime:eventTime(t.timestamp),event:{input:t.prompt,metadata:e}});this.tasksById.set(t.taskId,{metadata:e,span:n})}handleTask(t){const e=this.tasksById.get(t.taskId);e&&(safeLog3(e.span,{...t.isError?{error:toLoggedError(t.result)}:{},metadata:{...e.metadata,...extractEventMetadata(t),...t.agent?{"flue.agent":t.agent}:{},...void 0!==t.isError?{"flue.is_error":t.isError}:{}},metrics:durationMetrics2(t.durationMs),output:t.result}),safeEnd(e.span,eventTime(t.timestamp)),this.tasksById.delete(t.taskId))}handleCompactionStart(t){const e=compactionKey(t),n={...void 0!==t.estimatedTokens?{estimatedTokens:t.estimatedTokens}:{},...t.reason?{reason:t.reason}:{}},r={...extractEventMetadata(t),...t.reason?{"flue.compaction_reason":t.reason}:{},provider:"flue"},o=startFlueSpan(this.parentSpanForEvent(t),{name:`compaction:${t.reason??"unknown"}`,spanAttributes:{type:"task"},startTime:eventTime(t.timestamp),event:{input:n,metadata:r}});this.logOperationInput(t.operationId,n),this.compactionsByKey.set(e,{metadata:r,span:o})}handleCompaction(t){const e=compactionKey(t),n=this.compactionsByKey.get(e)??this.startSyntheticCompaction(t),r={...n.metadata,...extractEventMetadata(t),...t.usage?{"flue.usage":t.usage}:{}};safeLog3(n.span,{metadata:r,metrics:{...durationMetrics2(t.durationMs),..."number"==typeof t.messagesBefore?{messages_before:t.messagesBefore}:{},..."number"==typeof t.messagesAfter?{messages_after:t.messagesAfter}:{}},output:{messagesAfter:t.messagesAfter,messagesBefore:t.messagesBefore}}),safeEnd(n.span,eventTime(t.timestamp)),this.compactionsByKey.delete(e)}parentSpanForTurn(t){if("compaction"===t.purpose||"compaction_prefix"===t.purpose){const e=this.compactionsByKey.get(compactionKey(t));if(e)return e.span}return this.parentSpanForEvent(t)}parentSpanForEvent(t){const e=turnKey(t);if(e){const t=this.turnsByKey.get(e);if(t)return t.span}if(t.taskId){const e=this.tasksById.get(t.taskId);if(e)return e.span}if(t.operationId){const e=this.operationsById.get(t.operationId);if(e)return e.span}if(t.runId)return this.runsById.get(t.runId)?.span}parentSpanForTool(t){if(t.taskId){const e=this.tasksById.get(t.taskId);if(e)return e.span}if(t.operationId){const e=this.operationsById.get(t.operationId);if(e)return e.span}if(t.runId)return this.runsById.get(t.runId)?.span}logOperationInput(t,e){if(!t||void 0===e)return;const n=this.operationsById.get(t);n&&!n.loggedInput&&(safeLog3(n.span,{input:e}),n.loggedInput=!0)}startSyntheticOperation(t){const e={...extractEventMetadata(t),"flue.operation":t.operationKind,provider:"flue"};return{metadata:e,span:startFlueSpan(this.parentSpanForEvent(t),{name:`flue.${t.operationKind}`,spanAttributes:{type:"task"},startTime:eventTime(t.timestamp),event:{metadata:e}})}}startSyntheticTurn(t){const e=flueTurnModel(t),n=flueTurnProvider(t),r=flueTurnApi(t),o={...extractEventMetadata(t),...r?{"flue.api":r}:{},...e?{model:e,"flue.model":e}:{},...n?{provider:n}:{provider:"flue"},...n?{"flue.provider":n}:{},...t.purpose?{"flue.turn_purpose":t.purpose}:{}};return{metadata:o,span:startFlueSpan(this.parentSpanForEvent(t),{name:`llm:${e??t.purpose??"unknown"}`,spanAttributes:{type:"llm"},startTime:eventTime(t.timestamp),event:{metadata:o}})}}startSyntheticTool(t){const e={...extractEventMetadata(t),...t.toolName?{"flue.tool_name":t.toolName}:{},"flue.tool_call_id":t.toolCallId,provider:"flue"};return{metadata:e,span:startFlueSpan(this.parentSpanForTool(t),{name:`tool:${t.toolName??"unknown"}`,spanAttributes:{type:"tool"},startTime:eventTime(t.timestamp),event:{metadata:e}})}}startSyntheticCompaction(t){const e={...extractEventMetadata(t),provider:"flue"};return{metadata:e,span:startFlueSpan(this.parentSpanForEvent(t),{name:"compaction:unknown",spanAttributes:{type:"task"},startTime:eventTime(t.timestamp),event:{metadata:e}})}}finishPendingChildrenForOperation(t,e){const n=eventTime(t.timestamp),r=t.usage??usageFromOperationResult(t.result),o=[...this.turnsByKey].filter(([,e])=>stateMatchesOperation(e,t.operationId));o.forEach(([a,i],s)=>{const c=("prompt"===t.operationKind||"skill"===t.operationKind)&&s===o.length-1&&void 0!==e;safeLog3(i.span,{metadata:i.metadata,metrics:metricsFromUsage(r),...c?{output:e}:{}}),safeEnd(i.span,n),this.turnsByKey.delete(a)});for(const[e,r]of this.toolsByKey)stateMatchesOperation(r,t.operationId)&&(safeEnd(r.span,n),this.toolsByKey.delete(e));for(const[e,r]of this.tasksById)stateMatchesOperation(r,t.operationId)&&(safeEnd(r.span,n),this.tasksById.delete(e));for(const[e,n]of this.compactionsByKey)stateMatchesOperation(n,t.operationId)&&(safeLog3(n.span,{metadata:n.metadata,metrics:durationMetrics2(t.durationMs),output:{completed:!0}}),safeEnd(n.span,eventTime(t.timestamp)),this.compactionsByKey.delete(e))}finishPendingSpansForRun(t){const e=eventTime(t.timestamp);for(const[n,r]of this.toolsByKey)stateMatchesRun(r,t.runId)&&(safeEnd(r.span,e),this.toolsByKey.delete(n));for(const[n,r]of this.turnsByKey)stateMatchesRun(r,t.runId)&&(safeEnd(r.span,e),this.turnsByKey.delete(n));for(const[n,r]of this.tasksById)stateMatchesRun(r,t.runId)&&(safeEnd(r.span,e),this.tasksById.delete(n));for(const[n,r]of this.compactionsByKey)stateMatchesRun(r,t.runId)&&(safeLog3(r.span,{metadata:r.metadata,output:{completed:!0}}),safeEnd(r.span,e),this.compactionsByKey.delete(n));for(const[n,r]of this.operationsById)stateMatchesRun(r,t.runId)&&(safeLog3(r.span,{metadata:r.metadata,..."compact"===r.metadata["flue.operation"]?{output:{completed:!0}}:{}}),safeEnd(r.span,e),this.operationsById.delete(n))}};function isInstrumentedOperation(t){return"prompt"===t||"skill"===t||"compact"===t}function extractEventMetadata(t,e){return{...t.runId?{"flue.run_id":t.runId}:{},...t.instanceId?{"flue.instance_id":t.instanceId}:{},...t.dispatchId?{"flue.dispatch_id":t.dispatchId}:{},..."number"==typeof t.eventIndex?{"flue.event_index":t.eventIndex}:{},...t.session?{"flue.session":t.session}:{},...t.parentSession?{"flue.parent_session":t.parentSession}:{},...t.harness?{"flue.harness":t.harness}:{},...t.taskId?{"flue.task_id":t.taskId}:{},...t.operationId?{"flue.operation_id":t.operationId}:{},...t.turnId?{"flue.turn_id":t.turnId}:{},..."string"==typeof e?.id?{"flue.context_id":e.id}:{},..."string"==typeof e?.runId?{"flue.context_run_id":e.runId}:{}}}function extractPayloadMetadata(t){if(!isObjectLike(t))return{};const e=Reflect.get(t,"metadata");return isObjectLike(e)?Object.fromEntries(Object.entries(e)):{}}function flueRunInput(t){return void 0!==t.input?t.input:t.payload}function flueTurnRequestInput(t){return t.request?.input??t.input}function flueTurnRequestModel(t){return t.request?.model??t.model}function flueTurnRequestProvider(t){return t.request?.providerName??t.provider??t.request?.providerId}function flueTurnRequestApi(t){return t.request?.api??t.api}function flueTurnRequestReasoning(t){return t.request?.reasoning??t.reasoning}function flueTurnModel(t){return t.request?.model??t.model}function flueTurnProvider(t){return t.request?.providerName??t.provider??t.request?.providerId}function flueTurnApi(t){return t.request?.api??t.api}function flueTurnUsage(t){return t.response?.usage??t.usage}function flueTurnOutput(t){return t.response?.output??t.output}function flueTurnStopReason(t){return t.response?.stopReason??t.stopReason}function flueTurnError(t){return t.response?.error??t.response?.errorInfo?.message??t.error}function flueToolInput(t){return void 0!==t.args?t.args:void 0!==t.arguments?t.arguments:t.input}function flueToolOutput(t){return void 0!==t.output?t.output:t.result}function flueToolError(t){return t.error??t.errorInfo?.message??flueToolOutput(t)}function operationOutput(t){return"prompt"===t.operationKind||"skill"===t.operationKind?llmResultFromOperationResult(t.result):t.result??("compact"===t.operationKind?{completed:!0}:void 0)}function llmResultFromOperationResult(t){if(!isObjectLike(t))return t;const e=Reflect.get(t,"text");return void 0===e?t:e}function usageFromOperationResult(t){if(isObjectLike(t))return Reflect.get(t,"usage")}function metricsFromUsage(t){if(!isObjectLike(t))return{};const e=Reflect.get(t,"cacheRead"),n=Reflect.get(t,"cacheWrite"),r=Reflect.get(t,"cost"),o=Reflect.get(t,"input"),a=Reflect.get(t,"output"),i=Reflect.get(t,"totalTokens"),s=isObjectLike(r)?Reflect.get(r,"total"):void 0;return{..."number"==typeof o?{prompt_tokens:o}:{},..."number"==typeof a?{completion_tokens:a}:{},..."number"==typeof e?{prompt_cached_tokens:e}:{},..."number"==typeof n?{prompt_cache_creation_tokens:n}:{},..."number"==typeof i?{tokens:i}:{},..."number"==typeof s?{estimated_cost:s}:{}}}function durationMetrics2(t){return"number"==typeof t?{duration_ms:t}:{}}function eventTime(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isFinite(e)?e/1e3:void 0}function turnKey(t){return t.turnId}function toolKey(t){return`${t.turnId??t.operationId??t.taskId??t.runId??"unknown"}:${t.toolCallId??"unknown"}`}function compactionKey(t){return[t.instanceId??"",t.runId??"",t.session??"",t.operationId??"",t.taskId??""].join(":")}function stateMatchesOperation(t,e){return t.metadata["flue.operation_id"]===e}function stateMatchesRun(t,e){return t.metadata["flue.run_id"]===e}function startFlueSpan(t,e){return t?withCurrent(t,()=>startSpan(e)):startSpan(e)}function runWithCurrentSpanStore(t,e){const n=_internalGetGlobalState(),r=n?.contextManager,o=r?r[BRAINTRUST_CURRENT_SPAN_STORE]:void 0;return r&&"function"==typeof o?.run?o.run(r.wrapSpanForStore(t),e):withCurrent(t,()=>e())}function safeLog3(t,e){try{t.log(e)}catch(t){logInstrumentationError3("Flue span log",t)}}function safeEnd(t,e){try{t.end(void 0===e?void 0:{endTime:e})}catch(t){logInstrumentationError3("Flue span end",t)}}function logInstrumentationError3(t,e){console.error(`Error in ${t} instrumentation:`,e)}var BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME="BraintrustCallbackHandler",BraintrustLangChainCallbackHandler=class{name=BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME;spans=new Map;skippedRuns=new Set;parent;rootRunId;options;startTimes=new Map;firstTokenTimes=new Map;ttftMs=new Map;constructor(t){this.parent=t?.parent,this.options={debug:t?.debug??!1,excludeMetadataProps:t?.excludeMetadataProps??/^(l[sc]_|langgraph_|__pregel_|checkpoint_ns)/,logger:t?.logger}}startSpan({runId:t,parentRunId:e,...n}){if(this.spans.has(t))return;e||(this.rootRunId=t);const r=n.event?.tags,o=n.spanAttributes||{};o.type=n.type||o.type||"task",n.type=o.type;const a=("function"==typeof this.parent?this.parent():this.parent)??currentSpan();let i;i=e&&this.spans.has(e)?this.spans.get(e):Object.is(a,NOOP_SPAN)?this.options.logger?this.options.logger:{startSpan:startSpan}:a,n.event={...n.event,tags:void 0,metadata:{...r?{tags:r}:{},...n.event?.metadata,braintrust:{integration_name:"langchain-js",sdk_language:"javascript"},run_id:t,parent_run_id:e,...this.options.debug?{runId:t,parentRunId:e}:{}}};let s=i.startSpan(n);!Object.is(this.options.logger,NOOP_SPAN)&&Object.is(s,NOOP_SPAN)&&(s=initLogger().startSpan(n)),this.spans.set(t,s)}endSpan({runId:t,parentRunId:e,tags:n,metadata:r,...o}){if(!this.spans.has(t))return;if(this.skippedRuns.has(t))return void this.skippedRuns.delete(t);const a=this.spans.get(t);this.spans.delete(t),t===this.rootRunId&&(this.rootRunId=void 0),a.log({...o,metadata:{tags:n,...r}}),a.end()}async handleLLMStart(t,e,n,r,o,a,i,s){this.startSpan({runId:n,parentRunId:r,name:s??getSerializedName(t)??"LLM",type:"llm",event:{input:e,tags:a,metadata:{serialized:t,name:s,metadata:i,...o}}})}async handleLLMError(t,e,n,r){this.endSpan({runId:e,parentRunId:n,error:t,tags:r})}async handleLLMEnd(t,e,n,r){const o=getMetricsFromResponse(t),a=getModelNameFromResponse(t),i=this.ttftMs.get(e);void 0!==i&&(o.time_to_first_token=i),this.startTimes.delete(e),this.firstTokenTimes.delete(e),this.ttftMs.delete(e),this.endSpan({runId:e,parentRunId:n,output:t,metrics:o,tags:r,metadata:{model:a}})}async handleChatModelStart(t,e,n,r,o,a,i,s){this.startTimes.set(n,Date.now()),this.firstTokenTimes.delete(n),this.ttftMs.delete(n),this.startSpan({runId:n,parentRunId:r,name:s??getSerializedName(t)??"Chat Model",type:"llm",event:{input:e,tags:a,metadata:{serialized:t,name:s,metadata:i,...o}}})}async handleChainStart(t,e,n,r,o,a,i,s){o?.includes("langsmith:hidden")?this.skippedRuns.add(n):this.startSpan({runId:n,parentRunId:r,name:s??getSerializedName(t)??"Chain",event:{input:e,tags:o,metadata:{serialized:t,name:s,metadata:a,run_type:i}}})}async handleChainError(t,e,n,r,o){this.endSpan({runId:e,parentRunId:n,error:t,tags:r,metadata:o})}async handleChainEnd(t,e,n,r,o){this.endSpan({runId:e,parentRunId:n,tags:r,output:t,metadata:{...o}})}async handleToolStart(t,e,n,r,o,a,i){this.startSpan({runId:n,parentRunId:r,name:i??getSerializedName(t)??"Tool",type:"llm",event:{input:safeJsonParse(e),tags:o,metadata:{metadata:a,serialized:t,input_str:e,input:safeJsonParse(e),name:i}}})}async handleToolError(t,e,n,r){this.endSpan({runId:e,parentRunId:n,error:t,tags:r})}async handleToolEnd(t,e,n,r){this.endSpan({runId:e,parentRunId:n,output:t,tags:r})}async handleAgentAction(t,e,n,r){this.startSpan({runId:e,parentRunId:n,type:"llm",name:"string"==typeof t.tool?t.tool:"Agent",event:{input:t,tags:r}})}async handleAgentEnd(t,e,n,r){this.endSpan({runId:e,parentRunId:n,output:t,tags:r})}async handleRetrieverStart(t,e,n,r,o,a,i){this.startSpan({runId:n,parentRunId:r,name:i??getSerializedName(t)??"Retriever",type:"function",event:{input:e,tags:o,metadata:{serialized:t,metadata:a,name:i}}})}async handleRetrieverEnd(t,e,n,r){this.endSpan({runId:e,parentRunId:n,output:t,tags:r})}async handleRetrieverError(t,e,n,r){this.endSpan({runId:e,parentRunId:n,error:t,tags:r})}async handleLLMNewToken(t,e,n,r,o){if(!this.firstTokenTimes.has(n)){const t=Date.now();this.firstTokenTimes.set(n,t);const e=this.startTimes.get(n);void 0!==e&&this.ttftMs.set(n,(t-e)/1e3)}}};function getSerializedName(t){if("string"==typeof t.name)return t.name;const e=t.id?.at(-1);return"string"==typeof e?e:void 0}function cleanObject(t){return Object.fromEntries(Object.entries(t).filter(([,t])=>"number"==typeof t&&Number.isFinite(t)))}function walkGenerations(t){const e=[],n=t.generations||[];for(const t of n)if(Array.isArray(t))for(const n of t)isRecord(n)&&e.push(n);else isRecord(t)&&e.push(t);return e}function getModelNameFromResponse(t){for(const e of walkGenerations(t)){const t=e.message;if(!isRecord(t))continue;const n=t.response_metadata;if(!isRecord(n))continue;const r=n.model_name??n.model;if("string"==typeof r)return r}const e=t.llmOutput||{},n=e.model_name??e.model;return"string"==typeof n?n:void 0}function getMetricsFromResponse(t){for(const e of walkGenerations(t)){const t=e.message;if(!isRecord(t))continue;const n=t.usage_metadata;if(!isRecord(n))continue;const r=n.input_token_details;return cleanObject({total_tokens:n.total_tokens,prompt_tokens:n.input_tokens,completion_tokens:n.output_tokens,prompt_cache_creation_tokens:isRecord(r)?r.cache_creation:void 0,prompt_cached_tokens:isRecord(r)?r.cache_read:void 0})}const e=t.llmOutput||{},n=isRecord(e.tokenUsage)?e.tokenUsage:isRecord(e.estimatedTokens)?e.estimatedTokens:{};return cleanObject({total_tokens:n.totalTokens,prompt_tokens:n.promptTokens,completion_tokens:n.completionTokens})}function safeJsonParse(t){try{return JSON.parse(t)}catch{return t}}function isRecord(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}var langChainChannels=defineChannels("@langchain/core",{configure:channel({channelName:"CallbackManager.configure",kind:"sync-stream"}),configureSync:channel({channelName:"CallbackManager._configureSync",kind:"sync-stream"})}),LangChainPlugin=class extends BasePlugin{injectedManagers=new WeakSet;onEnable(){this.subscribeToConfigure(langChainChannels.configure),this.subscribeToConfigure(langChainChannels.configureSync)}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[],this.injectedManagers=new WeakSet}subscribeToConfigure(t){const e=t.tracingChannel(),n={start:t=>{injectHandlerIntoArguments(t.arguments)},end:t=>{this.injectHandler(t.result)}};e.subscribe(n),this.unsubscribers.push(()=>{e.unsubscribe(n)})}injectHandler(t){if(isCallbackManager(t)&&!this.injectedManagers.has(t)&&!hasBraintrustHandler(t))try{t.addHandler(new BraintrustLangChainCallbackHandler,!0),this.injectedManagers.add(t)}catch{}}};function isCallbackManager(t){if("object"!=typeof t||null===t)return!1;return"function"==typeof t.addHandler}function hasBraintrustHandler(t){return t.handlers?.some(t=>{if("object"!=typeof t||null===t)return!1;return Reflect.get(t,"name")===BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME})??!1}function injectHandlerIntoArguments(t){if(!isWritableArgumentsObject(t))return;const e=Reflect.get(t,"0"),n=new BraintrustLangChainCallbackHandler;null!=e?Array.isArray(e)&&(e.some(isBraintrustHandler)||e.push(n)):Reflect.set(t,"0",[n])}function isWritableArgumentsObject(t){return"object"==typeof t&&null!==t}function isBraintrustHandler(t){return"object"==typeof t&&null!==t&&Reflect.get(t,"name")===BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME}var langSmithChannels=defineChannels("langsmith",{createRun:channel({channelName:"Client.createRun",kind:"async"}),updateRun:channel({channelName:"Client.updateRun",kind:"async"}),batchIngestRuns:channel({channelName:"Client.batchIngestRuns",kind:"async"})}),MAX_COMPLETED_RUNS=1e4,BLOCKED_METADATA_KEYS=new Set(["__proto__","constructor","prototype","usage_metadata"]),BLOCKED_METADATA_PREFIXES=["__pregel_","langgraph_","lc_"],LLM_SETTING_KEYS=["temperature","top_p","max_tokens","frequency_penalty","presence_penalty","stop","response_format"],LangSmithPlugin=class extends BasePlugin{activeRuns=new Map;completedRuns=new LRUCache({max:MAX_COMPLETED_RUNS});skipLangChainRuns;constructor(t={}){super(),this.skipLangChainRuns=t.skipLangChainRuns??!0}onEnable(){const t=langSmithChannels.createRun.tracingChannel(),e={start:t=>{this.containLifecycleFailure("createRun",()=>{this.processCreate(t.arguments[0])})}};t.subscribe(e),this.unsubscribers.push(()=>t.unsubscribe(e));const n=langSmithChannels.updateRun.tracingChannel(),r={start:t=>{this.containLifecycleFailure("updateRun",()=>{this.processUpdate(t.arguments[0],t.arguments[1])})}};n.subscribe(r),this.unsubscribers.push(()=>n.unsubscribe(r));const o=langSmithChannels.batchIngestRuns.tracingChannel(),a={start:t=>{this.containLifecycleFailure("batchIngestRuns",()=>{this.processBatch(t.arguments[0])})}};o.subscribe(a),this.unsubscribers.push(()=>o.unsubscribe(a))}onDisable(){this.unsubscribers=unsubscribeAll(this.unsubscribers);for(const{span:t}of this.activeRuns.values())t.end();this.activeRuns.clear(),this.completedRuns.clear()}processBatch(t){if(!isRecord2(t))return;const e=ownValue(t,"runCreates");if(Array.isArray(e)){const t=[...e].sort((t,e)=>{const n=stringValue2(ownValue(t,"id")),r=stringValue2(ownValue(e,"id")),o=stringValue2(ownValue(t,"parent_run_id")),a=stringValue2(ownValue(e,"parent_run_id"));return o&&o===r?1:a&&a===n?-1:dottedOrderDepth(t)-dottedOrderDepth(e)});for(const e of t)this.containLifecycleFailure("batchIngestRuns create",()=>{this.processCreate(e)})}const n=ownValue(t,"runUpdates");if(Array.isArray(n))for(const t of n)this.containLifecycleFailure("batchIngestRuns update",()=>{this.processUpdate(stringValue2(ownValue(t,"id"))??"",t)})}processCreate(t){const e=stringValue2(ownValue(t,"id"));if(!e||this.completedRuns.get(e))return;if(this.shouldSkipLangChainRun(t))return void this.completedRuns.set(e,!0);const n=this.activeRuns.get(e);if(n){const r=n.run;return n.run=mergeRuns(r,t),this.logRun(n.span,n.run,r,void 0!==timestampSeconds(ownValue(n.run,"end_time"))||void 0!==errorMessage(ownValue(n.run,"error"))),void this.endIfComplete(e,n,n.run)}const r=this.startRunSpan(e,t),o={run:t,span:r};this.activeRuns.set(e,o),this.logRun(r,t,void 0,void 0!==timestampSeconds(ownValue(t,"end_time"))||void 0!==errorMessage(ownValue(t,"error"))),this.endIfComplete(e,o,t)}processUpdate(t,e){const n=stringValue2(t)??stringValue2(ownValue(e,"id"));if(!n||this.completedRuns.get(n))return;if(this.shouldSkipLangChainRun(e)){const t=this.activeRuns.get(n);return t?.span.end(),this.activeRuns.delete(n),void this.completedRuns.set(n,!0)}let r=this.activeRuns.get(n);if(!r){r={run:e,span:this.startRunSpan(n,e)},this.activeRuns.set(n,r)}const o=r.run;r.run=mergeRuns(o,e),this.logRun(r.span,r.run,o,!0),this.endIfComplete(n,r,r.run)}startRunSpan(t,e){const n=stringValue2(ownValue(e,"trace_id"))??t,r=stringValue2(ownValue(e,"parent_run_id"))??stringValue2(ownValue(ownValue(e,"parent_run"),"id")),o=timestampSeconds(ownValue(e,"start_time"));return startSpan({name:stringValue2(ownValue(e,"name"))??"LangSmith run",spanId:t,parentSpanIds:{parentSpanIds:r?[r]:[],rootSpanId:n},spanAttributes:{type:mapRunType(ownValue(e,"run_type"))},...void 0===o?{}:{startTime:o},event:{id:t}})}logRun(t,e,n,r){const o=preferOwnValue(e,n,"inputs"),a=preferOwnValue(e,n,"outputs"),i=errorMessage(preferOwnValue(e,n,"error")),s=extractMetadata(e,n),c=extractTags(preferOwnValue(e,n,"tags")),u=extractMetrics(e,n);t.log({...void 0===o?{}:{input:sanitizeLoggedValue(o)},...r&&void 0!==a?{output:sanitizeLoggedValue(a)}:{},...void 0===i?{}:{error:i},...void 0===s?{}:{metadata:s},...void 0===c?{}:{tags:c},...0===Object.keys(u).length?{}:{metrics:u}})}endIfComplete(t,e,n){const r=timestampSeconds(ownValue(n,"end_time"));void 0===r&&void 0===errorMessage(ownValue(n,"error"))||(e.span.end(void 0===r?void 0:{endTime:r}),this.activeRuns.delete(t),this.completedRuns.set(t,!0))}shouldSkipLangChainRun(t){if(!this.skipLangChainRuns)return!1;const e=ownValue(t,"serialized");return isRecord2(e)&&1===ownValue(e,"lc")}containLifecycleFailure(t,e){try{e()}catch(e){debugLogger.error(`Failed to process LangSmith ${t} instrumentation:`,e)}}};function ownValue(t,e){if(!isRecord2(t))return;const n=Object.getOwnPropertyDescriptor(t,e);return n&&"value"in n?n.value:void 0}function preferOwnValue(t,e,n){const r=isRecord2(t)?Object.getOwnPropertyDescriptor(t,n):void 0;return r&&"value"in r?r.value:ownValue(e,n)}function mergeRuns(t,e){const n=new Map;for(const r of[t,e])if(isRecord2(r))for(const[t,e]of Object.entries(Object.getOwnPropertyDescriptors(r)))e.enumerable&&"value"in e&&n.set(t,e.value);return Object.fromEntries(n)}function isRecord2(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function stringValue2(t){return"string"==typeof t&&t.length>0?t:void 0}function timestampSeconds(t){if(t instanceof Date){const e=t.getTime();return Number.isFinite(e)?e/1e3:void 0}if("number"==typeof t&&Number.isFinite(t)&&t>=0)return t>1e10?t/1e3:t;if("string"==typeof t){const e=Date.parse(t);return Number.isFinite(e)?e/1e3:void 0}}function dottedOrderDepth(t){const e=stringValue2(ownValue(t,"dotted_order"));return e?e.split(".").length:Number.MAX_SAFE_INTEGER}function mapRunType(t){switch(t){case"llm":case"embedding":return"llm";case"tool":case"retriever":return"tool";default:return"task"}}function extractMetadata(t,e){const n=ownValue(preferOwnValue(t,e,"extra"),"metadata");if(!isRecord2(n))return;const r={};for(const[t,e]of Object.entries(Object.getOwnPropertyDescriptors(n))){if(!("value"in e)||!e.enumerable||BLOCKED_METADATA_KEYS.has(t)||BLOCKED_METADATA_PREFIXES.some(e=>t.startsWith(e))||t.startsWith("ls_")&&"ls_provider"!==t&&"ls_model_name"!==t&&!LLM_SETTING_KEYS.some(e=>t===`ls_${e}`))continue;const n="ls_provider"===t?"provider":"ls_model_name"===t?"model":t.startsWith("ls_")?t.slice(3):t,o=sanitizeLoggedValue(e.value);void 0!==o&&(r[n]=o)}return 0===Object.keys(r).length?void 0:r}function extractTags(t){if(!Array.isArray(t))return;const e=t.filter(t=>"string"==typeof t&&t.length>0);return e.length>0?e:void 0}function extractMetrics(t,e){const n=preferOwnValue(t,e,"outputs"),r=ownValue(preferOwnValue(t,e,"extra"),"metadata"),o=ownValue(n,"usage_metadata")??ownValue(r,"usage_metadata"),a={};assignFirstMetric(a,"prompt_tokens",o,["input_tokens","prompt_tokens"]),assignFirstMetric(a,"completion_tokens",o,["output_tokens","completion_tokens"]),assignFirstMetric(a,"tokens",o,["total_tokens","tokens"]);const i=ownValue(o,"input_token_details");assignFirstMetric(a,"prompt_cached_tokens",i,["cache_read","cached_tokens"]),void 0===a.prompt_cached_tokens&&assignFirstMetric(a,"prompt_cached_tokens",o,["cache_read_input_tokens","prompt_cached_tokens"]),assignFirstMetric(a,"prompt_cache_creation_tokens",i,["cache_creation"]),void 0===a.prompt_cache_creation_tokens&&assignFirstMetric(a,"prompt_cache_creation_tokens",o,["cache_creation_input_tokens","prompt_cache_creation_tokens"]),void 0!==a.tokens||void 0===a.prompt_tokens&&void 0===a.completion_tokens||(a.tokens=(a.prompt_tokens??0)+(a.completion_tokens??0));const s=timestampSeconds(preferOwnValue(t,e,"start_time")),c=preferOwnValue(t,e,"events");if(void 0!==s&&Array.isArray(c))for(const t of c){if("new_token"!==ownValue(t,"name"))continue;const e=timestampSeconds(ownValue(t,"time"));void 0!==e&&e>=s&&(a.time_to_first_token=e-s);break}return a}function assignFirstMetric(t,e,n,r){for(const o of r){const r=ownValue(n,o);if("number"==typeof r&&Number.isFinite(r)&&r>=0)return void(t[e]=r)}}function errorMessage(t){return"string"==typeof t?t:t instanceof Error?t.message:void 0}function sanitizeLoggedValue(t,e=new WeakSet,n=0){if(null===t||"string"==typeof t||"boolean"==typeof t)return t;if("number"==typeof t)return Number.isFinite(t)?t:void 0;if(t instanceof Date)return Number.isFinite(t.getTime())?t.toISOString():void 0;if("object"!=typeof t||n>=20)return;if(e.has(t))return"[Circular]";if(e.add(t),Array.isArray(t))return t.map(t=>sanitizeLoggedValue(t,e,n+1));const r=[];for(const[o,a]of Object.entries(Object.getOwnPropertyDescriptors(t)))a.enumerable&&"value"in a&&!BLOCKED_METADATA_KEYS.has(o)&&r.push([o,sanitizeLoggedValue(a.value,e,n+1)]);return Object.fromEntries(r)}var piPromptContextStore,piCodingAgentChannels=defineChannels("@earendil-works/pi-coding-agent",{prompt:channel({channelName:"AgentSession.prompt",kind:"async"})}),piStreamPatchStates=new WeakMap,PiCodingAgentPlugin=class extends BasePlugin{activePromptStates=new Set;onEnable(){this.subscribeToPrompt()}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[];for(const t of[...this.activePromptStates])finalizePiPromptRun(t).catch(t=>{logInstrumentationError4("Pi Coding Agent disable cleanup",t)})}subscribeToPrompt(){const t=piCodingAgentChannels.prompt.tracingChannel(),e=new WeakMap,n=bindAutoInstrumentationSuppressionToStart(t),r={start:t=>{const n=startPiPromptRun(t,t=>{this.activePromptStates.delete(t)});n&&(this.activePromptStates.add(n),e.set(t,n))},asyncEnd:async t=>{const n=e.get(t);n&&(e.delete(t),n.promptCallEnded=!0,n.finalized||!n.deferCompletionUntilTurnEnd||n.turnEnded?await finalizePiPromptRun(n):n.sawStreamFn||(n.queued=!0,n.streamPatchState.queuedPromptStates.includes(n)||n.streamPatchState.queuedPromptStates.push(n)))},error:async t=>{const n=e.get(t);n&&(e.delete(t),await finalizePiPromptRun(n,t.error))}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}};function startPiPromptRun(t,e){const n=extractSession(t),r=n?.agent;if(!n||!isPiAgent(r))return;const o={...extractSessionMetadata(n),...extractPromptOptionsMetadata(t.arguments[1]),"pi_coding_agent.operation":"AgentSession.prompt",provider:n.model?.provider??r.state?.model?.provider??"pi",...n.model?.id||r.state?.model?.id?{model:n.model?.id??r.state?.model?.id}:{},...t.moduleVersion?{"pi_coding_agent.version":t.moduleVersion}:{}},a=startSpan({event:{input:extractPromptInput(t.arguments[0],t.arguments[1]),metadata:o},name:"AgentSession.prompt",spanAttributes:{type:"task"}}),i=installPiStreamPatch(r),s=t.arguments[1],c=t.arguments[0],u={activeLlmSpans:new Set,activeToolSpans:new Map,agent:r,collectedLlmUsageMetrics:!1,deferCompletionUntilTurnEnd:"followUp"===s?.streamingBehavior||"steer"===s?.streamingBehavior,finalized:!1,metadata:o,metrics:{},onFinalize:e,promptCallEnded:!1,..."string"==typeof c?{promptText:c}:{},queued:!1,span:a,sawStreamFn:!1,startTime:getCurrentUnixTimestamp(),streamPatchState:i,turnEnded:!1};u.restorePromptContext=enterPiPromptContext(u),i.activePromptStates.add(u);try{u.unsubscribeAgent=r.subscribe(async t=>{try{await runWithAutoInstrumentationSuppressed(()=>handlePiAgentEvent(u,t))}catch(t){logInstrumentationError4("Pi Coding Agent event",t)}})}catch(t){logInstrumentationError4("Pi Coding Agent event subscription",t)}return u}function extractSession(t){const e=t.session??t.self;return isObject(e)&&"function"==typeof e.prompt?e:void 0}function isPiAgent(t){return isObject(t)&&"function"==typeof t.streamFn&&"function"==typeof t.subscribe}function promptContextStore(){return piPromptContextStore??=isomorph_default.newAsyncLocalStorage(),piPromptContextStore}function currentPromptContextFrames(){return promptContextStore().getStore()?.frames??[]}function currentPiPromptState(){const t=currentPromptContextFrames();return t[t.length-1]?.state}function enterPiPromptContext(t){const e={id:Symbol("braintrust.pi-coding-agent.prompt"),state:t};return promptContextStore().enterWith({frames:[...currentPromptContextFrames(),e]}),()=>{const t=currentPromptContextFrames().filter(t=>t.id!==e.id);promptContextStore().enterWith(t.length>0?{frames:t}:void 0)}}function installPiStreamPatch(t){const e=piStreamPatchStates.get(t);if(e)return t.streamFn!==e.wrappedStreamFn&&debugLogger.debug("Pi Coding Agent streamFn changed while Braintrust instrumentation was active; preserving existing patch state."),e;const n={activePromptStates:new Set,agent:t,originalStreamFn:t.streamFn,queuedPromptStates:[],wrappedStreamFn:t.streamFn};return n.wrappedStreamFn=makeSharedInstrumentedStreamFn(n),t.streamFn=n.wrappedStreamFn,piStreamPatchStates.set(t,n),n}function resolveStreamPromptState(t,e){let n;if(Array.isArray(e.messages))for(let t=e.messages.length-1;t>=0;t--){const r=e.messages[t];if(isPiUserMessage(r)){n="string"==typeof r.content?r.content:r.content.flatMap(t=>"text"===t.type?[t.text]:[]).join("");break}}if(void 0!==n){const e=t.queuedPromptStates.find(t=>t.promptText===n);if(e)return e;const r=[...t.activePromptStates].filter(t=>t.promptText===n);if(1===r.length)return r[0]}const r=currentPiPromptState();return r&&t.activePromptStates.has(r)&&(!r.queued||void 0!==n&&r.promptText===n)?r:1===t.activePromptStates.size?[...t.activePromptStates][0]:void 0}function makeSharedInstrumentedStreamFn(t){return async function(e,n,r){const o=resolveStreamPromptState(t,n);if(!o){const o=()=>Reflect.apply(t.originalStreamFn,this,[e,n,r]);return t.activePromptStates.size>0?runWithAutoInstrumentationSuppressed(o):o()}o.sawStreamFn=!0,removeQueuedPromptState(o),o.streamPatchState.eventPromptState=o;const a=await startPiLlmSpan(o,e,n,r);try{return patchAssistantMessageStream(await runWithAutoInstrumentationSuppressed(()=>Reflect.apply(t.originalStreamFn,this,[e,n,r])),o,a)}catch(t){throw finishPiLlmSpan(o,a,void 0,t),t}}}async function startPiLlmSpan(t,e,n,r){const o={...extractModelMetadata2(e),...extractStreamOptionsMetadata(r),...extractToolMetadata(n.tools),"pi_coding_agent.operation":"agent.streamFn"},a={finalized:!1,metadata:o,metrics:{},span:startSpan({event:{input:processInputAttachments(normalizePiContextInput(n)),metadata:o},name:getLlmSpanName(e),parent:await t.span.export(),spanAttributes:{type:"llm"}}),startTime:getCurrentUnixTimestamp()};return t.activeLlmSpans.add(a),a}function patchAssistantMessageStream(t,e,n){if(!isObject(t))return t;const r=t,o=t.result;"function"==typeof o&&(r.result=function(){return Promise.resolve(Reflect.apply(o,this,[])).then(t=>(finishPiLlmSpan(e,n,t),t),t=>{throw finishPiLlmSpan(e,n,void 0,t),t})});const a=t[Symbol.asyncIterator];return"function"==typeof a&&(r[Symbol.asyncIterator]=function(){const t=Reflect.apply(a,this,[]);return{async next(){try{const r=await t.next();return r.done?(finishPiLlmSpan(e,n),r):(recordPiAssistantMessageEvent(e,n,r.value),r)}catch(r){if(finishPiLlmSpan(e,n,void 0,r),"function"==typeof t.return)try{await t.return()}catch(t){logInstrumentationError4("Pi Coding Agent stream cleanup",t)}throw r}},async return(r){try{return"function"==typeof t.return?await t.return(r):{done:!0,value:r}}catch(t){throw finishPiLlmSpan(e,n,void 0,t),t}finally{finishPiLlmSpan(e,n)}},async throw(r){try{if("function"==typeof t.throw)return await t.throw(r);throw r}catch(t){throw finishPiLlmSpan(e,n,void 0,t),t}},[Symbol.asyncIterator](){return this}}}),t}function recordPiAssistantMessageEvent(t,e,n){recordFirstTokenMetric(e,n);const r="message"in n?n.message:void 0,o="error"in n?n.error:void 0;"done"===n.type&&isPiAssistantMessage(r)?finishPiLlmSpan(t,e,r):"error"===n.type&&isPiAssistantMessage(o)&&finishPiLlmSpan(t,e,o)}function recordFirstTokenMetric(t,e){void 0===t.metrics.time_to_first_token&&"start"!==e.type&&(t.metrics.time_to_first_token=getCurrentUnixTimestamp()-t.startTime)}async function handlePiAgentEvent(t,e){if(t.finalized)return;const n=t.streamPatchState.eventPromptState;if((!n||n===t)&&(n||!(t.queued||t.streamPatchState.activePromptStates.size>1&&currentPiPromptState()!==t)))switch(e.type){case"message_end":return void(isPiAssistantMessage(e.message)&&(t.output=extractAssistantOutput(e.message)));case"turn_end":return t.turnEnded=!0,isPiAssistantMessage(e.message)&&(t.output=extractAssistantOutput(e.message),t.collectedLlmUsageMetrics||addMetrics(t.metrics,extractUsageMetrics2(e.message.usage))),t.streamPatchState.eventPromptState===t&&(t.streamPatchState.eventPromptState=void 0),void(t.promptCallEnded&&t.deferCompletionUntilTurnEnd&&await finalizePiPromptRun(t));case"tool_execution_start":return void await startPiToolSpan(t,e);case"tool_execution_end":return void finishPiToolSpan(t,e);default:return}}async function startPiToolSpan(t,e){if(!e.toolCallId||t.activeToolSpans.has(e.toolCallId))return;const n=enterAutoInstrumentationAllowed(),r={"gen_ai.tool.call.id":e.toolCallId,"gen_ai.tool.name":e.toolName,"pi_coding_agent.tool.name":e.toolName};try{const o=startSpan({event:{input:e.args,metadata:r},name:e.toolName||"tool",parent:await t.span.export(),spanAttributes:{type:"tool"}});t.activeToolSpans.set(e.toolCallId,{restoreAutoInstrumentation:n,span:o})}catch(t){throw n(),t}}function finishPiToolSpan(t,e){const n=t.activeToolSpans.get(e.toolCallId);if(!n)return;t.activeToolSpans.delete(e.toolCallId);const r={"gen_ai.tool.call.id":e.toolCallId,"gen_ai.tool.name":e.toolName,"pi_coding_agent.tool.name":e.toolName,"pi_coding_agent.tool.is_error":e.isError};try{safeLog4(n.span,{...e.isError?{error:toLoggedError(e.result)}:{},metadata:r,output:e.result})}finally{try{n.span.end()}finally{n.restoreAutoInstrumentation?.()}}}async function finalizePiPromptRun(t,e){if(t.finalized)return;t.finalized=!0,t.onFinalize?.(t),restorePiStreamFn(t);try{t.unsubscribeAgent?.()}catch(t){logInstrumentationError4("Pi Coding Agent unsubscribe",t)}await finishOpenLlmSpans(t,e),finishOpenToolSpans(t,e);const n={...t.metadata,...extractModelMetadata2(t.agent.state?.model)};try{safeLog4(t.span,{...e?{error:toLoggedError(e)}:{},metadata:n,metrics:{...cleanMetrics5(t.metrics),...buildDurationMetrics3(t.startTime)},output:t.output})}finally{t.span.end()}}function restorePiStreamFn(t){const e=t.streamPatchState;e.activePromptStates.delete(t),removeQueuedPromptState(t),e.eventPromptState===t&&(e.eventPromptState=void 0),t.restorePromptContext?.(),e.activePromptStates.size>0||(e.agent.streamFn===e.wrappedStreamFn&&(e.agent.streamFn=e.originalStreamFn),piStreamPatchStates.delete(e.agent))}function removeQueuedPromptState(t){t.queued=!1;const e=t.streamPatchState.queuedPromptStates,n=e.indexOf(t);n>=0&&e.splice(n,1)}async function finishOpenLlmSpans(t,e){for(const n of[...t.activeLlmSpans])finishPiLlmSpan(t,n,void 0,e)}function finishPiLlmSpan(t,e,n,r){if(e.finalized)return;e.finalized=!0,t.activeLlmSpans.delete(e);const o="error"===n?.stopReason&&n.errorMessage,a={...extractUsageMetrics2(n?.usage),...cleanMetrics5(e.metrics),...buildDurationMetrics3(e.startTime)},i=extractUsageMetrics2(n?.usage);Object.keys(i).length>0&&(t.collectedLlmUsageMetrics=!0,addMetrics(t.metrics,i));try{safeLog4(e.span,{...r||o?{error:toLoggedError(r??o)}:{},metadata:{...e.metadata,...n?extractAssistantMetadata(n):{}},metrics:a,...n?{output:extractAssistantOutput(n)}:{}})}finally{e.span.end()}}function finishOpenToolSpans(t,e){for(const[,n]of t.activeToolSpans)try{safeLog4(n.span,{error:e?toLoggedError(e):"Pi tool did not complete"}),n.span.end()}finally{n.restoreAutoInstrumentation?.()}t.activeToolSpans.clear()}function normalizePiContextInput(t){const e=t.messages.flatMap(t=>normalizePiMessage(t));return t.systemPrompt?[{role:"system",content:t.systemPrompt},...e]:e}function normalizePiMessage(t){return isPiUserMessage(t)?[{role:"user",content:normalizeUserContent(t.content)}]:isPiAssistantMessage(t)?[normalizeAssistantMessage(t)]:isPiToolResultMessage(t)?[normalizeToolResultMessage(t)]:[]}function normalizeAssistantMessage(t){const e=t.content.flatMap(t=>"text"===t.type?[t.text]:[]).join(""),n=t.content.flatMap(t=>"thinking"!==t.type||t.redacted?[]:[t.thinking]).join(""),r=t.content.flatMap(t=>"toolCall"===t.type?[normalizeToolCall(t)]:[]);return{role:"assistant",content:e||(r.length>0?null:""),...n?{reasoning:n}:{},...r.length>0?{tool_calls:r}:{}}}function normalizeToolResultMessage(t){return{role:"tool",tool_call_id:t.toolCallId,content:normalizeUserContent(t.content)}}function normalizeUserContent(t){return"string"==typeof t?t:t.map(t=>"text"===t.type?{type:"text",text:t.text}:"image"===t.type?{type:"image_url",image_url:{url:`data:${t.mimeType};base64,${t.data}`}}:t)}function normalizeToolCall(t){return{id:t.id,type:"function",function:{name:t.name,arguments:stringifyArguments(t.arguments)}}}function extractAssistantOutput(t){return processInputAttachments([{finish_reason:normalizeStopReason(t.stopReason),index:0,message:normalizeAssistantMessage(t)}])}function isPiUserMessage(t){return"user"===t.role&&"content"in t}function isPiAssistantMessage(t){return isObject(t)&&"assistant"===t.role&&Array.isArray(t.content)}function isPiToolResultMessage(t){return"toolResult"===t.role&&Array.isArray(t.content)}function normalizeStopReason(t){switch(t){case"toolUse":return"tool_calls";case"length":case"stop":return t;default:return t??"stop"}}function extractPromptInput(t,e){const n=e?.images;return n&&0!==n.length?processInputAttachments([{role:"user",content:[{type:"text",text:t??""},...n.map(t=>({type:"image_url",image_url:{url:`data:${t.mimeType};base64,${t.data}`}}))]}]):t}function extractToolMetadata(t){return t&&0!==t.length?{tools:t.map(t=>({type:"function",function:{name:t.name,...t.description?{description:t.description}:{},...t.parameters?{parameters:t.parameters}:{}}}))}:{}}function extractModelMetadata2(t){return t?{...t.provider?{provider:t.provider}:{},...t.id?{model:t.id,"pi_coding_agent.model":t.id}:{},...t.api?{"pi_coding_agent.api":t.api}:{},...t.name?{"pi_coding_agent.model_name":t.name}:{}}:{}}function extractAssistantMetadata(t){return{...t.provider?{provider:t.provider}:{},...t.responseModel||t.model?{model:t.responseModel??t.model}:{},...t.api?{"pi_coding_agent.api":t.api}:{},...t.model?{"pi_coding_agent.model":t.model}:{},...t.responseModel?{"pi_coding_agent.response_model":t.responseModel}:{},...t.responseId?{"pi_coding_agent.response_id":t.responseId}:{},...t.stopReason?{"pi_coding_agent.stop_reason":t.stopReason}:{}}}function extractSessionMetadata(t){return{...extractModelMetadata2(t.model),...t.sessionId?{"pi_coding_agent.session_id":t.sessionId}:{},...t.sessionName?{"pi_coding_agent.session_name":t.sessionName}:{},...t.thinkingLevel?{"pi_coding_agent.thinking_level":t.thinkingLevel}:{},..."function"==typeof t.getActiveToolNames?{"pi_coding_agent.active_tools":t.getActiveToolNames()}:{}}}function extractPromptOptionsMetadata(t){return t?{...t.source?{"pi_coding_agent.source":t.source}:{},...t.streamingBehavior?{"pi_coding_agent.streaming_behavior":t.streamingBehavior}:{},...void 0!==t.expandPromptTemplates?{"pi_coding_agent.expand_prompt_templates":t.expandPromptTemplates}:{}}:{}}function extractStreamOptionsMetadata(t){return t?{...void 0!==t.temperature?{temperature:t.temperature}:{},...void 0!==t.maxTokens?{max_tokens:t.maxTokens}:{},...t.reasoning?{"pi_coding_agent.reasoning":t.reasoning}:{},...t.transport?{"pi_coding_agent.transport":t.transport}:{},...t.cacheRetention?{"pi_coding_agent.cache_retention":t.cacheRetention}:{},...t.sessionId?{"pi_coding_agent.session_id":t.sessionId}:{},...void 0!==t.timeoutMs?{"pi_coding_agent.timeout_ms":t.timeoutMs}:{},...void 0!==t.maxRetries?{"pi_coding_agent.max_retries":t.maxRetries}:{},...void 0!==t.maxRetryDelayMs?{"pi_coding_agent.max_retry_delay_ms":t.maxRetryDelayMs}:{},...t.metadata?{"pi_coding_agent.metadata":t.metadata}:{}}:{}}function getLlmSpanName(t){switch(t.api){case"anthropic-messages":return"anthropic.messages.create";case"openai-completions":return"Chat Completion";case"openai-responses":case"azure-openai-responses":case"openai-codex-responses":return"openai.responses.create";case"google-generative-ai":case"google-vertex":return"generate_content";case"mistral-conversations":return"mistral.chat.stream";case"bedrock-converse-stream":return"bedrock.converse_stream";default:return"pi_ai.streamSimple"}}function extractUsageMetrics2(t){return t?cleanMetrics5({completion_tokens:t.output,prompt_cache_creation_tokens:t.cacheWrite,prompt_cached_tokens:t.cacheRead,prompt_tokens:t.input,tokens:t.totalTokens??t.tokens}):{}}function addMetrics(t,e){for(const[n,r]of Object.entries(e))t[n]=(t[n]??0)+r}function buildDurationMetrics3(t){const e=getCurrentUnixTimestamp();return{duration:e-t,end:e,start:t}}function cleanMetrics5(t){const e={};for(const[n,r]of Object.entries(t))"number"==typeof r&&Number.isFinite(r)&&r>=0&&(e[n]=r);return e}function stringifyArguments(t){if("string"==typeof t)return t;try{return JSON.stringify(t)}catch{return stringifyUnknown(t)}}function stringifyUnknown(t){if(t instanceof Error)return t.message;if("string"==typeof t)return t;try{return JSON.stringify(t)}catch{return String(t)}}function safeLog4(t,e){try{t.log(e)}catch(t){logInstrumentationError4("Pi Coding Agent span log",t)}}function logInstrumentationError4(t,e){debugLogger.debug(`${t}:`,e)}var strandsAgentSDKChannels=defineChannels("@strands-agents/sdk",{agentStream:channel({channelName:"Agent.stream",kind:"sync-stream"}),graphStream:channel({channelName:"Graph.stream",kind:"sync-stream"}),swarmStream:channel({channelName:"Swarm.stream",kind:"sync-stream"})}),MAX_STRANDS_STRING_ATTACHMENT_CACHE_ENTRIES=32,StrandsAgentSDKPlugin=class extends BasePlugin{activeChildParents=new WeakMap;onEnable(){this.subscribeToAgentStream(),this.subscribeToMultiAgentStream(strandsAgentSDKChannels.graphStream,"Graph.stream"),this.subscribeToMultiAgentStream(strandsAgentSDKChannels.swarmStream,"Swarm.stream")}onDisable(){for(const t of this.unsubscribers)t();this.unsubscribers=[]}subscribeToAgentStream(){const t=strandsAgentSDKChannels.agentStream.tracingChannel(),e=new WeakMap,n=bindAutoInstrumentationSuppressionToStart(t),r={start:t=>{const n=startAgentStream(t,this.activeChildParents);n&&e.set(t,n)},end:t=>{const n=e.get(t);if(!n)return;const r=t.result;isAsyncIterable(r)?patchStreamIfNeeded(r,{aroundNext:t=>runWithAutoInstrumentationSuppressed(t),onChunk:t=>handleAgentStreamEvent(n,t),onComplete:()=>{finalizeAgentStream(n),e.delete(t)},onError:r=>{finalizeAgentStream(n,r),e.delete(t)}}):(finalizeAgentStream(n,void 0,r),e.delete(t))},error:t=>{const n=e.get(t);n&&t.error&&(finalizeAgentStream(n,t.error),e.delete(t))}};t.subscribe(r),this.unsubscribers.push(()=>{n?.(),t.unsubscribe(r)})}subscribeToMultiAgentStream(t,e){const n=t.tracingChannel(),r=new WeakMap,o=bindAutoInstrumentationSuppressionToStart(n),a={start:t=>{const n=startMultiAgentStream(t,e,this.activeChildParents);n&&r.set(t,n)},end:t=>{const e=r.get(t);if(!e)return;const n=t.result;isAsyncIterable(n)?patchStreamIfNeeded(n,{aroundNext:t=>runWithAutoInstrumentationSuppressed(t),onChunk:t=>handleMultiAgentStreamEvent(e,t,this.activeChildParents),onComplete:()=>{finalizeMultiAgentStream(e,this.activeChildParents),r.delete(t)},onError:n=>{finalizeMultiAgentStream(e,this.activeChildParents,n),r.delete(t)}}):(finalizeMultiAgentStream(e,this.activeChildParents,void 0,n),r.delete(t))},error:t=>{const e=r.get(t);e&&t.error&&(finalizeMultiAgentStream(e,this.activeChildParents,t.error),r.delete(t))}};n.subscribe(a),this.unsubscribers.push(()=>{o?.(),n.unsubscribe(a)})}};function startAgentStream(t,e){const n=extractAgent(t),r=n?.model,o={...extractAgentMetadata2(n),...extractModelMetadata3(r),"strands.operation":"Agent.stream",provider:extractProvider(r),...t.moduleVersion?{"strands_agent_sdk.version":t.moduleVersion}:{}},a=n?getOnlyChildParent(e,n):void 0,i=createStrandsAttachmentCache(),s=processStrandsInputAttachments(t.arguments[0],i),c=a?withCurrent(a,()=>startSpan({event:{input:s,metadata:o},name:formatAgentSpanName(n),spanAttributes:{type:"task"}})):startSpan({event:{input:s,metadata:o},name:formatAgentSpanName(n),spanAttributes:{type:"task"}});return{activeTools:new Map,attachmentCache:i,finalized:!1,metadata:o,span:c,startTime:getCurrentUnixTimestamp()}}function startMultiAgentStream(t,e,n){const r=extractOrchestrator(t),o={"strands.operation":e,provider:"strands",...r?.id?{"strands.orchestrator.id":r.id}:{},...t.moduleVersion?{"strands_agent_sdk.version":t.moduleVersion}:{}},a=r?getOnlyChildParent(n,r):void 0,i=processStrandsInputAttachments(t.arguments[0]),s=a?withCurrent(a,()=>startSpan({event:{input:i,metadata:o},name:"Graph.stream"===e?"Strands Graph":"Strands Swarm",spanAttributes:{type:"task"}})):startSpan({event:{input:i,metadata:o},name:"Graph.stream"===e?"Strands Graph":"Strands Swarm",spanAttributes:{type:"task"}});return{activeNodes:new Map,finalized:!1,handoffs:[],metadata:o,operation:e,orchestrator:r,span:s,startTime:getCurrentUnixTimestamp()}}function handleAgentStreamEvent(t,e){try{switch(e.type){case"beforeModelCallEvent":startModelSpan(t,e);break;case"modelStreamUpdateEvent":collectModelStreamMetadata(t,e);break;case"afterModelCallEvent":finalizeModelSpan(t,e);break;case"beforeToolCallEvent":startToolSpan2(t,e);break;case"afterToolCallEvent":finalizeToolSpan(t,e);break;case"toolResultEvent":finalizeToolSpanFromResult(t,e.result);break;case"agentResultEvent":safeLog5(t.span,{metadata:{...t.metadata,...extractAgentResultMetadata(e.result)},metrics:{...buildDurationMetrics4(t.startTime),...parseUsage(e.result?.metrics?.accumulatedUsage)},output:extractAgentResultOutput(e.result)})}}catch(t){logInstrumentationError5("Strands Agent SDK event",t)}}function handleMultiAgentStreamEvent(t,e,n){try{switch(e.type){case"beforeNodeCallEvent":startNodeSpan(t,e,n);break;case"nodeResultEvent":logNodeResult(t,e);break;case"afterNodeCallEvent":finalizeNodeSpan(t,e,n);break;case"multiAgentHandoffEvent":collectHandoff(t,e);break;case"multiAgentResultEvent":safeLog5(t.span,{metadata:{...t.metadata,...t.handoffs.length>0?{"strands.handoffs":t.handoffs}:{},...extractMultiAgentResultMetadata(e.result)},metrics:{...buildDurationMetrics4(t.startTime),...parseUsage(e.result?.usage)},output:extractMultiAgentResultOutput(e.result)})}}catch(t){logInstrumentationError5("Strands Agent SDK multi-agent event",t)}}function startModelSpan(t,e){t.activeModel&&finalizeModelSpan(t);const n=e.model??e.agent?.model,r={...extractModelMetadata3(n),"strands.operation":"model.stream",..."number"==typeof e.projectedInputTokens?{"strands.projected_input_tokens":e.projectedInputTokens}:{},provider:extractProvider(n)},o=withCurrent(t.span,()=>startSpan({event:{input:Array.isArray(e.agent?.messages)?processStrandsInputAttachments(e.agent.messages,t.attachmentCache):void 0,metadata:r},name:formatModelSpanName(n),spanAttributes:{type:"llm"}}));t.activeModel={metadata:r,metrics:"number"==typeof e.projectedInputTokens?{prompt_tokens:e.projectedInputTokens}:{},span:o,startTime:getCurrentUnixTimestamp()}}function collectModelStreamMetadata(t,e){t.activeModel&&"modelMetadataEvent"===e.event?.type&&(Object.assign(t.activeModel.metrics,parseUsage(e.event.usage)),Object.assign(t.activeModel.metrics,parseModelMetrics(e.event.metrics)))}function finalizeModelSpan(t,e){const n=t.activeModel;if(!n)return;t.activeModel=void 0;const r={...n.metadata,...e?.attemptCount?{"strands.model.attempt":e.attemptCount}:{},...e?.stopData?.stopReason?{"strands.stop_reason":e.stopData.stopReason}:{}},o={...buildDurationMetrics4(n.startTime),...n.metrics};safeLog5(n.span,{...e?.error?{error:toLoggedError(e.error)}:{},metadata:r,metrics:cleanMetrics6(o),output:e?.stopData?.message}),n.span.end()}function startToolSpan2(t,e){const n=e.toolUse,r=toolKey2(n);t.activeTools.has(r)&&(finalizeToolSpanState(t.activeTools.get(r)),t.activeTools.delete(r));const o=extractToolName3(n,e.tool),a=withCurrent(t.span,()=>startSpan({event:{input:n?.input,metadata:{"gen_ai.tool.call.id":n?.toolUseId,"gen_ai.tool.name":o,"strands.operation":"tool.call","strands.tool.name":o,provider:"strands"}},name:`tool: ${o}`,spanAttributes:{type:"tool"}}));t.activeTools.set(r,{span:a,startTime:getCurrentUnixTimestamp(),toolUse:n})}function finalizeToolSpan(t,e){const n=toolKey2(e.toolUse),r=t.activeTools.get(n);r&&(t.activeTools.delete(n),finalizeToolSpanState(r,{error:e.error,result:e.result,toolUse:e.toolUse}))}function finalizeToolSpanFromResult(t,e){if(!isObject(e))return;const n=e.toolUseId;if("string"!=typeof n)return;const r=t.activeTools.get(n);r&&(t.activeTools.delete(n),finalizeToolSpanState(r,{result:e}))}function finalizeToolSpanState(t,e={}){if(!t)return;const n=e.result;safeLog5(t.span,{...e.error?{error:toLoggedError(e.error)}:{},metadata:{...e.toolUse?.toolUseId??t.toolUse?.toolUseId?{"gen_ai.tool.call.id":e.toolUse?.toolUseId??t.toolUse?.toolUseId}:{},...extractToolName3(e.toolUse??t.toolUse)?{"gen_ai.tool.name":extractToolName3(e.toolUse??t.toolUse)}:{},...isObject(n)&&"string"==typeof n.status?{"strands.tool.status":n.status}:{}},metrics:buildDurationMetrics4(t.startTime),output:n}),t.span.end()}function startNodeSpan(t,e,n){const r=e.nodeId??"unknown",o=findNode(e.orchestrator??t.orchestrator,r),a=extractNodeChild(o),i={"strands.node.id":r,...o?.type?{"strands.node.type":o.type}:{},"strands.operation":"node.call",provider:"strands"},s=withCurrent(t.span,()=>startSpan({event:{metadata:i},name:`node: ${r}`,spanAttributes:{type:"task"}})),c={...a?{child:a}:{},span:s,startTime:getCurrentUnixTimestamp()};t.activeNodes.set(r,c),a&&pushChildParent(n,a,s)}function logNodeResult(t,e){const n=e.nodeId??e.result?.nodeId??"unknown",r=t.activeNodes.get(n);r&&safeLog5(r.span,{...e.result?.error?{error:toLoggedError(e.result.error)}:{},metadata:{...e.nodeType?{"strands.node.type":e.nodeType}:{},...e.result?.status?{"strands.node.status":e.result.status}:{}},metrics:{...buildDurationMetrics4(r.startTime),..."number"==typeof e.result?.duration?{"strands.node.duration_ms":e.result.duration}:{},...parseUsage(e.result?.usage)},output:extractNodeResultOutput(e.result)})}function finalizeNodeSpan(t,e,n){const r=e.nodeId??"unknown",o=t.activeNodes.get(r);o&&(t.activeNodes.delete(r),e.error&&safeLog5(o.span,{error:toLoggedError(e.error)}),o.span.end(),o.child&&popChildParent(n,o.child,o.span))}function collectHandoff(t,e){t.handoffs.push({...e.source?{source:e.source}:{},...Array.isArray(e.targets)?{targets:e.targets}:{}})}function finalizeAgentStream(t,e,n){if(!t.finalized){t.finalized=!0,finalizeModelSpan(t);for(const e of t.activeTools.values())finalizeToolSpanState(e);t.activeTools.clear(),safeLog5(t.span,{...e?{error:toLoggedError(e)}:{},metrics:buildDurationMetrics4(t.startTime),...void 0!==n?{output:n}:{}}),t.span.end(),t.attachmentCache.strings.clear()}}function finalizeMultiAgentStream(t,e,n,r){if(!t.finalized){t.finalized=!0;for(const n of t.activeNodes.values())n.child&&popChildParent(e,n.child,n.span),n.span.end();t.activeNodes.clear(),safeLog5(t.span,{...n?{error:toLoggedError(n)}:{},metrics:buildDurationMetrics4(t.startTime),...void 0!==r?{output:r}:{}}),t.span.end()}}function extractAgent(t){const e=t.agent??t.self;return isObject(e)&&"function"==typeof e.stream?e:void 0}function extractOrchestrator(t){const e=t.orchestrator??t.self;return isObject(e)&&"function"==typeof e.stream?e:void 0}function extractAgentMetadata2(t){return{...t?.id?{"strands.agent.id":t.id}:{},...t?.name?{"strands.agent.name":t.name}:{},...t?.description?{"strands.agent.description":t.description}:{}}}function extractModelMetadata3(t){const e=getModelConfig(t),n=extractModelName2(t);return{...n?{model:n}:{},...e?.api?{"strands.model.api":e.api}:{},...void 0!==t?.stateful?{"strands.model.stateful":t.stateful}:{}}}function extractAgentResultMetadata(t){return{...t?.stopReason?{"strands.stop_reason":t.stopReason}:{},..."number"==typeof t?.metrics?.latestContextSize?{"strands.context_size":t.metrics.latestContextSize}:{},..."number"==typeof t?.metrics?.projectedContextSize?{"strands.projected_context_size":t.metrics.projectedContextSize}:{}}}function extractMultiAgentResultMetadata(t){return{...t?.status?{"strands.status":t.status}:{},..."number"==typeof t?.duration?{"strands.duration_ms":t.duration}:{}}}function extractProvider(t){const e=getModelConfig(t);if("string"==typeof e?.provider)return e.provider;const n=getConstructorName(t).toLowerCase();return n.includes("openai")?"openai":n.includes("anthropic")?"anthropic":n.includes("bedrock")?"bedrock":n.includes("google")?"google":n.includes("vercel")?"vercel":"strands"}function extractModelName2(t){const e=getModelConfig(t);return"string"==typeof t?.modelId?t.modelId:"string"==typeof e?.modelId?e.modelId:"string"==typeof e?.model?e.model:void 0}function getModelConfig(t){if(t&&"function"==typeof t.getConfig)try{return t.getConfig()}catch(t){return void logInstrumentationError5("Strands Agent SDK model config",t)}}function formatAgentSpanName(t){return t?.name?`Agent: ${t.name}`:"Strands Agent"}function formatModelSpanName(t){const e=extractModelName2(t);return e?`Strands model: ${e}`:"Strands model"}function extractAgentResultOutput(t){if(t)return void 0!==t.structuredOutput?t.structuredOutput:t.lastMessage?t.lastMessage:t}function extractMultiAgentResultOutput(t){if(t)return Array.isArray(t.content)?normalizeContentBlocks(t.content):t}function extractNodeResultOutput(t){if(t)return void 0!==t.structuredOutput?t.structuredOutput:Array.isArray(t.content)?normalizeContentBlocks(t.content):t}var STRANDS_MEDIA_TYPES={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",mkv:"video/x-matroska",mov:"video/quicktime",mp4:"video/mp4",webm:"video/webm",flv:"video/x-flv",mpeg:"video/mpeg",mpg:"video/mpeg",wmv:"video/x-ms-wmv","3gp":"video/3gpp",pdf:"application/pdf",csv:"text/csv",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",html:"text/html",txt:"text/plain",md:"text/markdown",json:"application/json",xml:"application/xml"};function createStrandsAttachmentCache(){return{objects:new WeakMap,strings:new LRUCache({max:MAX_STRANDS_STRING_ATTACHMENT_CACHE_ENTRIES})}}function processStrandsInputAttachments(t,e=createStrandsAttachmentCache()){try{return processStrandsInputNode(t,e)}catch(e){return logInstrumentationError5("Strands Agent SDK input attachments",e),t}}function processStrandsInputNode(t,e){if(t instanceof BaseAttachment)return t;if(Array.isArray(t))return t.map(t=>processStrandsInputNode(t,e));if(!isObject(t))return t;const n=processDirectStrandsMediaBlock(t,e);if(void 0!==n)return n;const r=processWrappedStrandsMediaBlock(t,e);return void 0!==r?r:"message"===t.type&&Array.isArray(t.content)?{role:t.role,content:t.content.map(t=>processStrandsInputNode(t,e)),...void 0!==t.metadata?{metadata:t.metadata}:{}}:"function"==typeof t.toJSON?processStrandsInputNode(t.toJSON(),e):Object.fromEntries(Object.entries(t).map(([t,n])=>[t,processStrandsInputNode(n,e)]))}function processDirectStrandsMediaBlock(t,e){if(!isStrandsMediaBlock(t))return;return createStrandsMediaAttachment("imageBlock"===t.type?"image":"videoBlock"===t.type?"video":"document",t,e)}function isStrandsMediaBlock(t){return("imageBlock"===t.type||"videoBlock"===t.type||"documentBlock"===t.type)&&"string"==typeof t.format&&isObject(t.source)}function processWrappedStrandsMediaBlock(t,e){for(const n of["image","video","document"]){const r=t[n];if(!Object.hasOwn(t,n)||!isObject(r))continue;const o=createStrandsMediaAttachment(n,r,e);if(void 0!==o)return o}}function createStrandsMediaAttachment(t,e,n){const r=e.format,o=e.source;if("string"!=typeof r||!isObject(o)||!Object.hasOwn(o,"bytes"))return;const a=STRANDS_MEDIA_TYPES[r.toLowerCase()];if(!a)return;const i="document"===t&&"string"==typeof e.name&&e.name.length>0?e.name:`${t}.${r.toLowerCase()}`,s=getOrCreateStrandsAttachment(o.bytes,i,a,n);if(!s)return;const{type:c,...u}=e,{type:p,...l}=o;return{[t]:{...u,source:{...l,bytes:s}}}}function getOrCreateStrandsAttachment(t,e,n,r){const o=`${n}\0${e}`,a="string"==typeof t?r.strings.get(t):isObject(t)?r.objects.get(t):void 0,i=a?.get(o);if(i)return i;const s=convertDataToBlob(t,n);if(!s)return;const c=new Attachment({data:s,filename:e,contentType:n}),u=a??new Map;return u.set(o,c),"string"==typeof t?r.strings.set(t,u):isObject(t)&&r.objects.set(t,u),c}function normalizeContentBlocks(t){const e=t.map(t=>"string"==typeof t.text?t.text:void 0).filter(t=>Boolean(t)).join("");return e.length>0?e:t}function parseUsage(t){const e={};return assignMetric(e,"prompt_tokens",t?.inputTokens),assignMetric(e,"completion_tokens",t?.outputTokens),assignMetric(e,"tokens",t?.totalTokens),assignMetric(e,"prompt_cached_tokens",t?.cacheReadInputTokens),assignMetric(e,"prompt_cache_creation_tokens",t?.cacheWriteInputTokens),e}function parseModelMetrics(t){const e={};return assignMetric(e,"strands.latency_ms",t?.latencyMs),assignMetric(e,"strands.time_to_first_byte_ms",t?.timeToFirstByteMs),e}function assignMetric(t,e,n){"number"==typeof n&&Number.isFinite(n)&&(t[e]=n)}function buildDurationMetrics4(t){const e=getCurrentUnixTimestamp();return{duration:e-t,end:e,start:t}}function cleanMetrics6(t){const e={};for(const[n,r]of Object.entries(t))Number.isFinite(r)&&(e[n]=r);return e}function extractToolName3(t,e){return t?.name??e?.name??"unknown"}function toolKey2(t){return t?.toolUseId??t?.name??"unknown"}function findNode(t,e){try{return t?.nodes?.get(e)}catch{return}}function extractNodeChild(t){const e=t?.agent??t?.orchestrator;return isObject(e)?e:void 0}function pushChildParent(t,e,n){const r=t.get(e)??new Set;r.add(n),t.set(e,r)}function popChildParent(t,e,n){const r=t.get(e);r&&(r.delete(n),0===r.size&&t.delete(e))}function getOnlyChildParent(t,e){const n=t.get(e);if(n&&1===n.size)return n.values().next().value}function getConstructorName(t){if(!isObject(t))return"";const e=t.constructor;return"function"==typeof e&&"string"==typeof e.name?e.name:""}function safeLog5(t,e){try{t.log(e)}catch(t){logInstrumentationError5("Strands Agent SDK span log",t)}}function logInstrumentationError5(t,e){debugLogger.debug(`${t}:`,e)}var BraintrustPlugin=class extends BasePlugin{config;openaiPlugin=null;openAICodexPlugin=null;anthropicPlugin=null;aiSDKPlugin=null;claudeAgentSDKPlugin=null;cursorSDKPlugin=null;openAIAgentsPlugin=null;googleGenAIPlugin=null;huggingFacePlugin=null;openRouterPlugin=null;openRouterAgentPlugin=null;mistralPlugin=null;googleADKPlugin=null;coherePlugin=null;groqPlugin=null;bedrockRuntimePlugin=null;genkitPlugin=null;gitHubCopilotPlugin=null;fluePlugin=null;langChainPlugin=null;langSmithPlugin=null;piCodingAgentPlugin=null;strandsAgentSDKPlugin=null;constructor(t={}){super(),this.config=t}onEnable(){const t=this.config.integrations??{};!1!==t.openai&&(this.openaiPlugin=new OpenAIPlugin,this.openaiPlugin.enable()),!1!==t.openaiCodexSDK&&(this.openAICodexPlugin=new OpenAICodexPlugin,this.openAICodexPlugin.enable()),!1!==t.anthropic&&(this.anthropicPlugin=new AnthropicPlugin,this.anthropicPlugin.enable()),!1!==t.aisdk&&!1!==t.vercel&&(this.aiSDKPlugin=new AISDKPlugin,this.aiSDKPlugin.enable()),!1!==t.claudeAgentSDK&&(this.claudeAgentSDKPlugin=new ClaudeAgentSDKPlugin,this.claudeAgentSDKPlugin.enable()),!1!==t.cursorSDK&&!1!==t.cursor&&(this.cursorSDKPlugin=new CursorSDKPlugin,this.cursorSDKPlugin.enable()),!1!==t.openAIAgents&&(this.openAIAgentsPlugin=new OpenAIAgentsPlugin,this.openAIAgentsPlugin.enable()),!1!==t.googleGenAI&&!1!==t.google&&(this.googleGenAIPlugin=new GoogleGenAIPlugin,this.googleGenAIPlugin.enable()),!1!==t.huggingface&&(this.huggingFacePlugin=new HuggingFacePlugin,this.huggingFacePlugin.enable()),!1!==t.openrouter&&(this.openRouterPlugin=new OpenRouterPlugin,this.openRouterPlugin.enable()),!1!==t.openrouterAgent&&(this.openRouterAgentPlugin=new OpenRouterAgentPlugin,this.openRouterAgentPlugin.enable()),!1!==t.mistral&&(this.mistralPlugin=new MistralPlugin,this.mistralPlugin.enable()),!1!==t.googleADK&&(this.googleADKPlugin=new GoogleADKPlugin,this.googleADKPlugin.enable()),!1!==t.cohere&&(this.coherePlugin=new CoherePlugin,this.coherePlugin.enable()),!1!==t.groq&&(this.groqPlugin=new GroqPlugin,this.groqPlugin.enable()),!1!==t.bedrock&&!1!==t.awsBedrock&&!1!==t.awsBedrockRuntime&&(this.bedrockRuntimePlugin=new BedrockRuntimePlugin,this.bedrockRuntimePlugin.enable()),!1!==t.genkit&&(this.genkitPlugin=new GenkitPlugin,this.genkitPlugin.enable()),!1!==t.gitHubCopilot&&(this.gitHubCopilotPlugin=new GitHubCopilotPlugin,this.gitHubCopilotPlugin.enable()),!1!==t.piCodingAgent&&(this.piCodingAgentPlugin=new PiCodingAgentPlugin,this.piCodingAgentPlugin.enable()),!1!==t.strandsAgentSDK&&(this.strandsAgentSDKPlugin=new StrandsAgentSDKPlugin,this.strandsAgentSDKPlugin.enable()),!1!==t.flue&&(this.fluePlugin=new FluePlugin,this.fluePlugin.enable()),!1!==t.langchain&&!1!==t.langgraph&&(this.langChainPlugin=new LangChainPlugin,this.langChainPlugin.enable()),!1!==t.langsmith&&(this.langSmithPlugin=new LangSmithPlugin({skipLangChainRuns:!1!==t.langchain}),this.langSmithPlugin.enable())}onDisable(){this.openaiPlugin&&(this.openaiPlugin.disable(),this.openaiPlugin=null),this.openAICodexPlugin&&(this.openAICodexPlugin.disable(),this.openAICodexPlugin=null),this.anthropicPlugin&&(this.anthropicPlugin.disable(),this.anthropicPlugin=null),this.aiSDKPlugin&&(this.aiSDKPlugin.disable(),this.aiSDKPlugin=null),this.claudeAgentSDKPlugin&&(this.claudeAgentSDKPlugin.disable(),this.claudeAgentSDKPlugin=null),this.cursorSDKPlugin&&(this.cursorSDKPlugin.disable(),this.cursorSDKPlugin=null),this.openAIAgentsPlugin&&(this.openAIAgentsPlugin.disable(),this.openAIAgentsPlugin=null),this.googleGenAIPlugin&&(this.googleGenAIPlugin.disable(),this.googleGenAIPlugin=null),this.huggingFacePlugin&&(this.huggingFacePlugin.disable(),this.huggingFacePlugin=null),this.openRouterPlugin&&(this.openRouterPlugin.disable(),this.openRouterPlugin=null),this.openRouterAgentPlugin&&(this.openRouterAgentPlugin.disable(),this.openRouterAgentPlugin=null),this.mistralPlugin&&(this.mistralPlugin.disable(),this.mistralPlugin=null),this.googleADKPlugin&&(this.googleADKPlugin.disable(),this.googleADKPlugin=null),this.coherePlugin&&(this.coherePlugin.disable(),this.coherePlugin=null),this.groqPlugin&&(this.groqPlugin.disable(),this.groqPlugin=null),this.bedrockRuntimePlugin&&(this.bedrockRuntimePlugin.disable(),this.bedrockRuntimePlugin=null),this.genkitPlugin&&(this.genkitPlugin.disable(),this.genkitPlugin=null),this.gitHubCopilotPlugin&&(this.gitHubCopilotPlugin.disable(),this.gitHubCopilotPlugin=null),this.piCodingAgentPlugin&&(this.piCodingAgentPlugin.disable(),this.piCodingAgentPlugin=null),this.strandsAgentSDKPlugin&&(this.strandsAgentSDKPlugin.disable(),this.strandsAgentSDKPlugin=null),this.fluePlugin&&(this.fluePlugin.disable(),this.fluePlugin=null),this.langChainPlugin&&(this.langChainPlugin.disable(),this.langChainPlugin=null),this.langSmithPlugin&&(this.langSmithPlugin.disable(),this.langSmithPlugin=null)}},envIntegrationAliases={openai:"openai","openai-codex":"openaiCodexSDK","openai-codex-sdk":"openaiCodexSDK",openaicodexsdk:"openaiCodexSDK",codex:"openaiCodexSDK","codex-sdk":"openaiCodexSDK","pi-coding-agent":"piCodingAgent","pi-coding-agent-sdk":"piCodingAgent",picodingagent:"piCodingAgent",picodingagentsdk:"piCodingAgent","@earendil-works/pi-coding-agent":"piCodingAgent",strandsAgentSDK:"strandsAgentSDK",strandsagentsdk:"strandsAgentSDK","strands-agent-sdk":"strandsAgentSDK","@strands-agents/sdk":"strandsAgentSDK",anthropic:"anthropic",aisdk:"aisdk","ai-sdk":"aisdk","vercel-ai":"aisdk",vercel:"vercel",claudeagentsdk:"claudeAgentSDK","claude-agent-sdk":"claudeAgentSDK",cursor:"cursor","cursor-sdk":"cursorSDK",cursorsdk:"cursorSDK",flue:"flue","flue-runtime":"flue",mastra:"mastra","openai-agents":"openAIAgents",openaiagents:"openAIAgents","openai-agents-core":"openAIAgents",openaiagentscore:"openAIAgents",google:"google","google-genai":"googleGenAI",googlegenai:"googleGenAI",huggingface:"huggingface",openrouter:"openrouter",openrouteragent:"openrouterAgent","openrouter-agent":"openrouterAgent",mistral:"mistral",googleadk:"googleADK","google-adk":"googleADK",cohere:"cohere",groq:"groq","groq-sdk":"groq",bedrock:"bedrock","aws-bedrock":"awsBedrock",awsbedrock:"awsBedrock","aws-bedrock-runtime":"awsBedrockRuntime",awsbedrockruntime:"awsBedrockRuntime","@aws-sdk/client-bedrock-runtime":"awsBedrockRuntime",genkit:"genkit","firebase-genkit":"genkit",githubcopilot:"gitHubCopilot","github-copilot":"gitHubCopilot","copilot-sdk":"gitHubCopilot",langchain:"langchain","langchain-js":"langchain","@langchain":"langchain",langgraph:"langgraph",langsmith:"langsmith"};function getDefaultInstrumentationIntegrations(){return{openai:!0,openaiCodexSDK:!0,anthropic:!0,vercel:!0,aisdk:!0,google:!0,googleGenAI:!0,googleADK:!0,huggingface:!0,claudeAgentSDK:!0,cursor:!0,cursorSDK:!0,flue:!0,mastra:!0,openAIAgents:!0,openrouter:!0,openrouterAgent:!0,mistral:!0,cohere:!0,groq:!0,bedrock:!0,awsBedrock:!0,awsBedrockRuntime:!0,genkit:!0,gitHubCopilot:!0,langchain:!0,langgraph:!0,langsmith:!0,piCodingAgent:!0,strandsAgentSDK:!0}}function readDisabledInstrumentationEnvConfig(t){const e={};if(t)for(const n of t.split(",")){const t=n.trim(),r=t.toLowerCase();r.length>0&&(e[envIntegrationAliases[t]??envIntegrationAliases[r]??r]=!1)}return{integrations:e}}var REGISTRY_STATE_KEY=Symbol.for("braintrust.registry");function getSharedState(){const t=globalThis[Symbol.for("braintrust-state")];return t&&"object"==typeof t?t:void 0}var PluginRegistry=class{braintrustPlugin=null;config={};enabled=!1;configure(t){this.enabled?console.warn("Braintrust: Cannot configure instrumentation after it has been enabled. Call configureInstrumentation() before importing any AI SDKs."):this.config={...this.config,...t}}enable(){if(this.enabled)return;const t=getSharedState();if(t){if(void 0!==t[REGISTRY_STATE_KEY])return;t[REGISTRY_STATE_KEY]=this}this.enabled=!0;const e=this.readEnvConfig(),n={integrations:{...this.getDefaultConfig(),...this.config.integrations,...e.integrations}};this.braintrustPlugin=new BraintrustPlugin(n),this.braintrustPlugin.enable()}disable(){if(!this.enabled)return;this.enabled=!1;const t=getSharedState();t&&t[REGISTRY_STATE_KEY]===this&&delete t[REGISTRY_STATE_KEY],this.braintrustPlugin&&(this.braintrustPlugin.disable(),this.braintrustPlugin=null)}isEnabled(){return this.enabled}getDefaultConfig(){return getDefaultInstrumentationIntegrations()}readEnvConfig(){return readDisabledInstrumentationEnvConfig(isomorph_default.getEnv("BRAINTRUST_DISABLE_INSTRUMENTATION"))}},registry=new PluginRegistry;function configureInstrumentation(t){registry.configure(t)}function patchTracingChannel(t){const e=t("__braintrust_probe__"),n=e?.constructor;n?.prototype&&(Object.getOwnPropertyDescriptor(n.prototype,"hasSubscribers")||Object.defineProperty(n.prototype,"hasSubscribers",{configurable:!0,enumerable:!1,get(){return Boolean(this.start?.hasSubscribers||this.end?.hasSubscribers||this.asyncStart?.hasSubscribers||this.asyncEnd?.hasSubscribers||this.error?.hasSubscribers)}}),n.prototype.tracePromise&&(n.prototype.tracePromise=function(t,e={},n,...r){const o=this.start,a=this.end,i=this.asyncStart,s=this.asyncEnd,c=this.error;function u(t){e.error=t,c?.publish(e),i?.publish(e),s?.publish(e)}function p(t){e.result=t,i?.publish(e),s?.publish(e)}return o.runStores(e,()=>{try{const o=Reflect.apply(t,n,r);return a?.publish(e),!o||"object"!=typeof o&&"function"!=typeof o||"function"!=typeof o.then?(e.result=o,i?.publish(e),s?.publish(e),o):o.constructor===Promise?o.then(t=>(p(t),t),t=>(u(t),Promise.reject(t))):(o.then(t=>{try{p(t)}catch{}},t=>{try{u(t)}catch{}}),o)}catch(t){throw e.error=t,c?.publish(e),a?.publish(e),t}})}))}var browserConfigured=!1;function configureBrowser(){if(!browserConfigured){isomorph_default.buildType="browser";try{"undefined"!=typeof AsyncLocalStorage&&(isomorph_default.newAsyncLocalStorage=()=>new AsyncLocalStorage)}catch{}isomorph_default.newTracingChannel=t=>(0,import_dc_browser.tracingChannel)(t),patchTracingChannel(import_dc_browser.tracingChannel),isomorph_default.getEnv=t=>{if("undefined"!=typeof process&&void 0!==process.env)return process.env[t]},isomorph_default.getBraintrustApiKey=async()=>{const t=isomorph_default.getEnv("BRAINTRUST_API_KEY");return t?.trim()?t:void 0},isomorph_default.hash=t=>{let e=0;for(let n=0;n<t.length;n++){e=(e<<5)-e+t.charCodeAt(n),e&=e}return(e>>>0).toString(16).padStart(8,"0").repeat(8).substring(0,64)},_internalSetInitialState(),registry.enable(),browserConfigured=!0}}var exports_exports={};__export(exports_exports,{Attachment:()=>Attachment,AttachmentReference:()=>AttachmentReference,BAGGAGE_HEADER:()=>BAGGAGE_HEADER,BRAINTRUST_CURRENT_SPAN_STORE:()=>BRAINTRUST_CURRENT_SPAN_STORE,BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME:()=>BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME,BRAINTRUST_PARENT_KEY:()=>BRAINTRUST_PARENT_KEY,BaseAttachment:()=>BaseAttachment,BaseExperiment:()=>BaseExperiment,BraintrustLangChainCallbackHandler:()=>BraintrustLangChainCallbackHandler,BraintrustMiddleware:()=>BraintrustMiddleware,BraintrustObservabilityExporter:()=>BraintrustObservabilityExporter,BraintrustState:()=>BraintrustState,BraintrustStream:()=>BraintrustStream,CachedSpanFetcher:()=>CachedSpanFetcher,CodeFunction:()=>CodeFunction,CodePrompt:()=>CodePrompt,ContextManager:()=>ContextManager,DEFAULT_FETCH_BATCH_SIZE:()=>DEFAULT_FETCH_BATCH_SIZE,DEFAULT_MAX_REQUEST_SIZE:()=>DEFAULT_MAX_REQUEST_SIZE,Dataset:()=>Dataset2,DatasetPipeline:()=>DatasetPipeline,ERR_PERMALINK:()=>ERR_PERMALINK,Eval:()=>Eval,EvalResultWithSummary:()=>EvalResultWithSummary,Experiment:()=>Experiment2,ExternalAttachment:()=>ExternalAttachment,FailedHTTPResponse:()=>FailedHTTPResponse,IDGenerator:()=>IDGenerator,JSONAttachment:()=>JSONAttachment,LEGACY_CACHED_HEADER:()=>LEGACY_CACHED_HEADER,LOGS3_OVERFLOW_REFERENCE_TYPE:()=>LOGS3_OVERFLOW_REFERENCE_TYPE,LazyValue:()=>LazyValue,LocalTrace:()=>LocalTrace,Logger:()=>Logger,LoginInvalidOrgError:()=>LoginInvalidOrgError,NOOP_SPAN:()=>NOOP_SPAN,NOOP_SPAN_PERMALINK:()=>NOOP_SPAN_PERMALINK,NoopSpan:()=>NoopSpan,OTELIDGenerator:()=>OTELIDGenerator,ObjectFetcher:()=>ObjectFetcher,Project:()=>Project2,ProjectNameIdMap:()=>ProjectNameIdMap,Prompt:()=>Prompt2,PromptBuilder:()=>PromptBuilder,ReadonlyAttachment:()=>ReadonlyAttachment,ReadonlyExperiment:()=>ReadonlyExperiment,Reporter:()=>Reporter,ScorerBuilder:()=>ScorerBuilder,SpanFetcher:()=>SpanFetcher,SpanImpl:()=>SpanImpl,TRACEPARENT_HEADER:()=>TRACEPARENT_HEADER,TRACESTATE_HEADER:()=>TRACESTATE_HEADER,TestBackgroundLogger:()=>TestBackgroundLogger,ToolBuilder:()=>ToolBuilder,UUIDGenerator:()=>UUIDGenerator,X_CACHED_HEADER:()=>X_CACHED_HEADER,_exportsForTestingOnly:()=>_exportsForTestingOnly,_internalGetGlobalState:()=>_internalGetGlobalState,_internalIso:()=>isomorph_default,_internalSetInitialState:()=>_internalSetInitialState,addAzureBlobHeaders:()=>addAzureBlobHeaders,agentAssertionScorer:()=>agentAssertionScorer,braintrustAISDKTelemetry:()=>braintrustAISDKTelemetry,braintrustEveHook:()=>braintrustEveHook,braintrustEveInstrumentation:()=>braintrustEveInstrumentation,braintrustFlueInstrumentation:()=>braintrustFlueInstrumentation,braintrustFlueObserver:()=>braintrustFlueObserver,braintrustStreamChunkSchema:()=>braintrustStreamChunkSchema,buildLocalSummary:()=>buildLocalSummary,configureInstrumentation:()=>configureInstrumentation,constructLogs3OverflowRequest:()=>constructLogs3OverflowRequest,createFinalValuePassThroughStream:()=>createFinalValuePassThroughStream,currentExperiment:()=>currentExperiment,currentLogger:()=>currentLogger,currentSpan:()=>currentSpan,deepCopyEvent:()=>deepCopyEvent,defaultErrorScoreHandler:()=>defaultErrorScoreHandler,deserializePlainStringAsJSON:()=>deserializePlainStringAsJSON,devNullWritableStream:()=>devNullWritableStream,evaluatorDefinitionSchema:()=>evaluatorDefinitionSchema,evaluatorDefinitionsSchema:()=>evaluatorDefinitionsSchema,extractTraceContextFromHeaders:()=>extractTraceContextFromHeaders,flush:()=>flush,getContextManager:()=>getContextManager,getIdGenerator:()=>getIdGenerator,getPromptVersions:()=>getPromptVersions,getSpanParentObject:()=>getSpanParentObject,getTemplateRenderer:()=>getTemplateRenderer,graph:()=>graph_framework_exports,init:()=>init,initDataset:()=>initDataset,initExperiment:()=>initExperiment,initFunction:()=>initFunction,initLogger:()=>initLogger,initNodeTestSuite:()=>initNodeTestSuite,injectTraceContext:()=>injectTraceContext,invoke:()=>invoke,isTemplateFormat:()=>isTemplateFormat,loadParameters:()=>loadParameters,loadPrompt:()=>loadPrompt,log:()=>log,logError:()=>logError,login:()=>login,loginToState:()=>loginToState,logs3OverflowUploadSchema:()=>logs3OverflowUploadSchema,newId:()=>newId,parseCachedHeader:()=>parseCachedHeader,parseTemplateFormat:()=>parseTemplateFormat,permalink:()=>permalink,pickLogs3OverflowObjectIds:()=>pickLogs3OverflowObjectIds,projects:()=>projects,promptContentsSchema:()=>promptContentsSchema,promptDefinitionSchema:()=>promptDefinitionSchema,promptDefinitionToPromptData:()=>promptDefinitionToPromptData,promptDefinitionWithToolsSchema:()=>promptDefinitionWithToolsSchema,registerOtelFlush:()=>registerOtelFlush,registerSandbox:()=>registerSandbox,registerTemplatePlugin:()=>registerTemplatePlugin,renderMessage:()=>renderMessage,renderPromptParams:()=>renderPromptParams,renderTemplateContent:()=>renderTemplateContent,reportFailures:()=>reportFailures,runEvaluator:()=>runEvaluator,setFetch:()=>setFetch,setMaskingFunction:()=>setMaskingFunction,spanComponentsToObjectId:()=>spanComponentsToObjectId,startSpan:()=>startSpan,summarize:()=>summarize,templateRegistry:()=>templateRegistry,toolFunctionDefinitionSchema:()=>ToolFunctionDefinition,traceable:()=>traceable,traced:()=>traced,updateSpan:()=>updateSpan,uploadLogs3OverflowPayload:()=>uploadLogs3OverflowPayload,utf8ByteLength:()=>utf8ByteLength2,withCurrent:()=>withCurrent,withDataset:()=>withDataset,withExperiment:()=>withExperiment,withLogger:()=>withLogger,withParent:()=>withParent,wrapAISDK:()=>wrapAISDK,wrapAISDKModel:()=>wrapAISDKModel,wrapAgentClass:()=>wrapAgentClass,wrapAnthropic:()=>wrapAnthropic,wrapBedrockRuntime:()=>wrapBedrockRuntime,wrapClaudeAgentSDK:()=>wrapClaudeAgentSDK,wrapCohere:()=>wrapCohere,wrapCopilotClient:()=>wrapCopilotClient,wrapCursorSDK:()=>wrapCursorSDK,wrapGenkit:()=>wrapGenkit,wrapGoogleADK:()=>wrapGoogleADK,wrapGoogleGenAI:()=>wrapGoogleGenAI,wrapGroq:()=>wrapGroq,wrapHuggingFace:()=>wrapHuggingFace,wrapLangSmithClient:()=>wrapLangSmithClient,wrapLangSmithRunTrees:()=>wrapLangSmithRunTrees,wrapLangSmithTraceable:()=>wrapLangSmithTraceable,wrapMastraAgent:()=>wrapMastraAgent,wrapMistral:()=>wrapMistral,wrapOpenAI:()=>wrapOpenAI,wrapOpenAICodexSDK:()=>wrapOpenAICodexSDK,wrapOpenAIv4:()=>wrapOpenAIv4,wrapOpenRouter:()=>wrapOpenRouter,wrapOpenRouterAgent:()=>wrapOpenRouterAgent,wrapPiCodingAgentSDK:()=>wrapPiCodingAgentSDK,wrapStrandsAgentSDK:()=>wrapStrandsAgentSDK,wrapTraced:()=>wrapTraced,wrapVitest:()=>wrapVitest});var import_v39=require("zod/v3"),SANDBOX_GROUP_NAME_METADATA_KEY="_bt_sandbox_group_name";async function registerSandbox(t){const e=t.state??_internalGetGlobalState();await e.login({apiKey:t.apiKey,appUrl:t.appUrl,orgName:t.orgName});const n=(await e.appConn().post_json("api/project/register",{project_name:t.project,org_id:e.orgId})).project.id;if(!e.orgName)throw new Error("Organization name is required to register sandbox evals");const r={runtime:"node",version:process.version.slice(1)},o=await e.proxyConn().post("function/sandbox-list",{sandbox_spec:{provider:t.sandbox.provider,snapshot_ref:t.sandbox.snapshotRef},runtime_context:r,entrypoints:t.entrypoints,project_id:n},{headers:{"x-bt-org-name":e.orgName}}),a=import_v39.z.record(import_v39.z.unknown()).parse(await o.json()),i=[];for(const[o,s]of Object.entries(a)){const a=o,c=slugify(o,{lower:!0,strict:!0}),u={project_id:n,org_name:e.orgName,name:a,slug:c,function_type:"sandbox",function_data:{type:"code",data:{type:"bundle",runtime_context:r,location:{type:"sandbox",sandbox_spec:{provider:t.sandbox.provider,snapshot_ref:t.sandbox.snapshotRef},entrypoints:t.entrypoints,eval_name:o,evaluator_definition:s},bundle_id:null,preview:null}},metadata:{...t.metadata??{},[SANDBOX_GROUP_NAME_METADATA_KEY]:t.name},if_exists:t.ifExists??"replace"};void 0!==t.description&&(u.description=t.description);const p=await e.apiConn().post_json("v1/function",u);i.push({evalName:o,id:p.id,name:p.name,slug:p.slug})}return{projectId:n,functions:i}}async function invoke(t){const{orgName:e,apiKey:n,appUrl:r,forceLogin:o,fetch:a,input:i,messages:s,parent:c,metadata:u,tags:p,state:l,stream:d,mode:m,schema:g,strict:f,overrides:h,projectId:_,...y}=t,v=l??_internalGetGlobalState();await v.login({orgName:e,apiKey:n,appUrl:r,forceLogin:o,fetch:a});const b=c?"string"==typeof c?c:await c.export():await getSpanParentObject().export(),S=FunctionId.safeParse({function_id:y.function_id,project_name:y.projectName,slug:y.slug,global_function:y.globalFunction,function_type:y.functionType,prompt_session_id:y.promptSessionId,prompt_session_function_id:y.promptSessionFunctionId,version:y.version});if(!S.success)throw new Error(`Invalid function ID arguments: ${S.error.message}`);const T={...S.data,input:i,messages:s,parent:b,metadata:u,tags:p,stream:d,mode:m,strict:f,overrides:h},C={Accept:d?"text/event-stream":"application/json"};_&&(C["x-bt-project-id"]=_),e&&(C["x-bt-org-name"]=e);const A=await v.proxyConn().post("function/invoke",T,{headers:C});if(d){if(!A.body)throw new Error("Received empty stream body");return new BraintrustStream(A.body)}{const t=await A.json();return g?g.parse(t):t}}function initFunction({projectName:t,slug:e,version:n,state:r}){const o=r??_internalGetGlobalState();o?.spanCache?.disable();const a=async r=>await invoke({projectName:t,slug:e,version:n,input:r});return Object.defineProperty(a,"name",{value:`initFunction-${t}-${e}-${n??"latest"}`}),a}function splitSpanInfo(t){const{span_info:e,...n}=t;return{params:n,span_info:e}}function createChannelContext(t,e,n){return{arguments:[e],span_info:n}}async function tracePromiseWithResponse(t,e,n){let r;const o=t.tracePromise,a=await o(async()=>(r=await n.withResponse(),e.response=r.response,r.data),e);if(!r)throw new Error("Expected withResponse() to provide response");return{data:a,response:r.response}}function createLazyAPIPromise(t){let e=null;return new Proxy({},{get(n,r,o){if("withResponse"===r)return()=>t();if("then"===r||"catch"===r||"finally"===r||r in Promise.prototype){e||(e=t().then(t=>t.data));const n=Reflect.get(e,r,o);return"function"==typeof n?n.bind(e):n}return Reflect.get(n,r,o)}})}function responsesProxy(t){return t.responses?new Proxy(t.responses,{get:(t,e,n)=>"create"===e&&"function"==typeof t.create?wrapResponsesAsync(t.create.bind(t),openAIChannels.responsesCreate):"stream"===e&&"function"==typeof t.stream?wrapResponsesSyncStream(t.stream.bind(t),openAIChannels.responsesStream):"parse"===e&&"function"==typeof t.parse?wrapResponsesAsync(t.parse.bind(t),openAIChannels.responsesParse):"compact"===e&&"function"==typeof t.compact?wrapResponsesAsync(t.compact.bind(t),openAIChannels.responsesCompact):Reflect.get(t,e,n)}):t}function wrapResponsesAsync(t,e){return(n,r)=>{const{span_info:o,params:a}=splitSpanInfo(n);let i=null;return createLazyAPIPromise(()=>(i||(i=(async()=>{const n=createChannelContext(e,a,o),i=t(a,r);return tracePromiseWithResponse(e,n,i)})()),i))}}function wrapResponsesSyncStream(t,e){return(n,r)=>{const{span_info:o,params:a}=splitSpanInfo(n);return e.traceSync(()=>t(a,r),{arguments:[a],span_info:o})}}function wrapOpenAI(t){const e=t;if(e&&"object"==typeof e&&"chat"in e&&"object"==typeof e.chat&&e.chat&&"completions"in e.chat&&"object"==typeof e.chat.completions&&e.chat.completions&&"create"in e.chat.completions){return wrapOpenAIv4(e)}return console.warn("Unsupported OpenAI library (potentially v3). Not wrapping."),t}function wrapOpenAIv4(t){const e=t,n=new WeakMap,r=new Proxy(e.chat.completions,{get(t,e,n){const r=Reflect.get(t,e,n);return"create"===e?wrapChatCompletion(r.bind(t)):"parse"===e?wrapBetaChatCompletionParse(r.bind(t)):"stream"===e?wrapBetaChatCompletionStream(r.bind(t)):r}}),o=new Proxy(e.chat,{get:(t,e,n)=>"completions"===e?r:Reflect.get(t,e,n)}),a=createEndpointProxy(e.embeddings,wrapEmbeddings),i=createEndpointProxy(e.moderations,wrapModerations);let s;if(e.beta?.chat?.completions?.stream){const t=new Proxy(e?.beta?.chat.completions,{get(t,e,n){const r=Reflect.get(t,e,n);return"parse"===e?wrapBetaChatCompletionParse(r.bind(t)):"stream"===e?wrapBetaChatCompletionStream(r.bind(t)):r}}),n=new Proxy(e.beta.chat,{get:(e,n,r)=>"completions"===n?t:Reflect.get(e,n,r)});s=new Proxy(e.beta,{get:(t,e,r)=>"chat"===e?n:Reflect.get(t,e,r)})}const c=new Proxy(e,{get(t,r){switch(r){case"chat":return o;case"embeddings":return a;case"moderations":return i;case"responses":return responsesProxy(e)}if("beta"===r&&s)return s;const u=Reflect.get(t,r,t);if("function"!=typeof u)return u;const p=n.get(u);if(p)return p;const l=function(...e){const n=this===c?t:this,r=Reflect.apply(u,n,e);return r===t?c:r};return n.set(u,l),l}});return c}function wrapBetaChatCompletionParse(t){return async e=>{const{span_info:n,params:r}=splitSpanInfo(e);return openAIChannels.betaChatCompletionsParse.tracePromise(async()=>await t(r),{arguments:[r],span_info:n})}}function wrapBetaChatCompletionStream(t){return e=>{const{span_info:n,params:r}=splitSpanInfo(e);return openAIChannels.betaChatCompletionsStream.traceSync(()=>t(r),{arguments:[r],span_info:n})}}function wrapChatCompletion(t){return(e,n)=>{const{span_info:r,params:o}=splitSpanInfo(e);let a=null;return createLazyAPIPromise(()=>(a||(a=(async()=>{const e=createChannelContext(openAIChannels.chatCompletionsCreate,o,r);if(o.stream){const r=t(o,n),{data:a,response:i}=await tracePromiseWithResponse(openAIChannels.chatCompletionsCreate,e,r);return{data:a,response:i}}const a=t(o,n),{data:i,response:s}=await tracePromiseWithResponse(openAIChannels.chatCompletionsCreate,e,a);return{data:i,response:s}})()),a))}}function createEndpointProxy(t,e){return new Proxy(t,{get(t,n,r){const o=Reflect.get(t,n,r);return"create"===n?e(o.bind(t)):o}})}function wrapApiCreateWithChannel(t,e){return(n,r)=>{const{span_info:o,params:a}=splitSpanInfo(n);let i=null;return createLazyAPIPromise(()=>(i||(i=(async()=>{const n=createChannelContext(e,a,o);return tracePromiseWithResponse(e,n,t(a,r))})()),i))}}globalThis.__inherited_braintrust_wrap_openai=wrapOpenAI;var wrapEmbeddings=t=>wrapApiCreateWithChannel(t,openAIChannels.embeddingsCreate),wrapModerations=t=>wrapApiCreateWithChannel(t,openAIChannels.moderationsCreate);function isModuleNamespace(t){if(!t||"object"!=typeof t)return!1;if("Module"===t.constructor?.name)return!0;try{const e=Object.keys(t);if(0===e.length)return!1;const n=e[0],r=Object.getOwnPropertyDescriptor(t,n);return!!r&&(!r.configurable&&!r.writable)}catch{return!1}}function wrapAISDK(t,e={}){if(!t||"object"!=typeof t)return t;const n=t,r=isModuleNamespace(t)?Object.setPrototypeOf({},t):t;return new Proxy(r,{get(t,r,o){const a=Reflect.get(t,r,o);switch(r){case"generateText":return wrapGenerateText(n.generateText,e,n);case"streamText":return wrapStreamText(n.streamText,e,n);case"generateObject":return wrapGenerateObject(n.generateObject,e,n);case"streamObject":return wrapStreamObject(n.streamObject,e,n);case"embed":return wrapEmbed(n.embed,e,n);case"embedMany":return wrapEmbedMany(n.embedMany,e,n);case"rerank":return n.rerank?wrapRerank(n.rerank,e,n):n.rerank;case"Agent":case"Experimental_Agent":case"ToolLoopAgent":case"WorkflowAgent":return a?wrapAgentClass(a,e):a}return a}})}var wrapAgentClass=(t,e={})=>new Proxy(t,{construct(t,n,r){const o=Reflect.construct(t,n,r);return new Proxy(o,{get(t,n,r){const o=Reflect.get(t,n,t);return"generate"===n&&"function"==typeof o&&"WorkflowAgent"!==t.constructor.name?wrapAgentGenerate(o,t,e):"stream"===n&&"function"==typeof o?wrapAgentStream(o,t,e):"function"==typeof o?o.bind(t):o}})}}),wrapAgentGenerate=(t,e,n={})=>{const r=`${e.constructor.name}.generate`;return async o=>makeGenerateTextWrapper(generateChannelForAgent(e.constructor.name),r,t.bind(e),{self:e,spanType:"function"},n)({...e.settings,...o})};function generateChannelForAgent(t){return"ToolLoopAgent"===t?aiSDKChannels.toolLoopAgentGenerate:aiSDKChannels.agentGenerate}var wrapAgentStream=(t,e,n={})=>{const r=`${e.constructor.name}.stream`;return o=>{if("WorkflowAgent"===e.constructor.name&&currentWorkflowAgentWrapperSpan()){const{span_info:n,...r}=o;return t.call(e,{...e.settings,...r})}return makeStreamWrapper(streamChannelForAgent(e.constructor.name),r,t.bind(e),{self:e,spanType:"function"},n)({...e.settings,...o})}};function streamChannelForAgent(t){return"ToolLoopAgent"===t?aiSDKChannels.toolLoopAgentStream:"WorkflowAgent"===t?aiSDKChannels.workflowAgentStream:aiSDKChannels.agentStream}var makeGenerateTextWrapper=(t,e,n,r={},o={})=>{const a=async function(a){const{span_info:i,...s}=a,c={...s};return t.tracePromise(()=>n(c),createAISDKChannelContext(c,{aiSDK:r.aiSDK,denyOutputPaths:o.denyOutputPaths,self:r.self,span_info:mergeSpanInfo(i,{name:e,spanType:r.spanType})}))};return Object.defineProperty(a,"name",{value:e,writable:!1}),a},wrapGenerateText=(t,e={},n)=>makeGenerateTextWrapper(aiSDKChannels.generateText,"generateText",t,{aiSDK:n},e),wrapGenerateObject=(t,e={},n)=>makeGenerateTextWrapper(aiSDKChannels.generateObject,"generateObject",t,{aiSDK:n},e),makeEmbedWrapper=(t,e,n,r={},o={})=>{const a=async function(a){const{span_info:i,...s}=a,c={...s};return t.tracePromise(()=>n(c),createAISDKChannelContext(c,{aiSDK:r.aiSDK,denyOutputPaths:o.denyOutputPaths,self:r.self,span_info:mergeSpanInfo(i,{name:e,spanType:r.spanType})}))};return Object.defineProperty(a,"name",{value:e,writable:!1}),a},wrapEmbed=(t,e={},n)=>makeEmbedWrapper(aiSDKChannels.embed,"embed",t,{aiSDK:n},e),wrapEmbedMany=(t,e={},n)=>makeEmbedWrapper(aiSDKChannels.embedMany,"embedMany",t,{aiSDK:n},e),makeRerankWrapper=(t,e={},n={})=>{const r=async function(r){const{span_info:o,...a}=r,i={...a};return aiSDKChannels.rerank.tracePromise(()=>t(i),createAISDKChannelContext(i,{aiSDK:e.aiSDK,denyOutputPaths:n.denyOutputPaths,self:e.self,span_info:mergeSpanInfo(o,{name:"rerank",spanType:e.spanType})}))};return Object.defineProperty(r,"name",{value:"rerank",writable:!1}),r},wrapRerank=(t,e={},n)=>makeRerankWrapper(t,{aiSDK:n},e),makeStreamWrapper=(t,e,n,r={},o={})=>{const a=function(a){const{span_info:i,...s}=a,c={...s},u=createAISDKChannelContext(c,{aiSDK:r.aiSDK,denyOutputPaths:o.denyOutputPaths,self:r.self,span_info:mergeSpanInfo(i,{name:e,spanType:r.spanType})});return t.tracePromise(()=>n(c),u)};return Object.defineProperty(a,"name",{value:e,writable:!1}),a},wrapStreamText=(t,e={},n)=>makeStreamWrapper(aiSDKChannels.streamText,"streamText",t,{aiSDK:n},e),wrapStreamObject=(t,e={},n)=>makeStreamWrapper(aiSDKChannels.streamObject,"streamObject",t,{aiSDK:n},e);function mergeSpanInfo(t,e){if(void 0!==e.name||void 0!==e.spanType||void 0!==t)return{...t,...t?.name?{}:e.name?{name:e.name}:{},...void 0!==e.spanType||t?.spanAttributes?{spanAttributes:{...void 0!==e.spanType?{type:e.spanType}:{},...t?.spanAttributes??{}}}:{}}}function createAISDKChannelContext(t,e={}){return{arguments:[t],...e.aiSDK?{aiSDK:e.aiSDK}:{},...e.denyOutputPaths?{denyOutputPaths:e.denyOutputPaths}:{},...void 0!==e.self?{self:e.self}:{},...e.span_info?{span_info:e.span_info}:{}}}function wrapAISDKModel(t){const e=t;return"v1"===e?.specificationVersion&&"string"==typeof e?.provider&&"string"==typeof e?.modelId?new BraintrustLanguageModelWrapper(e):(console.warn("Unsupported AI SDK model. Not wrapping."),t)}var BraintrustLanguageModelWrapper=class{constructor(t){this.model=t,"function"==typeof this.model.supportsUrl&&(this.supportsUrl=t=>this.model.supportsUrl(t))}supportsUrl;get specificationVersion(){return this.model.specificationVersion}get provider(){return this.model.provider}get modelId(){return this.model.modelId}get defaultObjectGenerationMode(){return this.model.defaultObjectGenerationMode}get supportsImageUrls(){return this.model.supportsImageUrls}get supportsStructuredOutputs(){return this.model.supportsStructuredOutputs}async doGenerate(t){const e=startSpan({name:"Chat Completion",spanAttributes:{type:"llm"}}),{prompt:n,mode:r,...o}=t,a=getCurrentUnixTimestamp();try{const i=await this.model.doGenerate(t);return e.log({input:postProcessPrompt(n),metadata:{model:this.modelId,...o,..."tools"in r&&r.tools?{tools:convertTools(r.tools)}:"tool"in r&&r.tool?{tools:convertTools([r.tool])}:{}},output:postProcessOutput(i.text,i.toolCalls,i.finishReason),metrics:{time_to_first_token:getCurrentUnixTimestamp()-a,tokens:isEmpty2(i.usage)?void 0:i.usage.promptTokens+i.usage.completionTokens,prompt_tokens:i.usage?.promptTokens,completion_tokens:i.usage?.completionTokens,cached:parseCachedHeader(i.rawResponse?.headers?.[X_CACHED_HEADER]??i.rawResponse?.headers?.[LEGACY_CACHED_HEADER])}}),i}finally{e.end()}}async doStream(t){const{prompt:e,mode:n,...r}=t,o=getCurrentUnixTimestamp(),a=startSpan({name:"Chat Completion",spanAttributes:{type:"llm"}});a.log({input:postProcessPrompt(e),metadata:{model:this.modelId,...r,..."tools"in n&&n.tools?{tools:convertTools(n.tools)}:"tool"in n&&n.tool?{tools:convertTools([n.tool])}:{}}});let i=!1;const s=()=>{i||(a.end(),i=!0)};try{const e=await this.model.doStream(t);let n,r,i;const c={};let u;return{...e,stream:e.stream.pipeThrough(new TransformStream({transform(t,e){switch(void 0===n&&(n=getCurrentUnixTimestamp()-o,a.log({metrics:{time_to_first_token:n}})),t.type){case"text-delta":void 0===i&&(i=""),i+=t.textDelta;break;case"tool-call":c[t.toolCallId]={toolCallType:t.toolCallType,toolCallId:t.toolCallId,toolName:t.toolName,args:t.args};break;case"tool-call-delta":void 0===c[t.toolCallId]&&(c[t.toolCallId]={toolCallType:t.toolCallType,toolCallId:t.toolCallId,toolName:t.toolName,args:""}),c[t.toolCallId].args+=t.argsTextDelta;break;case"finish":r=t.usage,u=t.finishReason}e.enqueue(t)},async flush(t){a.log({output:postProcessOutput(i,Object.keys(c).length>0?Object.values(c):void 0,u),metrics:{time_to_first_token:n,tokens:isEmpty2(r)?void 0:r.promptTokens+r.completionTokens,prompt_tokens:r?.promptTokens,completion_tokens:r?.completionTokens,cached:parseCachedHeader(e.rawResponse?.headers?.[X_CACHED_HEADER]??e.rawResponse?.headers?.[LEGACY_CACHED_HEADER])}}),s(),t.terminate()}}))}}finally{s()}}};function convertTools(t){return t.map(t=>{const{type:e,...n}=t;return{type:t.type,function:n}})}function postProcessPrompt(t){return t.flatMap(t=>{switch(t.role){case"system":return[{role:"system",content:t.content}];case"assistant":const e=t.content.find(t=>"text"===t.type),n=t.content.filter(t=>"tool-call"===t.type);return[{role:"assistant",content:e?.text,...n.length>0?{tool_calls:n.map(t=>({id:t.toolCallId,function:{name:t.toolName,arguments:JSON.stringify(t.args)},type:"function"}))}:{}}];case"user":return[{role:"user",content:t.content.map(t=>{switch(t.type){case"text":return{type:"text",text:t.text,...t.providerMetadata?{providerMetadata:t.providerMetadata}:{}};case"image":return{type:"image_url",image_url:{url:t.image.toString(),...t.providerMetadata?{providerMetadata:t.providerMetadata}:{}}};default:return t}})}];case"tool":return t.content.map(t=>({role:"tool",tool_call_id:t.toolCallId,content:JSON.stringify(t.result)}))}})}function postProcessOutput(t,e,n){return[{index:0,message:{role:"assistant",content:t??"",...e&&e.length>0?{tool_calls:e.map(t=>({id:t.toolCallId,function:{name:t.toolName,arguments:t.args},type:"function"}))}:{}},finish_reason:n}]}function detectProviderFromResult(t){if(!t?.providerMetadata)return;const e=Object.keys(t.providerMetadata);return e?.at(0)}function extractModelFromResult(t){return t?.response?.modelId?t.response.modelId:t?.request?.body?.model?t.request.body.model:void 0}function extractModelFromWrapGenerateCallback(t){return t?.modelId}function camelToSnake4(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function extractModelParameters(t,e){const n={};for(const[r,o]of Object.entries(t))if(void 0!==o&&!e.has(r)){n[camelToSnake4(r)]=o}return n}function getNumberProperty3(t,e){if(!t||"object"!=typeof t||!(e in t))return;const n=Reflect.get(t,e);return"number"==typeof n?n:void 0}function normalizeUsageMetrics(t,e,n){const r={},o=getNumberProperty3(t,"inputTokens");void 0!==o&&(r.prompt_tokens=o);const a=getNumberProperty3(t,"outputTokens");void 0!==a&&(r.completion_tokens=a);const i=getNumberProperty3(t,"totalTokens");void 0!==i&&(r.tokens=i);const s=getNumberProperty3(t,"reasoningTokens");void 0!==s&&(r.completion_reasoning_tokens=s);const c=getNumberProperty3(t,"cachedInputTokens");if(void 0!==c&&(r.prompt_cached_tokens=c),"anthropic"===e){const t=n?.anthropic;if(t){const e=extractAnthropicCacheTokens(getNumberProperty3(t.usage,"cache_read_input_tokens")||0,getNumberProperty3(t.usage,"cache_creation_input_tokens")||0);Object.assign(r,e),Object.assign(r,finalizeAnthropicTokens(r))}}return r}function normalizeFinishReason(t){if("string"==typeof t)return t.replace(/-/g,"_")}function buildAssistantOutputWithToolCalls(t,e){return[{index:0,logprobs:null,finish_reason:normalizeFinishReason(t?.finishReason)??(e.length?"tool_calls":void 0),message:{role:"assistant",tool_calls:e.length>0?e:void 0}}]}function extractToolCallsFromSteps(t){const e=[];if(!Array.isArray(t))return e;let n=0;for(const r of t){const t=r?.content;if(Array.isArray(t))for(const r of t)r&&"object"==typeof r&&"tool-call"===r.type&&e.push({id:r.toolCallId,type:"function",index:n++,function:{name:r.toolName,arguments:"string"==typeof r.input?r.input:JSON.stringify(r.input??{})}})}return e}function extractToolCallsFromBlocks(t){return Array.isArray(t)?extractToolCallsFromSteps([{content:t}]):[]}function extractInput(t){return t?.prompt??t?.messages??t?.system}var V2_EXCLUDE_KEYS=new Set(["prompt","system","messages","model","providerOptions"]);function BraintrustMiddleware(t={}){return{wrapGenerate:async({doGenerate:e,params:n,model:r})=>{const o=processInputAttachments(extractInput(n)),a=startSpan({name:t.spanInfo?.name||"ai-sdk.doGenerate",spanAttributes:{type:"llm",...t.spanInfo?.spanAttributes||{}},event:{input:o,metadata:{...extractModelParameters(n,V2_EXCLUDE_KEYS),...t.spanInfo?.metadata||{}}}});try{const t=await e(),n={},o=detectProviderFromResult(t);void 0!==o&&(n.provider=o),void 0!==t.finishReason&&(n.finish_reason=t.finishReason);const i=extractModelFromResult(t);if(void 0!==i)n.model=i;else if(r){const t=extractModelFromWrapGenerateCallback(r);t&&(n.model=t)}let s=extractToolCallsFromSteps(t?.steps);return s&&0!==s.length||(s=extractToolCallsFromBlocks(t?.content)),a.log({output:s.length>0?buildAssistantOutputWithToolCalls(t,s):t?.content,metadata:n,metrics:normalizeUsageMetrics(t.usage,o,t.providerMetadata)}),t}catch(t){throw a.log({error:t instanceof Error?t.message:String(t)}),t}finally{a.end()}},wrapStream:async({doStream:e,params:n})=>{const r=processInputAttachments(extractInput(n)),o=startSpan({name:t.spanInfo?.name||"ai-sdk.doStream",spanAttributes:{type:"llm",...t.spanInfo?.spanAttributes||{}},event:{input:r,metadata:{...extractModelParameters(n,V2_EXCLUDE_KEYS),...t.spanInfo?.metadata||{}}}});try{const{stream:t,...n}=await e(),r=[],a=[];let i,s={},c={};const u=new TransformStream({transform(t,e){try{"text-delta"===t.type&&t.delta&&r.push(t.delta),"tool-call"!==t.type&&"tool-result"!==t.type||a.push(t),"finish"===t.type&&(i=t.finishReason,s=t.usage||{},c=t.providerMetadata||{}),e.enqueue(t)}catch(t){o.log({error:t instanceof Error?t.message:String(t)}),o.end(),e.error(t)}},flush(){try{const t=r.join("");let e=t?[{type:"text",text:t}]:[];const u={providerMetadata:c,response:n.response,...n,finishReason:i},p={},l=detectProviderFromResult(u);void 0!==l&&(p.provider=l),void 0!==i&&(p.finish_reason=i);const d=extractModelFromResult(u);if(void 0!==d&&(p.model=d),a.length>0){const t=extractToolCallsFromSteps([{content:a}]);t.length>0&&(e=buildAssistantOutputWithToolCalls(u,t))}o.log({output:e,metadata:p,metrics:normalizeUsageMetrics(s,l,c)}),o.end()}catch(t){throw o.log({error:t instanceof Error?t.message:String(t)}),o.end(),t}}});return{stream:t.pipeThrough(u),...n}}catch(t){throw o.log({error:t instanceof Error?t.message:String(t)}),o.end(),t}}}}var EVE_TRACE_STATE_KEY="braintrust.eve.tracing",MAX_EVE_CACHE_ENTRIES=1e4,MAX_STORED_LLM_INPUTS=100,MAX_STORED_SPAN_REFERENCES=1e4,MAX_STORED_STEP_STARTS=1e4;function braintrustEveHook(t){const e=t.defineState(EVE_TRACE_STATE_KEY,emptyEveTraceState),n=new EveBridge(e);return{events:{"*":async(e,r)=>{await n.handle(e,r,t.metadata)}}}}function braintrustEveInstrumentation(t){const e=t.defineState(EVE_TRACE_STATE_KEY,emptyEveTraceState);return{events:{"step.started":t=>{try{captureEveModelInput(e,t)}catch(t){debugLogger.warn("Error in Eve LLM input capture:",t)}}},recordInputs:!1,recordOutputs:!1,setup:t.setup}}function isEveHandleMessageStreamEvent(t){return isObject(t)&&"string"==typeof t.type}var ResumedEveSpan=class{constructor(t){this.reference=t,this.endTime=t.endTime}endTime;get rootSpanId(){return this.reference.rootSpanId}get spanId(){return this.reference.spanId}log(t){const e={...this.reference.startEvent?.metrics,...void 0===this.endTime?{}:{end:this.endTime},...t.metrics};updateSpan({exported:this.reference.exported,...this.reference.startEvent,...t,...Object.keys(e).length>0?{metrics:e}:{}})}end(t){return void 0===this.endTime&&(this.endTime=t?.endTime??getCurrentUnixTimestamp(),this.log({metrics:{end:this.endTime}})),this.endTime}},EveBridge=class{constructor(t){this.state=t}eventQueuesBySession=new Map;completedToolKeys=new LRUCache({max:MAX_EVE_CACHE_ENTRIES});toolsByCallKey=new LRUCache({max:MAX_EVE_CACHE_ENTRIES});turnsByKey=new LRUCache({max:MAX_EVE_CACHE_ENTRIES});async startEveSpan(t){const e=t?.event?.id,n="string"==typeof e&&readEveTraceState(this.state).spanReferences.find(t=>t.rowId===e);if(n)return new ResumedEveSpan(n);const r=t?.startTime??getCurrentUnixTimestamp(),o=t?.parentSpanIds,a={created:(new Date).toISOString(),metrics:{start:r},span_attributes:{...t?.name?{name:t.name}:{},...t?.type?{type:t.type}:{},...t?.spanAttributes},span_parents:o?"spanId"in o?[o.spanId]:o.parentSpanIds:[]},i=withCurrent(NOOP_SPAN,()=>_internalStartSpanWithInitialMerge({...t,startTime:r}));if("string"!=typeof e)return i;try{const t={exported:await i.export(),rootSpanId:i.rootSpanId,rowId:e,spanId:i.spanId,startEvent:a};this.state.update(n=>{const r=normalizeEveTraceState(n);return r.spanReferences.some(t=>t.rowId===e)?r:{...r,spanReferences:[...r.spanReferences,t].slice(-MAX_STORED_SPAN_REFERENCES)}})}catch(t){debugLogger.warn("Error exporting Eve span for resumption:",t)}return i}async startEveChildSpan(t,e){return await this.startEveSpan({...e,parentSpanIds:{rootSpanId:t.rootSpanId,spanId:t.spanId}})}stepOrdinal(t){let e=0;return this.state.update(n=>{const r=normalizeEveTraceState(n),o=r.stepStarts.filter(e=>e.turnId===t.data.turnId&&e.stepIndex===t.data.stepIndex).at(-1);return o?.open?(e=o.ordinal,r):(e=r.stepStarts.filter(e=>e.turnId===t.data.turnId).length,{...r,stepStarts:[...r.stepStarts,{open:!0,ordinal:e,stepIndex:t.data.stepIndex,turnId:t.data.turnId}].slice(-MAX_STORED_STEP_STARTS)})}),e}markStepEnded(t,e){this.state.update(n=>{const r=normalizeEveTraceState(n);let o=-1;for(let n=r.stepStarts.length-1;n>=0;n--){const a=r.stepStarts[n];if(a?.turnId===t&&a.stepIndex===e){o=n;break}}return o<0||!r.stepStarts[o]?.open?r:{...r,stepStarts:r.stepStarts.map((t,e)=>e===o?{...t,open:!1}:t)}})}async handle(t,e,n){if(!isEveHandleMessageStreamEvent(t))return;const r=async()=>{try{if(!await this.handleEvent(t,e,n))return;if("session.failed"===t.type){const n=t.data.sessionId||sessionIdFromContext(e);await this.flushInstrumentation(),n&&this.cleanupSession(n)}else if("session.completed"===t.type){const t=sessionIdFromContext(e);await this.flushInstrumentation(),t&&this.cleanupSession(t)}}catch(t){debugLogger.warn("Error in Eve hook instrumentation:",t)}},o="session.failed"===t.type&&t.data.sessionId||sessionIdFromContext(e);if(!o)return void await r();const a=this.eventQueuesBySession.get(o),i=a?a.then(r):r();this.eventQueuesBySession.set(o,i);try{await i}finally{this.eventQueuesBySession.get(o)===i&&this.eventQueuesBySession.delete(o)}}async handleEvent(t,e,n){switch(t.type){case"session.started":return this.handleSessionStarted(t,e,n),!0;case"turn.started":return await this.handleTurnStarted(t,e,n),!0;case"message.received":return await this.handleMessageReceived(t,e,n),!0;case"step.started":return await this.handleStepStarted(t,e,n),!0;case"message.completed":return this.handleMessageCompleted(t,e),!0;case"result.completed":return this.handleResultCompleted(t,e),!0;case"actions.requested":return await this.handleActionsRequested(t,e,n),!0;case"action.result":return await this.handleActionResult(t,e,n),!0;case"subagent.called":return await this.handleSubagentCalled(t,e,n),!0;case"subagent.completed":return await this.handleSubagentCompleted(t,e,n),!0;case"step.completed":return this.handleStepCompleted(t,e),!0;case"step.failed":return this.handleStepFailed(t,e),!0;case"turn.completed":return this.handleTurnCompleted(t,e),!0;case"turn.failed":return this.handleTurnFailed(t,e),!0;case"session.failed":return this.handleSessionFailed(t,e),!0;case"session.completed":return this.handleSessionCompleted(t,e),!0;default:return!1}}handleSessionStarted(t,e,n){const r=sessionIdFromContext(e);if(!r)return;const o={...n??{},...modelMetadataFromRuntime(t.data.runtime)};this.state.update(t=>{const e=normalizeEveTraceState(t);return{...e,metadata:{...e.metadata,...o}}});for(const[t,e]of this.turnsByKey)if(t.startsWith(`${r}:`)){e.metadata={...e.metadata,...o},e.span.log({metadata:e.metadata});for(const t of e.stepsByIndex.values())t.metadata={...t.metadata,...o},t.span.log({metadata:t.metadata})}}async handleTurnStarted(t,e,n){const r=sessionIdFromContext(e);if(!r)return;const o=turnKey2(r,t.data.turnId),a={...readEveTraceState(this.state).metadata,...n??{},"eve.session_id":r},i=this.turnsByKey.get(o);if(i)return i.metadata={...i.metadata,...a},void i.span.log({metadata:i.metadata});const s=await this.startTurnSpan(r,t,e,a);s.log({metadata:a}),this.turnsByKey.set(o,{key:o,metadata:a,metrics:{},span:s,stepsByIndex:new Map,turnId:t.data.turnId})}async handleMessageReceived(t,e,n){const r=await this.ensureTurn(t,e,n);if(!r)return;const o=[{content:t.data.message,role:"user"}];r.span.log({input:o})}async handleStepStarted(t,e,n){const r=await this.ensureTurn(t,e,n),o=sessionIdFromContext(e);if(!r||!o)return;const a=r.stepsByIndex.get(t.data.stepIndex);if(a){a.span.log({...void 0!==a.input?{input:a.input}:{},metadata:a.metadata,metrics:a.metrics,output:a.output});const e=eventTime2(t);a.span.end(void 0===e?void 0:{endTime:e}),this.markStepEnded(t.data.turnId,t.data.stepIndex)}const i=this.stepOrdinal(t),s={...r.metadata},c=consumeCapturedEveModelInput(this.state,o,t.data.turnId,t.data.stepIndex),{rowId:u,spanId:p}=await generateEveIds("step",o,t.data.turnId,String(i)),l=await this.startEveChildSpan(r.span,{event:{id:u,...void 0!==c?{input:c}:{},metadata:s},name:"eve.step",spanAttributes:{type:"llm"},spanId:p,startTime:eventTime2(t)});l.log({...void 0!==c?{input:c}:{},metadata:s}),r.stepsByIndex.set(t.data.stepIndex,{...void 0!==c?{input:c}:{},metadata:s,metrics:{},span:l})}handleMessageCompleted(t,e){const n=this.stepForEvent(t,e);if(!n)return;const r=Array.isArray(n.output)&&isObject(n.output[0])?n.output[0].message:void 0,o=isObject(r)?r.tool_calls:void 0;n.output=[{finish_reason:normalizedFinishReason(t.data.finishReason),index:0,message:{content:t.data.message,role:"assistant",...Array.isArray(o)?{tool_calls:o}:{}}}];const a=this.turnForEvent(t,e);a&&"tool-calls"!==t.data.finishReason&&(a.output=t.data.message)}handleResultCompleted(t,e){const n=this.stepForEvent(t,e);n&&(n.output=[{finish_reason:"stop",index:0,message:{content:t.data.result,role:"assistant"}}]);const r=this.turnForEvent(t,e);r&&(r.output=t.data.result)}async handleActionsRequested(t,e,n){const r=await this.ensureTurn(t,e,n),o=sessionIdFromContext(e);if(!r||!o)return;const a=t.data.actions.filter(isTraceableActionRequest);if(0===a.length)return;for(const e of a)isToolCallAction(e)?await this.startRequestedTool(t,r,o,e):isLocalSubagentCallAction(e)&&await this.startRequestedSubagent(t,r,o,e);const i=r.stepsByIndex.get(t.data.stepIndex);if(!i)return;const s=new Map;if(Array.isArray(i.output)&&isObject(i.output[0])){const t=i.output[0].message;if(isObject(t)&&Array.isArray(t.tool_calls))for(const e of t.tool_calls)isObject(e)&&"string"==typeof e.id&&s.set(e.id,e)}for(const t of a){const e="tool-call"===t.kind?t.toolName:t.subagentName??t.name??"agent";s.set(t.callId,{function:{arguments:JSON.stringify(t.input),name:e},id:t.callId,type:"function"})}i.output=[{finish_reason:"tool_calls",index:0,message:{content:null,role:"assistant",tool_calls:[...s.values()]}}],i.span.log({metadata:i.metadata,output:i.output})}async handleActionResult(t,e,n){isToolResult(t.data.result)?await this.handleToolResult(t,e,t.data.result,n):isSubagentResult(t.data.result)&&await this.handleSubagentResult(t,e,t.data.result,n)}async handleToolResult(t,e,n,r){const o=sessionIdFromContext(e);if(!o)return;const a=toolKey3(o,n.callId);if(this.completedToolKeys.has(a))return;const i=this.toolsByCallKey.get(a)??await this.startSyntheticTool(t,e,n,r);if(!i)return;const s="failed"===t.data.status||!0===n.isError||void 0!==t.data.error;i.span.log({...s?{error:actionResultError(t.data.error,n.output)}:{},metadata:i.metadata,output:n.output});const c=eventTime2(t);i.span.end(void 0===c?void 0:{endTime:c}),this.toolsByCallKey.delete(a),this.completedToolKeys.set(a,!0)}async handleSubagentCalled(t,e,n){if(t.data.remote?.url)return;const r=await this.ensureTurn(t,e,n),o=sessionIdFromContext(e);if(!r||!o)return;const a=toolKey3(o,t.data.callId),i=toolMetadataFromTurn(r),s=this.toolsByCallKey.get(a);if(s)return s.metadata={...s.metadata,...i},void s.span.log({metadata:s.metadata});if(this.completedToolKeys.has(a))return;const{rowId:c,spanId:u}=await generateEveIds("subagent",o,t.data.callId),p=this.toolsByCallKey.get(a);if(p||this.completedToolKeys.has(a))return void(p&&(p.metadata={...p.metadata,...i},p.span.log({metadata:p.metadata})));const l=await this.startEveChildSpan(r.span,{event:{id:c,metadata:i},name:t.data.toolName??t.data.name,spanAttributes:{type:"tool"},spanId:u,startTime:eventTime2(t)});l.log({metadata:i}),this.toolsByCallKey.set(a,{metadata:i,span:l,turnKey:turnKey2(o,t.data.turnId)})}async handleSubagentCompleted(t,e,n){const r=sessionIdFromContext(e);if(!r)return;const o=toolKey3(r,t.data.callId);if(this.completedToolKeys.has(o))return;const a=this.toolsByCallKey.get(o)??await this.startSyntheticSubagent(t,e,n);if(!a)return;a.span.log({..."failed"===t.data.status?{error:actionResultError(t.data.error,t.data.output)}:{},metadata:a.metadata,...void 0!==t.data.output?{output:t.data.output}:{}});const i=eventTime2(t),s=a.span.end(void 0===i?void 0:{endTime:i});this.state.update(t=>{const e=normalizeEveTraceState(t);return{...e,spanReferences:e.spanReferences.map(t=>t.spanId===a.span.spanId?{...t,endTime:s}:t)}})}async handleSubagentResult(t,e,n,r){const o=sessionIdFromContext(e);if(!o)return;const a=toolKey3(o,n.callId);if(this.completedToolKeys.has(a))return;const i=this.toolsByCallKey.get(a)??await this.startSyntheticSubagentResult(t,e,n,r);if(!i)return;const s="failed"===t.data.status||!0===n.isError||void 0!==t.data.error;i.span.log({...s?{error:actionResultError(t.data.error,n.output)}:{},metadata:i.metadata,output:n.output});const c=eventTime2(t);i.span.end(void 0===c?void 0:{endTime:c}),this.toolsByCallKey.delete(a),this.completedToolKeys.set(a,!0)}handleStepCompleted(t,e){const n=this.stepForEvent(t,e);if(!n)return;const r=t.data.usage,o="number"==typeof r?.inputTokens&&Number.isFinite(r.inputTokens)&&r.inputTokens>=0?r.inputTokens:void 0,a="number"==typeof r?.outputTokens&&Number.isFinite(r.outputTokens)&&r.outputTokens>=0?r.outputTokens:void 0,i="number"==typeof r?.cacheReadTokens&&Number.isFinite(r.cacheReadTokens)&&r.cacheReadTokens>=0?r.cacheReadTokens:void 0,s="number"==typeof r?.cacheWriteTokens&&Number.isFinite(r.cacheWriteTokens)&&r.cacheWriteTokens>=0?r.cacheWriteTokens:void 0,c="number"==typeof r?.costUsd&&Number.isFinite(r.costUsd)&&r.costUsd>=0?r.costUsd:void 0,u=void 0!==o&&void 0!==a?o+a:void 0,p={...void 0!==o?{prompt_tokens:o}:{},...void 0!==a?{completion_tokens:a}:{},...void 0!==u?{tokens:u}:{},...void 0!==i?{prompt_cached_tokens:i}:{},...void 0!==s?{prompt_cache_creation_tokens:s}:{},...void 0!==c?{estimated_cost:c}:{}};if(n.metrics={...n.metrics,...p},Array.isArray(n.output)&&isObject(n.output[0])){"string"!=typeof n.output[0].finish_reason&&(n.output[0].finish_reason=normalizedFinishReason(t.data.finishReason))}n.span.log({...void 0!==n.input?{input:n.input}:{},metadata:n.metadata,metrics:p,output:n.output});const l=eventTime2(t);n.span.end(void 0===l?void 0:{endTime:l});const d=this.turnForEvent(t,e);if(d){for(const[t,e]of Object.entries(p))d.metrics[t]=(d.metrics[t]??0)+e;d.stepsByIndex.delete(t.data.stepIndex)}this.markStepEnded(t.data.turnId,t.data.stepIndex)}handleStepFailed(t,e){const n=this.stepForEvent(t,e);if(n){n.span.log({error:errorFromMessage(t.data.message,t.data.code,t.data.details)});const e=eventTime2(t);n.span.end(void 0===e?void 0:{endTime:e})}const r=this.turnForEvent(t,e);r?.stepsByIndex.delete(t.data.stepIndex),this.markStepEnded(t.data.turnId,t.data.stepIndex)}handleTurnCompleted(t,e){const n=this.turnForEvent(t,e);n&&this.finalizeTurn(n,{endTime:eventTime2(t)})}handleTurnFailed(t,e){const n=this.turnForEvent(t,e);n&&this.finalizeTurn(n,{endTime:eventTime2(t),error:errorFromMessage(t.data.message,t.data.code,t.data.details)})}handleSessionFailed(t,e){const n=t.data.sessionId||sessionIdFromContext(e);if(!n)return;const r=errorFromMessage(t.data.message,t.data.code,t.data.details);for(const[e,o]of this.turnsByKey)e.startsWith(`${n}:`)&&this.finalizeTurn(o,{endTime:eventTime2(t),error:r});for(const[e,r]of this.toolsByCallKey)if(e.startsWith(`${n}:`)){const e=eventTime2(t);r.endedByTurn||(r.span.log({metadata:r.metadata}),r.span.end(void 0===e?void 0:{endTime:e}),r.endedByTurn=!0)}}handleSessionCompleted(t,e){const n=sessionIdFromContext(e);if(n){for(const[e,r]of this.turnsByKey)e.startsWith(`${n}:`)&&this.finalizeTurn(r,{endTime:eventTime2(t)});for(const[e,r]of this.toolsByCallKey)if(e.startsWith(`${n}:`)&&!r.endedByTurn){const e=eventTime2(t);r.span.log({metadata:r.metadata}),r.span.end(void 0===e?void 0:{endTime:e}),r.endedByTurn=!0}}}async ensureTurn(t,e,n){const r=sessionIdFromContext(e);if(!r)return;const o=turnKey2(r,t.data.turnId),a=this.turnsByKey.get(o);if(a)return a;const i={...readEveTraceState(this.state).metadata,...n??{},"eve.session_id":r},s=await this.startTurnSpan(r,t,e,i);s.log({metadata:i});const c={key:o,metadata:i,metrics:{},span:s,stepsByIndex:new Map,turnId:t.data.turnId};return this.turnsByKey.set(o,c),c}async startRequestedTool(t,e,n,r){const o=toolKey3(n,r.callId);if(this.toolsByCallKey.has(o)||this.completedToolKeys.has(o))return;const a=toolMetadataFromTurn(e),{rowId:i,spanId:s}=await generateEveIds("tool",n,t.data.turnId,r.callId);if(this.toolsByCallKey.has(o)||this.completedToolKeys.has(o))return;const c=await this.startEveChildSpan(e.span,{event:{id:i,input:r.input,metadata:a},name:r.toolName,spanAttributes:{type:"tool"},spanId:s,startTime:eventTime2(t)});c.log({input:r.input,metadata:a}),this.toolsByCallKey.set(o,{metadata:a,span:c,turnKey:turnKey2(n,t.data.turnId)})}async startRequestedSubagent(t,e,n,r){const o=toolKey3(n,r.callId);if(this.toolsByCallKey.has(o)||this.completedToolKeys.has(o))return;const a=r.subagentName??r.name??"agent",i=toolMetadataFromTurn(e),{rowId:s,spanId:c}=await generateEveIds("subagent",n,r.callId);if(this.toolsByCallKey.has(o)||this.completedToolKeys.has(o))return;const u=await this.startEveChildSpan(e.span,{event:{id:s,input:r.input,metadata:i},name:a,spanAttributes:{type:"tool"},spanId:c,startTime:eventTime2(t)});u.log({input:r.input,metadata:i}),this.toolsByCallKey.set(o,{metadata:i,span:u,turnKey:turnKey2(n,t.data.turnId)})}async startSyntheticTool(t,e,n,r){const o=await this.ensureTurn(t,e,r),a=sessionIdFromContext(e);if(!o||!a)return;const i=toolMetadataFromTurn(o),{rowId:s,spanId:c}=await generateEveIds("tool",a,t.data.turnId,n.callId),u=this.toolsByCallKey.get(toolKey3(a,n.callId));if(u)return u;const p=await this.startEveChildSpan(o.span,{event:{id:s,metadata:i},name:n.toolName,spanAttributes:{type:"tool"},spanId:c,startTime:eventTime2(t)});p.log({metadata:i});const l={metadata:i,span:p,turnKey:turnKey2(a,t.data.turnId)};return this.toolsByCallKey.set(toolKey3(a,n.callId),l),l}async startSyntheticSubagent(t,e,n){const r=await this.ensureTurn(t,e,n),o=sessionIdFromContext(e);if(!r||!o)return;const a=toolMetadataFromTurn(r),{rowId:i,spanId:s}=await generateEveIds("subagent",o,t.data.callId),c=this.toolsByCallKey.get(toolKey3(o,t.data.callId));if(c)return c;const u=await this.startEveChildSpan(r.span,{event:{id:i,metadata:a},name:t.data.subagentName,spanAttributes:{type:"tool"},spanId:s,startTime:eventTime2(t)});u.log({metadata:a});const p={metadata:a,span:u,turnKey:turnKey2(o,t.data.turnId)};return this.toolsByCallKey.set(toolKey3(o,t.data.callId),p),p}async startSyntheticSubagentResult(t,e,n,r){const o=await this.ensureTurn(t,e,r),a=sessionIdFromContext(e);if(!o||!a)return;const i=toolMetadataFromTurn(o),{rowId:s,spanId:c}=await generateEveIds("subagent",a,n.callId),u=this.toolsByCallKey.get(toolKey3(a,n.callId));if(u)return u;const p=await this.startEveChildSpan(o.span,{event:{id:s,metadata:i},name:n.subagentName,spanAttributes:{type:"tool"},spanId:c,startTime:eventTime2(t)});p.log({metadata:i});const l={metadata:i,span:p,turnKey:turnKey2(a,t.data.turnId)};return this.toolsByCallKey.set(toolKey3(a,n.callId),l),l}async startTurnSpan(t,e,n,r){const o=isObject(n)?n.session:void 0,a=isObject(o)?o.parent:void 0,i=isObject(a)?a.turn:void 0,s=isObject(a)&&"string"==typeof a.callId&&"string"==typeof a.sessionId&&isObject(i)&&"string"==typeof i.id?{callId:a.callId,sessionId:a.sessionId,turnId:i.id}:void 0,[{rowId:c,spanId:u},p,l]=await Promise.all([generateEveIds("turn",t,e.data.turnId),deterministicEveId("eve:root",s?.sessionId??t,s?.turnId??e.data.turnId),s?deterministicEveId("eve:subagent",s.sessionId,s.callId):Promise.resolve(void 0)]);return await this.startEveSpan({event:{id:c,metadata:r},name:"eve.turn",parentSpanIds:l?{rootSpanId:p,spanId:l}:{parentSpanIds:[],rootSpanId:p},spanAttributes:{type:"task"},spanId:u,startTime:eventTime2(e)})}turnForEvent(t,e){const n=sessionIdFromContext(e);return n?this.turnsByKey.get(turnKey2(n,t.data.turnId)):void 0}stepForEvent(t,e){return this.turnForEvent(t,e)?.stepsByIndex.get(t.data.stepIndex)}finalizeTurn(t,e){const{endTime:n}=e;for(const e of t.stepsByIndex.values())e.span.log({...void 0!==e.input?{input:e.input}:{},metadata:e.metadata,metrics:e.metrics,output:e.output}),e.span.end(void 0===n?void 0:{endTime:n});t.stepsByIndex.clear();for(const e of this.toolsByCallKey.values())e.turnKey===t.key&&(e.endedByTurn||(e.span.log({metadata:e.metadata}),e.span.end(void 0===n?void 0:{endTime:n}),e.endedByTurn=!0));e.error?t.span.log({error:e.error}):t.span.log({metadata:t.metadata,metrics:t.metrics,output:t.output}),t.span.end(void 0===n?void 0:{endTime:n}),this.turnsByKey.delete(t.key),this.state.update(e=>{const n=normalizeEveTraceState(e);return{...n,stepStarts:n.stepStarts.filter(e=>e.turnId!==t.turnId)}})}cleanupSession(t){const e=`${t}:`;for(const t of this.turnsByKey.keys())t.startsWith(e)&&this.turnsByKey.delete(t);for(const t of this.toolsByCallKey.keys())t.startsWith(e)&&this.toolsByCallKey.delete(t);for(const t of this.completedToolKeys.keys())t.startsWith(e)&&this.completedToolKeys.delete(t);this.state.update(()=>emptyEveTraceState())}async flushInstrumentation(){try{return await flush(),!0}catch(t){return debugLogger.warn("Error in Eve flush instrumentation:",t),!1}}};function emptyEveTraceState(){return{llmInputs:[],metadata:{},spanReferences:[],stepStarts:[]}}function normalizeEveTraceState(t){if(!isObject(t))return emptyEveTraceState();const e=isObject(t.metadata)?t.metadata:{},n=Array.isArray(t.spanReferences)?t.spanReferences.flatMap(t=>{if(!isObject(t))return[];const e=t.exported,n=t.endTime,r=t.rootSpanId,o=t.rowId,a=t.spanId,i=t.startEvent,s=isObject(i)?i.created:void 0,c=isObject(i)?i.metrics:void 0,u=isObject(i)?i.span_attributes:void 0,p=isObject(i)?i.span_parents:void 0,l="string"==typeof s&&isObject(c)&&"number"==typeof c.start&&Number.isFinite(c.start)&&isObject(u)&&Array.isArray(p)&&p.every(t=>"string"==typeof t)?{created:s,metrics:{start:c.start},span_attributes:{...u},span_parents:[...p]}:void 0;return"string"==typeof e&&"string"==typeof r&&"string"==typeof o&&"string"==typeof a?[{..."number"==typeof n&&Number.isFinite(n)?{endTime:n}:{},exported:e,rootSpanId:r,rowId:o,spanId:a,...l?{startEvent:l}:{}}]:[]}).slice(-MAX_STORED_SPAN_REFERENCES):[];return{llmInputs:Array.isArray(t.llmInputs)?t.llmInputs.flatMap(t=>{if(!isObject(t))return[];const e=t.key,n=t.input;return"string"==typeof e&&isCapturedModelInput(n)?[{input:n,key:e}]:[]}).slice(-MAX_STORED_LLM_INPUTS):[],metadata:{...e},spanReferences:n,stepStarts:Array.isArray(t.stepStarts)?t.stepStarts.flatMap(t=>{if(!isObject(t))return[];const e=t.ordinal,n=t.open,r=t.stepIndex,o=t.turnId;return"number"==typeof e&&Number.isInteger(e)&&e>=0&&"boolean"==typeof n&&"number"==typeof r&&Number.isInteger(r)&&"string"==typeof o?[{open:n,ordinal:e,stepIndex:r,turnId:o}]:[]}).slice(-MAX_STORED_STEP_STARTS):[]}}function readEveTraceState(t){try{return normalizeEveTraceState(t.get())}catch{return emptyEveTraceState()}}function captureEveModelInput(t,e){if(!isObject(e))return;const n=e.session,r=e.turn,o=e.step;if(!isObject(n)||!isObject(r)||!isObject(o))return;const a=n.id,i=r.id,s=o.index;if("string"!=typeof a||"string"!=typeof i||"number"!=typeof s||!Number.isInteger(s))return;const c=capturedModelInput(e.modelInput);if(!c)return;const u=llmInputKey(a,i,s);t.update(t=>{const e=normalizeEveTraceState(t),n=[...e.llmInputs,{input:c,key:u}];return{...e,llmInputs:n.slice(-MAX_STORED_LLM_INPUTS)}})}function consumeCapturedEveModelInput(t,e,n,r){try{const o=llmInputKey(e,n,r);let a;return t.update(t=>{const e=normalizeEveTraceState(t),n=e.llmInputs.findIndex(t=>t.key===o);return n<0?e:(a=e.llmInputs[n]?.input,{...e,llmInputs:e.llmInputs.filter((t,e)=>e!==n)})}),a}catch(t){return void debugLogger.warn("Error in Eve LLM input consumption:",t)}}function capturedModelInput(t){if(!isObject(t))return;const e=t.messages;if(!Array.isArray(e))return;const n=t.instructions,r=[...void 0!==n?[{content:n,role:"system"}]:[],...e];try{const t=JSON.parse(JSON.stringify(r));if(!Array.isArray(t))return;return t}catch{return}}function isCapturedModelInput(t){return Array.isArray(t)}function llmInputKey(t,e,n){return`${t}\0${e}\0${n}`}function modelMetadataFromRuntime(t){if(!isObject(t))return{};const e=t.modelId;return"string"!=typeof e||e.trim().startsWith("dynamic:")?{}:modelMetadataFromModelId(e)}function modelMetadataFromModelId(t){const e=t.trim();if(!e)return{};const n=e.indexOf("/");return n>0&&n<e.length-1?{model:e.slice(n+1),provider:e.slice(0,n)}:{model:e}}function sessionIdFromContext(t){if(!isObject(t))return;const e=t.session;if(!isObject(e))return;const n=e.id;return"string"==typeof n?n:void 0}function toolMetadataFromTurn(t){const{model:e,provider:n,...r}=t.metadata;return r}function isToolCallAction(t){return isObject(t)&&"tool-call"===t.kind&&"string"==typeof t.callId&&"string"==typeof t.toolName&&isObject(t.input)}function isLocalSubagentCallAction(t){return isObject(t)&&"subagent-call"===t.kind&&"string"==typeof t.callId&&isObject(t.input)}function isTraceableActionRequest(t){return isToolCallAction(t)||isLocalSubagentCallAction(t)}function isToolResult(t){return isObject(t)&&"tool-result"===t.kind&&"string"==typeof t.callId&&"string"==typeof t.toolName}function isSubagentResult(t){return isObject(t)&&"subagent-result"===t.kind&&"string"==typeof t.callId&&"string"==typeof t.subagentName}function normalizedFinishReason(t){switch(t){case"content-filter":return"content_filter";case"tool-calls":return"tool_calls";default:return t}}function errorFromMessage(t,e,n){const r=new Error(`${e}: ${t}`);return void 0!==n&&(r.cause=n),r}function actionResultError(t,e){if(t)return errorFromMessage(t.message,t.code);const n=new Error("Eve action failed");return void 0!==e&&(n.cause=e),n}function eventTime2(t){if(!t.meta?.at)return;const e=Date.parse(t.meta.at);return Number.isFinite(e)?e/1e3:void 0}function turnKey2(t,e){return`${t}:${e}`}function toolKey3(t,e){return`${t}:${e}`}async function generateEveIds(t,...e){const[n,r]=await Promise.all([deterministicEveId(`eve:row:${t}`,...e),deterministicEveId(`eve:${t}`,...e)]);return{rowId:n,spanId:r}}async function deterministicEveId(...t){const e=(new TextEncoder).encode(t.map(t=>`${t.length}:${t}`).join("\0")),n=await globalThis.crypto.subtle.digest("SHA-256",e),r=Array.from(new Uint8Array(n,0,16)).map(t=>t.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}var TypedApplyProxy=Proxy;function wrapAnthropic(t){const e=t;return e&&"object"==typeof e&&"messages"in e&&"object"==typeof e.messages&&e.messages&&"create"in e.messages?anthropicProxy(e):(console.warn("Unsupported Anthropic library. Not wrapping."),t)}function anthropicProxy(t){const e=new Proxy(t,{get(t,n,r){switch(n){case"beta":return t.beta?betaProxy(t.beta,e):t.beta;case"messages":return messagesProxy(t.messages);default:return Reflect.get(t,n,r)}}});return e}function betaProxy(t,e){return new Proxy(t,{get:(t,n,r)=>"messages"===n?betaMessagesProxy(t.messages,e):Reflect.get(t,n,r)})}function messagesProxy(t){return new Proxy(t,{get:(t,e,n)=>"create"===e?createProxy(t.create,anthropicChannels.messagesCreate):Reflect.get(t,e,n)})}function betaMessagesProxy(t,e){return new Proxy(t,{get:(t,n,r)=>"create"===n?createProxy(t.create,anthropicChannels.betaMessagesCreate):"toolRunner"===n?"function"!=typeof t.toolRunner?Reflect.get(t,n,r):toolRunnerProxy(t.toolRunner,e,anthropicChannels.betaMessagesToolRunner):Reflect.get(t,n,r)})}function createProxy(t,e){return new TypedApplyProxy(t,{apply:(t,n,r)=>e.tracePromise(()=>Reflect.apply(t,n,r),{arguments:r})})}function toolRunnerProxy(t,e,n){return new TypedApplyProxy(t,{apply(t,r,o){const a=r&&"object"==typeof r?new Proxy(r,{get:(t,n,r)=>"_client"===n?e:Reflect.get(t,n,r)}):{_client:e};return n.traceSync(()=>Reflect.apply(t,a,o),{arguments:o})}})}var MASTRA_BRAINTRUST_EXPORTER_NAME="braintrust",SPAN_TYPE_MAP={agent_run:"task",model_generation:"llm",model_step:"llm",model_chunk:"llm",tool_call:"tool",mcp_tool_call:"tool",workflow_run:"task",workflow_step:"function",workflow_conditional:"function",workflow_conditional_eval:"function",workflow_parallel:"function",workflow_loop:"function",workflow_sleep:"function",workflow_wait_event:"function",memory_operation:"function",workspace_action:"function",rag_ingestion:"task",rag_embedding:"llm",rag_vector_operation:"function",rag_action:"function",graph_action:"function",scorer_run:"score",scorer_step:"score",processor_run:"function",generic:"function"};function spanTypeFor(t){return SPAN_TYPE_MAP[t]??"function"}function epochSeconds(t){if(void 0===t)return;const e=t instanceof Date?t.getTime():"number"==typeof t?t:Date.parse(t);return Number.isFinite(e)?e/1e3:void 0}function modelMetrics(t){if(!isObject(t))return;const e=isObject(t.usage)?t.usage:void 0;if(!e)return;const n={};"number"==typeof e.inputTokens&&(n.prompt_tokens=e.inputTokens),"number"==typeof e.outputTokens&&(n.completion_tokens=e.outputTokens),"number"==typeof e.inputTokens&&"number"==typeof e.outputTokens&&(n.tokens=e.inputTokens+e.outputTokens);const r=isObject(e.inputDetails)?e.inputDetails:void 0,o=isObject(e.outputDetails)?e.outputDetails:void 0;return r&&"number"==typeof r.cacheRead&&(n.prompt_cached_tokens=r.cacheRead),r&&"number"==typeof r.cacheWrite&&(n.prompt_cache_creation_tokens=r.cacheWrite),o&&"number"==typeof o.reasoning&&(n.completion_reasoning_tokens=o.reasoning),Object.keys(n).length>0?n:void 0}function timeToFirstTokenSeconds(t,e){if(!isObject(t))return;if(void 0===e)return;const n=t.completionStartTime,r=n instanceof Date||"string"==typeof n||"number"==typeof n?epochSeconds(n):void 0;if(void 0===r)return;const o=r-e;return Number.isFinite(o)&&o>=0?o:void 0}function buildMetadata(t){const e={};if(void 0!==t.entityId&&(e.entity_id=t.entityId),void 0!==t.entityName&&(e.entity_name=t.entityName),void 0!==t.entityType&&(e.entity_type=t.entityType),t.metadata&&isObject(t.metadata)&&Object.assign(e,t.metadata),t.attributes&&isObject(t.attributes))for(const[n,r]of Object.entries(t.attributes))"usage"!==n&&void 0!==r&&(e[n]=r);return t.tags&&t.tags.length>0&&(e.tags=t.tags),t.requestContext&&isObject(t.requestContext)&&(e.request_context=t.requestContext),e}var BraintrustObservabilityExporter=class{name=MASTRA_BRAINTRUST_EXPORTER_NAME;spans=new Map;capturedParent;constructor(){_internalSetInitialState()}async exportTracingEvent(t){const e=t.exportedSpan;if(!0!==e.isInternal)try{switch(t.type){case"span_started":this.onStart(e);break;case"span_updated":this.onUpdate(e);break;case"span_ended":this.onEnd(e)}}catch(t){logExporterError(t)}}async flush(){const t=_internalGetGlobalState();t&&await t.bgLogger().flush()}async shutdown(){await this.flush(),this.spans.clear()}onStart(t){if(this.spans.has(t.id))return;const e={name:t.name,spanAttributes:{type:spanTypeFor(t.type)},startTime:epochSeconds(t.startTime),event:{id:t.id}},n=t.parentSpanId?this.spans.get(t.parentSpanId):void 0;if(!this.capturedParent){const t=currentSpan();t&&t.spanId&&(this.capturedParent=t)}const r=n?n.span.startSpan(e):this.capturedParent?this.capturedParent.startSpan(e):startSpan(e),o={span:r,hasLoggedInput:!1};this.logPayload(o,t),this.spans.set(t.id,o),!0===t.isEvent&&(r.end({endTime:e.startTime}),this.spans.delete(t.id))}onUpdate(t){const e=this.spans.get(t.id);e&&this.logPayload(e,t)}onEnd(t){const e=this.spans.get(t.id);e&&(this.logPayload(e,t),t.errorInfo&&e.span.log({error:t.errorInfo.message||t.errorInfo.name||"Unknown Mastra error"}),e.span.end({endTime:epochSeconds(t.endTime)}),this.spans.delete(t.id))}logPayload(t,e){const n={};void 0!==e.input&&(n.input=e.input,t.hasLoggedInput=!0),void 0!==e.output&&(n.output=e.output);const r=buildMetadata(e);Object.keys(r).length>0&&(n.metadata=r);const o=modelMetrics(e.attributes),a=timeToFirstTokenSeconds(e.attributes,epochSeconds(e.startTime));(o||void 0!==a)&&(n.metrics={...o??{},...void 0!==a?{time_to_first_token:a}:{}}),Object.keys(n).length>0&&t.span.log(n)}};function logExporterError(t){debugLogger.warn("Mastra exporter failure:",t)}function wrapMastraAgent(t,e){return t}function wrapClaudeAgentSDK(t){const e=t;return e&&"object"==typeof e&&"query"in e&&"function"==typeof e.query?claudeAgentSDKProxy(e):(console.warn("Unsupported Claude Agent SDK. Not wrapping."),t)}function wrapClaudeAgentQuery(t,e){const n=new Proxy(t,{apply(t,r,o){const a=o[0]??{},i={...a,options:{...a.options??{},[CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION]:!0}},s=r===n||void 0===r?e??r:r;return claudeAgentSDKChannels.query.traceSync(()=>Reflect.apply(t,s,[i]),{arguments:[i]})}});return n}function wrapClaudeAgentTool(t,e,n){const r=new Proxy(t,{apply(t,o,a){const i=o===r||void 0===o?n??o:o,s=[...a],c=s[0];let u=-1;for(let t=s.length-1;t>=0;t-=1)if("function"==typeof s[t]){u=t;break}if("string"!=typeof c||-1===u)return Reflect.apply(t,i,s);const p={toolName:c},l=s[u];s[u]=wrapLocalClaudeToolHandler(l,()=>p);const d=Reflect.apply(t,i,s);return d&&"object"==typeof d&&e.set(d,p),d}});return r}function wrapCreateSdkMcpServer(t,e,n){const r=new Proxy(t,{apply(t,o,a){const i=o===r||void 0===o?n??o:o,s=a[0],c=s?.name;if("string"==typeof c&&Array.isArray(s?.tools))for(const t of s.tools){if(!t||"object"!=typeof t)continue;const n=e.get(t);n&&(n.serverName=c)}return Reflect.apply(t,i,a)}});return r}function claudeAgentSDKProxy(t){const e=new Map,n=new WeakMap;return new Proxy(t,{get(t,r,o){if(e.has(r))return e.get(r);const a=Reflect.get(t,r,o);if("query"===r&&"function"==typeof a){const n=wrapClaudeAgentQuery(t.query,t);return e.set(r,n),n}if("tool"===r&&"function"==typeof a){const o=wrapClaudeAgentTool(t.tool,n,t);return e.set(r,o),o}if("createSdkMcpServer"===r&&"function"==typeof a){const o=wrapCreateSdkMcpServer(a,n,t);return e.set(r,o),o}if("function"==typeof a){const n=a.bind(t);return e.set(r,n),n}return a}})}var WRAPPED_CLIENT=Symbol.for("braintrust.openai-codex.wrapped-client"),WRAPPED_THREAD=Symbol.for("braintrust.openai-codex.wrapped-thread");function wrapOpenAICodexSDK(t){if(!t||"object"!=typeof t)return t;const e=t;if(hasCodexClientShape(e))return wrapCodexClient(e);if(!e.Codex||"function"!=typeof e.Codex)return console.warn("Unsupported OpenAI Codex SDK. Not wrapping."),t;const n=isModuleNamespace2(t)?Object.setPrototypeOf({},t):t;return new Proxy(n,{get(t,e,n){const r=Reflect.get(t,e,n);return"Codex"===e&&"function"==typeof r?wrapCodexClass(r):"function"==typeof r?r.bind(t):r}})}function hasCodexClientShape(t){return"function"==typeof t.startThread&&"function"==typeof t.resumeThread}function isModuleNamespace2(t){if(!t||"object"!=typeof t)return!1;if("Module"===t.constructor?.name)return!0;const e=Object.keys(t);if(0===e.length)return!1;const n=Object.getOwnPropertyDescriptor(t,e[0]);return!!n&&(!n.configurable&&!n.writable)}function wrapCodexClass(t){return new Proxy(t,{construct:(t,e,n)=>wrapCodexClient(Reflect.construct(t,e,n)),get(t,e,n){const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r}})}function wrapCodexClient(t){return t&&"object"==typeof t?t[WRAPPED_CLIENT]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_CLIENT)return!0;const r=Reflect.get(t,e,n);return"startThread"===e&&"function"==typeof r?function(e){return wrapCodexThread(Reflect.apply(r,t,[e]))}:"resumeThread"===e&&"function"==typeof r?function(e,n){return wrapCodexThread(Reflect.apply(r,t,[e,n]))}:"function"==typeof r?r.bind(t):r}}):t}function wrapCodexThread(t){return t&&"object"==typeof t?t[WRAPPED_THREAD]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_THREAD)return!0;const r=Reflect.get(t,e,n);return"run"===e&&"function"==typeof r?function(e,n){const o=[e,n];return openAICodexChannels.run.tracePromise(()=>Reflect.apply(r,t,o),{arguments:o,operation:"run",thread:t})}:"runStreamed"===e&&"function"==typeof r?function(e,n){const o=[e,n];return openAICodexChannels.runStreamed.tracePromise(()=>Reflect.apply(r,t,o),{arguments:o,operation:"runStreamed",thread:t})}:"function"==typeof r?r.bind(t):r}}):t}var WRAPPED_AGENT2=Symbol.for("braintrust.cursor-sdk.wrapped-agent");function wrapCursorSDK(t){if(!t||"object"!=typeof t)return t;const e=t;if(!e.Agent||"function"!=typeof e.Agent)return console.warn("Unsupported Cursor SDK. Not wrapping."),t;const n=isModuleNamespace3(t)?Object.setPrototypeOf({},t):t;return new Proxy(n,{get(t,e,n){const r=Reflect.get(t,e,n);return"Agent"===e&&"function"==typeof r?wrapCursorAgentClass(r):"function"==typeof r?r.bind(t):r}})}function isModuleNamespace3(t){if(!t||"object"!=typeof t)return!1;if("Module"===t.constructor?.name)return!0;const e=Object.keys(t);if(0===e.length)return!1;const n=Object.getOwnPropertyDescriptor(t,e[0]);return!!n&&(!n.configurable&&!n.writable)}function wrapCursorAgentClass(t){const e=new Map;return new Proxy(t,{get(t,n,r){if(e.has(n))return e.get(n);const o=Reflect.get(t,n,r);if("create"===n&&"function"==typeof o){const r=async function(e){const n=[e];return cursorSDKChannels.create.tracePromise(async()=>wrapCursorAgent(await Reflect.apply(o,t,n)),{arguments:n})};return e.set(n,r),r}if("resume"===n&&"function"==typeof o){const r=async function(e,n){const r=[e,n];return cursorSDKChannels.resume.tracePromise(async()=>wrapCursorAgent(await Reflect.apply(o,t,r)),{arguments:r})};return e.set(n,r),r}if("prompt"===n&&"function"==typeof o){const r=async function(e,n){const r=[e,n];return cursorSDKChannels.prompt.tracePromise(()=>Reflect.apply(o,t,r),{arguments:r})};return e.set(n,r),r}if("function"==typeof o){const r=o.bind(t);return e.set(n,r),r}return o}})}function wrapCursorAgent(t){if(!t||"object"!=typeof t)return t;if(t[WRAPPED_AGENT2])return t;return new Proxy(t,{get(t,e,n){if(e===WRAPPED_AGENT2)return!0;const r=Reflect.get(t,e,n);return"send"===e&&"function"==typeof r?function(e,n){const o=[e,n];return cursorSDKChannels.send.tracePromise(()=>Reflect.apply(r,t,o),{agent:t,arguments:o,operation:"send"})}:"function"==typeof r?r.bind(t):r}})}var WRAPPED_PROMPT=Symbol.for("braintrust.pi-coding-agent.wrapped-prompt");function wrapPiCodingAgentSDK(t){if(!t||"object"!=typeof t)return t;const e=t;return e.AgentSession&&"function"==typeof e.AgentSession?(patchAgentSessionClass(e.AgentSession),t):(console.warn("Unsupported Pi Coding Agent SDK. Not wrapping."),t)}function patchAgentSessionClass(t){const e=t.prototype;if(!e||e[WRAPPED_PROMPT])return;const n=Object.getOwnPropertyDescriptor(e,"prompt");if(!n||"function"!=typeof n.value)return void console.warn("Unsupported Pi Coding Agent SDK. Not wrapping.");const r=n.value;Object.defineProperty(e,"prompt",{...n,value:function(t,e){const n=[t,e];return piCodingAgentChannels.prompt.tracePromise(()=>Reflect.apply(r,this,n),{arguments:n,self:this,session:this})}}),Object.defineProperty(e,WRAPPED_PROMPT,{configurable:!1,enumerable:!1,value:!0})}var WRAPPED_CLASS=Symbol.for("braintrust.strands-agent-sdk.wrapped-class"),WRAPPED_INSTANCE=Symbol.for("braintrust.strands-agent-sdk.wrapped-instance");function wrapStrandsAgentSDK(t){if(!t||"object"!=typeof t)return t;const e=t;if("function"!=typeof e.Agent&&"function"!=typeof e.Graph&&"function"!=typeof e.Swarm)return console.warn("Unsupported Strands Agent SDK. Not wrapping."),t;const n=isModuleNamespace4(t)?Object.setPrototypeOf({},t):t;return new Proxy(n,{get(t,e,n){const r=Reflect.get(t,e,n);return"Agent"===e&&"function"==typeof r?wrapAgentClass2(r):"Graph"===e&&"function"==typeof r?wrapMultiAgentClass(r,"graph"):"Swarm"===e&&"function"==typeof r?wrapMultiAgentClass(r,"swarm"):r}})}function isModuleNamespace4(t){if(!t||"object"!=typeof t)return!1;if("Module"===t.constructor?.name)return!0;const e=Object.keys(t);if(0===e.length)return!1;const n=Object.getOwnPropertyDescriptor(t,e[0]);return!!n&&(!n.configurable&&!n.writable)}function wrapAgentClass2(t){return t[WRAPPED_CLASS]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_CLASS)return!0;const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r},construct:(t,e,n)=>wrapAgentInstance(Reflect.construct(t,e,n))})}function wrapMultiAgentClass(t,e){return t[WRAPPED_CLASS]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_CLASS)return!0;const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r},construct:(t,n,r)=>wrapMultiAgentInstance(Reflect.construct(t,n,r),e)})}function wrapAgentInstance(t){if(!t||"object"!=typeof t)return t;if(t[WRAPPED_INSTANCE])return t;const e=new Proxy(t,{get(t,n,r){if(n===WRAPPED_INSTANCE)return!0;const o=Reflect.get(t,n,r);return"stream"===n&&"function"==typeof o?function(n,r){const a=[n,r];return strandsAgentSDKChannels.agentStream.traceSync(()=>Reflect.apply(o,t,a),{agent:e,arguments:a,self:e})}:"invoke"===n&&"function"==typeof o?async function(t,n){return consumeAsyncGenerator(e.stream(t,n))}:"function"==typeof o?o.bind(t):o}});return e}function wrapMultiAgentInstance(t,e){if(!t||"object"!=typeof t)return t;if(t[WRAPPED_INSTANCE])return t;const n=new Proxy(t,{get(t,r,o){if(r===WRAPPED_INSTANCE)return!0;const a=Reflect.get(t,r,o);return"stream"===r&&"function"==typeof a?function(r,o){const i=[r,o];return("graph"===e?strandsAgentSDKChannels.graphStream:strandsAgentSDKChannels.swarmStream).traceSync(()=>Reflect.apply(a,t,i),{arguments:i,orchestrator:n,self:n})}:"invoke"===r&&"function"==typeof a?async function(t,e){return consumeAsyncGenerator(n.stream(t,e))}:"function"==typeof a?a.bind(t):a}});return n}async function consumeAsyncGenerator(t){let e=await t.next();for(;!e.done;)e=await t.next();return e.value}function wrapGoogleGenAI(t){return t&&"object"==typeof t?"GoogleGenAI"in t?new Proxy(t,{get(t,e,n){if("GoogleGenAI"===e){return wrapGoogleGenAIClass(Reflect.get(t,e,n))}return Reflect.get(t,e,n)}}):(console.warn("GoogleGenAI class not found in module. Not wrapping. Make sure you're passing the module itself (import * as googleGenAI from '@google/genai')."),t):(console.warn("Invalid Google GenAI module. Not wrapping."),t)}function wrapGoogleGenAIClass(t){return new Proxy(t,{construct:(t,e)=>wrapGoogleGenAIInstance(Reflect.construct(t,e))})}function wrapGoogleGenAIInstance(t){const e=wrapModels(t.models);let n,r;return patchGoogleGenAIChats(t,e),new Proxy(t,{get(t,o,a){if("models"===o)return e;if("interactions"===o){const e=Reflect.get(t,o,a);return isObject(e)&&"function"==typeof e.create?(e!==n&&(n=e,r=wrapInteractions(e)),r):e}return Reflect.get(t,o,a)}})}function patchGoogleGenAIChats(t,e){isObject(t.chats)&&"modelsModule"in t.chats&&Reflect.set(t.chats,"modelsModule",e)}function wrapModels(t){return new Proxy(t,{get:(t,e,n)=>"generateContent"===e?wrapGenerateContent(t.generateContent.bind(t)):"generateContentStream"===e?wrapGenerateContentStream(t.generateContentStream.bind(t)):"embedContent"===e?wrapEmbedContent(t.embedContent.bind(t)):Reflect.get(t,e,n)})}function wrapInteractions(t){return new Proxy(t,{get:(t,e,n)=>"create"===e?wrapInteractionCreate(t.create.bind(t)):Reflect.get(t,e,n)})}function wrapGenerateContent(t){return function(e){return googleGenAIChannels.generateContent.tracePromise(()=>t(e),{arguments:[e]})}}function wrapGenerateContentStream(t){return function(e){return googleGenAIChannels.generateContentStream.tracePromise(()=>t(e),{arguments:[e]})}}function wrapEmbedContent(t){return function(e){return googleGenAIChannels.embedContent.tracePromise(()=>t(e),{arguments:[e]})}}function wrapInteractionCreate(t){return function(e,n){if(!0===e.background)return void 0===n?t(e):t(e,n);const r=void 0===n?{arguments:[e]}:{arguments:[e,n]};return googleGenAIChannels.interactionsCreate.tracePromise(()=>void 0===n?t(e):t(e,n),r)}}function wrapGoogleADK(t){return t&&"object"==typeof t?"Runner"in t||"LlmAgent"in t?new Proxy(t,{get(t,e,n){const r=Reflect.get(t,e,n);return"Runner"===e&&"function"==typeof r||"InMemoryRunner"===e&&"function"==typeof r?wrapRunnerClass(r):"LlmAgent"!==e&&"Agent"!==e&&"SequentialAgent"!==e&&"ParallelAgent"!==e&&"LoopAgent"!==e||"function"!=typeof r?"FunctionTool"===e&&"function"==typeof r?wrapToolClass(r):r:wrapAgentClass3(r)}}):(console.warn("Runner or LlmAgent class not found in module. Not wrapping. Make sure you're passing the module itself (import * as adk from '@google/adk')."),t):(console.warn("Invalid Google ADK module. Not wrapping."),t)}function wrapRunnerClass(t){return new Proxy(t,{construct:(t,e)=>wrapRunnerInstance(Reflect.construct(t,e))})}function wrapRunnerInstance(t){return new Proxy(t,{get:(t,e,n)=>"runAsync"===e?wrapRunnerRunAsync(t):Reflect.get(t,e,n)})}function wrapRunnerRunAsync(t){const e=t.runAsync.bind(t);return function(n){return googleADKChannels.runnerRunAsync.traceSync(()=>e(n),{arguments:[n],self:t})}}function wrapAgentClass3(t){return new Proxy(t,{construct:(t,e)=>wrapAgentInstance2(Reflect.construct(t,e))})}function wrapAgentInstance2(t){return new Proxy(t,{get:(t,e,n)=>"runAsync"===e?wrapAgentRunAsync(t):Reflect.get(t,e,n)})}function wrapAgentRunAsync(t){const e=t.runAsync.bind(t);return function(n){return googleADKChannels.agentRunAsync.traceSync(()=>e(n),{arguments:[n],self:t})}}function wrapToolClass(t){return new Proxy(t,{construct:(t,e)=>wrapToolInstance(Reflect.construct(t,e))})}function wrapToolInstance(t){return new Proxy(t,{get:(t,e,n)=>"runAsync"===e?wrapToolRunAsync(t):Reflect.get(t,e,n)})}function wrapToolRunAsync(t){const e=t.runAsync.bind(t);return function(n){return googleADKChannels.toolRunAsync.tracePromise(()=>e(n),{arguments:[n],self:t})}}var WRAPPED_GENKIT=Symbol.for("braintrust.genkit.wrapped"),PATCHED_GENKIT_REGISTRY=Symbol.for("braintrust.genkit.registry.patched"),PATCHED_GENKIT_REGISTRY_CONSTRUCTOR=Symbol.for("braintrust.genkit.registry.constructor.patched"),wrappedGenkitActions=new WeakMap;function wrapGenkit(t){return isGenkitInstance(t)?wrapGenkitInstance(t):isGenkitModule(t)?wrapGenkitModule(t):(console.warn("Unsupported Genkit object. Not wrapping."),t)}function isRecord3(t){return"object"==typeof t&&null!==t}function isPropertyBag(t){return isRecord3(t)||"function"==typeof t}function hasFunction(t,e){return isPropertyBag(t)&&e in t&&"function"==typeof t[e]}function isGenkitInstance(t){return isRecord3(t)&&(hasFunction(t,"generate")||hasFunction(t,"generateStream")||hasFunction(t,"defineFlow")||hasFunction(t,"defineTool"))}function isGenkitModule(t){return hasFunction(t,"genkit")}function wrapGenkitModule(t){return new Proxy(t,{get(t,e,n){const r=Reflect.get(t,e,n);if("genkit"===e&&"function"==typeof r){const t=r;return(...e)=>wrapGenkit(t(...e))}return r}})}function wrapGenkitInstance(t){if(hasWrappedFlag(t))return t;patchGenkitRegistry(t);return new Proxy(t,{get(t,e,n){switch(e){case WRAPPED_GENKIT:return!0;case"generate":return"function"==typeof t.generate?wrapGenerate(t.generate.bind(t)):t.generate;case"generateStream":return"function"==typeof t.generateStream?wrapGenerateStream(t.generateStream.bind(t)):t.generateStream;case"embed":return"function"==typeof t.embed?wrapEmbed2(t.embed.bind(t)):t.embed;case"embedMany":return"function"==typeof t.embedMany?wrapEmbedMany2(t.embedMany.bind(t)):t.embedMany;case"run":return"function"==typeof t.run?wrapRun(t.run.bind(t)):t.run;case"defineFlow":return"function"==typeof t.defineFlow?(...e)=>wrapGenkitAction(t.defineFlow(...e)):t.defineFlow;case"defineTool":return"function"==typeof t.defineTool?(...e)=>wrapGenkitAction(t.defineTool(...e)):t.defineTool;default:return Reflect.get(t,e,n)}}})}function patchGenkitRegistry(t){const e=t.registry;patchGenkitRegistryLookup(e),patchGenkitRegistryConstructor(e)}function patchGenkitRegistryLookup(t){if(!isRecord3(t)||hasRegistryPatchedFlag(t)||!hasFunction(t,"lookupAction"))return;const e=t.lookupAction;if("function"==typeof e)try{Object.defineProperty(t,"lookupAction",{configurable:!0,value:(...n)=>{const r=e.apply(t,n);return isPromiseLike2(r)?r.then(t=>wrapGenkitAction(t)):wrapGenkitAction(r)},writable:!0}),Object.defineProperty(t,PATCHED_GENKIT_REGISTRY,{value:!0})}catch{}}function patchGenkitRegistryConstructor(t){if(!isRecord3(t))return;const e=t.constructor;if(!isPropertyBag(e)||hasRegistryConstructorPatchedFlag(e)||!hasFunction(e,"withParent"))return;const n=e.withParent;if("function"==typeof n)try{Object.defineProperty(e,"withParent",{configurable:!0,value:(...t)=>{const r=n.apply(e,t);return t.some(t=>isRecord3(t)&&hasRegistryPatchedFlag(t))&&(patchGenkitRegistryLookup(r),patchGenkitRegistryConstructor(r)),r},writable:!0}),Object.defineProperty(e,PATCHED_GENKIT_REGISTRY_CONSTRUCTOR,{value:!0})}catch{}}function wrapGenerate(t){return e=>genkitChannels.generate.tracePromise(()=>t(e),{arguments:[e]})}function wrapGenerateStream(t){return e=>genkitChannels.generateStream.traceSync(()=>t(e),{arguments:[e]})}function wrapEmbed2(t){return e=>genkitChannels.embed.tracePromise(()=>t(e),{arguments:[e]})}function wrapEmbedMany2(t){return e=>genkitChannels.embedMany.tracePromise(()=>t(e),{arguments:[e]})}function wrapRun(t){return(e,n,r)=>genkitChannels.actionRun.tracePromise(()=>t(e,n,r),{arguments:[e,n,r]})}function wrapGenkitAction(t){if(!isGenkitAction(t)||hasWrappedFlag(t))return t;const e=wrappedGenkitActions.get(t);if(e)return e;const n=new Proxy(t,{apply:(t,e,n)=>traceActionRun(t,()=>Reflect.apply(t,e,n))(n[0],n[1]),get(t,e,n){switch(e){case WRAPPED_GENKIT:return!0;case"run":return"function"==typeof t.run?traceActionRun(t,t.run.bind(t)):t.run;case"stream":return"function"==typeof t.stream?traceActionStream(t,t.stream.bind(t)):t.stream;default:return Reflect.get(t,e,n)}}});return wrappedGenkitActions.set(t,n),n}function isGenkitAction(t){return"function"==typeof t&&"__action"in t}function traceActionRun(t,e){return(n,r)=>genkitChannels.actionRun.tracePromise(()=>e(n,r),{arguments:[n,r],self:t})}function traceActionStream(t,e){return(n,r)=>genkitChannels.actionStream.traceSync(()=>e(n,r),{arguments:[n,r],self:t})}function hasWrappedFlag(t){return Boolean(t[WRAPPED_GENKIT])}function hasRegistryPatchedFlag(t){return Boolean(t[PATCHED_GENKIT_REGISTRY])}function hasRegistryConstructorPatchedFlag(t){return Boolean(t[PATCHED_GENKIT_REGISTRY_CONSTRUCTOR])}function isPromiseLike2(t){return isRecord3(t)&&"then"in t&&"function"==typeof t.then}var HUGGINGFACE_CONSTRUCTOR_KEYS=["InferenceClient","InferenceClientEndpoint","HfInference","HfInferenceEndpoint"],HUGGINGFACE_CONSTRUCTOR_KEY_SET=new Set(HUGGINGFACE_CONSTRUCTOR_KEYS);function wrapHuggingFace(t){return isSupportedHuggingFaceModule(t)?moduleProxy(t):isSupportedHuggingFaceClient(t)?clientProxy(t):(console.warn("Unsupported HuggingFace Inference SDK. Not wrapping."),t)}function isHuggingFaceConstructorKey(t){return HUGGINGFACE_CONSTRUCTOR_KEY_SET.has(t)}function hasFunction2(t,e){return isObject(t)&&e in t&&"function"==typeof t[e]}function isSupportedHuggingFaceModule(t){return!!isObject(t)&&(HUGGINGFACE_CONSTRUCTOR_KEYS.some(e=>e in t&&"function"==typeof t[e])||isSupportedHuggingFaceClient(t))}function isSupportedHuggingFaceClient(t){return hasFunction2(t,"chatCompletion")&&hasFunction2(t,"chatCompletionStream")&&hasFunction2(t,"textGeneration")&&hasFunction2(t,"textGenerationStream")&&hasFunction2(t,"featureExtraction")}function moduleProxy(t){const e=Object.create(t);return new Proxy(e,{get(e,n,r){if("string"==typeof n&&isHuggingFaceConstructorKey(n)){const e=Reflect.get(t,n,r);return"function"==typeof e?wrapClientConstructor(e):e}switch(n){case"chatCompletion":return e.chatCompletion?wrapChatCompletion2(e.chatCompletion.bind(e)):e.chatCompletion;case"chatCompletionStream":return e.chatCompletionStream?wrapChatCompletionStream(e.chatCompletionStream.bind(e)):e.chatCompletionStream;case"textGeneration":return e.textGeneration?wrapTextGeneration(e.textGeneration.bind(e)):e.textGeneration;case"textGenerationStream":return e.textGenerationStream?wrapTextGenerationStream(e.textGenerationStream.bind(e)):e.textGenerationStream;case"featureExtraction":return e.featureExtraction?wrapFeatureExtraction(e.featureExtraction.bind(e)):e.featureExtraction;default:return Reflect.get(t,n,r)}}})}function wrapClientConstructor(t){return new Proxy(t,{construct:(t,e)=>clientProxy(Reflect.construct(t,e))})}function clientProxy(t){return clientProxyWithContext(t)}function clientProxyWithContext(t,e){const n=Object.create(t);return new Proxy(n,{get(n,r,o){switch(r){case"chatCompletion":return wrapChatCompletion2(t.chatCompletion.bind(t),e);case"chatCompletionStream":return wrapChatCompletionStream(t.chatCompletionStream.bind(t),e);case"textGeneration":return wrapTextGeneration(t.textGeneration.bind(t),e);case"textGenerationStream":return wrapTextGenerationStream(t.textGenerationStream.bind(t),e);case"featureExtraction":return wrapFeatureExtraction(t.featureExtraction.bind(t),e);case"endpoint":if(!t.endpoint)return t.endpoint;{const e=t.endpoint.bind(t);return t=>clientProxyWithContext(e(t),t)}default:return Reflect.get(t,r,o)}}})}function withEndpointUrl(t,e){return e&&void 0===t.endpointUrl?{...t,endpointUrl:e}:t}function wrapChatCompletion2(t,e){return(n,r)=>{const o={arguments:[withEndpointUrl(n,e)]};return huggingFaceChannels.chatCompletion.tracePromise(()=>t(n,r),o)}}function wrapChatCompletionStream(t,e){return(n,r)=>huggingFaceChannels.chatCompletionStream.traceSync(()=>t(n,r),{arguments:[withEndpointUrl(n,e)]})}function wrapTextGeneration(t,e){return(n,r)=>{const o={arguments:[withEndpointUrl(n,e)]};return huggingFaceChannels.textGeneration.tracePromise(()=>t(n,r),o)}}function wrapTextGenerationStream(t,e){return(n,r)=>huggingFaceChannels.textGenerationStream.traceSync(()=>t(n,r),{arguments:[withEndpointUrl(n,e)]})}function wrapFeatureExtraction(t,e){return(n,r)=>{const o={arguments:[withEndpointUrl(n,e)]};return huggingFaceChannels.featureExtraction.tracePromise(()=>t(n,r),o)}}function wrapOpenRouterAgent(t){const e=t;return e&&"object"==typeof e&&"callModel"in e&&"function"==typeof e.callModel?openRouterAgentProxy(e):(console.warn("Unsupported OpenRouter Agent library. Not wrapping."),t)}function openRouterAgentProxy(t){const e=new Map;return new Proxy(t,{get(t,n,r){if(e.has(n))return e.get(n);const o=Reflect.get(t,n,r);if("callModel"===n&&"function"==typeof o){const r=wrapCallModel(o,t);return e.set(n,r),r}if("function"==typeof o){const r=o.bind(t);return e.set(n,r),r}return o}})}function wrapCallModel(t,e){return new Proxy(t,{apply(t,n,r){const o=cloneCallModelRequest(r[0]),a=r[1],i=void 0===n?e??n:n;return openRouterAgentChannels.callModel.traceSync(()=>Reflect.apply(t,i,[o,a]),{arguments:[o]})}})}function cloneCallModelRequest(t){return t&&"object"==typeof t?{...t}:t}function wrapOpenRouter(t){const e=t;return e&&"object"==typeof e&&("chat"in e&&"object"==typeof e.chat&&e.chat&&"send"in e.chat&&"embeddings"in e&&"object"==typeof e.embeddings&&e.embeddings&&"generate"in e.embeddings||"rerank"in e&&"object"==typeof e.rerank&&e.rerank&&"rerank"in e.rerank||"callModel"in e&&"function"==typeof e.callModel)?openRouterProxy(e):(console.warn("Unsupported OpenRouter library. Not wrapping."),t)}function openRouterProxy(t){return new Proxy(t,{get(t,e,n){switch(e){case"chat":return t.chat?chatProxy(t.chat):t.chat;case"embeddings":return t.embeddings?embeddingsProxy(t.embeddings):t.embeddings;case"rerank":return t.rerank?rerankProxy(t.rerank):t.rerank;case"beta":return t.beta?betaProxy2(t.beta):t.beta;case"callModel":return"function"==typeof t.callModel?wrapCallModel2(t.callModel.bind(t)):t.callModel;default:return Reflect.get(t,e,n)}}})}function betaProxy2(t){return new Proxy(t,{get:(t,e,n)=>"responses"===e?t.responses?responsesProxy2(t.responses):void 0:Reflect.get(t,e,n)})}function chatProxy(t){return new Proxy(t,{get:(t,e,n)=>"send"===e?wrapChatSend(t.send.bind(t)):Reflect.get(t,e,n)})}function embeddingsProxy(t){return new Proxy(t,{get:(t,e,n)=>"generate"===e?wrapEmbeddingsGenerate(t.generate.bind(t)):Reflect.get(t,e,n)})}function responsesProxy2(t){return new Proxy(t,{get:(t,e,n)=>"send"===e?wrapResponsesSend(t.send.bind(t)):Reflect.get(t,e,n)})}function rerankProxy(t){return new Proxy(t,{get:(t,e,n)=>"rerank"===e?wrapRerank2(t.rerank.bind(t)):Reflect.get(t,e,n)})}function wrapChatSend(t){return(e,n)=>openRouterChannels.chatSend.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapEmbeddingsGenerate(t){return(e,n)=>openRouterChannels.embeddingsGenerate.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapResponsesSend(t){return(e,n)=>openRouterChannels.betaResponsesSend.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapRerank2(t){return(e,n)=>openRouterChannels.rerankRerank.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapCallModel2(t){return(e,n)=>{const r={...e};return openRouterChannels.callModel.traceSync(()=>t(r,n),{arguments:[r]})}}function wrapMistral(t){return isSupportedMistralClient(t)?mistralProxy(t):(console.warn("Unsupported Mistral library. Not wrapping."),t)}function isRecord4(t){return"object"==typeof t&&null!==t}function hasFunction3(t,e){return isRecord4(t)&&e in t&&"function"==typeof t[e]}function isSupportedMistralClient(t){return!!isRecord4(t)&&(void 0!==t.chat&&hasChat(t.chat)||void 0!==t.embeddings&&hasEmbeddings(t.embeddings)||void 0!==t.fim&&hasFim(t.fim)||void 0!==t.agents&&hasAgents(t.agents)||void 0!==t.classifiers&&hasClassifiers(t.classifiers))}function hasChat(t){return hasFunction3(t,"complete")&&hasFunction3(t,"stream")}function hasEmbeddings(t){return hasFunction3(t,"create")}function hasFim(t){return hasFunction3(t,"complete")&&hasFunction3(t,"stream")}function hasAgents(t){return hasFunction3(t,"complete")&&hasFunction3(t,"stream")}function hasClassifiers(t){return hasFunction3(t,"moderate")&&hasFunction3(t,"moderateChat")}function mistralProxy(t){return new Proxy(t,{get(t,e,n){switch(e){case"chat":return t.chat?chatProxy2(t.chat):t.chat;case"fim":return t.fim?fimProxy(t.fim):t.fim;case"agents":return t.agents?agentsProxy(t.agents):t.agents;case"embeddings":return t.embeddings?embeddingsProxy2(t.embeddings):t.embeddings;case"classifiers":return t.classifiers?classifiersProxy(t.classifiers):t.classifiers;default:return Reflect.get(t,e,n)}}})}function chatProxy2(t){return new Proxy(t,{get:(t,e,n)=>"complete"===e?wrapChatComplete(t.complete.bind(t)):"stream"===e?wrapChatStream(t.stream.bind(t)):Reflect.get(t,e,n)})}function embeddingsProxy2(t){return new Proxy(t,{get:(t,e,n)=>"create"===e?wrapEmbeddingsCreate(t.create.bind(t)):Reflect.get(t,e,n)})}function fimProxy(t){return new Proxy(t,{get:(t,e,n)=>"complete"===e?wrapFimComplete(t.complete.bind(t)):"stream"===e?wrapFimStream(t.stream.bind(t)):Reflect.get(t,e,n)})}function agentsProxy(t){return new Proxy(t,{get:(t,e,n)=>"complete"===e?wrapAgentsComplete(t.complete.bind(t)):"stream"===e?wrapAgentsStream(t.stream.bind(t)):Reflect.get(t,e,n)})}function classifiersProxy(t){return new Proxy(t,{get:(t,e,n)=>"moderate"===e?wrapClassifiersModerate(t.moderate.bind(t)):"moderateChat"===e?wrapClassifiersModerateChat(t.moderateChat.bind(t)):"classify"===e&&t.classify?wrapClassifiersClassify(t.classify.bind(t)):"classifyChat"===e&&t.classifyChat?wrapClassifiersClassifyChat(t.classifyChat.bind(t)):Reflect.get(t,e,n)})}function wrapChatComplete(t){return(e,n)=>mistralChannels.chatComplete.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapChatStream(t){return(e,n)=>mistralChannels.chatStream.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapEmbeddingsCreate(t){return(e,n)=>mistralChannels.embeddingsCreate.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapClassifiersModerate(t){return(e,n)=>mistralChannels.classifiersModerate.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapClassifiersModerateChat(t){return(e,n)=>mistralChannels.classifiersModerateChat.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapClassifiersClassify(t){return(e,n)=>mistralChannels.classifiersClassify.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapClassifiersClassifyChat(t){return(e,n)=>mistralChannels.classifiersClassifyChat.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapFimComplete(t){return(e,n)=>mistralChannels.fimComplete.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapFimStream(t){return(e,n)=>mistralChannels.fimStream.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapAgentsComplete(t){return(e,n)=>mistralChannels.agentsComplete.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapAgentsStream(t){return(e,n)=>mistralChannels.agentsStream.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapCohere(t){return isSupportedCohereClient(t)?cohereProxy(t):(console.warn("Unsupported Cohere library. Not wrapping."),t)}var cohereProxyCache=new WeakMap;function isRecord5(t){return"object"==typeof t&&null!==t}function hasFunction4(t,e){return isRecord5(t)&&e in t&&"function"==typeof t[e]}function isSupportedCohereClient(t){return!!isRecord5(t)&&(hasFunction4(t,"chat")||hasFunction4(t,"chatStream")||hasFunction4(t,"embed")||hasFunction4(t,"rerank"))}function cohereProxy(t){const e=cohereProxyCache.get(t);if(e)return e;const n=new Proxy(t,{get(t,e,n){switch(e){case"chat":return"function"==typeof t.chat?wrapChat(t.chat.bind(t)):t.chat;case"chatStream":return"function"==typeof t.chatStream?wrapChatStream2(t.chatStream.bind(t)):t.chatStream;case"embed":return"function"==typeof t.embed?wrapEmbed3(t.embed.bind(t)):t.embed;case"rerank":return"function"==typeof t.rerank?wrapRerank3(t.rerank.bind(t)):t.rerank;default:{const r=Reflect.get(t,e,n);return isSupportedCohereClient(r)?cohereProxy(r):r}}}});return cohereProxyCache.set(t,n),n}function wrapChat(t){return(e,n)=>cohereChannels.chat.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapChatStream2(t){return(e,n)=>cohereChannels.chatStream.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapEmbed3(t){return(e,n)=>cohereChannels.embed.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapRerank3(t){return(e,n)=>cohereChannels.rerank.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapGroq(t){return isSupportedGroqClient(t)?groqProxy(t):(console.warn("Unsupported Groq library. Not wrapping."),t)}function isRecord6(t){return"object"==typeof t&&null!==t}function hasFunction5(t,e){return isRecord6(t)&&e in t&&"function"==typeof t[e]}function hasChat2(t){return isRecord6(t)&&isRecord6(t.completions)&&hasFunction5(t.completions,"create")}function hasEmbeddings2(t){return hasFunction5(t,"create")}function isSupportedGroqClient(t){return isRecord6(t)&&(void 0!==t.chat&&hasChat2(t.chat)||void 0!==t.embeddings&&hasEmbeddings2(t.embeddings))}function groqProxy(t){const e=new WeakMap,n=t.chat?.completions?new Proxy(t.chat.completions,{get:(t,e,n)=>"create"===e?wrapChatCompletionsCreate(t.create.bind(t)):Reflect.get(t,e,n)}):void 0,r=t.chat?new Proxy(t.chat,{get:(t,e,r)=>"completions"===e?n??t.completions:Reflect.get(t,e,r)}):void 0,o=t.embeddings?new Proxy(t.embeddings,{get:(t,e,n)=>"create"===e?wrapEmbeddingsCreate2(t.create.bind(t)):Reflect.get(t,e,n)}):void 0,a=new Proxy(t,{get(t,n,i){switch(n){case"chat":return r??t.chat;case"embeddings":return o??t.embeddings}const s=Reflect.get(t,n,t);if("function"!=typeof s)return s;const c=e.get(s);if(c)return c;const u=function(...e){const n=this===a?t:this,r=Reflect.apply(s,n,e);return r===t?a:r};return e.set(s,u),u}});return a}function wrapChatCompletionsCreate(t){return(e,n)=>groqChannels.chatCompletionsCreate.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapEmbeddingsCreate2(t){return(e,n)=>groqChannels.embeddingsCreate.tracePromise(()=>t(e,n),{arguments:[e]})}function wrapBedrockRuntime(t){return isSupportedBedrockRuntimeClient(t)?bedrockRuntimeProxy(t):(console.warn("Unsupported Bedrock Runtime library. Not wrapping."),t)}var bedrockRuntimeProxyCache=new WeakMap,BEDROCK_RUNTIME_OPERATION_METHODS=new Set(["converse","converseStream","invokeModel","invokeModelWithBidirectionalStream","invokeModelWithResponseStream"]);function isRecord7(t){return"object"==typeof t&&null!==t}function isSupportedBedrockRuntimeClient(t){return isRecord7(t)&&"function"==typeof t.send}function bedrockRuntimeProxy(t){const e=bedrockRuntimeProxyCache.get(t);if(e)return e;const n=new WeakMap,r=new WeakMap,o=new Proxy(t,{get(t,e,a){if("send"===e)return wrapSend(t.send.bind(t));const i=Reflect.get(t,e,a);if("function"!=typeof i)return i;if("string"==typeof e&&BEDROCK_RUNTIME_OPERATION_METHODS.has(e)){const e=r.get(i);if(e)return e;const n=function(...e){const n=this===o?o:this,r=Reflect.apply(i,n,e);return r===t?o:r};return r.set(i,n),n}const s=n.get(i);if(s)return s;const c=function(...e){const n=this===o?t:this,r=Reflect.apply(i,n,e);return r===t?o:r};return n.set(i,c),c}});return bedrockRuntimeProxyCache.set(t,o),o}function wrapSend(t){return(e,n,r)=>void 0===getBedrockRuntimeOperation(e)||"function"==typeof n||"function"==typeof r?t(e,n,r):bedrockRuntimeChannels.clientSend.tracePromise(()=>runWithAutoInstrumentationSuppressed(()=>t(e,n)),{arguments:[e,n],span_info:buildBedrockRuntimeSpanInfo(e)})}function isGitHubCopilotClient(t){return null!==t&&"object"==typeof t&&"function"==typeof t.createSession&&"function"==typeof t.resumeSession}function wrapCopilotClient(t){return isGitHubCopilotClient(t)?copilotClientProxy(t):(console.warn("[Braintrust] wrapCopilotClient: argument does not look like a CopilotClient. Not wrapping."),t)}function copilotClientProxy(t){const e=new WeakMap,n=new Proxy(t,{get(t,r,o){if("createSession"===r)return wrappedCreateSession(t);if("resumeSession"===r)return wrappedResumeSession(t);const a=Reflect.get(t,r,t);if("function"!=typeof a)return a;const i=e.get(a);if(i)return i;const s=function(...e){const r=this===n?t:this,o=Reflect.apply(a,r,e);return o===t?n:o};return e.set(a,s),s}});return n}function wrappedCreateSession(t){return e=>gitHubCopilotChannels.createSession.tracePromise(()=>t.createSession(e),{arguments:[e]})}function wrappedResumeSession(t){return(e,n)=>gitHubCopilotChannels.resumeSession.tracePromise(()=>t.resumeSession(e,n),{arguments:[e,n]})}var WRAPPED_CLIENT_CLASS=Symbol.for("braintrust.langsmith.wrapped-client-class"),WRAPPED_CLIENT_INSTANCE=Symbol.for("braintrust.langsmith.wrapped-client-instance"),WRAPPED_CLIENT_NAMESPACE=Symbol.for("braintrust.langsmith.wrapped-client-namespace"),WRAPPED_RUN_TREE_CLASS=Symbol.for("braintrust.langsmith.wrapped-run-tree-class"),WRAPPED_RUN_TREE_INSTANCE=Symbol.for("braintrust.langsmith.wrapped-run-tree-instance"),WRAPPED_RUN_TREES_NAMESPACE=Symbol.for("braintrust.langsmith.wrapped-run-trees-namespace"),WRAPPED_TRACEABLE=Symbol.for("braintrust.langsmith.wrapped-traceable"),WRAPPED_TRACEABLE_NAMESPACE=Symbol.for("braintrust.langsmith.wrapped-traceable-namespace");function wrapLangSmithTraceable(t){return wrapNamespaceExport(t,"traceable",WRAPPED_TRACEABLE_NAMESPACE,t=>wrapTraceable(t))}function wrapLangSmithRunTrees(t){return wrapNamespaceExport(t,"RunTree",WRAPPED_RUN_TREES_NAMESPACE,t=>wrapRunTreeClass(t))}function wrapLangSmithClient(t){return wrapNamespaceExport(t,"Client",WRAPPED_CLIENT_NAMESPACE,t=>wrapClientClass(t))}function wrapNamespaceExport(t,e,n,r){if(!t||"object"!=typeof t)return t;const o=t;if(!0===o[n])return t;if("function"!=typeof o[e])return console.warn(`Unsupported LangSmith ${e} namespace. Not wrapping.`),t;const a=isModuleNamespace5(t)?Object.setPrototypeOf({},t):o,i=a!==o;let s;return new Proxy(a,{get(t,o,a){if(o===n)return!0;const i=Reflect.get(t,o,a);return o!==e||"function"!=typeof i?i:(s??=r(i),s)},getOwnPropertyDescriptor(t,e){const n=Reflect.getOwnPropertyDescriptor(t,e);if(n||!i)return n;const r=Reflect.getOwnPropertyDescriptor(o,e);return r?{...r,configurable:!0}:void 0},has:(t,e)=>Reflect.has(t,e)||i&&e in o,ownKeys:t=>i?Reflect.ownKeys(o):Reflect.ownKeys(t)})}function isModuleNamespace5(t){if(!t||"object"!=typeof t)return!1;if("Module"===t.constructor?.name)return!0;const e=Object.keys(t)[0];if(!e)return!1;const n=Object.getOwnPropertyDescriptor(t,e);return!!n&&(!n.configurable&&!n.writable)}function wrapTraceable(t){return t[WRAPPED_TRACEABLE]?t:new Proxy(t,{get:(t,e,n)=>e===WRAPPED_TRACEABLE||Reflect.get(t,e,n),apply(t,e,n){const[r,o]=n,a=o&&"object"==typeof o?o:void 0,i=a?.on_end,s={...a,on_end(t){publishRunUpdate(t),i&&Reflect.apply(i,a,[t])}};return Reflect.apply(t,e,[r,s])}})}function wrapRunTreeClass(t){return t[WRAPPED_RUN_TREE_CLASS]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_RUN_TREE_CLASS)return!0;const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r},construct:(t,e,n)=>wrapRunTreeInstance(Reflect.construct(t,e,n))})}function wrapRunTreeInstance(t){return t[WRAPPED_RUN_TREE_INSTANCE]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_RUN_TREE_INSTANCE)return!0;const r=Reflect.get(t,e,n);if("function"!=typeof r)return r;let o;if("createChild"===e)o=(...e)=>wrapRunTreeInstance(Reflect.apply(r,t,e));else if("postRun"===e){const e=r;o=(...n)=>langSmithChannels.createRun.tracePromise(()=>Reflect.apply(e,t,n),{arguments:[t]})}else if("patchRun"===e){const e=r;o=(...n)=>langSmithChannels.updateRun.tracePromise(()=>Reflect.apply(e,t,n),{arguments:["string"==typeof t.id?t.id:"",t]})}else o=r.bind(t);return o}})}function wrapClientClass(t){return t[WRAPPED_CLIENT_CLASS]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_CLIENT_CLASS)return!0;const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r},construct:(t,e,n)=>wrapClientInstance(Reflect.construct(t,e,n))})}function wrapClientInstance(t){return t[WRAPPED_CLIENT_INSTANCE]?t:new Proxy(t,{get(t,e,n){if(e===WRAPPED_CLIENT_INSTANCE)return!0;const r=Reflect.get(t,e,n);if("function"!=typeof r)return r;let o;if("createRun"===e){const e=r;o=(...n)=>langSmithChannels.createRun.tracePromise(()=>Reflect.apply(e,t,n),{arguments:n})}else if("updateRun"===e){const e=r;o=(...n)=>langSmithChannels.updateRun.tracePromise(()=>Reflect.apply(e,t,n),{arguments:n})}else if("batchIngestRuns"===e){const e=r;o=(...n)=>langSmithChannels.batchIngestRuns.tracePromise(()=>Reflect.apply(e,t,n),{arguments:n})}else o=r.bind(t);return o}})}function publishRunUpdate(t){if(t&&"string"==typeof t.id&&t.id)try{langSmithChannels.updateRun.tracePromise(()=>Promise.resolve(void 0),{arguments:[t.id,t]}).catch(t=>{debugLogger.error("LangSmith traceable instrumentation failed:",t)})}catch(t){debugLogger.error("LangSmith traceable instrumentation failed:",t)}}var _contextManager,VitestContextManager=class{contextStorage;constructor(){this.contextStorage=isomorph_default.newAsyncLocalStorage()}getCurrentContext(){return this.contextStorage.getStore()}setContext(t){this.contextStorage.enterWith(t)}runInContext(t,e){return this.contextStorage.run(t,e)}createChildContext(t,e){const n=this.getCurrentContext();return{dataset:t,experiment:e,datasetExamples:new Map,parent:n,flushResolved:!0,passed:0,failed:0}}};function getVitestContextManager(){return _contextManager||(_contextManager=new VitestContextManager),_contextManager}function formatExperimentSummary(t){const e=[];if(e.push("\n┌─ Braintrust Experiment Summary ─────────────────┐"),e.push(`│ Experiment: ${t.experimentName}`),Object.keys(t.scores).length>0){e.push("│"),e.push("│ Scores:");for(const[n,r]of Object.entries(t.scores)){const t=(100*r.score).toFixed(2);e.push(`│   ${n}: ${t}%`)}}if(t.metrics&&Object.keys(t.metrics).length>0){e.push("│"),e.push("│ Metrics:");for(const[n,r]of Object.entries(t.metrics)){const t=Number.isInteger(r.metric)?r.metric.toFixed(0):r.metric.toFixed(2),o="$"===r.unit?`${r.unit}${t}`:`${t}${r.unit}`;e.push(`│   ${n}: ${o}`)}}return t.experimentUrl&&(e.push("│"),e.push(`│ View results: ${t.experimentUrl}`)),e.push("└──────────────────────────────────────────────────┘\n"),e.join("\n")}async function summarizeAndFlush(t,e){if(!(e.displaySummary??!0))return void await t.flush();const n=await t.summarize();console.log(formatExperimentSummary(n))}var FlushCoordinator=class{activeFlushes=new Map;async coordinateFlush(t,e){if(!t)return;const n=await t.experiment.id;if(this.activeFlushes.has(n))return this.activeFlushes.get(n);const r=summarizeAndFlush(t.experiment,{displaySummary:e.displaySummary});this.activeFlushes.set(n,r);try{await r}finally{this.activeFlushes.delete(n)}}},flushCoordinator=new FlushCoordinator;async function flushExperimentWithSync(t,e){return flushCoordinator.coordinateFlush(t,e)}async function runScorers(t){const{scorers:e,output:n,expected:r,input:o,metadata:a,span:i}=t,s={output:n,expected:r,input:o,metadata:a||{}};await Promise.all(e.map(async t=>{try{const e=normalizeScores(await t(s));if(e.length>0){const t={};let n={};for(const r of e)t[r.name]=r.score,r.metadata&&Object.keys(r.metadata).length>0&&(n={...n,...r.metadata});i.log({scores:t,...Object.keys(n).length>0?{metadata:n}:{}})}}catch(t){console.warn("Braintrust: Scorer failed:",t);const e=t instanceof Error?`${t.message}\n\n${t.stack||""}`:String(t);i.log({metadata:{scorer_error:e}})}}))}function isScore(t){return"name"in t&&"score"in t}function normalizeScores(t){return null==t?[]:"number"==typeof t?[{name:"score",score:t}]:Array.isArray(t)?t.filter(t=>null!=t&&"object"==typeof t&&isScore(t)):"object"==typeof t&&null!==t&&isScore(t)?[t]:[]}async function runTracedEval(t){return t.experiment.traced(async e=>{let n,r;try{n=await t.fn()}catch(t){r=t}if(t.scorers&&t.scorers.length>0&&await runScorers({scorers:t.scorers,output:n,expected:t.expected,input:t.input,metadata:t.metadata,span:e}),r)throw e.log({scores:{pass:0}}),logError(e,r),r;return e.log({scores:{pass:1},...void 0!==n?{output:n}:{}}),n},{name:t.spanName,spanAttributes:{type:"task"},event:{input:t.input,expected:t.expected,metadata:t.metadata,tags:t.tags}})}function getExperimentContext(){return getVitestContextManager().getCurrentContext()??null}function wrapTest(t,e){const n=t=>function(n,o,a){const i="function"!=typeof o,s=i?o:void 0;if(i&&s?.data&&Array.isArray(s.data)){const t=s.data,e=a;if(!e)throw new Error("Braintrust: test function required when using data array");return void t.forEach((t,o)=>{const a={...s,input:t.input,expected:t.expected,metadata:{...s.metadata,...t.metadata},tags:[...s.tags||[],...t.tags||[]],data:void 0};r(`${n} [${o}]`,a,e)})}let c;if(s){const{input:t,expected:e,metadata:n,tags:r,scorers:o,data:a,...i}=s;c=i}const u=c&&Object.keys(c).length>0,p=getExperimentContext();return t(n,u?c:void 0,async t=>{const r=getExperimentContext()??p,i=r?.experiment;e.onProgress&&e.onProgress({type:"test_start",testName:n});const c=performance.now();let u=!1;try{if(!i){if(s&&a){const e={input:s.input,expected:s.expected,metadata:s.metadata},n={...t,...e},r=await a(n);return u=!0,r}if("function"==typeof o){const e=await o(t);return u=!0,e}return void(u=!0)}const e=await runTracedEval({experiment:i,spanName:n,input:s?.input,expected:s?.expected,metadata:s?.metadata,tags:s?.tags,scorers:s?.scorers,fn:async()=>{if(s&&a){const e={input:s.input,expected:s.expected,metadata:s.metadata},n={...t,...e};return await a(n)}if("function"==typeof o)return await o(t)}});return u=!0,e}catch(t){throw u=!1,t}finally{const t=performance.now()-c;r&&(u?r.passed=(r.passed??0)+1:r.failed=(r.failed??0)+1),e.onProgress&&e.onProgress({type:"test_complete",testName:n,passed:u,duration:t})}})},r=n(t);return r.skip=n(t.skip),r.only=n(t.only),r.concurrent=n(t.concurrent),t.todo&&(r.todo=t.todo),t.each&&(r.each=t.each),r}function wrapDescribe(t,e,n){const r=t=>function(r,o){return t(r,()=>{const t=getVitestContextManager();let a=null;const i=()=>{if(!a){const n=`${r}-${(new Date).toISOString()}`,o=e.projectId?initExperiment({projectId:e.projectId,experiment:n}):initExperiment(e.projectName||r,{experiment:n});a=t.createChildContext(void 0,o)}return a},s={get dataset(){return i().dataset},get experiment(){return i().experiment},get datasetExamples(){return i().datasetExamples},get parent(){return i().parent},get flushPromise(){return i().flushPromise},set flushPromise(t){a&&(a.flushPromise=t)},get flushResolved(){return i().flushResolved},set flushResolved(t){a&&(a.flushResolved=t)}};e.onProgress&&e.onProgress({type:"suite_start",suiteName:r}),t.setContext(s),o(),n&&n(async()=>{await flushExperimentWithSync(a,e),e.onProgress&&e.onProgress({type:"suite_complete",suiteName:r,passed:a?.passed??0,failed:a?.failed??0})})})},o=r(t);return o.skip=r(t.skip),o.only=r(t.only),o.concurrent=r(t.concurrent),t.todo&&(o.todo=t.todo),t.each&&(o.each=t.each),o}function proxyAssertion(t,e,n,r){return new Proxy(t,{get(t,o,a){const i=Reflect.get(t,o,a);return"function"==typeof i?function(...o){let a;try{a=i.apply(t,o)}catch(t){throw r.log({output:{[n]:e},scores:{[n]:0}}),t}return null!==a&&"object"==typeof a&&"then"in a&&"function"==typeof Reflect.get(a,"then")?Promise.resolve(a).then(t=>(r.log({output:{[n]:e},scores:{[n]:1}}),t),t=>{throw r.log({output:{[n]:e},scores:{[n]:0}}),t}):(r.log({output:{[n]:e},scores:{[n]:1}}),a)}:null!==i&&"object"==typeof i?proxyAssertion(i,e,n,r):i}})}function wrapExpect(t){return Object.assign(function(e,n){if(void 0===n)return t(e);const r=t(e,n),o=currentSpan();return o?null===r||"object"!=typeof r?r:proxyAssertion(r,e,n,o):r},t)}function logOutputs(t){currentSpan().log({output:t})}function logFeedback(t){currentSpan().log({scores:{[t.name]:t.score},metadata:t.metadata})}function getCurrentSpan(){return currentSpan()}function wrapVitest(t,e={}){if(!t.test)throw new Error("Braintrust: vitestMethods.test is required. Please pass in the test function from vitest.");if(!t.describe)throw new Error("Braintrust: vitestMethods.describe is required. Please pass in the describe function from vitest.");if(!t.expect)throw new Error("Braintrust: vitestMethods.expect is required. Please pass in the expect function from vitest.");const n=wrapTest(t.test,e),r=wrapDescribe(t.describe,e,t.afterAll);return{test:n,it:n,expect:wrapExpect(t.expect),describe:r,beforeAll:t.beforeAll||(()=>{}),afterAll:t.afterAll||(()=>{}),beforeEach:t.beforeEach,afterEach:t.afterEach,logOutputs:logOutputs,logFeedback:logFeedback,getCurrentSpan:getCurrentSpan,flushExperiment:async t=>{const n=getExperimentContext();n?await summarizeAndFlush(n.experiment,{displaySummary:t?.displaySummary??e.displaySummary}):console.warn("Braintrust: No experiment context found. Make sure you're using bt.describe() and calling flushExperiment() within an afterAll() hook.")}}}function initNodeTestSuite(t){let e;const n={eval:function(n,r){return async o=>{const a=(()=>{if(e)return e;const n=t.experimentName||`${t.projectName}-${(new Date).toISOString()}`;return e=initExperiment(t.projectName,{experiment:n}),e})(),i=n.name??o.name??"unnamed test";t.onProgress&&t.onProgress({type:"test_start",testName:i});const s=performance.now();let c=!1;try{await runTracedEval({experiment:a,spanName:i,input:n.input,expected:n.expected,metadata:n.metadata,tags:n.tags,scorers:n.scorers,fn:()=>r({input:n.input,expected:n.expected,metadata:n.metadata})}),c=!0}catch(t){throw c=!1,t}finally{t.onProgress&&t.onProgress({type:"test_complete",testName:i,passed:c,duration:performance.now()-s})}}},flush:async function(){e&&(await summarizeAndFlush(e,{displaySummary:t.displaySummary}),e=void 0)}};return t.after&&t.after(()=>n.flush()),n}var graph_framework_exports={};__export(graph_framework_exports,{AggregatorNode:()=>AggregatorNode,GateNode:()=>GateNode,GraphBuilder:()=>GraphBuilder,InputNode:()=>InputNode,LiteralNode:()=>LiteralNode,OutputNode:()=>OutputNode,PromptNode:()=>PromptNode,PromptTemplateNode:()=>PromptTemplateNode,createGraph:()=>createGraph,default:()=>graph_framework_default,escapePath:()=>escapePath,unescapePath:()=>unescapePath});var GraphBuilder=class{nodes=new Map;edges={};nodeLikeNodes=new Map;IN;OUT;constructor(){this.IN=this.createInputNode(),this.OUT=this.createOutputNode()}async build(t){const e=await Promise.all(Array.from(this.nodes.values()).map(async e=>[e.id,await e.build(t)]));return{type:"graph",nodes:Object.fromEntries(e),edges:this.edges}}addEdge({source:t,sourceVar:e,target:n,targetVar:r,expr:o,purpose:a}){const[i,s]=this.resolveNode(t);if(s.length>0)throw new Error("Source path must be empty");const[c,u]=this.resolveNode(n);if(u.length>0)throw new Error("Target path must be empty");const p=this.generateId();e=e??"output",r=r??("data"===a?"input":this.generateId("control"));for(const t of Object.values(this.edges))if(t.target.node===c.id&&t.target.variable===r)throw new Error(`Variable name ${r} already set on ${c.id}`);this.edges[p]={source:{node:i.id,variable:e},target:{node:c.id,variable:r},purpose:a}}resolveNode(t){if(t instanceof Prompt2){const e=this.nodeLikeNodes.get(t);if(e)return[e,[]];const n=this.createPromptNode(t);return this.nodeLikeNodes.set(t,n),[n,[]]}return isProxyVariable(t)?proxyVariableToNode(t):[t,[]]}literal(t){const e=("string"==typeof t?t:JSON.stringify(t)).slice(0,16),n=this.generateId(`literal-${e}`),r=new LiteralNode(this,n,t);return this.nodes.set(n,r),r}gate(t){const e=this.generateId("gate"),n=new GateNode(this,e,t.condition);return this.nodes.set(e,n),n}aggregator(){const t=this.generateId("aggregator"),e=new AggregatorNode(this,t);return this.nodes.set(t,e),e}promptTemplate(t){const e=this.generateId("prompt-template"),n=new PromptTemplateNode(this,e,t.prompt);return this.nodes.set(e,n),n}generateId(t){const e=newId();return t?`${t}-${e.slice(0,8)}`:e}createInputNode(){const t=this.generateId("input"),e=new InputNode(this,t);return this.nodes.set(t,e),e}createOutputNode(){const t=this.generateId("output"),e=new OutputNode(this,t);return this.nodes.set(t,e),e}createPromptNode(t){const e=this.generateId(`prompt-${t.slug}`),n=new PromptNode(this,e,t);return this.nodes.set(e,n),n}};function isProxyVariable(t){return"object"==typeof t&&null!==t&&"__type"in t&&"proxy-variable"===t.__type}function proxyVariableToNode(t){return[t.__node,t.__path]}var BaseNode=class{constructor(t,e){this.graph=t,this.id=e}__type="node";dependencies=[];addDependency(t){this.dependencies.push(t)}},InputNode=class extends BaseNode{constructor(t,e){super(t,e)}async build(t){return{type:"input",description:"Input to the graph"}}},OutputNode=class extends BaseNode{constructor(t,e){super(t,e)}async build(t){return{type:"output",description:"Output of the graph"}}},PromptNode=class extends BaseNode{constructor(t,e,n){super(t,e),this.prompt=n}async build(t){return{type:"function",function:await t.getFunctionId(this.prompt)}}},GateNode=class extends BaseNode{constructor(t,e,n){super(t,e),this.condition=n}async build(t){return{type:"gate",description:"Conditional gate",condition:this.condition}}},AggregatorNode=class extends BaseNode{constructor(t,e){super(t,e)}async build(t){return{type:"aggregator",description:"Aggregator"}}},PromptTemplateNode=class extends BaseNode{constructor(t,e,n){super(t,e),this.prompt=n}async build(t){return{type:"prompt_template",prompt:this.prompt}}},LiteralNode=class extends BaseNode{constructor(t,e,n){super(t,e),this.value=n}async build(t){return{type:"literal",value:this.value}}};function createGraph(){return new GraphBuilder}function escapePath(t){if(0!==t.length)return t.map(t=>{if(/[^\w-]/.test(t)){return`"${t.replace(/["\\]/g,"\\$&")}"`}return t}).join(".")}function unescapePath(t){const e=t.match(/"((?:\\["\\]|[^"\\])*)"|([^\.]+)/g);return e?e.map(t=>t.startsWith('"')?t.slice(1,-1).replace(/\\(["\\])/g,"$1"):t):[]}var graph_framework_default={createGraph:createGraph};function initialParams(t){return function(...e){var n=e.pop();return t.call(this,e,n)}}var _defer$1,hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,hasSetImmediate="function"==typeof setImmediate&&setImmediate,hasNextTick="object"==typeof process&&"function"==typeof process.nextTick;function fallback(t){setTimeout(t,0)}function wrap(t){return(e,...n)=>t(()=>e(...n))}var setImmediate$1=wrap(_defer$1=hasQueueMicrotask?queueMicrotask:hasSetImmediate?setImmediate:hasNextTick?process.nextTick:fallback);function asyncify(t){return isAsync(t)?function(...e){const n=e.pop();return handlePromise(t.apply(this,e),n)}:initialParams(function(e,n){var r;try{r=t.apply(this,e)}catch(t){return n(t)}if(r&&"function"==typeof r.then)return handlePromise(r,n);n(null,r)})}function handlePromise(t,e){return t.then(t=>{invokeCallback(e,null,t)},t=>{invokeCallback(e,t&&(t instanceof Error||t.message)?t:new Error(t))})}function invokeCallback(t,e,n){try{t(e,n)}catch(t){setImmediate$1(t=>{throw t},t)}}function isAsync(t){return"AsyncFunction"===t[Symbol.toStringTag]}function isAsyncGenerator2(t){return"AsyncGenerator"===t[Symbol.toStringTag]}function isAsyncIterable6(t){return"function"==typeof t[Symbol.asyncIterator]}function wrapAsync(t){if("function"!=typeof t)throw new Error("expected a function");return isAsync(t)?asyncify(t):t}function awaitify(t,e){if(e||(e=t.length),!e)throw new Error("arity is undefined");return function(...n){return"function"==typeof n[e-1]?t.apply(this,n):new Promise((r,o)=>{n[e-1]=(t,...e)=>{if(t)return o(t);r(e.length>1?e:e[0])},t.apply(this,n)})}}function applyEach$1(t){return function(e,...n){return awaitify(function(r){var o=this;return t(e,(t,e)=>{wrapAsync(t).apply(o,n.concat(e))},r)})}}function _asyncMap(t,e,n,r){e=e||[];var o=[],a=0,i=wrapAsync(n);return t(e,(t,e,n)=>{var r=a++;i(t,(t,e)=>{o[r]=e,n(t)})},t=>{r(t,o)})}function isArrayLike6(t){return t&&"number"==typeof t.length&&t.length>=0&&t.length%1==0}var breakLoop={},breakLoop$1=breakLoop;function once(t){function e(...e){if(null!==t){var n=t;t=null,n.apply(this,e)}}return Object.assign(e,t),e}function getIterator(t){return t[Symbol.iterator]&&t[Symbol.iterator]()}function createArrayIterator(t){var e=-1,n=t.length;return function(){return++e<n?{value:t[e],key:e}:null}}function createES2015Iterator(t){var e=-1;return function(){var n=t.next();return n.done?null:(e++,{value:n.value,key:e})}}function createObjectIterator(t){var e=t?Object.keys(t):[],n=-1,r=e.length;return function o(){var a=e[++n];return"__proto__"===a?o():n<r?{value:t[a],key:a}:null}}function createIterator(t){if(isArrayLike6(t))return createArrayIterator(t);var e=getIterator(t);return e?createES2015Iterator(e):createObjectIterator(t)}function onlyOnce(t){return function(...e){if(null===t)throw new Error("Callback was already called.");var n=t;t=null,n.apply(this,e)}}function asyncEachOfLimit(t,e,n,r){let o=!1,a=!1,i=!1,s=0,c=0;function u(){s>=e||i||o||(i=!0,t.next().then(({value:t,done:e})=>{if(!a&&!o){if(i=!1,e)return o=!0,void(s<=0&&r(null));s++,n(t,c,p),c++,u()}}).catch(l))}function p(t,e){if(s-=1,!a)return t?l(t):!1===t?(o=!0,void(a=!0)):e===breakLoop$1||o&&s<=0?(o=!0,r(null)):void u()}function l(t){a||(i=!1,o=!0,r(t))}u()}var eachOfLimit$2=t=>(e,n,r)=>{if(r=once(r),t<=0)throw new RangeError("concurrency limit cannot be less than 1");if(!e)return r(null);if(isAsyncGenerator2(e))return asyncEachOfLimit(e,t,n,r);if(isAsyncIterable6(e))return asyncEachOfLimit(e[Symbol.asyncIterator](),t,n,r);var o=createIterator(e),a=!1,i=!1,s=0,c=!1;function u(t,e){if(!i)if(s-=1,t)a=!0,r(t);else if(!1===t)a=!0,i=!0;else{if(e===breakLoop$1||a&&s<=0)return a=!0,r(null);c||p()}}function p(){for(c=!0;s<t&&!a;){var e=o();if(null===e)return a=!0,void(s<=0&&r(null));s+=1,n(e.value,e.key,onlyOnce(u))}c=!1}p()};function eachOfLimit(t,e,n,r){return eachOfLimit$2(e)(t,wrapAsync(n),r)}var eachOfLimit$1=awaitify(eachOfLimit,4);function eachOfArrayLike(t,e,n){n=once(n);var r=0,o=0,{length:a}=t,i=!1;function s(t,e){!1===t&&(i=!0),!0!==i&&(t?n(t):++o!==a&&e!==breakLoop$1||n(null))}for(0===a&&n(null);r<a;r++)e(t[r],r,onlyOnce(s))}function eachOfGeneric(t,e,n){return eachOfLimit$1(t,1/0,e,n)}function eachOf(t,e,n){return(isArrayLike6(t)?eachOfArrayLike:eachOfGeneric)(t,wrapAsync(e),n)}var eachOf$1=awaitify(eachOf,3);function map(t,e,n){return _asyncMap(eachOf$1,t,e,n)}var map$1=awaitify(map,3),applyEach=applyEach$1(map$1);function eachOfSeries(t,e,n){return eachOfLimit$1(t,1,e,n)}var eachOfSeries$1=awaitify(eachOfSeries,3);function mapSeries(t,e,n){return _asyncMap(eachOfSeries$1,t,e,n)}var mapSeries$1=awaitify(mapSeries,3),applyEachSeries=applyEach$1(mapSeries$1),DLL=class{constructor(){this.head=this.tail=null,this.length=0}removeLink(t){return t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev,t.prev=t.next=null,this.length-=1,t}empty(){for(;this.head;)this.shift();return this}insertAfter(t,e){e.prev=t,e.next=t.next,t.next?t.next.prev=e:this.tail=e,t.next=e,this.length+=1}insertBefore(t,e){e.prev=t.prev,e.next=t,t.prev?t.prev.next=e:this.head=e,t.prev=e,this.length+=1}unshift(t){this.head?this.insertBefore(this.head,t):setInitial(this,t)}push(t){this.tail?this.insertAfter(this.tail,t):setInitial(this,t)}shift(){return this.head&&this.removeLink(this.head)}pop(){return this.tail&&this.removeLink(this.tail)}toArray(){return[...this]}*[Symbol.iterator](){for(var t=this.head;t;)yield t.data,t=t.next}remove(t){for(var e=this.head;e;){var{next:n}=e;t(e)&&this.removeLink(e),e=n}return this}};function setInitial(t,e){t.length=1,t.head=t.tail=e}function queue$1(t,e,n){if(null==e)e=1;else if(0===e)throw new RangeError("Concurrency must not be zero");var r=wrapAsync(t),o=0,a=[];const i={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};function s(t,e){return t?e?void(i[t]=i[t].filter(t=>t!==e)):i[t]=[]:Object.keys(i).forEach(t=>i[t]=[])}function c(t,...e){i[t].forEach(t=>t(...e))}var u=!1;function p(t,e,n,r){if(null!=r&&"function"!=typeof r)throw new Error("task callback must be a function");var o,a;function i(t,...e){return t?n?a(t):o():e.length<=1?o(e[0]):void o(e)}f.started=!0;var s=f._createTaskItem(t,n?i:r||i);if(e?f._tasks.unshift(s):f._tasks.push(s),u||(u=!0,setImmediate$1(()=>{u=!1,f.process()})),n||!r)return new Promise((t,e)=>{o=t,a=e})}function l(t){return function(e,...n){o-=1;for(var r=0,i=t.length;r<i;r++){var s=t[r],u=a.indexOf(s);0===u?a.shift():u>0&&a.splice(u,1),s.callback(e,...n),null!=e&&c("error",e,s.data)}o<=f.concurrency-f.buffer&&c("unsaturated"),f.idle()&&c("drain"),f.process()}}function d(t){return!(0!==t.length||!f.idle())&&(setImmediate$1(()=>c("drain")),!0)}const m=t=>e=>{if(!e)return new Promise((e,n)=>{!function(t,e){const n=(...r)=>{s(t,n),e(...r)};i[t].push(n)}(t,(t,r)=>{if(t)return n(t);e(r)})});s(t),function(t,e){i[t].push(e)}(t,e)};var g=!1,f={_tasks:new DLL,_createTaskItem:(t,e)=>({data:t,callback:e}),*[Symbol.iterator](){yield*f._tasks[Symbol.iterator]()},concurrency:e,payload:n,buffer:e/4,started:!1,paused:!1,push(t,e){if(Array.isArray(t)){if(d(t))return;return t.map(t=>p(t,!1,!1,e))}return p(t,!1,!1,e)},pushAsync(t,e){if(Array.isArray(t)){if(d(t))return;return t.map(t=>p(t,!1,!0,e))}return p(t,!1,!0,e)},kill(){s(),f._tasks.empty()},unshift(t,e){if(Array.isArray(t)){if(d(t))return;return t.map(t=>p(t,!0,!1,e))}return p(t,!0,!1,e)},unshiftAsync(t,e){if(Array.isArray(t)){if(d(t))return;return t.map(t=>p(t,!0,!0,e))}return p(t,!0,!0,e)},remove(t){f._tasks.remove(t)},process(){if(!g){for(g=!0;!f.paused&&o<f.concurrency&&f._tasks.length;){var t=[],e=[],n=f._tasks.length;f.payload&&(n=Math.min(n,f.payload));for(var i=0;i<n;i++){var s=f._tasks.shift();t.push(s),a.push(s),e.push(s.data)}o+=1,0===f._tasks.length&&c("empty"),o===f.concurrency&&c("saturated");var u=onlyOnce(l(t));r(e,u)}g=!1}},length:()=>f._tasks.length,running:()=>o,workersList:()=>a,idle:()=>f._tasks.length+o===0,pause(){f.paused=!0},resume(){!1!==f.paused&&(f.paused=!1,setImmediate$1(f.process))}};return Object.defineProperties(f,{saturated:{writable:!1,value:m("saturated")},unsaturated:{writable:!1,value:m("unsaturated")},empty:{writable:!1,value:m("empty")},drain:{writable:!1,value:m("drain")},error:{writable:!1,value:m("error")}}),f}function reduce(t,e,n,r){r=once(r);var o=wrapAsync(n);return eachOfSeries$1(t,(t,n,r)=>{o(e,t,(t,n)=>{e=n,r(t)})},t=>r(t,e))}var reduce$1=awaitify(reduce,4);function mapLimit(t,e,n,r){return _asyncMap(eachOfLimit$2(e),t,n,r)}var mapLimit$1=awaitify(mapLimit,4);function concatLimit(t,e,n,r){var o=wrapAsync(n);return mapLimit$1(t,e,(t,e)=>{o(t,(t,...n)=>t?e(t):e(t,n))},(t,e)=>{for(var n=[],o=0;o<e.length;o++)e[o]&&(n=n.concat(...e[o]));return r(t,n)})}var concatLimit$1=awaitify(concatLimit,4);function concat(t,e,n){return concatLimit$1(t,1/0,e,n)}var concat$1=awaitify(concat,3);function concatSeries(t,e,n){return concatLimit$1(t,1,e,n)}var concatSeries$1=awaitify(concatSeries,3);function _createTester(t,e){return(n,r,o,a)=>{var i,s=!1;const c=wrapAsync(o);n(r,(n,r,o)=>{c(n,(r,a)=>r||!1===r?o(r):t(a)&&!i?(s=!0,i=e(!0,n),o(null,breakLoop$1)):void o())},t=>{if(t)return a(t);a(null,s?i:e(!1))})}}function detect(t,e,n){return _createTester(t=>t,(t,e)=>e)(eachOf$1,t,e,n)}var detect$1=awaitify(detect,3);function detectLimit(t,e,n,r){return _createTester(t=>t,(t,e)=>e)(eachOfLimit$2(e),t,n,r)}var detectLimit$1=awaitify(detectLimit,4);function detectSeries(t,e,n){return _createTester(t=>t,(t,e)=>e)(eachOfLimit$2(1),t,e,n)}var detectSeries$1=awaitify(detectSeries,3);function consoleFunc(t){return(e,...n)=>wrapAsync(e)(...n,(e,...n)=>{"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&n.forEach(e=>console[t](e)))})}var dir=consoleFunc("dir");function doWhilst(t,e,n){n=onlyOnce(n);var r,o=wrapAsync(t),a=wrapAsync(e);function i(t,...e){if(t)return n(t);!1!==t&&(r=e,a(...e,s))}function s(t,e){return t?n(t):!1!==t?e?void o(i):n(null,...r):void 0}return s(null,!0)}var doWhilst$1=awaitify(doWhilst,3);function _withoutIndex(t){return(e,n,r)=>t(e,r)}function eachLimit$2(t,e,n){return eachOf$1(t,_withoutIndex(wrapAsync(e)),n)}var each=awaitify(eachLimit$2,3);function eachLimit(t,e,n,r){return eachOfLimit$2(e)(t,_withoutIndex(wrapAsync(n)),r)}var eachLimit$1=awaitify(eachLimit,4);function eachSeries(t,e,n){return eachLimit$1(t,1,e,n)}var eachSeries$1=awaitify(eachSeries,3);function ensureAsync(t){return isAsync(t)?t:function(...e){var n=e.pop(),r=!0;e.push((...t)=>{r?setImmediate$1(()=>n(...t)):n(...t)}),t.apply(this,e),r=!1}}function every(t,e,n){return _createTester(t=>!t,t=>!t)(eachOf$1,t,e,n)}var every$1=awaitify(every,3);function everyLimit(t,e,n,r){return _createTester(t=>!t,t=>!t)(eachOfLimit$2(e),t,n,r)}var everyLimit$1=awaitify(everyLimit,4);function everySeries(t,e,n){return _createTester(t=>!t,t=>!t)(eachOfSeries$1,t,e,n)}var everySeries$1=awaitify(everySeries,3);function filterArray(t,e,n,r){var o=new Array(e.length);t(e,(t,e,r)=>{n(t,(t,n)=>{o[e]=!!n,r(t)})},t=>{if(t)return r(t);for(var n=[],a=0;a<e.length;a++)o[a]&&n.push(e[a]);r(null,n)})}function filterGeneric(t,e,n,r){var o=[];t(e,(t,e,r)=>{n(t,(n,a)=>{if(n)return r(n);a&&o.push({index:e,value:t}),r(n)})},t=>{if(t)return r(t);r(null,o.sort((t,e)=>t.index-e.index).map(t=>t.value))})}function _filter(t,e,n,r){return(isArrayLike6(e)?filterArray:filterGeneric)(t,e,wrapAsync(n),r)}function filter(t,e,n){return _filter(eachOf$1,t,e,n)}var filter$1=awaitify(filter,3);function filterLimit(t,e,n,r){return _filter(eachOfLimit$2(e),t,n,r)}var filterLimit$1=awaitify(filterLimit,4);function filterSeries(t,e,n){return _filter(eachOfSeries$1,t,e,n)}var filterSeries$1=awaitify(filterSeries,3);function forever(t,e){var n=onlyOnce(e),r=wrapAsync(ensureAsync(t));return function t(e){if(e)return n(e);!1!==e&&r(t)}()}var forever$1=awaitify(forever,2);function groupByLimit(t,e,n,r){var o=wrapAsync(n);return mapLimit$1(t,e,(t,e)=>{o(t,(n,r)=>n?e(n):e(n,{key:r,val:t}))},(t,e)=>{for(var n={},{hasOwnProperty:o}=Object.prototype,a=0;a<e.length;a++)if(e[a]){var{key:i}=e[a],{val:s}=e[a];o.call(n,i)?n[i].push(s):n[i]=[s]}return r(t,n)})}var groupByLimit$1=awaitify(groupByLimit,4),log2=consoleFunc("log");function mapValuesLimit(t,e,n,r){r=once(r);var o={},a=wrapAsync(n);return eachOfLimit$2(e)(t,(t,e,n)=>{a(t,e,(t,r)=>{if(t)return n(t);o[e]=r,n(t)})},t=>r(t,o))}var _defer,mapValuesLimit$1=awaitify(mapValuesLimit,4),nextTick=wrap(_defer=hasNextTick?process.nextTick:hasSetImmediate?setImmediate:fallback),_parallel=awaitify((t,e,n)=>{var r=isArrayLike6(e)?[]:{};t(e,(t,e,n)=>{wrapAsync(t)((t,...o)=>{o.length<2&&([o]=o),r[e]=o,n(t)})},t=>n(t,r))},3);function queue(t,e){var n=wrapAsync(t);return queue$1((t,e)=>{n(t[0],e)},e,1)}function race(t,e){if(e=once(e),!Array.isArray(t))return e(new TypeError("First argument to race must be an array of functions"));if(!t.length)return e();for(var n=0,r=t.length;n<r;n++)wrapAsync(t[n])(e)}var race$1=awaitify(race,2);function reject$2(t,e,n,r){const o=wrapAsync(n);return _filter(t,e,(t,e)=>{o(t,(t,n)=>{e(t,!n)})},r)}function reject(t,e,n){return reject$2(eachOf$1,t,e,n)}var reject$1=awaitify(reject,3);function rejectLimit(t,e,n,r){return reject$2(eachOfLimit$2(e),t,n,r)}var rejectLimit$1=awaitify(rejectLimit,4);function rejectSeries(t,e,n){return reject$2(eachOfSeries$1,t,e,n)}var rejectSeries$1=awaitify(rejectSeries,3);function some(t,e,n){return _createTester(Boolean,t=>t)(eachOf$1,t,e,n)}var some$1=awaitify(some,3);function someLimit(t,e,n,r){return _createTester(Boolean,t=>t)(eachOfLimit$2(e),t,n,r)}var someLimit$1=awaitify(someLimit,4);function someSeries(t,e,n){return _createTester(Boolean,t=>t)(eachOfSeries$1,t,e,n)}var someSeries$1=awaitify(someSeries,3);function sortBy(t,e,n){var r=wrapAsync(e);return map$1(t,(t,e)=>{r(t,(n,r)=>{if(n)return e(n);e(n,{value:t,criteria:r})})},(t,e)=>{if(t)return n(t);n(null,e.sort(o).map(t=>t.value))});function o(t,e){var n=t.criteria,r=e.criteria;return n<r?-1:n>r?1:0}}var sortBy$1=awaitify(sortBy,3);function tryEach(t,e){var n,r=null;return eachSeries$1(t,(t,e)=>{wrapAsync(t)((t,...o)=>{if(!1===t)return e(t);o.length<2?[n]=o:n=o,r=t,e(t?null:{})})},()=>e(r,n))}var tryEach$1=awaitify(tryEach);function whilst(t,e,n){n=onlyOnce(n);var r=wrapAsync(e),o=wrapAsync(t),a=[];function i(t,...e){if(t)return n(t);a=e,!1!==t&&o(s)}function s(t,e){return t?n(t):!1!==t?e?void r(i):n(null,...a):void 0}return o(s)}var whilst$1=awaitify(whilst,3);function waterfall(t,e){if(e=once(e),!Array.isArray(t))return e(new Error("First argument to waterfall must be an array of functions"));if(!t.length)return e();var n=0;function r(e){wrapAsync(t[n++])(...e,onlyOnce(o))}function o(o,...a){if(!1!==o)return o||n===t.length?e(o,...a):void r(a)}r([])}var waterfall$1=awaitify(waterfall),SpanFetcher=class t extends ObjectFetcher{constructor(e,n,r,o,a,i=!1,s=!0){super(e,void 0,void 0,{filter:t.buildFilter(r,a,i)},s),this._objectId=n,this.rootSpanId=r,this._state=o,this.spanTypeFilter=a}static buildFilter(t,e,n=!1){const r=[{op:"eq",left:{op:"ident",name:["root_span_id"]},right:{op:"literal",value:t}}];return n||r.push({op:"or",children:[{op:"isnull",expr:{op:"ident",name:["span_attributes","purpose"]}},{op:"ne",left:{op:"ident",name:["span_attributes","purpose"]},right:{op:"literal",value:"scorer"}}]}),e&&e.length>0&&r.push({op:"in",left:{op:"ident",name:["span_attributes","type"]},right:{op:"literal",value:e}}),{op:"and",children:r}}get id(){return Promise.resolve(this._objectId)}async getState(){return this._state}},CachedSpanFetcher=class{spanCache=new Map;allFetched=!1;fetchFn;constructor(t,e,n,r,o=!0){if("function"==typeof t)this.fetchFn=e=>t(e);else{const a=t;this.fetchFn=async(t,i)=>{const s=await r(),c=new SpanFetcher(a,e,n,s,t,i,o);return(await c.fetchedData()).map(t=>({input:t.input,output:t.output,expected:t.expected,error:t.error,scores:t.scores,metrics:t.metrics,metadata:t.metadata,span_id:t.span_id,span_parents:t.span_parents,is_root:t.is_root,span_attributes:t.span_attributes,id:t.id,_xact_id:t._xact_id,_pagination_key:t._pagination_key,root_span_id:t.root_span_id,created:t.created,tags:t.tags}))}}}async getSpans({spanType:t,includeScorers:e=!1}={}){if(e)return this.fetchFn(t,!0);if(this.allFetched)return this.getFromCache(t);if(!t||0===t.length)return await this.fetchSpans(void 0),this.allFetched=!0,this.getFromCache(void 0);const n=t.filter(t=>!this.spanCache.has(t));return 0===n.length||await this.fetchSpans(n),this.getFromCache(t)}async fetchSpans(t){const e=await this.fetchFn(t,!1);for(const t of e){const e=t.span_attributes?.type??"",n=this.spanCache.get(e)??[];n.push(t),this.spanCache.set(e,n)}}getFromCache(t){if(!t||0===t.length)return Array.from(this.spanCache.values()).flat();const e=[];for(const n of t){const t=this.spanCache.get(n);t&&e.push(...t)}return e}},LocalTrace=class{objectType;objectId;rootSpanId;ensureSpansFlushed;state;spansFlushed=!1;spansFlushPromise=null;cachedFetcher;threadCache=new Map;constructor({objectType:t,objectId:e,rootSpanId:n,ensureSpansFlushed:r,state:o}){this.objectType=t,this.objectId=e,this.rootSpanId=n,this.ensureSpansFlushed=r,this.state=o,this.cachedFetcher=new CachedSpanFetcher(t,e,n,async()=>(await this.ensureSpansReady(),await o.login({}),o))}getConfiguration(){return{object_type:this.objectType,object_id:this.objectId,root_span_id:this.rootSpanId}}toJSON(){return{trace_ref:{object_type:this.objectType,object_id:this.objectId,root_span_id:this.rootSpanId}}}async getSpans({spanType:t,includeScorers:e=!1}={}){const n=this.state.spanCache.getByRootSpanId(this.rootSpanId);if(n&&n.length>0){let r=e?n:n.filter(t=>"scorer"!==t.span_attributes?.purpose);return t&&t.length>0&&(r=r.filter(e=>t.includes(e.span_attributes?.type??""))),r.map(t=>({input:t.input,output:t.output,expected:t.expected,error:t.error,scores:t.scores,metrics:t.metrics,metadata:t.metadata,span_id:t.span_id,span_parents:t.span_parents,is_root:t.is_root,span_attributes:t.span_attributes,tags:t.tags}))}return this.cachedFetcher.getSpans({spanType:t,includeScorers:e})}async getThread(t){const e=t?.preprocessor??"project_default";if(!this.threadCache.has(e)){const n=this.fetchThread(t);this.threadCache.set(e,n)}return this.threadCache.get(e)}async fetchThread(t){await this.ensureSpansReady(),await this.state.login({});const e=await invoke({globalFunction:t?.preprocessor??"project_default",functionType:"preprocessor",input:{trace_ref:{object_type:this.objectType,object_id:this.objectId,root_span_id:this.rootSpanId}},mode:"json",state:this.state});return Array.isArray(e)?e:[]}async ensureSpansReady(){!this.spansFlushed&&this.ensureSpansFlushed&&(this.spansFlushPromise||(this.spansFlushPromise=this.ensureSpansFlushed().then(()=>{this.spansFlushed=!0},t=>{throw this.spansFlushPromise=null,t})),await this.spansFlushPromise)}},SimpleProgressReporter=class{start(t,e){console.log(`Running evaluator ${t}`)}stop(){}increment(t){}setTotal(t,e){}},import_v311=require("zod/v3"),import_ajv=__toESM(require("ajv")),import_v310=require("zod/v3"),promptContentsSchema=import_v310.z.union([import_v310.z.object({prompt:import_v310.z.string()}),import_v310.z.object({messages:import_v310.z.array(ChatCompletionMessageParam)})]),promptDefinitionSchema=promptContentsSchema.and(import_v310.z.object({model:import_v310.z.string(),params:ModelParams.optional(),templateFormat:import_v310.z.enum(["mustache","nunjucks","none"]).optional(),environments:import_v310.z.array(import_v310.z.string()).optional()})),promptDefinitionWithToolsSchema=promptDefinitionSchema.and(import_v310.z.object({tools:import_v310.z.array(ToolFunctionDefinition).optional()}));function promptDefinitionToPromptData(t,e){return{prompt:"messages"in t?{type:"chat",messages:t.messages,tools:e&&e.length>0?JSON.stringify(e):void 0}:{type:"completion",content:t.prompt},options:{model:t.model,params:t.params},...t.templateFormat?{template_format:t.templateFormat}:{}}}var evalParametersSchema=import_v311.z.record(import_v311.z.string(),import_v311.z.union([import_v311.z.object({type:import_v311.z.literal("prompt"),default:promptDefinitionWithToolsSchema.optional(),description:import_v311.z.string().optional()}),import_v311.z.object({type:import_v311.z.literal("model"),default:import_v311.z.string().optional(),description:import_v311.z.string().optional()}),import_v311.z.instanceof(import_v311.z.ZodType)]));async function validateParameters(t,e){let n=e;if(n instanceof Promise&&(n=await n),null==n)return t;if(RemoteEvalParameters.isParameters(n)){return validateParametersWithJsonSchema(t&&Object.keys(t).length>0?{...n.data,...t}:n.data,n.schema)}return validateParametersWithZod(t,n)}function validateParametersWithZod(t,e){return Object.fromEntries(Object.entries(e).map(([e,n])=>{const r=t[e];try{if("type"in n&&"prompt"===n.type){const t=r?PromptData.parse(r):n.default?promptDefinitionToPromptData(n.default,n.default.tools):void 0;if(!t)throw new Error(`Parameter '${e}' is required`);return[e,Prompt2.fromPromptData(e,t)]}if("type"in n&&"model"===n.type){const t=r??n.default;if(void 0===t)throw new Error(`Parameter '${e}' is required`);if("string"!=typeof t)throw new Error(`Parameter '${e}' must be a string model identifier`);return[e,t]}return[e,n.parse(r)]}catch(t){throw console.error("Error validating parameter",e,t),Error(`Invalid parameter '${e}': ${t instanceof Error?t.message:String(t)}`)}}))}function validateParametersWithJsonSchema(t,e){const n=new import_ajv.default({coerceTypes:!0,useDefaults:!0,strict:!1}).compile(e);if(!n(t)){const t=n.errors?.map(t=>`${t.instancePath||"root"}: ${t.message}`).join(", ");throw Error(`Invalid parameters: ${t}`)}return rehydrateRemoteParameters(t,e)}function rehydrateRemoteParameters(t,e){const n=e.properties;return"object"!=typeof n||null===n?t:Object.fromEntries(Object.entries(t).map(([t,e])=>{const r=Reflect.get(n,t);return"object"!=typeof r||null===r?[t,e]:"prompt"===Reflect.get(r,"x-bt-type")?[t,Prompt2.fromPromptData(t,PromptData.parse(e))]:[t,e]}))}function BaseExperiment(t={}){return{_type:"BaseExperiment",...t}}var EvalResultWithSummary=class{constructor(t,e){this.summary=t,this.results=e}toString(){return JSON.stringify(this.summary)}[Symbol.for("nodejs.util.inspect.custom")](){return'EvalResultWithSummary(summary="...", results=[...])'}toJSON(){return{summary:this.summary,results:this.results}}};async function getPersistedBaseExperimentId(t){try{return await t._getBaseExperimentId()}catch{return}}function makeEvalName(t,e){let n=t;return e&&(n+=` [experimentName=${e}]`),n}function initExperiment2(t,e={}){return init({state:t,...e,setCurrent:!1})}async function getExperimentParametersRef(t){if(!t)return;const e=t instanceof Promise?await t:t;return RemoteEvalParameters.isParameters(e)&&void 0!==e.id?{id:e.id,version:e.version}:void 0}function callEvaluatorData(t){const e="function"==typeof t?t():t;let n;return"_type"in e&&"BaseExperiment"===e._type&&(n=e.name),{data:e,baseExperiment:n}}function isAsyncIterable7(t){return"object"==typeof t&&null!==t&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function isIterable(t){return"object"==typeof t&&null!==t&&Symbol.iterator in t&&"function"==typeof t[Symbol.iterator]}function _initializeSpanContext(){globalThis._spanContext={currentSpan:currentSpan,withCurrent:withCurrent,startSpan:startSpan,NOOP_SPAN:NOOP_SPAN}}async function Eval(t,e,n){const r=isEmpty2(n)?{}:"string"==typeof n||"name"in n?{reporter:n}:n;let o=makeEvalName(t,e.experimentName);if(globalThis._evals.evaluators[o]&&(o=`${o}_${Object.keys(_evals).length}`),globalThis._lazy_load)return globalThis._evals.evaluators[o]={evaluator:{evalName:o,projectName:t,...e},reporter:r.reporter},_initializeSpanContext(),new EvalResultWithSummary({scores:{},metrics:{},projectName:"",experimentName:""},[]);const a=r.progress??new SimpleProgressReporter,i=r.returnResults??!0;if("string"==typeof r.reporter)throw new Error("Must specify a reporter object, not a name. Can only specify reporter names when running 'braintrust eval'");const s=r.reporter||defaultReporter;try{const{data:n,baseExperiment:c}=callEvaluatorData(e.data),u=await getExperimentParametersRef(e.parameters),p=r.parent||r.noSendLogs?null:initExperiment2(e.state,{...e.projectId?{projectId:e.projectId}:{project:t},experiment:e.experimentName,description:e.description,metadata:e.metadata,tags:e.tags,isPublic:e.isPublic,update:e.update,baseExperiment:e.baseExperimentName??c,baseExperimentId:e.baseExperimentId,gitMetadataSettings:e.gitMetadataSettings,repoInfo:e.repoInfo,dataset:Dataset2.isDataset(n)?n:void 0,parameters:u});if(p&&"undefined"!=typeof process&&void 0!==globalThis.BRAINTRUST_CONTEXT_MANAGER&&await p._waitForId(),p&&r.onStart){const t=await p.summarize({summarizeScores:!1});r.onStart(t)}try{const c={evalName:o,projectName:t,...e,data:n},u=r.enableCache??!0;let l;return l=r.parent?await withParent(r.parent,()=>runEvaluator(null,c,a,[],r.stream,r.parameters,i,u),e.state):await runEvaluator(p,c,a,[],r.stream,r.parameters,i,u),a.stop(),s.reportEval(c,l,{verbose:!0,jsonl:!1}),l}finally{p?await p.flush().catch(console.error):r.parent&&await flush({state:e.state}).catch(console.error)}}finally{a.stop()}}function Reporter(t,e){const n={name:t,...e};if(_evals.reporters[t])throw new Error(`Reporter ${t} already exists`);return globalThis._lazy_load&&(_evals.reporters[t]=n),n}function serializeJSONWithPlainString(t){return"string"==typeof t?t:JSON.stringify(t)}function evaluateFilter(t,e){const{path:n,pattern:r}=e,o=n.reduce((t,e)=>"object"==typeof t&&null!==t?t[e]:void 0,t);return void 0!==o&&r.test(serializeJSONWithPlainString(o))}function scorerName(t,e){return t.name||`scorer_${e}`}function classifierName(t,e){return t.name||`classifier_${e}`}function buildSpanMetadata(t){return 1===t.length?t[0].metadata:t.reduce((t,e)=>mergeDicts(t,{[e.name]:e.metadata}),{})}function buildSpanScores(t){const e=t.reduce((t,e)=>mergeDicts(t,{[e.name]:e.score}),{});return{resultMetadata:buildSpanMetadata(t),scoresRecord:e}}async function runInScorerSpan(t,e,n,r,o,a){try{return{kind:"score",value:await t.traced(a,{name:e,spanAttributes:{type:n,purpose:"scorer"},propagatedEvent:r,event:{input:o}})}}catch(t){return{kind:"error",value:t}}}function collectScoringResults(t,e,n){const r=[];return t.forEach((t,o)=>{"score"===t.kind?(t.value??[]).forEach(n):r.push({name:e[o],error:t.value})}),r}function validateClassificationResult(t,e){if("object"!=typeof t||null===t||isEmpty2(t))throw new Error(`When returning structured classifier results, each classification must be a non-empty object. Got: ${JSON.stringify(t)}`);if(!("name"in t)||"string"!=typeof t.name||!t.name){const n=t;return n.name=e,n}return t}function toClassificationItem(t){return{id:t.id,label:t.label??t.id,...void 0!==t.metadata?{metadata:t.metadata}:{}}}function logScoringFailures(t,e,n,r,o){if(!e.length)return[];const a=Object.fromEntries(e.map(({name:t,error:e})=>[t,e instanceof Error?e.stack:`${e}`]));return n[`${t}_errors`]=a,r.log({metadata:{[`${t}_errors`]:a}}),debugLogger.forState(o).warn(`Found exceptions for the following ${t}s: ${Object.keys(a).join(", ")}`,e.map(t=>t.error)),Object.keys(a)}async function runEvaluator(t,e,n,r,o,a,i=!0,s=!0){if(!e.scores&&!e.classifiers)throw new Error("Evaluator must include at least one of `scores` or `classifiers`");return await runEvaluatorInternal(t,e,n,r,o,a,i,s)}globalThis._evals={functions:[],prompts:[],parameters:[],evaluators:{},reporters:{}};var defaultErrorScoreHandler=({rootSpan:t,data:e,unhandledScores:n})=>{const r=Object.fromEntries(n.map(t=>[t,0]));return t.log({scores:r}),r};async function runEvaluatorInternal(t,e,n,r,o,a,i,s){s&&(e.state??_internalGetGlobalState())?.spanCache?.start();try{if("string"==typeof e.data)throw new Error("Unimplemented: string data paths");let s="function"==typeof e.data?e.data():e.data;if(a=await validateParameters(a??{},e.parameters),"_type"in s){if("BaseExperiment"!==s._type)throw new Error("Invalid _type");if(!t)throw new Error("Cannot use BaseExperiment() without connecting to Braintrust (you most likely set --no-send-logs)");let n=s.name;if(isEmpty2(n)){const e=await t.fetchBaseExperiment();if(!e)throw new Error("BaseExperiment() failed to fetch base experiment");n=e.name}s=initExperiment2(e.state,{...e.projectId?{projectId:e.projectId}:{project:e.projectName},experiment:n,open:!0}).asDataset()}const c=s instanceof Promise?await s:s,u=(()=>{if(isAsyncIterable7(c))return c;if(Array.isArray(c)||isIterable(c)){const t=c;return async function*(){for(const e of t)yield e}()}throw new Error("Evaluator data must be an array, iterable, or async iterable")})();n.start(e.evalName,0);const p=t?(async()=>{try{return await t.id}catch{return}})():void 0,l=[],d=t?null:{};let m=!1,g=0;const f=queue(async({datum:r,trialIndex:s})=>{if(m)return;const c=t?t.dataset:Dataset2.isDataset(e.data)?e.data:void 0,u=c&&r.id&&r._xact_id?{object_type:"dataset",object_id:await c.id,id:r.id,created:r.created,_xact_id:r._xact_id}:void 0,g=ObjectReference.safeParse(r.origin),f=u??(g?.success?g.data:void 0),h={name:"eval",spanAttributes:{type:"eval"},event:{input:r.input,expected:"expected"in r?r.expected:void 0,tags:r.tags,origin:f,...r.upsert_id?{id:r.upsert_id}:{}}},_=async c=>{const u=e.state??_internalGetGlobalState(),m=u.currentParent.getStore(),g="string"==typeof m?SpanComponentsV4.fromStr(m):null,f=u?new LocalTrace({objectType:g?spanObjectTypeV3ToTypedString(g.data.object_type):"experiment",objectId:g?.data.object_id??(p?await p??"":""),rootSpanId:c.rootSpanId,ensureSpansFlushed:async()=>{t?await flush({state:t.loggingState}):u?await flush({state:u}):await flush(),u&&await u.flushOtel()},state:u}):void 0;let _={..."metadata"in r?r.metadata:{}};const y="expected"in r?r.expected:void 0;let v,b,S=[...r.tags??[]];const T={},C={},A=(e.scores??[]).map(scorerName),w=(e.classifiers??[]).map(classifierName);let I=A;try{const t=t=>_={..._,...t};await c.traced(async n=>{const i={meta:t,metadata:_,expected:y,span:n,parameters:a??{},reportProgress:t=>{o?.({...t,id:c.id,origin:h.event?.origin,name:e.evalName,object_type:"task"})},trialIndex:s,tags:S},u=e.task(r.input,i);v=u instanceof Promise?await u:u,S=i.tags??[],n.log({output:v})},{name:"task",spanAttributes:{type:"task"},event:{input:r.input}}),S.length?c.log({output:v,metadata:_,expected:y,tags:S}):c.log({output:v,metadata:_,expected:y}),e.flushBeforeScoring&&await c.flush();const n={input:r.input,expected:"expected"in r?r.expected:void 0,metadata:_,output:v,trace:f},{trace:i,...u}=n,p=makeScorerPropagatedEvent(await c.export()),l=t=>{const{metadata:e,name:n,...r}=t;return r},[d,m]=await Promise.all([Promise.all((e.scores??[]).map((t,e)=>runInScorerSpan(c,A[e],"score",p,u,async r=>{const o=await Promise.resolve(t(n));if(null===o)return null;if(Array.isArray(o))for(const t of o)if("object"!=typeof t||isEmpty2(t))throw new Error(`When returning an array of scores, each score must be a non-empty object. Got: ${JSON.stringify(t)}`);const a=Array.isArray(o)?o:"object"!=typeof o||isEmpty2(o)?[{name:A[e],score:o}]:[o],{resultMetadata:i,scoresRecord:s}=buildSpanScores(a),c=1===a.length?l(a[0]):a.reduce((t,e)=>mergeDicts(t,{[e.name]:l(e)}),{});return r.log({output:c,metadata:i,scores:s}),a}))),Promise.all((e.classifiers??[]).map((t,e)=>runInScorerSpan(c,w[e],"classifier",p,u,async r=>{const o=await Promise.resolve(t(n));if(null===o)return null;const a=(Array.isArray(o)?o:[o]).map(t=>validateClassificationResult(t,w[e])),i=1===a.length?toClassificationItem(a[0]):a.reduce((t,e)=>mergeDicts(t,{[e.name]:toClassificationItem(e)}),{});return r.log({output:i,metadata:buildSpanMetadata(a)}),a})))]),g=collectScoringResults(d,A,t=>{T[t.name]=t.score}),b=collectScoringResults(m,w,t=>{const e=toClassificationItem(t);C[t.name]||(C[t.name]=[]),C[t.name].push(e)});Object.keys(C).length>0&&c.log({classifications:C});const E=logScoringFailures("scorer",g,_,c,e.state);I=E.length?E:null,logScoringFailures("classifier",b,_,c,e.state)}catch(t){logError(c,t),b=t}finally{n.increment(e.evalName)}const E={...e.errorScoreHandler&&I?e.errorScoreHandler({rootSpan:c,data:r,unhandledScores:I}):void 0,...T};if(d&&accumulateScores(d,E),i){const t={input:r.input,..."expected"in r?{expected:r.expected}:{},output:v,tags:S.length?S:void 0,metadata:_,error:b,origin:h.event?.origin};l.push({...t,scores:E,...Object.keys(C).length>0?{classifications:C}:{}})}};if(t){const n=await t.traced(_,h),r=t.loggingState.bgLogger();return void 0!==e.maxConcurrency&&r.pendingFlushBytes()>=r.flushBackpressureBytes()&&await t.flush(),n}return await traced(_,{...h,state:e.state})},Math.max(e.maxConcurrency??Number.MAX_SAFE_INTEGER,1)),h=[],_=(async()=>{for await(const t of u){if(m)break;if(!r.every(e=>evaluateFilter(t,e)))continue;const o=t.trialCount??e.trialCount??1;for(let r=0;r<o&&!m;r++)g++,n.setTotal?.(e.evalName,g),f.pushAsync({datum:t,trialIndex:r}).catch(t=>{h.length<5&&h.push(t)})}})(),y=async()=>{await new Promise((t,n)=>{if(m)return void n(new InternalAbortError("Evaluator already cancelled"));let r,o;const a=t=>{m||(m=!0,r&&(clearTimeout(r),r=void 0),o&&e.signal&&e.signal.removeEventListener("abort",o),n(t))};e.timeout&&(r=setTimeout(()=>{a(new InternalAbortError("Evaluator timed out"))},e.timeout)),e.signal&&(o=()=>{a(new InternalAbortError("Evaluator aborted"))},e.signal.addEventListener("abort",o))})},v=(async()=>{await _,f.idle()||await f.drain()})();try{if(await Promise.race([v,y()]),h.length>0)throw new AggregateError(h,`Encountered ${h.length} unhandled task errors`)}catch(t){throw f.kill(),t instanceof InternalAbortError&&isomorph_default.getEnv("BRAINTRUST_VERBOSE")&&debugLogger.forState(e.state).warn("Evaluator cancelled:",t.message),t}finally{i||(l.length=0)}const b=t?e.baseExperimentId??await getPersistedBaseExperimentId(t):void 0,S=t?await t.summarize({summarizeScores:e.summarizeScores,...void 0!==b?{comparisonExperimentId:b}:{}}):buildLocalSummary(e,i?l:[],d??void 0);return new EvalResultWithSummary(S,i?l:[])}finally{if(s){const t=(e.state??_internalGetGlobalState())?.spanCache;t?.dispose(),t?.stop()}}}var warning=t=>`Warning: ${t}`;function logError2(t,e){e?console.error(t):console.error(`${t}`)}function accumulateScores(t,e){if(e)for(const[n,r]of Object.entries(e)){if(null==r)continue;const e=t[n]??{total:0,count:0};t[n]={total:e.total+r,count:e.count+1}}}function ensureScoreAccumulator(t){const e={};for(const n of t)accumulateScores(e,n.scores);return e}function buildLocalSummary(t,e,n){const r=n??ensureScoreAccumulator(e);return{projectName:t.projectName,experimentName:t.evalName,scores:Object.fromEntries(Object.entries(r).map(([t,{total:e,count:n}])=>[t,{name:t,score:0===n?0:e/n,improvements:0,regressions:0}]))}}function reportFailures(t,e,{verbose:n,jsonl:r}){if(e.length>0){if(console.error(warning(`Evaluator ${t.evalName} failed with ${e.length} error${1===e.length?"":"s"}. This evaluation ("${t.evalName}") will not be fully logged.`)),r)console.log(JSON.stringify({evaluatorName:t.evalName,errors:e.map(t=>`${t.error instanceof Error?t.error.stack:t.error}`)}));else for(const t of e)logError2(t.error,n);n||r||console.error(warning("Use --debug-logging debug to see full stack traces and troubleshooting details."))}}var defaultReporter={name:"Braintrust default reporter",async reportEval(t,e,{verbose:n,jsonl:r}){const{results:o,summary:a}=e,i=o.filter(t=>void 0!==t.error);if(i.length>0&&reportFailures(t,i,{verbose:n,jsonl:r}),r)isomorph_default.writeln(JSON.stringify(a));else{isomorph_default.writeln("Experiment summary"),isomorph_default.writeln("=================="),a.comparisonExperimentName&&(isomorph_default.writeln(`${a.comparisonExperimentName} (baseline) <- ${a.experimentName} (comparison)`),isomorph_default.writeln(""));const t=Object.keys(a.scores).length>0,e=Object.keys(a.metrics??{}).length>0,n=!!a.comparisonExperimentName;if(t||e){n&&(isomorph_default.writeln("Name                Value      Change     Improvements Regressions"),isomorph_default.writeln("----------------------------------------------------------------"));for(const t of Object.values(a.scores)){const e=`${(100*t.score).toFixed(2)}%`;if(n){let n="-";if(!isEmpty2(t.diff)){const e=(100*t.diff).toFixed(2);n=`${t.diff>0?"+":""}${e}%`}const r=t.improvements>0?t.improvements.toString():"-",o=t.regressions>0?t.regressions.toString():"-";isomorph_default.writeln(`${t.name.padEnd(18)} ${e.padStart(10)} ${n.padStart(10)} ${r.padStart(12)} ${o.padStart(11)}`)}else isomorph_default.writeln(`${t.name.padEnd(20)} ${e.padStart(15)}`)}for(const t of Object.values(a.metrics??{})){const e=Number.isInteger(t.metric)?0:2,r=t.metric.toFixed(e),o="$"===t.unit?`${t.unit}${r}`:`${r}${t.unit}`;if(n){let e="-";if(!isEmpty2(t.diff)){const n=(100*t.diff).toFixed(2);e=`${t.diff>0?"+":""}${n}%`}const n=t.improvements>0?t.improvements.toString():"-",r=t.regressions>0?t.regressions.toString():"-";isomorph_default.writeln(`${t.name.padEnd(18)} ${o.padStart(10)} ${e.padStart(10)} ${n.padStart(12)} ${r.padStart(11)}`)}else isomorph_default.writeln(`${t.name.padEnd(20)} ${o.padStart(15)}`)}}a.experimentUrl&&(isomorph_default.writeln(""),isomorph_default.writeln(`View results for ${a.experimentName}`),isomorph_default.writeln(`See results at ${a.experimentUrl}`))}return isomorph_default.writeln(""),0===i.length},reportRun:async t=>t.every(t=>t)};function agentAssertionScorer(t,e={}){return async n=>{const{trace:r,...o}=n,a=o.metadata??{},i=await t({...o,metadata:a,assert:agentAssertionHelpers}),s={};i.some(t=>t.requiresTrace)&&(s.spans=await(n.trace?.getSpans({spanType:["tool"]})));const c=await Promise.all(i.map(async t=>{const e=await t.evaluate(s);return{name:t.name,passed:e.passed,failure:e.failure}})),u=c.filter(t=>t.passed).length,p=c.length,l=c.filter(t=>!t.passed).map(t=>`${t.name}: ${t.failure??"assertion did not pass"}`);return{name:e.name??"assertions",score:0===p?1:u/p,metadata:{assertions:c.map(({name:t,passed:e})=>({name:t,passed:e})),failed:l}}}}var agentAssertionHelpers={equals:(t,e,n="equals")=>({name:n,evaluate:()=>{const n=deepEqual(t,e);return{passed:n,failure:n?void 0:`expected ${formatValue(t)} to equal ${formatValue(e)}`}}}),notEquals:(t,e,n="not equals")=>({name:n,evaluate:()=>{const n=!deepEqual(t,e);return{passed:n,failure:n?void 0:`expected ${formatValue(t)} not to equal ${formatValue(e)}`}}}),contains:(t,e,n="contains")=>({name:n,evaluate:()=>{const n="string"==typeof t?t:formatValue(t),r=e instanceof RegExp?testRegex(e,t):n.includes(e);return{passed:r,failure:r?void 0:`expected ${formatValue(t)} to contain ${formatValue(e)}`}}}),matches:(t,e,n="matches schema")=>({name:n,evaluate:async()=>{const n=await validateSchema(e,t);return{passed:n.passed,failure:n.passed?void 0:`expected value to match schema: ${n.message}`}}}),calledTool:(t,e={},n=`called tool ${t}`)=>({name:n,requiresTrace:!0,evaluate:({spans:n})=>{const r=matchingToolCalls(n??[],t,e),o=void 0===e.times?r.length>0:r.length===e.times;return{passed:o,failure:o?void 0:void 0===e.times?`expected tool "${t}" to be called; found ${r.length} matching call${1===r.length?"":"s"}`:`expected tool "${t}" to be called ${e.times} time${1===e.times?"":"s"}; found ${r.length} matching call${1===r.length?"":"s"}`}}}),notCalledTool:(t,e=`did not call tool ${t}`)=>({name:e,requiresTrace:!0,evaluate:({spans:e})=>{const n=toolCalls(e??[]).filter(e=>getToolName(e)===t),r=0===n.length;return{passed:r,failure:r?void 0:`expected tool "${t}" not to be called; found ${n.length} call${1===n.length?"":"s"}`}}}),toolOrder:(t,e="tool order")=>({name:e,requiresTrace:!0,evaluate:({spans:e})=>{const n=toolCalls(e??[]).map(getToolName).filter(t=>void 0!==t);let r=0;const o=t.every(t=>{const e=n.indexOf(t,r);return-1!==e&&(r=e+1,!0)});return{passed:o,failure:o?void 0:`expected tool order ${t.join(" -> ")}; observed ${n.join(" -> ")||"no tools"}`}}}),usedNoTools:(t="used no tools")=>({name:t,requiresTrace:!0,evaluate:({spans:t})=>{const e=toolCalls(t??[]),n=0===e.length;return{passed:n,failure:n?void 0:`expected no tool calls; found ${e.length}`}}}),maxToolCalls:(t,e=`at most ${t} tool calls`)=>({name:e,requiresTrace:!0,evaluate:({spans:e})=>{const n=toolCalls(e??[]),r=n.length<=t;return{passed:r,failure:r?void 0:`expected at most ${t} tool call${1===t?"":"s"}; found ${n.length}`}}})};async function validateSchema(t,e){try{if("safeParse"in t){const n=t.safeParse(e);return n.success?{passed:!0,message:""}:{passed:!1,message:formatSchemaError(n.error)}}if("parse"in t)return t.parse(e),{passed:!0,message:""};const n=await t["~standard"].validate(e);return"object"==typeof n&&null!==n&&"issues"in n&&Array.isArray(n.issues)&&n.issues.length>0?{passed:!1,message:formatValue(n.issues)}:{passed:!0,message:""}}catch(t){return{passed:!1,message:formatSchemaError(t)}}}function toolCalls(t){return t.filter(t=>"tool"===t.span_attributes?.type)}function matchingToolCalls(t,e,n){return toolCalls(t).filter(t=>getToolName(t)===e&&(!(Object.prototype.hasOwnProperty.call(n,"input")&&!matchesValue(t.input,n.input))&&(!(Object.prototype.hasOwnProperty.call(n,"output")&&!matchesValue(t.output,n.output))&&(void 0===n.isError||Boolean(t.error)===n.isError))))}function getToolName(t){const e=[t.span_attributes?.name,t.name].map(normalizeToolName).find(t=>void 0!==t);if(e?.includes("/"))return e;const n=[t.metadata?.tool_name,t.metadata?.["gen_ai.tool.name"]].map(normalizeToolName).find(t=>void 0!==t),r=[t.metadata?.["mcp.server"],t.metadata?.["openai_codex.mcp.server"]].find(t=>"string"==typeof t&&""!==t);return n&&r?`${r}/${n}`:n??e}function normalizeToolName(t){if("string"==typeof t&&""!==t)return t.startsWith("tool:")?t.slice(5).trim():t}function matchesValue(t,e){return e instanceof RegExp?testRegex(e,t):"function"==typeof e?e(t):Array.isArray(e)?Array.isArray(t)&&t.length===e.length&&e.every((e,n)=>matchesValue(t[n],e)):isPlainObject(e)&&isPlainObject(t)?Object.entries(e).every(([e,n])=>Object.prototype.hasOwnProperty.call(t,e)&&matchesValue(t[e],n)):deepEqual(t,e)}function testRegex(t,e){return t.lastIndex=0,t.test("string"==typeof e?e:formatValue(e))}function deepEqual(t,e){if(Object.is(t,e))return!0;if(Array.isArray(t)&&Array.isArray(e))return t.length===e.length&&t.every((t,n)=>deepEqual(t,e[n]));if(isPlainObject(t)&&isPlainObject(e)){const n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(n=>Object.prototype.hasOwnProperty.call(e,n)&&deepEqual(t[n],e[n]))}return!1}function isPlainObject(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)&&Object.getPrototypeOf(t)===Object.prototype}function formatSchemaError(t){return t instanceof Error?t.message:formatValue(t)}function formatValue(t){if(t instanceof RegExp)return t.toString();if("string"==typeof t)return JSON.stringify(t);try{const e=JSON.stringify(t);return void 0===e||hasUndefinedJsonValue(t)?formatValueWithUndefined(t,new Set):e}catch{return String(t)}}function hasUndefinedJsonValue(t,e=new Set){return void 0===t||"object"==typeof t&&null!==t&&(!e.has(t)&&(e.add(t),Array.isArray(t)?Array.from({length:t.length}).some((n,r)=>hasUndefinedJsonValue(t[r],e)):Object.keys(t).some(n=>hasUndefinedJsonValue(t[n],e))))}function formatValueWithUndefined(t,e){if(void 0===t)return"undefined";if(null===t)return"null";if("string"==typeof t)return JSON.stringify(t);if("number"==typeof t||"boolean"==typeof t)return JSON.stringify(t);if("bigint"==typeof t||"function"==typeof t)return String(t);if("symbol"==typeof t)return String(t);if(t instanceof RegExp)return t.toString();if("object"!=typeof t)return String(t);if(e.has(t))return'"[Circular]"';if(e.add(t),"function"==typeof t.toJSON){const n=t.toJSON();return e.delete(t),formatValueWithUndefined(n,e)}if(Array.isArray(t)){const n=Array.from({length:t.length},(n,r)=>formatValueWithUndefined(t[r],e));return e.delete(t),`[${n.join(",")}]`}const n=Object.keys(t).map(n=>`${JSON.stringify(n)}:${formatValueWithUndefined(t[n],e)}`);return e.delete(t),`{${n.join(",")}}`}function DatasetPipeline(t){globalThis.__braintrust_dataset_pipelines||(globalThis.__braintrust_dataset_pipelines=[]);const e={name:t.name,source:{projectId:t.source.projectId,projectName:t.source.projectName,orgName:t.source.orgName,filter:t.source.filter,scope:t.source.scope??"span"},transform:t.transform,target:{projectId:t.target.projectId,projectName:t.target.projectName,orgName:t.target.orgName,datasetName:t.target.datasetName,description:t.target.description,metadata:t.target.metadata}};globalThis.__braintrust_dataset_pipelines.push(e)}var import_v312=require("zod/v3"),currentFilename="undefined"!=typeof __filename?__filename:"unknown",ProjectBuilder=class{create(t){return new Project2(t)}},projects=new ProjectBuilder,Project2=class{name;id;tools;prompts;parameters;scorers;classifiers;_publishableCodeFunctions=[];_publishablePrompts=[];_publishableParameters=[];constructor(t){_initializeSpanContext(),this.name="name"in t?t.name:void 0,this.id="id"in t?t.id:void 0,this.tools=new ToolBuilder(this),this.prompts=new PromptBuilder(this),this.parameters=new ParametersBuilder(this),this.scorers=new ScorerBuilder(this),this.classifiers=new ClassifierBuilder(this)}addPrompt(t){this._publishablePrompts.push(t),globalThis._lazy_load&&globalThis._evals.prompts.push(t)}addParameters(t){this._publishableParameters.push(t),globalThis._lazy_load&&(null==globalThis._evals.parameters&&(globalThis._evals.parameters=[]),globalThis._evals.parameters.push(t))}addCodeFunction(t){this._publishableCodeFunctions.push(t),globalThis._lazy_load&&globalThis._evals.functions.push(t)}async publish(){if(globalThis._lazy_load)return void console.warn("publish() is a no-op when running `braintrust push`.");await login();const t=new ProjectNameIdMap,e=[];if(this._publishableCodeFunctions.length>0&&console.warn("Code functions cannot be published directly. Use `braintrust push` instead."),this._publishablePrompts.length>0)for(const n of this._publishablePrompts){const r=await n.toFunctionDefinition(t);e.push(r)}await _internalGetGlobalState().apiConn().post_json("insert-functions",{functions:e})}},ToolBuilder=class{constructor(t){this.project=t}taskCounter=0;create(t){this.taskCounter++,t=t??{};const{handler:e,name:n,slug:r,parameters:o,returns:a,...i}=t;let s=n??e.name;0===s.trim().length&&(s=`Tool ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`);const c=new CodeFunction(this.project,{handler:e,name:s,slug:r??slugify(s,{lower:!0,strict:!0}),type:"tool",parameters:o,returns:a,...i});return this.project.addCodeFunction(c),c}},ScorerBuilder=class{constructor(t){this.project=t}taskCounter=0;create(t){this.taskCounter++;let e=t.name;!e&&"handler"in t&&(e=t.handler.name),e&&0!==e.trim().length||(e=`Scorer ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`);const n=t.slug??slugify(e,{lower:!0,strict:!0});if("handler"in t){const r=new CodeFunction(this.project,{...t,name:e,slug:n,type:"scorer"});this.project.addCodeFunction(r)}else{const r={prompt:"messages"in t?{type:"chat",messages:t.messages}:{type:"completion",content:t.prompt},options:{model:t.model,params:t.params},parser:{type:"llm_classifier",use_cot:t.useCot,choice_scores:t.choiceScores},...t.templateFormat?{template_format:t.templateFormat}:{}},o=new CodePrompt(this.project,r,[],{...t,name:e,slug:n},"scorer");this.project.addPrompt(o)}}},ClassifierBuilder=class{constructor(t){this.project=t}taskCounter=0;create(t){this.taskCounter++;let e=t.name??t.handler.name;e&&0!==e.trim().length||(e=`Classifier ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`);const n=t.slug??slugify(e,{lower:!0,strict:!0}),r=new CodeFunction(this.project,{...t,name:e,slug:n,type:"classifier"});return this.project.addCodeFunction(r),r}},CodeFunction=class{constructor(t,e){if(this.project=t,this.handler=e.handler,this.name=e.name,this.slug=e.slug,this.description=e.description,this.type=e.type,this.ifExists=e.ifExists,this.tags=e.tags,this.metadata=e.metadata,this.parameters=e.parameters,this.returns=e.returns,this.returns&&!this.parameters)throw new Error("parameters are required if return type is defined")}handler;name;slug;type;description;parameters;returns;ifExists;tags;metadata;key(){return JSON.stringify([this.project.id??"",this.project.name??"",this.slug])}},CodePrompt=class{project;name;slug;prompt;ifExists;description;id;functionType;toolFunctions;tags;metadata;environmentSlugs;constructor(t,e,n,r,o){this.project=t,this.name=r.name,this.slug=r.slug,this.prompt=e,this.toolFunctions=n,this.ifExists=r.ifExists,this.description=r.description,this.id=r.id,this.functionType=o,this.tags=r.tags,this.metadata=r.metadata,this.environmentSlugs=r.environments}async toFunctionDefinition(t){const e={...this.prompt};if(this.toolFunctions.length>0){const n=await Promise.all(this.toolFunctions.map(async e=>"slug"in e?{type:"slug",project_id:await t.resolve(e.project),slug:e.slug}:e));e.tool_functions=n}return{project_id:await t.resolve(this.project),name:this.name,slug:this.slug,description:this.description??"",function_data:{type:"prompt"},function_type:this.functionType,prompt_data:e,if_exists:this.ifExists,tags:this.tags,metadata:this.metadata,environments:this.environmentSlugs&&this.environmentSlugs.length>0?this.environmentSlugs.map(t=>({slug:t})):void 0}}},PromptBuilder=class{constructor(t){this.project=t}create(t){const e=[],n=[];for(const r of t.tools??[])r instanceof CodeFunction||"type"in r&&!("function"in r)?e.push(r):n.push(r);const r=t.slug??slugify(t.name,{lower:!0,strict:!0}),o=promptDefinitionToPromptData(t,n),a={id:t.id,_xact_id:t.version?loadPrettyXact(t.version):void 0,name:t.name,slug:r,prompt_data:o,tags:t.tags,...void 0!==this.project.id?{project_id:this.project.id}:{}},i=new Prompt2(a,{},t.noTrace??!1),s=new CodePrompt(this.project,o,e,{...t,slug:r});return this.project.addPrompt(s),i}},CodeParameters=class{project;name;slug;description;schema;ifExists;metadata;constructor(t,e){this.project=t,this.name=e.name,this.slug=e.slug,this.description=e.description,this.schema=e.schema,this.ifExists=e.ifExists,this.metadata=e.metadata}async toFunctionDefinition(t){const e=serializeEvalParameterstoParametersSchema(this.schema);return{project_id:await t.resolve(this.project),name:this.name,slug:this.slug,description:this.description??"",function_type:"parameters",function_data:{type:"parameters",data:getDefaultDataFromParametersSchema(e),__schema:e},if_exists:this.ifExists,metadata:this.metadata}}},ParametersBuilder=class{constructor(t){this.project=t}create(t){const e=t.slug??slugify(t.name,{lower:!0,strict:!0}),n=new CodeParameters(this.project,{name:t.name,slug:e,description:t.description,schema:t.schema,ifExists:t.ifExists,metadata:t.metadata});return this.project.addParameters(n),t.schema}};function serializeEvalParameterstoParametersSchema(t){const e={},n=[];for(const[r,o]of Object.entries(t))if("type"in o&&"prompt"===o.type){const t=o.default?promptDefinitionToPromptData(o.default):void 0;e[r]={type:"object","x-bt-type":"prompt",...o.description?{description:o.description}:{},...t?{default:t}:{}},t||n.push(r)}else if("type"in o&&"model"===o.type)e[r]={type:"string","x-bt-type":"model",...o.description?{description:o.description}:{},..."default"in o?{default:o.default}:{}},"default"in o||n.push(r);else{const t=zodToJsonSchema(o);e[r]=t,"default"in t||n.push(r)}return{type:"object",properties:e,...n.length>0?{required:n}:{},additionalProperties:!0}}function getDefaultDataFromParametersSchema(t){return Object.fromEntries(Object.entries(t.properties).flatMap(([t,e])=>"default"in e?[[t,e.default]]:[]))}var ProjectNameIdMap=class{nameToId={};idToName={};async getId(t){if(!(t in this.nameToId)){const e=await _internalGetGlobalState().appConn().post_json("api/project/register",{project_name:t}),n=import_v312.z.object({project:Project}).parse(e).project.id;this.nameToId[t]=n,this.idToName[n]=t}return this.nameToId[t]}async getName(t){if(!(t in this.idToName)){const e=await _internalGetGlobalState().appConn().post_json("api/project/get",{id:t}),n=import_v312.z.array(Project).nonempty().parse(e)[0].name;this.idToName[t]=n,this.nameToId[n]=t}return this.idToName[t]}async resolve(t){return t.id?t.id:this.getId(t.name)}},import_v313=require("zod/v3"),evalBodySchema=import_v313.z.object({name:import_v313.z.string(),parameters:import_v313.z.record(import_v313.z.string(),import_v313.z.unknown()).nullish(),data:RunEval.shape.data,scores:import_v313.z.array(import_v313.z.object({function_id:FunctionId,name:import_v313.z.string()})).nullish(),experiment_name:import_v313.z.string().nullish(),project_id:import_v313.z.string().nullish(),parent:InvokeParent.optional(),stream:import_v313.z.boolean().optional()}),staticParametersSchema=import_v313.z.record(import_v313.z.string(),import_v313.z.union([import_v313.z.object({type:import_v313.z.literal("prompt"),default:PromptData.optional(),description:import_v313.z.string().optional()}),import_v313.z.object({type:import_v313.z.literal("model"),default:import_v313.z.string().optional(),description:import_v313.z.string().optional()}),import_v313.z.object({type:import_v313.z.literal("data"),schema:import_v313.z.record(import_v313.z.unknown()),default:import_v313.z.unknown().optional(),description:import_v313.z.string().optional()})])),parametersSchema=import_v313.z.object({type:import_v313.z.literal("object"),properties:import_v313.z.record(import_v313.z.string(),import_v313.z.record(import_v313.z.unknown())),required:import_v313.z.array(import_v313.z.string()).optional(),additionalProperties:import_v313.z.boolean().optional()}),parametersSourceSchema=import_v313.z.object({parametersId:import_v313.z.string().optional(),slug:import_v313.z.string(),name:import_v313.z.string(),projectId:import_v313.z.string().optional(),version:import_v313.z.string().optional()}),parametersContainerSchema=import_v313.z.object({type:import_v313.z.literal("braintrust.parameters"),schema:parametersSchema,source:parametersSourceSchema}),staticParametersContainerSchema=import_v313.z.object({type:import_v313.z.literal("braintrust.staticParameters"),schema:staticParametersSchema,source:import_v313.z.null().nullish()}),serializedParametersContainerSchema=import_v313.z.union([parametersContainerSchema,staticParametersContainerSchema,staticParametersSchema]),evaluatorDefinitionSchema=import_v313.z.object({parameters:serializedParametersContainerSchema.nullish(),scores:import_v313.z.array(import_v313.z.object({name:import_v313.z.string()})).optional(),classifiers:import_v313.z.array(import_v313.z.object({name:import_v313.z.string()})).optional()}),evaluatorDefinitionsSchema=import_v313.z.record(import_v313.z.string(),evaluatorDefinitionSchema);configureBrowser();
//# sourceMappingURL=/sm/97dcfb4c22af7a6bc66a3a6deea2ac37868a1edc97b116e4ea0fb24434cb284c.map