braintrust 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev/dist/index.d.mts +4 -0
- package/dev/dist/index.d.ts +4 -0
- package/dev/dist/index.js +7 -0
- package/dev/dist/index.mjs +7 -0
- package/dist/browser.d.mts +8 -0
- package/dist/browser.d.ts +8 -0
- package/dist/browser.js +40 -8
- package/dist/browser.mjs +40 -8
- package/dist/cli.js +9 -1
- package/dist/edge-light.js +40 -8
- package/dist/edge-light.mjs +40 -8
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +143 -111
- package/dist/index.mjs +40 -8
- package/dist/workerd.js +40 -8
- package/dist/workerd.mjs +40 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6497,6 +6497,7 @@ function init(projectOrOptions, optionalOptions) {
|
|
|
6497
6497
|
forceLogin,
|
|
6498
6498
|
fetch: fetch2,
|
|
6499
6499
|
metadata,
|
|
6500
|
+
tags,
|
|
6500
6501
|
gitMetadataSettings,
|
|
6501
6502
|
projectId,
|
|
6502
6503
|
baseExperimentId,
|
|
@@ -6609,6 +6610,10 @@ function init(projectOrOptions, optionalOptions) {
|
|
|
6609
6610
|
if (metadata) {
|
|
6610
6611
|
args["metadata"] = metadata;
|
|
6611
6612
|
}
|
|
6613
|
+
if (tags) {
|
|
6614
|
+
validateTags(tags);
|
|
6615
|
+
args["tags"] = tags;
|
|
6616
|
+
}
|
|
6612
6617
|
let response = null;
|
|
6613
6618
|
while (true) {
|
|
6614
6619
|
try {
|
|
@@ -7555,6 +7560,7 @@ function validateTags(tags) {
|
|
|
7555
7560
|
if (seen.has(tag)) {
|
|
7556
7561
|
throw new Error(`duplicate tag: ${tag}`);
|
|
7557
7562
|
}
|
|
7563
|
+
seen.add(tag);
|
|
7558
7564
|
}
|
|
7559
7565
|
}
|
|
7560
7566
|
function validateAndSanitizeExperimentLogPartialArgs(event) {
|
|
@@ -9279,6 +9285,7 @@ var _exportsForTestingOnly = {
|
|
|
9279
9285
|
isGeneratorFunction,
|
|
9280
9286
|
isAsyncGeneratorFunction,
|
|
9281
9287
|
resetIdGenStateForTests,
|
|
9288
|
+
validateTags,
|
|
9282
9289
|
isomorph: isomorph_default
|
|
9283
9290
|
// Expose isomorph for build type detection
|
|
9284
9291
|
};
|
|
@@ -10630,9 +10637,13 @@ var makeGenerateTextWrapper = (name, options, generateText, aiSDK) => {
|
|
|
10630
10637
|
const processedInput = await processInputAttachments2(params);
|
|
10631
10638
|
return traced(
|
|
10632
10639
|
async (span) => {
|
|
10640
|
+
const { wrappedModel, getMetrics } = wrapModelAndGetMetrics(
|
|
10641
|
+
params.model,
|
|
10642
|
+
aiSDK
|
|
10643
|
+
);
|
|
10633
10644
|
const result = await generateText({
|
|
10634
10645
|
...params,
|
|
10635
|
-
model:
|
|
10646
|
+
model: wrappedModel,
|
|
10636
10647
|
tools: wrapTools(params.tools)
|
|
10637
10648
|
});
|
|
10638
10649
|
const gatewayInfo = extractGatewayRoutingInfo(result);
|
|
@@ -10645,7 +10656,7 @@ var makeGenerateTextWrapper = (name, options, generateText, aiSDK) => {
|
|
|
10645
10656
|
}
|
|
10646
10657
|
span.log({
|
|
10647
10658
|
output: await processOutput(result, options.denyOutputPaths),
|
|
10648
|
-
metrics:
|
|
10659
|
+
metrics: getMetrics(result),
|
|
10649
10660
|
...Object.keys(resolvedMetadata).length > 0 ? { metadata: resolvedMetadata } : {}
|
|
10650
10661
|
});
|
|
10651
10662
|
return result;
|
|
@@ -10866,6 +10877,14 @@ var wrapModel = (model, ai) => {
|
|
|
10866
10877
|
var wrapGenerateText = (generateText, options = {}, aiSDK) => {
|
|
10867
10878
|
return makeGenerateTextWrapper("generateText", options, generateText, aiSDK);
|
|
10868
10879
|
};
|
|
10880
|
+
var wrapModelAndGetMetrics = (model, aiSDK) => {
|
|
10881
|
+
const wrappedModel = wrapModel(model, aiSDK);
|
|
10882
|
+
const modelIsWrapped = _optionalChain([wrappedModel, 'optionalAccess', _162 => _162._braintrustWrapped]) === true;
|
|
10883
|
+
return {
|
|
10884
|
+
wrappedModel,
|
|
10885
|
+
getMetrics: (result) => modelIsWrapped ? void 0 : extractTokenMetrics(result)
|
|
10886
|
+
};
|
|
10887
|
+
};
|
|
10869
10888
|
var wrapGenerateObject = (generateObject, options = {}, aiSDK) => {
|
|
10870
10889
|
return async function generateObjectWrapper(allParams) {
|
|
10871
10890
|
const { span_info, ...params } = allParams;
|
|
@@ -10878,23 +10897,27 @@ var wrapGenerateObject = (generateObject, options = {}, aiSDK) => {
|
|
|
10878
10897
|
const processedInput = await processInputAttachments2(params);
|
|
10879
10898
|
return traced(
|
|
10880
10899
|
async (span) => {
|
|
10900
|
+
const { wrappedModel, getMetrics } = wrapModelAndGetMetrics(
|
|
10901
|
+
params.model,
|
|
10902
|
+
aiSDK
|
|
10903
|
+
);
|
|
10881
10904
|
const result = await generateObject({
|
|
10882
10905
|
...params,
|
|
10883
|
-
model:
|
|
10906
|
+
model: wrappedModel,
|
|
10884
10907
|
tools: wrapTools(params.tools)
|
|
10885
10908
|
});
|
|
10886
10909
|
const output = await processOutput(result, options.denyOutputPaths);
|
|
10887
10910
|
const gatewayInfo = extractGatewayRoutingInfo(result);
|
|
10888
10911
|
const resolvedMetadata = {};
|
|
10889
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
10912
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _163 => _163.provider])) {
|
|
10890
10913
|
resolvedMetadata.provider = gatewayInfo.provider;
|
|
10891
10914
|
}
|
|
10892
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
10915
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _164 => _164.model])) {
|
|
10893
10916
|
resolvedMetadata.model = gatewayInfo.model;
|
|
10894
10917
|
}
|
|
10895
10918
|
span.log({
|
|
10896
10919
|
output,
|
|
10897
|
-
metrics:
|
|
10920
|
+
metrics: getMetrics(result),
|
|
10898
10921
|
...Object.keys(resolvedMetadata).length > 0 ? { metadata: resolvedMetadata } : {}
|
|
10899
10922
|
});
|
|
10900
10923
|
return result;
|
|
@@ -10959,11 +10982,15 @@ var makeStreamTextWrapper = (name, options, streamText, aiSDK) => {
|
|
|
10959
10982
|
try {
|
|
10960
10983
|
const startTime = Date.now();
|
|
10961
10984
|
let receivedFirst = false;
|
|
10985
|
+
const { wrappedModel, getMetrics } = wrapModelAndGetMetrics(
|
|
10986
|
+
params.model,
|
|
10987
|
+
aiSDK
|
|
10988
|
+
);
|
|
10962
10989
|
const result = withCurrent(
|
|
10963
10990
|
span,
|
|
10964
10991
|
() => streamText({
|
|
10965
10992
|
...params,
|
|
10966
|
-
model:
|
|
10993
|
+
model: wrappedModel,
|
|
10967
10994
|
tools: wrapTools(params.tools),
|
|
10968
10995
|
onChunk: (chunk) => {
|
|
10969
10996
|
if (!receivedFirst) {
|
|
@@ -10974,27 +11001,27 @@ var makeStreamTextWrapper = (name, options, streamText, aiSDK) => {
|
|
|
10974
11001
|
}
|
|
10975
11002
|
});
|
|
10976
11003
|
}
|
|
10977
|
-
_optionalChain([params, 'access',
|
|
11004
|
+
_optionalChain([params, 'access', _165 => _165.onChunk, 'optionalCall', _166 => _166(chunk)]);
|
|
10978
11005
|
},
|
|
10979
11006
|
onFinish: async (event) => {
|
|
10980
|
-
_optionalChain([params, 'access',
|
|
11007
|
+
_optionalChain([params, 'access', _167 => _167.onFinish, 'optionalCall', _168 => _168(event)]);
|
|
10981
11008
|
const gatewayInfo = extractGatewayRoutingInfo(event);
|
|
10982
11009
|
const resolvedMetadata = {};
|
|
10983
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
11010
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _169 => _169.provider])) {
|
|
10984
11011
|
resolvedMetadata.provider = gatewayInfo.provider;
|
|
10985
11012
|
}
|
|
10986
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
11013
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _170 => _170.model])) {
|
|
10987
11014
|
resolvedMetadata.model = gatewayInfo.model;
|
|
10988
11015
|
}
|
|
10989
11016
|
span.log({
|
|
10990
11017
|
output: await processOutput(event, options.denyOutputPaths),
|
|
10991
|
-
metrics:
|
|
11018
|
+
metrics: getMetrics(event),
|
|
10992
11019
|
...Object.keys(resolvedMetadata).length > 0 ? { metadata: resolvedMetadata } : {}
|
|
10993
11020
|
});
|
|
10994
11021
|
span.end();
|
|
10995
11022
|
},
|
|
10996
11023
|
onError: async (err) => {
|
|
10997
|
-
_optionalChain([params, 'access',
|
|
11024
|
+
_optionalChain([params, 'access', _171 => _171.onError, 'optionalCall', _172 => _172(err)]);
|
|
10998
11025
|
span.log({
|
|
10999
11026
|
error: serializeError(err)
|
|
11000
11027
|
});
|
|
@@ -11083,11 +11110,15 @@ var wrapStreamObject = (streamObject, options = {}, aiSDK) => {
|
|
|
11083
11110
|
try {
|
|
11084
11111
|
const startTime = Date.now();
|
|
11085
11112
|
let receivedFirst = false;
|
|
11113
|
+
const { wrappedModel, getMetrics } = wrapModelAndGetMetrics(
|
|
11114
|
+
params.model,
|
|
11115
|
+
aiSDK
|
|
11116
|
+
);
|
|
11086
11117
|
const result = withCurrent(
|
|
11087
11118
|
span,
|
|
11088
11119
|
() => streamObject({
|
|
11089
11120
|
...params,
|
|
11090
|
-
model:
|
|
11121
|
+
model: wrappedModel,
|
|
11091
11122
|
tools: wrapTools(params.tools),
|
|
11092
11123
|
onChunk: (chunk) => {
|
|
11093
11124
|
if (!receivedFirst) {
|
|
@@ -11098,27 +11129,27 @@ var wrapStreamObject = (streamObject, options = {}, aiSDK) => {
|
|
|
11098
11129
|
}
|
|
11099
11130
|
});
|
|
11100
11131
|
}
|
|
11101
|
-
_optionalChain([params, 'access',
|
|
11132
|
+
_optionalChain([params, 'access', _173 => _173.onChunk, 'optionalCall', _174 => _174(chunk)]);
|
|
11102
11133
|
},
|
|
11103
11134
|
onFinish: async (event) => {
|
|
11104
|
-
_optionalChain([params, 'access',
|
|
11135
|
+
_optionalChain([params, 'access', _175 => _175.onFinish, 'optionalCall', _176 => _176(event)]);
|
|
11105
11136
|
const gatewayInfo = extractGatewayRoutingInfo(event);
|
|
11106
11137
|
const resolvedMetadata = {};
|
|
11107
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
11138
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _177 => _177.provider])) {
|
|
11108
11139
|
resolvedMetadata.provider = gatewayInfo.provider;
|
|
11109
11140
|
}
|
|
11110
|
-
if (_optionalChain([gatewayInfo, 'optionalAccess',
|
|
11141
|
+
if (_optionalChain([gatewayInfo, 'optionalAccess', _178 => _178.model])) {
|
|
11111
11142
|
resolvedMetadata.model = gatewayInfo.model;
|
|
11112
11143
|
}
|
|
11113
11144
|
span.log({
|
|
11114
11145
|
output: await processOutput(event, options.denyOutputPaths),
|
|
11115
|
-
metrics:
|
|
11146
|
+
metrics: getMetrics(event),
|
|
11116
11147
|
...Object.keys(resolvedMetadata).length > 0 ? { metadata: resolvedMetadata } : {}
|
|
11117
11148
|
});
|
|
11118
11149
|
span.end();
|
|
11119
11150
|
},
|
|
11120
11151
|
onError: async (err) => {
|
|
11121
|
-
_optionalChain([params, 'access',
|
|
11152
|
+
_optionalChain([params, 'access', _179 => _179.onError, 'optionalCall', _180 => _180(err)]);
|
|
11122
11153
|
span.log({
|
|
11123
11154
|
error: serializeError(err)
|
|
11124
11155
|
});
|
|
@@ -11299,8 +11330,8 @@ function parseGatewayModelString(modelString) {
|
|
|
11299
11330
|
return { model: modelString };
|
|
11300
11331
|
}
|
|
11301
11332
|
function serializeModelWithProvider(model) {
|
|
11302
|
-
const modelId = typeof model === "string" ? model : _optionalChain([model, 'optionalAccess',
|
|
11303
|
-
const explicitProvider = typeof model === "object" ? _optionalChain([model, 'optionalAccess',
|
|
11333
|
+
const modelId = typeof model === "string" ? model : _optionalChain([model, 'optionalAccess', _181 => _181.modelId]);
|
|
11334
|
+
const explicitProvider = typeof model === "object" ? _optionalChain([model, 'optionalAccess', _182 => _182.provider]) : void 0;
|
|
11304
11335
|
if (!modelId) {
|
|
11305
11336
|
return { model: modelId, provider: explicitProvider };
|
|
11306
11337
|
}
|
|
@@ -11311,8 +11342,8 @@ function serializeModelWithProvider(model) {
|
|
|
11311
11342
|
};
|
|
11312
11343
|
}
|
|
11313
11344
|
function extractGatewayRoutingInfo(result) {
|
|
11314
|
-
if (_optionalChain([result, 'optionalAccess',
|
|
11315
|
-
const routing2 = _optionalChain([result, 'access',
|
|
11345
|
+
if (_optionalChain([result, 'optionalAccess', _183 => _183.steps]) && Array.isArray(result.steps) && result.steps.length > 0) {
|
|
11346
|
+
const routing2 = _optionalChain([result, 'access', _184 => _184.steps, 'access', _185 => _185[0], 'optionalAccess', _186 => _186.providerMetadata, 'optionalAccess', _187 => _187.gateway, 'optionalAccess', _188 => _188.routing]);
|
|
11316
11347
|
if (routing2) {
|
|
11317
11348
|
return {
|
|
11318
11349
|
provider: routing2.resolvedProvider || routing2.finalProvider,
|
|
@@ -11320,7 +11351,7 @@ function extractGatewayRoutingInfo(result) {
|
|
|
11320
11351
|
};
|
|
11321
11352
|
}
|
|
11322
11353
|
}
|
|
11323
|
-
const routing = _optionalChain([result, 'optionalAccess',
|
|
11354
|
+
const routing = _optionalChain([result, 'optionalAccess', _189 => _189.providerMetadata, 'optionalAccess', _190 => _190.gateway, 'optionalAccess', _191 => _191.routing]);
|
|
11324
11355
|
if (routing) {
|
|
11325
11356
|
return {
|
|
11326
11357
|
provider: routing.resolvedProvider || routing.finalProvider,
|
|
@@ -11592,7 +11623,7 @@ var convertImageToAttachment = (image, explicitMimeType) => {
|
|
|
11592
11623
|
try {
|
|
11593
11624
|
if (typeof image === "string" && image.startsWith("data:")) {
|
|
11594
11625
|
const [mimeTypeSection, base64Data] = image.split(",");
|
|
11595
|
-
const mimeType = _optionalChain([mimeTypeSection, 'access',
|
|
11626
|
+
const mimeType = _optionalChain([mimeTypeSection, 'access', _192 => _192.match, 'call', _193 => _193(/data:(.*?);/), 'optionalAccess', _194 => _194[1]]);
|
|
11596
11627
|
if (mimeType && base64Data) {
|
|
11597
11628
|
const blob = convertDataToBlob(base64Data, mimeType);
|
|
11598
11629
|
if (blob) {
|
|
@@ -11759,7 +11790,7 @@ function firstNumber(...values) {
|
|
|
11759
11790
|
}
|
|
11760
11791
|
function extractTokenMetrics(result) {
|
|
11761
11792
|
const metrics = {};
|
|
11762
|
-
let usage = _optionalChain([result, 'optionalAccess',
|
|
11793
|
+
let usage = _optionalChain([result, 'optionalAccess', _195 => _195.totalUsage]) || _optionalChain([result, 'optionalAccess', _196 => _196.usage]);
|
|
11763
11794
|
if (!usage && result) {
|
|
11764
11795
|
try {
|
|
11765
11796
|
if ("totalUsage" in result && typeof result.totalUsage !== "function") {
|
|
@@ -11774,7 +11805,7 @@ function extractTokenMetrics(result) {
|
|
|
11774
11805
|
return metrics;
|
|
11775
11806
|
}
|
|
11776
11807
|
const promptTokens = firstNumber(
|
|
11777
|
-
_optionalChain([usage, 'access',
|
|
11808
|
+
_optionalChain([usage, 'access', _197 => _197.inputTokens, 'optionalAccess', _198 => _198.total]),
|
|
11778
11809
|
usage.inputTokens,
|
|
11779
11810
|
usage.promptTokens,
|
|
11780
11811
|
usage.prompt_tokens
|
|
@@ -11783,7 +11814,7 @@ function extractTokenMetrics(result) {
|
|
|
11783
11814
|
metrics.prompt_tokens = promptTokens;
|
|
11784
11815
|
}
|
|
11785
11816
|
const completionTokens = firstNumber(
|
|
11786
|
-
_optionalChain([usage, 'access',
|
|
11817
|
+
_optionalChain([usage, 'access', _199 => _199.outputTokens, 'optionalAccess', _200 => _200.total]),
|
|
11787
11818
|
usage.outputTokens,
|
|
11788
11819
|
usage.completionTokens,
|
|
11789
11820
|
usage.completion_tokens
|
|
@@ -11800,7 +11831,7 @@ function extractTokenMetrics(result) {
|
|
|
11800
11831
|
metrics.tokens = totalTokens;
|
|
11801
11832
|
}
|
|
11802
11833
|
const promptCachedTokens = firstNumber(
|
|
11803
|
-
_optionalChain([usage, 'access',
|
|
11834
|
+
_optionalChain([usage, 'access', _201 => _201.inputTokens, 'optionalAccess', _202 => _202.cacheRead]),
|
|
11804
11835
|
usage.cachedInputTokens,
|
|
11805
11836
|
usage.promptCachedTokens,
|
|
11806
11837
|
usage.prompt_cached_tokens
|
|
@@ -11830,7 +11861,7 @@ function extractTokenMetrics(result) {
|
|
|
11830
11861
|
metrics.completion_cached_tokens = completionCachedTokens;
|
|
11831
11862
|
}
|
|
11832
11863
|
const reasoningTokenCount = firstNumber(
|
|
11833
|
-
_optionalChain([usage, 'access',
|
|
11864
|
+
_optionalChain([usage, 'access', _203 => _203.outputTokens, 'optionalAccess', _204 => _204.reasoning]),
|
|
11834
11865
|
usage.reasoningTokens,
|
|
11835
11866
|
usage.completionReasoningTokens,
|
|
11836
11867
|
usage.completion_reasoning_tokens,
|
|
@@ -11856,12 +11887,12 @@ function extractTokenMetrics(result) {
|
|
|
11856
11887
|
return metrics;
|
|
11857
11888
|
}
|
|
11858
11889
|
function extractCostFromResult(result) {
|
|
11859
|
-
if (_optionalChain([result, 'optionalAccess',
|
|
11890
|
+
if (_optionalChain([result, 'optionalAccess', _205 => _205.steps]) && Array.isArray(result.steps) && result.steps.length > 0) {
|
|
11860
11891
|
let totalCost = 0;
|
|
11861
11892
|
let foundCost = false;
|
|
11862
11893
|
for (const step of result.steps) {
|
|
11863
|
-
const gateway2 = _optionalChain([step, 'optionalAccess',
|
|
11864
|
-
const stepCost = parseGatewayCost(_optionalChain([gateway2, 'optionalAccess',
|
|
11894
|
+
const gateway2 = _optionalChain([step, 'optionalAccess', _206 => _206.providerMetadata, 'optionalAccess', _207 => _207.gateway]);
|
|
11895
|
+
const stepCost = parseGatewayCost(_optionalChain([gateway2, 'optionalAccess', _208 => _208.cost])) || parseGatewayCost(_optionalChain([gateway2, 'optionalAccess', _209 => _209.marketCost]));
|
|
11865
11896
|
if (stepCost !== void 0 && stepCost > 0) {
|
|
11866
11897
|
totalCost += stepCost;
|
|
11867
11898
|
foundCost = true;
|
|
@@ -11871,8 +11902,8 @@ function extractCostFromResult(result) {
|
|
|
11871
11902
|
return totalCost;
|
|
11872
11903
|
}
|
|
11873
11904
|
}
|
|
11874
|
-
const gateway = _optionalChain([result, 'optionalAccess',
|
|
11875
|
-
const directCost = parseGatewayCost(_optionalChain([gateway, 'optionalAccess',
|
|
11905
|
+
const gateway = _optionalChain([result, 'optionalAccess', _210 => _210.providerMetadata, 'optionalAccess', _211 => _211.gateway]);
|
|
11906
|
+
const directCost = parseGatewayCost(_optionalChain([gateway, 'optionalAccess', _212 => _212.cost])) || parseGatewayCost(_optionalChain([gateway, 'optionalAccess', _213 => _213.marketCost]));
|
|
11876
11907
|
if (directCost !== void 0 && directCost > 0) {
|
|
11877
11908
|
return directCost;
|
|
11878
11909
|
}
|
|
@@ -11966,7 +11997,7 @@ var omit = (obj, paths) => {
|
|
|
11966
11997
|
// src/wrappers/ai-sdk/deprecated/wrapAISDKModel.ts
|
|
11967
11998
|
function wrapAISDKModel(model) {
|
|
11968
11999
|
const m = model;
|
|
11969
|
-
if (_optionalChain([m, 'optionalAccess',
|
|
12000
|
+
if (_optionalChain([m, 'optionalAccess', _214 => _214.specificationVersion]) === "v1" && typeof _optionalChain([m, 'optionalAccess', _215 => _215.provider]) === "string" && typeof _optionalChain([m, 'optionalAccess', _216 => _216.modelId]) === "string") {
|
|
11970
12001
|
return new BraintrustLanguageModelWrapper(m);
|
|
11971
12002
|
} else {
|
|
11972
12003
|
console.warn("Unsupported AI SDK model. Not wrapping.");
|
|
@@ -12023,10 +12054,10 @@ var BraintrustLanguageModelWrapper = class {
|
|
|
12023
12054
|
metrics: {
|
|
12024
12055
|
time_to_first_token: getCurrentUnixTimestamp() - startTime,
|
|
12025
12056
|
tokens: !isEmpty2(ret.usage) ? ret.usage.promptTokens + ret.usage.completionTokens : void 0,
|
|
12026
|
-
prompt_tokens: _optionalChain([ret, 'access',
|
|
12027
|
-
completion_tokens: _optionalChain([ret, 'access',
|
|
12057
|
+
prompt_tokens: _optionalChain([ret, 'access', _217 => _217.usage, 'optionalAccess', _218 => _218.promptTokens]),
|
|
12058
|
+
completion_tokens: _optionalChain([ret, 'access', _219 => _219.usage, 'optionalAccess', _220 => _220.completionTokens]),
|
|
12028
12059
|
cached: parseCachedHeader(
|
|
12029
|
-
_nullishCoalesce(_optionalChain([ret, 'access',
|
|
12060
|
+
_nullishCoalesce(_optionalChain([ret, 'access', _221 => _221.rawResponse, 'optionalAccess', _222 => _222.headers, 'optionalAccess', _223 => _223[X_CACHED_HEADER]]), () => ( _optionalChain([ret, 'access', _224 => _224.rawResponse, 'optionalAccess', _225 => _225.headers, 'optionalAccess', _226 => _226[LEGACY_CACHED_HEADER]])))
|
|
12030
12061
|
)
|
|
12031
12062
|
}
|
|
12032
12063
|
});
|
|
@@ -12118,10 +12149,10 @@ var BraintrustLanguageModelWrapper = class {
|
|
|
12118
12149
|
metrics: {
|
|
12119
12150
|
time_to_first_token,
|
|
12120
12151
|
tokens: !isEmpty2(usage) ? usage.promptTokens + usage.completionTokens : void 0,
|
|
12121
|
-
prompt_tokens: _optionalChain([usage, 'optionalAccess',
|
|
12122
|
-
completion_tokens: _optionalChain([usage, 'optionalAccess',
|
|
12152
|
+
prompt_tokens: _optionalChain([usage, 'optionalAccess', _227 => _227.promptTokens]),
|
|
12153
|
+
completion_tokens: _optionalChain([usage, 'optionalAccess', _228 => _228.completionTokens]),
|
|
12123
12154
|
cached: parseCachedHeader(
|
|
12124
|
-
_nullishCoalesce(_optionalChain([ret, 'access',
|
|
12155
|
+
_nullishCoalesce(_optionalChain([ret, 'access', _229 => _229.rawResponse, 'optionalAccess', _230 => _230.headers, 'optionalAccess', _231 => _231[X_CACHED_HEADER]]), () => ( _optionalChain([ret, 'access', _232 => _232.rawResponse, 'optionalAccess', _233 => _233.headers, 'optionalAccess', _234 => _234[LEGACY_CACHED_HEADER]])))
|
|
12125
12156
|
)
|
|
12126
12157
|
}
|
|
12127
12158
|
});
|
|
@@ -12165,7 +12196,7 @@ function postProcessPrompt(prompt) {
|
|
|
12165
12196
|
return [
|
|
12166
12197
|
{
|
|
12167
12198
|
role: "assistant",
|
|
12168
|
-
content: _optionalChain([textPart, 'optionalAccess',
|
|
12199
|
+
content: _optionalChain([textPart, 'optionalAccess', _235 => _235.text]),
|
|
12169
12200
|
...toolCallParts.length > 0 ? {
|
|
12170
12201
|
tool_calls: toolCallParts.map((part) => ({
|
|
12171
12202
|
id: part.toolCallId,
|
|
@@ -12258,23 +12289,23 @@ function extractAnthropicCacheTokens(cacheReadTokens = 0, cacheCreationTokens =
|
|
|
12258
12289
|
|
|
12259
12290
|
// src/wrappers/ai-sdk/deprecated/BraintrustMiddleware.ts
|
|
12260
12291
|
function detectProviderFromResult(result) {
|
|
12261
|
-
if (!_optionalChain([result, 'optionalAccess',
|
|
12292
|
+
if (!_optionalChain([result, 'optionalAccess', _236 => _236.providerMetadata])) {
|
|
12262
12293
|
return void 0;
|
|
12263
12294
|
}
|
|
12264
12295
|
const keys = Object.keys(result.providerMetadata);
|
|
12265
|
-
return _optionalChain([keys, 'optionalAccess',
|
|
12296
|
+
return _optionalChain([keys, 'optionalAccess', _237 => _237.at, 'call', _238 => _238(0)]);
|
|
12266
12297
|
}
|
|
12267
12298
|
function extractModelFromResult(result) {
|
|
12268
|
-
if (_optionalChain([result, 'optionalAccess',
|
|
12299
|
+
if (_optionalChain([result, 'optionalAccess', _239 => _239.response, 'optionalAccess', _240 => _240.modelId])) {
|
|
12269
12300
|
return result.response.modelId;
|
|
12270
12301
|
}
|
|
12271
|
-
if (_optionalChain([result, 'optionalAccess',
|
|
12302
|
+
if (_optionalChain([result, 'optionalAccess', _241 => _241.request, 'optionalAccess', _242 => _242.body, 'optionalAccess', _243 => _243.model])) {
|
|
12272
12303
|
return result.request.body.model;
|
|
12273
12304
|
}
|
|
12274
12305
|
return void 0;
|
|
12275
12306
|
}
|
|
12276
12307
|
function extractModelFromWrapGenerateCallback(model) {
|
|
12277
|
-
return _optionalChain([model, 'optionalAccess',
|
|
12308
|
+
return _optionalChain([model, 'optionalAccess', _244 => _244.modelId]);
|
|
12278
12309
|
}
|
|
12279
12310
|
function camelToSnake(str) {
|
|
12280
12311
|
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
@@ -12319,7 +12350,7 @@ function normalizeUsageMetrics(usage, provider, providerMetadata) {
|
|
|
12319
12350
|
metrics.prompt_cached_tokens = cachedInputTokens;
|
|
12320
12351
|
}
|
|
12321
12352
|
if (provider === "anthropic") {
|
|
12322
|
-
const anthropicMetadata = _optionalChain([providerMetadata, 'optionalAccess',
|
|
12353
|
+
const anthropicMetadata = _optionalChain([providerMetadata, 'optionalAccess', _245 => _245.anthropic]);
|
|
12323
12354
|
if (anthropicMetadata) {
|
|
12324
12355
|
const cacheReadTokens = getNumberProperty(anthropicMetadata.usage, "cache_read_input_tokens") || 0;
|
|
12325
12356
|
const cacheCreationTokens = getNumberProperty(
|
|
@@ -12345,7 +12376,7 @@ function buildAssistantOutputWithToolCalls(result, toolCalls) {
|
|
|
12345
12376
|
{
|
|
12346
12377
|
index: 0,
|
|
12347
12378
|
logprobs: null,
|
|
12348
|
-
finish_reason: _nullishCoalesce(normalizeFinishReason(_optionalChain([result, 'optionalAccess',
|
|
12379
|
+
finish_reason: _nullishCoalesce(normalizeFinishReason(_optionalChain([result, 'optionalAccess', _246 => _246.finishReason])), () => ( (toolCalls.length ? "tool_calls" : void 0))),
|
|
12349
12380
|
message: {
|
|
12350
12381
|
role: "assistant",
|
|
12351
12382
|
tool_calls: toolCalls.length > 0 ? toolCalls : void 0
|
|
@@ -12358,7 +12389,7 @@ function extractToolCallsFromSteps(steps) {
|
|
|
12358
12389
|
if (!Array.isArray(steps)) return toolCalls;
|
|
12359
12390
|
let idx = 0;
|
|
12360
12391
|
for (const step of steps) {
|
|
12361
|
-
const blocks = _optionalChain([step, 'optionalAccess',
|
|
12392
|
+
const blocks = _optionalChain([step, 'optionalAccess', _247 => _247.content]);
|
|
12362
12393
|
if (!Array.isArray(blocks)) continue;
|
|
12363
12394
|
for (const block of blocks) {
|
|
12364
12395
|
if (block && typeof block === "object" && block.type === "tool-call") {
|
|
@@ -12381,7 +12412,7 @@ function extractToolCallsFromBlocks(blocks) {
|
|
|
12381
12412
|
return extractToolCallsFromSteps([{ content: blocks }]);
|
|
12382
12413
|
}
|
|
12383
12414
|
function extractInput(params) {
|
|
12384
|
-
return _nullishCoalesce(_nullishCoalesce(_optionalChain([params, 'optionalAccess',
|
|
12415
|
+
return _nullishCoalesce(_nullishCoalesce(_optionalChain([params, 'optionalAccess', _248 => _248.prompt]), () => ( _optionalChain([params, 'optionalAccess', _249 => _249.messages]))), () => ( _optionalChain([params, 'optionalAccess', _250 => _250.system])));
|
|
12385
12416
|
}
|
|
12386
12417
|
var V2_EXCLUDE_KEYS = /* @__PURE__ */ new Set([
|
|
12387
12418
|
"prompt",
|
|
@@ -12405,16 +12436,16 @@ function BraintrustMiddleware(config = {}) {
|
|
|
12405
12436
|
const rawInput = extractInput(params);
|
|
12406
12437
|
const processedInput = processInputAttachments(rawInput);
|
|
12407
12438
|
const spanArgs = {
|
|
12408
|
-
name: _optionalChain([config, 'access',
|
|
12439
|
+
name: _optionalChain([config, 'access', _251 => _251.spanInfo, 'optionalAccess', _252 => _252.name]) || "ai-sdk.doGenerate",
|
|
12409
12440
|
spanAttributes: {
|
|
12410
12441
|
type: "llm" /* LLM */,
|
|
12411
|
-
..._optionalChain([config, 'access',
|
|
12442
|
+
..._optionalChain([config, 'access', _253 => _253.spanInfo, 'optionalAccess', _254 => _254.spanAttributes]) || {}
|
|
12412
12443
|
},
|
|
12413
12444
|
event: {
|
|
12414
12445
|
input: processedInput,
|
|
12415
12446
|
metadata: {
|
|
12416
12447
|
...extractModelParameters(params, V2_EXCLUDE_KEYS),
|
|
12417
|
-
..._optionalChain([config, 'access',
|
|
12448
|
+
..._optionalChain([config, 'access', _255 => _255.spanInfo, 'optionalAccess', _256 => _256.metadata]) || {}
|
|
12418
12449
|
}
|
|
12419
12450
|
}
|
|
12420
12451
|
};
|
|
@@ -12440,12 +12471,12 @@ function BraintrustMiddleware(config = {}) {
|
|
|
12440
12471
|
metadata.model = modelId;
|
|
12441
12472
|
}
|
|
12442
12473
|
}
|
|
12443
|
-
let toolCalls = extractToolCallsFromSteps(_optionalChain([result, 'optionalAccess',
|
|
12474
|
+
let toolCalls = extractToolCallsFromSteps(_optionalChain([result, 'optionalAccess', _257 => _257.steps]));
|
|
12444
12475
|
if (!toolCalls || toolCalls.length === 0) {
|
|
12445
|
-
toolCalls = extractToolCallsFromBlocks(_optionalChain([result, 'optionalAccess',
|
|
12476
|
+
toolCalls = extractToolCallsFromBlocks(_optionalChain([result, 'optionalAccess', _258 => _258.content]));
|
|
12446
12477
|
}
|
|
12447
12478
|
span.log({
|
|
12448
|
-
output: toolCalls.length > 0 ? buildAssistantOutputWithToolCalls(result, toolCalls) : _optionalChain([result, 'optionalAccess',
|
|
12479
|
+
output: toolCalls.length > 0 ? buildAssistantOutputWithToolCalls(result, toolCalls) : _optionalChain([result, 'optionalAccess', _259 => _259.content]),
|
|
12449
12480
|
metadata,
|
|
12450
12481
|
metrics: normalizeUsageMetrics(
|
|
12451
12482
|
result.usage,
|
|
@@ -12467,16 +12498,16 @@ function BraintrustMiddleware(config = {}) {
|
|
|
12467
12498
|
const rawInput = extractInput(params);
|
|
12468
12499
|
const processedInput = processInputAttachments(rawInput);
|
|
12469
12500
|
const spanArgs = {
|
|
12470
|
-
name: _optionalChain([config, 'access',
|
|
12501
|
+
name: _optionalChain([config, 'access', _260 => _260.spanInfo, 'optionalAccess', _261 => _261.name]) || "ai-sdk.doStream",
|
|
12471
12502
|
spanAttributes: {
|
|
12472
12503
|
type: "llm" /* LLM */,
|
|
12473
|
-
..._optionalChain([config, 'access',
|
|
12504
|
+
..._optionalChain([config, 'access', _262 => _262.spanInfo, 'optionalAccess', _263 => _263.spanAttributes]) || {}
|
|
12474
12505
|
},
|
|
12475
12506
|
event: {
|
|
12476
12507
|
input: processedInput,
|
|
12477
12508
|
metadata: {
|
|
12478
12509
|
...extractModelParameters(params, V2_EXCLUDE_KEYS),
|
|
12479
|
-
..._optionalChain([config, 'access',
|
|
12510
|
+
..._optionalChain([config, 'access', _264 => _264.spanInfo, 'optionalAccess', _265 => _265.metadata]) || {}
|
|
12480
12511
|
}
|
|
12481
12512
|
}
|
|
12482
12513
|
};
|
|
@@ -12747,9 +12778,9 @@ function streamNextProxy(stream, sspan) {
|
|
|
12747
12778
|
}
|
|
12748
12779
|
const item = result.value;
|
|
12749
12780
|
const blockIndex = item.index;
|
|
12750
|
-
switch (_optionalChain([item, 'optionalAccess',
|
|
12781
|
+
switch (_optionalChain([item, 'optionalAccess', _266 => _266.type])) {
|
|
12751
12782
|
case "message_start":
|
|
12752
|
-
const msg = _optionalChain([item, 'optionalAccess',
|
|
12783
|
+
const msg = _optionalChain([item, 'optionalAccess', _267 => _267.message]);
|
|
12753
12784
|
if (msg) {
|
|
12754
12785
|
const event = parseEventFromMessage(msg);
|
|
12755
12786
|
totals = { ...totals, ...event.metrics };
|
|
@@ -12766,23 +12797,23 @@ function streamNextProxy(stream, sspan) {
|
|
|
12766
12797
|
if (!contentBlockDeltas[blockIndex]) {
|
|
12767
12798
|
contentBlockDeltas[blockIndex] = [];
|
|
12768
12799
|
}
|
|
12769
|
-
if (_optionalChain([item, 'optionalAccess',
|
|
12770
|
-
const text2 = _optionalChain([item, 'optionalAccess',
|
|
12800
|
+
if (_optionalChain([item, 'optionalAccess', _268 => _268.delta, 'optionalAccess', _269 => _269.type]) === "text_delta") {
|
|
12801
|
+
const text2 = _optionalChain([item, 'optionalAccess', _270 => _270.delta, 'optionalAccess', _271 => _271.text]);
|
|
12771
12802
|
if (text2) {
|
|
12772
12803
|
contentBlockDeltas[blockIndex].push(text2);
|
|
12773
12804
|
}
|
|
12774
|
-
} else if (_optionalChain([item, 'optionalAccess',
|
|
12775
|
-
const partialJson = _optionalChain([item, 'optionalAccess',
|
|
12805
|
+
} else if (_optionalChain([item, 'optionalAccess', _272 => _272.delta, 'optionalAccess', _273 => _273.type]) === "input_json_delta") {
|
|
12806
|
+
const partialJson = _optionalChain([item, 'optionalAccess', _274 => _274.delta, 'optionalAccess', _275 => _275.partial_json]);
|
|
12776
12807
|
if (partialJson) {
|
|
12777
12808
|
contentBlockDeltas[blockIndex].push(partialJson);
|
|
12778
12809
|
}
|
|
12779
12810
|
}
|
|
12780
12811
|
break;
|
|
12781
12812
|
case "content_block_stop":
|
|
12782
|
-
const text = _optionalChain([contentBlockDeltas, 'access',
|
|
12813
|
+
const text = _optionalChain([contentBlockDeltas, 'access', _276 => _276[blockIndex], 'optionalAccess', _277 => _277.join, 'call', _278 => _278("")]);
|
|
12783
12814
|
if (!text) break;
|
|
12784
12815
|
const block = contentBlocks[blockIndex];
|
|
12785
|
-
if (_optionalChain([block, 'optionalAccess',
|
|
12816
|
+
if (_optionalChain([block, 'optionalAccess', _279 => _279.type]) === "tool_use") {
|
|
12786
12817
|
try {
|
|
12787
12818
|
span.log({
|
|
12788
12819
|
output: {
|
|
@@ -12798,12 +12829,12 @@ function streamNextProxy(stream, sspan) {
|
|
|
12798
12829
|
}
|
|
12799
12830
|
break;
|
|
12800
12831
|
case "message_delta":
|
|
12801
|
-
const usage = _optionalChain([item, 'optionalAccess',
|
|
12832
|
+
const usage = _optionalChain([item, 'optionalAccess', _280 => _280.usage]);
|
|
12802
12833
|
if (usage) {
|
|
12803
12834
|
const metrics = parseMetricsFromUsage2(usage);
|
|
12804
12835
|
totals = { ...totals, ...metrics };
|
|
12805
12836
|
}
|
|
12806
|
-
const delta = _optionalChain([item, 'optionalAccess',
|
|
12837
|
+
const delta = _optionalChain([item, 'optionalAccess', _281 => _281.delta]);
|
|
12807
12838
|
if (delta) {
|
|
12808
12839
|
metadata = { ...metadata, ...delta };
|
|
12809
12840
|
}
|
|
@@ -12816,7 +12847,7 @@ function streamNextProxy(stream, sspan) {
|
|
|
12816
12847
|
}
|
|
12817
12848
|
function parseEventFromMessage(message) {
|
|
12818
12849
|
const output = message ? { role: message.role, content: message.content } : null;
|
|
12819
|
-
const metrics = parseMetricsFromUsage2(_optionalChain([message, 'optionalAccess',
|
|
12850
|
+
const metrics = parseMetricsFromUsage2(_optionalChain([message, 'optionalAccess', _282 => _282.usage]));
|
|
12820
12851
|
const metas = ["stop_reason", "stop_sequence"];
|
|
12821
12852
|
const metadata = {};
|
|
12822
12853
|
for (const m of metas) {
|
|
@@ -12990,17 +13021,17 @@ function createToolTracingHooks(resolveParentSpan, activeToolSpans, mcpServers,
|
|
|
12990
13021
|
try {
|
|
12991
13022
|
const response = input.tool_response;
|
|
12992
13023
|
const metadata = {};
|
|
12993
|
-
if (_optionalChain([response, 'optionalAccess',
|
|
13024
|
+
if (_optionalChain([response, 'optionalAccess', _283 => _283.status])) {
|
|
12994
13025
|
metadata["claude_agent_sdk.status"] = response.status;
|
|
12995
13026
|
}
|
|
12996
|
-
if (_optionalChain([response, 'optionalAccess',
|
|
13027
|
+
if (_optionalChain([response, 'optionalAccess', _284 => _284.totalDurationMs])) {
|
|
12997
13028
|
metadata["claude_agent_sdk.duration_ms"] = response.totalDurationMs;
|
|
12998
13029
|
}
|
|
12999
|
-
if (_optionalChain([response, 'optionalAccess',
|
|
13030
|
+
if (_optionalChain([response, 'optionalAccess', _285 => _285.totalToolUseCount]) !== void 0) {
|
|
13000
13031
|
metadata["claude_agent_sdk.tool_use_count"] = response.totalToolUseCount;
|
|
13001
13032
|
}
|
|
13002
13033
|
subAgentSpan.log({
|
|
13003
|
-
output: _optionalChain([response, 'optionalAccess',
|
|
13034
|
+
output: _optionalChain([response, 'optionalAccess', _286 => _286.content]),
|
|
13004
13035
|
metadata
|
|
13005
13036
|
});
|
|
13006
13037
|
} finally {
|
|
@@ -13139,7 +13170,7 @@ function wrapClaudeAgentQuery(queryFn, defaultThis) {
|
|
|
13139
13170
|
yield msg;
|
|
13140
13171
|
}
|
|
13141
13172
|
} finally {
|
|
13142
|
-
_optionalChain([resolvePromptDone, 'optionalCall',
|
|
13173
|
+
_optionalChain([resolvePromptDone, 'optionalCall', _287 => _287()]);
|
|
13143
13174
|
}
|
|
13144
13175
|
})();
|
|
13145
13176
|
promptForQuery = capturingPrompt;
|
|
@@ -13161,7 +13192,7 @@ function wrapClaudeAgentQuery(queryFn, defaultThis) {
|
|
|
13161
13192
|
let currentMessageStartTime = getCurrentUnixTimestamp();
|
|
13162
13193
|
const currentMessages = [];
|
|
13163
13194
|
const createLLMSpan = async () => {
|
|
13164
|
-
const parentToolUseId = _nullishCoalesce(_optionalChain([currentMessages, 'access',
|
|
13195
|
+
const parentToolUseId = _nullishCoalesce(_optionalChain([currentMessages, 'access', _288 => _288[0], 'optionalAccess', _289 => _289.parent_tool_use_id]), () => ( null));
|
|
13165
13196
|
let parentSpanExport;
|
|
13166
13197
|
if (parentToolUseId) {
|
|
13167
13198
|
const subAgentSpan = subAgentSpans.get(parentToolUseId);
|
|
@@ -13182,7 +13213,7 @@ function wrapClaudeAgentQuery(queryFn, defaultThis) {
|
|
|
13182
13213
|
finalResults.push(finalMessageContent);
|
|
13183
13214
|
}
|
|
13184
13215
|
const lastMessage = currentMessages[currentMessages.length - 1];
|
|
13185
|
-
if (_optionalChain([lastMessage, 'optionalAccess',
|
|
13216
|
+
if (_optionalChain([lastMessage, 'optionalAccess', _290 => _290.message, 'optionalAccess', _291 => _291.usage])) {
|
|
13186
13217
|
const outputTokens = getNumberProperty2(lastMessage.message.usage, "output_tokens") || 0;
|
|
13187
13218
|
accumulatedOutputTokens += outputTokens;
|
|
13188
13219
|
}
|
|
@@ -13226,12 +13257,12 @@ function wrapClaudeAgentQuery(queryFn, defaultThis) {
|
|
|
13226
13257
|
try {
|
|
13227
13258
|
for await (const message of originalGenerator) {
|
|
13228
13259
|
const currentTime = getCurrentUnixTimestamp();
|
|
13229
|
-
if (message.type === "assistant" && Array.isArray(_optionalChain([message, 'access',
|
|
13260
|
+
if (message.type === "assistant" && Array.isArray(_optionalChain([message, 'access', _292 => _292.message, 'optionalAccess', _293 => _293.content]))) {
|
|
13230
13261
|
const parentToolUseId = _nullishCoalesce(message.parent_tool_use_id, () => ( null));
|
|
13231
13262
|
for (const block of message.message.content) {
|
|
13232
13263
|
if (block.type === "tool_use" && block.id) {
|
|
13233
13264
|
toolUseToParent.set(block.id, parentToolUseId);
|
|
13234
|
-
if (block.name === "Task" && _optionalChain([block, 'access',
|
|
13265
|
+
if (block.name === "Task" && _optionalChain([block, 'access', _294 => _294.input, 'optionalAccess', _295 => _295.subagent_type])) {
|
|
13235
13266
|
pendingSubAgentNames.set(
|
|
13236
13267
|
block.id,
|
|
13237
13268
|
block.input.subagent_type
|
|
@@ -13261,20 +13292,20 @@ function wrapClaudeAgentQuery(queryFn, defaultThis) {
|
|
|
13261
13292
|
subAgentSpans.set(parentToolUseId, subAgentSpan);
|
|
13262
13293
|
}
|
|
13263
13294
|
}
|
|
13264
|
-
const messageId = _optionalChain([message, 'access',
|
|
13295
|
+
const messageId = _optionalChain([message, 'access', _296 => _296.message, 'optionalAccess', _297 => _297.id]);
|
|
13265
13296
|
if (messageId && messageId !== currentMessageId) {
|
|
13266
13297
|
await createLLMSpan();
|
|
13267
13298
|
currentMessageId = messageId;
|
|
13268
13299
|
currentMessageStartTime = currentTime;
|
|
13269
13300
|
}
|
|
13270
|
-
if (message.type === "assistant" && _optionalChain([message, 'access',
|
|
13301
|
+
if (message.type === "assistant" && _optionalChain([message, 'access', _298 => _298.message, 'optionalAccess', _299 => _299.usage])) {
|
|
13271
13302
|
currentMessages.push(message);
|
|
13272
13303
|
}
|
|
13273
13304
|
if (message.type === "result" && message.usage) {
|
|
13274
13305
|
finalUsageMetrics = _extractUsageFromMessage(message);
|
|
13275
13306
|
if (currentMessages.length > 0 && finalUsageMetrics.completion_tokens !== void 0) {
|
|
13276
13307
|
const lastMessage = currentMessages[currentMessages.length - 1];
|
|
13277
|
-
if (_optionalChain([lastMessage, 'optionalAccess',
|
|
13308
|
+
if (_optionalChain([lastMessage, 'optionalAccess', _300 => _300.message, 'optionalAccess', _301 => _301.usage])) {
|
|
13278
13309
|
const adjustedTokens = finalUsageMetrics.completion_tokens - accumulatedOutputTokens;
|
|
13279
13310
|
if (adjustedTokens >= 0) {
|
|
13280
13311
|
lastMessage.message.usage.output_tokens = adjustedTokens;
|
|
@@ -13355,8 +13386,8 @@ function _buildLLMInput(prompt, conversationHistory, capturedPromptMessages) {
|
|
|
13355
13386
|
promptMessages.push({ content: prompt, role: "user" });
|
|
13356
13387
|
} else if (capturedPromptMessages && capturedPromptMessages.length > 0) {
|
|
13357
13388
|
for (const msg of capturedPromptMessages) {
|
|
13358
|
-
const role = _optionalChain([msg, 'access',
|
|
13359
|
-
const content = _optionalChain([msg, 'access',
|
|
13389
|
+
const role = _optionalChain([msg, 'access', _302 => _302.message, 'optionalAccess', _303 => _303.role]);
|
|
13390
|
+
const content = _optionalChain([msg, 'access', _304 => _304.message, 'optionalAccess', _305 => _305.content]);
|
|
13360
13391
|
if (role && content !== void 0) {
|
|
13361
13392
|
promptMessages.push({ content, role });
|
|
13362
13393
|
}
|
|
@@ -13372,7 +13403,7 @@ function _extractUsageFromMessage(message) {
|
|
|
13372
13403
|
const metrics = {};
|
|
13373
13404
|
let usage;
|
|
13374
13405
|
if (message.type === "assistant") {
|
|
13375
|
-
usage = _optionalChain([message, 'access',
|
|
13406
|
+
usage = _optionalChain([message, 'access', _306 => _306.message, 'optionalAccess', _307 => _307.usage]);
|
|
13376
13407
|
} else if (message.type === "result") {
|
|
13377
13408
|
usage = message.usage;
|
|
13378
13409
|
}
|
|
@@ -13404,7 +13435,7 @@ function _extractUsageFromMessage(message) {
|
|
|
13404
13435
|
async function _createLLMSpanForMessages(messages, prompt, conversationHistory, options, startTime, capturedPromptMessages, parentSpan) {
|
|
13405
13436
|
if (messages.length === 0) return void 0;
|
|
13406
13437
|
const lastMessage = messages[messages.length - 1];
|
|
13407
|
-
if (lastMessage.type !== "assistant" || !_optionalChain([lastMessage, 'access',
|
|
13438
|
+
if (lastMessage.type !== "assistant" || !_optionalChain([lastMessage, 'access', _308 => _308.message, 'optionalAccess', _309 => _309.usage])) {
|
|
13408
13439
|
return void 0;
|
|
13409
13440
|
}
|
|
13410
13441
|
const model = lastMessage.message.model || options.model;
|
|
@@ -13415,7 +13446,7 @@ async function _createLLMSpanForMessages(messages, prompt, conversationHistory,
|
|
|
13415
13446
|
capturedPromptMessages
|
|
13416
13447
|
);
|
|
13417
13448
|
const outputs = messages.map(
|
|
13418
|
-
(m) => _optionalChain([m, 'access',
|
|
13449
|
+
(m) => _optionalChain([m, 'access', _310 => _310.message, 'optionalAccess', _311 => _311.content]) && _optionalChain([m, 'access', _312 => _312.message, 'optionalAccess', _313 => _313.role]) ? { content: m.message.content, role: m.message.role } : void 0
|
|
13419
13450
|
).filter((c) => c !== void 0);
|
|
13420
13451
|
await traced(
|
|
13421
13452
|
(llmSpan) => {
|
|
@@ -13435,7 +13466,7 @@ async function _createLLMSpanForMessages(messages, prompt, conversationHistory,
|
|
|
13435
13466
|
parent: parentSpan
|
|
13436
13467
|
}
|
|
13437
13468
|
);
|
|
13438
|
-
return _optionalChain([lastMessage, 'access',
|
|
13469
|
+
return _optionalChain([lastMessage, 'access', _314 => _314.message, 'optionalAccess', _315 => _315.content]) && _optionalChain([lastMessage, 'access', _316 => _316.message, 'optionalAccess', _317 => _317.role]) ? { content: lastMessage.message.content, role: lastMessage.message.role } : void 0;
|
|
13439
13470
|
}
|
|
13440
13471
|
function wrapClaudeAgentSDK(sdk) {
|
|
13441
13472
|
const cache = /* @__PURE__ */ new Map();
|
|
@@ -13709,7 +13740,7 @@ function serializePart(part) {
|
|
|
13709
13740
|
return part;
|
|
13710
13741
|
}
|
|
13711
13742
|
function serializeTools(params) {
|
|
13712
|
-
if (!_optionalChain([params, 'access',
|
|
13743
|
+
if (!_optionalChain([params, 'access', _318 => _318.config, 'optionalAccess', _319 => _319.tools])) {
|
|
13713
13744
|
return null;
|
|
13714
13745
|
}
|
|
13715
13746
|
try {
|
|
@@ -13792,7 +13823,7 @@ function aggregateGenerateContentChunks(chunks, start, firstTokenTime) {
|
|
|
13792
13823
|
}
|
|
13793
13824
|
if (chunk.candidates && Array.isArray(chunk.candidates)) {
|
|
13794
13825
|
for (const candidate of chunk.candidates) {
|
|
13795
|
-
if (_optionalChain([candidate, 'access',
|
|
13826
|
+
if (_optionalChain([candidate, 'access', _320 => _320.content, 'optionalAccess', _321 => _321.parts])) {
|
|
13796
13827
|
for (const part of candidate.content.parts) {
|
|
13797
13828
|
if (part.text !== void 0) {
|
|
13798
13829
|
if (part.thought) {
|
|
@@ -13823,7 +13854,7 @@ function aggregateGenerateContentChunks(chunks, start, firstTokenTime) {
|
|
|
13823
13854
|
parts.push({ text });
|
|
13824
13855
|
}
|
|
13825
13856
|
parts.push(...otherParts);
|
|
13826
|
-
if (parts.length > 0 && _optionalChain([lastResponse, 'optionalAccess',
|
|
13857
|
+
if (parts.length > 0 && _optionalChain([lastResponse, 'optionalAccess', _322 => _322.candidates])) {
|
|
13827
13858
|
const candidates = [];
|
|
13828
13859
|
for (const candidate of lastResponse.candidates) {
|
|
13829
13860
|
const candidateDict = {
|
|
@@ -15280,7 +15311,7 @@ var CachedSpanFetcher = (_class19 = class {
|
|
|
15280
15311
|
spanType
|
|
15281
15312
|
);
|
|
15282
15313
|
const rows = await fetcher.fetchedData();
|
|
15283
|
-
return rows.filter((row) => _optionalChain([row, 'access',
|
|
15314
|
+
return rows.filter((row) => _optionalChain([row, 'access', _323 => _323.span_attributes, 'optionalAccess', _324 => _324.purpose]) !== "scorer").map((row) => ({
|
|
15284
15315
|
input: row.input,
|
|
15285
15316
|
output: row.output,
|
|
15286
15317
|
metadata: row.metadata,
|
|
@@ -15314,7 +15345,7 @@ var CachedSpanFetcher = (_class19 = class {
|
|
|
15314
15345
|
async fetchSpans(spanType) {
|
|
15315
15346
|
const spans = await this.fetchFn(spanType);
|
|
15316
15347
|
for (const span of spans) {
|
|
15317
|
-
const type = _nullishCoalesce(_optionalChain([span, 'access',
|
|
15348
|
+
const type = _nullishCoalesce(_optionalChain([span, 'access', _325 => _325.span_attributes, 'optionalAccess', _326 => _326.type]), () => ( ""));
|
|
15318
15349
|
const existing = _nullishCoalesce(this.spanCache.get(type), () => ( []));
|
|
15319
15350
|
existing.push(span);
|
|
15320
15351
|
this.spanCache.set(type, existing);
|
|
@@ -15394,11 +15425,11 @@ var LocalTrace = (_class20 = class {
|
|
|
15394
15425
|
const cachedSpans = this.state.spanCache.getByRootSpanId(this.rootSpanId);
|
|
15395
15426
|
if (cachedSpans && cachedSpans.length > 0) {
|
|
15396
15427
|
let spans = cachedSpans.filter(
|
|
15397
|
-
(span) => _optionalChain([span, 'access',
|
|
15428
|
+
(span) => _optionalChain([span, 'access', _327 => _327.span_attributes, 'optionalAccess', _328 => _328.purpose]) !== "scorer"
|
|
15398
15429
|
);
|
|
15399
15430
|
if (spanType && spanType.length > 0) {
|
|
15400
15431
|
spans = spans.filter(
|
|
15401
|
-
(span) => spanType.includes(_nullishCoalesce(_optionalChain([span, 'access',
|
|
15432
|
+
(span) => spanType.includes(_nullishCoalesce(_optionalChain([span, 'access', _329 => _329.span_attributes, 'optionalAccess', _330 => _330.type]), () => ( "")))
|
|
15402
15433
|
);
|
|
15403
15434
|
}
|
|
15404
15435
|
return spans.map((span) => ({
|
|
@@ -15417,7 +15448,7 @@ var LocalTrace = (_class20 = class {
|
|
|
15417
15448
|
* Calls the API with the project_default preprocessor (which falls back to "thread").
|
|
15418
15449
|
*/
|
|
15419
15450
|
async getThread(options) {
|
|
15420
|
-
const cacheKey = _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
15451
|
+
const cacheKey = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _331 => _331.preprocessor]), () => ( "project_default"));
|
|
15421
15452
|
if (!this.threadCache.has(cacheKey)) {
|
|
15422
15453
|
const promise = this.fetchThread(options);
|
|
15423
15454
|
this.threadCache.set(cacheKey, promise);
|
|
@@ -15428,7 +15459,7 @@ var LocalTrace = (_class20 = class {
|
|
|
15428
15459
|
await this.ensureSpansReady();
|
|
15429
15460
|
await this.state.login({});
|
|
15430
15461
|
const result = await invoke({
|
|
15431
|
-
globalFunction: _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
15462
|
+
globalFunction: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _332 => _332.preprocessor]), () => ( "project_default")),
|
|
15432
15463
|
functionType: "preprocessor",
|
|
15433
15464
|
input: {
|
|
15434
15465
|
trace_ref: {
|
|
@@ -15587,10 +15618,10 @@ function validateParametersWithJsonSchema(parameters, schema) {
|
|
|
15587
15618
|
const ajv = new (0, _ajv2.default)({ coerceTypes: true, useDefaults: true, strict: false });
|
|
15588
15619
|
const validate = ajv.compile(schema);
|
|
15589
15620
|
if (!validate(parameters)) {
|
|
15590
|
-
const errorMessages = _optionalChain([validate, 'access',
|
|
15621
|
+
const errorMessages = _optionalChain([validate, 'access', _333 => _333.errors, 'optionalAccess', _334 => _334.map, 'call', _335 => _335((err) => {
|
|
15591
15622
|
const path2 = err.instancePath || "root";
|
|
15592
15623
|
return `${path2}: ${err.message}`;
|
|
15593
|
-
}), 'access',
|
|
15624
|
+
}), 'access', _336 => _336.join, 'call', _337 => _337(", ")]);
|
|
15594
15625
|
throw Error(`Invalid parameters: ${errorMessages}`);
|
|
15595
15626
|
}
|
|
15596
15627
|
return parameters;
|
|
@@ -15706,6 +15737,7 @@ async function Eval(name, evaluator, reporterOrOpts) {
|
|
|
15706
15737
|
experiment: evaluator.experimentName,
|
|
15707
15738
|
description: evaluator.description,
|
|
15708
15739
|
metadata: evaluator.metadata,
|
|
15740
|
+
tags: evaluator.tags,
|
|
15709
15741
|
isPublic: evaluator.isPublic,
|
|
15710
15742
|
update: evaluator.update,
|
|
15711
15743
|
baseExperiment: _nullishCoalesce(evaluator.baseExperimentName, () => ( defaultBaseExperiment)),
|
|
@@ -15831,7 +15863,7 @@ var defaultErrorScoreHandler = ({
|
|
|
15831
15863
|
};
|
|
15832
15864
|
async function runEvaluatorInternal(experiment, evaluator, progressReporter, filters, stream, parameters, collectResults, enableCache) {
|
|
15833
15865
|
if (enableCache) {
|
|
15834
|
-
_optionalChain([(_nullishCoalesce(evaluator.state, () => ( _internalGetGlobalState()))), 'optionalAccess',
|
|
15866
|
+
_optionalChain([(_nullishCoalesce(evaluator.state, () => ( _internalGetGlobalState()))), 'optionalAccess', _338 => _338.spanCache, 'optionalAccess', _339 => _339.start, 'call', _340 => _340()]);
|
|
15835
15867
|
}
|
|
15836
15868
|
try {
|
|
15837
15869
|
if (typeof evaluator.data === "string") {
|
|
@@ -15942,7 +15974,7 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
15942
15974
|
objectType: parentComponents ? spanObjectTypeV3ToTypedString(
|
|
15943
15975
|
parentComponents.data.object_type
|
|
15944
15976
|
) : "experiment",
|
|
15945
|
-
objectId: await _asyncNullishCoalesce(await _asyncOptionalChain([parentComponents, 'optionalAccess', async
|
|
15977
|
+
objectId: await _asyncNullishCoalesce(await _asyncOptionalChain([parentComponents, 'optionalAccess', async _341 => _341.data, 'access', async _342 => _342.object_id]), async () => ( (experimentIdPromise ? await _asyncNullishCoalesce(await experimentIdPromise, async () => ( "")) : ""))),
|
|
15946
15978
|
rootSpanId: rootSpan.rootSpanId,
|
|
15947
15979
|
ensureSpansFlushed,
|
|
15948
15980
|
state
|
|
@@ -15968,10 +16000,10 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
15968
16000
|
span,
|
|
15969
16001
|
parameters: _nullishCoalesce(parameters, () => ( {})),
|
|
15970
16002
|
reportProgress: (event) => {
|
|
15971
|
-
_optionalChain([stream, 'optionalCall',
|
|
16003
|
+
_optionalChain([stream, 'optionalCall', _343 => _343({
|
|
15972
16004
|
...event,
|
|
15973
16005
|
id: rootSpan.id,
|
|
15974
|
-
origin: _optionalChain([baseEvent, 'access',
|
|
16006
|
+
origin: _optionalChain([baseEvent, 'access', _344 => _344.event, 'optionalAccess', _345 => _345.origin]),
|
|
15975
16007
|
name: evaluator.evalName,
|
|
15976
16008
|
object_type: "task"
|
|
15977
16009
|
})]);
|
|
@@ -16135,7 +16167,7 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
16135
16167
|
metadata,
|
|
16136
16168
|
scores: mergedScores,
|
|
16137
16169
|
error,
|
|
16138
|
-
origin: _optionalChain([baseEvent, 'access',
|
|
16170
|
+
origin: _optionalChain([baseEvent, 'access', _346 => _346.event, 'optionalAccess', _347 => _347.origin])
|
|
16139
16171
|
});
|
|
16140
16172
|
}
|
|
16141
16173
|
};
|
|
@@ -16168,7 +16200,7 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
16168
16200
|
break;
|
|
16169
16201
|
}
|
|
16170
16202
|
scheduledTrials++;
|
|
16171
|
-
_optionalChain([progressReporter, 'access',
|
|
16203
|
+
_optionalChain([progressReporter, 'access', _348 => _348.setTotal, 'optionalCall', _349 => _349(evaluator.evalName, scheduledTrials)]);
|
|
16172
16204
|
q.push({ datum, trialIndex });
|
|
16173
16205
|
}
|
|
16174
16206
|
}
|
|
@@ -16243,9 +16275,9 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
16243
16275
|
);
|
|
16244
16276
|
} finally {
|
|
16245
16277
|
if (enableCache) {
|
|
16246
|
-
const spanCache = _optionalChain([(_nullishCoalesce(evaluator.state, () => ( _internalGetGlobalState()))), 'optionalAccess',
|
|
16247
|
-
_optionalChain([spanCache, 'optionalAccess',
|
|
16248
|
-
_optionalChain([spanCache, 'optionalAccess',
|
|
16278
|
+
const spanCache = _optionalChain([(_nullishCoalesce(evaluator.state, () => ( _internalGetGlobalState()))), 'optionalAccess', _350 => _350.spanCache]);
|
|
16279
|
+
_optionalChain([spanCache, 'optionalAccess', _351 => _351.dispose, 'call', _352 => _352()]);
|
|
16280
|
+
_optionalChain([spanCache, 'optionalAccess', _353 => _353.stop, 'call', _354 => _354()]);
|
|
16249
16281
|
}
|
|
16250
16282
|
}
|
|
16251
16283
|
}
|