lupislabs 1.0.0 → 1.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 (60) hide show
  1. package/README.md +221 -359
  2. package/dist/cost-utils.d.ts +5 -0
  3. package/dist/cost-utils.d.ts.map +1 -0
  4. package/dist/cost-utils.js +51 -0
  5. package/dist/cost-utils.js.map +1 -0
  6. package/dist/endpoints.d.ts +2 -0
  7. package/dist/endpoints.d.ts.map +1 -0
  8. package/dist/endpoints.js +2 -0
  9. package/dist/endpoints.js.map +1 -0
  10. package/dist/http-interceptor.d.ts +18 -8
  11. package/dist/http-interceptor.d.ts.map +1 -1
  12. package/dist/http-interceptor.js +164 -416
  13. package/dist/http-interceptor.js.map +1 -1
  14. package/dist/index.d.ts +33 -6
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +96 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/interceptors/axios-interceptor.d.ts +18 -0
  19. package/dist/interceptors/axios-interceptor.d.ts.map +1 -0
  20. package/dist/interceptors/axios-interceptor.js +115 -0
  21. package/dist/interceptors/axios-interceptor.js.map +1 -0
  22. package/dist/interceptors/fetch-interceptor.d.ts +18 -0
  23. package/dist/interceptors/fetch-interceptor.d.ts.map +1 -0
  24. package/dist/interceptors/fetch-interceptor.js +228 -0
  25. package/dist/interceptors/fetch-interceptor.js.map +1 -0
  26. package/dist/interceptors/got-interceptor.d.ts +18 -0
  27. package/dist/interceptors/got-interceptor.d.ts.map +1 -0
  28. package/dist/interceptors/got-interceptor.js +103 -0
  29. package/dist/interceptors/got-interceptor.js.map +1 -0
  30. package/dist/interceptors/node-http-interceptor.d.ts +21 -0
  31. package/dist/interceptors/node-http-interceptor.d.ts.map +1 -0
  32. package/dist/interceptors/node-http-interceptor.js +301 -0
  33. package/dist/interceptors/node-http-interceptor.js.map +1 -0
  34. package/dist/providers/anthropic-handler.d.ts +3 -0
  35. package/dist/providers/anthropic-handler.d.ts.map +1 -0
  36. package/dist/providers/anthropic-handler.js +50 -0
  37. package/dist/providers/anthropic-handler.js.map +1 -0
  38. package/dist/providers/openai-handler.d.ts +3 -0
  39. package/dist/providers/openai-handler.d.ts.map +1 -0
  40. package/dist/providers/openai-handler.js +46 -0
  41. package/dist/providers/openai-handler.js.map +1 -0
  42. package/dist/providers/provider-detector.d.ts +4 -0
  43. package/dist/providers/provider-detector.d.ts.map +1 -0
  44. package/dist/providers/provider-detector.js +27 -0
  45. package/dist/providers/provider-detector.js.map +1 -0
  46. package/dist/sensitive-data-filter.d.ts +20 -0
  47. package/dist/sensitive-data-filter.d.ts.map +1 -0
  48. package/dist/sensitive-data-filter.js +280 -0
  49. package/dist/sensitive-data-filter.js.map +1 -0
  50. package/dist/trace-collector.d.ts +40 -0
  51. package/dist/trace-collector.d.ts.map +1 -0
  52. package/dist/trace-collector.js +59 -0
  53. package/dist/trace-collector.js.map +1 -0
  54. package/dist/tracer.d.ts +30 -7
  55. package/dist/tracer.d.ts.map +1 -1
  56. package/dist/tracer.js +76 -70
  57. package/dist/tracer.js.map +1 -1
  58. package/dist/types.d.ts +82 -6
  59. package/dist/types.d.ts.map +1 -1
  60. package/package.json +3 -17
