@traceloop/instrumentation-bedrock 0.5.21 → 0.5.23
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { InstrumentationBase, InstrumentationModuleDefinition } from "@opentelemetry/instrumentation";
|
|
2
2
|
import { BedrockInstrumentationConfig } from "./types";
|
|
3
|
-
import * as bedrock from "@aws-sdk/client-bedrock-runtime";
|
|
3
|
+
import type * as bedrock from "@aws-sdk/client-bedrock-runtime";
|
|
4
4
|
export declare class BedrockInstrumentation extends InstrumentationBase<any> {
|
|
5
5
|
protected _config: BedrockInstrumentationConfig;
|
|
6
6
|
constructor(config?: BedrockInstrumentationConfig);
|
|
@@ -35,9 +35,10 @@ exports.BedrockInstrumentation = void 0;
|
|
|
35
35
|
const api_1 = require("@opentelemetry/api");
|
|
36
36
|
const instrumentation_1 = require("@opentelemetry/instrumentation");
|
|
37
37
|
const ai_semantic_conventions_1 = require("@traceloop/ai-semantic-conventions");
|
|
38
|
+
const package_json_1 = require("../package.json");
|
|
38
39
|
class BedrockInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
39
40
|
constructor(config = {}) {
|
|
40
|
-
super("@traceloop/instrumentation-bedrock",
|
|
41
|
+
super("@traceloop/instrumentation-bedrock", package_json_1.version, config);
|
|
41
42
|
}
|
|
42
43
|
setConfig(config = {}) {
|
|
43
44
|
super.setConfig(config);
|
|
@@ -47,13 +48,16 @@ class BedrockInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
47
48
|
return module;
|
|
48
49
|
}
|
|
49
50
|
manuallyInstrument(module) {
|
|
51
|
+
this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime manually`);
|
|
50
52
|
this._wrap(module.BedrockRuntimeClient.prototype, "send", this.wrapperMethod());
|
|
51
53
|
}
|
|
52
|
-
wrap(module) {
|
|
54
|
+
wrap(module, moduleVersion) {
|
|
55
|
+
this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime@${moduleVersion}`);
|
|
53
56
|
this._wrap(module.BedrockRuntimeClient.prototype, "send", this.wrapperMethod());
|
|
54
57
|
return module;
|
|
55
58
|
}
|
|
56
|
-
unwrap(module) {
|
|
59
|
+
unwrap(module, moduleVersion) {
|
|
60
|
+
this._diag.debug(`Unpatching @aws-sdk/client-bedrock-runtime@${moduleVersion}`);
|
|
57
61
|
this._unwrap(module.BedrockRuntimeClient.prototype, "send");
|
|
58
62
|
}
|
|
59
63
|
wrapperMethod() {
|
|
@@ -70,9 +74,11 @@ class BedrockInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
70
74
|
return api_1.context.with(execContext, () => {
|
|
71
75
|
return original.apply(this, args);
|
|
72
76
|
});
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
}, (e) => {
|
|
78
|
+
if (e) {
|
|
79
|
+
plugin._diag.error(`Error in bedrock instrumentation`, e);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
76
82
|
const wrappedPromise = plugin._wrapPromise(span, execPromise);
|
|
77
83
|
return api_1.context.bind(execContext, wrappedPromise);
|
|
78
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;GAcG;AACH,4CAO4B;AAC5B,oEAKwC;AAGxC,gFAI4C;AAE5C,MAAa,sBAAuB,SAAQ,qCAAwB;IAGlE,YAAY,SAAuC,EAAE;QACnD,KAAK,CAAC,oCAAoC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEe,SAAS,CAAC,SAAuC,EAAE;QACjE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAES,IAAI;QACZ,MAAM,MAAM,GAAG,IAAI,qDAAmC,CACpD,iCAAiC,EACjC,CAAC,WAAW,CAAC,EACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,kBAAkB,CAAC,MAAsB;QAC9C,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,oBAAoB,CAAC,SAAS,EACrC,MAAM,EACN,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;IACJ,CAAC;IAEO,IAAI,CAAC,MAAsB;QACjC,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,oBAAoB,CAAC,SAAS,EACrC,MAAM,EACN,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,MAAsB;QACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAEO,aAAa;QACnB,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC;QACpB,wDAAwD;QACxD,OAAO,CAAC,QAAkB,EAAE,EAAE;YAC5B,OAAO,SAAS,MAAM,CAAY,GAAG,IAAS;gBAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;oBAC7B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChB,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,IAAA,wCAAsB,EACxC,GAAG,EAAE;oBACH,OAAO,aAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;wBACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,gEAAgE;gBAChE,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;gBACF,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC9D,OAAO,aAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IACO,YAAY,CAAI,IAAU,EAAE,OAAmB;QACrD,OAAO,OAAO;aACX,IAAI,CAAC,CAAO,MAAM,EAAE,EAAE;YACrB,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAClB,IAAI;gBACJ,MAAM,EAAE,MAE8C;aACvD,CAAC,CAAC;YAEH,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC,CAAA,CAAC;aACD,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;YACtB,OAAO,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,oBAAc,CAAC,KAAK;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEX,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,EACjB,MAAM,GAGP;QACC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO;YAC1C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YACjC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEb,IAAI,UAAU,GAAe;YAC3B,CAAC,wCAAc,CAAC,UAAU,CAAC,EAAE,MAAM;YACnC,CAAC,wCAAc,CAAC,iBAAiB,CAAC,EAAE,KAAK;YACzC,CAAC,wCAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK;YAC1C,CAAC,wCAAc,CAAC,gBAAgB,CAAC,EAAE,8CAAoB,CAAC,UAAU;SACnE,CAAC;QAEF,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElD,UAAU,mCACL,UAAU,GACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CACnD,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE;YACjD,IAAI,EAAE,cAAQ,CAAC,MAAM;YACrB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEa,QAAQ,CAAC,EACrB,IAAI,EACJ,MAAM,GAMP;;;;YACC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;gBACrB,MAAM,UAAU,GACd,YAAY,IAAI,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,YAAY,CAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE1E,IAAI,wCAAc,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC;oBAC5C,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;wBAChE,MAAM,MAAM,GAAG,MAAM,CAAC,IAA6C,CAAC;wBAEpE,IAAI,eAAe,GAAG,EAAE,CAAC;;4BACzB,KAA0B,eAAA,WAAA,cAAA,MAAM,CAAA,YAAA,4EAAE,CAAC;gCAAT,sBAAM;gCAAN,WAAM;gCAArB,MAAM,KAAK,KAAA,CAAA;gCACpB,8BAA8B;gCAC9B,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAA,KAAK,CAAC,KAAK,0CAAE,KAAK,CAAC,CAAC;gCAChE,wBAAwB;gCACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gCAE9C,IAAI,kCAAkC,IAAI,cAAc,EAAE,CAAC;oCACzD,IAAI,CAAC,YAAY,CACf,wCAAc,CAAC,uBAAuB,EACtC,cAAc,CAAC,kCAAkC,CAAC,CAChD,iBAAiB,CAClB,CACF,CAAC;oCACF,IAAI,CAAC,YAAY,CACf,wCAAc,CAAC,2BAA2B,EAC1C,cAAc,CAAC,kCAAkC,CAAC,CAChD,kBAAkB,CACnB,CACF,CAAC;oCAEF,IAAI,CAAC,YAAY,CACf,wCAAc,CAAC,sBAAsB,EACrC,cAAc,CAAC,kCAAkC,CAAC,CAChD,iBAAiB,CAClB;wCACC,cAAc,CAAC,kCAAkC,CAAC,CAChD,kBAAkB,CACnB,CACJ,CAAC;gCACJ,CAAC;gCAED,IAAI,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAClD,UAAU,CAAC,wCAAc,CAAC,UAAU,CAAC,EACrC,cAAc,EACd,IAAI,CACL,CAAC;gCAEF,qEAAqE;gCACrE,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;oCAC9B,iFAAiF;oCACjF,eAAe;wCACb,kBAAkB,CAChB,GAAG,wCAAc,CAAC,eAAe,YAAY,CAC9C,CAAC;oCACJ,gDAAgD;oCAChD,kBAAkB,mCACb,kBAAkB,KACrB,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAC7C,eAAe,GAClB,CAAC;gCACJ,CAAC;gCAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;4BACzC,CAAC;;;;;;;;;oBACH,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;wBACpE,8BAA8B;wBAC9B,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CACzC,MAAM,CAAC,IAAkB,CAC1B,CAAC;wBACF,wBAAwB;wBACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBAE9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CACpD,UAAU,CAAC,wCAAc,CAAC,UAAU,CAAC,EACrC,cAAc,CACf,CAAC;wBAEF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;;KACZ;IAEO,qBAAqB,CAC3B,MAAc,EACd,WAAgC;QAEhC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,uBACE,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/C,CAAC,wCAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EAC5D,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,EACjE,CAAC,wCAAc,CAAC,oBAAoB,CAAC,EACnC,WAAW,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EACzC,CAAC,wCAAc,CAAC,qBAAqB,CAAC,EACpC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,IAGvC,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,WAAW,SAAS,CAAC,EAAE,MAAM;wBAChD,CAAC,GAAG,wCAAc,CAAC,WAAW,YAAY,CAAC,EACzC,WAAW,CAAC,QAAQ,CAAC;qBACxB;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uBACE,CAAC,wCAAc,CAAC,SAAS,CAAC,EACxB,WAAW,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,EAC7C,CAAC,wCAAc,CAAC,eAAe,CAAC,EAC9B,WAAW,CAAC,sBAAsB,CAAC,CAAC,aAAa,CAAC,EACpD,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EACrC,WAAW,CAAC,sBAAsB,CAAC,CAAC,eAAe,CAAC,IAGnD,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,WAAW,SAAS,CAAC,EAAE,MAAM;wBAChD,CAAC,GAAG,wCAAc,CAAC,WAAW,YAAY,CAAC,EACzC,WAAW,CAAC,WAAW,CAAC;qBAC3B;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,uBACE,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAChD,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAChD,CAAC,wCAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EAC5D,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EACrC,WAAW,CAAC,sBAAsB,CAAC,IAGlC,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,WAAW,SAAS,CAAC,EAAE,MAAM;wBAChD,CAAC,GAAG,wCAAc,CAAC,WAAW,YAAY,CAAC,EAAE,WAAW,CACtD,QAAQ,CACT;4BACC,4DAA4D;6BAC3D,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;6BACzB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;qBACjC;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uBACE,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,EAC5C,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,EAC5C,CAAC,wCAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EAC5D,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,IAG/D,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,WAAW,SAAS,CAAC,EAAE,MAAM;wBAChD,CAAC,GAAG,wCAAc,CAAC,WAAW,YAAY,CAAC,EACzC,WAAW,CAAC,QAAQ,CAAC;qBACxB;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,uBACE,CAAC,wCAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAChD,CAAC,wCAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EAC5D,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,IAGhE,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,WAAW,SAAS,CAAC,EAAE,MAAM;wBAChD,CAAC,GAAG,wCAAc,CAAC,WAAW,YAAY,CAAC,EACzC,WAAW,CAAC,QAAQ,CAAC;qBACxB;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,sBAAsB,CAC5B,MAAc,EACd,QAA6B,EAC7B,QAAQ,GAAG,KAAK;QAEhB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,uBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,kBAAkB,CAAC,EACnD,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EACtD,CAAC,GAAG,wCAAc,CAAC,eAAe,SAAS,CAAC,EAAE,WAAW,IACtD,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAC7C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;qBAC7C;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,kBAAkB,CAAC,EAAE,QAAQ;wBAC7D,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;wBAC9B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAC9C,CAAC,GAAG,wCAAc,CAAC,eAAe,SAAS,CAAC,EAAE,WAAW,EACzD,CAAC,wCAAc,CAAC,uBAAuB,CAAC,EACtC,QAAQ,CAAC,qBAAqB,CAAC,EACjC,CAAC,wCAAc,CAAC,2BAA2B,CAAC,EAAE,QAAQ;wBACpD,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;wBACvC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EACxC,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EAAE,QAAQ;wBAC/C,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;4BAC/B,QAAQ,CAAC,2BAA2B,CAAC;wBACvC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;4BAC/B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IACrC,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAAE,QAAQ;4BACvD,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;4BACxB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;qBACzC;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,uBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,kBAAkB,CAAC,EACnD,QAAQ,CAAC,aAAa,CAAC,EACzB,CAAC,GAAG,wCAAc,CAAC,eAAe,SAAS,CAAC,EAAE,WAAW,IACtD,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAC7C,QAAQ,CAAC,YAAY,CAAC;qBACzB;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,kBAAkB,CAAC,EACnD,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,EAC7C,CAAC,GAAG,wCAAc,CAAC,eAAe,SAAS,CAAC,EAAE,WAAW,IACtD,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAC7C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;qBACrC;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,uBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,kBAAkB,CAAC,EACnD,QAAQ,CAAC,aAAa,CAAC,EACzB,CAAC,GAAG,wCAAc,CAAC,eAAe,SAAS,CAAC,EAAE,WAAW,EACzD,CAAC,wCAAc,CAAC,uBAAuB,CAAC,EACtC,QAAQ,CAAC,oBAAoB,CAAC,EAChC,CAAC,wCAAc,CAAC,2BAA2B,CAAC,EAC1C,QAAQ,CAAC,wBAAwB,CAAC,EACpC,CAAC,wCAAc,CAAC,sBAAsB,CAAC,EACrC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,wBAAwB,CAAC,IAClE,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,CAAC;wBACE,CAAC,GAAG,wCAAc,CAAC,eAAe,YAAY,CAAC,EAC7C,QAAQ,CAAC,YAAY,CAAC;qBACzB;oBACH,CAAC,CAAC,EAAE,CAAC,EACP;YACJ,CAAC;YACD;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,MAAM,wBAAwB,GAAG,aAAO;aACrC,MAAM,EAAE;aACR,QAAQ,CAAC,yDAA+B,CAAC,CAAC;QAE7C,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,wBAAwB,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;YAC5C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY;YAC3B,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;CACF;AA9aD,wDA8aC","sourcesContent":["/*\n * Copyright Traceloop\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Span,\n Attributes,\n SpanKind,\n SpanStatusCode,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from \"@opentelemetry/instrumentation\";\nimport { BedrockInstrumentationConfig } from \"./types\";\nimport * as bedrock from \"@aws-sdk/client-bedrock-runtime\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n LLMRequestTypeValues,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\n\nexport class BedrockInstrumentation extends InstrumentationBase<any> {\n protected override _config!: BedrockInstrumentationConfig;\n\n constructor(config: BedrockInstrumentationConfig = {}) {\n super(\"@traceloop/instrumentation-bedrock\", \"0.3.0\", config);\n }\n\n public override setConfig(config: BedrockInstrumentationConfig = {}) {\n super.setConfig(config);\n }\n\n protected init(): InstrumentationModuleDefinition<any> {\n const module = new InstrumentationNodeModuleDefinition<any>(\n \"@aws-sdk/client-bedrock-runtime\",\n [\">=3.499.0\"],\n this.wrap.bind(this),\n this.unwrap.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(module: typeof bedrock) {\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n }\n\n private wrap(module: typeof bedrock) {\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n\n return module;\n }\n\n private unwrap(module: typeof bedrock) {\n this._unwrap(module.BedrockRuntimeClient.prototype, \"send\");\n }\n\n private wrapperMethod() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const plugin = this;\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (original: Function) => {\n return function method(this: any, ...args: any) {\n const span = plugin._startSpan({\n params: args[0],\n });\n const execContext = trace.setSpan(context.active(), span);\n const execPromise = safeExecuteInTheMiddle(\n () => {\n return context.with(execContext, () => {\n return original.apply(this, args);\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n );\n const wrappedPromise = plugin._wrapPromise(span, execPromise);\n return context.bind(execContext, wrappedPromise);\n };\n };\n }\n private _wrapPromise<T>(span: Span, promise: Promise<T>): Promise<T> {\n return promise\n .then(async (result) => {\n await this._endSpan({\n span,\n result: result as\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput,\n });\n\n return new Promise<T>((resolve) => resolve(result));\n })\n .catch((error: Error) => {\n return new Promise<T>((_, reject) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.recordException(error);\n span.end();\n\n reject(error);\n });\n });\n }\n\n private _startSpan({\n params,\n }: {\n params: Parameters<bedrock.BedrockRuntimeClient[\"send\"]>[0];\n }): Span {\n const [vendor, model] = params.input.modelId\n ? params.input.modelId.split(\".\")\n : [\"\", \"\"];\n\n let attributes: Attributes = {\n [SpanAttributes.LLM_VENDOR]: vendor,\n [SpanAttributes.LLM_REQUEST_MODEL]: model,\n [SpanAttributes.LLM_RESPONSE_MODEL]: model,\n [SpanAttributes.LLM_REQUEST_TYPE]: LLMRequestTypeValues.COMPLETION,\n };\n\n if (typeof params.input.body === \"string\") {\n const requestBody = JSON.parse(params.input.body);\n\n attributes = {\n ...attributes,\n ...this._setRequestAttributes(vendor, requestBody),\n };\n }\n\n return this.tracer.startSpan(`bedrock.completion`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n private async _endSpan({\n span,\n result,\n }: {\n span: Span;\n result:\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput;\n }) {\n if (\"body\" in result) {\n const attributes =\n \"attributes\" in span ? (span[\"attributes\"] as Record<string, any>) : {};\n\n if (SpanAttributes.LLM_VENDOR in attributes) {\n if (!(result.body instanceof Object.getPrototypeOf(Uint8Array))) {\n const rawRes = result.body as AsyncIterable<bedrock.ResponseStream>;\n\n let streamedContent = \"\";\n for await (const value of rawRes) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(value.chunk?.bytes);\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n if (\"amazon-bedrock-invocationMetrics\" in parsedResponse) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ],\n );\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ] +\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n }\n\n let responseAttributes = this._setResponseAttributes(\n attributes[SpanAttributes.LLM_VENDOR],\n parsedResponse,\n true,\n );\n\n // ! NOTE: This make sure the content always have all streamed chunks\n if (this._shouldSendPrompts()) {\n // Update local value with attribute value that was set by _setResponseAttributes\n streamedContent +=\n responseAttributes[\n `${SpanAttributes.LLM_COMPLETIONS}.0.content`\n ];\n // re-assign the new value to responseAttributes\n responseAttributes = {\n ...responseAttributes,\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n streamedContent,\n };\n }\n\n span.setAttributes(responseAttributes);\n }\n } else if (result.body instanceof Object.getPrototypeOf(Uint8Array)) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(\n result.body as Uint8Array,\n );\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n const responseAttributes = this._setResponseAttributes(\n attributes[SpanAttributes.LLM_VENDOR],\n parsedResponse,\n );\n\n span.setAttributes(responseAttributes);\n }\n }\n }\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n }\n\n private _setRequestAttributes(\n vendor: string,\n requestBody: Record<string, any>,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"topP\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"maxTokens\"],\n [SpanAttributes.LLM_PRESENCE_PENALTY]:\n requestBody[\"presencePenalty\"][\"scale\"],\n [SpanAttributes.LLM_FREQUENCY_PENALTY]:\n requestBody[\"frequencyPenalty\"][\"scale\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [SpanAttributes.LLM_TOP_P]:\n requestBody[\"textGenerationConfig\"][\"topP\"],\n [SpanAttributes.LLM_TEMPERATURE]:\n requestBody[\"textGenerationConfig\"][\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n requestBody[\"textGenerationConfig\"][\"maxTokenCount\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"inputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"top_p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"top_k\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n requestBody[\"max_tokens_to_sample\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody[\n \"prompt\"\n ]\n // The format is removing when we are setting span attribute\n .replace(\"\\n\\nHuman:\", \"\")\n .replace(\"\\n\\nAssistant:\", \"\"),\n }\n : {}),\n };\n }\n case \"cohere\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"k\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"max_tokens\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"meta\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"top_p\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"max_gen_len\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _setResponseAttributes(\n vendor: string,\n response: Record<string, any>,\n isStream = false,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"completions\"][0][\"finishReason\"][\"reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"completions\"][0][\"data\"][\"text\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: isStream\n ? response[\"completionReason\"]\n : response[\"results\"][0][\"completionReason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n [SpanAttributes.LLM_USAGE_PROMPT_TOKENS]:\n response[\"inputTextTokenCount\"],\n [SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: isStream\n ? response[\"totalOutputTextTokenCount\"]\n : response[\"results\"][0][\"tokenCount\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: isStream\n ? response[\"inputTextTokenCount\"] +\n response[\"totalOutputTextTokenCount\"]\n : response[\"inputTextTokenCount\"] +\n response[\"results\"][0][\"tokenCount\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]: isStream\n ? response[\"outputText\"]\n : response[\"results\"][0][\"outputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"completion\"],\n }\n : {}),\n };\n }\n case \"cohere\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"generations\"][0][\"finish_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"generations\"][0][\"text\"],\n }\n : {}),\n };\n }\n case \"meta\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n [SpanAttributes.LLM_USAGE_PROMPT_TOKENS]:\n response[\"prompt_token_count\"],\n [SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]:\n response[\"generation_token_count\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]:\n response[\"prompt_token_count\"] + response[\"generation_token_count\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"generation\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _shouldSendPrompts() {\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n return this._config.traceContent !== undefined\n ? this._config.traceContent\n : true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Traceloop\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Span,\n Attributes,\n SpanKind,\n SpanStatusCode,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from \"@opentelemetry/instrumentation\";\nimport { BedrockInstrumentationConfig } from \"./types\";\nimport type * as bedrock from \"@aws-sdk/client-bedrock-runtime\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n LLMRequestTypeValues,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport { version } from \"../package.json\";\n\nexport class BedrockInstrumentation extends InstrumentationBase<any> {\n protected override _config!: BedrockInstrumentationConfig;\n\n constructor(config: BedrockInstrumentationConfig = {}) {\n super(\"@traceloop/instrumentation-bedrock\", version, config);\n }\n\n public override setConfig(config: BedrockInstrumentationConfig = {}) {\n super.setConfig(config);\n }\n\n protected init(): InstrumentationModuleDefinition<any> {\n const module = new InstrumentationNodeModuleDefinition<any>(\n \"@aws-sdk/client-bedrock-runtime\",\n [\">=3.499.0\"],\n this.wrap.bind(this),\n this.unwrap.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(module: typeof bedrock) {\n this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime manually`);\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n }\n\n private wrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Patching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n\n return module;\n }\n\n private unwrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Unpatching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._unwrap(module.BedrockRuntimeClient.prototype, \"send\");\n }\n\n private wrapperMethod() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const plugin = this;\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (original: Function) => {\n return function method(this: any, ...args: any) {\n const span = plugin._startSpan({\n params: args[0],\n });\n const execContext = trace.setSpan(context.active(), span);\n const execPromise = safeExecuteInTheMiddle(\n () => {\n return context.with(execContext, () => {\n return original.apply(this, args);\n });\n },\n (e) => {\n if (e) {\n plugin._diag.error(`Error in bedrock instrumentation`, e);\n }\n },\n );\n const wrappedPromise = plugin._wrapPromise(span, execPromise);\n return context.bind(execContext, wrappedPromise);\n };\n };\n }\n private _wrapPromise<T>(span: Span, promise: Promise<T>): Promise<T> {\n return promise\n .then(async (result) => {\n await this._endSpan({\n span,\n result: result as\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput,\n });\n\n return new Promise<T>((resolve) => resolve(result));\n })\n .catch((error: Error) => {\n return new Promise<T>((_, reject) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.recordException(error);\n span.end();\n\n reject(error);\n });\n });\n }\n\n private _startSpan({\n params,\n }: {\n params: Parameters<bedrock.BedrockRuntimeClient[\"send\"]>[0];\n }): Span {\n const [vendor, model] = params.input.modelId\n ? params.input.modelId.split(\".\")\n : [\"\", \"\"];\n\n let attributes: Attributes = {\n [SpanAttributes.LLM_VENDOR]: vendor,\n [SpanAttributes.LLM_REQUEST_MODEL]: model,\n [SpanAttributes.LLM_RESPONSE_MODEL]: model,\n [SpanAttributes.LLM_REQUEST_TYPE]: LLMRequestTypeValues.COMPLETION,\n };\n\n if (typeof params.input.body === \"string\") {\n const requestBody = JSON.parse(params.input.body);\n\n attributes = {\n ...attributes,\n ...this._setRequestAttributes(vendor, requestBody),\n };\n }\n\n return this.tracer.startSpan(`bedrock.completion`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n private async _endSpan({\n span,\n result,\n }: {\n span: Span;\n result:\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput;\n }) {\n if (\"body\" in result) {\n const attributes =\n \"attributes\" in span ? (span[\"attributes\"] as Record<string, any>) : {};\n\n if (SpanAttributes.LLM_VENDOR in attributes) {\n if (!(result.body instanceof Object.getPrototypeOf(Uint8Array))) {\n const rawRes = result.body as AsyncIterable<bedrock.ResponseStream>;\n\n let streamedContent = \"\";\n for await (const value of rawRes) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(value.chunk?.bytes);\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n if (\"amazon-bedrock-invocationMetrics\" in parsedResponse) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ],\n );\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ] +\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n }\n\n let responseAttributes = this._setResponseAttributes(\n attributes[SpanAttributes.LLM_VENDOR],\n parsedResponse,\n true,\n );\n\n // ! NOTE: This make sure the content always have all streamed chunks\n if (this._shouldSendPrompts()) {\n // Update local value with attribute value that was set by _setResponseAttributes\n streamedContent +=\n responseAttributes[\n `${SpanAttributes.LLM_COMPLETIONS}.0.content`\n ];\n // re-assign the new value to responseAttributes\n responseAttributes = {\n ...responseAttributes,\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n streamedContent,\n };\n }\n\n span.setAttributes(responseAttributes);\n }\n } else if (result.body instanceof Object.getPrototypeOf(Uint8Array)) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(\n result.body as Uint8Array,\n );\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n const responseAttributes = this._setResponseAttributes(\n attributes[SpanAttributes.LLM_VENDOR],\n parsedResponse,\n );\n\n span.setAttributes(responseAttributes);\n }\n }\n }\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n }\n\n private _setRequestAttributes(\n vendor: string,\n requestBody: Record<string, any>,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"topP\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"maxTokens\"],\n [SpanAttributes.LLM_PRESENCE_PENALTY]:\n requestBody[\"presencePenalty\"][\"scale\"],\n [SpanAttributes.LLM_FREQUENCY_PENALTY]:\n requestBody[\"frequencyPenalty\"][\"scale\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [SpanAttributes.LLM_TOP_P]:\n requestBody[\"textGenerationConfig\"][\"topP\"],\n [SpanAttributes.LLM_TEMPERATURE]:\n requestBody[\"textGenerationConfig\"][\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n requestBody[\"textGenerationConfig\"][\"maxTokenCount\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"inputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"top_p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"top_k\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n requestBody[\"max_tokens_to_sample\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody[\n \"prompt\"\n ]\n // The format is removing when we are setting span attribute\n .replace(\"\\n\\nHuman:\", \"\")\n .replace(\"\\n\\nAssistant:\", \"\"),\n }\n : {}),\n };\n }\n case \"cohere\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"k\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"max_tokens\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"meta\": {\n return {\n [SpanAttributes.LLM_TOP_P]: requestBody[\"top_p\"],\n [SpanAttributes.LLM_TEMPERATURE]: requestBody[\"temperature\"],\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody[\"max_gen_len\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_PROMPTS}.0.role`]: \"user\",\n [`${SpanAttributes.LLM_PROMPTS}.0.content`]:\n requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _setResponseAttributes(\n vendor: string,\n response: Record<string, any>,\n isStream = false,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"completions\"][0][\"finishReason\"][\"reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"completions\"][0][\"data\"][\"text\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: isStream\n ? response[\"completionReason\"]\n : response[\"results\"][0][\"completionReason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n [SpanAttributes.LLM_USAGE_PROMPT_TOKENS]:\n response[\"inputTextTokenCount\"],\n [SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: isStream\n ? response[\"totalOutputTextTokenCount\"]\n : response[\"results\"][0][\"tokenCount\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: isStream\n ? response[\"inputTextTokenCount\"] +\n response[\"totalOutputTextTokenCount\"]\n : response[\"inputTextTokenCount\"] +\n response[\"results\"][0][\"tokenCount\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]: isStream\n ? response[\"outputText\"]\n : response[\"results\"][0][\"outputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"completion\"],\n }\n : {}),\n };\n }\n case \"cohere\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"generations\"][0][\"finish_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"generations\"][0][\"text\"],\n }\n : {}),\n };\n }\n case \"meta\": {\n return {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${SpanAttributes.LLM_COMPLETIONS}.0.role`]: \"assistant\",\n [SpanAttributes.LLM_USAGE_PROMPT_TOKENS]:\n response[\"prompt_token_count\"],\n [SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]:\n response[\"generation_token_count\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]:\n response[\"prompt_token_count\"] + response[\"generation_token_count\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${SpanAttributes.LLM_COMPLETIONS}.0.content`]:\n response[\"generation\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _shouldSendPrompts() {\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n return this._config.traceContent !== undefined\n ? this._config.traceContent\n : true;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@traceloop/instrumentation-bedrock",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.23",
|
|
4
4
|
"description": "Amazon Bedrock Instrumentation",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"@pollyjs/persister-fs": "^6.0.6"
|
|
49
49
|
},
|
|
50
50
|
"homepage": "https://github.com/traceloop/openllmetry-js/tree/main/packages/instrumentation-openai",
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "4e0a8305832c51e6538bf0c26ef99b5a1dd62bda"
|
|
52
52
|
}
|