@paid-ai/paid-node 0.0.8 → 0.2.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/LICENSE +21 -0
- package/README.md +122 -11
- package/dist/cjs/Client.d.ts +22 -0
- package/dist/cjs/Client.js +45 -2
- package/dist/cjs/anthropic-wrapper/index.d.ts +1 -0
- package/dist/cjs/anthropic-wrapper/index.js +5 -0
- package/dist/cjs/api/resources/agents/client/Client.d.ts +52 -4
- package/dist/cjs/api/resources/agents/client/Client.js +52 -4
- package/dist/cjs/api/resources/agents/client/requests/AgentCreate.d.ts +4 -2
- package/dist/cjs/api/resources/contacts/client/Client.d.ts +4 -7
- package/dist/cjs/api/resources/contacts/client/Client.js +4 -7
- package/dist/cjs/api/resources/contacts/client/requests/ContactCreate.d.ts +8 -11
- package/dist/cjs/api/resources/customers/client/Client.d.ts +8 -2
- package/dist/cjs/api/resources/customers/client/Client.js +8 -2
- package/dist/cjs/api/resources/customers/client/requests/CustomerCreate.d.ts +2 -1
- package/dist/cjs/api/resources/orders/client/Client.d.ts +6 -5
- package/dist/cjs/api/resources/orders/client/Client.js +6 -5
- package/dist/cjs/api/resources/orders/client/requests/OrderCreate.d.ts +8 -7
- package/dist/cjs/api/resources/orders/resources/lines/client/Client.d.ts +11 -1
- package/dist/cjs/api/resources/orders/resources/lines/client/Client.js +11 -1
- package/dist/cjs/api/resources/orders/resources/lines/client/requests/LinesUpdateRequest.d.ts +11 -1
- package/dist/cjs/api/resources/usage/client/Client.d.ts +4 -2
- package/dist/cjs/api/resources/usage/client/Client.js +4 -2
- package/dist/cjs/api/resources/usage/client/requests/UsageRecordBulkRequest.d.ts +3 -1
- package/dist/cjs/api/types/BillingFrequency.d.ts +4 -4
- package/dist/cjs/api/types/BillingFrequency.js +3 -3
- package/dist/cjs/api/types/Pricing.d.ts +1 -0
- package/dist/cjs/api/types/PricingModelType.d.ts +2 -1
- package/dist/cjs/api/types/PricingModelType.js +1 -0
- package/dist/cjs/api/types/Signal.d.ts +1 -0
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/langchain-wrapper/index.d.ts +1 -0
- package/dist/cjs/langchain-wrapper/index.js +5 -0
- package/dist/cjs/mistral-wrapper/index.d.ts +1 -0
- package/dist/cjs/mistral-wrapper/index.js +5 -0
- package/dist/cjs/openai-wrapper/index.d.ts +1 -0
- package/dist/cjs/openai-wrapper/index.js +5 -0
- package/dist/cjs/tracing/signal.d.ts +1 -0
- package/dist/cjs/tracing/signal.js +54 -0
- package/dist/cjs/tracing/tracing.d.ts +8 -0
- package/dist/cjs/tracing/tracing.js +127 -0
- package/dist/cjs/tracing/wrappers/anthropicWrapper.d.ts +16 -0
- package/dist/cjs/tracing/wrappers/anthropicWrapper.js +84 -0
- package/dist/cjs/tracing/wrappers/langchainCallback.d.ts +21 -0
- package/dist/cjs/tracing/wrappers/langchainCallback.js +142 -0
- package/dist/cjs/tracing/wrappers/mistralWrapper.d.ts +17 -0
- package/dist/cjs/tracing/wrappers/mistralWrapper.js +81 -0
- package/dist/cjs/tracing/wrappers/openAiWrapper.d.ts +48 -0
- package/dist/cjs/tracing/wrappers/openAiWrapper.js +241 -0
- package/dist/cjs/tracing/wrappers/vercelAIWrapper.d.ts +22 -0
- package/dist/cjs/tracing/wrappers/vercelAIWrapper.js +327 -0
- package/dist/cjs/vercel-wrapper/index.d.ts +1 -0
- package/dist/cjs/vercel-wrapper/index.js +10 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wrapper/BatchUsage.d.ts +3 -3
- package/dist/cjs/wrapper/BatchUsage.js +4 -4
- package/dist/esm/Client.d.mts +22 -0
- package/dist/esm/Client.mjs +45 -2
- package/dist/esm/anthropic-wrapper/index.d.mts +1 -0
- package/dist/esm/anthropic-wrapper/index.mjs +1 -0
- package/dist/esm/api/resources/agents/client/Client.d.mts +52 -4
- package/dist/esm/api/resources/agents/client/Client.mjs +52 -4
- package/dist/esm/api/resources/agents/client/requests/AgentCreate.d.mts +4 -2
- package/dist/esm/api/resources/contacts/client/Client.d.mts +4 -7
- package/dist/esm/api/resources/contacts/client/Client.mjs +4 -7
- package/dist/esm/api/resources/contacts/client/requests/ContactCreate.d.mts +8 -11
- package/dist/esm/api/resources/customers/client/Client.d.mts +8 -2
- package/dist/esm/api/resources/customers/client/Client.mjs +8 -2
- package/dist/esm/api/resources/customers/client/requests/CustomerCreate.d.mts +2 -1
- package/dist/esm/api/resources/orders/client/Client.d.mts +6 -5
- package/dist/esm/api/resources/orders/client/Client.mjs +6 -5
- package/dist/esm/api/resources/orders/client/requests/OrderCreate.d.mts +8 -7
- package/dist/esm/api/resources/orders/resources/lines/client/Client.d.mts +11 -1
- package/dist/esm/api/resources/orders/resources/lines/client/Client.mjs +11 -1
- package/dist/esm/api/resources/orders/resources/lines/client/requests/LinesUpdateRequest.d.mts +11 -1
- package/dist/esm/api/resources/usage/client/Client.d.mts +4 -2
- package/dist/esm/api/resources/usage/client/Client.mjs +4 -2
- package/dist/esm/api/resources/usage/client/requests/UsageRecordBulkRequest.d.mts +3 -1
- package/dist/esm/api/types/BillingFrequency.d.mts +4 -4
- package/dist/esm/api/types/BillingFrequency.mjs +3 -3
- package/dist/esm/api/types/Pricing.d.mts +1 -0
- package/dist/esm/api/types/PricingModelType.d.mts +2 -1
- package/dist/esm/api/types/PricingModelType.mjs +1 -0
- package/dist/esm/api/types/Signal.d.mts +1 -0
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/langchain-wrapper/index.d.mts +1 -0
- package/dist/esm/langchain-wrapper/index.mjs +1 -0
- package/dist/esm/mistral-wrapper/index.d.mts +1 -0
- package/dist/esm/mistral-wrapper/index.mjs +1 -0
- package/dist/esm/openai-wrapper/index.d.mts +1 -0
- package/dist/esm/openai-wrapper/index.mjs +1 -0
- package/dist/esm/tracing/signal.d.mts +1 -0
- package/dist/esm/tracing/signal.mjs +51 -0
- package/dist/esm/tracing/tracing.d.mts +8 -0
- package/dist/esm/tracing/tracing.mjs +116 -0
- package/dist/esm/tracing/wrappers/anthropicWrapper.d.mts +16 -0
- package/dist/esm/tracing/wrappers/anthropicWrapper.mjs +80 -0
- package/dist/esm/tracing/wrappers/langchainCallback.d.mts +21 -0
- package/dist/esm/tracing/wrappers/langchainCallback.mjs +138 -0
- package/dist/esm/tracing/wrappers/mistralWrapper.d.mts +17 -0
- package/dist/esm/tracing/wrappers/mistralWrapper.mjs +77 -0
- package/dist/esm/tracing/wrappers/openAiWrapper.d.mts +48 -0
- package/dist/esm/tracing/wrappers/openAiWrapper.mjs +237 -0
- package/dist/esm/tracing/wrappers/vercelAIWrapper.d.mts +22 -0
- package/dist/esm/tracing/wrappers/vercelAIWrapper.mjs +319 -0
- package/dist/esm/vercel-wrapper/index.d.mts +1 -0
- package/dist/esm/vercel-wrapper/index.mjs +1 -0
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/dist/esm/wrapper/BatchUsage.d.mts +3 -3
- package/dist/esm/wrapper/BatchUsage.mjs +3 -3
- package/package.json +102 -4
- package/reference.md +96 -21
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
11
|
+
import { getCustomerIdStorage, getAgentIdStorage, getTokenStorage, paidTracer } from "../tracing.mjs";
|
|
12
|
+
export class PaidAnthropic {
|
|
13
|
+
constructor(anthropicClient) {
|
|
14
|
+
this.anthropic = anthropicClient;
|
|
15
|
+
this.tracer = paidTracer;
|
|
16
|
+
}
|
|
17
|
+
get messages() {
|
|
18
|
+
return new MessagesWrapper(this.anthropic, this.tracer);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
class MessagesWrapper {
|
|
22
|
+
constructor(anthropic, tracer) {
|
|
23
|
+
this.anthropic = anthropic;
|
|
24
|
+
this.tracer = tracer;
|
|
25
|
+
}
|
|
26
|
+
create(params) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
29
|
+
const externalAgentId = getAgentIdStorage();
|
|
30
|
+
const token = getTokenStorage();
|
|
31
|
+
if (!token || !externalCustomerId) {
|
|
32
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
33
|
+
}
|
|
34
|
+
return this.tracer.startActiveSpan("trace.anthropic.messages", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
const attributes = {
|
|
36
|
+
"gen_ai.system": "anthropic",
|
|
37
|
+
"gen_ai.operation.name": "messages",
|
|
38
|
+
external_customer_id: externalCustomerId,
|
|
39
|
+
token: token,
|
|
40
|
+
};
|
|
41
|
+
if (externalAgentId) {
|
|
42
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
43
|
+
}
|
|
44
|
+
// Set request model from params
|
|
45
|
+
if (params.model) {
|
|
46
|
+
attributes["gen_ai.request.model"] = params.model;
|
|
47
|
+
}
|
|
48
|
+
span.setAttributes(attributes);
|
|
49
|
+
try {
|
|
50
|
+
const response = (yield this.anthropic.messages.create(params));
|
|
51
|
+
// Add usage information from response
|
|
52
|
+
if (response.usage) {
|
|
53
|
+
span.setAttributes({
|
|
54
|
+
"gen_ai.usage.input_tokens": response.usage.input_tokens,
|
|
55
|
+
"gen_ai.usage.output_tokens": response.usage.output_tokens,
|
|
56
|
+
"gen_ai.response.model": response.model,
|
|
57
|
+
});
|
|
58
|
+
// Add Anthropic-specific cache usage if available
|
|
59
|
+
if ("cache_creation_input_tokens" in response.usage && response.usage.cache_creation_input_tokens) {
|
|
60
|
+
span.setAttribute("gen_ai.usage.cache_creation_input_tokens", response.usage.cache_creation_input_tokens);
|
|
61
|
+
}
|
|
62
|
+
if ("cache_read_input_tokens" in response.usage && response.usage.cache_read_input_tokens) {
|
|
63
|
+
span.setAttribute("gen_ai.usage.cache_read_input_tokens", response.usage.cache_read_input_tokens);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
67
|
+
return response;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
71
|
+
span.recordException(error);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
span.end();
|
|
76
|
+
}
|
|
77
|
+
}));
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
2
|
+
interface SerializedData {
|
|
3
|
+
id?: string[];
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}
|
|
6
|
+
interface Metadata {
|
|
7
|
+
ls_model_type?: string;
|
|
8
|
+
ls_model_name?: string;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export declare class PaidLangChainCallback extends BaseCallbackHandler {
|
|
12
|
+
name: string;
|
|
13
|
+
private tracer;
|
|
14
|
+
private spans;
|
|
15
|
+
constructor();
|
|
16
|
+
private extractProvider;
|
|
17
|
+
handleLLMStart(llm: SerializedData, prompts: string[], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>, tags?: string[], metadata?: Metadata): Promise<void>;
|
|
18
|
+
handleLLMEnd(output: any, runId: string, parentRunId?: string): Promise<void>;
|
|
19
|
+
handleLLMError(err: Error, runId: string, parentRunId?: string): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
11
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
12
|
+
import { getCustomerIdStorage, getAgentIdStorage, getTokenStorage, paidTracer } from "../tracing.mjs";
|
|
13
|
+
export class PaidLangChainCallback extends BaseCallbackHandler {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this.name = "PaidLangChainCallback";
|
|
17
|
+
this.spans = new Map();
|
|
18
|
+
this.tracer = paidTracer;
|
|
19
|
+
}
|
|
20
|
+
extractProvider(serialized) {
|
|
21
|
+
if (!(serialized === null || serialized === void 0 ? void 0 : serialized.id))
|
|
22
|
+
return "unknown";
|
|
23
|
+
const idStr = serialized.id.join(" ").toLowerCase();
|
|
24
|
+
if (idStr.includes("openai"))
|
|
25
|
+
return "openai";
|
|
26
|
+
if (idStr.includes("anthropic"))
|
|
27
|
+
return "anthropic";
|
|
28
|
+
if (idStr.includes("mistral"))
|
|
29
|
+
return "mistral";
|
|
30
|
+
if (idStr.includes("cohere"))
|
|
31
|
+
return "cohere";
|
|
32
|
+
if (idStr.includes("huggingface"))
|
|
33
|
+
return "huggingface";
|
|
34
|
+
if (idStr.includes("azure"))
|
|
35
|
+
return "azure";
|
|
36
|
+
return "unknown";
|
|
37
|
+
}
|
|
38
|
+
handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
41
|
+
const externalAgentId = getAgentIdStorage();
|
|
42
|
+
const token = getTokenStorage();
|
|
43
|
+
if (!token || !externalCustomerId) {
|
|
44
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
45
|
+
}
|
|
46
|
+
const modelType = (metadata === null || metadata === void 0 ? void 0 : metadata.ls_model_type) || "unknown";
|
|
47
|
+
const modelName = (metadata === null || metadata === void 0 ? void 0 : metadata.ls_model_name) || "unknown";
|
|
48
|
+
const spanName = `trace.langchain.${modelType}`;
|
|
49
|
+
const span = this.tracer.startSpan(spanName);
|
|
50
|
+
const attributes = {
|
|
51
|
+
"gen_ai.system": this.extractProvider(llm),
|
|
52
|
+
"gen_ai.operation.name": modelType,
|
|
53
|
+
"gen_ai.request.model": modelName,
|
|
54
|
+
external_customer_id: externalCustomerId,
|
|
55
|
+
token: token,
|
|
56
|
+
};
|
|
57
|
+
if (externalAgentId) {
|
|
58
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
59
|
+
}
|
|
60
|
+
span.setAttributes(attributes);
|
|
61
|
+
this.spans.set(runId, span);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
handleLLMEnd(output, runId, parentRunId) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
67
|
+
const span = this.spans.get(runId);
|
|
68
|
+
if (!span)
|
|
69
|
+
return;
|
|
70
|
+
try {
|
|
71
|
+
const attributes = {};
|
|
72
|
+
// Extract token usage information
|
|
73
|
+
if ((_a = output.llmOutput) === null || _a === void 0 ? void 0 : _a.tokenUsage) {
|
|
74
|
+
const usage = output.llmOutput.tokenUsage;
|
|
75
|
+
if (usage.promptTokens !== undefined) {
|
|
76
|
+
attributes["gen_ai.usage.input_tokens"] = usage.promptTokens;
|
|
77
|
+
}
|
|
78
|
+
if (usage.completionTokens !== undefined) {
|
|
79
|
+
attributes["gen_ai.usage.output_tokens"] = usage.completionTokens;
|
|
80
|
+
}
|
|
81
|
+
if (usage.cachedInputTokens !== undefined) {
|
|
82
|
+
attributes["gen_ai.usage.cached_input_tokens"] = usage.cachedInputTokens;
|
|
83
|
+
}
|
|
84
|
+
if (usage.reasoningOutputTokens !== undefined) {
|
|
85
|
+
attributes["gen_ai.usage.reasoning_output_tokens"] = usage.reasoningOutputTokens;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Alternative token usage format (some providers use different field names)
|
|
89
|
+
if ((_b = output.llmOutput) === null || _b === void 0 ? void 0 : _b.token_usage) {
|
|
90
|
+
const usage = output.llmOutput.token_usage;
|
|
91
|
+
if (usage.prompt_tokens !== undefined) {
|
|
92
|
+
attributes["gen_ai.usage.input_tokens"] = usage.prompt_tokens;
|
|
93
|
+
}
|
|
94
|
+
if (usage.completion_tokens !== undefined) {
|
|
95
|
+
attributes["gen_ai.usage.output_tokens"] = usage.completion_tokens;
|
|
96
|
+
}
|
|
97
|
+
if (usage.cached_input_tokens !== undefined) {
|
|
98
|
+
attributes["gen_ai.usage.cached_input_tokens"] = usage.cached_input_tokens;
|
|
99
|
+
}
|
|
100
|
+
if (usage.reasoning_output_tokens !== undefined) {
|
|
101
|
+
attributes["gen_ai.usage.reasoning_output_tokens"] = usage.reasoning_output_tokens;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Add model from response if available
|
|
105
|
+
if ((_c = output.llmOutput) === null || _c === void 0 ? void 0 : _c.modelName) {
|
|
106
|
+
attributes["gen_ai.response.model"] = output.llmOutput.modelName;
|
|
107
|
+
}
|
|
108
|
+
else if ((_d = output.llmOutput) === null || _d === void 0 ? void 0 : _d.model_name) {
|
|
109
|
+
attributes["gen_ai.response.model"] = output.llmOutput.model_name;
|
|
110
|
+
}
|
|
111
|
+
else if ((_j = (_h = (_g = (_f = (_e = output.generations) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.message) === null || _h === void 0 ? void 0 : _h["response_metadata"]) === null || _j === void 0 ? void 0 : _j.model_name) {
|
|
112
|
+
attributes["gen_ai.response.model"] = output.generations[0][0].message["response_metadata"].model_name;
|
|
113
|
+
}
|
|
114
|
+
span.setAttributes(attributes);
|
|
115
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
span.end();
|
|
119
|
+
this.spans.delete(runId);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
handleLLMError(err, runId, parentRunId) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
const span = this.spans.get(runId);
|
|
126
|
+
if (!span)
|
|
127
|
+
return;
|
|
128
|
+
try {
|
|
129
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
|
|
130
|
+
span.recordException(err);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
span.end();
|
|
134
|
+
this.spans.delete(runId);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Mistral } from "@mistralai/mistralai";
|
|
2
|
+
import { Tracer } from "@opentelemetry/api";
|
|
3
|
+
import { OCRRequest, OCRResponse } from "@mistralai/mistralai/models/components";
|
|
4
|
+
import { RequestOptions } from "@mistralai/mistralai/lib/sdks";
|
|
5
|
+
export declare class PaidMistral {
|
|
6
|
+
private readonly mistral;
|
|
7
|
+
private readonly tracer;
|
|
8
|
+
constructor(mistralClient: Mistral);
|
|
9
|
+
get ocr(): OCRWrapper;
|
|
10
|
+
}
|
|
11
|
+
declare class OCRWrapper {
|
|
12
|
+
private mistral;
|
|
13
|
+
private tracer;
|
|
14
|
+
constructor(mistral: Mistral, tracer: Tracer);
|
|
15
|
+
process(request: OCRRequest, options?: RequestOptions): Promise<OCRResponse>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
11
|
+
import { getCustomerIdStorage, getAgentIdStorage, getTokenStorage, paidTracer } from "../tracing.mjs";
|
|
12
|
+
export class PaidMistral {
|
|
13
|
+
constructor(mistralClient) {
|
|
14
|
+
this.mistral = mistralClient;
|
|
15
|
+
this.tracer = paidTracer;
|
|
16
|
+
}
|
|
17
|
+
get ocr() {
|
|
18
|
+
return new OCRWrapper(this.mistral, this.tracer);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
class OCRWrapper {
|
|
22
|
+
constructor(mistral, tracer) {
|
|
23
|
+
this.mistral = mistral;
|
|
24
|
+
this.tracer = tracer;
|
|
25
|
+
}
|
|
26
|
+
process(request, options) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
29
|
+
const externalAgentId = getAgentIdStorage();
|
|
30
|
+
const token = getTokenStorage();
|
|
31
|
+
if (!token || !externalCustomerId) {
|
|
32
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
33
|
+
}
|
|
34
|
+
return this.tracer.startActiveSpan("trace.mistral.ocr", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
var _a;
|
|
36
|
+
const attributes = {
|
|
37
|
+
"gen_ai.system": "mistral",
|
|
38
|
+
"gen_ai.operation.name": "ocr",
|
|
39
|
+
external_customer_id: externalCustomerId,
|
|
40
|
+
token: token,
|
|
41
|
+
};
|
|
42
|
+
if (externalAgentId) {
|
|
43
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
44
|
+
}
|
|
45
|
+
// Check if annotations are requested
|
|
46
|
+
if (request.bboxAnnotationFormat || request.documentAnnotationFormat) {
|
|
47
|
+
attributes["gen_ai.ocr.annotated"] = "true";
|
|
48
|
+
}
|
|
49
|
+
// Set request model
|
|
50
|
+
if (request.model) {
|
|
51
|
+
attributes["gen_ai.request.model"] = request.model;
|
|
52
|
+
}
|
|
53
|
+
span.setAttributes(attributes);
|
|
54
|
+
try {
|
|
55
|
+
const response = yield this.mistral.ocr.process(request, options);
|
|
56
|
+
// Add usage information from response
|
|
57
|
+
if (((_a = response.usageInfo) === null || _a === void 0 ? void 0 : _a.pagesProcessed) !== undefined) {
|
|
58
|
+
span.setAttribute("gen_ai.ocr.pages_processed", response.usageInfo.pagesProcessed);
|
|
59
|
+
}
|
|
60
|
+
if (response.model) {
|
|
61
|
+
span.setAttribute("gen_ai.response.model", response.model);
|
|
62
|
+
}
|
|
63
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
68
|
+
span.recordException(error);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
span.end();
|
|
73
|
+
}
|
|
74
|
+
}));
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { Tracer } from "@opentelemetry/api";
|
|
3
|
+
import { ChatCompletion, ChatCompletionCreateParams } from "openai/resources/chat/completions";
|
|
4
|
+
import { EmbeddingCreateParams } from "openai/resources/embeddings";
|
|
5
|
+
import { ImagesResponse, ImageGenerateParams } from "openai/resources/images";
|
|
6
|
+
import { CreateEmbeddingResponse } from "openai/resources/embeddings";
|
|
7
|
+
export declare class PaidOpenAI {
|
|
8
|
+
private readonly openai;
|
|
9
|
+
private readonly tracer;
|
|
10
|
+
constructor(openaiClient: any);
|
|
11
|
+
get chat(): ChatWrapper;
|
|
12
|
+
get embeddings(): EmbeddingsWrapper;
|
|
13
|
+
get images(): ImagesWrapper;
|
|
14
|
+
get responses(): ResponsesWrapper;
|
|
15
|
+
}
|
|
16
|
+
declare class ChatWrapper {
|
|
17
|
+
private openai;
|
|
18
|
+
private tracer;
|
|
19
|
+
constructor(openai: OpenAI, tracer: Tracer);
|
|
20
|
+
get completions(): ChatCompletionsWrapper;
|
|
21
|
+
}
|
|
22
|
+
declare class ChatCompletionsWrapper {
|
|
23
|
+
private openai;
|
|
24
|
+
private tracer;
|
|
25
|
+
constructor(openai: OpenAI, tracer: Tracer);
|
|
26
|
+
create(params: ChatCompletionCreateParams): Promise<ChatCompletion>;
|
|
27
|
+
}
|
|
28
|
+
type ResponseCreateParams = any;
|
|
29
|
+
type Response = any;
|
|
30
|
+
declare class ResponsesWrapper {
|
|
31
|
+
private openai;
|
|
32
|
+
private tracer;
|
|
33
|
+
constructor(openai: any, tracer: Tracer);
|
|
34
|
+
create(params: ResponseCreateParams): Promise<Response>;
|
|
35
|
+
}
|
|
36
|
+
declare class EmbeddingsWrapper {
|
|
37
|
+
private openai;
|
|
38
|
+
private tracer;
|
|
39
|
+
constructor(openai: OpenAI, tracer: Tracer);
|
|
40
|
+
create(params: EmbeddingCreateParams): Promise<CreateEmbeddingResponse>;
|
|
41
|
+
}
|
|
42
|
+
declare class ImagesWrapper {
|
|
43
|
+
private openai;
|
|
44
|
+
private tracer;
|
|
45
|
+
constructor(openai: OpenAI, tracer: Tracer);
|
|
46
|
+
generate(params: ImageGenerateParams): Promise<ImagesResponse>;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
11
|
+
import { getCustomerIdStorage, getAgentIdStorage, getTokenStorage, paidTracer } from "../tracing.mjs";
|
|
12
|
+
export class PaidOpenAI {
|
|
13
|
+
constructor(openaiClient) {
|
|
14
|
+
this.openai = openaiClient;
|
|
15
|
+
this.tracer = paidTracer;
|
|
16
|
+
}
|
|
17
|
+
get chat() {
|
|
18
|
+
return new ChatWrapper(this.openai, this.tracer);
|
|
19
|
+
}
|
|
20
|
+
get embeddings() {
|
|
21
|
+
return new EmbeddingsWrapper(this.openai, this.tracer);
|
|
22
|
+
}
|
|
23
|
+
get images() {
|
|
24
|
+
return new ImagesWrapper(this.openai, this.tracer);
|
|
25
|
+
}
|
|
26
|
+
get responses() {
|
|
27
|
+
return new ResponsesWrapper(this.openai, this.tracer);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class ChatWrapper {
|
|
31
|
+
constructor(openai, tracer) {
|
|
32
|
+
this.openai = openai;
|
|
33
|
+
this.tracer = tracer;
|
|
34
|
+
}
|
|
35
|
+
get completions() {
|
|
36
|
+
return new ChatCompletionsWrapper(this.openai, this.tracer);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
class ChatCompletionsWrapper {
|
|
40
|
+
constructor(openai, tracer) {
|
|
41
|
+
this.openai = openai;
|
|
42
|
+
this.tracer = tracer;
|
|
43
|
+
}
|
|
44
|
+
create(params) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
47
|
+
const externalAgentId = getAgentIdStorage();
|
|
48
|
+
const token = getTokenStorage();
|
|
49
|
+
if (!token || !externalCustomerId) {
|
|
50
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
51
|
+
}
|
|
52
|
+
return this.tracer.startActiveSpan("trace.openai.chat", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const attributes = {
|
|
54
|
+
"gen_ai.system": "openai",
|
|
55
|
+
"gen_ai.operation.name": "chat",
|
|
56
|
+
};
|
|
57
|
+
attributes["external_customer_id"] = externalCustomerId;
|
|
58
|
+
attributes["token"] = token;
|
|
59
|
+
if (externalAgentId) {
|
|
60
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
61
|
+
}
|
|
62
|
+
span.setAttributes(attributes);
|
|
63
|
+
try {
|
|
64
|
+
const response = (yield this.openai.chat.completions.create(params));
|
|
65
|
+
if (response.usage) {
|
|
66
|
+
span.setAttributes({
|
|
67
|
+
"gen_ai.usage.input_tokens": response.usage.prompt_tokens,
|
|
68
|
+
"gen_ai.usage.output_tokens": response.usage.completion_tokens,
|
|
69
|
+
"gen_ai.response.model": response.model,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
73
|
+
return response;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
77
|
+
span.recordException(error);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
span.end();
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
class ResponsesWrapper {
|
|
88
|
+
constructor(openai, tracer) {
|
|
89
|
+
this.openai = openai;
|
|
90
|
+
this.tracer = tracer;
|
|
91
|
+
}
|
|
92
|
+
create(params) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
95
|
+
const externalAgentId = getAgentIdStorage();
|
|
96
|
+
const token = getTokenStorage();
|
|
97
|
+
if (!token || !externalCustomerId) {
|
|
98
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
99
|
+
}
|
|
100
|
+
return this.tracer.startActiveSpan("trace.openai.responses", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
const attributes = {
|
|
103
|
+
"gen_ai.system": "openai",
|
|
104
|
+
"gen_ai.operation.name": "chat", // Equivalent to chat.completions
|
|
105
|
+
};
|
|
106
|
+
attributes["external_customer_id"] = externalCustomerId;
|
|
107
|
+
attributes["token"] = token;
|
|
108
|
+
if (externalAgentId) {
|
|
109
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
110
|
+
}
|
|
111
|
+
span.setAttributes(attributes);
|
|
112
|
+
try {
|
|
113
|
+
const response = yield this.openai.responses.create(params);
|
|
114
|
+
if (response.usage) {
|
|
115
|
+
span.setAttributes({
|
|
116
|
+
"gen_ai.usage.input_tokens": response.usage.input_tokens,
|
|
117
|
+
"gen_ai.usage.output_tokens": response.usage.output_tokens,
|
|
118
|
+
"gen_ai.response.model": response.model,
|
|
119
|
+
});
|
|
120
|
+
if ((_a = response.usage.input_tokens_details) === null || _a === void 0 ? void 0 : _a.cached_tokens) {
|
|
121
|
+
span.setAttribute("gen_ai.usage.cached_input_tokens", response.usage.input_tokens_details.cached_tokens);
|
|
122
|
+
}
|
|
123
|
+
if ((_b = response.usage.output_tokens_details) === null || _b === void 0 ? void 0 : _b.reasoning_tokens) {
|
|
124
|
+
span.setAttribute("gen_ai.usage.reasoning_output_tokens", response.usage.output_tokens_details.reasoning_tokens);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
128
|
+
return response;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
132
|
+
span.recordException(error);
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
span.end();
|
|
137
|
+
}
|
|
138
|
+
}));
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
class EmbeddingsWrapper {
|
|
143
|
+
constructor(openai, tracer) {
|
|
144
|
+
this.openai = openai;
|
|
145
|
+
this.tracer = tracer;
|
|
146
|
+
}
|
|
147
|
+
create(params) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
150
|
+
const externalAgentId = getAgentIdStorage();
|
|
151
|
+
const token = getTokenStorage();
|
|
152
|
+
if (!token || !externalCustomerId) {
|
|
153
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
154
|
+
}
|
|
155
|
+
return this.tracer.startActiveSpan("trace.openai.embeddings", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
156
|
+
const attributes = {
|
|
157
|
+
"gen_ai.system": "openai",
|
|
158
|
+
"gen_ai.operation.name": "embeddings",
|
|
159
|
+
};
|
|
160
|
+
attributes["external_customer_id"] = externalCustomerId;
|
|
161
|
+
attributes["token"] = token;
|
|
162
|
+
if (externalAgentId) {
|
|
163
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
164
|
+
}
|
|
165
|
+
span.setAttributes(attributes);
|
|
166
|
+
try {
|
|
167
|
+
const response = yield this.openai.embeddings.create(params);
|
|
168
|
+
if (response.usage) {
|
|
169
|
+
span.setAttributes({
|
|
170
|
+
"gen_ai.usage.input_tokens": response.usage.prompt_tokens,
|
|
171
|
+
"gen_ai.response.model": response.model,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
175
|
+
return response;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
179
|
+
span.recordException(error);
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
span.end();
|
|
184
|
+
}
|
|
185
|
+
}));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
class ImagesWrapper {
|
|
190
|
+
constructor(openai, tracer) {
|
|
191
|
+
this.openai = openai;
|
|
192
|
+
this.tracer = tracer;
|
|
193
|
+
}
|
|
194
|
+
generate(params) {
|
|
195
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
const externalCustomerId = getCustomerIdStorage();
|
|
197
|
+
const externalAgentId = getAgentIdStorage();
|
|
198
|
+
const token = getTokenStorage();
|
|
199
|
+
const model = params.model || "";
|
|
200
|
+
if (!token || !externalCustomerId) {
|
|
201
|
+
throw new Error("No token or externalCustomerId: This wrapper should be used inside a callback to paid.trace().");
|
|
202
|
+
}
|
|
203
|
+
return this.tracer.startActiveSpan("trace.openai.images", (span) => __awaiter(this, void 0, void 0, function* () {
|
|
204
|
+
var _a;
|
|
205
|
+
const attributes = {
|
|
206
|
+
"gen_ai.request.model": model,
|
|
207
|
+
"gen_ai.system": "openai",
|
|
208
|
+
"gen_ai.operation.name": "image_generation",
|
|
209
|
+
};
|
|
210
|
+
attributes["external_customer_id"] = externalCustomerId;
|
|
211
|
+
attributes["token"] = token;
|
|
212
|
+
if (externalAgentId) {
|
|
213
|
+
attributes["external_agent_id"] = externalAgentId;
|
|
214
|
+
}
|
|
215
|
+
span.setAttributes(attributes);
|
|
216
|
+
try {
|
|
217
|
+
const response = yield this.openai.images.generate(params);
|
|
218
|
+
span.setAttributes({
|
|
219
|
+
"gen_ai.image.count": (_a = params.n) !== null && _a !== void 0 ? _a : 1,
|
|
220
|
+
"gen_ai.image.size": params.size || "",
|
|
221
|
+
"gen_ai.image.quality": params.quality || "",
|
|
222
|
+
});
|
|
223
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
224
|
+
return response;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
228
|
+
span.recordException(error);
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
span.end();
|
|
233
|
+
}
|
|
234
|
+
}));
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { generateText as originalGenerateText, streamText as originalStreamText, generateObject as originalGenerateObject, streamObject as originalStreamObject, embed as originalEmbed, embedMany as originalEmbedMany } from "ai";
|
|
2
|
+
type GenerateTextParams = Parameters<typeof originalGenerateText>[0];
|
|
3
|
+
type StreamTextParams = Parameters<typeof originalStreamText>[0];
|
|
4
|
+
type GenerateObjectParams = Parameters<typeof originalGenerateObject>[0];
|
|
5
|
+
type StreamObjectParams = Parameters<typeof originalStreamObject>[0];
|
|
6
|
+
type EmbedParams = Parameters<typeof originalEmbed>[0];
|
|
7
|
+
type EmbedManyParams = Parameters<typeof originalEmbedMany>[0];
|
|
8
|
+
export declare function generateText(params: GenerateTextParams): Promise<ReturnType<typeof originalGenerateText>>;
|
|
9
|
+
export declare function streamText(params: StreamTextParams): Promise<ReturnType<typeof originalStreamText>>;
|
|
10
|
+
export declare function generateObject(params: GenerateObjectParams): Promise<ReturnType<typeof originalGenerateObject>>;
|
|
11
|
+
export declare function streamObject(params: StreamObjectParams): Promise<ReturnType<typeof originalStreamObject>>;
|
|
12
|
+
export declare function embed(params: EmbedParams): Promise<ReturnType<typeof originalEmbed>>;
|
|
13
|
+
export declare function embedMany(params: EmbedManyParams): Promise<ReturnType<typeof originalEmbedMany>>;
|
|
14
|
+
declare const _default: {
|
|
15
|
+
generateText: typeof generateText;
|
|
16
|
+
streamText: typeof streamText;
|
|
17
|
+
generateObject: typeof generateObject;
|
|
18
|
+
streamObject: typeof streamObject;
|
|
19
|
+
embed: typeof embed;
|
|
20
|
+
embedMany: typeof embedMany;
|
|
21
|
+
};
|
|
22
|
+
export default _default;
|