@revenium/litellm 0.0.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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +630 -0
  3. package/dist/client.d.ts +17 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +713 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +42 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +332 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/constants.d.ts +15 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +101 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/index.d.ts +42 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +189 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/prompt-extraction.d.ts +11 -0
  20. package/dist/prompt-extraction.d.ts.map +1 -0
  21. package/dist/prompt-extraction.js +201 -0
  22. package/dist/prompt-extraction.js.map +1 -0
  23. package/dist/tracking.d.ts +47 -0
  24. package/dist/tracking.d.ts.map +1 -0
  25. package/dist/tracking.js +299 -0
  26. package/dist/tracking.js.map +1 -0
  27. package/dist/types.d.ts +348 -0
  28. package/dist/types.d.ts.map +1 -0
  29. package/dist/types.js +3 -0
  30. package/dist/types.js.map +1 -0
  31. package/dist/utils/circuit-breaker.d.ts +114 -0
  32. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  33. package/dist/utils/circuit-breaker.js +216 -0
  34. package/dist/utils/circuit-breaker.js.map +1 -0
  35. package/dist/utils/error-handling.d.ts +166 -0
  36. package/dist/utils/error-handling.d.ts.map +1 -0
  37. package/dist/utils/error-handling.js +306 -0
  38. package/dist/utils/error-handling.js.map +1 -0
  39. package/dist/utils/logger-types.d.ts +171 -0
  40. package/dist/utils/logger-types.d.ts.map +1 -0
  41. package/dist/utils/logger-types.js +210 -0
  42. package/dist/utils/logger-types.js.map +1 -0
  43. package/dist/utils/provider-detection.d.ts +43 -0
  44. package/dist/utils/provider-detection.d.ts.map +1 -0
  45. package/dist/utils/provider-detection.js +103 -0
  46. package/dist/utils/provider-detection.js.map +1 -0
  47. package/dist/utils/stop-reason.d.ts +58 -0
  48. package/dist/utils/stop-reason.d.ts.map +1 -0
  49. package/dist/utils/stop-reason.js +136 -0
  50. package/dist/utils/stop-reason.js.map +1 -0
  51. package/dist/utils/summary-printer.d.ts +23 -0
  52. package/dist/utils/summary-printer.d.ts.map +1 -0
  53. package/dist/utils/summary-printer.js +234 -0
  54. package/dist/utils/summary-printer.js.map +1 -0
  55. package/dist/utils/trace-fields.d.ts +10 -0
  56. package/dist/utils/trace-fields.d.ts.map +1 -0
  57. package/dist/utils/trace-fields.js +117 -0
  58. package/dist/utils/trace-fields.js.map +1 -0
  59. package/dist/utils/validation.d.ts +121 -0
  60. package/dist/utils/validation.d.ts.map +1 -0
  61. package/dist/utils/validation.js +451 -0
  62. package/dist/utils/validation.js.map +1 -0
  63. package/examples/README.md +321 -0
  64. package/examples/litellm-basic.ts +240 -0
  65. package/examples/litellm-streaming.ts +309 -0
  66. package/examples/prompt-capture.ts +128 -0
  67. package/package.json +85 -0
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendReveniumMetrics = sendReveniumMetrics;
4
+ exports.trackUsageAsync = trackUsageAsync;
5
+ exports.trackEmbeddingsUsageAsync = trackEmbeddingsUsageAsync;
6
+ exports.extractMetadataFromHeaders = extractMetadataFromHeaders;
7
+ exports.extractUsageFromResponse = extractUsageFromResponse;
8
+ const config_1 = require("./config");
9
+ const provider_detection_1 = require("./utils/provider-detection");
10
+ const stop_reason_1 = require("./utils/stop-reason");
11
+ const error_handling_1 = require("./utils/error-handling");
12
+ const circuit_breaker_1 = require("./utils/circuit-breaker");
13
+ const trace_fields_1 = require("./utils/trace-fields");
14
+ const constants_1 = require("./constants");
15
+ const summary_printer_1 = require("./utils/summary-printer");
16
+ const prompt_extraction_1 = require("./prompt-extraction");
17
+ const logger = (0, config_1.getLogger)();
18
+ async function sendReveniumMetrics(data) {
19
+ const config = (0, config_1.getConfig)();
20
+ if (!config)
21
+ return logger.warn("Revenium configuration not found, skipping tracking");
22
+ const now = new Date().toISOString();
23
+ const requestTime = new Date(Date.now() - data.duration).toISOString();
24
+ // Determine operation type and set appropriate defaults
25
+ const operationType = data.operationType || "CHAT";
26
+ const isEmbedding = operationType === "EMBED";
27
+ // Construct nested subscriber object if subscriber data is available
28
+ let subscriber;
29
+ if (data.usageMetadata?.subscriberId &&
30
+ data.usageMetadata?.subscriberEmail &&
31
+ data.usageMetadata?.subscriberCredentialName &&
32
+ data.usageMetadata?.subscriberCredential) {
33
+ subscriber = {
34
+ id: data.usageMetadata.subscriberId,
35
+ email: data.usageMetadata.subscriberEmail,
36
+ credential: {
37
+ name: data.usageMetadata.subscriberCredentialName,
38
+ value: data.usageMetadata.subscriberCredential,
39
+ },
40
+ };
41
+ }
42
+ const region = await (0, trace_fields_1.getRegion)();
43
+ const attributes = {};
44
+ if (data.responseFormat) {
45
+ if (typeof data.responseFormat === "object" &&
46
+ data.responseFormat !== null) {
47
+ const formatType = data.responseFormat.type;
48
+ if (formatType) {
49
+ attributes.response_format_type = formatType;
50
+ if (formatType === "json_schema") {
51
+ const schemaName = data.responseFormat.json_schema?.name;
52
+ if (schemaName) {
53
+ attributes.response_format_schema_name = schemaName;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ else {
59
+ attributes.response_format = data.responseFormat;
60
+ }
61
+ }
62
+ const promptData = data.request && data.response
63
+ ? (0, prompt_extraction_1.extractPrompts)(data.request, data.response, data.usageMetadata)
64
+ : null;
65
+ const payload = {
66
+ stopReason: isEmbedding ? "END" : (0, stop_reason_1.getStopReason)(data.finishReason),
67
+ costType: "AI",
68
+ isStreamed: isEmbedding ? false : data.isStreamed || false,
69
+ operationType: operationType,
70
+ inputTokenCount: data.promptTokens,
71
+ outputTokenCount: isEmbedding ? 0 : data.completionTokens,
72
+ reasoningTokenCount: data.reasoningTokens || 0,
73
+ cacheCreationTokenCount: data.cachedTokens || 0,
74
+ cacheReadTokenCount: 0,
75
+ totalTokenCount: data.totalTokens,
76
+ model: (0, provider_detection_1.extractModelName)(data.model),
77
+ modelSource: (0, provider_detection_1.extractModelSource)(data.model),
78
+ transactionId: data.requestId,
79
+ responseTime: now,
80
+ requestDuration: Math.round(data.duration),
81
+ provider: (0, provider_detection_1.extractProvider)(data.model),
82
+ requestTime: requestTime,
83
+ completionStartTime: isEmbedding
84
+ ? now
85
+ : data.isStreamed && data.timeToFirstToken
86
+ ? new Date(Date.now() - (data.duration - data.timeToFirstToken)).toISOString()
87
+ : now,
88
+ timeToFirstToken: isEmbedding
89
+ ? 0
90
+ : data.timeToFirstToken || Math.round(data.duration),
91
+ middlewareSource: "nodejs",
92
+ traceId: data.usageMetadata?.traceId,
93
+ taskType: data.usageMetadata?.taskType,
94
+ agent: data.usageMetadata?.agent,
95
+ organizationId: data.usageMetadata?.organizationId || config.organizationId,
96
+ productId: data.usageMetadata?.productId,
97
+ subscriber: subscriber,
98
+ subscriptionId: data.usageMetadata?.subscriptionId,
99
+ responseQualityScore: data.usageMetadata?.responseQualityScore,
100
+ environment: data.usageMetadata?.environment || (0, trace_fields_1.getEnvironment)() || undefined,
101
+ operationSubtype: data.usageMetadata?.operationSubtype ||
102
+ (0, trace_fields_1.detectOperationSubtype)() ||
103
+ undefined,
104
+ retryNumber: data.usageMetadata?.retryNumber ?? (0, trace_fields_1.getRetryNumber)(),
105
+ parentTransactionId: data.usageMetadata?.parentTransactionId ||
106
+ (0, trace_fields_1.getParentTransactionId)() ||
107
+ undefined,
108
+ transactionName: data.usageMetadata?.transactionName || (0, trace_fields_1.getTransactionName)() || undefined,
109
+ region: data.usageMetadata?.region || region || undefined,
110
+ credentialAlias: data.usageMetadata?.credentialAlias || (0, trace_fields_1.getCredentialAlias)() || undefined,
111
+ traceType: data.usageMetadata?.traceType || (0, trace_fields_1.getTraceType)() || undefined,
112
+ traceName: data.usageMetadata?.traceName || (0, trace_fields_1.getTraceName)() || undefined,
113
+ ...(Object.keys(attributes).length > 0 && { attributes }),
114
+ ...(promptData && {
115
+ systemPrompt: promptData.systemPrompt,
116
+ inputMessages: promptData.inputMessages,
117
+ outputResponse: promptData.outputResponse,
118
+ promptsTruncated: promptData.promptsTruncated,
119
+ }),
120
+ };
121
+ // Remove undefined values to clean up the payload
122
+ Object.keys(payload).forEach((key) => {
123
+ const typedKey = key;
124
+ if (payload[typedKey] === undefined)
125
+ delete payload[typedKey];
126
+ });
127
+ const url = `${config.reveniumMeteringBaseUrl}/${constants_1.REVENIUM_COMPLETION_ENDPOINT}`;
128
+ const timeout = config.apiTimeout || 5000;
129
+ logger.debug("Sending Revenium API request", {
130
+ url,
131
+ requestId: data.requestId,
132
+ model: data.model,
133
+ provider: (0, provider_detection_1.extractProvider)(data.model),
134
+ totalTokens: data.totalTokens,
135
+ });
136
+ // Add specific debug logging for streaming fields
137
+ if (data.isStreamed) {
138
+ logger.debug("Streaming payload debug", {
139
+ requestId: data.requestId,
140
+ isStreamed: payload.isStreamed,
141
+ timeToFirstToken: payload.timeToFirstToken,
142
+ completionStartTime: payload.completionStartTime,
143
+ operationType: payload.operationType,
144
+ });
145
+ }
146
+ // Check circuit breaker before making request
147
+ if (!(0, circuit_breaker_1.canExecuteRequest)()) {
148
+ const stats = (0, circuit_breaker_1.getCircuitBreakerStats)();
149
+ logger.warn("Circuit breaker is open, skipping Revenium API call", {
150
+ requestId: data.requestId,
151
+ circuitState: stats.state,
152
+ timeUntilRecovery: stats.timeUntilRecovery,
153
+ });
154
+ if (!config.failSilent) {
155
+ throw new error_handling_1.ReveniumApiError("Circuit breaker is open - Revenium API temporarily unavailable", 503, "Service temporarily unavailable", (0, error_handling_1.createErrorContext)().withRequestId(data.requestId).build());
156
+ }
157
+ return;
158
+ }
159
+ // Create error handling strategy based on configuration
160
+ const errorStrategy = {
161
+ failSilent: config.failSilent !== false,
162
+ maxRetries: config.maxRetries || 3,
163
+ baseDelay: 1000,
164
+ logErrors: true,
165
+ };
166
+ const result = await (0, error_handling_1.executeWithErrorHandling)(async () => {
167
+ // Execute with circuit breaker protection
168
+ return await (0, circuit_breaker_1.executeWithCircuitBreaker)(async () => {
169
+ // Create abort controller for timeout
170
+ const controller = new AbortController();
171
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
172
+ const response = await fetch(url, {
173
+ method: "POST",
174
+ headers: {
175
+ "Content-Type": "application/json",
176
+ Accept: "application/json",
177
+ "x-api-key": config.reveniumMeteringApiKey,
178
+ },
179
+ body: JSON.stringify(payload),
180
+ signal: controller.signal,
181
+ });
182
+ clearTimeout(timeoutId);
183
+ logger.debug("Revenium API response", {
184
+ status: response.status,
185
+ statusText: response.statusText,
186
+ requestId: data.requestId,
187
+ });
188
+ if (!response.ok) {
189
+ const responseText = await response.text();
190
+ const errorContext = (0, error_handling_1.createErrorContext)()
191
+ .withRequestId(data.requestId)
192
+ .withModel(data.model)
193
+ .withStatus(response.status)
194
+ .with("responseBody", responseText)
195
+ .build();
196
+ logger.error("Revenium API error response", errorContext);
197
+ // Throw error to trigger circuit breaker
198
+ throw new error_handling_1.ReveniumApiError(`Revenium API error: ${response.status} ${response.statusText}`, response.status, responseText, errorContext);
199
+ }
200
+ const responseBody = await response.text();
201
+ logger.debug("Revenium tracking successful", {
202
+ requestId: data.requestId,
203
+ response: responseBody,
204
+ });
205
+ return response; // Return response for circuit breaker success
206
+ });
207
+ }, errorStrategy, logger, {
208
+ requestId: data.requestId,
209
+ model: data.model,
210
+ duration: data.duration,
211
+ totalTokens: data.totalTokens,
212
+ });
213
+ if (!result.success && result.error) {
214
+ logger.error("Revenium tracking failed after all retries", {
215
+ requestId: data.requestId,
216
+ error: result.error.message,
217
+ retryCount: result.retryCount,
218
+ });
219
+ }
220
+ (0, summary_printer_1.printUsageSummary)(payload);
221
+ }
222
+ /**
223
+ * Fire-and-forget async tracking wrapper
224
+ * This ensures tracking never blocks the main application flow
225
+ */
226
+ function trackUsageAsync(trackingData) {
227
+ // Run tracking in background without awaiting
228
+ // The sendReveniumMetrics function now handles retries and error strategies internally
229
+ sendReveniumMetrics(trackingData)
230
+ .then(() => {
231
+ logger.debug("Revenium tracking completed successfully", {
232
+ requestId: trackingData.requestId,
233
+ });
234
+ })
235
+ .catch((error) => {
236
+ // This should rarely happen since sendReveniumMetrics handles errors internally
237
+ // Only occurs if failSilent is false and all retries are exhausted
238
+ logger.warn("Revenium tracking failed completely", {
239
+ error: error instanceof Error ? error.message : String(error),
240
+ requestId: trackingData.requestId,
241
+ });
242
+ });
243
+ }
244
+ /**
245
+ * Fire-and-forget async tracking wrapper specifically for embeddings
246
+ * This ensures embeddings tracking never blocks the main application flow
247
+ */
248
+ function trackEmbeddingsUsageAsync(data) {
249
+ trackUsageAsync({
250
+ ...data,
251
+ completionTokens: 0, // Embeddings don't have completion tokens
252
+ finishReason: "stop", // Embeddings always complete normally
253
+ isStreamed: false, // Embeddings don't support streaming
254
+ timeToFirstToken: 0, // Not applicable for embeddings
255
+ operationType: "EMBED",
256
+ });
257
+ }
258
+ function extractMetadataFromHeaders(headers) {
259
+ return {
260
+ subscriberId: headers["x-revenium-subscriber-id"],
261
+ productId: headers["x-revenium-product-id"],
262
+ organizationId: headers["x-revenium-organization-id"],
263
+ traceId: headers["x-revenium-trace-id"],
264
+ taskType: headers["x-revenium-task-type"],
265
+ agent: headers["x-revenium-agent"],
266
+ subscriberEmail: headers["x-revenium-subscriber-email"],
267
+ subscriptionId: headers["x-revenium-subscription-id"],
268
+ subscriberCredentialName: headers["x-revenium-subscriber-credential-name"],
269
+ subscriberCredential: headers["x-revenium-subscriber-credential"],
270
+ environment: headers["x-revenium-environment"],
271
+ operationSubtype: headers["x-revenium-operation-subtype"],
272
+ retryNumber: headers["x-revenium-retry-number"]
273
+ ? parseInt(headers["x-revenium-retry-number"], 10)
274
+ : undefined,
275
+ parentTransactionId: headers["x-revenium-parent-transaction-id"],
276
+ transactionName: headers["x-revenium-transaction-name"],
277
+ region: headers["x-revenium-region"],
278
+ credentialAlias: headers["x-revenium-credential-alias"],
279
+ traceType: headers["x-revenium-trace-type"],
280
+ traceName: headers["x-revenium-trace-name"],
281
+ capturePrompts: headers["x-revenium-capture-prompts"]
282
+ ? headers["x-revenium-capture-prompts"].toLowerCase() === "true"
283
+ : undefined,
284
+ };
285
+ }
286
+ /**
287
+ * Process LiteLLM response and extract token usage
288
+ */
289
+ function extractUsageFromResponse(response) {
290
+ const usage = response.usage;
291
+ const finishReason = response.choices?.[0]?.finish_reason || null;
292
+ return {
293
+ promptTokens: usage?.prompt_tokens || 0,
294
+ completionTokens: usage?.completion_tokens || 0,
295
+ totalTokens: usage?.total_tokens || 0,
296
+ finishReason,
297
+ };
298
+ }
299
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Configuration for Revenium LiteLLM middleware
3
+ */
4
+ export interface ReveniumConfig {
5
+ /** Revenium metering API key (starts with hak_) */
6
+ reveniumMeteringApiKey: string;
7
+ /** Revenium metering base URL */
8
+ reveniumMeteringBaseUrl: string;
9
+ /** LiteLLM Proxy Server URL (can be base URL or full endpoint URL) */
10
+ litellmProxyUrl: string;
11
+ /** LiteLLM API key for proxy authentication */
12
+ litellmApiKey?: string;
13
+ /** Optional organization identifier for multi-tenant tracking */
14
+ organizationId?: string;
15
+ /** API timeout in milliseconds (default: 5000) */
16
+ apiTimeout?: number;
17
+ /** Whether to fail silently if Revenium tracking fails (default: true) */
18
+ failSilent?: boolean;
19
+ /** Maximum retries for failed Revenium API calls (default: 3) */
20
+ maxRetries?: number;
21
+ /** Print usage summary to console (default: false). Can be true, false, 'human', or 'json' */
22
+ printSummary?: boolean | "human" | "json";
23
+ /** Team ID for cost retrieval from Revenium API */
24
+ teamId?: string;
25
+ /** Whether to capture and send prompts to Revenium API (default: false) */
26
+ capturePrompts?: boolean;
27
+ /** Maximum size in characters for captured prompts before truncation (default: 50000). Note: uses JavaScript string length (UTF-16 code units), not byte count. */
28
+ maxPromptSize?: number;
29
+ }
30
+ /**
31
+ * Optional metadata for enhanced tracking and analytics
32
+ * Can be passed via headers or extracted from request context
33
+ */
34
+ export interface UsageMetadata {
35
+ traceId?: string;
36
+ taskId?: string;
37
+ taskType?: string;
38
+ subscriberEmail?: string;
39
+ subscriberId?: string;
40
+ subscriberCredentialName?: string;
41
+ subscriberCredential?: string;
42
+ organizationId?: string;
43
+ subscriptionId?: string;
44
+ productId?: string;
45
+ agent?: string;
46
+ responseQualityScore?: number;
47
+ environment?: string;
48
+ operationSubtype?: string;
49
+ retryNumber?: number;
50
+ parentTransactionId?: string;
51
+ transactionName?: string;
52
+ region?: string;
53
+ credentialAlias?: string;
54
+ traceType?: string;
55
+ traceName?: string;
56
+ capturePrompts?: boolean;
57
+ /** Maximum size in characters for captured prompts before truncation. Note: uses JavaScript string length (UTF-16 code units), not byte count. */
58
+ maxPromptSize?: number;
59
+ }
60
+ export interface SubscriberCredential {
61
+ name: string;
62
+ value: string;
63
+ }
64
+ export interface Subscriber {
65
+ id: string;
66
+ email: string;
67
+ credential: SubscriberCredential;
68
+ }
69
+ export interface ReveniumPayload {
70
+ stopReason: string;
71
+ costType: "AI";
72
+ isStreamed: boolean;
73
+ taskType?: string;
74
+ agent?: string;
75
+ operationType: "CHAT" | "EMBED";
76
+ inputTokenCount: number;
77
+ outputTokenCount: number;
78
+ reasoningTokenCount: number;
79
+ cacheCreationTokenCount: number;
80
+ cacheReadTokenCount: number;
81
+ totalTokenCount: number;
82
+ organizationId?: string;
83
+ productId?: string;
84
+ subscriber?: Subscriber;
85
+ subscriptionId?: string;
86
+ model: string;
87
+ modelSource: string;
88
+ transactionId: string;
89
+ responseTime: string;
90
+ requestDuration: number;
91
+ provider: string;
92
+ requestTime: string;
93
+ middlewareSource: string;
94
+ completionStartTime?: string;
95
+ timeToFirstToken: number;
96
+ traceId?: string;
97
+ responseQualityScore?: number;
98
+ environment?: string;
99
+ operationSubtype?: string;
100
+ retryNumber?: number;
101
+ parentTransactionId?: string;
102
+ transactionName?: string;
103
+ region?: string;
104
+ credentialAlias?: string;
105
+ traceType?: string;
106
+ traceName?: string;
107
+ attributes?: Record<string, unknown>;
108
+ systemPrompt?: string;
109
+ inputMessages?: string;
110
+ outputResponse?: string;
111
+ promptsTruncated?: boolean;
112
+ }
113
+ /**
114
+ * Supported message roles in LiteLLM
115
+ */
116
+ export type MessageRole = "system" | "user" | "assistant" | "function" | "tool";
117
+ /**
118
+ * Function call information for messages
119
+ */
120
+ export interface FunctionCall {
121
+ name: string;
122
+ arguments: string;
123
+ }
124
+ /**
125
+ * Tool call information for messages
126
+ */
127
+ export interface ToolCall {
128
+ id: string;
129
+ type: "function";
130
+ function: FunctionCall;
131
+ }
132
+ /**
133
+ * Chat message structure
134
+ */
135
+ export interface ChatMessage {
136
+ role: MessageRole;
137
+ content?: string | null;
138
+ name?: string;
139
+ function_call?: FunctionCall;
140
+ tool_calls?: ToolCall[];
141
+ tool_call_id?: string;
142
+ }
143
+ /**
144
+ * LiteLLM Chat Completion Request (OpenAI compatible)
145
+ */
146
+ export interface LiteLLMChatCompletionRequest {
147
+ model: string;
148
+ messages: ChatMessage[];
149
+ temperature?: number;
150
+ max_tokens?: number;
151
+ top_p?: number;
152
+ frequency_penalty?: number;
153
+ presence_penalty?: number;
154
+ stop?: string | string[];
155
+ stream?: boolean;
156
+ functions?: Array<{
157
+ name: string;
158
+ description?: string;
159
+ parameters?: Record<string, unknown>;
160
+ }>;
161
+ function_call?: "none" | "auto" | {
162
+ name: string;
163
+ };
164
+ tools?: Array<{
165
+ type: "function";
166
+ function: {
167
+ name: string;
168
+ description?: string;
169
+ parameters?: Record<string, unknown>;
170
+ };
171
+ }>;
172
+ tool_choice?: "none" | "auto" | {
173
+ type: "function";
174
+ function: {
175
+ name: string;
176
+ };
177
+ };
178
+ response_format?: {
179
+ type: "text";
180
+ } | {
181
+ type: "json_object";
182
+ } | {
183
+ type: "json_schema";
184
+ json_schema: {
185
+ name: string;
186
+ schema?: Record<string, unknown>;
187
+ strict?: boolean;
188
+ };
189
+ };
190
+ seed?: number;
191
+ user?: string;
192
+ }
193
+ /**
194
+ * Response message from LiteLLM
195
+ */
196
+ export interface ResponseMessage {
197
+ role: "assistant";
198
+ content: string | null;
199
+ function_call?: FunctionCall;
200
+ tool_calls?: ToolCall[];
201
+ }
202
+ /**
203
+ * Choice in LiteLLM response
204
+ */
205
+ export interface ResponseChoice {
206
+ index: number;
207
+ message: ResponseMessage;
208
+ finish_reason: string | null;
209
+ logprobs?: {
210
+ content?: Array<{
211
+ token: string;
212
+ logprob: number;
213
+ bytes?: number[];
214
+ top_logprobs?: Array<{
215
+ token: string;
216
+ logprob: number;
217
+ bytes?: number[];
218
+ }>;
219
+ }>;
220
+ };
221
+ }
222
+ /**
223
+ * Token usage information
224
+ */
225
+ export interface TokenUsage {
226
+ prompt_tokens: number;
227
+ completion_tokens: number;
228
+ total_tokens: number;
229
+ prompt_tokens_details?: {
230
+ cached_tokens?: number;
231
+ };
232
+ completion_tokens_details?: {
233
+ reasoning_tokens?: number;
234
+ };
235
+ }
236
+ /**
237
+ * LiteLLM Chat Completion Response (OpenAI compatible)
238
+ */
239
+ export interface LiteLLMChatCompletionResponse {
240
+ id: string;
241
+ object: "chat.completion";
242
+ created: number;
243
+ model: string;
244
+ choices: ResponseChoice[];
245
+ usage?: TokenUsage;
246
+ system_fingerprint?: string;
247
+ }
248
+ /**
249
+ * LiteLLM Embedding Request (OpenAI compatible)
250
+ */
251
+ export interface LiteLLMEmbeddingRequest {
252
+ model: string;
253
+ input: string | string[];
254
+ encoding_format?: string;
255
+ dimensions?: number;
256
+ user?: string;
257
+ [key: string]: any;
258
+ }
259
+ /**
260
+ * LiteLLM Embedding Response (OpenAI compatible)
261
+ */
262
+ export interface LiteLLMEmbeddingResponse {
263
+ object: "list";
264
+ data: Array<{
265
+ object: "embedding";
266
+ embedding: number[];
267
+ index: number;
268
+ }>;
269
+ model: string;
270
+ usage: {
271
+ prompt_tokens: number;
272
+ total_tokens: number;
273
+ };
274
+ [key: string]: any;
275
+ }
276
+ /**
277
+ * HTTP request body types
278
+ */
279
+ export type RequestBody = string | ArrayBuffer | ArrayBufferView | Blob | FormData | URLSearchParams | ReadableStream<Uint8Array> | null;
280
+ /**
281
+ * HTTP response body types
282
+ */
283
+ export type ResponseBody = LiteLLMChatCompletionResponse | ReadableStream<Uint8Array> | ArrayBuffer | Blob | string | null;
284
+ /**
285
+ * HTTP request context for tracking
286
+ */
287
+ export interface RequestContext {
288
+ url: string;
289
+ method: string;
290
+ headers: Record<string, string>;
291
+ body: RequestBody;
292
+ startTime: number;
293
+ metadata?: UsageMetadata;
294
+ }
295
+ /**
296
+ * HTTP response context for tracking
297
+ */
298
+ export interface ResponseContext {
299
+ status: number;
300
+ headers: Record<string, string>;
301
+ body: ResponseBody;
302
+ endTime: number;
303
+ isStream: boolean;
304
+ }
305
+ /**
306
+ * Custom headers for Revenium metadata
307
+ */
308
+ export interface ReveniumHeaders {
309
+ "x-revenium-subscriber-id"?: string;
310
+ "x-revenium-product-id"?: string;
311
+ "x-revenium-organization-id"?: string;
312
+ "x-revenium-trace-id"?: string;
313
+ "x-revenium-task-type"?: string;
314
+ "x-revenium-agent"?: string;
315
+ [key: string]: string | undefined;
316
+ }
317
+ /**
318
+ * Logger interface for the middleware
319
+ */
320
+ export interface Logger {
321
+ debug(message: string, ...args: any[]): void;
322
+ info(message: string, ...args: any[]): void;
323
+ warn(message: string, ...args: any[]): void;
324
+ error(message: string, ...args: any[]): void;
325
+ }
326
+ /**
327
+ * Middleware status information
328
+ */
329
+ export interface MiddlewareStatus {
330
+ initialized: boolean;
331
+ patched: boolean;
332
+ hasConfig: boolean;
333
+ proxyUrl?: string;
334
+ }
335
+ /**
336
+ * Provider pattern definitions for model detection
337
+ */
338
+ export interface ProviderPattern {
339
+ /** Standardized provider constant for Revenium API */
340
+ source: string;
341
+ /** Human-readable provider name */
342
+ displayName: string;
343
+ /** Model name patterns to match against */
344
+ patterns: string[];
345
+ /** Provider prefix patterns (e.g., "openai/" in "openai/gpt-4") */
346
+ prefixes: string[];
347
+ }
348
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map