@@ -0,0 +1,5 @@
1
+ export declare function calculateCost(tokenUsage: any, provider: string, model?: string): {
2
+ token_usage: any;
3
+ cost_breakdown: any;
4
+ };
5
+ //# sourceMappingURL=cost-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-utils.d.ts","sourceRoot":"","sources":["../src/cost-utils.ts"],"names":[],"mappings":"AACA,wBAAgB,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,cAAc,EAAE,GAAG,CAAA;CAAE,CA2B1H"}
@@ -0,0 +1,51 @@
1
+ // Utility helpers for normalizing cost information from provider token usage
2
+ export function calculateCost(tokenUsage, provider, model) {
3
+ const pricing = getPricing(provider, model);
4
+ const input_tokens = tokenUsage?.prompt_tokens ?? tokenUsage?.input_tokens ?? 0;
5
+ const output_tokens = tokenUsage?.completion_tokens ?? tokenUsage?.output_tokens ?? 0;
6
+ const cache_tokens = tokenUsage?.cache_tokens ?? 0;
7
+ const total_tokens = input_tokens + output_tokens + cache_tokens;
8
+ const input_cost = (input_tokens / 1000) * pricing.input_per_1k;
9
+ const output_cost = (output_tokens / 1000) * pricing.output_per_1k;
10
+ const cache_cost = (cache_tokens / 1000) * (pricing.cache_per_1k ?? 0);
11
+ const total_cost = input_cost + output_cost + cache_cost;
12
+ return {
13
+ token_usage: {
14
+ input_tokens,
15
+ output_tokens,
16
+ cache_tokens,
17
+ total_tokens
18
+ },
19
+ cost_breakdown: {
20
+ input_cost,
21
+ output_cost,
22
+ cache_cost,
23
+ total_cost
24
+ }
25
+ };
26
+ }
27
+ function getPricing(provider, model) {
28
+ // Pricing per 1K tokens (as of 2024)
29
+ const pricing = {
30
+ openai: {
31
+ 'gpt-4': { input_per_1k: 0.03, output_per_1k: 0.06, cache_per_1k: 0 },
32
+ 'gpt-4-turbo': { input_per_1k: 0.01, output_per_1k: 0.03, cache_per_1k: 0 },
33
+ 'gpt-3.5-turbo': { input_per_1k: 0.0015, output_per_1k: 0.002, cache_per_1k: 0 },
34
+ default: { input_per_1k: 0.03, output_per_1k: 0.06, cache_per_1k: 0 }
35
+ },
36
+ claude: {
37
+ 'claude-3-opus': { input_per_1k: 0.015, output_per_1k: 0.075, cache_per_1k: 0 },
38
+ 'claude-3-sonnet': { input_per_1k: 0.003, output_per_1k: 0.015, cache_per_1k: 0 },
39
+ 'claude-3-haiku': { input_per_1k: 0.00025, output_per_1k: 0.00125, cache_per_1k: 0 },
40
+ default: { input_per_1k: 0.003, output_per_1k: 0.015, cache_per_1k: 0 }
41
+ },
42
+ google: {
43
+ 'gemini-pro': { input_per_1k: 0.0005, output_per_1k: 0.0015, cache_per_1k: 0 },
44
+ default: { input_per_1k: 0.0005, output_per_1k: 0.0015, cache_per_1k: 0 }
45
+ }
46
+ };
47
+ const defaultPricing = { input_per_1k: 0.001, output_per_1k: 0.002, cache_per_1k: 0 };
48
+ const providerPricing = pricing[provider] ?? { default: defaultPricing };
49
+ return providerPricing[model ?? 'default'] ?? providerPricing.default ?? defaultPricing;
50
+ }
51
+ //# sourceMappingURL=cost-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-utils.js","sourceRoot":"","sources":["../src/cost-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_TRACES_ENDPOINT = "http://127.0.0.1:9009/api/traces";
2
+ //# sourceMappingURL=endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,qCAAqC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_TRACES_ENDPOINT = 'http://127.0.0.1:9009/api/traces';
2
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC"}
@@ -1,22 +1,32 @@
1
- import * as api from '@opentelemetry/api';
2
- import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
3
- import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
1
+ import { SensitiveDataFilter, LupisMetadata } from './types.js';
2
+ import { TraceCollector } from './trace-collector.js';
4
3
  export declare class HttpInterceptor {
5
4
  private originalFetch?;
6
5
  private originalHttpRequest?;
7
6
  private originalHttpsRequest?;
8
- private tracer;
9
- private provider;
7
+ private originalAxiosRequest?;
8
+ private originalGotRequest?;
9
+ private traceCollector;
10
10
  private projectId;
11
11
  private isIntercepting;
12
12
  private zlib?;
13
- constructor(tracer: api.Tracer, provider: NodeTracerProvider | WebTracerProvider, projectId: string);
13
+ private sensitiveDataFilter;
14
+ private currentChatId?;
15
+ private currentMetadata;
16
+ constructor(traceCollector: TraceCollector, projectId: string, sensitiveDataFilter?: SensitiveDataFilter);
17
+ setChatId(chatId: string): void;
18
+ clearChatId(): void;
19
+ setMetadata(metadata: LupisMetadata): void;
20
+ clearMetadata(): void;
21
+ private createTrace;
22
+ private sanitizeRequestBody;
23
+ private sanitizeResponseBody;
14
24
  startIntercepting(): void;
15
25
  stopIntercepting(): void;
16
26
  private patchFetch;
17
27
  private patchNodeHttp;
18
- private detectProvider;
19
- private resolveHandler;
28
+ private patchAxios;
29
+ private patchGot;
20
30
  private getRawResponseText;
21
31
  private decompressIfNeeded;
22
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-interceptor.d.ts","sourceRoot":"","sources":["../src/http-interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,OAAO,CAAC,mBAAmB,CAAC,CAAM;IAClC,OAAO,CAAC,oBAAoB,CAAC,CAAM;IACnC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,IAAI,CAAC,CAAM;gBAEP,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,iBAAiB,EAAE,SAAS,EAAE,MAAM;IAMnG,iBAAiB;IAUjB,gBAAgB;IAsBhB,OAAO,CAAC,UAAU;IA+LlB,OAAO,CAAC,aAAa;IAsKrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;YAYR,kBAAkB;IAShC,OAAO,CAAC,kBAAkB;CA4B3B"}
1
+ {"version":3,"file":"http-interceptor.d.ts","sourceRoot":"","sources":["../src/http-interceptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,cAAc,EAAa,MAAM,sBAAsB,CAAC;AAUjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,OAAO,CAAC,mBAAmB,CAAC,CAAM;IAClC,OAAO,CAAC,oBAAoB,CAAC,CAAM;IACnC,OAAO,CAAC,oBAAoB,CAAC,CAAM;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAM;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,IAAI,CAAC,CAAM;IACnB,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAqB;gBAG1C,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,mBAAmB;IAW3C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,aAAa,IAAI,IAAI;IAIrB,OAAO,CAAC,WAAW;IAsCnB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;IAI5B,iBAAiB;IAoBjB,gBAAgB;IAsChB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,QAAQ;YA6BF,kBAAkB;IAShC,OAAO,CAAC,kBAAkB;CA4B3B"}