@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 @@
1
+ {"version":3,"file":"trace-fields.d.ts","sourceRoot":"","sources":["../../src/utils/trace-fields.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAe9C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6CxD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAWlD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAsB5C;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAa5C;AAED,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAOvC"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEnvironment = getEnvironment;
4
+ exports.getRegion = getRegion;
5
+ exports.getCredentialAlias = getCredentialAlias;
6
+ exports.getTraceType = getTraceType;
7
+ exports.getTraceName = getTraceName;
8
+ exports.detectOperationSubtype = detectOperationSubtype;
9
+ exports.getParentTransactionId = getParentTransactionId;
10
+ exports.getTransactionName = getTransactionName;
11
+ exports.getRetryNumber = getRetryNumber;
12
+ const config_1 = require("../config");
13
+ const logger = (0, config_1.getLogger)();
14
+ let cachedRegion = null;
15
+ let regionCached = false;
16
+ function getEnvironment() {
17
+ const env = process.env.REVENIUM_ENVIRONMENT ||
18
+ process.env.NODE_ENV ||
19
+ process.env.DEPLOYMENT_ENV ||
20
+ null;
21
+ if (env && env.length > 255) {
22
+ logger.warn(`environment exceeds max length of 255 characters. Truncating.`);
23
+ return env.substring(0, 255).trim();
24
+ }
25
+ return env ? env.trim() : null;
26
+ }
27
+ async function getRegion() {
28
+ if (regionCached) {
29
+ return cachedRegion;
30
+ }
31
+ const envRegion = process.env.AWS_REGION ||
32
+ process.env.AZURE_REGION ||
33
+ process.env.GCP_REGION ||
34
+ process.env.REVENIUM_REGION;
35
+ if (envRegion) {
36
+ cachedRegion = envRegion.trim();
37
+ regionCached = true;
38
+ return cachedRegion;
39
+ }
40
+ try {
41
+ const controller = new AbortController();
42
+ const timeoutId = setTimeout(() => controller.abort(), 1000);
43
+ const response = await fetch("http://169.254.169.254/latest/meta-data/placement/region", {
44
+ signal: controller.signal,
45
+ });
46
+ clearTimeout(timeoutId);
47
+ if (!response.ok) {
48
+ cachedRegion = null;
49
+ regionCached = true;
50
+ return null;
51
+ }
52
+ const text = await response.text();
53
+ cachedRegion = text.trim();
54
+ regionCached = true;
55
+ return cachedRegion;
56
+ }
57
+ catch (error) {
58
+ cachedRegion = null;
59
+ regionCached = true;
60
+ return null;
61
+ }
62
+ }
63
+ function getCredentialAlias() {
64
+ const alias = process.env.REVENIUM_CREDENTIAL_ALIAS || null;
65
+ if (alias && alias.length > 255) {
66
+ logger.warn(`credentialAlias exceeds max length of 255 characters. Truncating.`);
67
+ return alias.substring(0, 255).trim();
68
+ }
69
+ return alias ? alias.trim() : null;
70
+ }
71
+ function getTraceType() {
72
+ const traceType = process.env.REVENIUM_TRACE_TYPE;
73
+ if (!traceType) {
74
+ return null;
75
+ }
76
+ if (!/^[a-zA-Z0-9_-]+$/.test(traceType)) {
77
+ logger.warn(`Invalid trace_type format: ${traceType}. Must be alphanumeric with hyphens/underscores only.`);
78
+ return null;
79
+ }
80
+ if (traceType.length > 128) {
81
+ logger.warn(`trace_type exceeds max length of 128 characters: ${traceType}. Truncating.`);
82
+ return traceType.substring(0, 128);
83
+ }
84
+ return traceType;
85
+ }
86
+ function getTraceName() {
87
+ const traceName = process.env.REVENIUM_TRACE_NAME;
88
+ if (!traceName) {
89
+ return null;
90
+ }
91
+ if (traceName.length > 256) {
92
+ logger.warn(`trace_name exceeds max length of 256 characters. Truncating.`);
93
+ return traceName.substring(0, 256);
94
+ }
95
+ return traceName;
96
+ }
97
+ function detectOperationSubtype(requestBody) {
98
+ if (requestBody && requestBody.tools && requestBody.tools.length > 0) {
99
+ return "function_call";
100
+ }
101
+ return null;
102
+ }
103
+ function getParentTransactionId() {
104
+ return process.env.REVENIUM_PARENT_TRANSACTION_ID || null;
105
+ }
106
+ function getTransactionName() {
107
+ return process.env.REVENIUM_TRANSACTION_NAME || null;
108
+ }
109
+ function getRetryNumber() {
110
+ const retryNum = process.env.REVENIUM_RETRY_NUMBER;
111
+ if (retryNum) {
112
+ const parsed = parseInt(retryNum, 10);
113
+ return isNaN(parsed) ? 0 : parsed;
114
+ }
115
+ return 0;
116
+ }
117
+ //# sourceMappingURL=trace-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-fields.js","sourceRoot":"","sources":["../../src/utils/trace-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Validation utilities for type-safe input handling
3
+ *
4
+ * This module provides runtime validation to replace 'any' types
5
+ * with proper type checking and validation.
6
+ */
7
+ import { ReveniumConfig, UsageMetadata } from "../types";
8
+ /**
9
+ * Type guard for checking if a value is a non-null object
10
+ */
11
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
12
+ /**
13
+ * Type guard for checking if a value is a string
14
+ */
15
+ export declare function isString(value: unknown): value is string;
16
+ /**
17
+ * Type guard for checking if a value is a number
18
+ */
19
+ export declare function isNumber(value: unknown): value is number;
20
+ /**
21
+ * Type guard for checking if a value is a boolean
22
+ */
23
+ export declare function isBoolean(value: unknown): value is boolean;
24
+ /**
25
+ * Validate and extract string from unknown value
26
+ * @param value - Value to validate
27
+ * @param defaultValue - Default value if validation fails
28
+ * @returns Validated string or default
29
+ */
30
+ export declare function validateString(value: unknown, defaultValue?: string): string;
31
+ /**
32
+ * Validate and extract number from unknown value
33
+ * @param value - Value to validate
34
+ * @param defaultValue - Default value if validation fails
35
+ * @returns Validated number or default
36
+ */
37
+ export declare function validateNumber(value: unknown, defaultValue?: number): number;
38
+ /**
39
+ * Validate and extract boolean from unknown value
40
+ * @param value - Value to validate
41
+ * @param defaultValue - Default value if validation fails
42
+ * @returns Validated boolean or default
43
+ */
44
+ export declare function validateBoolean(value: unknown, defaultValue?: boolean): boolean;
45
+ /**
46
+ * Validate HTTP headers object
47
+ * @param headers - Headers to validate
48
+ * @returns Validated headers record
49
+ */
50
+ export declare function validateHeaders(headers: unknown): Record<string, string>;
51
+ /**
52
+ * Validate usage metadata object
53
+ * @param metadata - Metadata to validate
54
+ * @returns Validated usage metadata
55
+ */
56
+ export declare function validateUsageMetadata(metadata: unknown): UsageMetadata;
57
+ /**
58
+ * Enhanced configuration validation with detailed error reporting
59
+ */
60
+ interface ConfigValidationResult {
61
+ isValid: boolean;
62
+ errors: string[];
63
+ warnings: string[];
64
+ config?: ReveniumConfig;
65
+ suggestions?: string[];
66
+ }
67
+ /**
68
+ * Validate Revenium configuration object with enhanced error reporting
69
+ * @param config - Configuration to validate
70
+ * @returns Detailed validation result
71
+ */
72
+ export declare function validateReveniumConfig(config: unknown): ConfigValidationResult;
73
+ /**
74
+ * Validate stream chunk data
75
+ * @param chunk - Chunk data to validate
76
+ * @returns Validated chunk or null if invalid
77
+ */
78
+ export declare function validateStreamChunk(chunk: unknown): {
79
+ usage?: {
80
+ prompt_tokens?: number;
81
+ completion_tokens?: number;
82
+ total_tokens?: number;
83
+ };
84
+ choices?: Array<{
85
+ finish_reason?: string;
86
+ delta?: {
87
+ content?: string;
88
+ };
89
+ }>;
90
+ x_groq?: {
91
+ usage?: {
92
+ prompt_tokens?: number;
93
+ completion_tokens?: number;
94
+ total_tokens?: number;
95
+ };
96
+ };
97
+ } | null;
98
+ /**
99
+ * Validate LiteLLM request data
100
+ * @param requestData - Request data to validate
101
+ * @param endpointType - Type of endpoint (chat or embeddings)
102
+ * @returns Validation result
103
+ */
104
+ export declare function validateLiteLLMRequest(requestData: unknown, endpointType: "chat" | "embeddings"): {
105
+ isValid: boolean;
106
+ errors: string[];
107
+ warnings: string[];
108
+ };
109
+ /**
110
+ * Validate URL for LiteLLM proxy requests
111
+ * @param url - URL to validate
112
+ * @param proxyUrl - Configured proxy URL
113
+ * @returns Validation result
114
+ */
115
+ export declare function validateLiteLLMUrl(url: string, proxyUrl: string): {
116
+ isValid: boolean;
117
+ errors: string[];
118
+ endpointType?: "chat" | "embeddings";
119
+ };
120
+ export {};
121
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,SAAK,GAAG,MAAM,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,SAAI,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,UAAQ,GAAG,OAAO,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,CAuBtE;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,GACd,sBAAsB,CAwJxB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG;IACnD,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC1E,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE;YACN,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;CACH,GAAG,IAAI,CAiEP;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,MAAM,GAAG,YAAY,GAClC;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CA2FA;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;CACtC,CAoDA"}