/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/braintrust@3.9.0/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,BRAINTRUST_CURRENT_SPAN_STORE:()=>BRAINTRUST_CURRENT_SPAN_STORE,BaseAttachment:()=>BaseAttachment,BaseExperiment:()=>BaseExperiment,BraintrustMiddleware:()=>BraintrustMiddleware,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,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,Logger:()=>Logger,LoginInvalidOrgError:()=>LoginInvalidOrgError,NOOP_SPAN:()=>NOOP_SPAN,NOOP_SPAN_PERMALINK:()=>NOOP_SPAN_PERMALINK,NoopSpan:()=>NoopSpan,ObjectFetcher:()=>ObjectFetcher,Project:()=>Project2,ProjectNameIdMap:()=>ProjectNameIdMap,Prompt:()=>Prompt2,PromptBuilder:()=>PromptBuilder,ReadonlyAttachment:()=>ReadonlyAttachment,ReadonlyExperiment:()=>ReadonlyExperiment,Reporter:()=>Reporter,ScorerBuilder:()=>ScorerBuilder,SpanFetcher:()=>SpanFetcher,SpanImpl:()=>SpanImpl,TestBackgroundLogger:()=>TestBackgroundLogger,ToolBuilder:()=>ToolBuilder,UUIDGenerator:()=>UUIDGenerator,X_CACHED_HEADER:()=>X_CACHED_HEADER,_exportsForTestingOnly:()=>_exportsForTestingOnly,_internalGetGlobalState:()=>_internalGetGlobalState,_internalIso:()=>isomorph_default,_internalSetInitialState:()=>_internalSetInitialState,addAzureBlobHeaders:()=>addAzureBlobHeaders,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,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,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:()=>utf8ByteLength,withCurrent:()=>withCurrent,withDataset:()=>withDataset,withExperiment:()=>withExperiment,withLogger:()=>withLogger,withParent:()=>withParent,wrapAISDK:()=>wrapAISDK,wrapAISDKModel:()=>wrapAISDKModel,wrapAgentClass:()=>wrapAgentClass,wrapAnthropic:()=>wrapAnthropic,wrapClaudeAgentSDK:()=>wrapClaudeAgentSDK,wrapCohere:()=>wrapCohere,wrapGoogleADK:()=>wrapGoogleADK,wrapGoogleGenAI:()=>wrapGoogleGenAI,wrapHuggingFace:()=>wrapHuggingFace,wrapMastraAgent:()=>wrapMastraAgent,wrapMistral:()=>wrapMistral,wrapOpenAI:()=>wrapOpenAI,wrapOpenAIv4:()=>wrapOpenAIv4,wrapOpenRouter:()=>wrapOpenRouter,wrapOpenRouterAgent:()=>wrapOpenRouterAgent,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=>{},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 getIdGenerator(){return void 0!==globalThis.BRAINTRUST_ID_GENERATOR?new globalThis.BRAINTRUST_ID_GENERATOR:new UUIDGenerator}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 p,c,l=6;if(o){const t=l+16;p=uuid2.stringify(n.subarray(l,t)),l=t}if(a){let t=l+INTEGER_ENCODING_NUM_BYTES;const e=n.readInt32BE(l);l=t,t=l+e,c=JSON.parse(n.subarray(l,t).toString("utf-8")),l=t}const u=(()=>{if(!i)return;let t=l+16;const e=uuid2.stringify(n.subarray(l,t));l=t,t=l+16;const r=uuid2.stringify(n.subarray(l,t));l=t;const o=s?uuid2.stringify(n.subarray(l)):n.subarray(l).toString("utf-8");return new SpanRowIdsV2({rowId:o,spanId:e,rootSpanId:r})})();return new t({objectType:r,objectId:p,computeObjectMetadataArgs:c,rowIds:u})}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:this.data.object_type;throw 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"]);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])=>{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 p(t){i.push(t),s+=o(t)}function c(){a.push(i),i=[],s=0}for(const t of e){const e=o(t);i.length>0&&!(e+s<r&&i.length<n)&&c(),p(t)}return i.length>0&&c(),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:this.data.object_type;throw 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"]),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()}),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(),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(),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()}),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(),distance_threshold:import_v36.z.number().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")}).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")}),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")}),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")}).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()}),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()}),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.object({}).partial().passthrough(),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(),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(),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")}),EvalStatusPageTheme=import_v36.z.enum(["light","dark"]),EvalStatusPageConfig=import_v36.z.object({score_columns:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),metric_columns:import_v36.z.union([import_v36.z.array(import_v36.z.string()),import_v36.z.null()]),grouping_field:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),filter:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),sort_by:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]),sort_order:import_v36.z.union([import_v36.z.enum(["asc","desc"]),import_v36.z.null()]),api_key:import_v36.z.union([import_v36.z.string(),import_v36.z.null()])}).partial(),EvalStatusPage=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(),logo_url:import_v36.z.union([import_v36.z.string(),import_v36.z.null()]).optional(),theme:EvalStatusPageTheme,config:EvalStatusPageConfig}),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(),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.object({}).partial().passthrough(),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()}),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(),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"]),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"),sampling_rate:import_v36.z.number().gte(0).lte(1),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()}),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"),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()})]),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.object({type:import_v36.z.literal("aws_iam"),role_arn:import_v36.z.string(),external_id: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("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])}),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.object({}).partial().passthrough(),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()]),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()]),online:OnlineScoreConfig}).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(),last_active_at:import_v36.z.union([import_v36.z.number(),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"]),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)):"string"==typeof n?e.feed(n):r.enqueue(n)},async flush(t){t.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}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,e)}clear(){this.cache.clear()}};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),n=this.memoryCache.get(e);if(void 0!==n)return n;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),n=this.memoryCache.get(e);if(void 0!==n)return n;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,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 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:SpanComponentsV3}function getContextManager(){return globalThis.BRAINTRUST_CONTEXT_MANAGER?new globalThis.BRAINTRUST_CONTEXT_MANAGER:new BraintrustContextManager}var _globalState,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""}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,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 n=new LRUCache({max:Number(isomorph_default.getEnv("BRAINTRUST_PROMPT_CACHE_MEMORY_MAX"))??1024}),r=canUseDiskCache()?new DiskCache({cacheDir:isomorph_default.getEnv("BRAINTRUST_PROMPT_CACHE_DIR")??`${isomorph_default.getEnv("HOME")??isomorph_default.homedir()}/.braintrust/prompt_cache`,max:Number(isomorph_default.getEnv("BRAINTRUST_PROMPT_CACHE_DISK_MAX"))??1<<20}):void 0;this.promptCache=new PromptCache({memoryCache:n,diskCache:r});const o=new LRUCache({max:Number(isomorph_default.getEnv("BRAINTRUST_PARAMETERS_CACHE_MEMORY_MAX"))??1024}),a=canUseDiskCache()?new DiskCache({cacheDir:isomorph_default.getEnv("BRAINTRUST_PARAMETERS_CACHE_DIR")??`${isomorph_default.getEnv("HOME")??isomorph_default.homedir()}/.braintrust/parameters_cache`,max:Number(isomorph_default.getEnv("BRAINTRUST_PARAMETERS_CACHE_DISK_MAX"))??1<<20}):void 0;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(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){setInitialTestState();const n=_internalGetGlobalState(),r=e??t,o=new LazyValue((async()=>({project:{id:r,name:r,fullInfo:{}},experiment:{id:t,name:t,fullInfo:{}}})));return new Experiment2(n,o)}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){const{headers:r,...o}=n||{},a=this.fetch,i=this.base_url,s=this.headers;return await checkResponse(await a(_urljoin(i,t),{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",...s,...r},body:"string"==typeof e?e:e?JSON.stringify(e):void 0,keepalive:!0,...o}))}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}`);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,p,c;try{({signedUrl:s,headers:p}=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(p,s);try{c=await checkResponse(await fetch(s,{method:"PUT",headers:p,body:i}))}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:c}};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(!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=r?JSON.stringify(t,null,2):JSON.stringify(t);super({data:new Blob([a],{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:p,source:c}){const l=c??"external";if(!VALID_SOURCES.includes(l))throw new Error(`source must be one of ${VALID_SOURCES}`);if(isEmpty2(a)&&isEmpty2(o)&&isEmpty2(s)&&isEmpty2(p))throw new Error("At least one of scores, expected, tags, or comment must be specified");const u=validateAndSanitizeExperimentLogPartialArgs({scores:a,metadata:i,expected:o,tags:s}),{metadata:m,...d}=deepCopyEvent(u),g=Object.fromEntries(Object.entries(d).filter((([t,e])=>!isEmpty2(e)))),_=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 _(),[AUDIT_SOURCE_FIELD]:l,[AUDIT_METADATA_FIELD]:m,[IS_MERGE_FIELD]:!0})));t.bgLogger().log([e])}if(!isEmpty2(p)){const e=new LazyValue((async()=>({id:(0,import_uuid2.v4)(),created:(new Date).toISOString(),origin:{id:r},comment:{text:p},...await _(),[AUDIT_SOURCE_FIELD]:l,[AUDIT_METADATA_FIELD]:m})));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}:{}})),p=async()=>new SpanComponentsV3({object_type:e,object_id:await n.get()}).objectIdFields(),c=new LazyValue((async()=>({id:r,...s,...await p(),[IS_MERGE_FIELD]:!0})));t.bgLogger().log([c])}function updateSpan({exported:t,state:e,...n}){const r=e??_globalState,o=getSpanComponentsClass().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=getSpanComponentsClass().fromStr(t),a=spanObjectTypeV3ToString(e.data.object_type),[i,s,p]=await Promise.all([r(),o(),spanComponentsToObjectId({components:e,state:n})]),c=e.data.row_id;if(!c)throw new Error("Span slug does not refer to an individual row");return`${s}/app/${i}/object?${new URLSearchParams({object_type:a,object_id:p,id:c})}`}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;if(t.parent){if(t.parentSpanIds)throw new Error("Cannot specify both parent and parentSpanIds");const o=getSpanComponentsClass().fromStr(t.parent);if(t.parentObjectType!==o.data.object_type)throw new Error(`Mismatch between expected span parent object type ${t.parentObjectType} and provided type ${o.data.object_type}`);const a=spanComponentsToObjectIdLambda(t.state,o);e=new LazyValue((async()=>{const e=await a();if(await t.parentObjectId.get()!==e)throw new Error(`Mismatch between expected span parent object id ${await t.parentObjectId.get()} and provided id ${e}`);return await t.parentObjectId.get()})),o.data.row_id&&(n={spanId:o.data.span_id,rootSpanId:o.data.root_span_id}),r=t.propagatedEvent??o.data.propagated_event??void 0}else e=t.parentObjectId,n=t.parentSpanIds,r=t.propagatedEvent;return{parentObjectType:t.parentObjectType,parentObjectId:e,parentComputeObjectMetadataArgs:t.parentComputeObjectMetadataArgs,parentSpanIds:n,propagatedEvent:r}}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)}};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:utf8ByteLength(e)}}}}function utf8ByteLength(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,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 p=Number(isomorph_default.getEnv("BRAINTRUST_FLUSH_BACKPRESSURE_BYTES"));!isNaN(p)&&p>0&&(this._flushBackpressureBytes=p);const c=isomorph_default.getEnv("BRAINTRUST_FAILED_PUBLISH_PAYLOADS_DIR");c&&(this.failedPublishPayloadsDir=c);const l=isomorph_default.getEnv("BRAINTRUST_ALL_PUBLISH_PAYLOADS_DIR");l&&(this.allPublishPayloadsDir=l),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}}})())),p=await Promise.all(s);this._pendingBytes=Math.max(0,this._pendingBytes-o);const c=p.map((t=>"success"===t.type?void 0:t.value)).filter((t=>void 0!==t));if(c.length)throw new AggregateError(c,"Encountered the following errors while logging:");const l=[];for(const t of r)try{const e=await t.upload();if("error"===e.upload_status)throw new Error(e.error_message)}catch(t){l.push(t)}if(1===l.length)throw l[0];if(l.length>1)throw new AggregateError(l,"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=utf8ByteLength(a),s=r&&i>n;this.allPublishPayloadsDir&&await t.writePayloadToDir({payloadDir:this.allPublishPayloadsDir,payload:a});let p=null;const c=s?e.map((t=>t.overflowMeta)):null;for(let e=0;e<this.numTries;e++){const n=now();let r;try{if(c){if(!p){const t=await this.requestLogs3OverflowUpload(o,{rows:c,sizeBytes:i});await this._uploadLogs3OverflowPayload(o,t,a),p=t}await o.post_json("logs3",constructLogs3OverflowRequest(p.key))}else await o.post_json("logs3",a)}catch(t){r=t}if(void 0===r)return;const s=e+1<this.numTries,l=s?"":" Retrying",u=r instanceof FailedHTTPResponse?`${r.status} (${r.text}): ${r.data}`:`${r}`,m=`log request failed. Elapsed time: ${(now()-n)/1e3} seconds. Payload size: ${i}.${l}\nError: ${u}`;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(m);if(debugLogger.warn(m),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 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,parameters:s,baseExperiment:p,isPublic:c,open:l,update:u,appUrl:m,apiKey:d,orgName:g,forceLogin:_,fetch:h,metadata:f,tags:v,gitMetadataSettings:y,projectId:b,baseExperimentId:z,repoInfo:S,state:w}=n;if(!r&&!b)throw new Error("Must specify at least one of project or projectId");if(l&&u)throw new Error("Cannot open and update an experiment at the same time");const T=w??_globalState;if(T.enforceQueueSizeLimit(!1),l){if(isEmpty2(o))throw new Error("Cannot open an experiment without specifying its name");const t=new LazyValue((async()=>{await T.login({apiKey:d,appUrl:m,orgName:g,fetch:h,forceLogin:_});const t={project_name:r,project_id:b,org_name:T.orgName,experiment_name:o},e=await T.appConn().post_json("api/experiment/get",t);if(0===e.length)throw new Error(`Experiment ${o} not found in project ${b??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(w??_globalState,t)}const C=new LazyValue((async()=>{await T.login({apiKey:d,appUrl:m,orgName:g});const t={project_name:r,project_id:b,org_id:T.orgId,update:u};o&&(t.experiment_name=o),a&&(t.description=a);const e=await(async()=>{if(S)return S;let t={...T.gitMetadataSettings||{collect:"all"}};return y&&(t=mergeGitMetadataSettings(t,y)),await isomorph_default.getRepoInfo(t)})();e&&(t.repo_info=e),z?t.base_exp_id=z:p?t.base_experiment=p:t.ancestor_commits=await isomorph_default.getPastNAncestors(),void 0!==i&&("id"in i&&"string"==typeof i.id&&!("__braintrust_dataset_marker"in i)?(t.dataset_id=i.id,"version"in i&&void 0!==i.version&&(t.dataset_version=i.version)):(t.dataset_id=await i.id,t.dataset_version=await i.version())),void 0!==s&&(RemoteEvalParameters.isParameters(s)?(t.parameters_id=s.id,t.parameters_version=s.version):(t.parameters_id=s.id,void 0!==s.version&&(t.parameters_version=s.version))),void 0!==c&&(t.public=c),f&&(t.metadata=f),v&&(validateTags(v),t.tags=v);let n=null;for(;;)try{n=await T.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(T).warn(`Base experiment ${t.base_experiment} not found.`),delete t.base_experiment}return{project:{id:n.project.id,name:n.project.name,fullInfo:n.project},experiment:{id:n.experiment.id,name:n.experiment.name,created:n.experiment.created,fullInfo:n.experiment}}})),A=new Experiment2(T,C,void 0!==i&&"version"in i?i:void 0);return(n.setCurrent??1)&&(T.currentExperiment=A),A}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))}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,appUrl:s,apiKey:p,orgName:c,fetch:l,forceLogin:u,projectId:m,metadata:d,useOutput:g,state:_,_internal_btql:h}=n,f=_??_globalState,v=new LazyValue((async()=>{await f.login({orgName:c,apiKey:p,appUrl:s,fetch:l,forceLogin:u});const t={org_id:f.orgId,project_name:r,project_id:m,dataset_name:o,description:a,metadata:d},e=await f.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}}}));return new Dataset2(_??_globalState,v,i,g,h)}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:p,fetch:c,state:l}=t||{},u=void 0===r||r,m={project_name:e,project_id:n},d={org_name:i,app_url:o,project_name:e,project_id:n},g=l??_globalState;g.setDebugLogLevel(p),g.enforceQueueSizeLimit(!0);const _=new LazyValue((async()=>(await g.login({orgName:i,apiKey:a,appUrl:o,forceLogin:s,fetch:c}),computeLoggerMetadata(g,m)))),h=new Logger(g,_,{asyncFlush:u,computeMetadataArgs:m,linkArgs:d});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:p,apiKey:c,orgName:l,fetch:u,forceLogin:m,state:d}){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 _=d??_globalState;let h;try{await _.login({orgName:l,apiKey:c,appUrl:p,fetch:u,forceLogin:m}),a?(h=await _.apiConn().get_json(`v1/prompt/${a}`,g),h&&(h={objects:[h]})):h=await _.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(_).warn("Failed to load prompt, attempting to fall back to cache:",i),a){if(s=await _.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 _.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 f=Prompt.parse(h.objects[0]),v=new Prompt2(f,i||{},s);try{a?await _.promptCache.set({id:a},v):n&&await _.promptCache.set({slug:n,projectId:e,projectName:t,version:r??"latest"},v)}catch(t){debugLogger.forState(_).warn("Failed to set prompt in cache:",t)}return v}async function loadParameters({projectName:t,projectId:e,slug:n,version:r,environment:o,id:a,appUrl:i,apiKey:s,orgName:p,fetch:c,forceLogin:l,state:u}){const m=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 d=u??_globalState;let g;try{await d.login({orgName:p,apiKey:s,appUrl:i,fetch:c,forceLogin:l}),a?(g=await d.apiConn().get_json(`v1/function/${a}`,{...m}),g&&(g={objects:[g]})):g=await d.apiConn().get_json("v1/function",{project_name:t,project_id:e,slug:n,function_type:"parameters",...m})}catch(i){if(r||o)throw new Error(`Parameters not found with specified parameters: ${i}`);let s;if(debugLogger.forState(d).warn("Failed to load parameters, attempting to fall back to cache:",i),a){if(s=await d.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 d.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 _=parametersRowSchema.parse(g.objects[0]),h=new RemoteEvalParameters(_);try{a?await d.parametersCache.set({id:a},h):n&&await d.parametersCache.set({slug:n,projectId:e,projectName:t,version:r??"latest"},h)}catch(t){debugLogger.forState(d).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=isomorph_default.getEnv("BRAINTRUST_API_KEY"),orgName:r=isomorph_default.getEnv("BRAINTRUST_ORG_NAME"),fetch:o=globalThis.fetch}=t||{},a=isomorph_default.getEnv("BRAINTRUST_APP_PUBLIC_URL")||e,i=new BraintrustState(t);i.resetLoginInfo(),i.appUrl=e,i.appPublicUrl=a;let s=null;if(!n)throw new Error("Please specify an api key (e.g. by setting BRAINTRUST_API_KEY).");if(n===TEST_API_KEY){const t=[{id:"test-org-id",name:"test-org-name",api_url:"https://braintrust.dev/fake-api-url"}];return i.loggedIn=!0,i.loginToken=TEST_API_KEY,_saveOrgInfo(i,t,t[0].name),i}{const t=await checkResponse(await o(_urljoin(i.appUrl,"/api/apikey/login"),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`}}));if(_saveOrgInfo(i,(await t.json()).org_info,r),!i.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(s=i.apiConn(),s.set_token(n),!s)throw new Error("Conn should be set at this point (a bug)");s.make_long_lived(),i.appConn().set_token(n),i.proxyUrl&&i.proxyConn().set_token(n),i.loginToken=s.token,i.loggedIn=!0,i.loginReplaceApiConn(s)}return i}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 getSpanParentObject(t){const e=t?.state??_globalState,n=currentSpan({state:e});if(!Object.is(n,NOOP_SPAN))return n;const r=t?.parent??e.currentParent.getStore();if(r)return getSpanComponentsClass().fromStr(r);const o=currentExperiment();if(o)return o;const a=currentLogger(t);return a||NOOP_SPAN}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}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,n=getSpanParentObject({asyncFlush:t?.asyncFlush,parent:t?.parent,state:e});if(n instanceof SpanComponentsV3||n instanceof SpanComponentsV4){const r=n.data.row_id?{spanId:n.data.span_id,rootSpanId:n.data.root_span_id}:void 0;return{span:new SpanImpl({state:e,...t,parentObjectType:n.data.object_type,parentObjectId:new LazyValue(spanComponentsToObjectIdLambda(e,n)),parentComputeObjectMetadataArgs:n.data.compute_object_metadata_args??void 0,parentSpanIds:r,propagatedEvent:t?.propagatedEvent??n.data.propagated_event??void 0}),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}else 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){this.objectType=t,this.pinnedVersion=e,this.mutateRecord=n,this._internal_btql=r}_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")}async*fetchRecordsFromApi(t){const e=await this.getState(),n=await this.id,r=t??DEFAULT_FETCH_BATCH_SIZE,o=this._internal_btql?.limit,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,p=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:!0,query_source:`js_sdk_object_fetcher_${this.objectType}`,...void 0!==this.pinnedVersion?{version:this.pinnedVersion}:{}},{headers:{"Accept-Encoding":"gzip"}}),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,p++,p>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)()}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,p,c;if(e){if(await this.flush(),void 0===r){const t=await this.fetchBaseExperiment();null!==t&&(r=t.id,c=t.name)}try{const t=await o.apiConn().get_json("/experiment-comparison2",{experiment_id:await this.id,base_experiment_id:r},3);s=t.scores,p=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={},p={}}}return{projectName:(await this.project).name,experimentName:await this.name,projectId:(await this.project).id,experimentId:await this.id,projectUrl:a,experimentUrl:i,comparisonExperimentName:c,scores:s??{},metrics:p??{}}}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()}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.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;kind="span";constructor(t){this._state=t.state;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"})(),p={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 c=_resolveSpanIds(t.spanId,t.parentSpanIds,!0,this._state.idGenerator,this._state.contextManager);this._spanId=c.spanId,this._rootSpanId=c.rootSpanId,this._spanParents=c.spanParents,this.isMerge=!1,this.logInternal({event:a,internalData:p}),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,metadata:o.metadata,span_id:this._spanId,span_parents:this._spanParents,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})})}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}),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()}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){const a=r??DEFAULT_IS_LEGACY_DATASET;a&&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),a)),o),this.state=t,this.lazyMetadata=e}lazyMetadata;__braintrust_dataset_marker=!0;newRecords=0;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 getState(){return await this.lazyMetadata.get(),this.state}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,isMerge:i}){return new LazyValue((async()=>{const s=await this.id;return{id:t,input:e,expected:void 0===n?a:n,tags:o,dataset_id:s,created:i?void 0:(new Date).toISOString(),metadata:r,...i?{[IS_MERGE_FIELD]:!0}:{}}}))}insert({input:t,expected:e,metadata:n,tags:r,id:o,output:a}){this.validateEvent({metadata:n,expected:e,output:a,tags:r});const i=o||(0,import_uuid2.v4)(),s=this.createArgs(deepCopyEvent({id:i,input:t,expected:e,metadata:n,tags:r,output:a,isMerge:!1}));return this.state.bgLogger().log([s]),this.newRecords++,i}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 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}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),p={input:e,...s.success?s.data:{}},c=this.templateFormat,l=parseTemplateFormat(n.templateFormat??c),u=t.renderPrompt({prompt:i,buildArgs:e,options:{...n,templateFormat:l}});if("chat"===r){if("chat"!==u.type)throw new Error("Prompt is a completion prompt. Use buildCompletion() instead");return{...renderPromptParams(o,p,{strict:n.strict,templateFormat:l}),...a,messages:u.messages,...u.tools?{tools:ChatCompletionTool.array().parse(JSON.parse(u.tools))}:void 0}}if("completion"===r){if("completion"!==u.type)throw new Error("Prompt is a chat prompt. Use flavor: 'chat' instead");return{...renderPromptParams(o,p,{strict:n.strict,templateFormat:l}),...a,prompt:u.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}__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"}});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 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 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 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:t.name,spanAttributes:r,spanInfoMetadata:isObject(n?.metadata)?n.metadata:void 0}}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 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}),p=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:p});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}),p=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:p});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,p;if(e.aggregateChunks){const r=e.aggregateChunks(o,n.result,n);t=r.output,s=r.metrics,p=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!==p?{metadata:p}:{},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}),p=getCurrentUnixTimestamp();r.set(n,{span:s,startTime:p});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 p=!0;s.on("chunk",(t=>{if(p){const t=getCurrentUnixTimestamp();a.log({metrics:{time_to_first_token:t-i}}),p=!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(p){const t=getCurrentUnixTimestamp();a.log({metrics:{time_to_first_token:t-i}}),p=!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 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){console.error(`Error extracting input for ${n}:`,t)}return{span:i,startTime:s}}function ensureSpanStateForEvent(t,e,n,r){const o=n,a=t.get(o);if(a)return a;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=>{const o=ensureSpanStateForEvent(e,n,t,r).span;return i.wrapSpanForStore(o)})),()=>{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){console.error(`Error in onComplete 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=>{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){console.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=>{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;patchStreamIfNeeded(a.result,{onChunk:()=>{void 0===n&&(n=getCurrentUnixTimestamp())},onComplete:p=>{try{let t,r,c;if(e.aggregateChunks){const n=e.aggregateChunks(p,a.result,a,s);t=n.output,r=n.metrics,c=n.metadata}else t=e.extractOutput(p,a),r=e.extractMetrics(p,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&&p.length>0&&(r.time_to_first_token=getCurrentUnixTimestamp()-s),runStreamingCompletionHook({channelName:o,chunks:p,config:e,endEvent:a,...void 0!==c?{metadata:c}:{},metrics:r,output:t,result:a.result,span:i,startTime:s}),i.log({output:t,...void 0!==c?{metadata:c}:{},metrics:r})}catch(t){console.error(`Error extracting output for ${o}:`,t)}finally{i.end(),r.delete(t)}},onError:e=>{i.log({error:e.message}),i.end(),r.delete(t)}})}else 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){console.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 traceSyncStreamChannel(t,e){const n=t.tracingChannel(),r=new WeakMap,o=t.channelName,a=bindCurrentSpanStoreToStart(n,r,e,o),i={start:t=>{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 p={...s,result:n};if(e.patchResult?.({channelName:o,endEvent:p,result:n,span:a,startTime:i}))return;const c=n;if(!isSyncStreamLike(c))return a.end(),void r.delete(t);let l=!0;c.on("chunk",(()=>{l&&(a.log({metrics:{time_to_first_token:getCurrentUnixTimestamp()-i}}),l=!1)})),c.on("chatCompletion",(t=>{try{hasChoices(t)&&a.log({output:t.choices})}catch(t){console.error(`Error extracting chatCompletion for ${o}:`,t)}})),c.on("event",(t=>{if(e.extractFromEvent)try{l&&(a.log({metrics:{time_to_first_token:getCurrentUnixTimestamp()-i}}),l=!1);const n=e.extractFromEvent(t);n&&Object.keys(n).length>0&&a.log(n)}catch(t){console.error(`Error extracting event for ${o}:`,t)}})),c.on("end",(()=>{a.end(),r.delete(t)})),c.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,p,c={};for(const e of t){e.usage&&(c={...c,...parseMetricsFromUsage(e.usage)});const t=e.choices?.[0];if(!t)continue;t.finish_reason&&(p=t.finish_reason),s=aggregateChatLogprobs(s,t.logprobs);const n=t.delta;if(n&&(n.finish_reason&&(p=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 c=withCachedMetric(c,e,n),{metrics:c,output:[{index:0,message:{role:r,content:o,...void 0!==a?{refusal:a}:{},tool_calls:i},logprobs:s??null,finish_reason:p}]}}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}:{}}}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=>{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 toErrorMessage(t){return t instanceof Error?t.message:String(t)}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:toErrorMessage(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:e instanceof Error?e.message:String(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 p=e.join("");s.length>0&&(p=s.every(isTextContentBlock)&&s.every((t=>!t.citations?.length))?s.map((t=>t.text)).join(""):{...o?{role:o}:{},content:s});const c=finalizeAnthropicTokens(a);return{output:p,metrics:Object.fromEntries(Object.entries(c).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",p=new Attachment({data:i,filename:`${"document"===e?"document":"image"}.${s}`,contentType:n});return{...t,data:p}}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.push({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 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"})}),DEFAULT_DENY_OUTPUT_PATHS=["roundtrips[].request.body","roundtrips[].response.headers","rawResponse.headers","responseMessages","request.body","response.body","response.headers","steps[].request.body","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"),RUNTIME_DENY_OUTPUT_PATHS=Symbol.for("braintrust.ai-sdk.deny-output-paths"),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(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),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),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),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),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),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})}))}};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(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"prepareCall"in e&&"function"==typeof e.prepareCall&&(e.prepareCall="[Function]"),{input: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 prepareAISDKCallInput(t,e,n,r){const{input:o,outputPromise:a}=processAISDKCallInput(t);a&&o&&"object"==typeof o&&a.then((t=>{n.log({input:{...o,...t}})})).catch((()=>{}));const i=extractMetadataFromCallParams(t,e.self),s=prepareAISDKChildTracing(t,e.self,n,r,e.aiSDK);return e.modelWrapped=s.modelWrapped,s.cleanup&&(e.__braintrust_ai_sdk_cleanup=s.cleanup),{input:o,metadata:i}}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 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 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);return r&&(n.tools=r),n}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 prepareAISDKChildTracing(t,e,n,r,o){const a=[],i=new WeakSet,s=new WeakSet;let p=!1;const c=t=>{const e=resolveAISDKModel(t,o);if(!e||"object"!=typeof e||"function"!=typeof e.doGenerate||i.has(e)||e[AUTO_PATCHED_MODEL])return e;i.add(e),e[AUTO_PATCHED_MODEL]=!0,p=!0;const s=e.doGenerate,c=e.doStream,l=buildAISDKChildMetadata(e);return e.doGenerate=async function(t){return n.traced((async n=>{const o=await Reflect.apply(s,e,[t]);return n.log({output:processAISDKOutput(o,r),metrics:extractTokenMetrics(o),...buildResolvedMetadataPayload(o)}),o}),{name:"doGenerate",spanAttributes:{type:"llm"},event:{input:processAISDKCallInput(t).input,metadata:l}})},c&&(e.doStream=async function(t){const o=n.startSpan({name:"doStream",spanAttributes:{type:"llm"},event:{input:processAISDKCallInput(t).input,metadata:l}}),a=await withCurrent(o,(()=>Reflect.apply(c,e,[t]))),i=getCurrentUnixTimestamp();let s;const p={};let u="",m="";const d=[];let g;const _=new TransformStream({transform(t,e){switch(void 0===s&&(s=getCurrentUnixTimestamp()),t.type){case"text-delta":u+=extractTextDelta(t);break;case"reasoning-delta":t.delta?m+=t.delta:t.text&&(m+=t.text);break;case"tool-call":d.push(t);break;case"object":g=t.object;break;case"raw":if(t.rawValue){const e=t.rawValue;e.delta?.content?u+=e.delta.content:e.choices?.[0]?.delta?.content?u+=e.choices[0].delta.content:"string"==typeof e.text?u+=e.text:"string"==typeof e.content&&(u+=e.content)}break;case"finish":p.text=u,p.reasoning=m,p.toolCalls=d,p.finishReason=t.finishReason,p.usage=t.usage,void 0!==g&&(p.object=g);const e=extractTokenMetrics(p);void 0!==s&&(e.time_to_first_token=Math.max(s-i,1e-6)),o.log({output:processAISDKOutput(p,r),metrics:e,...buildResolvedMetadataPayload(p)}),o.end()}e.enqueue(t)}});return{...a,stream:a.stream.pipeThrough(_)}}),a.push((()=>{e.doGenerate=s,c&&(e.doStream=c),delete e[AUTO_PATCHED_MODEL]})),e},l=(t,e)=>{if(null==t||"object"!=typeof t||!("execute"in t)||"function"!=typeof t.execute||s.has(t)||t[AUTO_PATCHED_TOOL])return;s.add(t),t[AUTO_PATCHED_TOOL]=!0;const r=t.execute;t.execute=function(...t){const o=Reflect.apply(r,this,t);return isAsyncGenerator(o)?async function*(){const r=n.startSpan({name:e,spanAttributes:{type:"tool"}});r.log({input:1===t.length?t[0]:t});try{let t;for await(const e of o)t=e,yield e;r.log({output:t})}catch(t){throw r.log({error:t instanceof Error?t.message:String(t)}),t}finally{r.end()}}():n.traced((async e=>{e.log({input:1===t.length?t[0]:t});const n=await o;return e.log({output:n}),n}),{name:e,spanAttributes:{type:"tool"}})},a.push((()=>{t.execute=r,delete t[AUTO_PATCHED_TOOL]}))},u=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=c(t.model);"string"==typeof t.model&&e&&"object"==typeof e&&(t.model=e),u(t.tools)}if(e&&"object"==typeof e){const t=e;if(void 0!==t.model){const e=c(t.model);"string"==typeof t.model&&e&&"object"==typeof e&&(t.model=e)}if(t.settings&&"object"==typeof t.settings){if(void 0!==t.settings.model){const e=c(t.settings.model);"string"==typeof t.settings.model&&e&&"object"==typeof e&&(t.settings.model=e)}void 0!==t.settings.tools&&u(t.settings.tools)}}return{cleanup:a.length>0?()=>{for(;a.length>0;)a.pop()?.()}:void 0,modelWrapped:p}}function finalizeAISDKChildTracing(t){const e=t?.__braintrust_ai_sdk_cleanup;t&&"function"==typeof e&&(e(),delete t.__braintrust_ai_sdk_cleanup)}function patchAISDKStreamingResult(t){const{defaultDenyOutputPaths:e,endEvent:n,result:r,span:o,startTime:a}=t;if(!r||"object"!=typeof r)return!1;const i=r;if(attachKnownResultPromiseHandlers(i),isReadableStreamLike(i.baseStream)){let t;const s=i.baseStream.pipeThrough(new TransformStream({transform(e,n){void 0===t&&(t=getCurrentUnixTimestamp()),n.enqueue(e)},async flush(){const i=extractTopLevelAISDKMetrics(r,n);void 0===i.time_to_first_token&&void 0!==t&&(i.time_to_first_token=t-a);const s=await processAISDKStreamingOutput(r,resolveDenyOutputPaths(n,e)),p=buildResolvedMetadataPayload(r).metadata;o.log({output:s,...p?{metadata:p}:{},metrics:i}),finalizeAISDKChildTracing(n),o.end()}}));return Object.defineProperty(i,"baseStream",{configurable:!0,enumerable:!0,value:s,writable:!0}),!0}const s=findAsyncIterableField(i,["partialObjectStream","textStream","fullStream","stream"]);if(!s)return!1;let p;const c=createPatchedAsyncIterable(s.stream,{onChunk:()=>{void 0===p&&(p=getCurrentUnixTimestamp())},onComplete:async()=>{const t=extractTopLevelAISDKMetrics(r,n);void 0===t.time_to_first_token&&void 0!==p&&(t.time_to_first_token=p-a);const i=await processAISDKStreamingOutput(r,resolveDenyOutputPaths(n,e)),s=buildResolvedMetadataPayload(r).metadata;o.log({output:i,...s?{metadata:s}:{},metrics:t}),finalizeAISDKChildTracing(n),o.end()},onError:t=>{o.log({error:t.message}),finalizeAISDKChildTracing(n),o.end()}});return Object.defineProperty(i,s.field,{configurable:!0,enumerable:!0,value:c,writable:!0}),!0}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.pipeThrough}function isAsyncIterableLike(t){return null!=t&&"object"==typeof t&&"function"==typeof t[Symbol.asyncIterator]}function findAsyncIterableField(t,e){for(const n of e)try{const e=t[n];if(isAsyncIterableLike(e))return{field:n,stream:e}}catch{}return null}function createPatchedAsyncIterable(t,e){return{async*[Symbol.asyncIterator](){try{for await(const n of t)e.onChunk(n),yield n;await e.onComplete()}catch(t){throw e.onError(t instanceof Error?t:new Error(String(t))),t}}}}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 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;return normalizeAISDKLoggedOutput(omit(extractSerializableOutputFields(t),e))}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=firstNumber(n.inputTokens?.total,n.inputTokens,n.promptTokens,n.prompt_tokens);void 0!==o&&(e.prompt_tokens=o);const a=firstNumber(n.outputTokens?.total,n.outputTokens,n.completionTokens,n.completion_tokens);void 0!==a&&(e.completion_tokens=a);const i=firstNumber(n.totalTokens,n.tokens,n.total_tokens);void 0!==i&&(e.tokens=i);const s=firstNumber(n.inputTokens?.cacheRead,n.inputTokenDetails?.cacheReadTokens,n.cachedInputTokens,n.promptCachedTokens,n.prompt_cached_tokens);void 0!==s&&(e.prompt_cached_tokens=s);const p=firstNumber(n.inputTokens?.cacheWrite,n.inputTokenDetails?.cacheWriteTokens,n.promptCacheCreationTokens,n.prompt_cache_creation_tokens,extractAnthropicCacheCreationTokens(t));void 0!==p&&(e.prompt_cache_creation_tokens=p);const c=firstNumber(n.promptReasoningTokens,n.prompt_reasoning_tokens);void 0!==c&&(e.prompt_reasoning_tokens=c);const l=firstNumber(n.completionCachedTokens,n.completion_cached_tokens);void 0!==l&&(e.completion_cached_tokens=l);const u=firstNumber(n.outputTokens?.reasoning,n.reasoningTokens,n.completionReasoningTokens,n.completion_reasoning_tokens,n.reasoning_tokens,n.thinkingTokens,n.thinking_tokens);void 0!==u&&(e.completion_reasoning_tokens=u,e.reasoning_tokens=u);const m=firstNumber(n.completionAudioTokens,n.completion_audio_tokens);void 0!==m&&(e.completion_audio_tokens=m);const d=extractCostFromResult(t);return void 0!==d&&(e.estimated_cost=d),e}function extractAnthropicCacheCreationTokens(t){const e=safeSerializableFieldRead(t,"providerMetadata"),n=e?.anthropic;if(n)return firstNumber(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 p=safeSerializableFieldRead(r,"toolCalls");void 0!==p&&(o.toolCalls=p)}return finalizeAISDKChildTracing(n),{output:o,metrics:i,metadata:a}}function extractGetterValues(t){const e={},n=["content","text","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=["steps","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 firstNumber(...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){if(0===e.length)return;const n=e[0],r=e.slice(1);"[]"===n?Array.isArray(t)&&t.forEach((t=>{r.length>0&&omitAtPath(t,r)})):0===r.length?t&&"object"==typeof t&&n in t&&(t[n]="<omitted>"):t&&"object"==typeof t&&n in t&&omitAtPath(t[n],r)}function omit(t,e){const n=deepCopy(t);for(const t of e){omitAtPath(n,parsePath(t))}return n}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 isAsyncIterable2(t){return null!==t&&"object"==typeof t&&Symbol.asyncIterator in t&&"function"==typeof t[Symbol.asyncIterator]}function bindClaudeLocalToolContextToAsyncIterable(t,e){if(!isAsyncIterable2(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 toErrorMessage2(t){return t instanceof Error?t.message:String(t)}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,p=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"}}),c=()=>Reflect.apply(t,this,n),l=t=>(p.log({output:t}),p.end(),t),u=t=>{throw p.log({error:toErrorMessage2(t)}),p.end(),t};return withCurrent(p,(()=>{try{const t=c();return isPromiseLike(t)?t.then(l,u):l(t)}catch(t){return u(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__";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","apiKey","apiKeySource","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 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,n){const r=[];if("string"==typeof t)r.push({content:t,role:"user"});else if(n&&n.length>0)for(const t of n){const e=t.message?.role,n=t.message?.content;e&&void 0!==n&&r.push({content:n,role:e})}const o=[...r,...e];return o.length>0?o:void 0}function formatCapturedMessages(t){return t.length>0?t:[]}async function createLLMSpanForMessages(t,e,n,r,o,a,i,s){if(0===t.length)return;const p=t[t.length-1];if("assistant"!==p.type||!p.message?.usage)return;const c=p.message.model||r.model,l=extractUsageFromMessage(p),u=buildLLMInput(e,n,a),m=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=s??startSpan({name:"anthropic.messages.create",parent:i,spanAttributes:{type:"llm"},startTime:o});d.log({input:u,metadata:c?{model:c}:void 0,metrics:l,output:m});const g=await d.export();await d.end();return{finalMessage:p.message?.content&&p.message?.role?{content:p.message.content,role:p.message.role}:void 0,spanExport:g}}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,p)=>{if("PostToolUse"!==t.hook_event_name||!p)return{};if(o&&(isLocalToolUse(t.tool_name,n)||r.has(t.tool_name)))return{};const c=i.get(p),l=e.get(p);if(c){if(s.has(p))return{};try{const e=t.tool_response,n={...subAgentDetailsToMetadata(a.get(p))};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),c.log({metadata:n,output:e?.content})}finally{c.end(),s.add(p)}if(l)try{l.log({output:t.tool_response})}finally{l.end(),e.delete(p)}return{}}if(!l)return{};try{l.log({output:t.tool_response})}finally{l.end(),e.delete(p)}return{}},postToolUseFailure:async(t,p)=>{if("PostToolUseFailure"!==t.hook_event_name||!p)return{};if(o&&(isLocalToolUse(t.tool_name,n)||r.has(t.tool_name)))return{};const c=i.get(p),l=e.get(p);if(c){if(s.has(p))return{};try{c.log({error:t.error,metadata:subAgentDetailsToMetadata(a.get(p))})}finally{c.end(),s.add(p)}if(l){const n=parseToolName(t.tool_name);try{l.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":p,"gen_ai.tool.name":n.toolName,...n.mcpServer&&{"mcp.server":n.mcpServer}}})}finally{l.end(),e.delete(p)}}return{}}if(!l)return{};const u=parseToolName(t.tool_name);try{l.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":p,"gen_ai.tool.name":u.toolName,...u.mcpServer&&{"mcp.server":u.mcpServer}}})}finally{l.end(),e.delete(p)}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),p=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),spanAttributes:{type:"tool"}});return e.set(i,p),{}},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:p,postToolUse:c,postToolUseFailure:l,subagentStart:u,subagentStop:m}=createToolTracingHooks(e,n,t.mcpServers,r,o,a,i,s),d=t.hooks??{};return{...t,hooks:{...d,PostToolUse:[...d.PostToolUse??[],{hooks:[c]}],PostToolUseFailure:[...d.PostToolUseFailure??[],{hooks:[l]}],PreToolUse:[...d.PreToolUse??[],{hooks:[p]}],SubagentStart:[...d.SubagentStart??[],{hooks:[u]}],SubagentStop:[...d.SubagentStop??[],{hooks:[m]}]}}}async function finalizeCurrentMessageGroup(t){if(0===t.currentMessages.length)return;const e=t.currentMessages[0]?.parent_tool_use_id??null,n=llmParentKey(e);let r=await t.span.export();if(e){const n=t.subAgentSpans.get(e);n&&(r=await n.export())}const o=t.activeLlmSpansByParentToolUse.get(n),a=await createLLMSpanForMessages(t.currentMessages,t.originalPrompt,t.finalResults,t.options,t.currentMessageStartTime,t.capturedPromptMessages,r,o);a&&(e?t.latestLlmParentBySubAgentToolUse.set(e,a.spanExport):t.latestRootLlmParentRef.value=a.spanExport,a.finalMessage&&t.finalResults.push(a.finalMessage)),t.activeLlmSpansByParentToolUse.delete(n);const i=t.currentMessages[t.currentMessages.length-1];i?.message?.usage&&(t.accumulatedOutputTokens+=getNumberProperty(i.message.usage,"output_tokens")||0),t.currentMessages.length=0}function maybeTrackToolUseContext(t,e){if("assistant"!==e.type||!Array.isArray(e.message?.content))return;const n=e.parent_tool_use_id??null;for(const r of e.message.content)"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}))}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),p=n.get(o),c=p?await p.export():await e.export(),l=startSpan({event:{metadata:subAgentDetailsToMetadata(i)},name:s,parent:c,spanAttributes:{type:"task"}});return r.set(o,l),l}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"),p=getNumberProperty(a,"duration_ms"),c={...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!==p&&{"claude_agent_sdk.duration_ms":p}};if("task_started"===e.subtype){const t=getStringProperty(e,"prompt");return o.log({input:t,metadata:c}),!0}const l=getStringProperty(e,"summary");if(l&&(c["claude_agent_sdk.summary"]=l),"task_progress"===e.subtype){const t=getStringProperty(e,"last_tool_name");return t&&(c["claude_agent_sdk.last_tool_name"]=t),o.log({metadata:c,output:l}),!0}const u=getStringProperty(e,"status"),m=getStringProperty(e,"output_file");u&&(c["claude_agent_sdk.task_status"]=u),m&&(c["claude_agent_sdk.output_file"]=m);const d=l||m?{...l&&{summary:l},...m&&{output_file:m}}:void 0;try{o.log({metadata:c,output:d})}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.message?.id;if(n&&n!==t.currentMessageId&&(await finalizeCurrentMessageGroup(t),t.currentMessageId=n,t.currentMessageStartTime=getCurrentUnixTimestamp()),"assistant"===e.type&&e.message?.usage){const n=e.parent_tool_use_id??null,r=llmParentKey(n);if(!t.activeLlmSpansByParentToolUse.has(r)){let e=await t.span.export();if(n){const r=await ensureSubAgentSpan(t.subAgentDetailsByToolUseId,t.span,t.activeToolSpans,t.subAgentSpans,n);e=await r.export()}const o=startSpan({name:"anthropic.messages.create",parent:e,spanAttributes:{type:"llm"},startTime:t.currentMessageStartTime});t.activeLlmSpansByParentToolUse.set(r,o)}t.currentMessages.push(e)}if("result"!==e.type||!e.usage)return;const r=extractUsageFromMessage(e);if(t.currentMessages.length>0&&void 0!==r.completion_tokens){const n=t.currentMessages[t.currentMessages.length-1];if(n?.message?.usage){const o=r.completion_tokens-t.accumulatedOutputTokens;o>=0&&(n.message.usage.output_tokens=o);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 o={};void 0!==e.num_turns&&(o.num_turns=e.num_turns),void 0!==e.session_id&&(o.session_id=e.session_id),Object.keys(o).length>0&&t.span.log({metadata:o})}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,p=!1;const c=new Promise((t=>{s=t}));if(a){i=[];const t=r;n.prompt=async function*(){p=!0;try{for await(const e of t)i.push(e),yield e}finally{s?.()}}()}const l=startSpan({name:"Claude Agent",spanAttributes:{type:"task"}}),u=getCurrentUnixTimestamp();try{l.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 m=new Map,d=new Map,g=new Map,_=new Set,h=new Map,f=new Map,v={value:void 0},y=new Map,b=new Map,z=createClaudeLocalToolContext(),{hasLocalToolHandlers:S,localToolHookNames:w}=prepareLocalToolHandlersInMcpServers(o.mcpServers),T=!0===o[CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION]||S,C=async t=>{const e=h.get(t)??null,n=llmParentKey(e),r=d.get(n);if(r)return r.export();if(e){const t=f.get(e);if(t)return t;return(await ensureSubAgentSpan(y,l,m,g,e)).export()}return v.value?v.value:l.export()};z.resolveLocalToolParent=C,setClaudeLocalToolParentResolver(C);const A=injectTracingHooks(o,C,m,w,T,y,g,_);n.options=A,t.arguments[0]=n,e.set(t,{accumulatedOutputTokens:0,activeLlmSpansByParentToolUse:d,activeToolSpans:m,capturedPromptMessages:i,currentMessageId:void 0,currentMessageStartTime:u,currentMessages:[],endedSubAgentSpans:_,finalResults:[],options:A,originalPrompt:r,processing:Promise.resolve(),promptDone:c,promptStarted:()=>p,span:l,subAgentDetailsByToolUseId:y,subAgentSpans:g,taskIdToToolUseId:b,latestLlmParentBySubAgentToolUse:f,latestRootLlmParentRef:v,toolUseToParent:h,localToolContext:z})},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)}))}},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"})}),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()}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:cleanMetrics(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:cleanMetrics(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)}))}};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,p=null;const c=o??getCurrentUnixTimestamp(),l=()=>(p||(p=startSpan({name:"generate_content_stream",spanAttributes:{type:"llm"},event:{input:e,metadata:n}})),p),u=t=>{if(!s&&p){if(s=!0,t.result){const{end:e,...n}=t.result.metrics,r=extractResponseMetadata(t.result.aggregated);return p.log({...r?{metadata:r}:{},metrics:cleanMetrics(n),output:t.result.aggregated}),void p.end("number"==typeof e?{endTime:e}:void 0)}void 0!==t.error&&p.log({error:t.error instanceof Error?t.error.message:String(t.error)}),p.end()}},m=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],p="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)=>{l();try{const e=await n(...t);return!e.done&&e.value&&(null===i&&(i=getCurrentUnixTimestamp()),a.push(e.value)),e.done&&u({result:aggregateGenerateContentChunks(a,c,i)}),e}catch(t){throw u({error:t}),t}}),r&&(e.return=async(...t)=>{l();try{return await r(...t)}finally{a.length>0?u({result:aggregateGenerateContentChunks(a,c,i)}):u({})}}),o&&(e.throw=async(...t)=>{l();try{return await o(...t)}catch(t){throw u({error:t}),t}}),e[Symbol.asyncIterator]=()=>{const e=p?p():t;return m(e)},t};return m(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 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;if(e instanceof Uint8Array||"undefined"!=typeof Buffer&&Buffer.isBuffer(e)||"string"==typeof e){const t=`file.${n?n.split("/")[1]:"bin"}`,r="string"==typeof e?"undefined"!=typeof Buffer?Buffer.from(e,"base64"):new Uint8Array(atob(e).split("").map((t=>t.charCodeAt(0)))):"undefined"!=typeof Buffer?Buffer.from(e):new Uint8Array(e),o=r instanceof Uint8Array?r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength):r;return{image_url:{url:new Attachment({data:o,filename:t,contentType:n||"application/octet-stream"})}}}}return t}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 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 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 p,c=null,l=null;for(const e of t)if(l=e,e.usageMetadata&&(c=e.usageMetadata),void 0!==e.groundingMetadata&&(p=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 u={},m=[];if(i&&m.push({text:i,thought:!0}),a&&m.push({text:a}),m.push(...s),m.length>0&&l?.candidates){const t=[];for(const e of l.candidates){const n={content:{parts:m,role:"model"}};void 0!==e.finishReason&&(n.finishReason=e.finishReason),void 0!==e.groundingMetadata&&(n.groundingMetadata=e.groundingMetadata,void 0===p&&(p=e.groundingMetadata)),e.safetyRatings&&(n.safetyRatings=e.safetyRatings),t.push(n)}u.candidates=t}return c&&(u.usageMetadata=c,populateUsageMetrics(o,c)),void 0!==p&&(u.groundingMetadata=p),a&&(u.text=a),{aggregated:u,metrics:o}}function cleanMetrics(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","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:""},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),e.set(n,r)}return{choices:[...e.entries()].map((([t,e])=>({index:t,message:{content:e.content,role:e.role??"assistant"},...void 0!==e.finish_reason?{finish_reason:e.finish_reason}:{}})))}}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:"llm",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:p,...c}=i,l=parseOpenRouterModelString(s);return{...c,...void 0!==l.model?{model:l.model}:{},...void 0!==p?{providerRouting:p}:{},...void 0!==e?{httpReferer:e}:{},...void 0!==n?{appTitle:n}:{},...void 0!==r?{appCategories:r}:{},...void 0!==o?{xTitle:o}:{},provider:l.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:p,...c}=i,l=parseOpenRouterModelString(s),u=("string"==typeof p?p:void 0)||l.provider,m=extractOpenRouterUsageMetadata(r),d={...c,...void 0!==l.model?{model:l.model}:{},...m||{},...void 0!==u?{provider:u}:{}};return Object.keys(d).length>0?d: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 p=!1,c=0;const l=async(t,e)=>{if(p)return;p=!0;const n=getFinalOpenRouterCallModelResponse(o,t);if(n){const t=getOpenRouterCallModelRounds(o),a=extractOpenRouterCallModelResultMetadata(n,t.length+1);return r.log({output:extractOpenRouterResponseOutput(n,e),...a?{metadata:a}:{},metrics:aggregateOpenRouterCallModelMetrics(t,n)}),void r.end()}void 0!==e&&r.log({output:e}),r.end()},u=t=>{p||(p=!0,r.log({error:normalizeError(t).message}),r.end())},m=async t=>{if(a)try{await l(await a(),t)}catch{await l(void 0,t)}else await l(void 0,t)};if(a&&(o.getResponse=async(...t)=>await withCurrent(r,(async()=>{try{const e=await a(...t);return await l(e),e}catch(t){throw u(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 m(n),n}catch(t){throw u(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 isAsyncIterable3(n)?wrapAsyncIterableWithSpan({finalize:m,iteratorFactory:()=>n[Symbol.asyncIterator](),onError:u,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=c+1,s=0===c?"initial":"continue";return await traceOpenRouterCallModelTurn({fn:async()=>{const t=await i(...n);return c++,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=c+1;return await traceOpenRouterCallModelTurn({fn:async()=>{const e=await s(...t);return c++,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 isAsyncIterable3(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:"llm",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,p=parseOpenRouterModelString2(a);return{...s,...void 0!==p.model?{model:p.model}:{},...void 0!==i?{providerRouting:i}:{},...void 0!==e?{httpReferer:e}:{},...void 0!==n?{xTitle:n}:{},provider:p.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:p,...c}=i,l=parseOpenRouterModelString2(s),u=("string"==typeof p?p.toLowerCase():void 0)||l.provider,m=extractOpenRouterUsageMetadata2(r),d={...c,...void 0!==l.model?{model:l.model}:{},...m||{},...void 0!==u?{provider:u}:{}};return Object.keys(d).length>0?d: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={};for(const i of t){a={...a,...parseOpenRouterMetricsFromUsage2(i?.usage)};const t=i?.choices?.[0],s=t?.delta;if(!s){void 0!==t?.finish_reason&&(r=t.finish_reason);continue}!e&&s.role&&(e=s.role),"string"==typeof s.content&&(o+=s.content);const p=t?.finishReason??t?.finish_reason??void 0,c=s.finishReason??s.finish_reason??void 0;void 0!==p?r=p:void 0!==c&&(r=c);const l=Array.isArray(s.toolCalls)?s.toolCalls:Array.isArray(s.tool_calls)?s.tool_calls:void 0;if(l)for(const t of l){if(!t?.function)continue;const e=t.index??0,r=n?.[e];if(!r||t.id&&void 0!==r.id&&r.id!==t.id){const r=[...n||[]];r[e]={index:e,id:t.id,type:t.type,function:{name:t.function.name,arguments:t.function.arguments||""}},n=r;continue}const o=r;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:o||void 0,...n?{tool_calls:n}:{}},logprobs:null,finish_reason:r}],metrics:a}}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 p=!1,c=0;const l=async(t,e)=>{if(p)return;p=!0;const n=getFinalOpenRouterCallModelResponse2(o,t);if(n){const t=getOpenRouterCallModelRounds2(o),a=extractOpenRouterCallModelResultMetadata2(n,t.length+1);return r.log({output:extractOpenRouterResponseOutput2(n,e),...a?{metadata:a}:{},metrics:aggregateOpenRouterCallModelMetrics2(t,n)}),void r.end()}void 0!==e&&r.log({output:e}),r.end()},u=t=>{p||(p=!0,r.log({error:normalizeError2(t).message}),r.end())},m=async t=>{if(a)try{await l(await a(),t)}catch{await l(void 0,t)}else await l(void 0,t)};if(a&&(o.getResponse=async(...t)=>await withCurrent(r,(async()=>{try{const e=await a(...t);return await l(e),e}catch(t){throw u(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 m(n),n}catch(t){throw u(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 isAsyncIterable4(n)?wrapAsyncIterableWithSpan2({finalize:m,iteratorFactory:()=>n[Symbol.asyncIterator](),onError:u,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=c+1,s=0===c?"initial":"continue";return await traceOpenRouterCallModelTurn2({fn:async()=>{const t=await i(...n);return c++,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=c+1;return await traceOpenRouterCallModelTurn2({fn:async()=>{const e=await s(...t);return c++,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 isAsyncIterable4(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"}),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(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","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 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 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 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 p=mergeToolCallDeltaPair(n[s],t);n[s]=p;const c=getToolCallIndex(p);void 0===c||r.has(c)||r.set(c,s),"string"!=typeof p.id||o.has(p.id)||o.set(p.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 p=extractMistralResponseMetadata(t);p&&(o={...o||{},...p});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 p=void 0!==s?n.get(s):void 0;if(p||(p=r.get(o)),!p){const t=s??o;p=`${void 0!==s?"index":"position"}:${t}`,e.set(p,{index:t,order:a++})}const c=e.get(p);if(!c)continue;void 0!==s&&(c.index=s,n.set(s,p)),r.set(o,p);const l=isObject(t.delta)?t.delta:void 0;if(l){c.role||"string"!=typeof l.role||(c.role=l.role);const t=extractDeltaText(l.content);t&&(c.content=`${c.content||""}${t}`),c.toolCalls=mergeToolCallDeltas(c.toolCalls,getDeltaToolCalls(l))}const u=getChoiceFinishReason(t);void 0!==u&&(c.finishReason=u)}}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.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=extractAgentName(e),r=findRunnerParentSpan(e,this.activeRunnerSpans),o=extractInvocationContextKey(e),a=startSpan({name:n?`Agent: ${n}`:"Google ADK Agent",spanAttributes:{type:"task"},...r?{parentSpanIds:{spanId:r.spanId,rootSpanId:r.rootSpanId}}:{}}),i=getCurrentUnixTimestamp();try{const t={provider:"google-adk"};n&&(t["google_adk.agent_name"]=n);const r=extractModelName(e);r&&(t.model=r),a.log({metadata:t})}catch{}return o&&n&&this.activeAgentSpans.set(agentContextKey(o,n),a),{span:a,startTime:i,events:[],contextKey:o,name: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:()=>{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=extractToolName(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(),p=getCurrentUnixTimestamp();e.set(t,{span:s,startTime:p})},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:cleanMetrics2(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){if(!t)return;const e=t.agent;return e?.name}function extractModelName(t){if(!t)return;const e=t.agent;return e?.model?"string"==typeof e.model?e.model:"object"==typeof e.model&&"model"in e.model?e.model.model:void 0:void 0}function extractToolCallId(t){const e=t.toolContext;return e?.functionCallId}function extractToolName(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(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:cleanMetrics2(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:cleanMetrics2(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 cleanMetrics2(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","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));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 aggregateCohereChatStreamChunks(t){const e=[],n={},r=[];let o,a,i,s={},p={};for(const c of t){if(!isObject(c))continue;const t="string"==typeof c.eventType?c.eventType:"string"==typeof c.event_type?c.event_type:"string"==typeof c.type?c.type:void 0;if("text-generation"!==t||"string"!=typeof c.text)if("tool-calls-generation"!==t){if("stream-end"===t&&isObject(c.response)){o=c.response,p={...p,...parseCohereMetricsFromUsage(c.response)},s={...s,...extractCohereResponseMetadata(c.response)||{}};i=("string"==typeof c.response.finishReason?c.response.finishReason:"string"==typeof c.response.finish_reason?c.response.finish_reason:void 0)??i}else if("message-start"!==t)if("content-delta"!==t)if("tool-call-start"!==t)if("tool-call-delta"!==t){if("message-end"===t&&isObject(c.delta)){const t=c.delta;"string"==typeof t.finishReason?i=t.finishReason:"string"==typeof t.finish_reason&&(i=t.finish_reason),void 0!==t.error&&(s.error=t.error),p={...p,...parseCohereMetricsFromUsage(t.usage)}}}else{const t=isObject(c.delta)&&isObject(c.delta.message)?toToolCallArray(c.delta.message.toolCalls??c.delta.message.tool_calls):[];if(t.length>0){const e=t[0],o=getToolCallIndex2(e,c.index??0);r.includes(o)||r.push(o),n[o]=appendToolCallDelta(n[o],e)}}else{const t=isObject(c.delta)&&isObject(c.delta.message)?toToolCallArray(Array.isArray(c.delta.message.toolCalls)?c.delta.message.toolCalls:c.delta.message.toolCalls??c.delta.message.tool_calls):[];for(const[e,o]of t.entries()){const t=getToolCallIndex2(o,"number"==typeof c.index?c.index:e);r.includes(t)||r.push(t),n[t]={...n[t],...o}}}else{const t=extractV8DeltaText(c);t&&e.push(t)}else if("string"==typeof c.id&&(s.id=c.id),isObject(c.delta)&&isObject(c.delta.message)){const t=c.delta.message.role;"string"==typeof t&&(a=t)}}else{const t=toToolCallArray(Array.isArray(c.toolCalls)?c.toolCalls:c.tool_calls);for(const[e,o]of t.entries()){const t=getToolCallIndex2(o,e);r.includes(t)||r.push(t),n[t]={...n[t],...o}}"string"==typeof c.text&&e.push(c.text)}else e.push(c.text)}const c=r.sort(((t,e)=>t-e)).map((t=>n[t])).filter((t=>isObject(t)));let l=extractCohereChatOutput(o);if(void 0===l){const t=e.join("");(c.length>0||a||t.length>0)&&(l={...a?{role:a}:{},...t.length>0?{content:t}:{},...c.length>0?{toolCalls:c}:{}})}return i&&(s={...s,finish_reason:i}),{metadata:s,metrics:p,output:l}}var BraintrustPlugin=class extends BasePlugin{config;openaiPlugin=null;anthropicPlugin=null;aiSDKPlugin=null;claudeAgentSDKPlugin=null;googleGenAIPlugin=null;huggingFacePlugin=null;openRouterPlugin=null;openRouterAgentPlugin=null;mistralPlugin=null;googleADKPlugin=null;coherePlugin=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.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.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())}onDisable(){this.openaiPlugin&&(this.openaiPlugin.disable(),this.openaiPlugin=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.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)}},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;this.enabled=!0;const t=this.readEnvConfig(),e={integrations:{...this.getDefaultConfig(),...this.config.integrations,...t.integrations}};this.braintrustPlugin=new BraintrustPlugin(e),this.braintrustPlugin.enable()}disable(){this.enabled&&(this.enabled=!1,this.braintrustPlugin&&(this.braintrustPlugin.disable(),this.braintrustPlugin=null))}isEnabled(){return this.enabled}getDefaultConfig(){return{openai:!0,anthropic:!0,vercel:!0,aisdk:!0,google:!0,huggingface:!0,claudeAgentSDK:!0,openrouter:!0,openrouterAgent:!0,mistral:!0,cohere:!0}}readEnvConfig(){const t={},e=isomorph_default.getEnv("BRAINTRUST_DISABLE_INSTRUMENTATION");if(e){const n=e.split(",").map((t=>t.trim().toLowerCase())).filter((t=>t.length>0));for(const e of n)t[e]=!1}return{integrations:t}}},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{start:o,end:a,asyncStart:i,asyncEnd:s,error:p}=this;function c(t){e.error=t,p?.publish(e),i?.publish(e),s?.publish(e)}function l(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=>(l(t),t)),(t=>(c(t),Promise.reject(t)))):(o.then((t=>{try{l(t)}catch{}}),(t=>{try{c(t)}catch{}})),o)}catch(t){throw e.error=t,p?.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.hash=t=>{let e=0;for(let n=0;n<t.length;n++){e=(e<<5)-e+t.charCodeAt(n),e|=0}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,BRAINTRUST_CURRENT_SPAN_STORE:()=>BRAINTRUST_CURRENT_SPAN_STORE,BaseAttachment:()=>BaseAttachment,BaseExperiment:()=>BaseExperiment,BraintrustMiddleware:()=>BraintrustMiddleware,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,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,Logger:()=>Logger,LoginInvalidOrgError:()=>LoginInvalidOrgError,NOOP_SPAN:()=>NOOP_SPAN,NOOP_SPAN_PERMALINK:()=>NOOP_SPAN_PERMALINK,NoopSpan:()=>NoopSpan,ObjectFetcher:()=>ObjectFetcher,Project:()=>Project2,ProjectNameIdMap:()=>ProjectNameIdMap,Prompt:()=>Prompt2,PromptBuilder:()=>PromptBuilder,ReadonlyAttachment:()=>ReadonlyAttachment,ReadonlyExperiment:()=>ReadonlyExperiment,Reporter:()=>Reporter,ScorerBuilder:()=>ScorerBuilder,SpanFetcher:()=>SpanFetcher,SpanImpl:()=>SpanImpl,TestBackgroundLogger:()=>TestBackgroundLogger,ToolBuilder:()=>ToolBuilder,UUIDGenerator:()=>UUIDGenerator,X_CACHED_HEADER:()=>X_CACHED_HEADER,_exportsForTestingOnly:()=>_exportsForTestingOnly,_internalGetGlobalState:()=>_internalGetGlobalState,_internalIso:()=>isomorph_default,_internalSetInitialState:()=>_internalSetInitialState,addAzureBlobHeaders:()=>addAzureBlobHeaders,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,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,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:()=>utf8ByteLength,withCurrent:()=>withCurrent,withDataset:()=>withDataset,withExperiment:()=>withExperiment,withLogger:()=>withLogger,withParent:()=>withParent,wrapAISDK:()=>wrapAISDK,wrapAISDKModel:()=>wrapAISDKModel,wrapAgentClass:()=>wrapAgentClass,wrapAnthropic:()=>wrapAnthropic,wrapClaudeAgentSDK:()=>wrapClaudeAgentSDK,wrapCohere:()=>wrapCohere,wrapGoogleADK:()=>wrapGoogleADK,wrapGoogleGenAI:()=>wrapGoogleGenAI,wrapHuggingFace:()=>wrapHuggingFace,wrapMastraAgent:()=>wrapMastraAgent,wrapMistral:()=>wrapMistral,wrapOpenAI:()=>wrapOpenAI,wrapOpenAIv4:()=>wrapOpenAIv4,wrapOpenRouter:()=>wrapOpenRouter,wrapOpenRouterAgent:()=>wrapOpenRouterAgent,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,p=slugify(o,{lower:!0,strict:!0}),c={project_id:n,org_name:e.orgName,name:a,slug:p,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&&(c.description=t.description);const l=await e.apiConn().post_json("v1/function",c);i.push({evalName:o,id:l.id,name:l.name,slug:l.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:p,metadata:c,tags:l,state:u,stream:m,mode:d,schema:g,strict:_,projectId:h,...f}=t,v=u??_internalGetGlobalState();await v.login({orgName:e,apiKey:n,appUrl:r,forceLogin:o,fetch:a});const y=p?"string"==typeof p?p:await p.export():await getSpanParentObject().export(),b=FunctionId.safeParse({function_id:f.function_id,project_name:f.projectName,slug:f.slug,global_function:f.globalFunction,function_type:f.functionType,prompt_session_id:f.promptSessionId,prompt_session_function_id:f.promptSessionFunctionId,version:f.version});if(!b.success)throw new Error(`Invalid function ID arguments: ${b.error.message}`);const z={...b.data,input:i,messages:s,parent:y,metadata:c,tags:l,stream:m,mode:d,strict:_},S={Accept:m?"text/event-stream":"application/json"};h&&(S["x-bt-project-id"]=h),e&&(S["x-bt-org-name"]=e);const w=await v.proxyConn().post("function/invoke",z,{headers:S});if(m){if(!w.body)throw new Error("Received empty stream body");return new BraintrustStream(w.body)}{const t=await w.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 p=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 c=Reflect.get(t,r,t);if("function"!=typeof c)return c;const l=n.get(c);if(l)return l;const u=function(...e){const n=this===p?t:this,r=Reflect.apply(c,n,e);return r===t?p:r};return n.set(c,u),u}});return p}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":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?wrapAgentGenerate(o,t,e):"stream"===n?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(aiSDKChannels.generateText,r,t.bind(e),{self:e,spanType:"function"},n)({...e.settings,...o})},wrapAgentStream=(t,e,n={})=>{const r=`${e.constructor.name}.stream`;return o=>makeStreamWrapper(aiSDKChannels.agentStream,r,t.bind(e),{self:e,spanType:"function"},n)({...e.settings,...o})},makeGenerateTextWrapper=(t,e,n,r={},o={})=>{const a=async function(a){const{span_info:i,...s}=a,p={...s};return t.tracePromise((()=>n(p)),createAISDKChannelContext(p,{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,p={...s};return t.tracePromise((()=>n(p)),createAISDKChannelContext(p,{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,p={...s},c=createAISDKChannelContext(p,{aiSDK:r.aiSDK,denyOutputPaths:o.denyOutputPaths,self:r.self,span_info:mergeSpanInfo(i,{name:e,spanType:r.spanType})});return t.tracePromise((()=>n(p)),c)};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 p={};let c;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":p[t.toolCallId]={toolCallType:t.toolCallType,toolCallId:t.toolCallId,toolName:t.toolName,args:t.args};break;case"tool-call-delta":void 0===p[t.toolCallId]&&(p[t.toolCallId]={toolCallType:t.toolCallType,toolCallId:t.toolCallId,toolName:t.toolName,args:""}),p[t.toolCallId].args+=t.argsTextDelta;break;case"finish":r=t.usage,c=t.finishReason}e.enqueue(t)},async flush(t){a.log({output:postProcessOutput(i,Object.keys(p).length>0?Object.values(p):void 0,c),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 getNumberProperty2(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=getNumberProperty2(t,"inputTokens");void 0!==o&&(r.prompt_tokens=o);const a=getNumberProperty2(t,"outputTokens");void 0!==a&&(r.completion_tokens=a);const i=getNumberProperty2(t,"totalTokens");void 0!==i&&(r.tokens=i);const s=getNumberProperty2(t,"reasoningTokens");void 0!==s&&(r.completion_reasoning_tokens=s);const p=getNumberProperty2(t,"cachedInputTokens");if(void 0!==p&&(r.prompt_cached_tokens=p),"anthropic"===e){const t=n?.anthropic;if(t){const e=extractAnthropicCacheTokens(getNumberProperty2(t.usage,"cache_read_input_tokens")||0,getNumberProperty2(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={},p={};const c=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||{},p=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 c={providerMetadata:p,response:n.response,...n,finishReason:i},l={},u=detectProviderFromResult(c);void 0!==u&&(l.provider=u),void 0!==i&&(l.finish_reason=i);const m=extractModelFromResult(c);if(void 0!==m&&(l.model=m),a.length>0){const t=extractToolCallsFromSteps([{content:a}]);t.length>0&&(e=buildAssistantOutputWithToolCalls(c,t))}o.log({output:e,metadata:l,metrics:normalizeUsageMetrics(s,u,p)}),o.end()}catch(t){throw o.log({error:t instanceof Error?t.message:String(t)}),o.end(),t}}});return{stream:t.pipeThrough(c),...n}}catch(t){throw o.log({error:t instanceof Error?t.message:String(t)}),o.end(),t}}}}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})}})}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],p=s[0];let c=-1;for(let t=s.length-1;t>=0;t-=1)if("function"==typeof s[t]){c=t;break}if("string"!=typeof p||-1===c)return Reflect.apply(t,i,s);const l={toolName:p},u=s[c];s[c]=wrapLocalClaudeToolHandler(u,(()=>l));const m=Reflect.apply(t,i,s);return m&&"object"==typeof m&&e.set(m,l),m}});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],p=s?.name;if("string"==typeof p&&Array.isArray(s?.tools))for(const t of s.tools){if(!t||"object"!=typeof t)continue;const n=e.get(t);n&&(n.serverName=p)}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}})}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){return new Proxy(t,{get:(t,e,n)=>"models"===e?wrapModels(t.models):Reflect.get(t,e,n)})}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 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 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:wrapAgentClass2(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 wrapAgentClass2(t){return new Proxy(t,{construct:(t,e)=>wrapAgentInstance(Reflect.construct(t,e))})}function wrapAgentInstance(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 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 hasFunction(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 hasFunction(t,"chatCompletion")&&hasFunction(t,"chatCompletionStream")&&hasFunction(t,"textGeneration")&&hasFunction(t,"textGenerationStream")&&hasFunction(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 isRecord(t){return"object"==typeof t&&null!==t}function hasFunction2(t,e){return isRecord(t)&&e in t&&"function"==typeof t[e]}function isSupportedMistralClient(t){return!!isRecord(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))}function hasChat(t){return hasFunction2(t,"complete")&&hasFunction2(t,"stream")}function hasEmbeddings(t){return hasFunction2(t,"create")}function hasFim(t){return hasFunction2(t,"complete")&&hasFunction2(t,"stream")}function hasAgents(t){return hasFunction2(t,"complete")&&hasFunction2(t,"stream")}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;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 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 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)}function isRecord2(t){return"object"==typeof t&&null!==t}function hasFunction3(t,e){return isRecord2(t)&&e in t&&"function"==typeof t[e]}function isSupportedCohereClient(t){return!!isRecord2(t)&&(hasFunction3(t,"chat")||hasFunction3(t,"chatStream")||hasFunction3(t,"embed")||hasFunction3(t,"rerank"))}function cohereProxy(t){return 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?wrapEmbed2(t.embed.bind(t)):t.embed;case"rerank":return"function"==typeof t.rerank?wrapRerank3(t.rerank.bind(t)):t.rerank;default:return Reflect.get(t,e,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 wrapEmbed2(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]})}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){const n=e.displaySummary??!0,r=await t.summarize();n&&console.log(formatExperimentSummary(r))}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 p;if(s){const{input:t,expected:e,metadata:n,tags:r,scorers:o,data:a,...i}=s;p=i}const c=p&&Object.keys(p).length>0,l=getExperimentContext();return t(n,c?p:void 0,(async t=>{const r=getExperimentContext()??l,i=r?.experiment;e.onProgress&&e.onProgress({type:"test_start",testName:n});const p=performance.now();let c=!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 c=!0,r}if("function"==typeof o){const e=await o(t);return c=!0,e}return void(c=!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 c=!0,e}catch(t){throw c=!1,t}finally{const t=performance.now()-p;r&&(c?r.passed=(r.passed??0)+1:r.failed=(r.failed??0)+1),e.onProgress&&e.onProgress({type:"test_complete",testName:n,passed:c,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=initExperiment(e.projectName||r,{experiment:`${r}-${(new Date).toISOString()}`});a=t.createChildContext(void 0,n)}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 p=!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})}),p=!0}catch(t){throw p=!1,t}finally{t.onProgress&&t.onProgress({type:"test_complete",testName:i,passed:p,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[p,c]=this.resolveNode(n);if(c.length>0)throw new Error("Target path must be empty");const l=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===p.id&&t.target.variable===r)throw new Error(`Variable name ${r} already set on ${p.id}`);this.edges[l]={source:{node:i.id,variable:e},target:{node:p.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 isAsyncIterable5(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,p=0;function c(){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,p,l),p++,c()}})).catch(u))}function l(t,e){if(s-=1,!a)return t?u(t):!1===t?(o=!0,void(a=!0)):e===breakLoop$1||o&&s<=0?(o=!0,r(null)):void c()}function u(t){a||(i=!1,o=!0,r(t))}c()}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(isAsyncIterable5(e))return asyncEachOfLimit(e[Symbol.asyncIterator](),t,n,r);var o=createIterator(e),a=!1,i=!1,s=0,p=!1;function c(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);p||l()}}function l(){for(p=!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(c))}p=!1}l()};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),PROMISE_SYMBOL=Symbol("promiseCallback"),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 p(t,...e){i[t].forEach((t=>t(...e)))}var c=!1;function l(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)}_.started=!0;var s=_._createTaskItem(t,n?i:r||i);if(e?_._tasks.unshift(s):_._tasks.push(s),c||(c=!0,setImmediate$1((()=>{c=!1,_.process()}))),n||!r)return new Promise(((t,e)=>{o=t,a=e}))}function u(t){return function(e,...n){o-=1;for(var r=0,i=t.length;r<i;r++){var s=t[r],c=a.indexOf(s);0===c?a.shift():c>0&&a.splice(c,1),s.callback(e,...n),null!=e&&p("error",e,s.data)}o<=_.concurrency-_.buffer&&p("unsaturated"),_.idle()&&p("drain"),_.process()}}function m(t){return!(0!==t.length||!_.idle())&&(setImmediate$1((()=>p("drain"))),!0)}const d=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,_={_tasks:new DLL,_createTaskItem:(t,e)=>({data:t,callback:e}),*[Symbol.iterator](){yield*_._tasks[Symbol.iterator]()},concurrency:e,payload:n,buffer:e/4,started:!1,paused:!1,push(t,e){if(Array.isArray(t)){if(m(t))return;return t.map((t=>l(t,!1,!1,e)))}return l(t,!1,!1,e)},pushAsync(t,e){if(Array.isArray(t)){if(m(t))return;return t.map((t=>l(t,!1,!0,e)))}return l(t,!1,!0,e)},kill(){s(),_._tasks.empty()},unshift(t,e){if(Array.isArray(t)){if(m(t))return;return t.map((t=>l(t,!0,!1,e)))}return l(t,!0,!1,e)},unshiftAsync(t,e){if(Array.isArray(t)){if(m(t))return;return t.map((t=>l(t,!0,!0,e)))}return l(t,!0,!0,e)},remove(t){_._tasks.remove(t)},process(){if(!g){for(g=!0;!_.paused&&o<_.concurrency&&_._tasks.length;){var t=[],e=[],n=_._tasks.length;_.payload&&(n=Math.min(n,_.payload));for(var i=0;i<n;i++){var s=_._tasks.shift();t.push(s),a.push(s),e.push(s.data)}o+=1,0===_._tasks.length&&p("empty"),o===_.concurrency&&p("saturated");var c=onlyOnce(u(t));r(e,c)}g=!1}},length:()=>_._tasks.length,running:()=>o,workersList:()=>a,idle:()=>_._tasks.length+o===0,pause(){_.paused=!0},resume(){!1!==_.paused&&(_.paused=!1,setImmediate$1(_.process))}};return Object.defineProperties(_,{saturated:{writable:!1,value:d("saturated")},unsaturated:{writable:!1,value:d("unsaturated")},empty:{writable:!1,value:d("empty")},drain:{writable:!1,value:d("drain")},error:{writable:!1,value:d("error")}}),_}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 p=wrapAsync(o);n(r,((n,r,o)=>{p(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){super(e,void 0,void 0,{filter:t.buildFilter(r,a)}),this._objectId=n,this.rootSpanId=r,this._state=o,this.spanTypeFilter=a}static buildFilter(t,e){const n=[{op:"eq",left:{op:"ident",name:["root_span_id"]},right:{op:"literal",value:t}},{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"}}]}];return e&&e.length>0&&n.push({op:"in",left:{op:"ident",name:["span_attributes","type"]},right:{op:"literal",value:e}}),{op:"and",children:n}}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){if("function"==typeof t)this.fetchFn=t;else{const o=t;this.fetchFn=async t=>{const a=await r(),i=new SpanFetcher(o,e,n,a,t);return(await i.fetchedData()).filter((t=>"scorer"!==t.span_attributes?.purpose)).map((t=>({input:t.input,output:t.output,metadata:t.metadata,span_id:t.span_id,span_parents:t.span_parents,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})))}}}async getSpans({spanType:t}={}){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 e=t.filter((t=>!this.spanCache.has(t)));return 0===e.length||await this.fetchSpans(e),this.getFromCache(t)}async fetchSpans(t){const e=await this.fetchFn(t);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}={}){const e=this.state.spanCache.getByRootSpanId(this.rootSpanId);if(e&&e.length>0){let n=e.filter((t=>"scorer"!==t.span_attributes?.purpose));return t&&t.length>0&&(n=n.filter((e=>t.includes(e.span_attributes?.type??"")))),n.map((t=>({input:t.input,output:t.output,metadata:t.metadata,span_id:t.span_id,span_parents:t.span_parents,span_attributes:t.span_attributes})))}return this.cachedFetcher.getSpans({spanType:t})}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}}};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 isAsyncIterable6(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:p}=callEvaluatorData(e.data),c=await getExperimentParametersRef(e.parameters),l=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??p,baseExperimentId:e.baseExperimentId,gitMetadataSettings:e.gitMetadataSettings,repoInfo:e.repoInfo,dataset:Dataset2.isDataset(n)?n:void 0,parameters:c});if(l&&"undefined"!=typeof process&&void 0!==globalThis.BRAINTRUST_CONTEXT_MANAGER&&await l._waitForId(),l&&r.onStart){const t=await l.summarize({summarizeScores:!1});r.onStart(t)}try{const p={evalName:o,projectName:t,...e,data:n},c=r.enableCache??!0;let u;return u=r.parent?await withParent(r.parent,(()=>runEvaluator(null,p,a,[],r.stream,r.parameters,i,c)),e.state):await runEvaluator(l,p,a,[],r.stream,r.parameters,i,c),a.stop(),s.reportEval(p,u,{verbose:!0,jsonl:!1}),u}finally{l?await l.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 p=s instanceof Promise?await s:s,c=(()=>{if(isAsyncIterable6(p))return p;if(Array.isArray(p)||isIterable(p)){const t=p;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 l=t?(async()=>{try{return await t.id}catch{return}})():void 0,u=[],m=t?null:{};let d=!1,g=0;const _=queue((async({datum:r,trialIndex:s})=>{if(d)return;const p=t?t.dataset:Dataset2.isDataset(e.data)?e.data:void 0,c={name:"eval",spanAttributes:{type:"eval"},event:{input:r.input,expected:"expected"in r?r.expected:void 0,tags:r.tags,origin:p&&r.id&&r._xact_id?{object_type:"dataset",object_id:await p.id,id:r.id,created:r.created,_xact_id:r._xact_id}:void 0,...r.upsert_id?{id:r.upsert_id}:{}}},g=async p=>{const d=e.state??_internalGetGlobalState(),g=d.currentParent.getStore(),_=g?SpanComponentsV3.fromStr(g):null,h=d?new LocalTrace({objectType:_?spanObjectTypeV3ToTypedString(_.data.object_type):"experiment",objectId:_?.data.object_id??(l?await l??"":""),rootSpanId:p.rootSpanId,ensureSpansFlushed:async()=>{t?await flush({state:t.loggingState}):d?await flush({state:d}):await flush(),d&&await d.flushOtel()},state:d}):void 0;let f={..."metadata"in r?r.metadata:{}};const v="expected"in r?r.expected:void 0;let y,b,z=[...r.tags??[]];const S={},w={},T=(e.scores??[]).map(scorerName),C=(e.classifiers??[]).map(classifierName);let A=T;try{const t=t=>f={...f,...t};await p.traced((async n=>{const i={meta:t,metadata:f,expected:v,span:n,parameters:a??{},reportProgress:t=>{o?.({...t,id:p.id,origin:c.event?.origin,name:e.evalName,object_type:"task"})},trialIndex:s,tags:z},l=e.task(r.input,i);y=l instanceof Promise?await l:l,z=i.tags??[],n.log({output:y})}),{name:"task",spanAttributes:{type:"task"},event:{input:r.input}}),z.length?p.log({output:y,metadata:f,expected:v,tags:z}):p.log({output:y,metadata:f,expected:v}),e.flushBeforeScoring&&await p.flush();const n={input:r.input,expected:"expected"in r?r.expected:void 0,metadata:f,output:y,trace:h},{trace:i,...l}=n,u=makeScorerPropagatedEvent(await p.export()),m=t=>{const{metadata:e,name:n,...r}=t;return r},[d,g]=await Promise.all([Promise.all((e.scores??[]).map(((t,e)=>runInScorerSpan(p,T[e],"score",u,l,(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:T[e],score:o}]:[o],{resultMetadata:i,scoresRecord:s}=buildSpanScores(a),p=1===a.length?m(a[0]):a.reduce(((t,e)=>mergeDicts(t,{[e.name]:m(e)})),{});return r.log({output:p,metadata:i,scores:s}),a}))))),Promise.all((e.classifiers??[]).map(((t,e)=>runInScorerSpan(p,C[e],"classifier",u,l,(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,C[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})))))]),_=collectScoringResults(d,T,(t=>{S[t.name]=t.score})),b=collectScoringResults(g,C,(t=>{const e=toClassificationItem(t);w[t.name]||(w[t.name]=[]),w[t.name].push(e)}));Object.keys(w).length>0&&p.log({classifications:w});const E=logScoringFailures("scorer",_,f,p,e.state);A=E.length?E:null,logScoringFailures("classifier",b,f,p,e.state)}catch(t){logError(p,t),b=t}finally{n.increment(e.evalName)}const E={...e.errorScoreHandler&&A?e.errorScoreHandler({rootSpan:p,data:r,unhandledScores:A}):void 0,...S};if(m&&accumulateScores(m,E),i){const t={input:r.input,..."expected"in r?{expected:r.expected}:{},output:y,tags:z.length?z:void 0,metadata:f,error:b,origin:c.event?.origin};u.push({...t,scores:E,...Object.keys(w).length>0?{classifications:w}:{}})}};if(t){const n=await t.traced(g,c),r=t.loggingState.bgLogger();return void 0!==e.maxConcurrency&&r.pendingFlushBytes()>=r.flushBackpressureBytes()&&await t.flush(),n}return await traced(g,{...c,state:e.state})}),Math.max(e.maxConcurrency??Number.MAX_SAFE_INTEGER,1)),h=[],f=(async()=>{for await(const t of c){if(d)break;if(!r.every((e=>evaluateFilter(t,e))))continue;const o=t.trialCount??e.trialCount??1;for(let r=0;r<o&&!d;r++)g++,n.setTotal?.(e.evalName,g),_.pushAsync({datum:t,trialIndex:r}).catch((t=>{h.length<5&&h.push(t)}))}})(),v=async()=>{await new Promise(((t,n)=>{if(d)return void n(new InternalAbortError("Evaluator already cancelled"));let r,o;const a=t=>{d||(d=!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))}))},y=(async()=>{await f,_.idle()||await _.drain()})();try{if(await Promise.race([y,v()]),h.length>0)throw new AggregateError(h,`Encountered ${h.length} unhandled task errors`)}catch(t){throw _.kill(),t instanceof InternalAbortError&&isomorph_default.getEnv("BRAINTRUST_VERBOSE")&&debugLogger.forState(e.state).warn("Evaluator cancelled:",t.message),t}finally{i||(u.length=0)}const b=t?await t.summarize({summarizeScores:e.summarizeScores}):buildLocalSummary(e,i?u:[],m??void 0);return new EvalResultWithSummary(b,i?u:[])}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))},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;_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)}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 p=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(p),p}},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)}}},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.optional(),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/c7d1bcab701c29372db50fd7b65f9e6e99860865c1dae2abb7a782b22f43b9dc.map