lupislabs 1.0.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.
@@ -0,0 +1,21 @@
1
+ import * as api from '@opentelemetry/api';
2
+ export declare class LupisTracer {
3
+ private provider;
4
+ private tracer;
5
+ private chatIdProcessor;
6
+ private httpInterceptor;
7
+ private projectId;
8
+ constructor(config: {
9
+ projectId: string;
10
+ enabled?: boolean;
11
+ otlpEndpoint?: string;
12
+ serviceName?: string;
13
+ serviceVersion?: string;
14
+ });
15
+ getTracer(): api.Tracer;
16
+ setChatId(chatId: string): void;
17
+ clearChatId(): void;
18
+ createSpan(name: string, attributes?: api.Attributes, spanKind?: api.SpanKind): api.Span;
19
+ shutdown(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAqC1C,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;IAkDD,SAAS,IAAI,GAAG,CAAC,MAAM;IAIvB,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,WAAW;IAIX,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI;IAOlF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAShC"}
package/dist/tracer.js ADDED
@@ -0,0 +1,96 @@
1
+ import * as api from '@opentelemetry/api';
2
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
3
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
4
+ import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
5
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
6
+ import { Resource } from '@opentelemetry/resources';
7
+ import { HttpInterceptor } from './http-interceptor.js';
8
+ class ChatIdSpanProcessor {
9
+ setChatId(chatId) {
10
+ this.currentChatId = chatId;
11
+ }
12
+ clearChatId() {
13
+ this.currentChatId = undefined;
14
+ }
15
+ onStart(span) {
16
+ if (this.currentChatId) {
17
+ span.setAttribute('lupis.chat.id', this.currentChatId);
18
+ }
19
+ }
20
+ onEnd() {
21
+ }
22
+ forceFlush() {
23
+ return Promise.resolve();
24
+ }
25
+ shutdown() {
26
+ return Promise.resolve();
27
+ }
28
+ }
29
+ export class LupisTracer {
30
+ constructor(config) {
31
+ this.projectId = config.projectId;
32
+ const serviceName = config.serviceName || 'lupis-sdk';
33
+ const serviceVersion = config.serviceVersion || '1.0.0';
34
+ const enabled = config.enabled !== false;
35
+ const resource = Resource.default().merge(new Resource({
36
+ 'service.name': serviceName,
37
+ 'service.version': serviceVersion,
38
+ 'lupis.project.id': config.projectId,
39
+ }));
40
+ this.chatIdProcessor = new ChatIdSpanProcessor();
41
+ const spanProcessors = [this.chatIdProcessor];
42
+ if (enabled) {
43
+ const otlpUrl = config.otlpEndpoint || 'http://localhost:3010/v1/traces';
44
+ console.log(`[Lupis SDK] Initializing OTLP Exporter with URL: ${otlpUrl}`);
45
+ const otlpExporter = new OTLPTraceExporter({
46
+ url: otlpUrl,
47
+ headers: {
48
+ 'x-project-id': config.projectId,
49
+ },
50
+ });
51
+ spanProcessors.push(new BatchSpanProcessor(otlpExporter, {
52
+ scheduledDelayMillis: 5000,
53
+ maxQueueSize: 2048,
54
+ maxExportBatchSize: 512,
55
+ exportTimeoutMillis: 30000,
56
+ }));
57
+ }
58
+ else {
59
+ spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));
60
+ }
61
+ const isNode = typeof process !== 'undefined' && process.versions?.node;
62
+ this.provider = isNode
63
+ ? new NodeTracerProvider({ resource, spanProcessors })
64
+ : new WebTracerProvider({ resource, spanProcessors });
65
+ this.provider.register();
66
+ this.tracer = api.trace.getTracer(serviceName, serviceVersion);
67
+ // Initialize and start HTTP interception
68
+ this.httpInterceptor = new HttpInterceptor(this.tracer, this.provider, config.projectId);
69
+ this.httpInterceptor.startIntercepting();
70
+ }
71
+ getTracer() {
72
+ return this.tracer;
73
+ }
74
+ setChatId(chatId) {
75
+ this.chatIdProcessor.setChatId(chatId);
76
+ }
77
+ clearChatId() {
78
+ this.chatIdProcessor.clearChatId();
79
+ }
80
+ createSpan(name, attributes, spanKind) {
81
+ return this.tracer.startSpan(name, {
82
+ kind: spanKind || api.SpanKind.INTERNAL,
83
+ attributes,
84
+ });
85
+ }
86
+ async shutdown() {
87
+ console.log('[Lupis SDK] Stopping HTTP interception...');
88
+ await this.httpInterceptor.stopIntercepting();
89
+ console.log('[Lupis SDK] Flushing spans...');
90
+ await this.provider.forceFlush();
91
+ console.log('[Lupis SDK] Shutting down...');
92
+ await this.provider.shutdown();
93
+ console.log('[Lupis SDK] Shutdown complete');
94
+ }
95
+ }
96
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export interface LupisConfig {
2
+ projectId: string;
3
+ enabled?: boolean;
4
+ otlpEndpoint?: string;
5
+ serviceName?: string;
6
+ serviceVersion?: string;
7
+ }
8
+ export interface TraceData {
9
+ id: string;
10
+ projectId: string;
11
+ timestamp: number;
12
+ type: 'http_request';
13
+ input: {
14
+ url: string;
15
+ method: string;
16
+ headers?: Record<string, string>;
17
+ body?: any;
18
+ provider?: string;
19
+ };
20
+ output?: {
21
+ status: number;
22
+ headers?: Record<string, string>;
23
+ body?: any;
24
+ duration: number;
25
+ };
26
+ error?: string;
27
+ duration?: number;
28
+ metadata?: Record<string, any>;
29
+ chatId?: string;
30
+ }
31
+ export type ProviderName = 'openai' | 'claude' | 'cohere' | 'huggingface' | 'google' | 'unknown';
32
+ export interface NormalizedStreamingResult {
33
+ type: 'streaming_response';
34
+ provider: ProviderName;
35
+ model?: string;
36
+ aggregatedText?: string;
37
+ data?: string[];
38
+ toolCalls?: any[];
39
+ contentType?: string;
40
+ totalChunks?: number;
41
+ totalLength?: number;
42
+ isComplete?: boolean;
43
+ }
44
+ export interface ProviderHandler {
45
+ provider: ProviderName;
46
+ detect: (url: string) => boolean;
47
+ isStreamingChunk: (textChunk: string) => boolean;
48
+ accumulateChunk: (state: any, textChunk: string) => {
49
+ state: any;
50
+ result?: NormalizedStreamingResult;
51
+ };
52
+ normalizeFinal: (rawBodyText: string) => any;
53
+ }
54
+ export interface LupisBlockOptions {
55
+ chatId?: string;
56
+ name?: string;
57
+ metadata?: Record<string, any>;
58
+ captureHttp?: boolean;
59
+ captureConsole?: boolean;
60
+ }
61
+ export interface LupisInterceptorLike {
62
+ startIntercepting: () => void;
63
+ stopIntercepting: () => void;
64
+ setChatId: (chatId: string) => void;
65
+ clearChatId: () => void;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEhG,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,oBAAoB,CAAA;IAC1B,QAAQ,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAA;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAChC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAChD,eAAe,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAA;IACtG,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,GAAG,CAAA;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "lupislabs",
3
+ "version": "1.0.0",
4
+ "description": "LupisLabs JavaScript SDK for LangChain integration with local server tracing",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist/**/*",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "clean": "rm -rf dist",
22
+ "prepublishOnly": "npm run clean && npm run build",
23
+ "package": "npm run clean && npm run build && npm run create-zip",
24
+ "build:pack": "npm install && npm run build && rm -f lupislabs-js-sdk-*.tgz && npm pack",
25
+ "create-zip": "node scripts/create-package.js"
26
+ },
27
+ "keywords": [
28
+ "langchain",
29
+ "ai",
30
+ "tracing",
31
+ "lupislabs",
32
+ "sdk"
33
+ ],
34
+ "author": "LupisLabs",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "@opentelemetry/api": "^1.9.0",
38
+ "@opentelemetry/core": "^1.25.0",
39
+ "@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
40
+ "@opentelemetry/instrumentation": "^0.52.0",
41
+ "@opentelemetry/instrumentation-fetch": "^0.52.0",
42
+ "@opentelemetry/instrumentation-http": "^0.52.0",
43
+ "@opentelemetry/instrumentation-undici": "^0.16.2",
44
+ "@opentelemetry/resources": "^1.25.0",
45
+ "@opentelemetry/sdk-trace-base": "^1.25.0",
46
+ "@opentelemetry/sdk-trace-node": "^1.25.0",
47
+ "@opentelemetry/sdk-trace-web": "^1.25.0",
48
+ "@opentelemetry/semantic-conventions": "^1.25.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^20.0.0",
52
+ "typescript": "^5.0.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=16.0.0"
56
+ }
57
+ }