@brizz/sdk 0.1.0 → 0.1.1
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/dist/index.js +26 -9
- package/dist/index.js.map +1 -1
- package/dist/internal/config.js +15 -11
- package/dist/internal/config.js.map +1 -1
- package/dist/internal/instrumentation/auto-init.d.ts.map +1 -1
- package/dist/internal/instrumentation/auto-init.js +35 -30
- package/dist/internal/instrumentation/auto-init.js.map +1 -1
- package/dist/internal/instrumentation/index.js +5 -1
- package/dist/internal/instrumentation/index.js.map +1 -1
- package/dist/internal/instrumentation/registry.d.ts +1 -0
- package/dist/internal/instrumentation/registry.d.ts.map +1 -1
- package/dist/internal/instrumentation/registry.js +37 -31
- package/dist/internal/instrumentation/registry.js.map +1 -1
- package/dist/internal/instrumentation/vercel-ai/index.d.ts +4 -0
- package/dist/internal/instrumentation/vercel-ai/index.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/index.js +8 -0
- package/dist/internal/instrumentation/vercel-ai/index.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/instrumentation.d.ts +16 -0
- package/dist/internal/instrumentation/vercel-ai/instrumentation.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/instrumentation.js +119 -0
- package/dist/internal/instrumentation/vercel-ai/instrumentation.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/base-patcher.d.ts +24 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/base-patcher.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/base-patcher.js +57 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/base-patcher.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.d.ts +16 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.js +58 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.d.ts +8 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.js +59 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/index.d.ts +5 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/index.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/index.js +12 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/index.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.d.ts +12 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.js +41 -0
- package/dist/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/semconv.d.ts +53 -0
- package/dist/internal/instrumentation/vercel-ai/semconv.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/semconv.js +57 -0
- package/dist/internal/instrumentation/vercel-ai/semconv.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/stream-handler.d.ts +13 -0
- package/dist/internal/instrumentation/vercel-ai/stream-handler.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/stream-handler.js +101 -0
- package/dist/internal/instrumentation/vercel-ai/stream-handler.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/telemetry-recorder.d.ts +13 -0
- package/dist/internal/instrumentation/vercel-ai/telemetry-recorder.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/telemetry-recorder.js +115 -0
- package/dist/internal/instrumentation/vercel-ai/telemetry-recorder.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/types.d.ts +197 -0
- package/dist/internal/instrumentation/vercel-ai/types.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/types.js +3 -0
- package/dist/internal/instrumentation/vercel-ai/types.js.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/utils.d.ts +14 -0
- package/dist/internal/instrumentation/vercel-ai/utils.d.ts.map +1 -0
- package/dist/internal/instrumentation/vercel-ai/utils.js +243 -0
- package/dist/internal/instrumentation/vercel-ai/utils.js.map +1 -0
- package/dist/internal/log/index.js +6 -1
- package/dist/internal/log/index.js.map +1 -1
- package/dist/internal/log/logging.js +45 -40
- package/dist/internal/log/logging.js.map +1 -1
- package/dist/internal/logger.js +28 -20
- package/dist/internal/logger.js.map +1 -1
- package/dist/internal/masking/index.js +8 -2
- package/dist/internal/masking/index.js.map +1 -1
- package/dist/internal/masking/patterns.js +4 -1
- package/dist/internal/masking/patterns.js.map +1 -1
- package/dist/internal/masking/types.js +2 -1
- package/dist/internal/masking/utils.js +20 -14
- package/dist/internal/masking/utils.js.map +1 -1
- package/dist/internal/metric/index.js +7 -1
- package/dist/internal/metric/index.js.map +1 -1
- package/dist/internal/metric/metrics.js +26 -20
- package/dist/internal/metric/metrics.js.map +1 -1
- package/dist/internal/sdk.js +57 -53
- package/dist/internal/sdk.js.map +1 -1
- package/dist/internal/trace/index.js +10 -2
- package/dist/internal/trace/index.js.map +1 -1
- package/dist/internal/trace/processors/log-masked.js +19 -13
- package/dist/internal/trace/processors/log-masked.js.map +1 -1
- package/dist/internal/trace/processors/span-masked.js +21 -15
- package/dist/internal/trace/processors/span-masked.js.map +1 -1
- package/dist/internal/trace/tracing.js +30 -24
- package/dist/internal/trace/tracing.js.map +1 -1
- package/package.json +40 -31
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Span, Tracer } from '@opentelemetry/api';
|
|
2
|
+
import type { VercelAIInstrumentationConfig, GenerationParams, ProviderInfo, AIMessage } from '../types';
|
|
3
|
+
export interface IPatcherContext {
|
|
4
|
+
tracer: Tracer;
|
|
5
|
+
getConfig: () => VercelAIInstrumentationConfig;
|
|
6
|
+
recordTokenMetrics: (usage: any, system: string, model: string) => void;
|
|
7
|
+
recordDurationMetric: (duration: number, system: string, model: string, operation: string) => void;
|
|
8
|
+
emitMessageEvents: (messages: AIMessage[], system: string, span: Span) => void;
|
|
9
|
+
emitAssistantMessageEvent: (text: string, system: string, span: Span) => void;
|
|
10
|
+
}
|
|
11
|
+
export type PatcherContext = IPatcherContext;
|
|
12
|
+
export declare abstract class BasePatcher {
|
|
13
|
+
protected context: PatcherContext;
|
|
14
|
+
constructor(context: PatcherContext);
|
|
15
|
+
protected createSpan(spanName: string, params: GenerationParams, operationName: string, additionalAttributes?: Record<string, any>): {
|
|
16
|
+
span: Span;
|
|
17
|
+
provider: ProviderInfo;
|
|
18
|
+
modelId: string;
|
|
19
|
+
};
|
|
20
|
+
protected handleError(error: unknown, span: Span): void;
|
|
21
|
+
protected finalizeDuration(span: Span, startTime: number, config: VercelAIInstrumentationConfig, provider: ProviderInfo, modelId: string, operationName: string): void;
|
|
22
|
+
abstract patch(original: Function): Function;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=base-patcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-patcher.d.ts","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/base-patcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAevD,OAAO,KAAK,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGzG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,6BAA6B,CAAC;IAE/C,kBAAkB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnG,iBAAiB,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/E,yBAAyB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC/E;AAGD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC;AAE7C,8BAAsB,WAAW;IACnB,SAAS,CAAC,OAAO,EAAE,cAAc;gBAAvB,OAAO,EAAE,cAAc;IAE7C,SAAS,CAAC,UAAU,CAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,MAAM,EAErB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAiC1D,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAOvD,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,6BAA6B,EACrC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,IAAI;IASP,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;CAC7C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasePatcher = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
const semconv_1 = require("../semconv");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
class BasePatcher {
|
|
8
|
+
context;
|
|
9
|
+
constructor(context) {
|
|
10
|
+
this.context = context;
|
|
11
|
+
}
|
|
12
|
+
createSpan(spanName, params, operationName, additionalAttributes) {
|
|
13
|
+
const provider = (0, utils_1.detectProvider)(params.model);
|
|
14
|
+
const modelId = (0, utils_1.extractModelId)(params.model);
|
|
15
|
+
const span = this.context.tracer.startSpan(spanName, {
|
|
16
|
+
kind: api_1.SpanKind.CLIENT,
|
|
17
|
+
attributes: {
|
|
18
|
+
[semconv_1.ATTR_GEN_AI_SYSTEM]: provider.system,
|
|
19
|
+
[semconv_1.ATTR_GEN_AI_OPERATION_NAME]: operationName,
|
|
20
|
+
[semconv_1.ATTR_GEN_AI_REQUEST_MODEL]: modelId,
|
|
21
|
+
...(params.maxTokens && { [semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS]: params.maxTokens }),
|
|
22
|
+
...(params.temperature !== undefined && {
|
|
23
|
+
[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE]: params.temperature,
|
|
24
|
+
}),
|
|
25
|
+
...(params.topP !== undefined && { [semconv_1.ATTR_GEN_AI_REQUEST_TOP_P]: params.topP }),
|
|
26
|
+
...(params.topK !== undefined && { [semconv_1.ATTR_GEN_AI_REQUEST_TOP_K]: params.topK }),
|
|
27
|
+
...(params.frequencyPenalty !== undefined && {
|
|
28
|
+
[semconv_1.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY]: params.frequencyPenalty,
|
|
29
|
+
}),
|
|
30
|
+
...(params.presencePenalty !== undefined && {
|
|
31
|
+
[semconv_1.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY]: params.presencePenalty,
|
|
32
|
+
}),
|
|
33
|
+
...(params.stopSequences && {
|
|
34
|
+
[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES]: params.stopSequences,
|
|
35
|
+
}),
|
|
36
|
+
...(provider.apiBase && { [semconv_1.ATTR_GEN_AI_OPENAI_API_BASE]: provider.apiBase }),
|
|
37
|
+
...additionalAttributes,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
return { span, provider, modelId };
|
|
41
|
+
}
|
|
42
|
+
handleError(error, span) {
|
|
43
|
+
if ((0, utils_1.shouldRecordError)(error)) {
|
|
44
|
+
span.recordException(error);
|
|
45
|
+
span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
finalizeDuration(span, startTime, config, provider, modelId, operationName) {
|
|
49
|
+
if (config.enableMetrics) {
|
|
50
|
+
const duration = (globalThis.performance.now() - startTime) / 1000;
|
|
51
|
+
this.context.recordDurationMetric(duration, provider.system, modelId, operationName);
|
|
52
|
+
}
|
|
53
|
+
span.end();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.BasePatcher = BasePatcher;
|
|
57
|
+
//# sourceMappingURL=base-patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-patcher.js","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/base-patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EmbeddingResult } from '../types';
|
|
2
|
+
import { BasePatcher } from './base-patcher';
|
|
3
|
+
interface IEmbeddingParams {
|
|
4
|
+
value?: string;
|
|
5
|
+
values?: string[];
|
|
6
|
+
model?: string | {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
type OriginalEmbedFunction = (params: IEmbeddingParams) => Promise<EmbeddingResult>;
|
|
12
|
+
export declare class EmbeddingsPatcher extends BasePatcher {
|
|
13
|
+
patch(original: OriginalEmbedFunction, isMany?: boolean): OriginalEmbedFunction;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=embeddings-patcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings-patcher.d.ts","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAkC,MAAM,UAAU,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,KAAK,qBAAqB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AASpF,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,KAAK,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,GAAE,OAAe,GAAG,qBAAqB;CAiEvF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmbeddingsPatcher = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
const semconv_1 = require("../semconv");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const base_patcher_1 = require("./base-patcher");
|
|
8
|
+
class EmbeddingsPatcher extends base_patcher_1.BasePatcher {
|
|
9
|
+
patch(original, isMany = false) {
|
|
10
|
+
return async (params) => {
|
|
11
|
+
const config = this.context.getConfig();
|
|
12
|
+
const startTime = globalThis.performance.now();
|
|
13
|
+
const additionalAttributes = isMany
|
|
14
|
+
? { 'gen_ai.embeddings.count': params.values ? params.values.length : 0 }
|
|
15
|
+
: {};
|
|
16
|
+
const { span, provider, modelId } = this.createSpan(semconv_1.SPAN_NAME_GEN_AI_EMBEDDINGS, params, semconv_1.OPERATION_NAME_EMBEDDINGS, additionalAttributes);
|
|
17
|
+
if (!isMany && config.captureMessageContent && params.value) {
|
|
18
|
+
span.setAttribute('gen_ai.prompt.0.content', params.value);
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const result = await api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => original(params));
|
|
22
|
+
if (result.response) {
|
|
23
|
+
span.setAttributes({
|
|
24
|
+
...(result.response.id && { [semconv_1.ATTR_GEN_AI_RESPONSE_ID]: result.response.id }),
|
|
25
|
+
...(result.response.model && { [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.response.model }),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (isMany) {
|
|
29
|
+
if (result.embeddings && result.embeddings.length > 0 && result.embeddings[0]) {
|
|
30
|
+
span.setAttribute('gen_ai.response.embedding_dimensions', result.embeddings[0].length);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
if (result.embedding) {
|
|
35
|
+
span.setAttribute('gen_ai.response.embedding_dimensions', result.embedding.length);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (result.usage) {
|
|
39
|
+
span.setAttributes((0, utils_1.tokenUsageToAttributes)(result.usage));
|
|
40
|
+
if (config.enableMetrics) {
|
|
41
|
+
this.context.recordTokenMetrics(result.usage, provider.system, modelId);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
this.handleError(error, span);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
this.finalizeDuration(span, startTime, config, provider, modelId, semconv_1.OPERATION_NAME_EMBEDDINGS);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.EmbeddingsPatcher = EmbeddingsPatcher;
|
|
58
|
+
//# sourceMappingURL=embeddings-patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings-patcher.js","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/embeddings-patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GenerationParams, TextGenerationResult } from '../types';
|
|
2
|
+
import { BasePatcher } from './base-patcher';
|
|
3
|
+
type OriginalGenerateTextFunction = (params: GenerationParams) => Promise<TextGenerationResult>;
|
|
4
|
+
export declare class GenerateTextPatcher extends BasePatcher {
|
|
5
|
+
patch(original: OriginalGenerateTextFunction): OriginalGenerateTextFunction;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=generate-text-patcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-text-patcher.d.ts","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAgB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,KAAK,4BAA4B,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAShG,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,KAAK,CAAC,QAAQ,EAAE,4BAA4B,GAAG,4BAA4B;CAoF5E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateTextPatcher = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
const semconv_1 = require("../semconv");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const base_patcher_1 = require("./base-patcher");
|
|
8
|
+
class GenerateTextPatcher extends base_patcher_1.BasePatcher {
|
|
9
|
+
patch(original) {
|
|
10
|
+
return async (params) => {
|
|
11
|
+
const config = this.context.getConfig();
|
|
12
|
+
const startTime = globalThis.performance.now();
|
|
13
|
+
const { span, provider, modelId } = this.createSpan(semconv_1.SPAN_NAME_GEN_AI_CHAT, params, semconv_1.OPERATION_NAME_CHAT);
|
|
14
|
+
if (params.prompt) {
|
|
15
|
+
span.setAttributes((0, utils_1.promptToAttributes)(params.prompt, config.captureMessageContent || false));
|
|
16
|
+
}
|
|
17
|
+
else if (params.messages) {
|
|
18
|
+
span.setAttributes((0, utils_1.messagesToAttributes)(params.messages, 'gen_ai.prompt', config.captureMessageContent || false));
|
|
19
|
+
if (config.emitEvents) {
|
|
20
|
+
this.context.emitMessageEvents(params.messages, provider.system, span);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const result = await api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => original(params));
|
|
25
|
+
if (result.response) {
|
|
26
|
+
span.setAttributes({
|
|
27
|
+
...(result.response.id && { [semconv_1.ATTR_GEN_AI_RESPONSE_ID]: result.response.id }),
|
|
28
|
+
...(result.response.model && { [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.response.model }),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (result.finishReason) {
|
|
32
|
+
span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [result.finishReason]);
|
|
33
|
+
}
|
|
34
|
+
span.setAttributes((0, utils_1.completionToAttributes)(result.text, result.finishReason, config.captureMessageContent || false));
|
|
35
|
+
const usage = result.usage || result.totalUsage || result.steps?.[0]?.usage;
|
|
36
|
+
if (usage) {
|
|
37
|
+
span.setAttributes((0, utils_1.tokenUsageToAttributes)(usage));
|
|
38
|
+
if (config.enableMetrics) {
|
|
39
|
+
this.context.recordTokenMetrics(usage, provider.system, modelId);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (config.emitEvents) {
|
|
43
|
+
this.context.emitAssistantMessageEvent(result.text, provider.system, span);
|
|
44
|
+
}
|
|
45
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.handleError(error, span);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
this.finalizeDuration(span, startTime, config, provider, modelId, semconv_1.OPERATION_NAME_CHAT);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.GenerateTextPatcher = GenerateTextPatcher;
|
|
59
|
+
//# sourceMappingURL=generate-text-patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-text-patcher.js","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/generate-text-patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BasePatcher, type PatcherContext } from './base-patcher';
|
|
2
|
+
export { GenerateTextPatcher } from './generate-text-patcher';
|
|
3
|
+
export { StreamTextPatcher } from './stream-text-patcher';
|
|
4
|
+
export { EmbeddingsPatcher } from './embeddings-patcher';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmbeddingsPatcher = exports.StreamTextPatcher = exports.GenerateTextPatcher = exports.BasePatcher = void 0;
|
|
4
|
+
var base_patcher_1 = require("./base-patcher");
|
|
5
|
+
Object.defineProperty(exports, "BasePatcher", { enumerable: true, get: function () { return base_patcher_1.BasePatcher; } });
|
|
6
|
+
var generate_text_patcher_1 = require("./generate-text-patcher");
|
|
7
|
+
Object.defineProperty(exports, "GenerateTextPatcher", { enumerable: true, get: function () { return generate_text_patcher_1.GenerateTextPatcher; } });
|
|
8
|
+
var stream_text_patcher_1 = require("./stream-text-patcher");
|
|
9
|
+
Object.defineProperty(exports, "StreamTextPatcher", { enumerable: true, get: function () { return stream_text_patcher_1.StreamTextPatcher; } });
|
|
10
|
+
var embeddings_patcher_1 = require("./embeddings-patcher");
|
|
11
|
+
Object.defineProperty(exports, "EmbeddingsPatcher", { enumerable: true, get: function () { return embeddings_patcher_1.EmbeddingsPatcher; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/index.ts"],"names":[],"mappings":";;;AAAA,+CAAkE;AAAzD,2GAAA,WAAW,OAAA;AACpB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StreamHandler } from '../stream-handler';
|
|
2
|
+
import type { GenerationParams } from '../types';
|
|
3
|
+
import { BasePatcher } from './base-patcher';
|
|
4
|
+
import type { PatcherContext } from './base-patcher';
|
|
5
|
+
type OriginalStreamTextFunction = (params: GenerationParams) => Promise<unknown>;
|
|
6
|
+
export declare class StreamTextPatcher extends BasePatcher {
|
|
7
|
+
private streamHandler;
|
|
8
|
+
constructor(context: PatcherContext, streamHandler: StreamHandler);
|
|
9
|
+
patch(original: OriginalStreamTextFunction): OriginalStreamTextFunction;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=stream-text-patcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-text-patcher.d.ts","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,UAAU,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,KAAK,0BAA0B,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAUjF,qBAAa,iBAAkB,SAAQ,WAAW;IAG9C,OAAO,CAAC,aAAa;gBADrB,OAAO,EAAE,cAAc,EACf,aAAa,EAAE,aAAa;IAKtC,KAAK,CAAC,QAAQ,EAAE,0BAA0B,GAAG,0BAA0B;CA8CxE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StreamTextPatcher = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
const semconv_1 = require("../semconv");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const base_patcher_1 = require("./base-patcher");
|
|
8
|
+
class StreamTextPatcher extends base_patcher_1.BasePatcher {
|
|
9
|
+
streamHandler;
|
|
10
|
+
constructor(context, streamHandler) {
|
|
11
|
+
super(context);
|
|
12
|
+
this.streamHandler = streamHandler;
|
|
13
|
+
}
|
|
14
|
+
patch(original) {
|
|
15
|
+
return async (params) => {
|
|
16
|
+
const config = this.context.getConfig();
|
|
17
|
+
const startTime = globalThis.performance.now();
|
|
18
|
+
const { span, provider, modelId } = this.createSpan(semconv_1.SPAN_NAME_GEN_AI_CHAT, params, semconv_1.OPERATION_NAME_CHAT, { 'gen_ai.streaming': true });
|
|
19
|
+
if (params.prompt) {
|
|
20
|
+
span.setAttributes((0, utils_1.promptToAttributes)(params.prompt, config.captureMessageContent || false));
|
|
21
|
+
}
|
|
22
|
+
else if (params.messages) {
|
|
23
|
+
span.setAttributes((0, utils_1.messagesToAttributes)(params.messages, 'gen_ai.prompt', config.captureMessageContent || false));
|
|
24
|
+
if (config.emitEvents) {
|
|
25
|
+
this.context.emitMessageEvents(params.messages, provider.system, span);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const stream = await api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => original(params));
|
|
30
|
+
return this.streamHandler.wrapStream(stream, span, config, provider, modelId, startTime);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
this.handleError(error, span);
|
|
34
|
+
span.end();
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.StreamTextPatcher = StreamTextPatcher;
|
|
41
|
+
//# sourceMappingURL=stream-text-patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-text-patcher.js","sourceRoot":"","sources":["../../../../../src/internal/instrumentation/vercel-ai/patchers/stream-text-patcher.ts"],"names":[],"mappings":";;;AAAA,4CAAoD;AAGpD,wCAGoB;AAGpB,oCAAoE;AAEpE,iDAA6C;AAc7C,MAAa,iBAAkB,SAAQ,0BAAW;IAGtC;IAFV,YACE,OAAuB,EACf,aAA4B;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFP,kBAAa,GAAb,aAAa,CAAe;IAGtC,CAAC;IAED,KAAK,CAAC,QAAoC;QACxC,OAAO,KAAK,EAAE,MAAwB,EAAoB,EAAE;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YAE/C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CACjD,+BAAqB,EACrB,MAAM,EACN,6BAAmB,EACnB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CACR,CAAC;YAGvB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,aAAa,CAChB,IAAA,0BAAkB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,qBAAqB,IAAI,KAAK,CAAC,CACzE,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAChB,IAAA,4BAAoB,EAClB,MAAM,CAAC,QAAQ,EACf,eAAe,EACf,MAAM,CAAC,qBAAqB,IAAI,KAAK,CACtC,CACF,CAAC;gBAGF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,aAAO,CAAC,IAAI,CAAC,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAC5E,QAAQ,CAAC,MAAM,CAAC,CACjB,CAAC;gBAGF,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF;AAtDD,8CAsDC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export declare const ATTR_GEN_AI_SYSTEM: "gen_ai.system";
|
|
2
|
+
export declare const ATTR_GEN_AI_OPERATION_NAME: "gen_ai.operation.name";
|
|
3
|
+
export declare const ATTR_GEN_AI_REQUEST_MODEL: "gen_ai.request.model";
|
|
4
|
+
export declare const ATTR_GEN_AI_REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens";
|
|
5
|
+
export declare const ATTR_GEN_AI_REQUEST_TEMPERATURE: "gen_ai.request.temperature";
|
|
6
|
+
export declare const ATTR_GEN_AI_REQUEST_TOP_P: "gen_ai.request.top_p";
|
|
7
|
+
export declare const ATTR_GEN_AI_REQUEST_TOP_K: "gen_ai.request.top_k";
|
|
8
|
+
export declare const ATTR_GEN_AI_REQUEST_STOP_SEQUENCES: "gen_ai.request.stop_sequences";
|
|
9
|
+
export declare const ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY: "gen_ai.request.frequency_penalty";
|
|
10
|
+
export declare const ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY: "gen_ai.request.presence_penalty";
|
|
11
|
+
export declare const ATTR_GEN_AI_REQUEST_ENCODING_FORMATS: "gen_ai.request.encoding_formats";
|
|
12
|
+
export declare const ATTR_GEN_AI_RESPONSE_ID: "gen_ai.response.id";
|
|
13
|
+
export declare const ATTR_GEN_AI_RESPONSE_MODEL: "gen_ai.response.model";
|
|
14
|
+
export declare const ATTR_GEN_AI_RESPONSE_FINISH_REASONS: "gen_ai.response.finish_reasons";
|
|
15
|
+
export declare const ATTR_GEN_AI_USAGE_PROMPT_TOKENS: "gen_ai.usage.prompt_tokens";
|
|
16
|
+
export declare const ATTR_GEN_AI_USAGE_COMPLETION_TOKENS: "gen_ai.usage.completion_tokens";
|
|
17
|
+
export declare const ATTR_GEN_AI_USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens";
|
|
18
|
+
export declare const ATTR_GEN_AI_USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens";
|
|
19
|
+
export declare const ATTR_GEN_AI_USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens";
|
|
20
|
+
export declare const ATTR_GEN_AI_TOKEN_TYPE: "gen_ai.token.type";
|
|
21
|
+
export declare const ATTR_GEN_AI_PROMPT: "gen_ai.prompt";
|
|
22
|
+
export declare const ATTR_GEN_AI_COMPLETION: "gen_ai.completion";
|
|
23
|
+
export declare const ATTR_GEN_AI_OPENAI_API_BASE: "gen_ai.openai.api_base";
|
|
24
|
+
export declare const ATTR_GEN_AI_OPENAI_API_TYPE: "gen_ai.openai.api_type";
|
|
25
|
+
export declare const ATTR_GEN_AI_OPENAI_API_VERSION: "gen_ai.openai.api_version";
|
|
26
|
+
export declare const ATTR_EVENT_NAME: "event.name";
|
|
27
|
+
export declare const EVENT_GEN_AI_USER_MESSAGE: "gen_ai.user.message";
|
|
28
|
+
export declare const EVENT_GEN_AI_ASSISTANT_MESSAGE: "gen_ai.assistant.message";
|
|
29
|
+
export declare const EVENT_GEN_AI_SYSTEM_MESSAGE: "gen_ai.system.message";
|
|
30
|
+
export declare const EVENT_GEN_AI_TOOL_MESSAGE: "gen_ai.tool.message";
|
|
31
|
+
export declare const EVENT_GEN_AI_CHOICE: "gen_ai.choice";
|
|
32
|
+
export declare const METRIC_GEN_AI_CLIENT_OPERATION_DURATION: "gen_ai.client.operation.duration";
|
|
33
|
+
export declare const METRIC_GEN_AI_CLIENT_TOKEN_USAGE: "gen_ai.client.token.usage";
|
|
34
|
+
export declare const OPERATION_NAME_CHAT: "chat";
|
|
35
|
+
export declare const OPERATION_NAME_EMBEDDINGS: "embeddings";
|
|
36
|
+
export declare const OPERATION_NAME_IMAGE_GENERATION: "image_generation";
|
|
37
|
+
export declare const OPERATION_NAME_SPEECH_SYNTHESIS: "speech_synthesis";
|
|
38
|
+
export declare const OPERATION_NAME_TRANSCRIPTION: "transcription";
|
|
39
|
+
export declare const TOKEN_TYPE_INPUT: "input";
|
|
40
|
+
export declare const TOKEN_TYPE_OUTPUT: "output";
|
|
41
|
+
export declare const PROVIDER_OPENAI: "openai";
|
|
42
|
+
export declare const PROVIDER_ANTHROPIC: "anthropic";
|
|
43
|
+
export declare const PROVIDER_GOOGLE: "google";
|
|
44
|
+
export declare const PROVIDER_AMAZON: "amazon";
|
|
45
|
+
export declare const PROVIDER_AZURE: "azure";
|
|
46
|
+
export declare const PROVIDER_VERCEL: "vercel";
|
|
47
|
+
export declare const PROVIDER_UNKNOWN: "unknown";
|
|
48
|
+
export declare const SPAN_NAME_GEN_AI_CHAT: "gen_ai.chat";
|
|
49
|
+
export declare const SPAN_NAME_GEN_AI_EMBEDDINGS: "gen_ai.embeddings";
|
|
50
|
+
export declare const SPAN_NAME_GEN_AI_IMAGE_GENERATION: "gen_ai.image_generation";
|
|
51
|
+
export declare const SPAN_NAME_GEN_AI_SPEECH_SYNTHESIS: "gen_ai.speech_synthesis";
|
|
52
|
+
export declare const SPAN_NAME_GEN_AI_TRANSCRIPTION: "gen_ai.transcription";
|
|
53
|
+
//# sourceMappingURL=semconv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semconv.d.ts","sourceRoot":"","sources":["../../../../src/internal/instrumentation/vercel-ai/semconv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SPAN_NAME_GEN_AI_IMAGE_GENERATION = exports.SPAN_NAME_GEN_AI_EMBEDDINGS = exports.SPAN_NAME_GEN_AI_CHAT = exports.PROVIDER_UNKNOWN = exports.PROVIDER_VERCEL = exports.PROVIDER_AZURE = exports.PROVIDER_AMAZON = exports.PROVIDER_GOOGLE = exports.PROVIDER_ANTHROPIC = exports.PROVIDER_OPENAI = exports.TOKEN_TYPE_OUTPUT = exports.TOKEN_TYPE_INPUT = exports.OPERATION_NAME_TRANSCRIPTION = exports.OPERATION_NAME_SPEECH_SYNTHESIS = exports.OPERATION_NAME_IMAGE_GENERATION = exports.OPERATION_NAME_EMBEDDINGS = exports.OPERATION_NAME_CHAT = exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = exports.EVENT_GEN_AI_CHOICE = exports.EVENT_GEN_AI_TOOL_MESSAGE = exports.EVENT_GEN_AI_SYSTEM_MESSAGE = exports.EVENT_GEN_AI_ASSISTANT_MESSAGE = exports.EVENT_GEN_AI_USER_MESSAGE = exports.ATTR_EVENT_NAME = exports.ATTR_GEN_AI_OPENAI_API_VERSION = exports.ATTR_GEN_AI_OPENAI_API_TYPE = exports.ATTR_GEN_AI_OPENAI_API_BASE = exports.ATTR_GEN_AI_COMPLETION = exports.ATTR_GEN_AI_PROMPT = exports.ATTR_GEN_AI_TOKEN_TYPE = exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = exports.ATTR_GEN_AI_USAGE_TOTAL_TOKENS = exports.ATTR_GEN_AI_USAGE_COMPLETION_TOKENS = exports.ATTR_GEN_AI_USAGE_PROMPT_TOKENS = exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = exports.ATTR_GEN_AI_RESPONSE_MODEL = exports.ATTR_GEN_AI_RESPONSE_ID = exports.ATTR_GEN_AI_REQUEST_ENCODING_FORMATS = exports.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY = exports.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY = exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = exports.ATTR_GEN_AI_REQUEST_TOP_K = exports.ATTR_GEN_AI_REQUEST_TOP_P = exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = exports.ATTR_GEN_AI_REQUEST_MODEL = exports.ATTR_GEN_AI_OPERATION_NAME = exports.ATTR_GEN_AI_SYSTEM = void 0;
|
|
4
|
+
exports.SPAN_NAME_GEN_AI_TRANSCRIPTION = exports.SPAN_NAME_GEN_AI_SPEECH_SYNTHESIS = void 0;
|
|
5
|
+
exports.ATTR_GEN_AI_SYSTEM = 'gen_ai.system';
|
|
6
|
+
exports.ATTR_GEN_AI_OPERATION_NAME = 'gen_ai.operation.name';
|
|
7
|
+
exports.ATTR_GEN_AI_REQUEST_MODEL = 'gen_ai.request.model';
|
|
8
|
+
exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = 'gen_ai.request.max_tokens';
|
|
9
|
+
exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = 'gen_ai.request.temperature';
|
|
10
|
+
exports.ATTR_GEN_AI_REQUEST_TOP_P = 'gen_ai.request.top_p';
|
|
11
|
+
exports.ATTR_GEN_AI_REQUEST_TOP_K = 'gen_ai.request.top_k';
|
|
12
|
+
exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = 'gen_ai.request.stop_sequences';
|
|
13
|
+
exports.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY = 'gen_ai.request.frequency_penalty';
|
|
14
|
+
exports.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY = 'gen_ai.request.presence_penalty';
|
|
15
|
+
exports.ATTR_GEN_AI_REQUEST_ENCODING_FORMATS = 'gen_ai.request.encoding_formats';
|
|
16
|
+
exports.ATTR_GEN_AI_RESPONSE_ID = 'gen_ai.response.id';
|
|
17
|
+
exports.ATTR_GEN_AI_RESPONSE_MODEL = 'gen_ai.response.model';
|
|
18
|
+
exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = 'gen_ai.response.finish_reasons';
|
|
19
|
+
exports.ATTR_GEN_AI_USAGE_PROMPT_TOKENS = 'gen_ai.usage.prompt_tokens';
|
|
20
|
+
exports.ATTR_GEN_AI_USAGE_COMPLETION_TOKENS = 'gen_ai.usage.completion_tokens';
|
|
21
|
+
exports.ATTR_GEN_AI_USAGE_TOTAL_TOKENS = 'gen_ai.usage.total_tokens';
|
|
22
|
+
exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = 'gen_ai.usage.input_tokens';
|
|
23
|
+
exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = 'gen_ai.usage.output_tokens';
|
|
24
|
+
exports.ATTR_GEN_AI_TOKEN_TYPE = 'gen_ai.token.type';
|
|
25
|
+
exports.ATTR_GEN_AI_PROMPT = 'gen_ai.prompt';
|
|
26
|
+
exports.ATTR_GEN_AI_COMPLETION = 'gen_ai.completion';
|
|
27
|
+
exports.ATTR_GEN_AI_OPENAI_API_BASE = 'gen_ai.openai.api_base';
|
|
28
|
+
exports.ATTR_GEN_AI_OPENAI_API_TYPE = 'gen_ai.openai.api_type';
|
|
29
|
+
exports.ATTR_GEN_AI_OPENAI_API_VERSION = 'gen_ai.openai.api_version';
|
|
30
|
+
exports.ATTR_EVENT_NAME = 'event.name';
|
|
31
|
+
exports.EVENT_GEN_AI_USER_MESSAGE = 'gen_ai.user.message';
|
|
32
|
+
exports.EVENT_GEN_AI_ASSISTANT_MESSAGE = 'gen_ai.assistant.message';
|
|
33
|
+
exports.EVENT_GEN_AI_SYSTEM_MESSAGE = 'gen_ai.system.message';
|
|
34
|
+
exports.EVENT_GEN_AI_TOOL_MESSAGE = 'gen_ai.tool.message';
|
|
35
|
+
exports.EVENT_GEN_AI_CHOICE = 'gen_ai.choice';
|
|
36
|
+
exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = 'gen_ai.client.operation.duration';
|
|
37
|
+
exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = 'gen_ai.client.token.usage';
|
|
38
|
+
exports.OPERATION_NAME_CHAT = 'chat';
|
|
39
|
+
exports.OPERATION_NAME_EMBEDDINGS = 'embeddings';
|
|
40
|
+
exports.OPERATION_NAME_IMAGE_GENERATION = 'image_generation';
|
|
41
|
+
exports.OPERATION_NAME_SPEECH_SYNTHESIS = 'speech_synthesis';
|
|
42
|
+
exports.OPERATION_NAME_TRANSCRIPTION = 'transcription';
|
|
43
|
+
exports.TOKEN_TYPE_INPUT = 'input';
|
|
44
|
+
exports.TOKEN_TYPE_OUTPUT = 'output';
|
|
45
|
+
exports.PROVIDER_OPENAI = 'openai';
|
|
46
|
+
exports.PROVIDER_ANTHROPIC = 'anthropic';
|
|
47
|
+
exports.PROVIDER_GOOGLE = 'google';
|
|
48
|
+
exports.PROVIDER_AMAZON = 'amazon';
|
|
49
|
+
exports.PROVIDER_AZURE = 'azure';
|
|
50
|
+
exports.PROVIDER_VERCEL = 'vercel';
|
|
51
|
+
exports.PROVIDER_UNKNOWN = 'unknown';
|
|
52
|
+
exports.SPAN_NAME_GEN_AI_CHAT = 'gen_ai.chat';
|
|
53
|
+
exports.SPAN_NAME_GEN_AI_EMBEDDINGS = 'gen_ai.embeddings';
|
|
54
|
+
exports.SPAN_NAME_GEN_AI_IMAGE_GENERATION = 'gen_ai.image_generation';
|
|
55
|
+
exports.SPAN_NAME_GEN_AI_SPEECH_SYNTHESIS = 'gen_ai.speech_synthesis';
|
|
56
|
+
exports.SPAN_NAME_GEN_AI_TRANSCRIPTION = 'gen_ai.transcription';
|
|
57
|
+
//# sourceMappingURL=semconv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semconv.js","sourceRoot":"","sources":["../../../../src/internal/instrumentation/vercel-ai/semconv.ts"],"names":[],"mappings":";;;;AAMa,QAAA,kBAAkB,GAAG,eAAwB,CAAC;AAC9C,QAAA,0BAA0B,GAAG,uBAAgC,CAAC;AAC9D,QAAA,yBAAyB,GAAG,sBAA+B,CAAC;AAC5D,QAAA,8BAA8B,GAAG,2BAAoC,CAAC;AACtE,QAAA,+BAA+B,GAAG,4BAAqC,CAAC;AACxE,QAAA,yBAAyB,GAAG,sBAA+B,CAAC;AAC5D,QAAA,yBAAyB,GAAG,sBAA+B,CAAC;AAC5D,QAAA,kCAAkC,GAAG,+BAAwC,CAAC;AAC9E,QAAA,qCAAqC,GAAG,kCAA2C,CAAC;AACpF,QAAA,oCAAoC,GAAG,iCAA0C,CAAC;AAClF,QAAA,oCAAoC,GAAG,iCAA0C,CAAC;AAGlF,QAAA,uBAAuB,GAAG,oBAA6B,CAAC;AACxD,QAAA,0BAA0B,GAAG,uBAAgC,CAAC;AAC9D,QAAA,mCAAmC,GAAG,gCAAyC,CAAC;AAGhF,QAAA,+BAA+B,GAAG,4BAAqC,CAAC;AACxE,QAAA,mCAAmC,GAAG,gCAAyC,CAAC;AAChF,QAAA,8BAA8B,GAAG,2BAAoC,CAAC;AAGtE,QAAA,8BAA8B,GAAG,2BAAoC,CAAC;AACtE,QAAA,+BAA+B,GAAG,4BAAqC,CAAC;AAGxE,QAAA,sBAAsB,GAAG,mBAA4B,CAAC;AAGtD,QAAA,kBAAkB,GAAG,eAAwB,CAAC;AAC9C,QAAA,sBAAsB,GAAG,mBAA4B,CAAC;AAGtD,QAAA,2BAA2B,GAAG,wBAAiC,CAAC;AAChE,QAAA,2BAA2B,GAAG,wBAAiC,CAAC;AAChE,QAAA,8BAA8B,GAAG,2BAAoC,CAAC;AAGtE,QAAA,eAAe,GAAG,YAAqB,CAAC;AAGxC,QAAA,yBAAyB,GAAG,qBAA8B,CAAC;AAC3D,QAAA,8BAA8B,GAAG,0BAAmC,CAAC;AACrE,QAAA,2BAA2B,GAAG,uBAAgC,CAAC;AAC/D,QAAA,yBAAyB,GAAG,qBAA8B,CAAC;AAC3D,QAAA,mBAAmB,GAAG,eAAwB,CAAC;AAG/C,QAAA,uCAAuC,GAAG,kCAA2C,CAAC;AACtF,QAAA,gCAAgC,GAAG,2BAAoC,CAAC;AAGxE,QAAA,mBAAmB,GAAG,MAAe,CAAC;AACtC,QAAA,yBAAyB,GAAG,YAAqB,CAAC;AAClD,QAAA,+BAA+B,GAAG,kBAA2B,CAAC;AAC9D,QAAA,+BAA+B,GAAG,kBAA2B,CAAC;AAC9D,QAAA,4BAA4B,GAAG,eAAwB,CAAC;AAGxD,QAAA,gBAAgB,GAAG,OAAgB,CAAC;AACpC,QAAA,iBAAiB,GAAG,QAAiB,CAAC;AAGtC,QAAA,eAAe,GAAG,QAAiB,CAAC;AACpC,QAAA,kBAAkB,GAAG,WAAoB,CAAC;AAC1C,QAAA,eAAe,GAAG,QAAiB,CAAC;AACpC,QAAA,eAAe,GAAG,QAAiB,CAAC;AACpC,QAAA,cAAc,GAAG,OAAgB,CAAC;AAClC,QAAA,eAAe,GAAG,QAAiB,CAAC;AACpC,QAAA,gBAAgB,GAAG,SAAkB,CAAC;AAGtC,QAAA,qBAAqB,GAAG,aAAsB,CAAC;AAC/C,QAAA,2BAA2B,GAAG,mBAA4B,CAAC;AAC3D,QAAA,iCAAiC,GAAG,yBAAkC,CAAC;AACvE,QAAA,iCAAiC,GAAG,yBAAkC,CAAC;AACvE,QAAA,8BAA8B,GAAG,sBAA+B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Span } from '@opentelemetry/api';
|
|
2
|
+
import type { VercelAIInstrumentationConfig } from './types';
|
|
3
|
+
export interface StreamHandlerContext {
|
|
4
|
+
recordTokenMetrics: (usage: any, system: string, model: string) => void;
|
|
5
|
+
recordDurationMetric: (duration: number, system: string, model: string, operation: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare class StreamHandler {
|
|
8
|
+
private context;
|
|
9
|
+
constructor(context: StreamHandlerContext);
|
|
10
|
+
wrapStream(stream: any, span: Span, config: VercelAIInstrumentationConfig, provider: any, modelId: string, startTime: number): any;
|
|
11
|
+
private finalizeStream;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=stream-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/internal/instrumentation/vercel-ai/stream-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAQ/C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAG7D,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACpG;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAEjD,UAAU,CACR,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,6BAA6B,EACrC,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM;IA6FnB,OAAO,CAAC,cAAc;CAmDvB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StreamHandler = void 0;
|
|
4
|
+
const api_1 = require("@opentelemetry/api");
|
|
5
|
+
const semconv_1 = require("./semconv");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
class StreamHandler {
|
|
8
|
+
context;
|
|
9
|
+
constructor(context) {
|
|
10
|
+
this.context = context;
|
|
11
|
+
}
|
|
12
|
+
wrapStream(stream, span, config, provider, modelId, startTime) {
|
|
13
|
+
const self = this;
|
|
14
|
+
let fullText = '';
|
|
15
|
+
let finishReason;
|
|
16
|
+
let usage;
|
|
17
|
+
let response;
|
|
18
|
+
const wrappedStream = new Proxy(stream, {
|
|
19
|
+
get(target, prop) {
|
|
20
|
+
if (prop === Symbol.asyncIterator) {
|
|
21
|
+
return async function* () {
|
|
22
|
+
try {
|
|
23
|
+
for await (const chunk of target) {
|
|
24
|
+
if (chunk.type === 'text-delta' && chunk.textDelta) {
|
|
25
|
+
fullText += chunk.textDelta;
|
|
26
|
+
}
|
|
27
|
+
else if (chunk.type === 'finish') {
|
|
28
|
+
finishReason = chunk.finishReason;
|
|
29
|
+
usage = chunk.usage;
|
|
30
|
+
}
|
|
31
|
+
else if (chunk.type === 'response-metadata') {
|
|
32
|
+
response = chunk.response;
|
|
33
|
+
}
|
|
34
|
+
yield chunk;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
self.finalizeStream(span, config, provider, modelId, startTime, fullText, finishReason, usage, response);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (prop === 'textStream' || prop === 'fullStream') {
|
|
43
|
+
const originalStream = target[prop];
|
|
44
|
+
return {
|
|
45
|
+
[Symbol.asyncIterator]: async function* () {
|
|
46
|
+
try {
|
|
47
|
+
for await (const chunk of originalStream) {
|
|
48
|
+
if (prop === 'textStream') {
|
|
49
|
+
fullText += chunk;
|
|
50
|
+
}
|
|
51
|
+
yield chunk;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
const streamUsage = await target.usage.catch(() => null);
|
|
56
|
+
if (streamUsage) {
|
|
57
|
+
usage = streamUsage;
|
|
58
|
+
}
|
|
59
|
+
self.finalizeStream(span, config, provider, modelId, startTime, fullText, finishReason, usage, response);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const value = target[prop];
|
|
65
|
+
if (typeof value === 'function') {
|
|
66
|
+
return value.bind(target);
|
|
67
|
+
}
|
|
68
|
+
return value;
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return wrappedStream;
|
|
72
|
+
}
|
|
73
|
+
finalizeStream(span, config, provider, modelId, startTime, fullText, finishReason, usage, response) {
|
|
74
|
+
if (response) {
|
|
75
|
+
span.setAttributes({
|
|
76
|
+
...(response.id && { [semconv_1.ATTR_GEN_AI_RESPONSE_ID]: response.id }),
|
|
77
|
+
...(response.model && { [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: response.model }),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (finishReason) {
|
|
81
|
+
span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [finishReason]);
|
|
82
|
+
}
|
|
83
|
+
if (fullText) {
|
|
84
|
+
span.setAttributes((0, utils_1.completionToAttributes)(fullText, finishReason, config.captureMessageContent || false));
|
|
85
|
+
}
|
|
86
|
+
if (usage) {
|
|
87
|
+
span.setAttributes((0, utils_1.tokenUsageToAttributes)(usage));
|
|
88
|
+
if (config.enableMetrics) {
|
|
89
|
+
this.context.recordTokenMetrics(usage, provider.system, modelId);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (config.enableMetrics) {
|
|
93
|
+
const duration = (performance.now() - startTime) / 1000;
|
|
94
|
+
this.context.recordDurationMetric(duration, provider.system, modelId, semconv_1.OPERATION_NAME_CHAT);
|
|
95
|
+
}
|
|
96
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
97
|
+
span.end();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.StreamHandler = StreamHandler;
|
|
101
|
+
//# sourceMappingURL=stream-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-handler.js","sourceRoot":"","sources":["../../../../src/internal/instrumentation/vercel-ai/stream-handler.ts"],"names":[],"mappings":"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"}
|