netra-sdk 1.0.5 → 1.1.0-beta

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/http-client.ts","../src/api/dashboard/client.ts","../src/api/dashboard/models.ts","../src/api/dashboard/api.ts","../src/config.ts","../src/session-manager.ts","../src/types.ts","../src/span-wrapper.ts","../src/api/evaluation/client.ts","../src/api/evaluation/utils.ts","../src/api/evaluation/api.ts","../src/api/evaluation/models.ts","../src/api/evaluation/context.ts","../src/api/usage/client.ts","../src/api/usage/api.ts","../src/processors/session-span-processor.ts","../src/processors/instrumentation-span-processor.ts","../src/processors/scrubbing-span-processor.ts","../src/processors/llm-trace-identifier-span-processor.ts","../src/instrumentation/span-attributes.ts","../src/instrumentation/utils.ts","../src/instrumentation/anthropic/utils.ts","../src/instrumentation/anthropic/version.ts","../src/instrumentation/anthropic/wrappers.ts","../src/instrumentation/anthropic/index.ts","../src/instrumentation/google-genai/version.ts","../src/instrumentation/google-genai/utils.ts","../src/instrumentation/google-genai/wrappers.ts","../src/instrumentation/google-genai/index.ts","../src/instrumentation/groq/version.ts","../src/instrumentation/groq/utils.ts","../src/instrumentation/groq/wrappers.ts","../src/instrumentation/groq/index.ts","../src/instrumentation/langgraph/version.ts","../node_modules/@langchain/core/dist/_virtual/rolldown_runtime.js","../node_modules/@langchain/core/src/load/map_keys.ts","../node_modules/@langchain/core/src/load/validation.ts","../node_modules/@langchain/core/src/load/serializable.ts","../node_modules/@langchain/core/src/utils/env.ts","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/index.ts","../src/instrumentation/mistralai/version.ts","../src/instrumentation/mistralai/utils.ts","../src/instrumentation/mistralai/wrappers.ts","../src/instrumentation/mistralai/index.ts","../src/instrumentation/openai/version.ts","../src/instrumentation/openai/utils.ts","../src/instrumentation/openai/wrappers.ts","../src/instrumentation/openai/index.ts","../src/instrumentation/typeorm/utils.ts","../src/instrumentation/typeorm/wrappers.ts","../src/instrumentation/typeorm/version.ts","../src/instrumentation/typeorm/index.ts","../src/exporters/utils.ts","../src/exporters/filteringSpanExporter.ts","../src/exporters/trialAwareOtlpExporter.ts","../src/processors/localfiltering-span-processor.ts","../src/instrumentation/index.ts","../src/simulation/client.ts","../src/simulation/task.ts","../src/simulation/utils.ts","../src/simulation/api.ts","../src/decorators.ts","../src/index.ts"],"names":["config","Scope","ChartType","Measure","Aggregation","GroupBy","DimensionField","Operator","FilterType","FilterField","NetraInstruments","ConversationType","span","SpanType","trace","context","otelContext","task","EntryStatus","RunStatus","SpanKind","propagation","setRequestAttributes","setResponseAttributes","SpanStatusCode","value","__version__","safeStringify","isTraceContentEnabled","_setUsageAttributes","CHAT_SPAN_NAME","chatWrapper","INSTRUMENTATION_NAME","INSTRUMENTS","isInstrumented","STREAM_ENABLED_REQUESTS","AsyncStreamingWrapper","originalMethods","key: string","map?: SerializedKeyAlias","snakeCase","fields: SerializedFields","mapper: typeof keyToJson","mapped: SerializedFields","obj: Record<string, unknown>","obj: unknown","id: string[]","value: unknown","pathSet: WeakSet<object>","result: Record<string, unknown>","obj: T","root: SerializedFields","secretsMap: { [key: string]: string }","current: any","serializableClass: typeof Serializable","Serializable","kwargs?: SerializedFields","aliases: { [key: string]: string }","secrets: { [key: string]: string }","read: any","write: any","escapedKwargs: SerializedFields","env: string","runtimeEnvironment: RuntimeEnvironment | undefined","name: string","x: BaseCallbackHandler","input?: BaseCallbackHandlerInput","methods: CallbackHandlerMethods","x: unknown","getContextManager","EMBEDDING_SPAN_NAME","endTime","StreamingWrapper","chatStreamWrapper","embeddingsWrapper","ExportResultCode","require","BaggagePropagator","LOG_PREFIX","executeTask","createRequire"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Base HTTP client for Netra API calls\n */\n\nimport { Config } from \"../config\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n headers: Record<string, string>;\n timeout: number;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n ok: boolean;\n}\n\nexport class NetraHttpClient {\n private baseUrl: string;\n private headers: Record<string, string>;\n private timeout: number;\n private initialized: boolean = false;\n\n constructor(config: Config, timeoutEnvVar: string, defaultTimeout: number) {\n const endpoint = config.otlpEndpoint?.trim() || \"\";\n if (!endpoint) {\n console.error(\n \"netra: NETRA_OTLP_ENDPOINT is required for API calls\"\n );\n this.baseUrl = \"\";\n this.headers = {};\n this.timeout = defaultTimeout;\n return;\n }\n\n this.baseUrl = this.resolveBaseUrl(endpoint);\n this.headers = this.buildHeaders(config);\n this.timeout = this.getTimeout(timeoutEnvVar, defaultTimeout);\n this.initialized = true;\n }\n\n private resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.replace(/\\/+$/, \"\");\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n private buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n headers[\"Content-Type\"] = \"application/json\";\n return headers;\n }\n\n private getTimeout(envVar: string, defaultValue: number): number {\n const envValue = process.env[envVar];\n if (!envValue) {\n return defaultValue;\n }\n const parsed = parseFloat(envValue);\n if (isNaN(parsed)) {\n console.warn(\n `netra: Invalid ${envVar} value '${envValue}', using default ${defaultValue}`\n );\n return defaultValue;\n }\n return parsed;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async get<T = any>(\n path: string,\n params?: Record<string, string | number | undefined>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n console.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: this.headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n console.error(`netra: GET ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n async post<T = any>(\n path: string,\n body?: Record<string, any>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n console.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"POST\",\n headers: this.headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n console.error(`netra: POST ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n /**\n * Extract data from nested response format\n * Netra API typically returns { data: { data: actualData } }\n */\n extractData<T>(response: HttpResponse<any>, defaultValue: T): T {\n if (!response.ok) {\n return defaultValue;\n }\n const data = response.data;\n if (data && typeof data === \"object\" && \"data\" in data) {\n return data.data ?? defaultValue;\n }\n return data ?? defaultValue;\n }\n}\n","/**\n * Internal HTTP client for Dashboard APIs\n */\n\nimport { Config } from \"../../config\";\nimport { NetraHttpClient } from \"../http-client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n Scope,\n SessionFilter,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class DashboardHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_DASHBOARD_TIMEOUT\", 30.0);\n }\n\n /**\n * Execute a dynamic query for dashboards\n */\n async queryData(\n scope: Scope,\n chartType: ChartType,\n metrics: Metrics,\n filter: FilterConfig,\n dimension?: Dimension,\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n const payload: Record<string, any> = {\n scope: scope,\n chartType: chartType,\n metrics: {\n measure: metrics.measure,\n aggregation: metrics.aggregation,\n },\n };\n\n // Build filter object\n if (filter) {\n const filterPayload: Record<string, any> = {\n startTime: filter.startTime,\n endTime: filter.endTime,\n groupBy: filter.groupBy,\n };\n\n if (filter.filters && filter.filters.length > 0) {\n filterPayload.filters = filter.filters.map((item) => {\n const filterItem: Record<string, any> = {\n field: item.field,\n operator: item.operator,\n type: item.type,\n value: item.value,\n };\n if (item.key) {\n filterItem.key = item.key;\n }\n return filterItem;\n });\n }\n\n payload.filter = filterPayload;\n }\n\n // Add dimension if provided\n if (dimension) {\n payload.dimension = {\n field: dimension.field,\n };\n }\n\n const response = await this.post(\"/public/dashboard/query-data\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n console.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n }\n\n /**\n * Get session statistics with pagination.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n * limit: Maximum number of results per page.\n * page: Page number for pagination.\n * sortField: Field to sort by.\n * sortOrder: Sort order (asc/desc).\n *\n * Returns:\n * The session stats response data or null on error.\n */\n async getSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n limit?: number,\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot get session stats\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/stats\";\n\n const payload: Record<string, any> = {\n startTime,\n endTime,\n };\n\n if (filters && filters.length > 0) {\n payload.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n if (limit !== undefined || cursor !== undefined) {\n payload.pagination = {};\n\n if (limit !== undefined) {\n payload.pagination.limit = limit;\n }\n\n if (cursor !== undefined) {\n payload.pagination.cursor = cursor;\n }\n }\n\n if (sortField !== undefined) {\n payload.sortField = sortField;\n }\n\n if (sortOrder !== undefined) {\n payload.sortOrder = sortOrder;\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n console.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n console.error(\"netra.dashboard: Failed to fetch session stats:\", message);\n return null;\n }\n }\n\n /**\n * Get aggregated session metrics including total sessions, costs, latency,\n * and cost breakdown by model.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n *\n * Returns:\n * The session summary response data or null on error.\n */\n async getSessionSummary(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/summary\";\n\n const payload: Record<string, any> = {\n filter: {\n startTime,\n endTime,\n },\n };\n\n if (filters && filters.length > 0) {\n payload.filter.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n console.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n console.error(\n \"netra.dashboard: Failed to fetch session summary:\",\n message,\n );\n return null;\n }\n }\n}\n","/**\n * Dashboard API Models\n */\n\nexport enum Scope {\n SPANS = \"Spans\",\n TRACES = \"Traces\",\n}\n\nexport enum ChartType {\n LINE_TIME_SERIES = \"Line Time Series\",\n BAR_TIME_SERIES = \"Bar Time Series\",\n HORIZONTAL_BAR = \"Horizontal Bar\",\n VERTICAL_BAR = \"Vertical Bar\",\n PIE = \"Pie\",\n NUMBER = \"Number\",\n}\n\nexport enum Measure {\n LATENCY = \"Latency\",\n ERROR_RATE = \"Error Rate\",\n PII_COUNT = \"PII Count\",\n REQUEST_COUNT = \"Request Count\",\n TOTAL_COST = \"Total Cost\",\n VIOLATIONS = \"Violations\",\n TOTAL_TOKENS = \"Total Tokens\",\n AUDIO_DURATION = \"Audio Duration\",\n CHARACTER_COUNT = \"Character Count\",\n}\n\nexport enum Aggregation {\n AVERAGE = \"Average\",\n P50 = \"p50\",\n P90 = \"p90\",\n P95 = \"p95\",\n P99 = \"p99\",\n MEDIAN = \"Median (p50)\",\n PERCENTAGE = \"Percentage\",\n TOTAL_COUNT = \"Total Count\",\n}\n\nexport enum GroupBy {\n DAY = \"day\",\n HOUR = \"hour\",\n MINUTE = \"minute\",\n}\n\nexport enum DimensionField {\n ENVIRONMENT = \"environment\",\n SERVICE = \"service\",\n MODEL_NAME = \"model_name\",\n}\n\nexport enum Operator {\n EQUALS = \"equals\",\n NOT_EQUALS = \"not_equals\",\n CONTAINS = \"contains\",\n NOT_CONTAINS = \"not_contains\",\n STARTS_WITH = \"starts_with\",\n ENDS_WITH = \"ends_with\",\n GREATER_THAN = \"greater_than\",\n LESS_THAN = \"less_than\",\n GREATER_EQUAL_TO = \"greater_equal_to\",\n LESS_EQUAL_TO = \"less_equal_to\",\n ANY_OF = \"any_of\",\n NONE_OF = \"none_of\",\n}\n\nexport enum FilterType {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY_OPTIONS = \"arrayOptions\",\n OBJECT = \"object\",\n}\n\nexport enum FilterField {\n TOTAL_COST = \"total_cost\",\n SERVICE = \"service\",\n TENANT_ID = \"tenant_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n ENVIRONMENT = \"environment\",\n LATENCY = \"latency\",\n MODEL_NAME = \"model_name\",\n MODELS = \"models\",\n METADATA = \"metadata\",\n}\n\nexport enum SessionFilterField {\n TENANT_ID = \"tenant_id\",\n}\n\nexport enum SessionOperator {\n ANY_OF = \"any_of\",\n}\n\nexport enum SessionFilterType {\n ARRAY = \"arrayOptions\",\n}\n\nexport enum SortField {\n SESSION_ID = \"session_id\",\n START_TIME = \"start_time\",\n TOTAL_REQUESTS = \"totalRequests\",\n TOTAL_COST = \"totalCost\",\n}\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n}\n\n/**\n * Create a metadata filter field\n * @param key The metadata key to filter on\n * @returns The formatted metadata field string\n * @example\n * metadataField(\"customer_tier\") // returns \"metadata['customer_tier']\"\n */\nexport function metadataField(key: string): string {\n return `metadata['${key}']`;\n}\n\nexport interface Filter {\n field: FilterField | string;\n operator: Operator;\n type: FilterType;\n value: any;\n key?: string;\n}\n\nexport interface Metrics {\n measure: Measure;\n aggregation: Aggregation;\n}\n\nexport interface Dimension {\n field: DimensionField;\n}\n\nexport interface FilterConfig {\n startTime: string;\n endTime: string;\n groupBy: GroupBy;\n filters?: Filter[];\n}\n\nexport interface TimeRange {\n startTime: string;\n endTime: string;\n}\n\nexport interface TimeSeriesDataPoint {\n date: string;\n value: number;\n}\n\nexport interface DimensionValue {\n dimension: string;\n value: number;\n}\n\nexport interface TimeSeriesWithDimension {\n date: string;\n values: DimensionValue[];\n}\n\nexport interface TimeSeriesResponse {\n timeSeries: TimeSeriesWithDimension[];\n dimensions: string[];\n}\n\nexport interface CategoricalDataPoint {\n dimension: string;\n value: number;\n}\n\nexport interface NumberResponse {\n value: number;\n}\n\nexport type DashboardData =\n | TimeSeriesDataPoint[]\n | TimeSeriesResponse\n | CategoricalDataPoint[]\n | NumberResponse\n | Record<string, any>;\n\nexport interface QueryResponse {\n timeRange: TimeRange;\n data: DashboardData;\n}\n\nexport interface QueryDataParams {\n scope: Scope;\n chartType: ChartType;\n metrics: Metrics;\n filter: FilterConfig;\n dimension?: Dimension;\n}\n\n//Sessions\nexport interface SessionFilter {\n field: SessionFilterField;\n operator: SessionOperator;\n type: SessionFilterType;\n value: string[];\n}\n\nexport interface SessionStatsResult {\n data: SessionStatsData[];\n hasNextPage: boolean;\n nextCursor?: string;\n}\n\nexport interface SessionFilterConfig {\n startTime: string;\n endTime: string;\n filters?: SessionFilter[];\n}\n\nexport interface SessionStatsData {\n session_id: string;\n session_start_time: string;\n totalRequests: number;\n totalCost: number;\n session_duration: string;\n cursor: string;\n}\n","/**\n * Public Dashboard API\n * Exposed as Netra.dashboard\n */\n\nimport { Config } from \"../../config\";\nimport { DashboardHttpClient } from \"./client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n QueryDataParams,\n QueryResponse,\n Scope,\n SessionFilter,\n SessionFilterConfig,\n SessionStatsData,\n SessionStatsResult,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class Dashboard {\n private config: Config;\n private client: DashboardHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new DashboardHttpClient(config);\n }\n\n /**\n * Execute a dynamic query for dashboards to retrieve metrics and time-series data\n * @param params Query parameters\n * @returns Query response containing timeRange and data, or null on error\n */\n async queryData(params: QueryDataParams): Promise<QueryResponse | null> {\n // Validate parameters\n if (!this.isValidScope(params.scope)) {\n throw new TypeError(\n `scope must be a Scope value, got ${typeof params.scope}`,\n );\n }\n if (!this.isValidChartType(params.chartType)) {\n throw new TypeError(\n `chartType must be a ChartType value, got ${typeof params.chartType}`,\n );\n }\n if (!this.isValidMetrics(params.metrics)) {\n throw new TypeError(\n `metrics must be a Metrics object, got ${typeof params.metrics}`,\n );\n }\n if (!this.isValidFilterConfig(params.filter)) {\n throw new TypeError(\n `filter must be a FilterConfig object, got ${typeof params.filter}`,\n );\n }\n if (\n params.dimension !== undefined &&\n !this.isValidDimension(params.dimension)\n ) {\n throw new TypeError(\n `dimension must be a Dimension object or undefined, got ${typeof params.dimension}`,\n );\n }\n\n const result = await this.client.queryData(\n params.scope,\n params.chartType,\n params.metrics,\n params.filter,\n params.dimension,\n );\n\n return result;\n }\n \nasync getSessionStats(\n startTime: string,\n endTime: string,\n limit: number = 10,\n filters?: SessionFilter[],\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<SessionStatsResult | null> {\n if (!startTime || !endTime) {\n console.error(\n \"netra.dashboard: start_time and end_time are required to fetch session stats\",\n );\n return null;\n }\n\n const result = await this.client.getSessionStats(\n startTime,\n endTime,\n filters,\n limit,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return null;\n }\n\n const data = result.data ?? {};\n const sessionStats = data.sessions ?? [];\n const pageInfo = data.pageInfo ?? {};\n\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n \n let nextCursor: string | undefined = undefined;\n if (sessionStats.length > 0) {\n const lastItem = sessionStats[sessionStats.length - 1];\n nextCursor = lastItem.cursor;\n }\n\n return {\n data: sessionStats,\n hasNextPage,\n nextCursor,\n };\n }\n\n async *iterSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): AsyncGenerator<SessionStatsData, void, unknown> {\n if (!startTime || !endTime) {\n console.error(\n \"netra.dashboard: start_time and end_time are required to iterate session stats\",\n );\n return;\n }\n\n let cursor: string | undefined = undefined;\n\n while (true) {\n const result = await this.getSessionStats(\n startTime,\n endTime,\n undefined,\n filters,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return;\n }\n\n for (const session of result.data) {\n yield session;\n }\n\n if (!result.hasNextPage) {\n break;\n }\n\n cursor = result.nextCursor;\n }\n }\n\n async getSessionSummary(filter: SessionFilterConfig): Promise<any | null> {\n if (!this.isSessionFilterConfig(filter)) {\n console.error(\"netra.dashboard: filter must be a SessionFilterConfig\");\n return null;\n }\n\n if (!filter.startTime || !filter.endTime) {\n console.error(\n \"netra.dashboard: start_time and end_time are required to fetch session summary\",\n );\n return null;\n }\n\n const result = await this.client.getSessionSummary(\n filter.startTime,\n filter.endTime,\n filter.filters,\n );\n\n if (!result) {\n return null;\n }\n\n return result.data ?? {};\n }\n\n private isValidScope(scope: any): scope is Scope {\n return Object.values(Scope).includes(scope);\n }\n\n private isValidChartType(chartType: any): chartType is ChartType {\n return Object.values(ChartType).includes(chartType);\n }\n\n private isValidMetrics(metrics: any): metrics is Metrics {\n return (\n metrics &&\n typeof metrics === \"object\" &&\n \"measure\" in metrics &&\n \"aggregation\" in metrics\n );\n }\n\n private isValidFilterConfig(filter: any): filter is FilterConfig {\n return (\n filter &&\n typeof filter === \"object\" &&\n \"startTime\" in filter &&\n \"endTime\" in filter &&\n \"groupBy\" in filter\n );\n }\n\n private isValidDimension(dimension: any): dimension is Dimension {\n return dimension && typeof dimension === \"object\" && \"field\" in dimension;\n }\n\n private isSessionFilterConfig(value: unknown): value is SessionFilterConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"startTime\" in value &&\n \"endTime\" in value\n );\n }\n}\n","/**\n * Configuration management for Netra SDK\n */\n\nexport interface NetraConfig {\n appName?: string;\n headers?: string | Record<string, string>;\n disableBatch?: boolean;\n traceContent?: boolean;\n debugMode?: boolean;\n enableRootSpan?: boolean;\n resourceAttributes?: Record<string, any>;\n environment?: string;\n enableScrubbing?: boolean;\n blockedSpans?: string[];\n instruments?: Set<NetraInstruments>;\n blockInstruments?: Set<NetraInstruments>;\n}\n\nexport enum NetraInstruments {\n // LLM Providrs\n OPENAI = \"openai\",\n GOOGLE_GENERATIVE_AI = \"google_genai\",\n MISTRAL = \"mistral\",\n GROQ = \"groq\",\n VERTEX_AI = \"vertexai\",\n TOGETHER = \"together\",\n ANTHROPIC = \"anthropic\",\n\n // AI Frameworks\n LANGCHAIN = \"langchain\",\n LANGGRAPH = \"langgraph\",\n LLAMA_INDEX = \"llama_index\",\n\n // Vector Dbs\n PINECONE = \"pinecone\",\n QDRANT = \"qdrant\",\n CHROMADB = \"chromadb\",\n\n // HTTP Clients\n HTTP = \"http\",\n HTTPS = \"https\",\n FETCH = \"fetch\",\n\n // Databases\n PRISMA = \"prisma\",\n TYPEORM = \"typeorm\",\n MONGODB = \"mongodb\",\n POSTGRES = \"postgres\",\n MYSQL = \"mysql\",\n REDIS = \"redis\",\n\n // Web Frameworks\n EXPRESS = \"express\",\n FASTIFY = \"fastify\",\n NESTJS = \"nestjs\",\n\n KAFKA = \"kafka\",\n RABBITMQ = \"rabbitmq\",\n}\n\nexport class Config {\n static readonly SDK_NAME = \"netra\";\n static readonly LIBRARY_NAME = \"netra\";\n static readonly LIBRARY_VERSION = \"1.0.0\";\n static readonly TRIAL_BLOCK_DURATION_SECONDS = 900; // 15 minutes\n static readonly ATTRIBUTE_MAX_LEN = parseInt(\n process.env.NETRA_ATTRIBUTE_MAX_LEN || \"50000\",\n );\n static readonly CONVERSATION_MAX_LEN = parseInt(\n process.env.NETRA_CONVERSATION_CONTENT_MAX_LEN || \"50000\",\n );\n\n appName: string;\n otlpEndpoint?: string;\n apiKey?: string;\n headers: Record<string, string>;\n disableBatch: boolean;\n traceContent: boolean;\n debugMode: boolean;\n enableRootSpan: boolean;\n enableScrubbing: boolean;\n environment: string;\n resourceAttributes: Record<string, any>;\n blockedSpans?: string[];\n\n constructor(config: NetraConfig = {}) {\n this.appName = this._getAppName(config.appName);\n this.otlpEndpoint = this._getOtlpEndpoint();\n this.apiKey = process.env.NETRA_API_KEY;\n this.headers = this._parseHeaders(config.headers);\n this.disableBatch = this._getBoolConfig(\n config.disableBatch,\n \"NETRA_DISABLE_BATCH\",\n false,\n );\n this.traceContent = this._getBoolConfig(\n config.traceContent,\n \"NETRA_TRACE_CONTENT\",\n true,\n );\n this.debugMode = this._getBoolConfig(\n config.debugMode,\n \"NETRA_DEBUG\",\n false,\n );\n this.enableRootSpan = this._getBoolConfig(\n config.enableRootSpan,\n \"NETRA_ENABLE_ROOT_SPAN\",\n false,\n );\n this.enableScrubbing = this._getBoolConfig(\n config.enableScrubbing,\n \"NETRA_ENABLE_SCRUBBING\",\n false,\n );\n this.environment = config.environment || process.env.NETRA_ENV || \"local\";\n this.resourceAttributes = this._getResourceAttributes(\n config.resourceAttributes,\n );\n this.blockedSpans = config.blockedSpans;\n\n this._validateApiKey();\n this._setupAuthentication();\n this._setTraceContentEnv();\n }\n\n private _getAppName(appName?: string): string {\n return (\n appName ||\n process.env.NETRA_APP_NAME ||\n process.env.OTEL_SERVICE_NAME ||\n process.env.npm_package_name ||\n \"llm_tracing_service\"\n );\n }\n\n private _getOtlpEndpoint(): string | undefined {\n return (\n process.env.NETRA_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT\n );\n }\n\n private _parseHeaders(\n headers?: string | Record<string, string>,\n ): Record<string, string> {\n if (!headers) {\n const envHeaders = process.env.NETRA_HEADERS;\n if (envHeaders) {\n return this._parseEnvHeaders(envHeaders);\n }\n return {};\n }\n\n if (typeof headers === \"string\") {\n return this._parseEnvHeaders(headers);\n }\n\n return headers;\n }\n\n private _parseEnvHeaders(headers: string): Record<string, string> {\n const result: Record<string, string> = {};\n const pairs = headers.split(\",\");\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split(\"=\");\n if (key && valueParts.length > 0) {\n result[key.trim()] = valueParts.join(\"=\").trim();\n }\n }\n return result;\n }\n\n private _validateApiKey(): void {\n if (\n this.otlpEndpoint &&\n this.otlpEndpoint.toLowerCase().includes(\"getnetra\") &&\n !this.apiKey\n ) {\n console.error(\n \"Error: Missing Netra API key, go to netra dashboard to create one\",\n );\n console.error(\"Set the NETRA_API_KEY environment variable to the key\");\n }\n }\n\n private _setupAuthentication(): void {\n if (!this.apiKey || !this.otlpEndpoint) {\n return;\n }\n\n const isNetra = this.otlpEndpoint.toLowerCase().includes(\"getnetra\");\n const authKey = isNetra ? \"x-api-key\" : \"Authorization\";\n const authValue = isNetra ? this.apiKey : `Bearer ${this.apiKey}`;\n\n if (!this.headers[authKey]) {\n this.headers[authKey] = authValue;\n }\n }\n\n private _getBoolConfig(\n param: boolean | undefined,\n envVar: string,\n defaultValue: boolean,\n ): boolean {\n if (param !== undefined) {\n return param;\n }\n\n const envValue = process.env[envVar];\n if (envValue === undefined) {\n return defaultValue;\n }\n\n return [\"1\", \"true\"].includes(envValue.toLowerCase());\n }\n\n private _getResourceAttributes(\n resourceAttributes?: Record<string, any>,\n ): Record<string, any> {\n if (resourceAttributes !== undefined) {\n return resourceAttributes;\n }\n\n const envRa = process.env.NETRA_RESOURCE_ATTRS;\n if (!envRa) {\n return {};\n }\n\n try {\n return JSON.parse(envRa);\n } catch (e) {\n console.warn(`Failed to parse NETRA_RESOURCE_ATTRS: ${e}`);\n return {};\n }\n }\n\n private _setTraceContentEnv(): void {\n process.env.TRACELOOP_TRACE_CONTENT = this.traceContent ? \"true\" : \"false\";\n }\n\n /**\n * Format the OTLP endpoint URL by appending /v1/traces if not already present\n */\n public formatOtlpEndpoint(): any {\n if (!this.otlpEndpoint) {\n return undefined;\n }\n\n const url = this.otlpEndpoint.trim();\n\n // Remove trailing slash if present\n const cleanUrl = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n\n // Append /v1/traces if not already present\n if (!cleanUrl.endsWith(\"/v1/traces\")) {\n return `${cleanUrl}/v1/traces`;\n }\n\n return cleanUrl;\n }\n\n /**\n * Set Traceloop environment variables based on Netra config.\n * This ensures the Traceloop SDK picks up our configuration.\n */\n public setTraceloopEnv(): void {\n // Set TRACELOOP_BASE_URL so Traceloop SDK uses our endpoint\n if (this.otlpEndpoint && !process.env.TRACELOOP_BASE_URL) {\n process.env.TRACELOOP_BASE_URL = this.otlpEndpoint;\n }\n\n // Set TRACELOOP_API_KEY if we have one\n if (this.apiKey && !process.env.TRACELOOP_API_KEY) {\n process.env.TRACELOOP_API_KEY = this.apiKey;\n }\n\n // Set headers for Traceloop\n if (\n Object.keys(this.headers).length > 0 &&\n !process.env.TRACELOOP_HEADERS\n ) {\n const headerStr = Object.entries(this.headers)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n process.env.TRACELOOP_HEADERS = headerStr;\n }\n }\n}\n","/**\n * Session Manager for tracking user sessions and context\n *\n * Uses AsyncLocalStorage for entity stacks (workflow, task, agent)\n * and OpenTelemetry's baggage API for session context (session_id, user_id, tenant_id).\n * This provides proper concurrency support for multi-request environments.\n */\n\nimport { Span, context, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Config } from \"./config\";\n\nexport enum ConversationType {\n INPUT = \"input\",\n OUTPUT = \"output\",\n}\n\n/**\n * Context for entity tracking (workflow, task, agent, span hierarchies)\n * This is request-scoped via AsyncLocalStorage and does NOT propagate across process boundaries\n */\ninterface EntityContext {\n currentSpan?: Span;\n rootSpan?: Span;\n workflowStack: string[];\n taskStack: string[];\n agentStack: string[];\n spanStack: string[];\n spansByName: Map<string, Span[]>;\n activeSpans: Span[];\n}\n\n// AsyncLocalStorage for entity context (internal SDK state)\nconst entityStorage = new AsyncLocalStorage<EntityContext>();\n\n// Global fallback context for single-threaded applications\nconst globalFallbackContext: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n activeSpans: [],\n};\n\n/**\n * Get or create entity context for the current async scope\n */\nfunction getOrCreateEntityContext(): EntityContext {\n let ctx = entityStorage.getStore();\n if (!ctx) {\n // Fallback to global context for backwards compatibility\n ctx = globalFallbackContext;\n }\n return ctx;\n}\n\n/**\n * Run a function with an isolated entity context\n * This is useful for concurrent operations that need separate entity tracking\n */\nexport function runWithEntityContext<T>(fn: () => T): T {\n const newContext: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n activeSpans: [],\n };\n return entityStorage.run(newContext, fn);\n}\n\nexport class SessionManager {\n static setCurrentSpan(span: Span | undefined): void {\n const ctx = getOrCreateEntityContext();\n ctx.currentSpan = span;\n }\n\n static getCurrentSpan(): Span | undefined {\n const ctx = getOrCreateEntityContext();\n return ctx.currentSpan;\n }\n\n static setRootSpan(span: Span | undefined): void {\n const ctx = getOrCreateEntityContext();\n ctx.rootSpan = span;\n }\n\n static getRootSpan(): Span | undefined {\n const ctx = getOrCreateEntityContext();\n return ctx.rootSpan;\n }\n\n static registerSpan(name: string, span: Span): void {\n try {\n const ctx = getOrCreateEntityContext();\n const stack = ctx.spansByName.get(name) || [];\n stack.push(span);\n ctx.spansByName.set(name, stack);\n ctx.activeSpans.push(span);\n } catch (e) {\n console.error(`Failed to register span '${name}':`, e);\n }\n }\n\n static unregisterSpan(name: string, span: Span): void {\n try {\n const ctx = getOrCreateEntityContext();\n const stack = ctx.spansByName.get(name);\n if (!stack) {\n return;\n }\n\n // Remove the last matching instance\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i] === span) {\n stack.splice(i, 1);\n break;\n }\n }\n\n if (stack.length === 0) {\n ctx.spansByName.delete(name);\n }\n\n // Remove from global active list\n for (let i = ctx.activeSpans.length - 1; i >= 0; i--) {\n if (ctx.activeSpans[i] === span) {\n ctx.activeSpans.splice(i, 1);\n break;\n }\n }\n } catch (e) {\n console.error(`Failed to unregister span '${name}':`, e);\n }\n }\n\n static getSpanByName(name: string): Span | undefined {\n const ctx = getOrCreateEntityContext();\n const stack = ctx.spansByName.get(name);\n return stack && stack.length > 0 ? stack[stack.length - 1] : undefined;\n }\n\n static pushEntity(entityType: string, entityName: string): void {\n const ctx = getOrCreateEntityContext();\n switch (entityType) {\n case \"workflow\":\n ctx.workflowStack.push(entityName);\n break;\n case \"task\":\n ctx.taskStack.push(entityName);\n break;\n case \"agent\":\n ctx.agentStack.push(entityName);\n break;\n case \"span\":\n ctx.spanStack.push(entityName);\n break;\n }\n }\n\n static popEntity(entityType: string): string | undefined {\n const ctx = getOrCreateEntityContext();\n switch (entityType) {\n case \"workflow\":\n return ctx.workflowStack.pop();\n case \"task\":\n return ctx.taskStack.pop();\n case \"agent\":\n return ctx.agentStack.pop();\n case \"span\":\n return ctx.spanStack.pop();\n default:\n return undefined;\n }\n }\n\n static getCurrentEntityAttributes(): Record<string, string> {\n const ctx = getOrCreateEntityContext();\n const attributes: Record<string, string> = {};\n\n if (ctx.workflowStack.length > 0) {\n attributes[`${Config.LIBRARY_NAME}.workflow.name`] =\n ctx.workflowStack[ctx.workflowStack.length - 1];\n }\n\n if (ctx.taskStack.length > 0) {\n attributes[`${Config.LIBRARY_NAME}.task.name`] =\n ctx.taskStack[ctx.taskStack.length - 1];\n }\n\n if (ctx.agentStack.length > 0) {\n attributes[`${Config.LIBRARY_NAME}.agent.name`] =\n ctx.agentStack[ctx.agentStack.length - 1];\n }\n\n if (ctx.spanStack.length > 0) {\n attributes[`${Config.LIBRARY_NAME}.span.name`] =\n ctx.spanStack[ctx.spanStack.length - 1];\n }\n\n return attributes;\n }\n\n static clearEntityStacks(): void {\n const ctx = getOrCreateEntityContext();\n ctx.workflowStack = [];\n ctx.taskStack = [];\n ctx.agentStack = [];\n ctx.spanStack = [];\n }\n\n static setSessionContext(\n sessionKey: string,\n value: string | Record<string, string>\n ): void {\n try {\n if (typeof value === \"string\" && value) {\n // Set session context as span attributes on the active span\n const span = trace.getActiveSpan();\n if (span && span.isRecording()) {\n span.setAttribute(`${Config.LIBRARY_NAME}.${sessionKey}`, value);\n }\n }\n } catch (e) {\n console.error(`Failed to set session context for key=${sessionKey}:`, e);\n }\n }\n\n static setCustomEvent(name: string, attributes: Record<string, any>): void {\n try {\n const currentSpan = this.getCurrentSpan();\n const timestamp = Date.now();\n\n if (currentSpan && currentSpan.isRecording()) {\n currentSpan.addEvent(name, attributes, timestamp);\n } else {\n const ctx = context.active();\n const tracer = trace.getTracer(__filename);\n tracer.startActiveSpan(\n `${Config.LIBRARY_NAME}.${name}`,\n { attributes },\n ctx,\n (span: Span) => {\n span.addEvent(name, attributes, timestamp);\n span.end();\n }\n );\n }\n } catch (e) {\n console.error(`Failed to add custom event: ${name} -`, e);\n }\n }\n\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>\n ): void {\n if (!role || !content) {\n console.error(\"add_conversation: role and content must be provided\");\n return;\n }\n\n try {\n const span = trace.getActiveSpan();\n if (!span || !span.isRecording()) {\n console.warn(\"No active span to add conversation attribute.\");\n return;\n }\n\n // Get existing conversation\n const existing: Array<{\n type: string;\n role: string;\n content: string | Record<string, any>;\n format: string;\n }> = [];\n\n // Try to get existing conversation from span attributes\n // Note: This is a simplified version - in production you'd need to access span internals\n const maxLen = Config.CONVERSATION_MAX_LEN;\n const processedContent =\n typeof content === \"string\"\n ? content.substring(0, maxLen)\n : content;\n\n const entry = {\n type: conversationType,\n role,\n content: processedContent,\n format: typeof processedContent === \"string\" ? \"text\" : \"json\",\n };\n\n existing.push(entry);\n\n // Set conversation attribute\n span.setAttribute(\"conversation\", JSON.stringify(existing));\n } catch (e) {\n console.error(\"Failed to add conversation attribute:\", e);\n }\n }\n\n static setAttributeOnActiveSpan(\n attrKey: string,\n attrValue: any\n ): void {\n try {\n const span = trace.getActiveSpan();\n if (span && span.isRecording()) {\n const value =\n typeof attrValue === \"string\"\n ? attrValue\n : JSON.stringify(attrValue);\n span.setAttribute(attrKey, value);\n } else {\n console.warn(`No active span to set attribute '${attrKey}'`);\n }\n } catch (e) {\n console.error(`Failed to set attribute '${attrKey}' on active span:`, e);\n }\n }\n}\n","/**\n * Type definitions for Netra SDK\n */\n\nimport { Span } from \"@opentelemetry/api\";\n\nexport enum SpanType {\n SPAN = \"SPAN\",\n GENERATION = \"GENERATION\",\n TOOL = \"TOOL\",\n EMBEDDING = \"EMBEDDING\",\n AGENT = \"AGENT\",\n}\n\nexport enum ConversationType {\n INPUT = \"input\",\n OUTPUT = \"output\",\n}\n\nexport interface UsageModel {\n model: string;\n usage_type: string;\n units_used?: number;\n cost_in_usd?: number;\n}\n\nexport interface ActionModel {\n start_time: string;\n action: string;\n action_type: string;\n success: boolean;\n affected_records?: Array<{ record_id: string; record_type: string }>;\n metadata?: Record<string, string>;\n}\n\nexport interface SpanWrapperOptions {\n name: string;\n attributes?: Record<string, string>;\n moduleName?: string;\n asType?: SpanType;\n}\n\nexport interface DecoratorOptions {\n name?: string;\n asType?: SpanType;\n}\n\n\n","/**\n * Span Wrapper for custom span tracking\n */\n\nimport {\n Span,\n SpanKind,\n SpanStatusCode,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { SessionManager } from \"./session-manager\";\nimport { ActionModel, SpanType, UsageModel } from \"./types\";\n\nexport class SpanWrapper {\n private name: string;\n private attributes: Record<string, string>;\n private moduleName: string;\n private startTime?: number;\n private endTime?: number;\n private status: string = \"pending\";\n private errorMessage?: string;\n private span?: Span;\n private activeContext?: ReturnType<typeof context.active>;\n private tracer?: any;\n\n constructor(\n name: string,\n attributes: Record<string, string> = {},\n moduleName: string = \"netra_sdk\",\n asType: SpanType = SpanType.SPAN,\n tracer?: any, // Using any to avoid strict type issues with Tracer interface, but it expects a Tracer\n ) {\n this.name = name;\n this.attributes = { ...attributes };\n this.moduleName = moduleName;\n this.attributes[\"netra.span.type\"] = asType;\n this.tracer = tracer;\n }\n\n start(): this {\n this.startTime = Date.now();\n\n const tracer = this.tracer || trace.getTracer(this.moduleName);\n\n const ctx = context.active();\n\n this.span = tracer.startSpan(\n this.name,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n ...this.attributes,\n \"netra.span.name\": this.name,\n },\n },\n ctx,\n );\n\n if (this.span) {\n SessionManager.registerSpan(this.name, this.span);\n SessionManager.setCurrentSpan(this.span);\n }\n\n return this;\n }\n\n end(): this {\n this.endTime = Date.now();\n const durationMs =\n this.startTime && this.endTime\n ? (this.endTime - this.startTime) / 1000\n : undefined;\n\n if (durationMs !== undefined) {\n this.setAttribute(\n `${Config.LIBRARY_NAME}.duration_ms`,\n durationMs.toFixed(2),\n );\n }\n\n if (this.status === \"pending\") {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n this.setAttribute(`${Config.LIBRARY_NAME}.status`, this.status);\n\n if (this.span) {\n // Update all attributes\n for (const [key, value] of Object.entries(this.attributes)) {\n this.span.setAttribute(key, value);\n }\n\n SessionManager.unregisterSpan(this.name, this.span);\n this.span.end();\n }\n\n return this;\n }\n\n setAttribute(key: string, value: string): this {\n this.attributes[key] = value;\n if (this.span) {\n this.span.setAttribute(key, value);\n }\n return this;\n }\n\n /**\n * Run a function with this span set as the active span in the OTel context.\n * Useful for nesting spans.\n */\n withActive<T>(fn: () => T): T {\n if (!this.span) return fn();\n\n const ctx = trace.setSpan(context.active(), this.span);\n return context.with(ctx, fn);\n }\n\n /**\n * Async version of withActive(). Keeps the context active across async work.\n */\n async withActiveAsync<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.span) return fn();\n\n const ctx = trace.setSpan(context.active(), this.span);\n return context.with(ctx, fn);\n }\n\n setPrompt(prompt: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.prompt`, prompt);\n }\n\n setNegativePrompt(negativePrompt: string): this {\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.negative_prompt`,\n negativePrompt,\n );\n }\n\n setUsage(usage: UsageModel[]): this {\n const usageJson = JSON.stringify(usage);\n return this.setAttribute(`${Config.LIBRARY_NAME}.usage`, usageJson);\n }\n\n setAction(action: ActionModel[]): this {\n const actionJson = JSON.stringify(action);\n return this.setAttribute(`${Config.LIBRARY_NAME}.action`, actionJson);\n }\n\n setModel(model: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.model`, model);\n }\n\n setLlmSystem(system: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.llm_system`, system);\n }\n\n setError(errorMessage: string): this {\n this.status = \"error\";\n this.errorMessage = errorMessage;\n if (this.span) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errorMessage,\n });\n }\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.error_message`,\n errorMessage,\n );\n }\n\n setSuccess(): this {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n return this;\n }\n\n addEvent(name: string, attributes?: Record<string, string>): this {\n if (this.span) {\n this.span.addEvent(name, attributes);\n }\n return this;\n }\n\n getCurrentSpan(): Span | undefined {\n return this.span;\n }\n}\n","/**\n * Internal HTTP client for Evaluation APIs\n */\n\nimport { Config } from \"../../config\";\nimport { NetraHttpClient } from \"../http-client\";\nimport { EntryStatus, EvaluationScore, RunStatus } from \"./models\";\n\nexport class EvaluationHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_EVALUATION_TIMEOUT\", 10.0);\n }\n\n /**\n * Fetch dataset items for a dataset id\n */\n async getDataset(datasetId: string): Promise<any[]> {\n if (!this.isInitialized()) {\n console.error(\n `netra.evaluation: Evaluation client is not initialized; cannot fetch dataset '${datasetId}'`,\n );\n return [];\n }\n\n const response = await this.get(`/evaluations/dataset/${datasetId}`);\n return this.extractData(response, []);\n }\n\n /**\n * Create a run for a dataset\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: Record<string, any>[],\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n `netra.evaluation: Evaluation client is not initialized; cannot create run for dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const payload = {\n name,\n datasetId,\n localEvaluators: evaluatorsConfig,\n };\n const response = await this.post(\"/evaluations/test_run\", payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Create an empty dataset and return backend data\n */\n async createDataset(name: string, tags?: string[]): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot create dataset\",\n );\n return { success: false };\n }\n\n const payload = {\n name,\n tags: tags ?? [],\n };\n\n const response = await this.post(\"/evaluations/dataset\", payload);\n \n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Add a single item to an existing dataset\n */\n async addDatasetItem(\n datasetId: string,\n itemPayload: Record<string, any>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n `netra.evaluation: Evaluation client is not initialized; cannot add item to dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const response = await this.post(\n `/evaluations/dataset/${datasetId}/items`,\n itemPayload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Submit a new run item to the backend\n */\n async postRunItem(runId: string, payload: Record<string, any>): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run item\",\n );\n return { success: false };\n }\n\n const response = await this.post(`/evaluations/run/${runId}/item`, payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\" && \"item\" in data) {\n const runItem = data.item;\n if (runItem && typeof runItem === \"object\" && \"id\" in runItem) {\n return runItem.id;\n }\n }\n return data;\n }\n\n /**\n * Submit local evaluations result\n */\n async submitLocalEvaluations(\n runId: string,\n testRunItemId: string,\n evaluatorResults: Array<Record<string, any>>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot submit local evaluations\",\n );\n return { success: false };\n }\n\n const payload = { evaluatorResults };\n const response = await this.post(\n `/evaluations/run/${runId}/item/${testRunItemId}/local-evaluations`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Submit the run status\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run status\",\n );\n return { success: false };\n }\n\n const payload = { status };\n const response = await this.post(\n `/evaluations/run/${runId}/status`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\") {\n console.info(\"netra.evaluation: Completed test run successfully\");\n }\n return data;\n }\n\n /**\n * Check if a span exists in the backend\n */\n async getSpanById(spanId: string): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot get span\",\n );\n return null;\n }\n\n try {\n const response = await this.get(`sdk/traces/spans/${spanId}`);\n if (!response.ok) {\n return null;\n }\n return this.extractData(response, null);\n } catch {\n return null;\n }\n }\n\n /**\n * Wait until a span is available in the backend\n * Polls the GET /spans/:id endpoint to verify span availability before running evaluators\n */\n async waitForSpanIngestion(\n spanId?: string,\n timeoutSeconds: number = 60.0,\n pollIntervalSeconds: number = 1.0,\n initialDelaySeconds: number = 0.5,\n ): Promise<boolean> {\n if (!spanId) {\n return false;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelaySeconds * 1000),\n );\n\n const deadline = Date.now() + timeoutSeconds * 1000;\n while (Date.now() < deadline) {\n const spanData = await this.getSpanById(spanId);\n if (spanData !== null) {\n return true;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, pollIntervalSeconds * 1000),\n );\n }\n\n return false;\n }\n}\n","/**\n * Evaluation Utility Functions\n */\n\nimport { propagation, context as otelContext } from \"@opentelemetry/api\";\nimport { DatasetRecord, EvaluatorConfig, ItemContext } from \"./models\";\n\n/**\n * Get the session ID from the OpenTelemetry baggage\n */\nexport function getSessionIdFromBaggage(): string | undefined {\n const ctx = otelContext.active();\n const baggageObj = propagation.getBaggage(ctx);\n const sessionId = baggageObj?.getEntry(\"session_id\")?.value;\n if (typeof sessionId === \"string\" && sessionId) {\n return sessionId;\n }\n return undefined;\n}\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string\n */\nexport function formatTraceId(traceId: string): string {\n // Ensure it's 32 characters long, pad with zeros if needed\n return traceId.padStart(32, \"0\");\n}\n\n/**\n * Format the span ID as a 16-digit hexadecimal string\n */\nexport function formatSpanId(spanId: string): string {\n // Ensure it's 16 characters long, pad with zeros if needed\n return spanId.padStart(16, \"0\");\n}\n\n/**\n * Run a callable function that may be sync or async\n */\nexport async function runCallableMaybeAsync<T>(\n fn: (...args: any[]) => T | Promise<T>,\n ...args: any[]\n): Promise<T> {\n const result = fn(...args);\n if (result instanceof Promise) {\n return await result;\n }\n return result;\n}\n\n/**\n * Extract evaluator configuration from an evaluator object\n */\nexport function extractEvaluatorConfig(evaluator: any): EvaluatorConfig | null {\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"config\" in evaluator)\n ) {\n return null;\n }\n\n const config = evaluator.config;\n\n if (!config || typeof config !== \"object\") {\n return null;\n }\n\n return config as EvaluatorConfig;\n}\n\n/**\n * Execute a task function (sync or async) and return (output, status)\n */\nexport async function executeTask(\n task: (input: any) => any | Promise<any>,\n itemInput: any,\n): Promise<{ output: any; status: string }> {\n try {\n const result = await runCallableMaybeAsync(task, itemInput);\n return { output: result, status: \"completed\" };\n } catch (error) {\n return { output: String(error), status: \"failed\" };\n }\n}\n\n/**\n * Run a single evaluator and return normalized result\n */\nexport async function runSingleEvaluator(params: {\n evaluator: any;\n itemInput: any;\n taskOutput: any;\n expectedOutput: any;\n metadata?: Record<string, any>;\n}): Promise<Record<string, any> | null> {\n const { evaluator, itemInput, taskOutput, expectedOutput, metadata } =\n params;\n\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"evaluate\" in evaluator)\n ) {\n return null;\n }\n\n let expectedName: string | null = null;\n const config = extractEvaluatorConfig(evaluator);\n if (config) {\n expectedName = config.name;\n }\n\n const context = {\n input: itemInput,\n taskOutput: taskOutput,\n expectedOutput: expectedOutput,\n metadata: metadata,\n };\n\n let result = evaluator.evaluate(context);\n if (result instanceof Promise) {\n result = await result;\n }\n\n const resultPayload = {\n evaluatorName: result.evaluatorName,\n result: result.result,\n isPassed: result.isPassed,\n reason: result.reason,\n };\n\n if (expectedName && resultPayload.evaluatorName !== expectedName) {\n return null;\n }\n\n return resultPayload;\n}\n\n/**\n * Build a payload dict for posting item status\n */\nexport function buildItemPayload(\n ctx: ItemContext,\n status: string,\n includeOutput: boolean = false,\n): Record<string, any> {\n const payload: Record<string, any> = {\n traceId: ctx.traceId,\n sessionId: ctx.sessionId,\n };\n\n if (ctx.datasetItemId) {\n payload.datasetItemId = ctx.datasetItemId;\n } else {\n payload.input = ctx.itemInput;\n payload.expectedOutput = ctx.expectedOutput;\n if (ctx.metadata) {\n payload.metadata = ctx.metadata;\n }\n }\n\n if (ctx.status === \"failed\") {\n payload.status = \"failed\";\n return payload;\n }\n\n if (includeOutput) {\n payload.taskOutput = ctx.taskOutput;\n }\n\n return payload;\n}\n\n/**\n * Validate required inputs for runTestSuite\n */\nexport function validateRunInputs(\n name: string,\n data: any,\n task: ((arg: any) => any) | null | undefined,\n): boolean {\n if (!name) {\n console.error(\"netra.evaluation: run name is required\");\n return false;\n }\n if (!data) {\n console.error(\"netra.evaluation: data is required\");\n return false;\n }\n if (task == null) {\n console.error(\"netra.evaluation: task function is required\");\n return false;\n }\n return true;\n}\n\n/**\n * Extract datasetId from items if they are DatasetRecords\n */\nexport function extractDatasetId(items: any[]): string | null {\n if (items.length > 0 && isDatasetRecord(items[0])) {\n return items[0].datasetId;\n }\n return null;\n}\n\n/**\n * Type guard for DatasetRecord\n */\nfunction isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n}\n\n/**\n * Build evaluator configurations from evaluator objects\n */\nexport function buildEvaluatorsConfig(\n evaluators?: any[] | null,\n): EvaluatorConfig[] {\n const configs: EvaluatorConfig[] = [];\n if (!evaluators || evaluators.length === 0) {\n return configs;\n }\n\n for (const evaluator of evaluators) {\n const config = extractEvaluatorConfig(evaluator);\n if (!config) {\n continue;\n }\n\n try {\n configs.push(config);\n } catch {\n continue;\n }\n }\n\n return configs;\n}\n","/**\n * Public Evaluation API\n * Exposed as Netra.evaluation\n */\n\nimport { Config } from \"../../config\";\nimport { SpanWrapper } from \"../../span-wrapper\";\nimport { EvaluationHttpClient } from \"./client\";\nimport {\n AddDatasetItemResponse,\n CreateDatasetResponse,\n Dataset,\n DatasetEntry,\n DatasetRecord,\n EvaluatorConfig,\n GetDatasetItemsResponse,\n ItemContext,\n TaskFunction,\n} from \"./models\";\nimport {\n buildEvaluatorsConfig,\n buildItemPayload,\n executeTask,\n extractDatasetId,\n formatSpanId,\n formatTraceId,\n getSessionIdFromBaggage,\n runSingleEvaluator,\n validateRunInputs,\n} from \"./utils\";\n\n/**\n * Public entry-point exposed as Netra.evaluation\n */\nexport class Evaluation {\n private config: Config;\n private client: EvaluationHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new EvaluationHttpClient(this.config);\n }\n\n /**\n * Create an empty dataset and return its id on success, else null\n * @param name The name of the dataset\n * @param tags Optional list of tags to associate with the dataset\n * @returns A backend JSON response containing dataset info (id, name, tags, etc.) on success\n */\n async createDataset(\n name: string,\n tags?: string[],\n ): Promise<CreateDatasetResponse | null> {\n if (!name) {\n console.error(\n \"netra.evaluation: Failed to create dataset: dataset name is required\",\n );\n return null;\n }\n\n const response = await this.client.createDataset(name, tags);\n\n if (!response) {\n return null;\n }\n\n return {\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n name: response.name ?? \"\",\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Add a single item to an existing dataset\n * @param datasetId The id of the dataset to which the item will be added\n * @param item The dataset item to add\n * @returns A backend JSON response containing dataset item info (id, input, expectedOutput, etc.) on success\n */\n async addDatasetItem(\n datasetId: string,\n item: DatasetEntry,\n ): Promise<AddDatasetItemResponse | null> {\n if (!item.input) {\n console.error(\n \"netra.evaluation: Skipping dataset item without required 'input'\",\n );\n return null;\n }\n\n const response = await this.client.addDatasetItem(datasetId, item);\n\n return {\n datasetId: response.datasetId ?? \"\",\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n source: response.source ?? \"\",\n input: response.input ?? \"\",\n expectedOutput: response.expectedOutput ?? \"\",\n isActive: true,\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n sourceId: response.sourceId ?? null,\n metadata: response.metadata ?? null,\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Get a dataset by ID\n * @param datasetId The id of the dataset to retrieve\n * @returns A backend JSON response containing dataset info (id, input, expectedOutput etc.) on success\n */\n async getDataset(datasetId: string): Promise<GetDatasetItemsResponse | null> {\n if (!datasetId) {\n console.error(\n \"netra.evaluation: Failed to get dataset: dataset id is required\",\n );\n return null;\n }\n\n const response = await this.client.getDataset(datasetId);\n if (!response) {\n return null;\n }\n\n const datasetItems: DatasetRecord[] = [];\n for (const item of response) {\n const itemId = item?.id;\n const itemInput = item?.input;\n const itemDatasetId = item?.datasetId;\n\n if (itemId == null || itemDatasetId == null || itemInput == null) {\n console.warn(\n \"netra.evaluation: Skipping dataset item with missing required fields:\",\n item,\n );\n continue;\n }\n\n try {\n datasetItems.push({\n id: itemId,\n input: itemInput,\n datasetId: itemDatasetId,\n expectedOutput: item?.expectedOutput ?? \"\",\n });\n } catch (exc) {\n console.error(\"netra.evaluation: Failed to parse dataset item:\", exc);\n }\n }\n\n return { items: datasetItems };\n }\n\n /**\n * Create a new run for the given dataset and evaluators\n * @param name The name of the run\n * @param datasetId The id of the dataset to which the run will be associated\n * @param evaluatorsConfig Optional list of evaluators to be used for the run\n * @returns runId: The id of the created run\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: EvaluatorConfig[],\n ): Promise<string | null> {\n if (!name) {\n console.error(\n \"netra.evaluation: Failed to create run: run name is required\",\n );\n return null;\n }\n\n const evaluatorsConfigDicts: Array<Record<string, any>> | undefined =\n evaluatorsConfig?.map((e) => ({\n name: e.name,\n label: e.label,\n scoreType: e.scoreType,\n }));\n\n const response = await this.client.createRun(\n name,\n datasetId,\n evaluatorsConfigDicts,\n );\n const runId = response?.id ?? null;\n return runId;\n }\n\n /**\n * Netra evaluation function to initiate a test suite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns A dictionary containing the run id and the results of the test suite\n */\n runTestSuite(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators?: any[],\n maxConcurrency: number = 50,\n ): Promise<Record<string, any> | null> {\n return this.runTestSuiteAsync(name, data, task, evaluators, maxConcurrency);\n }\n\n /**\n * Async implementation of runTestSuite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns items: The results of the test suite\n */\n private async runTestSuiteAsync(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators: any[] | undefined,\n maxConcurrency: number,\n ): Promise<Record<string, any> | null> {\n if (!validateRunInputs(name, data, task)) {\n return null;\n }\n\n const items = [...data.items];\n const totalItems = items.length;\n const datasetId = extractDatasetId(items);\n const evaluatorsConfig = buildEvaluatorsConfig(evaluators);\n\n const runId = await this.createRun(\n name,\n datasetId ?? undefined,\n evaluatorsConfig,\n );\n if (!runId) {\n console.error(\"netra.evaluation: Failed to create run\");\n return null;\n }\n console.info(\"netra.evaluation: Initiated test run\");\n\n const semaphore = new Semaphore(Math.max(1, maxConcurrency));\n const results: Array<Record<string, any>> = [];\n const bgEvalTasks: Promise<void>[] = [];\n let completedItems = 0;\n\n const processItem = async (idx: number, item: any): Promise<void> => {\n await semaphore.acquire();\n try {\n const ctx = this.createItemContext(idx, item);\n const itemResult = await this.executeItemPipeline(\n runId,\n name,\n ctx,\n task,\n evaluators,\n results,\n bgEvalTasks,\n );\n\n completedItems += 1;\n console.info(\n `netra.evaluation: ${completedItems}/${totalItems} items processed (status=${itemResult.status})`,\n );\n } finally {\n semaphore.release();\n }\n };\n\n await Promise.all(items.map((item, i) => processItem(i, item)));\n\n if (bgEvalTasks.length > 0) {\n await Promise.allSettled(bgEvalTasks);\n }\n\n this.client.postRunStatus(runId, \"completed\");\n return { runId, items: results };\n }\n\n /**\n * Create an ItemContext from a dataset item\n * @param idx The index of the item\n * @param item The dataset item\n * @returns ItemContext: The created ItemContext\n */\n private createItemContext(idx: number, item: any): ItemContext {\n // Check if item is a DatasetRecord (has datasetId property)\n if (this.isDatasetRecord(item)) {\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n datasetItemId: item.id,\n };\n }\n\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n };\n }\n\n /**\n * Type guard for DatasetRecord\n */\n private isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n }\n\n /**\n * Execute the full pipeline for a single item\n * @param runId The run ID\n * @param runName The name of the run\n * @param ctx The item context\n * @param task The task function to execute\n * @param evaluators Optional list of evaluators\n * @param results List to append results to\n * @param bgEvalTasks List to append background evaluation tasks to\n */\n private async executeItemPipeline(\n runId: string,\n runName: string,\n ctx: ItemContext,\n task: TaskFunction,\n evaluators: any[] | undefined,\n results: Array<Record<string, any>>,\n bgEvalTasks: Promise<void>[],\n ): Promise<{ status: string }> {\n const spanName = `TestRun.${runName}`;\n\n const span = new SpanWrapper(spanName, {}, \"netra.evaluation\");\n span.start();\n\n try {\n const otelSpan = span.getCurrentSpan();\n if (otelSpan) {\n const spanContext = otelSpan.spanContext();\n ctx.traceId = formatTraceId(spanContext.traceId);\n ctx.spanId = formatSpanId(spanContext.spanId);\n }\n ctx.sessionId = getSessionIdFromBaggage();\n\n const { output, status } = await executeTask(task, ctx.itemInput);\n ctx.taskOutput = output;\n ctx.status = status;\n\n ctx.testRunItemId = await this.postCompletedStatus(runId, ctx);\n\n if (evaluators && ctx.status === \"completed\") {\n const evalTask = this.runEvaluatorsForItem(runId, ctx, evaluators);\n bgEvalTasks.push(evalTask);\n }\n\n results.push({\n index: ctx.index,\n status: ctx.status,\n traceId: ctx.traceId,\n spanId: ctx.spanId,\n testRunItemId: ctx.testRunItemId,\n });\n\n return { status: ctx.status ?? \"pending\" };\n } finally {\n span.end();\n }\n }\n\n /**\n * Post agent_triggered status and return testRunItemId\n * @param runId The run ID\n * @param ctx The item context\n * @returns str: The testRunItemId\n */\n private async postTriggeredStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<string> {\n const payload = buildItemPayload(ctx, \"agent_triggered\");\n const response = await this.client.postRunItem(runId, payload);\n\n if (response && typeof response === \"object\") {\n const itemId = response.id ?? response.testRunItemId;\n if (itemId) {\n return String(itemId);\n }\n }\n return `local-${ctx.index}`;\n }\n\n /**\n * Post completed/failed status with task output\n * @param runId The run ID\n * @param ctx The item context\n */\n private async postCompletedStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<any> {\n const payload = buildItemPayload(ctx, ctx.status ?? \"pending\", true);\n const runItemId = await this.client.postRunItem(runId, payload);\n return runItemId;\n }\n\n /**\n * Run all evaluators for a single item after span ingestion\n * @param runId The run ID\n * @param ctx The item context\n * @param evaluators List of evaluators\n */\n private async runEvaluatorsForItem(\n runId: string,\n ctx: ItemContext,\n evaluators: any[],\n ): Promise<void> {\n await this.client.waitForSpanIngestion(ctx.spanId);\n\n const evaluatorResults: Array<Record<string, any>> = [];\n for (const evaluator of evaluators) {\n try {\n const result = await runSingleEvaluator({\n evaluator,\n itemInput: ctx.itemInput,\n taskOutput: ctx.taskOutput,\n expectedOutput: ctx.expectedOutput,\n metadata: ctx.metadata,\n });\n\n if (result) {\n evaluatorResults.push(result);\n }\n } catch {\n continue;\n }\n }\n\n if (evaluatorResults.length > 0 && ctx.testRunItemId) {\n this.client.submitLocalEvaluations(\n runId,\n ctx.testRunItemId,\n evaluatorResults,\n );\n }\n }\n}\n\n/**\n * Simple semaphore for concurrency control\n */\nclass Semaphore {\n private permits: number;\n private waiting: Array<() => void> = [];\n\n constructor(permits: number) {\n this.permits = permits;\n }\n\n async acquire(): Promise<void> {\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.waiting.push(resolve);\n });\n }\n\n release(): void {\n if (this.waiting.length > 0) {\n const next = this.waiting.shift();\n next?.();\n } else {\n this.permits++;\n }\n }\n\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n}\n","/**\n * Evaluation API Models\n */\n\nexport interface DatasetEntry {\n id: string;\n input: string;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface DatasetItem {\n input: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n tags?: string[];\n}\n\nexport interface DatasetRecord {\n id: string;\n input: any;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface Dataset {\n items: DatasetItem[] | DatasetRecord[];\n}\n\nexport interface Run {\n id: string;\n datasetId: string;\n name?: string;\n testEntries: DatasetItem[];\n}\n\nexport interface EvaluationScore {\n metricType: string;\n score: number;\n}\n\nexport enum EntryStatus {\n AGENT_TRIGGERED = \"agent_triggered\",\n AGENT_COMPLETED = \"agent_completed\",\n FAILED = \"failed\",\n}\n\nexport enum RunStatus {\n COMPLETED = \"completed\",\n}\n\nexport interface CreateDatasetParams {\n name: string;\n tags?: string[];\n}\n\nexport interface TestSuiteResult {\n success: boolean;\n runId?: string;\n error?: string;\n results?: Array<{\n id: string;\n input: string;\n output: any;\n status: string;\n error?: string;\n }>;\n}\n\nexport enum ScoreType {\n BOOLEAN = \"boolean\",\n NUMERICAL = \"numerical\",\n CATEGORICAL = \"categorical\",\n}\n\nexport interface EvaluatorConfig {\n name: string;\n label: string;\n scoreType: ScoreType;\n}\n\nexport interface AddDatasetItemResponse {\n datasetId: string;\n projectId: string;\n organizationId: string;\n source: string;\n input: any;\n expectedOutput?: any;\n isActive: boolean;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n sourceId?: string;\n metadata?: Record<string, any>;\n id: string;\n createdAt?: string;\n deletedAt?: string;\n}\n\nexport interface ItemContext {\n index: number;\n itemInput: any;\n expectedOutput?: any;\n metadata?: any;\n datasetItemId?: string;\n traceId?: string;\n spanId?: string;\n sessionId?: string;\n taskOutput?: any;\n status?: string;\n testRunItemId?: string;\n}\n\nexport interface CreateDatasetResponse {\n projectId: string;\n organizationId: string;\n name: string;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n id: string;\n createdAt: string;\n deletedAt?: string | null;\n}\n\nexport interface GetDatasetItemsResponse {\n items: DatasetRecord[];\n}\n\nexport interface LocalDataset {\n items: DatasetEntry[];\n}\n\nexport interface EvaluatorContext {\n input: any;\n taskOutput: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n}\n\nexport interface EvaluatorOutput {\n evaluatorName: string;\n result: any;\n isPassed: boolean;\n reason?: string;\n}\n\nexport type EvaluatorFunction = (params: {\n input: string;\n output: any;\n expectedOutput?: any;\n}) =>\n | EvaluationScore\n | EvaluationScore[]\n | Promise<EvaluationScore | EvaluationScore[]>;\n\nexport type TaskFunction = (input: any) => any | Promise<any>;\n","/**\n * Run Entry Context for Evaluation\n * Provides context management for evaluation run entries\n */\n\nimport { Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { Config } from \"../../config\";\nimport { EvaluationHttpClient } from \"./client\";\nimport { DatasetEntry, EntryStatus, EvaluationScore, Run } from \"./models\";\n\nexport class RunEntryContext {\n private client: EvaluationHttpClient;\n private config: Config;\n readonly evaluationRun: Run;\n readonly entry: DatasetEntry;\n traceId?: string;\n private span?: Span;\n private startTime?: Date;\n\n constructor(\n client: EvaluationHttpClient,\n config: Config,\n run: Run,\n entry: DatasetEntry,\n ) {\n this.client = client;\n this.config = config;\n this.evaluationRun = run;\n this.entry = entry;\n }\n\n /**\n * Get the run associated with this context\n * Alias for evaluationRun for backwards compatibility\n */\n get run(): Run {\n return this.evaluationRun;\n }\n\n /**\n * Start the run entry context\n * Creates a span and posts agent_triggered status\n */\n async start(): Promise<void> {\n this.startTime = new Date();\n\n // Create a span for this entry\n const tracer = trace.getTracer(\"netra.evaluation\");\n this.span = tracer.startSpan(\n `evaluation.run.${this.evaluationRun.id}.entry.${this.entry.id}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"netra.evaluation.runId\": this.evaluationRun.id,\n \"netra.evaluation.entryId\": this.entry.id,\n \"netra.evaluation.datasetId\": this.evaluationRun.datasetId,\n },\n },\n );\n\n // Get trace ID from the span\n const spanContext = this.span.spanContext();\n this.traceId = spanContext.traceId;\n\n // Post agent_triggered status using postRunItem\n const payload = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: EntryStatus.AGENT_TRIGGERED,\n };\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n }\n\n /**\n * End the run entry context\n * @param success Whether the entry completed successfully\n * @param scores Optional scores to record\n */\n async end(\n success: boolean = true,\n scores?: EvaluationScore[],\n ): Promise<void> {\n const status = success ? EntryStatus.AGENT_COMPLETED : EntryStatus.FAILED;\n\n // Post completed/failed status using postRunItem\n const payload: Record<string, any> = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: status,\n };\n\n if (scores) {\n payload.scores = scores;\n }\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n\n if (this.span) {\n this.span.end();\n }\n }\n\n /**\n * Get the current span\n */\n getSpan(): Span | undefined {\n return this.span;\n }\n\n /**\n * Execute a function within this context\n * Automatically handles start/end and error handling\n */\n async execute<T>(\n fn: (ctx: RunEntryContext) => Promise<T>,\n scores?: EvaluationScore[],\n ): Promise<T> {\n await this.start();\n\n try {\n const result = await fn(this);\n await this.end(true, scores);\n return result;\n } catch (error) {\n await this.end(false);\n throw error;\n }\n }\n}\n","/**\n * Internal HTTP client for Usage APIs\n */\n\nimport { Config } from \"../../config\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class UsageHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_USAGE_TIMEOUT\", 10.0);\n }\n\n async getSessionUsage(\n sessionId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n `netra.usage: Usage client is not initialized; cannot fetch session usage '${sessionId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/sessions/${sessionId}`, params);\n return this.extractData(response, {});\n }\n\n async getTenantUsage(\n tenantId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n `netra.usage: Usage client is not initialized; cannot fetch tenant usage '${tenantId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/tenants/${tenantId}`, params);\n return this.extractData(response, {});\n }\n\n async listTraces(params: {\n startTime?: string;\n endTime?: string;\n traceId?: string;\n sessionId?: string;\n userId?: string;\n tenantId?: string;\n limit?: number;\n cursor?: string;\n direction?: string;\n sortField?: string;\n sortOrder?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\"netra.usage: Usage client is not initialized; cannot list traces\");\n return {};\n }\n\n const payload: Record<string, any> = {};\n\n if (params.startTime) payload.startTime = params.startTime;\n if (params.endTime) payload.endTime = params.endTime;\n\n // Build filters array\n const filters: Array<{\n field: string;\n operator: string;\n type: string;\n value: string;\n }> = [];\n\n const filterMapping: Record<string, string | undefined> = {\n trace_id: params.traceId,\n session_id: params.sessionId,\n user_id: params.userId,\n tenant_id: params.tenantId,\n };\n\n for (const [field, value] of Object.entries(filterMapping)) {\n if (value !== undefined) {\n filters.push({\n field,\n operator: \"equals\",\n type: \"string\",\n value,\n });\n }\n }\n\n payload.filters = filters;\n\n // Build pagination object\n const pagination: Record<string, any> = {};\n if (params.limit !== undefined) pagination.limit = params.limit;\n if (params.cursor !== undefined) pagination.cursor = params.cursor;\n if (params.direction !== undefined) pagination.direction = params.direction;\n if (Object.keys(pagination).length > 0) {\n payload.pagination = pagination;\n }\n\n if (params.sortField !== undefined) payload.sortField = params.sortField;\n if (params.sortOrder !== undefined) payload.sortOrder = params.sortOrder;\n\n const response = await this.post(\"/sdk/traces\", payload);\n return response.ok ? response.data : {};\n }\n\n async listSpansByTraceId(params: {\n traceId: string;\n cursor?: string;\n direction?: string;\n limit?: number;\n spanName?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n console.error(\n `netra.usage: Usage client is not initialized; cannot list spans for trace '${params.traceId}'`\n );\n return {};\n }\n\n const queryParams: Record<string, string | number | undefined> = {};\n if (params.cursor !== undefined) queryParams.cursor = params.cursor;\n if (params.direction !== undefined) queryParams.direction = params.direction;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.spanName !== undefined) queryParams.spanName = params.spanName;\n\n const response = await this.get(\n `/sdk/traces/${params.traceId}/spans`,\n queryParams\n );\n return response.ok ? response.data : {};\n }\n}\n","/**\n * Public Usage API\n * Exposed as Netra.usage\n */\n\nimport { Config } from \"../../config\";\nimport { UsageHttpClient } from \"./client\";\nimport {\n ListSpansParams,\n ListTracesParams,\n SessionUsageData,\n SpansPage,\n TenantUsageData,\n TraceSpan,\n TracesPage,\n TraceSummary,\n} from \"./models\";\n\nexport class Usage {\n private config: Config;\n private client: UsageHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new UsageHttpClient(config);\n }\n\n /**\n * Get session usage data\n * @param sessionId Session identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Session usage data or null on error\n */\n async getSessionUsage(\n sessionId: string,\n startTime: string,\n endTime: string\n ): Promise<SessionUsageData | null> {\n if (!sessionId) {\n console.error(\"netra.usage: session_id is required to fetch session usage\");\n return null;\n }\n if (!startTime || !endTime) {\n console.error(\n \"netra.usage: start_time and end_time are required to fetch session usage\"\n );\n return null;\n }\n\n const result = await this.client.getSessionUsage(sessionId, startTime, endTime);\n const sessionIdFromResult = result.session_id;\n if (!sessionIdFromResult) {\n return null;\n }\n\n return {\n sessionId: sessionIdFromResult,\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * Get tenant usage data\n * @param tenantId Tenant identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Tenant usage data or null on error\n */\n async getTenantUsage(\n tenantId: string,\n startTime: string,\n endTime: string\n ): Promise<TenantUsageData | null> {\n if (!tenantId) {\n console.error(\"netra.usage: tenant_id is required to fetch tenant usage\");\n return null;\n }\n if (!startTime || !endTime) {\n console.error(\n \"netra.usage: start_time and end_time are required to fetch tenant usage\"\n );\n return null;\n }\n\n const result = await this.client.getTenantUsage(tenantId, startTime, endTime);\n const tenantIdFromResult = result.tenant_id;\n if (!tenantIdFromResult) {\n return null;\n }\n\n return {\n tenantId: tenantIdFromResult,\n organisationId: result.organisation_id ?? \"\",\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n sessionCount: result.sessionsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * List all traces\n * @param params List traces parameters\n * @returns Traces page or null on error\n */\n async listTraces(params: ListTracesParams): Promise<TracesPage | null> {\n if (!params.startTime || !params.endTime) {\n console.error(\"netra.usage: start_time and end_time are required to list traces\");\n return null;\n }\n\n const result = await this.client.listTraces({\n startTime: params.startTime,\n endTime: params.endTime,\n traceId: params.traceId,\n sessionId: params.sessionId,\n userId: params.userId,\n tenantId: params.tenantId,\n limit: params.limit,\n cursor: params.cursor,\n direction: params.direction,\n sortField: params.sortField,\n sortOrder: params.sortOrder,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const traces: TraceSummary[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSummary(item));\n\n return {\n traces,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * List all spans for a given trace\n * @param params List spans parameters\n * @returns Spans page or null on error\n */\n async listSpansByTraceId(params: ListSpansParams): Promise<SpansPage | null> {\n if (!params.traceId) {\n console.error(\"netra.usage: trace_id is required to list spans\");\n return null;\n }\n\n const result = await this.client.listSpansByTraceId({\n traceId: params.traceId,\n cursor: params.cursor,\n direction: params.direction,\n limit: params.limit,\n spanName: params.spanName,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const spans: TraceSpan[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSpan(item));\n\n return {\n spans,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * Iterate over traces using cursor-based pagination\n * @param params List traces parameters\n * @returns Async generator yielding TraceSummary items\n */\n async *iterTraces(\n params: ListTracesParams\n ): AsyncGenerator<TraceSummary, void, unknown> {\n if (!params.startTime || !params.endTime) {\n console.error(\"netra.usage: start_time and end_time are required to iterate traces\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listTraces({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const trace of page.traces) {\n yield trace;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n /**\n * Iterate over spans for a given trace using cursor-based pagination\n * @param params List spans parameters\n * @returns Async generator yielding TraceSpan items\n */\n async *iterSpansByTraceId(\n params: ListSpansParams\n ): AsyncGenerator<TraceSpan, void, unknown> {\n if (!params.traceId) {\n console.error(\"netra.usage: trace_id is required to iterate spans\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listSpansByTraceId({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const span of page.spans) {\n yield span;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n private mapToTraceSummary(item: any): TraceSummary {\n return {\n id: item.id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n latencyMs: item.latency_ms ?? 0,\n startTime: item.start_time ?? \"\",\n endTime: item.end_time ?? \"\",\n cursor: item.cursor ?? \"\",\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n models: item.models,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n hasViolation: item.has_violation,\n violations: item.violations,\n hasError: item.has_error,\n service: item.service,\n };\n }\n\n private mapToTraceSpan(item: any): TraceSpan {\n return {\n id: item.id ?? \"\",\n traceId: item.trace_id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n parentSpanId: item.parent_span_id,\n latencyMs: item.latency_ms,\n startTimeMs: item.start_time_ms,\n endTimeMs: item.end_time_ms,\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n modelName: item.model_name,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n piiActions: item.pii_actions,\n hasViolation: item.has_violation,\n violations: item.violations,\n violationActions: item.violation_actions,\n status: item.status,\n attributes: item.attributes,\n events: item.events,\n links: item.links,\n resources: item.resources,\n metadata: item.metadata,\n hasError: item.has_error,\n createdAt: item.created_at ?? \"\",\n cursor: item.cursor ?? \"\",\n };\n }\n}\n","/**\n * Session Span Processor\n *\n * OpenTelemetry span processor that automatically adds session attributes to spans.\n * This includes session_id, user_id, tenant_id from OpenTelemetry baggage, and entity context\n * (workflow, task, agent names) from SessionManager.\n *\n * Uses OpenTelemetry's baggage API for automatic context propagation across async boundaries.\n */\n\nimport { context, Context, propagation, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { SessionManager } from \"../session-manager\";\n\n/**\n * Get the global context manager if it's available\n * Tries multiple methods to find the effective ContextManager\n */\nfunction getContextManager(): any {\n try {\n // 1. Try standard internal property\n if ((context as any)._getContextManager) {\n return (context as any)._getContextManager();\n }\n \n // 2. Try global symbols (Node.js standard location)\n const globalSymbols = Object.getOwnPropertySymbols(global);\n const otelSymbol = globalSymbols.find(s => s.toString().includes('opentelemetry.js.api'));\n if (otelSymbol) {\n const globalState = (global as any)[otelSymbol];\n if (globalState && globalState.contextManager) {\n return globalState.contextManager;\n }\n }\n \n return null;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Helper to execute enterWith on the context manager\n * Handles standard AsyncLocalStorage and OTel wrappers\n */\nfunction safeEnterWith(newContext: Context): void {\n const contextManager = getContextManager();\n \n if (!contextManager) {\n console.warn(\"ContextManager not found. Baggage may not propagate correctly.\");\n return;\n }\n\n // 1. Direct enterWith (AsyncLocalStorage directly or compatible manager)\n if (typeof contextManager.enterWith === 'function') {\n contextManager.enterWith(newContext);\n return;\n }\n\n // 2. OTel AsyncHooksContextManager (wraps AsyncLocalStorage in private _asyncLocalStorage)\n if (contextManager._asyncLocalStorage && typeof contextManager._asyncLocalStorage.enterWith === 'function') {\n contextManager._asyncLocalStorage.enterWith(newContext);\n return;\n }\n \n // 3. Fallback: Check for other common wrapping patterns or fail\n console.warn(\"ContextManager available but enterWith not found. Baggage propagation might fail.\");\n}\n\n/**\n * Set a session baggage value using OpenTelemetry's baggage API\n * This automatically propagates across async boundaries via AsyncLocalStorage\n */\nexport function setSessionBaggage(key: string, value: string): void {\n try {\n const currentBaggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const newBaggage = currentBaggage.setEntry(key, { value });\n const newContext = propagation.setBaggage(context.active(), newBaggage);\n\n // Bind the new context to the current async resource\n safeEnterWith(newContext);\n } catch (e) {\n console.error(`SessionSpanProcessor: Failed to set baggage key=${key}:`, e);\n }\n}\n\n/**\n * Get a session baggage value using OpenTelemetry's baggage API\n */\nexport function getSessionBaggage(key: string): string | undefined {\n try {\n const baggage = propagation.getBaggage(context.active());\n return baggage?.getEntry(key)?.value;\n } catch (e) {\n console.error(`SessionSpanProcessor: Failed to get baggage key=${key}:`, e);\n return undefined;\n }\n}\n\n/**\n * Clear all session baggage from the current context\n */\nexport function clearSessionBaggage(): void {\n try {\n const emptyBaggage = propagation.createBaggage();\n const newContext = propagation.setBaggage(context.active(), emptyBaggage);\n\n safeEnterWith(newContext);\n } catch (e) {\n console.error(\"SessionSpanProcessor: Failed to clear baggage:\", e);\n }\n}\n\nexport class SessionSpanProcessor implements SpanProcessor {\n /**\n * Called when a span starts. Adds session and entity context attributes.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Store the current span in SessionManager\n SessionManager.setCurrentSpan(span);\n\n // Add library metadata\n span.setAttribute(\"library.name\", Config.LIBRARY_NAME);\n span.setAttribute(\"library.version\", Config.LIBRARY_VERSION);\n span.setAttribute(\"sdk.name\", Config.SDK_NAME);\n\n // Get baggage from the parent context (or current if not provided)\n const ctxToUse = parentContext || context.active();\n const baggage = propagation.getBaggage(ctxToUse);\n\n // Add session context from OpenTelemetry baggage\n const sessionId = baggage?.getEntry(\"session_id\")?.value;\n const userId = baggage?.getEntry(\"user_id\")?.value;\n const tenantId = baggage?.getEntry(\"tenant_id\")?.value;\n\n if (sessionId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.session_id`, sessionId);\n }\n if (userId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.user_id`, userId);\n }\n if (tenantId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.tenant_id`, tenantId);\n }\n\n // Add custom attributes from baggage\n const customKeys = baggage?.getEntry(\"custom_keys\")?.value;\n if (customKeys) {\n for (const key of customKeys.split(\",\")) {\n const value = baggage?.getEntry(`custom.${key}`)?.value;\n if (value) {\n span.setAttribute(`${Config.LIBRARY_NAME}.custom.${key}`, value);\n }\n }\n }\n\n // Add entity attributes from SessionManager (workflow, task, agent context)\n const entityAttributes = SessionManager.getCurrentEntityAttributes();\n for (const [attrKey, attrValue] of Object.entries(entityAttributes)) {\n span.setAttribute(attrKey, attrValue);\n }\n } catch (e) {\n console.error(\"SessionSpanProcessor: Error setting span attributes:\", e);\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Instrumentation Span Processor\n * \n * OpenTelemetry span processor that:\n * 1. Records the raw instrumentation scope name for each span\n * 2. Truncates attribute values to prevent oversized payloads\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\n\n// Allowed instrumentation names that we recognize and tag\nconst ALLOWED_INSTRUMENTATION_NAMES = new Set([\n \"openai\",\n \"groq\",\n \"mistral_ai\",\n \"mistralai\",\n \"google_genai\",\n \"langchain\",\n \"llama_index\",\n \"pinecone\",\n \"qdrant\",\n \"chromadb\",\n \"together\",\n \"vertexai\",\n \"cohere_ai\",\n \"litellm\",\n \"dspy\",\n \"pydantic_ai\",\n \"weaviate_db\",\n \"fastapi\",\n \"adk\",\n \"httpx\",\n \"aiohttp\",\n \"cerebras\",\n \"deepgram\",\n \"cartesia\",\n \"elevenlabs\",\n]);\n\nexport class InstrumentationSpanProcessor implements SpanProcessor {\n private maxAttributeLength: number;\n\n constructor(maxAttributeLength?: number) {\n this.maxAttributeLength = maxAttributeLength ?? Config.ATTRIBUTE_MAX_LEN;\n }\n\n /**\n * Detect the raw instrumentation name from the span's instrumentation scope.\n */\n private detectRawInstrumentationName(span: Span): string | null {\n try {\n // Access the instrumentation scope from the span\n // In JS SDK, this is typically available via the span's internal properties\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n\n if (scope) {\n const name = scope.name;\n if (typeof name === \"string\" && name) {\n // Extract the base name from fully qualified names\n if (\n name.startsWith(\"opentelemetry.instrumentation.\") ||\n name.startsWith(\"netra.instrumentation.\") ||\n name.startsWith(\"@opentelemetry/instrumentation-\") ||\n name.startsWith(\"@traceloop/instrumentation-\")\n ) {\n try {\n // Get the last segment\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n } catch {\n // Fall through to return the full name\n }\n }\n return name;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n }\n\n /**\n * Truncate a value to the maximum allowed length.\n * Handles strings, bytes, and recursively handles lists and objects.\n */\n private truncateValue(value: unknown): unknown {\n try {\n if (typeof value === \"string\") {\n return value.length <= this.maxAttributeLength\n ? value\n : value.substring(0, this.maxAttributeLength);\n }\n\n if (Array.isArray(value)) {\n return value.map((v) =>\n typeof v === \"string\" ? this.truncateValue(v) : v\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = typeof v === \"string\" ? this.truncateValue(v) : v;\n }\n return result;\n }\n } catch {\n return value;\n }\n return value;\n }\n\n /**\n * Called when a span starts. Wraps setAttribute to truncate values\n * and records the instrumentation name.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Wrap setAttribute to truncate values\n const originalSetAttribute = span.setAttribute.bind(span);\n\n span.setAttribute = (key: string, value: unknown): Span => {\n try {\n const truncated = this.truncateValue(value);\n return originalSetAttribute(key, truncated as any);\n } catch {\n // Best-effort; never break span\n try {\n return originalSetAttribute(key, value as any);\n } catch {\n return span;\n }\n }\n };\n\n // Set instrumentation name attribute\n const name = this.detectRawInstrumentationName(span);\n if (name && ALLOWED_INSTRUMENTATION_NAMES.has(name.toLowerCase())) {\n span.setAttribute(`${Config.LIBRARY_NAME}.instrumentation.name`, name);\n }\n } catch (e) {\n console.error(\n \"InstrumentationSpanProcessor: Error on span start:\",\n e\n );\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Scrubbing Span Processor\n *\n * OpenTelemetry span processor that scrubs sensitive data from span attributes.\n * This includes API keys, emails, phone numbers, SSNs, credit cards, passwords,\n * bearer tokens, and other sensitive information.\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\n// Sensitive patterns for data detection (based on pydantic logfire scrubbing)\nconst SENSITIVE_PATTERNS: Record<string, RegExp> = {\n // API keys - scrub \"Token: <value>\" or sk-... tokens\n api_key: new RegExp(\n \"(?:Token:\\\\s*\\\\S{32,})\" + // Token: <32+ chars>\n \"|(?:sk-[A-Za-z0-9]{16,})\", // sk-... tokens\n \"g\",\n ),\n // Email addresses\n email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/gi,\n // Phone numbers (US format)\n phone: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}/g,\n // Credit cards (Visa, Mastercard, Amex, Discover)\n credit_card:\n /(?<!\\d)(?:4\\d{15}|5[1-5]\\d{14}|3[47]\\d{13}|6(?:011|5\\d{2})\\d{12})(?!\\d)/g,\n // Social Security Numbers\n ssn: /\\b\\d{3}-?\\d{2}-?\\d{4}\\b/g,\n // Password patterns\n password: /(?:password|passwd|pwd|secret|token)\\s*[:=]\\s*\\S+/gi,\n // Bearer tokens\n bearer_token: /(?:authorization:\\s*)?bearer\\s+[A-Za-z0-9\\-._~+/]+=*/gi,\n // Authorization headers\n authorization: /authorization\\s*:\\s*\\S+/gi,\n};\n\n// Generic pattern for long digit sequences (credit/debit cards)\nconst LONG_DIGIT_PATTERN = /(?<!\\d)\\d{13,19}(?!\\d)/g;\n\n// Sensitive attribute keys that should have their values scrubbed\nconst SENSITIVE_KEYS = new Set([\n \"password\",\n \"passwd\",\n \"pwd\",\n \"secret\",\n \"key\",\n \"api_key\",\n \"auth\",\n \"authorization\",\n \"bearer\",\n \"credential\",\n \"private_key\",\n \"access_token\",\n \"refresh_token\",\n \"session_token\",\n \"x-api-key\",\n \"x-auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"span\",\n]);\n\nconst SCRUB_REPLACEMENT = \"[SCRUBBED]\";\n\nexport class ScrubbingSpanProcessor implements SpanProcessor {\n /**\n * Check if a key is considered sensitive.\n */\n private isSensitiveKey(key: string): boolean {\n const keyLower = key.toLowerCase();\n for (const sensitiveKey of SENSITIVE_KEYS) {\n if (keyLower.includes(sensitiveKey)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrub sensitive patterns from a string value.\n */\n private scrubStringValue(value: string): string {\n let scrubbed = value;\n\n // Early catch-all for contiguous 13-19 digit sequences (credit/debit cards)\n scrubbed = scrubbed.replace(LONG_DIGIT_PATTERN, SCRUB_REPLACEMENT);\n\n // Apply all sensitive patterns\n for (const pattern of Object.values(SENSITIVE_PATTERNS)) {\n // Reset lastIndex for global patterns\n pattern.lastIndex = 0;\n if (pattern.test(scrubbed)) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, SCRUB_REPLACEMENT);\n }\n }\n\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a dictionary value.\n */\n private scrubDictValue(\n value: Record<string, unknown>,\n ): Record<string, unknown> {\n const scrubbed: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const [, scrubbedValue] = this.scrubKeyValue(k, v);\n scrubbed[k] = scrubbedValue;\n }\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a list value.\n */\n private scrubListValue(value: unknown[]): unknown[] {\n return value.map((item) => {\n if (typeof item === \"string\") {\n return this.scrubStringValue(item);\n } else if (Array.isArray(item)) {\n return this.scrubListValue(item);\n } else if (typeof item === \"object\" && item !== null) {\n return this.scrubDictValue(item as Record<string, unknown>);\n }\n return item;\n });\n }\n\n /**\n * Scrub sensitive data from a key-value pair.\n */\n private scrubKeyValue(key: string, value: unknown): [string, unknown] {\n // Check if key itself is sensitive and value is a simple type\n if (\n this.isSensitiveKey(key) &&\n typeof value !== \"object\" &&\n !Array.isArray(value)\n ) {\n return [key, SCRUB_REPLACEMENT];\n }\n\n // Scrub value based on its type\n if (typeof value === \"string\") {\n return [key, this.scrubStringValue(value)];\n } else if (Array.isArray(value)) {\n return [key, this.scrubListValue(value)];\n } else if (typeof value === \"object\" && value !== null) {\n return [key, this.scrubDictValue(value as Record<string, unknown>)];\n }\n\n return [key, value];\n }\n\n /**\n * Called when a span starts. No-op for this processor.\n */\n onStart(span: Span, parentContext: Context): void {\n // No-op - scrubbing happens on span end\n }\n\n /**\n * Called when a span ends. Scrubs sensitive data from span attributes.\n */\n onEnd(span: ReadableSpan): void {\n try {\n // Get span attributes - we need to access the internal attributes\n const spanAny = span as any;\n const attributes = spanAny.attributes || spanAny._attributes;\n\n if (attributes && typeof attributes === \"object\") {\n const scrubbedAttributes: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n const [, scrubbedValue] = this.scrubKeyValue(key, value);\n scrubbedAttributes[key] = scrubbedValue;\n }\n\n // Replace attributes with scrubbed versions\n // This works because ReadableSpan is actually a reference to the span object\n if (spanAny._attributes) {\n spanAny._attributes = scrubbedAttributes;\n } else if (spanAny.attributes) {\n // Some implementations use different property names\n Object.keys(spanAny.attributes).forEach(\n (k) => delete spanAny.attributes[k],\n );\n Object.assign(spanAny.attributes, scrubbedAttributes);\n }\n }\n } catch (e) {\n console.error(\"ScrubbingSpanProcessor: Error scrubbing attributes:\", e);\n }\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * LlmTraceIdentifierSpanProcessor\n *\n * Note: This processor uses instance-level state for trace tracking.\n * The Maps here are shared across all requests within a single process,\n * which is acceptable because they're indexed by traceId (which is unique\n * per request). The state is automatically cleaned up when traces complete.\n */\nexport class LlmTraceIdentifierSpanProcessor implements SpanProcessor {\n // Default attribute keys\n static DEFAULT_REQUEST_MODEL_KEY = \"gen_ai.request.model\";\n static DEFAULT_RESPONSE_MODEL_KEY = \"gen_ai.response.model\";\n static DEFAULT_ROOT_MARKER_KEY = \"netra.trace.llm.call\";\n\n private _requestModelKey: string;\n private _responseModelKey: string;\n private _rootMarkerKey: string;\n\n // Trace state tracking - indexed by traceId so inherently request-isolated\n private _rootSpansByTrace: Map<string, Span> = new Map();\n private _rootSpanIdsByTrace: Map<string, string> = new Map();\n private _markedTraces: Set<string> = new Set();\n\n constructor(\n requestModelAttributeKey: string = LlmTraceIdentifierSpanProcessor.DEFAULT_REQUEST_MODEL_KEY,\n responseModelAttributeKey: string = LlmTraceIdentifierSpanProcessor.DEFAULT_RESPONSE_MODEL_KEY,\n rootMarkerAttributeKey: string = LlmTraceIdentifierSpanProcessor.DEFAULT_ROOT_MARKER_KEY,\n ) {\n if (\n !requestModelAttributeKey ||\n !responseModelAttributeKey ||\n !rootMarkerAttributeKey\n ) {\n throw new Error(\"Attribute keys cannot be empty\");\n }\n this._requestModelKey = requestModelAttributeKey;\n this._responseModelKey = responseModelAttributeKey;\n this._rootMarkerKey = rootMarkerAttributeKey;\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n if (!this._isRootSpan(span, parentContext)) {\n return;\n }\n\n const spanContext = span.spanContext();\n if (!spanContext) return;\n\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n this._rootSpansByTrace.set(traceId, span);\n this._rootSpanIdsByTrace.set(traceId, spanId);\n } catch (e) {\n console.warn(\"Error processing span start:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const spanContext = span.spanContext();\n if (!spanContext) return;\n\n const traceId = spanContext.traceId;\n\n if (this._isRootSpanEnding(traceId, spanContext.spanId)) {\n this._cleanupTrace(traceId);\n return;\n }\n\n if (this._isTraceMarked(traceId)) {\n return;\n }\n\n if (!this._isLlmSpan(span)) {\n return;\n }\n\n this._markRootSpan(traceId);\n } catch (e) {\n console.warn(\"Error processing span end:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n this._rootSpansByTrace.clear();\n this._rootSpanIdsByTrace.clear();\n this._markedTraces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isRootSpan(span: Span, context: Context): boolean {\n const parentSpan = trace.getSpan(context);\n return !parentSpan || !parentSpan.spanContext().spanId;\n }\n\n private _isRootSpanEnding(traceId: string, spanId: string): boolean {\n const rootSpanId = this._rootSpanIdsByTrace.get(traceId);\n return rootSpanId !== undefined && spanId === rootSpanId;\n }\n\n private _isTraceMarked(traceId: string): boolean {\n return this._markedTraces.has(traceId);\n }\n\n private _isLlmSpan(span: ReadableSpan): boolean {\n const attributes = span.attributes;\n if (!attributes) return false;\n\n const hasRequestModel = Object.prototype.hasOwnProperty.call(\n attributes,\n this._requestModelKey,\n );\n const hasResponseModel = Object.prototype.hasOwnProperty.call(\n attributes,\n this._responseModelKey,\n );\n\n return hasRequestModel || hasResponseModel;\n }\n\n private _markRootSpan(traceId: string): void {\n const rootSpan = this._rootSpansByTrace.get(traceId);\n this._markedTraces.add(traceId);\n\n if (!rootSpan) return;\n\n if (!rootSpan.isRecording()) {\n console.warn(\"Root span is not recording, cannot mark it.\");\n return;\n }\n\n try {\n rootSpan.setAttribute(this._rootMarkerKey, true);\n } catch (e) {\n console.warn(`Failed to mark root span for trace_id=${traceId}:`, e);\n }\n }\n\n private _cleanupTrace(traceId: string): void {\n this._rootSpansByTrace.delete(traceId);\n this._rootSpanIdsByTrace.delete(traceId);\n this._markedTraces.delete(traceId);\n }\n}\n","// TODO: Replace this temporary implementation with the official OpenTelemetry GenAI semantic conventions\n// when they are published for the JavaScript SDK.\n\nexport const SpanAttributes = {\n LLM_SYSTEM: \"gen_ai.system\",\n\n LLM_REQUEST_TYPE: \"llm.request.type\",\n LLM_REQUEST_MODEL: \"gen_ai.request.model\",\n LLM_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n LLM_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n LLM_REQUEST_TOP_P: \"gen_ai.request.top_p\",\n LLM_REQUEST_REASONING_EFFORT: \"gen_ai.request.reasoning_effort\",\n\n LLM_RESPONSE_MODEL: \"gen_ai.response.model\",\n\n LLM_USAGE_PROMPT_TOKENS: \"gen_ai.usage.prompt_tokens\",\n LLM_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n LLM_USAGE_CACHE_READ_INPUT_TOKENS: \"gen_ai.usage.cache_read_input_tokens\",\n LLM_USAGE_REASONING_TOKENS: \"gen_ai.usage.reasoning_tokens\",\n LLM_USAGE_TOTAL_TOKENS: \"llm.usage.total_tokens\",\n\n LLM_FREQUENCY_PENALTY: \"llm.frequency_penalty\",\n LLM_PRESENCE_PENALTY: \"llm.presence_penalty\",\n LLM_CHAT_STOP_SEQUENCES: \"llm.chat.stop_sequences\",\n LLM_IS_STREAMING: \"llm.is_streaming\",\n LLM_COMPLETIONS: \"gen_ai.completion\",\n LLM_PROMPTS: \"gen_ai.prompt\",\n} as const;\n","/**\n * Shared utility functions for instrumentation\n * These functions can be reused across different provider instrumentations\n */\n\nimport { Span, context } from \"@opentelemetry/api\";\nimport { Config } from \"../config\";\nimport { SpanAttributes } from \"./span-attributes\";\n\n// Suppression key for instrumentation\nconst SUPPRESS_INSTRUMENTATION_KEY = Symbol(\"netra.suppress_instrumentation\");\n\n/**\n * Check if instrumentation should be suppressed\n */\nexport function shouldSuppressInstrumentation(): boolean {\n const ctx = context.active();\n return ctx.getValue(SUPPRESS_INSTRUMENTATION_KEY) === true;\n}\n\n/**\n * Type guard that determines whether a value is a Promise.\n *\n * This is useful for distinguishing between synchronous return values\n * and Promise-based (asynchronous) results at runtime.\n *\n * @param value - The value to test.\n * @returns `true` if the value is a Promise instance.\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return value instanceof Promise;\n}\n\n/**\n * Determines whether a value is a plain json object.\n *\n * This intended for validating JSON-style objects at runtime\n *\n * Excludes:\n * - `null`\n * - Arrays\n *\n * @param v - The value to test.\n * @returns `true` if the value is a non-null, non-array object.\n */\nexport function isDict(v: unknown): v is Record<string, any> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n/**\n * Converts a model or response value into a plain dictionary object.\n *\n * This utility is intended for normalizing SDK models, class instances,\n * or arbitrary values into a JSON-compatible key–value structure suitable\n * for logging, tracing, or serialization.\n *\n * Conversion strategy (in order):\n * 1. Non-objects return an empty object.\n * 2. Objects with a `toJSON()` method use its output.\n * 3. Plain objects are shallow-copied.\n * 4. Other objects are serialized via `JSON.stringify` / `JSON.parse`.\n *\n * If conversion fails, an empty object is returned.\n *\n * @param obj - The value to convert.\n * @returns A plain dictionary representation of the input.\n */\nexport function modelAsDict(obj: unknown): Record<string, unknown> {\n if (obj == null || typeof obj !== \"object\") {\n return {};\n }\n\n // Prefer explicit JSON serialization when available\n if (\n \"toJSON\" in obj &&\n typeof (obj as { toJSON?: unknown }).toJSON === \"function\"\n ) {\n return (obj as { toJSON: () => unknown }).toJSON() as Record<\n string,\n unknown\n >;\n }\n\n // Fast path for plain objects\n if (Object.getPrototypeOf(obj) === Object.prototype) {\n return { ...(obj as Record<string, unknown>) };\n }\n\n // Fallback: attempt structural serialization\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch {\n return {};\n }\n}\n\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction truncateAttribute(value: string, maxLen: number): string {\n if (!value) return value;\n if (value.length <= maxLen) return value;\n return value.slice(0, maxLen) + \"...(truncated)\";\n}\n\nfunction extractFirstCompletionText(\n response: Record<string, unknown>\n): string | undefined {\n // Common: choices[0].message.content (chat) or choices[0].text (completion)\n const choices = response.choices as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(choices) && choices.length > 0) {\n const first = choices[0];\n const message = first.message as Record<string, unknown> | undefined;\n if (message && message.content !== undefined) {\n return String(message.content);\n }\n if (first.text !== undefined) {\n return String(first.text);\n }\n }\n\n // Mistral/OpenAI response-like variants\n if (response.output_text !== undefined) {\n return String(response.output_text);\n }\n\n // Responses API style: output[].content[].text\n const output = response.output as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(output) && output.length > 0) {\n const firstOut = output[0];\n const content = firstOut.content as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(content) && content.length > 0) {\n const firstContent = content[0];\n if (firstContent.text !== undefined) {\n return String(firstContent.text);\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Set request attributes on span\n * These are shared across different LLM providers\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n system: string\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, system);\n\n if (kwargs.model) {\n span.setAttribute(\"gen_ai.request.model\", String(kwargs.model));\n span.setAttribute(\"llm.request.model\", String(kwargs.model));\n }\n\n _setAttributeMappings(span, kwargs);\n\n if (Array.isArray(kwargs.messages)) {\n span.setAttribute(\"llm.request.message_count\", kwargs.messages.length);\n }\n\n if (kwargs.reasoning !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_REASONING_EFFORT,\n JSON.stringify(kwargs.reasoning)\n );\n }\n\n // Input count (for embeddings - handle both input and inputs)\n const inputs = kwargs.input ?? kwargs.inputs;\n if (inputs !== undefined) {\n if (Array.isArray(inputs)) {\n span.setAttribute(\"llm.request.input_count\", inputs.length);\n } else {\n span.setAttribute(\"llm.request.input_count\", 1);\n }\n }\n\n // Tools count and definitions\n if (Array.isArray(kwargs.tools) && kwargs.tools.length > 0) {\n span.setAttribute(\"gen_ai.request.tools_count\", kwargs.tools.length);\n\n // Add individual tool definitions\n kwargs.tools.forEach((tool: any, index: number) => {\n if (tool.name) {\n span.setAttribute(`gen_ai.request.tools.${index}.name`, tool.name);\n }\n if (tool.description) {\n span.setAttribute(`gen_ai.request.tools.${index}.description`, tool.description);\n }\n if (tool.input_schema) {\n span.setAttribute(\n `gen_ai.request.tools.${index}.input_schema`,\n JSON.stringify(tool.input_schema)\n );\n }\n });\n }\n\n // Tool choice (handle both snake_case and camelCase)\n const toolChoice = kwargs.tool_choice ?? kwargs.toolChoice;\n if (toolChoice !== undefined) {\n span.setAttribute(\n \"gen_ai.request.tool_choice\",\n typeof toolChoice === \"string\" ? toolChoice : JSON.stringify(toolChoice)\n );\n }\n\n // Content tracing (guarded by config/env)\n if (isTraceContentEnabled()) {\n if (requestType === \"chat\") {\n _setChatCompletionAPIAttributes(span, kwargs);\n } else if (requestType === \"response\") {\n _setResponseAPIAttributes(span, kwargs);\n } else if (kwargs.prompt !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"user\");\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.0.content`,\n String(kwargs.prompt)\n );\n } else {\n // Handles Embeddings / generic inputs\n const content = kwargs.input ?? kwargs.inputs;\n if (content !== undefined) {\n const prompt = truncateAttribute(\n safeStringify(content),\n Config.CONVERSATION_MAX_LEN\n );\n span.setAttribute(\"gen_ai.prompt\", prompt);\n span.setAttribute(\"llm.request.input\", prompt);\n }\n }\n\n // FIM suffix (if present)\n if (kwargs.suffix !== undefined) {\n const suffix = truncateAttribute(\n safeStringify(kwargs.suffix),\n Config.CONVERSATION_MAX_LEN\n );\n span.setAttribute(\"llm.request.suffix\", suffix);\n }\n }\n}\n\nfunction _setAttributeMappings(span: Span, kwargs: Record<string, unknown>) {\n const attributeMappings = {\n model: SpanAttributes.LLM_REQUEST_MODEL,\n temperature: SpanAttributes.LLM_REQUEST_TEMPERATURE,\n max_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_completion_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_output_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_tokens_to_sample: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n frequency_penalty: SpanAttributes.LLM_FREQUENCY_PENALTY,\n presence_penalty: SpanAttributes.LLM_PRESENCE_PENALTY,\n reasoning_effort: SpanAttributes.LLM_REQUEST_REASONING_EFFORT,\n stop: SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n stream: SpanAttributes.LLM_IS_STREAMING,\n top_p: SpanAttributes.LLM_REQUEST_TOP_P,\n };\n\n for (let [key, attribute] of Object.entries(attributeMappings)) {\n const value: any = kwargs[key];\n if (value !== undefined) {\n span.setAttribute(attribute, value);\n }\n }\n}\n\nfunction _setChatCompletionAPIAttributes(\n span: Span,\n kwargs: Record<string, unknown>\n) {\n const messages = kwargs.messages;\n if (!Array.isArray(messages)) {\n return;\n }\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (!isDict(message)) {\n continue;\n }\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.role`,\n message?.role ?? \"user\"\n );\n\n // Handle content - can be string or array\n const content = message?.content;\n if (typeof content === 'string') {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content`,\n content\n );\n } else if (Array.isArray(content)) {\n // Handle array content (tool results, multimodal content, etc.)\n content.forEach((block: any, blockIndex: number) => {\n if (block.type === 'tool_result') {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.tool_result.${blockIndex}.tool_use_id`,\n block.tool_use_id\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.tool_result.${blockIndex}.content`,\n typeof block.content === 'string' ? block.content : JSON.stringify(block.content)\n );\n } else if (block.type === 'text') {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content.${blockIndex}`,\n block.text || ''\n );\n }\n });\n } else {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content`,\n String(content ?? \"\")\n );\n }\n }\n}\n\nfunction _setResponseAPIAttributes(\n span: Span,\n kwargs: Record<string, unknown>\n) {\n let messageIndex = 0;\n if (kwargs.instructions !== undefined) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.role`,\n \"system\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.content`,\n kwargs.instructions as any\n );\n messageIndex++;\n }\n\n const inputData = kwargs.input;\n if (inputData !== undefined) {\n if (typeof inputData === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.role`,\n \"user\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.content`,\n inputData\n );\n } else if (Array.isArray(inputData)) {\n for (let message of inputData) {\n if (!isDict(message)) {\n continue;\n }\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.role`,\n message?.role ?? \"user\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${messageIndex}.content`,\n String(message?.content ?? \"\")\n );\n }\n }\n }\n}\n\n/**\n * Set response attributes on span\n * These are shared across different LLM providers\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n\n if (response.id) {\n span.setAttribute(\"llm.response.id\", String(response.id));\n }\n\n const model = response?.model || (response?.response_metadata as any)?.model;\n if (model) {\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, String(model));\n }\n\n _setUsageAttributes(span, response);\n\n const choices = response.choices as\n | Array<Record<string, unknown>>\n | undefined;\n if (choices && choices.length > 0) {\n const firstChoice = choices[0];\n const finishReason = firstChoice.finish_reason ?? firstChoice.finishReason;\n if (finishReason) {\n span.setAttribute(\"gen_ai.response.finish_reason\", String(finishReason));\n span.setAttribute(\"llm.response.finish_reason\", String(finishReason));\n }\n }\n\n if (isTraceContentEnabled()) {\n _setResponseMessageAttributes(span, response);\n }\n\n // For embeddings - handle data array\n const data = response.data as Array<unknown> | undefined;\n if (data) {\n span.setAttribute(\"llm.response.embedding_count\", data.length);\n // Get embedding dimensions from first item if available\n if (data.length > 0) {\n const firstItem = data[0] as Record<string, unknown>;\n const embedding = firstItem.embedding as number[] | undefined;\n if (embedding && Array.isArray(embedding)) {\n span.setAttribute(\n \"llm.response.embedding_dimensions\",\n embedding.length\n );\n }\n }\n }\n}\n\nfunction _setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!response.usage && !response.usage_metadata) return;\n\n const usage = (response.usage ?? response.usage_metadata) as Record<\n string,\n unknown\n >;\n\n const promptTokens = usage.prompt_tokens ?? usage.input_tokens;\n if (promptTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(promptTokens)\n );\n }\n\n const completionTokens = usage.completion_tokens ?? usage.output_tokens;\n if (completionTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(completionTokens)\n );\n }\n\n const totalTokens = usage.total_tokens;\n if (totalTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(totalTokens)\n );\n }\n\n const cacheTokens = (\n (usage.prompt_tokens_details ?? usage.input_tokens_details) as {\n cached_tokens?: unknown;\n }\n )?.cached_tokens;\n if (cacheTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(cacheTokens)\n );\n }\n\n const reasoningTokens = (\n (usage.completion_tokens_details ?? usage.output_tokens_details) as {\n reasoning_tokens?: unknown;\n }\n )?.reasoning_tokens;\n if (reasoningTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_REASONING_TOKENS,\n Number(reasoningTokens)\n );\n }\n}\n\nfunction _setResponseMessageAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n let messageIndex = 0;\n const messageContent = response.output_text ?? response.content;\n if (messageContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.role`,\n \"assistant\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.content`,\n String(messageContent)\n );\n }\n\n if (response.content && Array.isArray(response.content)) {\n let toolCallIndex = 0;\n response.content.forEach((contentBlock: any) => {\n if (contentBlock.type === 'text' && contentBlock.text) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.role`,\n \"assistant\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.content`,\n String(contentBlock.text)\n );\n messageIndex += 1;\n } else if (contentBlock.type === 'tool_use') {\n // Capture tool use information\n span.setAttribute(\n `gen_ai.response.tool_calls.${toolCallIndex}.name`,\n contentBlock.name\n );\n span.setAttribute(\n `gen_ai.response.tool_calls.${toolCallIndex}.id`,\n contentBlock.id\n );\n span.setAttribute(\n `gen_ai.response.tool_calls.${toolCallIndex}.input`,\n JSON.stringify(contentBlock.input)\n );\n toolCallIndex += 1;\n }\n });\n\n // Set total tool calls count if any\n if (toolCallIndex > 0) {\n span.setAttribute(\"gen_ai.response.tool_calls_count\", toolCallIndex);\n }\n }\n\n if (response.output !== undefined) {\n for (let element of response.output as Array<Record<string, unknown>>) {\n if (element.content === undefined) continue;\n for (let chunk of element.content as Array<Record<string, unknown>>) {\n if (chunk.text === undefined) continue;\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.role`,\n \"assistant\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.content`,\n String(chunk.text)\n );\n messageIndex += 1;\n }\n }\n }\n\n // Handle choices\n const choices = response.choices as Array<Record<string, any>> | undefined;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const message = choice.message;\n if (message !== undefined) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.role`,\n message.role ?? \"assistant\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.content`,\n String(message.content ?? \"\")\n );\n messageIndex++;\n } else {\n const delta = choice.delta;\n if (delta !== undefined) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.role`,\n delta.role ?? \"assistant\"\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${messageIndex}.content`,\n String(delta.content ?? \"\")\n );\n messageIndex++;\n }\n }\n }\n }\n}\n","import { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"anthropic\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n if(response?.type === 'message_batch'){\n span.setAttribute(\"status\", response?.processing_status as string);\n }\n setBaseResponseAttributes(span, response);\n}\n","export const __version__ = \"1.0.0\";","import { context, Span, SpanKind, SpanStatusCode, trace, Tracer } from \"@opentelemetry/api\";\nimport { isPromise, modelAsDict, shouldSuppressInstrumentation } from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype AnthropicRequestType = \"chat\" | \"beta\" | \"batches\";\n\nconst CHAT_SPAN_NAME = \"anthropic.chat\";\nconst BETA_SPAN_NAME = \"anthropic.beta\";\nconst BATCHES_SPAN_NAME = \"anthropic.batches\";\nconst STREAM_ENABLED_REQUESTS: AnthropicRequestType[] = [\"chat\", \"beta\"];\n\nfunction anthropicWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n const isStreaming = args[0]?.stream === true;\n \n if (process.env.NETRA_DEBUG_LOGS) {\n const activeSpan = trace.getSpan(context.active());\n console.log(`[Netra Debug] Anthropic invoke (${requestType}). Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n }\n\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n const currentContext = context.active();\n const span = tracer.startSpan(spanName + \".create\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.streaming\": true\n },\n },\n currentContext);\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n\n // Call the original function and get the APIPromise\n const response = wrapped.call(instance, ...args);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n // For messages.create({stream: true}), return AsyncStreamingWrapper\n // which will track streaming events and finalize the span when done\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n console.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n // Should usually be a promise, but just in case\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n\n } catch (error) {\n console.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n // Non streaming\n else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n // Create a new promise that handles instrumentation\n const instrumentedPromise = (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n console.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n\n // Use a Proxy to preserve all methods from the original APIPromise\n // This includes withResponse(), asResponse(), etc.\n return new Proxy(instrumentedPromise, {\n get(target, prop, receiver) {\n // Special handling for then/catch/finally - use our instrumented promise\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n\n // For all other properties, first check the original response object\n // This ensures methods like withResponse() are available\n const responseValue = (response as any)[prop];\n if (responseValue !== undefined) {\n if (typeof responseValue === 'function') {\n return responseValue.bind(response);\n }\n return responseValue;\n }\n\n // Fall back to the instrumented promise\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n });\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n console.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const betaWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BETA_SPAN_NAME, \"beta\");\n\nexport const batchesWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BATCHES_SPAN_NAME, \"batches\"); \n\n\nexport class MessageStreamWrapper {\n private completeResponse: Record<string, any> = {\n content: [],\n model: \"\",\n usage: {},\n };\n\n constructor(\n private span: Span,\n private messageStream: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {\n // Use Proxy to delegate all properties and methods to messageStream\n return new Proxy(this, {\n get(target, prop, receiver) {\n // Our own properties\n if (prop === 'span' || prop === 'messageStream' || prop === 'startTime' || \n prop === 'requestKwargs' || prop === 'completeResponse' ||\n prop === 'processChunk' || prop === 'finalizeSpan') {\n return Reflect.get(target, prop, receiver);\n }\n \n // Symbol.asyncIterator - use our custom implementation\n if (prop === Symbol.asyncIterator) {\n return target[Symbol.asyncIterator].bind(target);\n }\n \n // Event emitter methods - need special handling to maintain 'this' context\n if (prop === 'on' || prop === 'once' || prop === 'off' || prop === 'removeListener' || \n prop === 'addListener' || prop === 'emit' || prop === 'removeAllListeners' ||\n prop === 'listeners' || prop === 'listenerCount') {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n // Wrap event listeners to add instrumentation\n if (prop === 'on' || prop === 'once' || prop === 'addListener') {\n return function(event: string, listener: Function) {\n // Wrap the listener to track events in our span\n const wrappedListener = (...args: any[]) => {\n target.span.addEvent(`messagestream.event.${event}`, {\n 'event.type': event,\n });\n \n // Process chunks for our complete response tracking\n if (event === 'message' || event === 'contentBlock' || \n event === 'text' || event === 'finalMessage') {\n if (args[0]) {\n target.processEventData(event, args[0]);\n }\n }\n \n return listener(...args);\n };\n \n return method.call(target.messageStream, event, wrappedListener);\n };\n }\n return method.bind(target.messageStream);\n }\n return method;\n }\n \n if (prop === 'finalMessage' || prop === 'done' || prop === 'finalText') {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n return async function(...args: any[]) {\n try {\n const result = await method.call(target.messageStream, ...args);\n \n // When stream completes, finalize our span\n if (prop === 'finalMessage' || prop === 'done') {\n target.finalizeSpanFromMessage(result);\n }\n \n return result;\n } catch (error) {\n target.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n };\n }\n return method;\n }\n \n // Everything else - delegate to messageStream\n const value = target.messageStream[prop];\n if (typeof value === 'function') {\n return value.bind(target.messageStream);\n }\n return value;\n }\n });\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<unknown> {\n try {\n for await (const chunk of this.messageStream) {\n this.processChunk(chunk);\n yield chunk;\n }\n this.finalizeSpan(SpanStatusCode.OK);\n } catch (err) {\n console.error(\"netra.instrumentation.anthropic: Stream error\", err);\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw err;\n }\n }\n\n private processEventData(eventType: string, data: any): void {\n switch (eventType) {\n case 'message':\n // This is the message_start event data\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n if (data.usage) {\n this.completeResponse.usage = data.usage;\n }\n break;\n \n case 'text':\n // Accumulate text\n if (!this.completeResponse.currentText) {\n this.completeResponse.currentText = '';\n }\n this.completeResponse.currentText += data;\n break;\n \n case 'contentBlock':\n // Track content blocks\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push(data);\n break;\n \n case 'finalMessage':\n // Final message contains everything\n if (data.model) this.completeResponse.model = data.model;\n if (data.content) this.completeResponse.content = data.content;\n if (data.usage) this.completeResponse.usage = data.usage;\n break;\n }\n }\n\n private processChunk(chunk: any): void {\n /**\n * Anthropic streaming events look like:\n * - message_start\n * - content_block_start\n * - content_block_delta\n * - content_block_stop\n * - message_delta\n * - message_stop\n */\n\n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push({\n type: chunk.content_block.type,\n text: \"\",\n });\n break;\n }\n\n case \"content_block_delta\": {\n if (!this.completeResponse.content || this.completeResponse.content.length === 0) {\n this.completeResponse.content = [{ type: 'text', text: '' }];\n }\n \n const lastBlock =\n this.completeResponse.content[\n this.completeResponse.content.length - 1\n ];\n\n if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n this.completeResponse.usage = {\n ...this.completeResponse.usage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpanFromMessage(message: any): void {\n // Extract from final message if available\n if (message) {\n if (message.model) this.completeResponse.model = message.model;\n if (message.content) this.completeResponse.content = message.content;\n if (message.usage) this.completeResponse.usage = message.usage;\n }\n \n this.finalizeSpan(SpanStatusCode.OK);\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n\n constructor(\n private span: Span,\n private response: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {}\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n // Anthropic Stream is AsyncIterable\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator!.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n // Reusing the same chunk processing logic as MessageStreamWrapper, but adapted for this context\n // The raw chunks from messages.create({stream:true}) are the same as what MessageStreamWrapper handles.\n \n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n const content = this.completeResponse.content as any[] || [];\n this.completeResponse.content = content;\n content.push({\n type: chunk.content_block.type,\n text: \"\",\n });\n break;\n }\n\n case \"content_block_delta\": {\n const content = this.completeResponse.content as any[] || [];\n if (content.length === 0) {\n content.push({ type: 'text', text: '' });\n this.completeResponse.content = content;\n }\n \n const lastBlock = content[content.length - 1];\n\n if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n const currentUsage = this.completeResponse.usage as any || {};\n this.completeResponse.usage = {\n ...currentUsage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n \n // We match the format expected by setResponseAttributes\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","import { SpanKind, trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { setRequestAttributes } from \"./utils\";\nimport { __version__ } from \"./version\";\nimport { batchesWrapper, betaWrapper, chatWrapper, MessageStreamWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.anthropic\";\nconst INSTRUMENTS = [\"anthropic >= 0.71.2\"];\n\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\nlet AnthropicClass: any = null;\n\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nasync function resolveAnthropicAsync(): Promise<any> {\n if (AnthropicClass) return AnthropicClass;\n\n try {\n const anthropicModule = await import(\"@anthropic-ai/sdk\");\n AnthropicClass = anthropicModule.Anthropic || anthropicModule.default || anthropicModule;\n return AnthropicClass;\n } catch {\n return null;\n }\n}\n\nfunction resolveAnthropic(): any {\n return AnthropicClass;\n}\n\n\nexport class NetraAnthropicInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n async instrumentAsync(options: InstrumentorOptions = {}): Promise<NetraAnthropicInstrumentor> {\n if (isInstrumented) {\n console.warn(\"Anthropic is already instrumented\");\n return this;\n }\n\n const Anthropic = await resolveAnthropicAsync();\n if (!Anthropic) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentMessages();\n this._instrumentBetaMessages();\n this._instrumentBatchMessages();\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void{\n if (!isInstrumented) {\n console.warn(\"Anthropic is not instrumented\");\n return;\n }\n\n this._uninstrumentMessages();\n this._uninstrumentBetaMessages();\n this._uninstrumentBatchMessages();\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\nprivate _instrumentMessages(): void {\n if (!this.tracer) {\n console.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n console.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const MessagesClass = AnthropicSDK.Messages;\n if (!MessagesClass) {\n console.error(\n \"Anthropic instrumentation: Could not find Anthropic Messages class to instrument\",\n );\n return;\n }\n\n if (MessagesClass?.prototype?.stream) {\n const originalStream = MessagesClass.prototype.stream as Function;\n originalMethods.set(\"messages.stream\", originalStream);\n const tracer = this.tracer;\n MessagesClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n\n const span = tracer.startSpan(\"anthropic\" + \".stream\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": \"chat\",\n \"llm.streaming\": true,\n \"llm.operation\": \"stream\"\n },\n });\n\n setRequestAttributes(span, kwargs, \"chat\");\n const startTime = Date.now();\n\n // Temporarily restore the original create method so stream() can use it\n const instrumentedCreate = (this as any).create;\n const originalCreate = originalMethods.get(\"messages.create\");\n if (originalCreate) {\n (this as any).create = originalCreate;\n }\n\n try {\n const messageStream = original(...args);\n return new MessageStreamWrapper(span, messageStream, startTime, kwargs);\n } finally {\n // Restore the instrumented create method\n if (originalCreate) {\n (this as any).create = instrumentedCreate;\n }\n }\n } as typeof MessagesClass.prototype.stream;\n }\n\n if (MessagesClass?.prototype?.create) {\n const originalCreate = MessagesClass.prototype.create as Function;\n originalMethods.set(\"messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n MessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof MessagesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to instrument messages: ${error}`);\n }\n}\n\nprivate _instrumentBetaMessages(): void {\n if (!this.tracer) {\n console.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n console.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n if (!BetaMessagesClass) {\n console.error(\n \"Anthropic instrumentation: Could not find Anthropic Beta Messages class to instrument\",\n );\n return;\n }\n\n if (BetaMessagesClass?.prototype?.create) {\n const originalCreate = BetaMessagesClass.prototype.create as Function;\n originalMethods.set(\"beta.messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = betaWrapper(tracer);\n\n\n BetaMessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to instrument beta: ${error}`);\n }\n}\n\nprivate _instrumentBatchMessages():void {\n if (!this.tracer) {\n console.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n console.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const BatchMessageClass = AnthropicSDK.Messages?.Batches;\n if (!BatchMessageClass) {\n console.error(\n \"Anthropic instrumentation: Could not find Anthropic Batches class to instrument\",\n );\n return;\n }\n\n if (BatchMessageClass?.prototype?.create) {\n const originalCreate = BatchMessageClass.prototype.create as Function;\n originalMethods.set(\"batch.messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = batchesWrapper(tracer);\n\n\n BatchMessageClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BatchMessageClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to instrument batches: ${error}`);\n }\n}\n private _uninstrumentMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const MessagesClass = AnthropicSDK.Messages;\n\n const originalCreate = originalMethods.get(\"messages.create\");\n if (originalCreate && MessagesClass?.prototype) {\n MessagesClass.prototype.create =\n originalCreate as typeof MessagesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument messages: ${error}`);\n }\n }\n private _uninstrumentBetaMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n\n const originalCreate = originalMethods.get(\"beta.messages.create\");\n if (originalCreate && BetaMessagesClass?.prototype) {\n BetaMessagesClass.prototype.create =\n originalCreate as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument beta: ${error}`);\n }\n }\n private _uninstrumentBatchMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const BatchMessagesClass = AnthropicSDK.Messages?.Batches;\n\n const originalCreate = originalMethods.get(\"batch.messages.create\");\n if (originalCreate && BatchMessagesClass?.prototype) {\n BatchMessagesClass.prototype.create =\n originalCreate as typeof BatchMessagesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument batches: ${error}`);\n }\n }\n}\n\nexport const anthropicInstrumentor = new NetraAnthropicInstrumentor();\n\nexport { AsyncStreamingWrapper, chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for Google GenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n","/**\n * Utility functions for Google GenAI instrumentation\n *\n * Google GenAI has a different response format than OpenAI:\n * - Response: { response: EnhancedGenerateContentResponse }\n * - EnhancedGenerateContentResponse: { candidates, usageMetadata, promptFeedback }\n * - UsageMetadata: { promptTokenCount, candidatesTokenCount, totalTokenCount, cachedContentTokenCount }\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nfunction safeStringify(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n args: Record<string, unknown>,\n): void {\n // Use a private property on the span to store kwargs temporarily for setResponseAttributes\n (span as any)._netra_kwargs = kwargs;\n if (!span.isRecording()) {\n return;\n }\n\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, \"google_genai\");\n\n // Model is set on the GenerativeModel instance, not in the request kwargs\n // We need to access it from `this.model` in the wrapper if available\n // For now, set from kwargs if provided\n if (kwargs.model !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Generation config parameters (from generationConfig object or direct kwargs)\n const generationConfig =\n (kwargs.generationConfig as Record<string, unknown>) ?? kwargs;\n\n if (generationConfig.temperature !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TEMPERATURE,\n Number(generationConfig.temperature),\n );\n }\n\n if (generationConfig.topP !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TOP_P,\n Number(generationConfig.topP),\n );\n }\n\n if (generationConfig.topK !== undefined) {\n span.setAttribute(\"gen_ai.request.top_k\", Number(generationConfig.topK));\n }\n\n if (generationConfig.maxOutputTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n Number(generationConfig.maxOutputTokens),\n );\n }\n\n if (generationConfig.stopSequences !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n safeStringify(generationConfig.stopSequences),\n );\n }\n\n // Candidate count\n if (generationConfig.candidateCount !== undefined) {\n span.setAttribute(\n \"gen_ai.request.candidate_count\",\n Number(generationConfig.candidateCount),\n );\n }\n\n // Presence/frequency penalty\n if (generationConfig.presencePenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_PRESENCE_PENALTY,\n Number(generationConfig.presencePenalty),\n );\n }\n if (generationConfig.frequencyPenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_FREQUENCY_PENALTY,\n Number(generationConfig.frequencyPenalty),\n );\n }\n\n // Embedding dimensions\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n\n // Tools\n if (Array.isArray(kwargs.tools) && kwargs.tools.length > 0) {\n span.setAttribute(\"gen_ai.request.tools_count\", kwargs.tools.length);\n }\n\n // Tool config\n if (kwargs.toolConfig !== undefined) {\n span.setAttribute(\n \"gen_ai.request.tool_config\",\n safeStringify(kwargs.toolConfig),\n );\n }\n\n // Safety settings\n if (\n Array.isArray(kwargs.safetySettings) &&\n kwargs.safetySettings.length > 0\n ) {\n span.setAttribute(\n \"gen_ai.request.safety_settings_count\",\n kwargs.safetySettings.length,\n );\n }\n\n // System instruction\n if (kwargs.systemInstruction !== undefined) {\n if (isTraceContentEnabled()) {\n span.setAttribute(\n \"gen_ai.request.system_instruction\",\n safeStringify(kwargs.systemInstruction),\n );\n }\n span.setAttribute(\"gen_ai.request.has_system_instruction\", true);\n }\n\n // Content tracing - prompts\n if (isTraceContentEnabled()) {\n _setPromptAttributes(span, kwargs, args);\n }\n}\n\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\n/**\n * Extract and set prompt content from Google GenAI request\n */\nfunction _setPromptAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n args: any,\n): void {\n // For generateContent, the prompt can be:\n // 1. A string (simple prompt)\n // 2. An array of Parts (Array<string | Part>)\n // 3. A GenerateContentRequest object with contents array\n\n let promptIndex = 0;\n\n // 1. Add system instruction if present (from getGenerativeModel)\n if (kwargs.systemInstruction !== undefined) {\n const systemInstruction = kwargs.systemInstruction as any;\n let systemContent = \"\";\n\n if (typeof systemInstruction === \"string\") {\n systemContent = systemInstruction;\n } else if (\n systemInstruction.parts &&\n Array.isArray(systemInstruction.parts)\n ) {\n systemContent = systemInstruction.parts\n .filter((p: any) => p.text !== undefined)\n .map((p: any) => String(p.text))\n .join(\"\");\n } else if (systemInstruction.text) {\n systemContent = String(systemInstruction.text);\n } else {\n systemContent = JSON.stringify(systemInstruction);\n }\n\n if (systemContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"system\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n systemContent,\n );\n promptIndex++;\n }\n }\n\n // 2. Add prompts from args (generateContent/embedContent call)\n if (!args) return;\n\n // Handle string prompt\n if (typeof args === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n args,\n );\n promptIndex++;\n return;\n }\n\n // Handle Array<string | Part>\n if (Array.isArray(args)) {\n const textParts = args\n .map((p: any) => {\n if (typeof p === \"string\") return p;\n if (p && typeof p.text === \"string\") return p.text;\n return \"\";\n })\n .filter(Boolean)\n .join(\" \");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n return;\n }\n\n // Handle GenerateContentRequest object { contents: [...] }\n const contents = args.contents as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(contents)) {\n for (const content of contents) {\n const role = String(content.role ?? \"user\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (Array.isArray(parts)) {\n const textParts = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n\n // Track non-text parts\n const inlineDataParts = parts.filter((p) => p.inlineData !== undefined);\n if (inlineDataParts.length > 0) {\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.has_inline_data`,\n true,\n );\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.inline_data_count`,\n inlineDataParts.length,\n );\n }\n }\n }\n }\n\n // For embedContent, handle content object { parts: [...] } or string\n if (args.content !== undefined) {\n const content = args.content as Record<string, unknown> | string;\n if (typeof content === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n content,\n );\n promptIndex++;\n } else if (content.parts !== undefined) {\n const parts = content.parts as Array<Record<string, unknown>>;\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n}\n\n/**\n * Set response attributes for Google GenAI responses\n * Handles the specific structure of GenerateContentResult\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) {\n return;\n }\n\n // Google GenAI returns { response: EnhancedGenerateContentResponse }\n // The response object itself is what we need to parse\n const actualResponse =\n (response.response as Record<string, unknown>) ?? response;\n\n // Set usage metadata\n _setUsageAttributes(span, actualResponse);\n\n // Set candidate attributes\n _setCandidateAttributes(span, actualResponse);\n\n // Set prompt feedback if present (content filtering)\n _setPromptFeedbackAttributes(span, actualResponse);\n\n // Set completion content if tracing is enabled\n if (isTraceContentEnabled()) {\n _setCompletionAttributes(span, actualResponse);\n }\n\n // Handle embedding response\n _setEmbeddingResponseAttributes(span, actualResponse);\n}\n\n/**\n * Extract and set token usage from usageMetadata\n */\nfunction _setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usageMetadata = response.usageMetadata as\n | Record<string, unknown>\n | undefined;\n if (!usageMetadata) return;\n\n // Prompt tokens\n if (usageMetadata.promptTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(usageMetadata.promptTokenCount),\n );\n }\n\n // Completion/candidates tokens\n if (usageMetadata.candidatesTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(usageMetadata.candidatesTokenCount),\n );\n }\n\n // Total tokens\n if (usageMetadata.totalTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(usageMetadata.totalTokenCount),\n );\n }\n\n // Cached content tokens\n if (usageMetadata.cachedContentTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(usageMetadata.cachedContentTokenCount),\n );\n }\n}\n\n/**\n * Extract and set attributes from candidates\n */\nfunction _setCandidateAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates) || candidates.length === 0) return;\n\n span.setAttribute(\"gen_ai.response.candidate_count\", candidates.length);\n\n const firstCandidate = candidates[0];\n\n // Finish reason\n if (firstCandidate.finishReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.finish_reason\",\n String(firstCandidate.finishReason),\n );\n }\n\n // Average log probs (if present)\n if (firstCandidate.avgLogprobs !== undefined) {\n span.setAttribute(\n \"gen_ai.response.avg_logprobs\",\n Number(firstCandidate.avgLogprobs),\n );\n }\n\n // Safety ratings\n const safetyRatings = firstCandidate.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings) && safetyRatings.length > 0) {\n span.setAttribute(\n \"gen_ai.response.safety_ratings_count\",\n safetyRatings.length,\n );\n\n // Set individual safety ratings\n for (let i = 0; i < safetyRatings.length; i++) {\n const rating = safetyRatings[i];\n if (rating.category !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.category`,\n String(rating.category),\n );\n }\n if (rating.probability !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.probability`,\n String(rating.probability),\n );\n }\n }\n }\n\n // Citation metadata\n const citationMetadata = firstCandidate.citationMetadata as\n | Record<string, unknown>\n | undefined;\n if (citationMetadata?.citationSources !== undefined) {\n const sources = citationMetadata.citationSources as Array<unknown>;\n span.setAttribute(\"gen_ai.response.citation_count\", sources.length);\n }\n\n // Grounding metadata\n if (firstCandidate.groundingMetadata !== undefined) {\n span.setAttribute(\"gen_ai.response.has_grounding\", true);\n }\n}\n\n/**\n * Set prompt feedback attributes (content filtering info)\n */\nfunction _setPromptFeedbackAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const promptFeedback = response.promptFeedback as\n | Record<string, unknown>\n | undefined;\n if (!promptFeedback) return;\n\n if (promptFeedback.blockReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_reason\",\n String(promptFeedback.blockReason),\n );\n }\n\n if (promptFeedback.blockReasonMessage !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_message\",\n String(promptFeedback.blockReasonMessage),\n );\n }\n\n const safetyRatings = promptFeedback.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings)) {\n span.setAttribute(\n \"gen_ai.response.prompt_safety_ratings_count\",\n safetyRatings.length,\n );\n }\n}\n\n/**\n * Extract and set completion content from candidates\n */\nfunction _setCompletionAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates)) return;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const content = candidate.content as Record<string, unknown> | undefined;\n\n if (!content) continue;\n\n const role = String(content.role ?? \"model\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (!Array.isArray(parts)) continue;\n\n // Extract text from parts\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textContent) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${i}.role`, role);\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${i}.content`,\n textContent,\n );\n }\n\n // Track function calls\n const functionCalls = parts.filter((p) => p.functionCall !== undefined);\n if (functionCalls.length > 0) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call_count`,\n functionCalls.length,\n );\n\n for (let j = 0; j < functionCalls.length; j++) {\n const fc = functionCalls[j].functionCall as Record<string, unknown>;\n if (fc.name !== undefined) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call.${j}.name`,\n String(fc.name),\n );\n }\n }\n }\n }\n}\n\n/**\n * Set attributes for embedding responses\n */\nfunction _setEmbeddingResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n // Single embedding response\n const embedding = response.embedding as Record<string, unknown> | undefined;\n if (embedding?.values !== undefined) {\n const values = embedding.values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n\n // Batch embedding response\n const embeddings = response.embeddings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(embeddings)) {\n span.setAttribute(\"gen_ai.response.embedding_count\", embeddings.length);\n if (embeddings.length > 0 && embeddings[0].values !== undefined) {\n const values = embeddings[0].values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n }\n}\n","import {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport {\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype GoogleGenAIRequestType = \"chat\" | \"embedding\";\n\nconst CHAT_SPAN_NAME = \"google_genai.chat\";\nconst EMBEDDING_SPAN_NAME = \"google_genai.embedding\";\n\nfunction googleGenAIWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n\n if (modelName) {\n kwargs.model = modelName;\n }\n if (systemInstruction) {\n kwargs.systemInstruction = systemInstruction;\n }\n\n const currentContext = context.active();\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n const startTime = Date.now();\n const response = original.apply(this, args);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n console.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n console.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\nfunction googleGenAIStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n\n if (modelName) kwargs.model = modelName;\n if (systemInstruction) kwargs.systemInstruction = systemInstruction;\n\n const currentContext = context.active();\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n const startTime = Date.now();\n\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n\n const response = original.apply(this, args);\n\n // generateContentStream() is async -> Promise<StreamResult>\n if (!isPromise(response)) {\n // If SDK changes to sync stream, still handle it safely\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n\n return (async () => {\n try {\n const streamResult: any = await response;\n\n // Google GenAI stream result typically looks like:\n // { stream: AsyncIterable<Chunk>, response?: Promise<FinalResponse> }\n // We will wrap streamResult.stream so we can end span at completion.\n const originalStream: AsyncIterable<any> = streamResult.stream;\n\n if (\n !originalStream ||\n typeof originalStream[Symbol.asyncIterator] !== \"function\"\n ) {\n // Not a real stream, treat like non-stream\n const endTime = Date.now();\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return streamResult;\n }\n\n let chunkIndex = 0;\n let finalText = \"\";\n let firstTokenRecorded = false;\n\n const wrappedStream: AsyncIterable<any> = {\n [Symbol.asyncIterator]() {\n const iterator = originalStream[Symbol.asyncIterator]();\n return {\n async next() {\n try {\n const res = await iterator.next();\n\n // res = { value, done }\n if (res?.done) {\n const endTime = Date.now();\n\n // Await the response promise if available to get full metadata (token counts, etc.)\n if (\n streamResult.response &&\n isPromise(streamResult.response)\n ) {\n try {\n const finalResponse =\n await streamResult.response;\n const responseDict = modelAsDict(finalResponse);\n setResponseAttributes(span, responseDict);\n } catch {\n // If response promise fails, still set what we have from stream\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n } else {\n // Fallback: set attributes from streamResult\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\n \"llm.response.duration\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return res;\n }\n\n const chunk = res.value;\n\n // Optional: store chunk-by-chunk attributes if you want\n // span.setAttribute(`llm.stream.chunk.${chunkIndex}`, ...)\n // Best-effort: accumulate chunk.text() if available\n try {\n const t =\n typeof chunk?.text === \"function\"\n ? chunk.text()\n : chunk?.text;\n if (typeof t === \"string\") {\n if (t && !firstTokenRecorded) {\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n (Date.now() - startTime) / 1000,\n );\n firstTokenRecorded = true;\n }\n finalText += t;\n }\n } catch {\n // ignore chunk parsing issues\n }\n\n chunkIndex += 1;\n return res;\n } catch (error) {\n // End span on streaming error\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error\n ? error.message\n : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n async return() {\n // Called if consumer stops early (break)\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return { value: undefined, done: true };\n },\n };\n },\n };\n\n // Return same object but with wrapped stream\n return {\n ...streamResult,\n stream: wrappedStream,\n };\n } catch (error) {\n console.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } catch (error) {\n console.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\n/* Specific wrappers for different requests */\nexport const chatWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\nexport const chatStreamWrapper = (tracer: Tracer) =>\n googleGenAIStreamWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n","/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { __version__ } from \"./version\";\nimport { chatStreamWrapper, chatWrapper, embeddingsWrapper } from \"./wrappers\";\n// Cache the resolved GenerativeModel class\nlet GenerativeModel: any = null;\n\nimport shimmer from \"shimmer\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.google_genai\";\nconst INSTRUMENTS = [\"@google/genai >= 0.24.1\"];\n\n// Track instrumentation state\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Dynamically resolve the Google GenAI module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveGoogleGenerativeAIAsync(): Promise<any> {\n if (GenerativeModel) return GenerativeModel;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - @google/generative-ai is an optional peer dependency\n const googleGenAIModule = await import(\"@google/generative-ai\");\n GenerativeModel =\n googleGenAIModule.GenerativeModel ||\n googleGenAIModule.default?.GenerativeModel ||\n googleGenAIModule.default ||\n googleGenAIModule;\n return GenerativeModel;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveGoogleGenerativeAIAsync() first to populate cache.\n */\nfunction resolveGoogleGenerativeAI(): any {\n return GenerativeModel;\n}\n\n/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nexport class NetraGoogleGenerativeAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n // Tracer is initialized lazily during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n /**\n * Instrument Google GenAI client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {},\n ): Promise<NetraGoogleGenerativeAIInstrumentor> {\n if (isInstrumented) {\n console.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n // Resolve Google GenAI from application context using dynamic import\n const model = await resolveGoogleGenerativeAIAsync();\n if (!model) {\n // package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentGenerativeModel();\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Google GenAI client methods (sync version)\n */\n instrument(\n options: InstrumentorOptions = {},\n ): NetraGoogleGenerativeAIInstrumentor {\n if (isInstrumented) {\n console.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n // Check if we have the cached class\n if (!resolveGoogleGenerativeAI()) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n console.error(\"Failed to instrument Google GenAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentGenerativeModel();\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument Google GenAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n console.warn(\"Google GenAI is not instrumented\");\n return;\n }\n\n this._uninstrumentGenerativeModel();\n\n isInstrumented = false;\n }\n\n /**\n * Check if Google GenAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentGenerativeModel(): void {\n if (!this.tracer) return;\n\n try {\n if (!GenerativeModel) {\n console.error(\n \"Failed to find Google GenAI GenerativeModel to instrument\",\n );\n return;\n }\n\n const tracer = this.tracer;\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContent\",\n chatWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContentStream\",\n chatStreamWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"embedContent\",\n embeddingsWrapper(tracer),\n );\n } catch (error) {\n console.debug(\n `Google GenAI instrumentation: failed to instrument: ${error}`,\n );\n }\n }\n\n private _uninstrumentGenerativeModel(): void {\n try {\n // Verify methods before unwrapping\n if (typeof GenerativeModel.prototype.generateContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContent\");\n }\n if (\n typeof GenerativeModel.prototype.generateContentStream === \"function\"\n ) {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContentStream\");\n }\n if (typeof GenerativeModel.prototype.embedContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"embedContent\");\n }\n } catch (error) {\n console.debug(`Failed to uninstrument Google GenAI: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const googleGenerativeAIInstrumentor =\n new NetraGoogleGenerativeAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport { chatWrapper, chatStreamWrapper, embeddingsWrapper } from \"./wrappers\";\n\n// Re-export utilities\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"groq\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n setBaseResponseAttributes(span, response);\n}\n","import { Tracer, Span, SpanKind, SpanStatusCode, context } from \"@opentelemetry/api\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport {\n modelAsDict,\n isPromise,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\ntype GroqRequestType = \"chat\";\n\nconst CHAT_SPAN_NAME = \"groq.chat\";\nconst STREAM_ENABLED_REQUESTS: GroqRequestType[] = [\"chat\"];\n\nfunction groqWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GroqRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n const isStreaming = kwargs.stream === true;\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext\n );\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream: any = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n console.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new StreamingWrapper(span, response, startTime, kwargs);\n }\n } catch (error) {\n console.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n console.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n console.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n groqWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, any> = { choices: [], model: \"\" };\n\n constructor(\n private span: Span,\n private response: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {}\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (!this.iterator) {\n if (typeof this.response[Symbol.iterator] === \"function\") {\n this.iterator = this.response[Symbol.iterator]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) {\n throw new Error(\"Iterator not initialized\");\n }\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict =\n typeof chunk?.toDict === \"function\" ? chunk.toDict() : chunk;\n const choices = this.completeResponse.choices as any[];\n\n if (chunkDict.model) this.completeResponse.model = chunkDict.model;\n\n const chunkChoices = chunkDict.choices || [];\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = choice.delta || {};\n if (delta?.content) {\n if (!choices[index].message) {\n choices[index].message = { role: \"assistant\", content: \"\" };\n }\n choices[index].message.content += String(delta.content);\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n if (chunkDict.response?.status === \"completed\") {\n const outputs = chunkDict.response.output || [];\n outputs.forEach((output: any) => {\n const content = output.content || [];\n content.forEach((item: any) => {\n choices.push({\n message: { role: \"assistant\", content: item.text || \"\" },\n });\n });\n });\n this.completeResponse.usage = chunkDict.response.usage || {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const duration = (Date.now() - this.startTime) / 1000;\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n\n constructor(\n private span: Span,\n private response: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {}\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (Symbol.iterator in (this.response as any)) {\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n\n // Completion API\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n // Response API\n if ((chunkDict.response as any)?.status === \"completed\") {\n const response = chunkDict.response as Record<string, unknown>;\n const responseOutput = (response.output || []) as Array<\n Record<string, unknown>\n >;\n responseOutput.forEach((output: any) => {\n const content = output.content as Array<Record<string, unknown>>;\n if (content) {\n for (const contentItem of content) {\n const assistantText = contentItem.text || \"\";\n // Append to choices array instead of replacing\n (\n this.completeResponse.choices as Array<Record<string, unknown>>\n ).push({\n message: { role: \"assistant\", content: assistantText },\n });\n }\n }\n const usage = response.usage || {};\n this.completeResponse.usage = usage;\n });\n }\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","/**\n * Custom Groq instrumentor for Netra SDK\n *\n * Note: 'groq-sdk' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.groq\";\nconst INSTRUMENTS = [\"groq-sdk >= 0.3.0\"];\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\n// Cache the resolved Groq class\nlet GroqClass: any = null;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Dynamically resolve the Groq module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveGroqAsync(): Promise<any> {\n if (GroqClass) return GroqClass;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - groq-sdk is an optional peer dependency\n const groqModule = await import(\"groq-sdk\");\n GroqClass = groqModule.Groq || groqModule.default || groqModule;\n return GroqClass;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveGroqAsync() first to populate cache.\n */\nfunction resolveGroq(): any {\n return GroqClass;\n}\n\nexport class NetraGroqInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument Groq client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraGroqInstrumentor> {\n if (isInstrumented) {\n console.warn(\"Groq is already instrumented\");\n return this;\n }\n\n // Resolve Groq from application context using dynamic import\n const Groq = await resolveGroqAsync();\n if (!Groq) {\n // groq-sdk package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(Groq);\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Groq client methods (sync version - for backwards compatibility)\n * Note: This uses a cached Groq class. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraGroqInstrumentor {\n if (isInstrumented) {\n console.warn(\"Groq is already instrumented\");\n return this;\n }\n\n // Try to get cached Groq class (must have called instrumentAsync first)\n const Groq = resolveGroq();\n if (!Groq) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n console.error(\"Failed to instrument Groq:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(Groq);\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n console.warn(\"Groq is not instrumented\");\n return;\n }\n\n const Groq = resolveGroq();\n if (Groq) {\n this._uninstrumentChatCompletions(Groq);\n }\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentChatCompletions(Groq: any): void {\n if (!this.tracer) {\n console.warn(\"Groq instrumentation: No tracer available\");\n return;\n }\n\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n if (!CompletionsClass?.prototype?.create) {\n console.error(\n \"Groq instrumentation: Could not find Groq chat completions class to instrument\"\n );\n return;\n }\n const originalCreate = CompletionsClass.prototype.create as Function;\n originalMethods.set(\"chat.completions.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n CompletionsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n const wrappedFn = (...a: unknown[]) => original(...a);\n return wrapper(wrappedFn, this, args, kwargs);\n } as typeof CompletionsClass.prototype.create;\n } catch (error) {\n console.error(\n `Groq instrumentation: Failed to instrument chat completions: ${error}`\n );\n }\n }\n\n private _uninstrumentChatCompletions(Groq: any): void {\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n const originalCreate = originalMethods.get(\"chat.completions.create\");\n if (originalCreate && CompletionsClass?.prototype) {\n CompletionsClass.prototype.create =\n originalCreate as typeof CompletionsClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument chat completions: ${error}`);\n }\n }\n}\n\nexport const groqInstrumentor = new NetraGroqInstrumentor();\n\nexport { chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n","//#region rolldown:runtime\nvar __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n};\n\n//#endregion\nexport { __export };","import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n","/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n","import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented\n extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n","// Inlined from https://github.com/flexdinesh/browser-or-node\ndeclare global {\n const Deno:\n | {\n version: {\n deno: string;\n };\n env: {\n get: (name: string) => string | undefined;\n };\n }\n | undefined;\n}\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nexport const isWebWorker = () =>\n typeof globalThis === \"object\" &&\n globalThis.constructor &&\n globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const isJsDom = () =>\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\"));\n\n// Supabase Edge Function provides a `Deno` global object\n// without `version` property\nexport const isDeno = () => typeof Deno !== \"undefined\";\n\n// Mark not-as-node if in Supabase Edge Function\nexport const isNode = () =>\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\" &&\n !isDeno();\n\nexport const getEnv = () => {\n let env: string;\n if (isBrowser()) {\n env = \"browser\";\n } else if (isNode()) {\n env = \"node\";\n } else if (isWebWorker()) {\n env = \"webworker\";\n } else if (isJsDom()) {\n env = \"jsdom\";\n } else if (isDeno()) {\n env = \"deno\";\n } else {\n env = \"other\";\n }\n\n return env;\n};\n\nexport type RuntimeEnvironment = {\n library: string;\n libraryVersion?: string;\n runtime: string;\n runtimeVersion?: string;\n};\n\nlet runtimeEnvironment: RuntimeEnvironment | undefined;\n\nexport function getRuntimeEnvironment(): RuntimeEnvironment {\n if (runtimeEnvironment === undefined) {\n const env = getEnv();\n\n runtimeEnvironment = {\n library: \"langchain-js\",\n runtime: env,\n };\n }\n return runtimeEnvironment;\n}\n\nexport function getEnvironmentVariable(name: string): string | undefined {\n // Certain Deno setups will throw an error if you try to access environment variables\n // https://github.com/langchain-ai/langchainjs/issues/1412\n try {\n if (typeof process !== \"undefined\") {\n // eslint-disable-next-line no-process-env\n return process.env?.[name];\n } else if (isDeno()) {\n return Deno?.env.get(name);\n } else {\n return undefined;\n }\n } catch {\n return undefined;\n }\n}\n","import * as uuid from \"uuid\";\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type {\n ChatGenerationChunk,\n GenerationChunk,\n LLMResult,\n} from \"../outputs.js\";\nimport {\n Serializable,\n Serialized,\n SerializedNotImplemented,\n get_lc_unique_name,\n} from \"../load/serializable.js\";\nimport type { SerializedFields } from \"../load/map_keys.js\";\nimport type { DocumentInterface } from \"../documents/document.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Error = any;\n\n/**\n * Interface for the input parameters of the BaseCallbackHandler class. It\n * allows to specify which types of events should be ignored by the\n * callback handler.\n */\nexport interface BaseCallbackHandlerInput {\n ignoreLLM?: boolean;\n ignoreChain?: boolean;\n ignoreAgent?: boolean;\n ignoreRetriever?: boolean;\n ignoreCustomEvent?: boolean;\n _awaitHandler?: boolean;\n raiseError?: boolean;\n}\n\n/**\n * Interface for the indices of a new token produced by an LLM or Chat\n * Model in streaming mode.\n */\nexport interface NewTokenIndices {\n prompt: number;\n completion: number;\n}\n\n// TODO: Add all additional callback fields here\nexport type HandleLLMNewTokenCallbackFields = {\n chunk?: GenerationChunk | ChatGenerationChunk;\n};\n\n/**\n * Abstract class that provides a set of optional methods that can be\n * overridden in derived classes to handle various events during the\n * execution of a LangChain application.\n */\nabstract class BaseCallbackHandlerMethodsClass {\n /**\n * Called at the start of an LLM or Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleLLMStart?(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called when an LLM/ChatModel in `streaming` mode produces a new token\n */\n handleLLMNewToken?(\n token: string,\n /**\n * idx.prompt is the index of the prompt that produced the token\n * (if there are multiple prompts)\n * idx.completion is the index of the completion that produced the token\n * (if multiple completions per prompt are requested)\n */\n idx: NewTokenIndices,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if an LLM/ChatModel run encounters an error\n */\n handleLLMError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of an LLM/ChatModel run, with the output and the run ID.\n */\n handleLLMEnd?(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleChatModelStart?(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chain run, with the chain name and inputs\n * and the run ID.\n */\n handleChainStart?(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n runType?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n parentRunId?: string,\n extra?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Chain run encounters an error\n */\n handleChainError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Chain run, with the outputs and the run ID.\n */\n handleChainEnd?(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Tool run, with the tool name and input\n * and the run ID.\n */\n handleToolStart?(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Tool run encounters an error\n */\n handleToolError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Tool run, with the tool output and the run ID.\n */\n handleToolEnd?(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleText?(\n text: string,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent is about to execute an action,\n * with the action and the run ID.\n */\n handleAgentAction?(\n action: AgentAction,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent finishes execution, before it exits.\n * with the final output and the run ID.\n */\n handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n handleRetrieverStart?(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverEnd?(\n documents: DocumentInterface[],\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleCustomEvent?(\n eventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any,\n runId: string,\n tags?: string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n}\n\n/**\n * Base interface for callbacks. All methods are optional. If a method is not\n * implemented, it will be ignored. If a method is implemented, it will be\n * called at the appropriate time. All methods are called with the run ID of\n * the LLM/ChatModel/Chain that is running, which is generated by the\n * CallbackManager.\n *\n * @interface\n */\nexport type CallbackHandlerMethods = BaseCallbackHandlerMethodsClass;\n\n/**\n * Interface for handlers that can indicate a preference for streaming responses.\n * When implemented, this allows the handler to signal whether it prefers to receive\n * streaming responses from language models rather than complete responses.\n */\nexport interface CallbackHandlerPrefersStreaming {\n readonly lc_prefer_streaming: boolean;\n}\n\nexport function callbackHandlerPrefersStreaming(x: BaseCallbackHandler) {\n return \"lc_prefer_streaming\" in x && x.lc_prefer_streaming;\n}\n\n/**\n * Abstract base class for creating callback handlers in the LangChain\n * framework. It provides a set of optional methods that can be overridden\n * in derived classes to handle various events during the execution of a\n * LangChain application.\n */\nexport abstract class BaseCallbackHandler\n extends BaseCallbackHandlerMethodsClass\n implements BaseCallbackHandlerInput, Serializable\n{\n lc_serializable = false;\n\n get lc_namespace(): [\"langchain_core\", \"callbacks\", string] {\n return [\"langchain_core\", \"callbacks\", this.name];\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_attributes(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof BaseCallbackHandler),\n ];\n }\n\n lc_kwargs: SerializedFields;\n\n abstract name: string;\n\n ignoreLLM = false;\n\n ignoreChain = false;\n\n ignoreAgent = false;\n\n ignoreRetriever = false;\n\n ignoreCustomEvent = false;\n\n raiseError = false;\n\n awaitHandlers =\n getEnvironmentVariable(\"LANGCHAIN_CALLBACKS_BACKGROUND\") === \"false\";\n\n constructor(input?: BaseCallbackHandlerInput) {\n super();\n this.lc_kwargs = input || {};\n if (input) {\n this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM;\n this.ignoreChain = input.ignoreChain ?? this.ignoreChain;\n this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent;\n this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever;\n this.ignoreCustomEvent =\n input.ignoreCustomEvent ?? this.ignoreCustomEvent;\n this.raiseError = input.raiseError ?? this.raiseError;\n this.awaitHandlers =\n this.raiseError || (input._awaitHandler ?? this.awaitHandlers);\n }\n }\n\n copy(): BaseCallbackHandler {\n return new (this.constructor as new (\n input?: BaseCallbackHandlerInput\n ) => BaseCallbackHandler)(this);\n }\n\n toJSON(): Serialized {\n return Serializable.prototype.toJSON.call(this);\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return Serializable.prototype.toJSONNotImplemented.call(this);\n }\n\n static fromMethods(methods: CallbackHandlerMethods) {\n class Handler extends BaseCallbackHandler {\n name = uuid.v7();\n\n constructor() {\n super();\n Object.assign(this, methods);\n }\n }\n return new Handler();\n }\n}\n\nexport const isBaseCallbackHandler = (x: unknown) => {\n const callbackHandler = x as BaseCallbackHandler;\n return (\n callbackHandler !== undefined &&\n typeof callbackHandler.copy === \"function\" &&\n typeof callbackHandler.name === \"string\" &&\n typeof callbackHandler.awaitHandlers === \"boolean\"\n );\n};\n","import { Span } from \"@opentelemetry/api\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { SpanAttributes } from \"../span-attributes\";\n\nexport const NetraLanggraphAttributes = {\n spanType: \"netra.span.type\",\n entityInput: \"netra.entity.input\",\n entityOutput: \"netra.entity.output\",\n} as const;\n\nconst tagFilter = (tag: string) => {\n const filterableTags = [\"langsmith:hidden\"];\n return !filterableTags.includes(tag);\n};\n\nconst metadataFilter = (key: string) => {\n return !key.startsWith(\"__\");\n};\n\nexport function setGraphInputAttributes(\n span: Span,\n inputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify({ inputs }),\n );\n}\n\nexport function setGraphOutputAttributes(\n span: Span,\n outputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs }),\n );\n}\n\nexport function setLlmRequestAttributes(\n span: Span,\n metadata: Record<string, any>,\n prompts: string[],\n extraParams: Record<string, any>,\n): void {\n setLlmPrompts(span, prompts);\n const attributeMappings = mapLlmAttributes(metadata, extraParams);\n for (let [key, value] of Object.entries(attributeMappings)) {\n if (value !== undefined) {\n span.setAttribute(key, value);\n }\n }\n}\n\nexport function setChainInputAttributes(\n span: Span,\n inputs: ChainValues,\n tags?: string[],\n metadata?: Record<string, unknown>,\n): void {\n const entityInputs: Record<string, any> = { inputs };\n\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityInputs[\"tags\"] = filteredTags;\n }\n }\n\n if (metadata) {\n const filteredMetadata: Record<string, any> = {};\n const kwargs: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n if (key === \"langgraph_node\") kwargs.name = value;\n }\n\n entityInputs[\"metadata\"] = filteredMetadata;\n if (Object.keys(kwargs).length > 0) {\n entityInputs[\"kwargs\"] = kwargs;\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n}\n\nexport function setChainOutputAttributes(\n span: Span,\n outputs: ChainValues,\n tags?: string[],\n): void {\n const entityOutputs: Record<string, any> = { outputs };\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityOutputs[\"kwargs\"] = { tags: filteredTags };\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nexport function setToolAttributes(\n span: Span,\n toolName: string,\n input: Record<string, any>,\n output: string,\n metadata?: Record<string, any>,\n tags?: string[],\n): void {\n span.setAttribute(NetraLanggraphAttributes.spanType, \"TOOL\");\n const filteredTags = tags?.filter(tagFilter) ?? [];\n const filteredMetadata: Record<string, any> = {};\n\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n }\n }\n\n const entityInputs: Record<string, any> = {\n input_str: JSON.stringify(input),\n metadata: filteredMetadata,\n tags: filteredTags,\n };\n\n const entityOutputs: Record<string, any> = {\n output,\n kwargs: { name: toolName, tags: filteredTags },\n };\n\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nfunction mapLlmAttributes(\n metadata: Record<string, any>,\n extraParams: Record<string, any>,\n): Record<string, any> {\n const options = extraParams?.invocation_params?.options || {};\n\n return {\n [SpanAttributes.LLM_REQUEST_MODEL]: options.model || metadata.ls_model_name,\n [SpanAttributes.LLM_REQUEST_TEMPERATURE]:\n options.temperature ?? metadata.ls_temperature,\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n options.num_predict ?? metadata.ls_max_tokens,\n [SpanAttributes.LLM_FREQUENCY_PENALTY]: options.frequency_penalty,\n [SpanAttributes.LLM_PRESENCE_PENALTY]: options.presence_penalty,\n [SpanAttributes.LLM_CHAT_STOP_SEQUENCES]: options.stop ?? metadata.ls_stop,\n [SpanAttributes.LLM_REQUEST_TOP_P]: options.top_p,\n };\n}\n\nfunction setLlmPrompts(span: Span, prompts: string[]): void {\n const seperator = \":\";\n const roleMap: Record<string, string> = { human: \"user\" };\n\n prompts.forEach((prompt, index) => {\n const [role, ...rest] = prompt.split(seperator);\n const content = rest.join(seperator);\n\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.role`,\n roleMap[role.toLowerCase()] ?? role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n content,\n );\n });\n}\n","import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { LLMResult } from \"@langchain/core/outputs\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n Span,\n SpanKind,\n Tracer,\n Context,\n context,\n trace,\n createContextKey,\n} from \"@opentelemetry/api\";\n\nimport {\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Context key to track if we're inside a LangGraph instrumented call\n// This prevents double-instrumentation when invoke internally calls stream\nconst LANGGRAPH_INSTRUMENTATION_ACTIVE = createContextKey(\"netra.langgraph.active\");\n\nfunction getContextManager(): any {\n try {\n if ((context as any)._getContextManager) {\n return (context as any)._getContextManager();\n }\n\n const globalSymbols = Object.getOwnPropertySymbols(global);\n const otelSymbol = globalSymbols.find(s =>\n s.toString().includes(\"opentelemetry.js.api\"),\n );\n if (otelSymbol) {\n const globalState = (global as any)[otelSymbol];\n if (globalState?.contextManager) {\n return globalState.contextManager;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nfunction enterWithContext(newContext: Context): void {\n const contextManager = getContextManager();\n if (!contextManager) return;\n\n if (typeof contextManager.enterWith === \"function\") {\n contextManager.enterWith(newContext);\n return;\n }\n\n if (\n contextManager._asyncLocalStorage &&\n typeof contextManager._asyncLocalStorage.enterWith === \"function\"\n ) {\n contextManager._asyncLocalStorage.enterWith(newContext);\n }\n}\nimport {\n NetraLanggraphAttributes,\n setChainInputAttributes,\n setChainOutputAttributes,\n setGraphInputAttributes,\n setGraphOutputAttributes,\n setLlmRequestAttributes,\n setToolAttributes,\n} from \"./utils\";\n\ntype AnyFunc = (...args: any[]) => any;\ntype AsyncIterableFunc = (...args: any[]) => Promise<AsyncIterable<any>>;\n\nclass NetraLanggraphCallbackHandler extends BaseCallbackHandler {\n name = \"netra-langgraph-callback-handler\";\n // Map runId -> Span for explicit parenting\n private spans: Map<string, Span> = new Map();\n private nodeAttributes: Map<string, Record<string, any>> = new Map();\n private runStack: string[] = [];\n private inferredParents: Map<string, string> = new Map();\n\n constructor(\n private tracer: Tracer,\n private rootSpan: Span,\n ) {\n super();\n }\n\n private getParentSpan(parentRunId?: string): Span {\n if (parentRunId && this.spans.has(parentRunId)) {\n return this.spans.get(parentRunId)!;\n }\n return this.rootSpan;\n }\n\n private addNodeAttributes(runId: string, attributes: Record<string, any>) {\n const current = this.nodeAttributes.get(runId) || {};\n this.nodeAttributes.set(runId, { ...current, ...attributes });\n }\n\n private inferParentRunId(parentRunId?: string): string | undefined {\n if (parentRunId) return parentRunId;\n return this.runStack.length > 0\n ? this.runStack[this.runStack.length - 1]\n : undefined;\n }\n\n private pushRun(runId: string): void {\n this.runStack.push(runId);\n }\n\n private popRun(runId: string): void {\n const last = this.runStack[this.runStack.length - 1];\n if (last === runId) {\n this.runStack.pop();\n return;\n }\n const idx = this.runStack.lastIndexOf(runId);\n if (idx >= 0) {\n this.runStack.splice(idx, 1);\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n runType?: string,\n ) {\n const metadataNodeName =\n typeof metadata?.langgraph_node === \"string\"\n ? (metadata.langgraph_node as string)\n : \"\";\n const runNameValue = typeof runName === \"string\" ? runName : \"\";\n const chainIdName =\n Array.isArray(chain.id) && chain.id.length > 0\n ? chain.id[chain.id.length - 1]\n : \"\";\n const nodeName = metadataNodeName || runNameValue || chainIdName || \"Chain\";\n const nodeType = chainIdName || \"Unknown\";\n\n if (process.env.NETRA_DEBUG_LOGS) {\n const metadataKeys =\n metadata && typeof metadata === \"object\"\n ? Object.keys(metadata as Record<string, unknown>).join(\",\")\n : \"n/a\";\n console.log(\n `[Netra Debug] NetraLanggraph handleChainStart: runId=${runId} parentRunId=${parentRunId} nodeName=${nodeName} nodeType=${nodeType} runName=${runNameValue || \"n/a\"} metadataKeys=${metadataKeys}`,\n );\n }\n\n if (\n !nodeName ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const effectiveParentRunId = this.inferParentRunId(parentRunId);\n if (\n !parentRunId &&\n effectiveParentRunId &&\n effectiveParentRunId !== runId\n ) {\n this.inferredParents.set(runId, effectiveParentRunId);\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\n `[Netra Debug] NetraLanggraph inferred parent: runId=${runId} parentRunId=${effectiveParentRunId}`,\n );\n }\n }\n\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n\n // Create span parented to the correct node/workflow\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${nodeName}.task`, undefined, ctx);\n\n setChainInputAttributes(span, inputs, tags, metadata);\n\n this.spans.set(runId, span);\n this.pushRun(runId);\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n\n setChainOutputAttributes(span, outputs, tags);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleChainError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n span.recordException(err);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n if (process.env.NETRA_DEBUG_LOGS) {\n const llmId = llm.id?.[llm.id.length - 1] || \"llm\";\n console.log(\n `[Netra Debug] NetraLanggraph handleLLMStart: runId=${runId} parentRunId=${effectiveParentRunId} llmId=${llmId}`,\n );\n }\n this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId: effectiveParentRunId, // Store parent ID to link back\n });\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const response = (output?.generations?.[0]?.[0] as any)?.message;\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n setLlmRequestAttributes(\n span,\n attributes.metadata,\n attributes.prompts,\n attributes.extraParams,\n );\n setBaseResponseAttributes(span, response);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>,\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n let parsedInput: Record<string | number, any>;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n parsedInput = {};\n }\n\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n if (process.env.NETRA_DEBUG_LOGS) {\n const toolName = tool.id?.[tool.id.length - 1] || \"tool\";\n console.log(\n `[Netra Debug] NetraLanggraph handleToolStart: runId=${runId} parentRunId=${effectiveParentRunId} tool=${toolName}`,\n );\n }\n this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\n parentRunId: effectiveParentRunId,\n });\n }\n\n async handleToolEnd(\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const { input, metadata } = attributes;\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n setToolAttributes(span, toolName, input ?? {}, output, metadata, tags);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n}\n\nclass LanggraphStreamingWrapper implements AsyncIterable<unknown> {\n private iterable: any;\n private output: Record<string, any> = {};\n\n constructor(\n private rootSpan: Span,\n private rootContext: Context,\n ) {}\n\n async startStream(\n originalFunc: (...args: any[]) => any,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ) {\n this.iterable = await originalFunc.call(instance, input, config, ...rest);\n return this;\n }\n\n async *[Symbol.asyncIterator]() {\n const spanContext = trace.setSpan(this.rootContext, this.rootSpan);\n try {\n const iterator = await this.iterable[Symbol.asyncIterator]();\n while (true) {\n let result: any;\n await context.with(spanContext, async () => {\n result = await iterator.next();\n });\n if (result.done) break;\n const value = result?.value ?? {};\n this.output = { ...this.output, ...value };\n yield result;\n }\n this.rootSpan.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs: this.output }),\n );\n } catch (error) {\n this.rootSpan.recordException(error as Error);\n throw error;\n } finally {\n this.rootSpan.end();\n }\n }\n}\n\nexport class LanggraphWrapper {\n private spanName: string;\n\n constructor(private tracer: Tracer) {\n this.spanName = \"Langgraph.workflow\";\n }\n\n private getUpdatedConfig(\n config?: RunnableConfig,\n rootSpan?: Span,\n ): RunnableConfig {\n if (!rootSpan) return config || {};\n\n const callbackHandler = new NetraLanggraphCallbackHandler(\n this.tracer,\n rootSpan,\n );\n const callbacks = config?.callbacks;\n const normalizedCallbacks = callbacks\n ? Array.isArray(callbacks)\n ? callbacks\n : [callbacks]\n : [];\n const updatedConfig: RunnableConfig = {\n ...config,\n callbacks: [...normalizedCallbacks, callbackHandler],\n };\n return updatedConfig;\n }\n\n async invoke(\n originalFunc: AnyFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n const activeSpan = trace.getSpan(context.active());\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`[Netra Debug] LangGraph invoke start. Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n }\n\n // Start metadata spanning for the workflow\n // We use context.active() to parent to the current active span (e.g. request handler)\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active()\n );\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`[Netra Debug] LangGraph span created. New TraceId: ${span.spanContext().traceId}, SpanId: ${span.spanContext().spanId}`);\n }\n\n // Set the active flag to prevent nested instrumentation (e.g., when invoke calls stream internally)\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n\n return context.with(ctxWithFlag, async () => {\n if (process.env.NETRA_DEBUG_LOGS) {\n const innerSpan = trace.getSpan(context.active());\n console.log(`[Netra Debug] Inside LangGraph context. Active TraceId: ${innerSpan?.spanContext().traceId}, SpanId: ${innerSpan?.spanContext().spanId}`);\n }\n try {\n setGraphInputAttributes(span, input);\n\n // Pass the workflow span as the root for the callback handler\n const updatedConfig = this.getUpdatedConfig(config, span);\n\n const output = await originalFunc.call(\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n\n setGraphOutputAttributes(span, output);\n\n return output;\n } catch (e) {\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n });\n }\n\n async stream(\n originalFunc: AsyncIterableFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"[Netra Debug] LangGraph stream skipped (inside instrumented call)\");\n }\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"[Netra Debug] LangGraph stream starting instrumentation\");\n }\n\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active(),\n );\n setGraphInputAttributes(span, input);\n const updatedConfig = this.getUpdatedConfig(config, span);\n try {\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n const streamingWrapper = new LanggraphStreamingWrapper(span, ctxWithFlag);\n return streamingWrapper.startStream(\n originalFunc,\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n }\n }\n}\n","import { RunnableConfig } from \"@langchain/core/runnables\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { __version__ } from \"./version\";\nimport { LanggraphWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.langchain\";\nconst INSTRUMENTS = [\"langgraph >= 1.1.1\"];\n\nlet isInstrumented = false;\nlet LanggraphClass: any = null;\nconst originalMethods: Map<string, Function | object> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Find a module in Node's require cache by name pattern.\n * This allows us to patch the same module instance the app is using.\n */\nfunction findModuleInCache(moduleName: string): any {\n // Try require.cache first (CommonJS)\n if (typeof require !== 'undefined' && require.cache) {\n const cache = require.cache;\n for (const key of Object.keys(cache)) {\n // Match the module name in the path, but exclude our own SDK's copy\n if (key.includes(moduleName.replace(/\\//g, '/')) && !key.includes('netra-sdk')) {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Found module in require.cache: ${key}`);\n }\n return cache[key]?.exports;\n }\n }\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Module ${moduleName} not found in require.cache. Cache keys containing 'langgraph':`,\n Object.keys(cache).filter(k => k.includes('langgraph')));\n }\n }\n return null;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n // First, try to find the module in require.cache (already loaded by the app)\n // This ensures we patch the same module instance the app is using\n let langgraphModule = findModuleInCache('@langchain/langgraph');\n\n if (langgraphModule) {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"Found @langchain/langgraph in require.cache (using app's module instance)\");\n }\n } else {\n // Fallback to dynamic import if not in cache\n langgraphModule = await import(\"@langchain/langgraph\");\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"Loaded @langchain/langgraph via dynamic import\");\n }\n }\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"LangGraph Module Exports:\", Object.keys(langgraphModule));\n }\n LanggraphClass = langgraphModule.CompiledStateGraph ?? langgraphModule.StateGraph;\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"Resolved LanggraphClass:\", !!LanggraphClass);\n console.log(\"LanggraphClass name:\", LanggraphClass?.name);\n console.log(\"LanggraphClass.prototype keys:\", LanggraphClass?.prototype ? Object.getOwnPropertyNames(LanggraphClass.prototype) : \"no prototype\");\n console.log(\"Has invoke on prototype:\", !!LanggraphClass?.prototype?.invoke);\n console.log(\"Has stream on prototype:\", !!LanggraphClass?.prototype?.stream);\n\n // Check prototype chain to find where invoke is defined\n console.log(\"Checking prototype chain for invoke location:\");\n let proto = LanggraphClass?.prototype;\n while (proto) {\n const hasOwn = Object.getOwnPropertyNames(proto).includes('invoke');\n console.log(` ${proto.constructor?.name}: hasOwnProperty('invoke')=${hasOwn}`);\n if (hasOwn) {\n console.log(` -> invoke is defined on: ${proto.constructor?.name}`);\n break;\n }\n proto = Object.getPrototypeOf(proto);\n }\n }\n return LanggraphClass;\n } catch (e) {\n console.error(\"Failed to resolve LangGraph:\", e);\n return null;\n }\n}\n\nexport class NetraLanggraphInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraLanggraphInstrumentor> {\n if (isInstrumented) {\n console.warn(\"Langgraph is already instrumented\");\n return this;\n }\n\n const Langgraph = await resolveLanggraph();\n if (!Langgraph) {\n if (process.env.NETRA_DEBUG_LOGS) console.warn(\"LangGraph class not found, skipping instrumentation\");\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentInvoke(Langgraph);\n this._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n console.warn(\"LangGraph is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (Langgraph) {\n this._uninstrumentInvoke(Langgraph);\n this._uninstrumentStream(Langgraph);\n }\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n private _instrumentInvoke(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the invoke method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('invoke')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.invoke) {\n console.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Found invoke on prototype: ${targetProto.constructor?.name}`);\n }\n\n const originalInvoke = targetProto.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.invoke.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n const patchedInvoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"[Netra Debug] LangGraph invoke intercepted!\");\n }\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\n };\n // Add marker to identify patched method\n (patchedInvoke as any).__netra_patched = true;\n targetProto.invoke = patchedInvoke;\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Successfully instrumented LangGraph invoke method on ${targetProto.constructor?.name}`);\n console.log(`Patched Pregel class identity:`, targetProto.constructor);\n }\n } catch (error) {\n console.error(`Failed to instrument langgraph invoke: ${error}`);\n }\n }\n\n private _instrumentStream(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the stream method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('stream')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.stream) {\n console.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Found stream on prototype: ${targetProto.constructor?.name}`);\n }\n\n const originalStream = targetProto.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.stream.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n targetProto.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"[Netra Debug] LangGraph stream intercepted!\");\n }\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\n };\n\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(`Successfully instrumented LangGraph stream method on ${targetProto.constructor?.name}`);\n }\n } catch (error) {\n console.error(`Failed to instrument langgraph stream: ${error}`);\n }\n }\n\n private _uninstrumentInvoke(Langgraph: any): void {\n try {\n const originalInvoke = originalMethods.get(\"langgraph.graph.invoke\");\n const targetProto = originalMethods.get(\"langgraph.graph.invoke.proto\") || Langgraph?.prototype;\n if (originalInvoke && targetProto?.invoke) {\n targetProto.invoke = originalInvoke;\n }\n } catch (error) {\n console.error(`Failed to uninstrument langgraph invoke: ${error}`);\n }\n return;\n }\n\n private _uninstrumentStream(Langgraph: any): void {\n try {\n const originalStream = originalMethods.get(\"langgraph.graph.stream\");\n const targetProto = originalMethods.get(\"langgraph.graph.stream.proto\") || Langgraph?.prototype;\n if (originalStream && targetProto?.stream) {\n targetProto.stream = originalStream;\n }\n } catch (error) {\n console.error(`Failed to uninstrument langgraph stream: ${error}`);\n }\n return;\n }\n}\n\nexport const langgraphInstrumentor = new NetraLanggraphInstrumentor();\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for MistralAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","/**\n * MistralAI-specific utility functions for instrumentation.\n *\n * This file extends the shared instrumentation utilities with Mistral-only\n * fields while keeping attribute naming consistent across providers.\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport {\n modelAsDict,\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Re-export common utilities for convenience\nexport { modelAsDict, shouldSuppressInstrumentation };\n\n/**\n * Set request attributes on span for MistralAI.\n * Includes MistralAI-specific attributes.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n // Set shared/common attributes first\n setBaseRequestAttributes(span, kwargs, requestType, \"mistralai\");\n\n // MistralAI-specific: Agent ID (agents API)\n if (kwargs.agentId) {\n span.setAttribute(\"gen_ai.agent.id\", String(kwargs.agentId));\n span.setAttribute(\"llm.agent.id\", String(kwargs.agentId));\n }\n\n // MistralAI-specific: Safe prompt\n if (kwargs.safePrompt !== undefined) {\n span.setAttribute(\"gen_ai.mistral.safe_prompt\", Boolean(kwargs.safePrompt));\n }\n\n // MistralAI-specific: Random seed\n if (kwargs.randomSeed !== undefined && kwargs.randomSeed !== null) {\n span.setAttribute(\"gen_ai.mistral.random_seed\", Number(kwargs.randomSeed));\n }\n\n // MistralAI FIM-specific: prompt and suffix\n if (kwargs.prompt !== undefined) {\n span.setAttribute(\"llm.request.has_prompt\", true);\n }\n if (kwargs.suffix !== undefined && kwargs.suffix !== null) {\n span.setAttribute(\"llm.request.has_suffix\", true);\n }\n}\n\n/**\n * Set response attributes on span for MistralAI\n * Uses the shared response attributes (supports snake_case + camelCase).\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n // Use common response attributes - handles both snake_case and camelCase\n setBaseResponseAttributes(span, response);\n}\n","/**\n * Wrapper functions for MistralAI instrumentation\n */\n\nimport {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { isPromise } from \"../utils\";\nimport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\n// Span names\nconst CHAT_SPAN_NAME = \"mistralai.chat\";\nconst EMBEDDING_SPAN_NAME = \"mistralai.embedding\";\nconst FIM_SPAN_NAME = \"mistralai.fim\";\nconst AGENTS_SPAN_NAME = \"mistralai.agents\";\n// Align with OpenAI/Groq: streaming uses same span name\nconst CHAT_STREAM_SPAN_NAME = CHAT_SPAN_NAME;\nconst FIM_STREAM_SPAN_NAME = FIM_SPAN_NAME;\nconst AGENTS_STREAM_SPAN_NAME = AGENTS_SPAN_NAME;\n\ntype MistralRequestType = \"chat\" | \"embedding\" | \"fim\" | \"agent\";\n\nfunction mistralWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(value));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n console.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(response));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n console.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nfunction mistralStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.request.stream\": true,\n },\n },\n currentContext\n );\n\n try {\n // Force stream=true for attribution\n setRequestAttributes(span, { ...kwargs, stream: true }, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n if (\n stream &&\n typeof stream === \"object\" &&\n Symbol.asyncIterator in (stream as any)\n ) {\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n }\n return new StreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n console.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n if (\n response &&\n typeof response === \"object\" &&\n Symbol.asyncIterator in (response as any)\n ) {\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n console.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrapper factory for chat completions\n */\nexport const chatWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for chat stream\n */\nexport const chatStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, CHAT_STREAM_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for embeddings\n */\nexport const embeddingsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\n/**\n * Wrapper factory for FIM completions\n */\nexport const fimWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, FIM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for FIM stream\n */\nexport const fimStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, FIM_STREAM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for agents completions\n */\nexport const agentsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, AGENTS_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper factory for agents stream\n */\nexport const agentsStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, AGENTS_STREAM_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper for streaming responses when the SDK returns a sync Iterable/Iterator.\n * (Matches the newer OpenAI/Groq wrapper behavior.)\n */\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n\n constructor(\n private span: Span,\n private response: unknown,\n private startTime: number,\n private requestKwargs: Record<string, unknown>\n ) {}\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) throw new Error(\"Response is not an iterable\");\n\n if (typeof (this.response as any)[Symbol.iterator] === \"function\") {\n this.iterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) throw new Error(\"Iterator not initialized\");\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n\n/**\n * Async wrapper for streaming responses (AsyncIterable from MistralAI SDK)\n */\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private span: Span;\n private response: unknown;\n private iterator: AsyncIterator<unknown> | null = null;\n private startTime: number;\n private requestKwargs: Record<string, unknown>;\n private completeResponse: Record<string, unknown>;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>\n ) {\n this.span = span;\n this.response = response;\n this.startTime = startTime;\n this.requestKwargs = requestKwargs;\n this.completeResponse = { choices: [], model: \"\" };\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n // Initialize the iterator on first call\n if (!this.iterator) {\n // Check if response is an AsyncIterable and get the iterator\n if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.asyncIterator in this.response\n ) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.iterator in (this.response as any)\n ) {\n // Handle sync iterables\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n // Already an iterator\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n","/**\n * Custom MistralAI instrumentor for Netra SDK\n *\n * Note: '@mistralai/mistralai' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { __version__ } from \"./version\";\nimport {\n agentsStreamWrapper,\n agentsWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n} from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.mistralai\";\nconst INSTRUMENTS = [\"@mistralai/mistralai >= 1.0.0\"];\n\n// Store original methods for uninstrumentation\nconst originalMethods: Map<string, Function> = new Map();\n\n// Track instrumentation state\nlet isInstrumented = false;\n\n// Cache the resolved Mistral class\nlet MistralClass: any = null;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\ntype MistralResourceName = \"chat\" | \"embeddings\" | \"fim\" | \"agents\";\n\n/**\n * Dynamically resolve the Mistral module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveMistralAsync(): Promise<any> {\n if (MistralClass) return MistralClass;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - @mistralai/mistralai is an optional peer dependency\n const mistralModule = await import(\"@mistralai/mistralai\");\n MistralClass =\n mistralModule.Mistral || mistralModule.default || mistralModule;\n return MistralClass;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveMistralAsync() first to populate cache.\n */\nfunction resolveMistral(): any {\n return MistralClass;\n}\n\n/**\n * Custom MistralAI instrumentor for Netra SDK\n */\nexport class NetraMistralAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n private resourceCtors: Partial<Record<MistralResourceName, any>> = {};\n\n constructor() {\n // Initialize without tracer - will be set during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument MistralAI client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraMistralAIInstrumentor> {\n if (isInstrumented) {\n console.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n // Resolve Mistral from application context using dynamic import\n const Mistral = await resolveMistralAsync();\n if (!Mistral) {\n // @mistralai/mistralai package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n // Use provided tracer provider or fall back to global\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n // Instrument client methods. Mark instrumented only if we actually patched anything.\n const patchedChat = this._instrumentChat(Mistral);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral);\n const patchedFIM = this._instrumentFIM(Mistral);\n const patchedAgents = this._instrumentAgents(Mistral);\n const didPatch =\n patchedChat || patchedEmbeddings || patchedFIM || patchedAgents;\n\n if (!didPatch) {\n console.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument MistralAI client methods (sync version - for backwards compatibility)\n * Note: This uses a cached Mistral class. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraMistralAIInstrumentor {\n if (isInstrumented) {\n console.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n // Try to get cached Mistral class (must have called instrumentAsync first)\n const Mistral = resolveMistral();\n if (!Mistral) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n console.error(\"Failed to instrument MistralAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n // Use provided tracer provider or fall back to global\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n // Instrument client methods. Mark instrumented only if we actually patched anything.\n const patchedChat = this._instrumentChat(Mistral);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral);\n const patchedFIM = this._instrumentFIM(Mistral);\n const patchedAgents = this._instrumentAgents(Mistral);\n const didPatch =\n patchedChat || patchedEmbeddings || patchedFIM || patchedAgents;\n\n if (!didPatch) {\n console.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument MistralAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n console.warn(\"MistralAI is not instrumented\");\n return;\n }\n\n const Mistral = resolveMistral();\n if (Mistral) {\n this._uninstrumentChat(Mistral);\n this._uninstrumentEmbeddings(Mistral);\n this._uninstrumentFIM(Mistral);\n this._uninstrumentAgents(Mistral);\n }\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n /**\n * Check if MistralAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Resolve public resource constructors from the exported Mistral client.\n * This avoids relying on internal \"@mistralai/mistralai/sdk/*\" paths.\n *\n * We create a temporary client instance purely for discovery; it should not\n * make network calls.\n */\n private _ensureResourceCtors(Mistral: any): void {\n if (\n this.resourceCtors.chat &&\n this.resourceCtors.embeddings &&\n this.resourceCtors.fim &&\n this.resourceCtors.agents\n ) {\n return;\n }\n\n // Some SDK versions require an apiKey at construction time.\n // Use a dummy if none is provided; this is only for discovering constructors.\n const apiKey = process.env.MISTRAL_API_KEY ?? \"netra_dummy_api_key\";\n\n let client: any;\n try {\n client = new Mistral({ apiKey });\n } catch {\n // Fallback for alternate ctor signatures\n client = new Mistral(apiKey);\n }\n\n for (const name of [\"chat\", \"embeddings\", \"fim\", \"agents\"] as const) {\n const res = client?.[name];\n if (res && res.constructor) {\n this.resourceCtors[name] = res.constructor;\n }\n }\n }\n\n private _getCtor(Mistral: any, name: MistralResourceName): any | null {\n this._ensureResourceCtors(Mistral);\n return this.resourceCtors[name] ?? null;\n }\n\n private _instrumentChat(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n let didPatch = false;\n\n if (ChatClass?.prototype?.complete) {\n const originalComplete = ChatClass.prototype.complete;\n originalMethods.set(\"chat.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n ChatClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (ChatClass?.prototype?.stream) {\n const originalStream = ChatClass.prototype.stream;\n originalMethods.set(\"chat.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = chatStreamWrapper(tracer);\n\n ChatClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n console.error(\"Failed to instrument MistralAI chat:\", error);\n return false;\n }\n }\n\n private _instrumentEmbeddings(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n let didPatch = false;\n\n if (EmbeddingsClass?.prototype?.create) {\n const originalCreate = EmbeddingsClass.prototype.create;\n originalMethods.set(\"embeddings.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = embeddingsWrapper(tracer);\n\n EmbeddingsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n console.error(\"Failed to instrument MistralAI embeddings:\", error);\n return false;\n }\n }\n\n private _instrumentFIM(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n let didPatch = false;\n\n if (FimClass?.prototype?.complete) {\n const originalComplete = FimClass.prototype.complete;\n originalMethods.set(\"fim.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = fimWrapper(tracer);\n\n FimClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (FimClass?.prototype?.stream) {\n const originalStream = FimClass.prototype.stream;\n originalMethods.set(\"fim.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = fimStreamWrapper(tracer);\n\n FimClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n console.error(\"Failed to instrument MistralAI FIM:\", error);\n return false;\n }\n }\n\n private _instrumentAgents(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n let didPatch = false;\n\n if (AgentsClass?.prototype?.complete) {\n const originalComplete = AgentsClass.prototype.complete;\n originalMethods.set(\"agents.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = agentsWrapper(tracer);\n\n AgentsClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (AgentsClass?.prototype?.stream) {\n const originalStream = AgentsClass.prototype.stream;\n originalMethods.set(\"agents.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = agentsStreamWrapper(tracer);\n\n AgentsClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n console.error(\"Failed to instrument MistralAI agents:\", error);\n return false;\n }\n }\n\n private _uninstrumentChat(Mistral: any): void {\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n\n const originalComplete = originalMethods.get(\"chat.complete\");\n if (originalComplete && ChatClass?.prototype) {\n ChatClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"chat.stream\");\n if (originalStream && ChatClass?.prototype) {\n ChatClass.prototype.stream = originalStream;\n }\n } catch (error) {\n console.error(`Failed to uninstrument MistralAI chat: ${error}`);\n }\n }\n\n private _uninstrumentEmbeddings(Mistral: any): void {\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n\n const originalCreate = originalMethods.get(\"embeddings.create\");\n if (originalCreate && EmbeddingsClass?.prototype) {\n EmbeddingsClass.prototype.create = originalCreate;\n }\n } catch (error) {\n console.error(`Failed to uninstrument MistralAI embeddings: ${error}`);\n }\n }\n\n private _uninstrumentFIM(Mistral: any): void {\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n\n const originalComplete = originalMethods.get(\"fim.complete\");\n if (originalComplete && FimClass?.prototype) {\n FimClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"fim.stream\");\n if (originalStream && FimClass?.prototype) {\n FimClass.prototype.stream = originalStream;\n }\n } catch (error) {\n console.error(`Failed to uninstrument MistralAI FIM: ${error}`);\n }\n }\n\n private _uninstrumentAgents(Mistral: any): void {\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n\n const originalComplete = originalMethods.get(\"agents.complete\");\n if (originalComplete && AgentsClass?.prototype) {\n AgentsClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"agents.stream\");\n if (originalStream && AgentsClass?.prototype) {\n AgentsClass.prototype.stream = originalStream;\n }\n } catch (error) {\n console.error(`Failed to uninstrument MistralAI agents: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const mistralAIInstrumentor = new NetraMistralAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport {\n agentsStreamWrapper,\n agentsWrapper,\n AsyncStreamingWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\n// Re-export utilities\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for OpenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","/**\n * Utility functions for OpenAI instrumentation\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n\n setBaseRequestAttributes(span, kwargs, requestType, \"openai\");\n\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n console.log(\"Span is not recording\");\n return;\n }\n\n setBaseResponseAttributes(span, response);\n}\n","import {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport {\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype OpenAIRequestType = \"chat\" | \"embedding\" | \"response\";\n\nconst CHAT_SPAN_NAME = \"openai.chat\";\nconst EMBEDDING_SPAN_NAME = \"openai.embedding\";\nconst RESPONSE_SPAN_NAME = \"openai.response\";\nconst STREAM_ENABLED_REQUESTS: OpenAIRequestType[] = [\"chat\", \"response\"];\n\nfunction openAIWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: OpenAIRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n const isStreaming = kwargs.stream === true;\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext\n );\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n console.error(\"netra.instrumentation.openai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new StreamingWrapper(span, response, startTime, kwargs);\n }\n } catch (error) {\n console.error(\"netra.instrumentation.openai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n console.error(\"netra.instrumentation.openai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n console.error(\"netra.instrumentation.openai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\n/* Specific wrappers for different requests */\nexport const chatWrapper = (tracer: Tracer) =>\n openAIWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer) =>\n openAIWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\nexport const responsesWrapper = (tracer: Tracer) =>\n openAIWrapper(tracer, RESPONSE_SPAN_NAME, \"response\");\n\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, any> = { choices: [], model: \"\" };\n\n constructor(\n private span: Span,\n private response: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {}\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (!this.iterator) {\n if (typeof this.response[Symbol.iterator] === \"function\") {\n this.iterator = this.response[Symbol.iterator]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) {\n throw new Error(\"Iterator not initialized\");\n }\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict =\n typeof chunk?.toDict === \"function\" ? chunk.toDict() : chunk;\n const choices = this.completeResponse.choices as any[];\n\n if (chunkDict.model) this.completeResponse.model = chunkDict.model;\n\n const chunkChoices = chunkDict.choices || [];\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = choice.delta || {};\n if (delta?.content) {\n if (!choices[index].message) {\n choices[index].message = { role: \"assistant\", content: \"\" };\n }\n choices[index].message.content += String(delta.content);\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n if (chunkDict.response?.status === \"completed\") {\n const outputs = chunkDict.response.output || [];\n outputs.forEach((output: any) => {\n const content = output.content || [];\n content.forEach((item: any) => {\n choices.push({\n message: { role: \"assistant\", content: item.text || \"\" },\n });\n });\n });\n this.completeResponse.usage = chunkDict.response.usage || {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const duration = (Date.now() - this.startTime) / 1000;\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n\n constructor(\n private span: Span,\n private response: any,\n private startTime: number,\n private requestKwargs: Record<string, any>\n ) {}\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (Symbol.iterator in (this.response as any)) {\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n\n // Completion API\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n // Response API\n if ((chunkDict.response as any)?.status === \"completed\") {\n const response = chunkDict.response as Record<string, unknown>;\n const responseOutput = (response.output || []) as Array<\n Record<string, unknown>\n >;\n responseOutput.forEach((output: any) => {\n const content = output.content as Array<Record<string, unknown>>;\n if (content) {\n for (const contentItem of content) {\n const assistantText = contentItem.text || \"\";\n // Append to choices array instead of replacing\n (\n this.completeResponse.choices as Array<Record<string, unknown>>\n ).push({\n message: { role: \"assistant\", content: assistantText },\n });\n }\n }\n const usage = response.usage || {};\n this.completeResponse.usage = usage;\n });\n }\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","/**\n * Custom OpenAI instrumentor for Netra SDK\n *\n * Note: 'openai' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper, embeddingsWrapper, responsesWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.openai\";\nconst INSTRUMENTS = [\"openai >= 4.0.0\"];\n\n// Store original methods for uninstrumentation\nconst originalMethods: Map<string, Function> = new Map();\n\n// Track instrumentation state\nlet isInstrumented = false;\n\n// Cache the resolved OpenAI class\nlet OpenAIClass: any = null;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Dynamically resolve the OpenAI module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveOpenAIAsync(): Promise<any> {\n if (OpenAIClass) return OpenAIClass;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - openai is an optional peer dependency\n const openaiModule = await import(\"openai\");\n OpenAIClass = openaiModule.OpenAI || openaiModule.default || openaiModule;\n return OpenAIClass;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveOpenAIAsync() first to populate cache.\n */\nfunction resolveOpenAI(): any {\n return OpenAIClass;\n}\n\n/**\n * Custom OpenAI instrumentor for Netra SDK\n */\nexport class NetraOpenAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n // Tracer is initialized lazily during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n /**\n * Instrument OpenAI client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraOpenAIInstrumentor> {\n if (isInstrumented) {\n console.warn(\"OpenAI is already instrumented\");\n return this;\n }\n\n // Resolve OpenAI from application context using dynamic import\n const OpenAI = await resolveOpenAIAsync();\n if (!OpenAI) {\n // openai package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(OpenAI);\n this._instrumentEmbeddings(OpenAI);\n this._instrumentResponses(OpenAI);\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument OpenAI client methods (sync version - for backwards compatibility)\n * Note: This uses a cached OpenAI class. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraOpenAIInstrumentor {\n if (isInstrumented) {\n console.warn(\"OpenAI is already instrumented\");\n return this;\n }\n\n // Try to get cached OpenAI class (must have called instrumentAsync first)\n const OpenAI = resolveOpenAI();\n if (!OpenAI) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n console.error(\"Failed to instrument OpenAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(OpenAI);\n this._instrumentEmbeddings(OpenAI);\n this._instrumentResponses(OpenAI);\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument OpenAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n console.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const OpenAI = resolveOpenAI();\n if (OpenAI) {\n this._uninstrumentChatCompletions(OpenAI);\n this._uninstrumentEmbeddings(OpenAI);\n this._uninstrumentResponses(OpenAI);\n }\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n /**\n * Check if OpenAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentChatCompletions(OpenAI: any): void {\n if (!this.tracer) return;\n\n try {\n const CompletionsClass: any = OpenAI.Chat?.Completions;\n if (!CompletionsClass?.prototype?.create) {\n console.error(\n \"Failed to find OpenAI chat completions class to instrument\"\n );\n return;\n }\n const originalCreate = CompletionsClass.prototype.create;\n originalMethods.set(\"chat.completions.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n CompletionsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper((...a: unknown[]) => original(...a), this, args, kwargs);\n };\n } catch (error) {\n console.error(`Failed to instrument chat completions: ${error}`);\n }\n }\n\n private _instrumentEmbeddings(OpenAI: any): void {\n if (!this.tracer) return;\n\n try {\n const EmbeddingsClass: any = OpenAI.Embeddings;\n if (!EmbeddingsClass?.prototype?.create) {\n console.error(\"Failed to find OpenAI embeddings class to instrument\");\n return;\n }\n\n const originalCreate = EmbeddingsClass.prototype.create;\n originalMethods.set(\"embeddings.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = embeddingsWrapper(tracer);\n\n EmbeddingsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper((...a: unknown[]) => original(...a), this, args, kwargs);\n };\n } catch (error) {\n console.error(`Failed to instrument embeddings: ${error}`);\n }\n }\n\n private _instrumentResponses(OpenAI: any): void {\n if (!this.tracer) return;\n\n try {\n const ResponsesClass: any = OpenAI.Responses;\n if (!ResponsesClass?.prototype?.create) {\n // Responses API may not exist in older versions - skip silently\n return;\n }\n\n const originalCreate = ResponsesClass.prototype.create;\n originalMethods.set(\"responses.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = responsesWrapper(tracer);\n\n ResponsesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper((...a: unknown[]) => original(...a), this, args, kwargs);\n };\n } catch (error) {\n console.error(`Failed to instrument responses: ${error}`);\n }\n }\n\n private _uninstrumentChatCompletions(OpenAI: any): void {\n try {\n const CompletionsClass = OpenAI.Chat?.Completions;\n const originalCreate = originalMethods.get(\"chat.completions.create\");\n\n if (originalCreate && CompletionsClass?.prototype?.create) {\n CompletionsClass.prototype.create =\n originalCreate as typeof CompletionsClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument chat completions: ${error}`);\n }\n return;\n }\n\n private _uninstrumentEmbeddings(OpenAI: any): void {\n try {\n const EmbeddingsClass = OpenAI.Embeddings;\n const originalCreate = originalMethods.get(\"embeddings.create\");\n\n if (originalCreate && EmbeddingsClass?.prototype?.create) {\n EmbeddingsClass.prototype.create =\n originalCreate as typeof EmbeddingsClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument embeddings: ${error}`);\n }\n }\n\n private _uninstrumentResponses(OpenAI: any): void {\n try {\n const ResponsesClass = OpenAI.Responses;\n const originalCreate = originalMethods.get(\"responses.create\");\n\n if (originalCreate && ResponsesClass?.prototype?.create) {\n ResponsesClass.prototype.create =\n originalCreate as typeof ResponsesClass.prototype.create;\n }\n } catch (error) {\n console.error(`Failed to uninstrument responses: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const openAIInstrumentor = new NetraOpenAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport {\n AsyncStreamingWrapper,\n chatWrapper,\n embeddingsWrapper,\n responsesWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\n// Re-export utilities\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","\nimport { Span } from \"@opentelemetry/api\";\n\nexport function extractQuery(query: string | { query: string; parameters?: any[] }): {\n sql: string;\n parameters?: any[];\n} {\n if (typeof query === \"string\") {\n return { sql: query };\n }\n if (query && typeof query === \"object\" && \"query\" in query) {\n return {\n sql: String(query.query),\n parameters: Array.isArray(query.parameters) ? query.parameters : undefined,\n };\n }\n return { sql: String(query) };\n}\nexport function sanitizeQuery(sql: string, maxLength: number = 5000): string {\n if (sql.length <= maxLength) {\n return sql;\n }\n return sql.substring(0, maxLength) + \"...\";\n}\n\nexport function setQueryAttributes(\n span: Span,\n sql: string,\n parameters?: any[],\n operation?: string\n): void {\n span.setAttribute(\"db.system\", \"typeorm\");\n span.setAttribute(\"db.type\", \"sql\");\n \n if (operation) {\n span.setAttribute(\"db.operation\", operation);\n }\n\n if (!operation) {\n const upperSql = sql.trim().toUpperCase();\n if (upperSql.startsWith(\"SELECT\")) {\n span.setAttribute(\"db.operation\", \"SELECT\");\n } else if (upperSql.startsWith(\"INSERT\")) {\n span.setAttribute(\"db.operation\", \"INSERT\");\n } else if (upperSql.startsWith(\"UPDATE\")) {\n span.setAttribute(\"db.operation\", \"UPDATE\");\n } else if (upperSql.startsWith(\"DELETE\")) {\n span.setAttribute(\"db.operation\", \"DELETE\");\n } else if (upperSql.startsWith(\"CREATE\")) {\n span.setAttribute(\"db.operation\", \"CREATE\");\n } else if (upperSql.startsWith(\"DROP\")) {\n span.setAttribute(\"db.operation\", \"DROP\");\n } else if (upperSql.startsWith(\"ALTER\")) {\n span.setAttribute(\"db.operation\", \"ALTER\");\n }\n }\n\n span.setAttribute(\"db.statement\", sanitizeQuery(sql));\n\n if (parameters && parameters.length > 0) {\n try {\n span.setAttribute(\"db.statement.parameters\", JSON.stringify(parameters));\n } catch (e) {\n console.log(e);\n }\n }\n}\n\nexport function setResultAttributes(\n span: Span,\n result: any,\n rowCount?: number\n): void {\n if (rowCount !== undefined) {\n span.setAttribute(\"db.rows_affected\", rowCount);\n } else if (result !== undefined && result !== null) {\n if (Array.isArray(result)) {\n span.setAttribute(\"db.rows_affected\", result.length);\n } else if (typeof result === \"object\" && \"affected\" in result) {\n span.setAttribute(\"db.rows_affected\", Number(result.affected) || 0);\n } else if (typeof result === \"number\") {\n span.setAttribute(\"db.rows_affected\", result);\n }\n }\n}\n\nexport function extractDatabaseName(dataSource: any): string | undefined {\n if (!dataSource) return undefined;\n \n const options = dataSource.options || dataSource.connectionOptions;\n if (options) {\n if (options.database) return String(options.database);\n if (options.url) {\n try {\n const url = new URL(options.url);\n const dbName = url.pathname?.replace(/^\\//, \"\");\n if (dbName) return dbName;\n } catch(e) {\n console.log(e);\n }\n }\n }\n \n return undefined;\n}\n\n","import {\n Tracer,\n Span,\n SpanKind,\n SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport {\n extractQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nconst QUERY_SPAN_NAME = \"typeorm.query\";\nconst MANAGER_QUERY_SPAN_NAME = \"typeorm.manager.query\";\nconst REPOSITORY_QUERY_SPAN_NAME = \"typeorm.repository.query\";\n\ntype WrappedFunction = (...args: unknown[]) => unknown;\n\nexport function queryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const dbName = extractDatabaseName(instance);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function managerQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n MANAGER_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const manager = instance as any;\n const connection = manager.connection || manager.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function repositoryQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n REPOSITORY_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const repository = instance as any;\n const manager = repository.manager;\n const connection = manager?.connection || manager?.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n if (repository.metadata) {\n span.setAttribute(\"db.typeorm.entity\", repository.metadata.name);\n if (repository.metadata.tableName) {\n span.setAttribute(\"db.sql.table\", repository.metadata.tableName);\n }\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\n","export const __version__ = \"1.0.0\";\n\n","import {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\nimport { __version__ } from \"./version\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.typeorm\";\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nexport class NetraTypeORMInstrumentor {\n private tracer?: Tracer;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n }\n\n async instrument(options: InstrumentorOptions = {}): Promise<NetraTypeORMInstrumentor> {\n if (isInstrumented) {\n console.warn(\"TypeORM is already instrumented\");\n return this;\n }\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__) : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n console.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n await this._instrumentDataSource();\n await this._instrumentEntityManager();\n await this._instrumentRepository();\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n console.warn(\"TypeORM is not instrumented\");\n return;\n }\n this._uninstrumentDataSource().catch(() => {\n });\n this._uninstrumentEntityManager().catch(() => {\n });\n this._uninstrumentRepository().catch(() => {\n });\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private async _instrumentDataSource(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = await import(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n if (!DataSource) {\n if (this.tracerProvider) {\n console.debug(\"TypeORM DataSource not found, skipping instrumentation\");\n }\n return;\n }\n\n if (DataSource.prototype?.query) {\n const originalQuery = DataSource.prototype.query;\n originalMethods.set(\"DataSource.prototype.query\", originalQuery);\n const tracer = this.tracer;\n const wrapper = queryWrapper(tracer);\n DataSource.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n console.error(`Failed to instrument DataSource: ${error}`);\n }\n }\n\n private async _instrumentEntityManager(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = await import(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n if (!EntityManager) {\n if (this.tracerProvider) {\n console.debug(\"TypeORM EntityManager not found, skipping instrumentation\");\n }\n return;\n }\n if (EntityManager.prototype?.query) {\n const originalQuery = EntityManager.prototype.query;\n originalMethods.set(\"EntityManager.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = managerQueryWrapper(tracer);\n\n EntityManager.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n console.error(`Failed to instrument EntityManager: ${error}`);\n }\n }\n\n private async _instrumentRepository(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = await import(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n\n if (!Repository) {\n if (this.tracerProvider) {\n console.debug(\"TypeORM Repository not found, skipping instrumentation\");\n }\n return;\n }\n\n if (Repository.prototype?.query) {\n const originalQuery = Repository.prototype.query;\n originalMethods.set(\"Repository.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = repositoryQueryWrapper(tracer);\n\n Repository.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n console.error(`Failed to instrument Repository: ${error}`);\n }\n }\n\n private async _uninstrumentDataSource(): Promise<void> {\n try {\n const typeorm = await import(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n\n const originalQuery = originalMethods.get(\"DataSource.prototype.query\");\n if (originalQuery && DataSource?.prototype) {\n DataSource.prototype.query = originalQuery as any;\n }\n } catch (error) {\n console.error(`Failed to uninstrument DataSource: ${error}`);\n }\n }\n\n private async _uninstrumentEntityManager(): Promise<void> {\n try {\n const typeorm = await import(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n const originalQuery = originalMethods.get(\"EntityManager.prototype.query\");\n if (originalQuery && EntityManager?.prototype) {\n EntityManager.prototype.query = originalQuery as any;\n }\n } catch (error) {\n console.error(`Failed to uninstrument EntityManager: ${error}`);\n }\n }\n\n private async _uninstrumentRepository(): Promise<void> {\n try {\n const typeorm = await import(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n const originalQuery = originalMethods.get(\"Repository.prototype.query\");\n if (originalQuery && Repository?.prototype) {\n Repository.prototype.query = originalQuery as any;\n }\n } catch (error) {\n console.error(`Failed to uninstrument Repository: ${error}`);\n }\n }\n}\n\nexport const typeORMInstrumentor = new NetraTypeORMInstrumentor();\n\nexport {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\n\nexport {\n extractQuery,\n sanitizeQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n\n","import { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\n\nlet trialBlockedAt: number | null = null;\nconst blockedTraceIds = new Set<string>();\n\nexport function setTrialBlocked(blocked: boolean) {\n if (blocked) {\n if (!trialBlockedAt) {\n trialBlockedAt = Date.now();\n console.warn(\n `Trial/quota exhausted: blocking span export for ${Config.TRIAL_BLOCK_DURATION_SECONDS}s`,\n );\n }\n } else {\n trialBlockedAt = null;\n }\n}\n\nexport function isTrialBlocked(): boolean {\n if (trialBlockedAt === null) return false;\n\n const elapsed = (Date.now() - trialBlockedAt) / 1000;\n\n if (elapsed >= Config.TRIAL_BLOCK_DURATION_SECONDS) {\n trialBlockedAt = null;\n return false;\n }\n\n return true;\n}\n\nexport function addBlockedTraceId(traceId: string) {\n blockedTraceIds.add(traceId);\n}\n\nexport function isTraceIdBlocked(traceId: string): boolean {\n return blockedTraceIds.has(traceId);\n}\n\nexport function getTraceId(span: ReadableSpan): string {\n try {\n return span.spanContext().traceId;\n } catch {\n return \"\";\n }\n}\n","import { SpanExporter, ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { ExportResultCode } from \"@opentelemetry/core\";\n\nimport {\n addBlockedTraceId,\n getTraceId,\n isTraceIdBlocked,\n isTrialBlocked,\n} from \"./utils\";\n\nexport class FilteringSpanExporter implements SpanExporter {\n private exact = new Set<string>();\n private prefixes: string[] = [];\n private suffixes: string[] = [];\n\n // Persist blocked parents across export() calls\n private rememberedBlockedParentMap = new Map<string, any>();\n\n constructor(\n private readonly exporter: SpanExporter,\n patterns: string[],\n ) {\n for (const p of patterns) {\n if (!p) continue;\n\n if (p.endsWith(\"*\") && !p.startsWith(\"*\")) {\n this.prefixes.push(p.slice(0, -1));\n } else if (p.startsWith(\"*\") && !p.endsWith(\"*\")) {\n this.suffixes.push(p.slice(1));\n } else {\n this.exact.add(p);\n }\n }\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: { code: ExportResultCode }) => void,\n ): void {\n if (isTrialBlocked()) {\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId) addBlockedTraceId(traceId);\n }\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n const filtered: ReadableSpan[] = [];\n const blockedParentMap = new Map<string, any>();\n\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId && isTraceIdBlocked(traceId)) continue;\n\n const name = span.name;\n const globallyBlocked = this.isBlocked(name);\n const locallyBlocked =\n this.matchesLocalPatterns(span) || this.hasLocalBlockFlag(span);\n\n if (!globallyBlocked && !locallyBlocked) {\n filtered.push(span);\n continue;\n }\n\n // Span is blocked — remember its parent\n const spanId = span.spanContext().spanId;\n const parent = span.parentSpanContext;\n\n if (parent) {\n // current batch\n blockedParentMap.set(spanId, parent);\n\n // persist across export() calls\n this.rememberedBlockedParentMap.set(spanId, parent);\n }\n }\n\n // Merge remembered + current batch blocked parents\n const merged = new Map<string, any>();\n\n for (const [k, v] of this.rememberedBlockedParentMap) {\n merged.set(k, v);\n }\n\n for (const [k, v] of blockedParentMap) {\n merged.set(k, v);\n }\n\n if (merged.size > 0) {\n this.reparentBlockedChildren(filtered, merged);\n }\n\n if (filtered.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.exporter.export(filtered, resultCallback);\n }\n\n shutdown(): Promise<void> {\n return this.exporter.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.() || Promise.resolve();\n }\n\n // ---------- helpers ----------\n\n private isBlocked(name: string): boolean {\n if (this.exact.has(name)) return true;\n if (this.prefixes.some((p) => name.startsWith(p))) return true;\n if (this.suffixes.some((s) => name.endsWith(s))) return true;\n return false;\n }\n\n private matchesLocalPatterns(span: ReadableSpan): boolean {\n const patterns = span.attributes?.[\"netra.local_blocked_spans\"];\n if (!Array.isArray(patterns)) return false;\n\n return patterns.some((p) => {\n if (typeof p !== \"string\") return false;\n\n if (p.endsWith(\"*\")) return span.name.startsWith(p.slice(0, -1));\n if (p.startsWith(\"*\")) return span.name.endsWith(p.slice(1));\n return span.name === p;\n });\n }\n\n private hasLocalBlockFlag(span: ReadableSpan): boolean {\n return span.attributes?.[\"netra.local_blocked\"] === true;\n }\n\n private reparentBlockedChildren(\n spans: ReadableSpan[],\n blockedMap: Map<string, any>,\n ) {\n for (const span of spans) {\n let parent = span.parentSpanContext;\n const visited = new Set<string>();\n\n while (parent && blockedMap.has(parent.spanId)) {\n if (visited.has(parent.spanId)) break;\n visited.add(parent.spanId);\n parent = blockedMap.get(parent.spanId);\n }\n\n if (parent !== span.parentSpanContext) {\n (span as any)._parentSpanContext = parent;\n }\n }\n }\n}\n","import * as http from \"http\";\nimport * as https from \"https\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { JsonTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { isTrialBlocked, setTrialBlocked } from \"./utils\";\n\ninterface ExporterConfig {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport class TrialAwareOTLPExporter implements SpanExporter {\n private _url: string;\n private _headers: Record<string, string>;\n private _isShutdown = false;\n\n constructor(config: ExporterConfig) {\n this._url = config.url;\n this._headers = config.headers || {};\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this._isShutdown || isTrialBlocked()) {\n return resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n let data: Uint8Array | string;\n try {\n const serialized = JsonTraceSerializer.serializeRequest(spans);\n if (!serialized) throw new Error(\"Serialization failed\");\n data = serialized;\n } catch (err) {\n return resultCallback({\n code: ExportResultCode.FAILED,\n error: err instanceof Error ? err : new Error(\"Serialization failed\"),\n });\n }\n\n const url = new URL(this._url);\n const options: https.RequestOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.pathname,\n method: \"POST\",\n headers: {\n ...this._headers,\n host: url.host,\n \"Content-Type\": \"application/json\",\n \"Content-Length\":\n typeof data === \"string\" ? Buffer.byteLength(data) : data.byteLength,\n },\n };\n\n const lib = url.protocol === \"https:\" ? https : http;\n\n const req = lib.request(options, (res) => {\n let body = \"\";\n res.on(\"data\", (chunk) => (body += chunk));\n res.on(\"end\", () => {\n if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n } else {\n this.checkErrorBody(body, res.statusCode);\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error(`Status ${res.statusCode}`),\n });\n }\n });\n });\n\n req.on(\"error\", (err) =>\n resultCallback({ code: ExportResultCode.FAILED, error: err }),\n );\n req.write(data);\n req.end();\n }\n\n private checkErrorBody(bodyString: string, statusCode?: number) {\n try {\n const jsonBody = JSON.parse(bodyString);\n const errorCode = jsonBody?.error?.code || statusCode;\n const errorMessage = jsonBody?.error?.message || \"\";\n\n if (errorCode === 429 || errorMessage.includes(\"usage quota exceeded\")) {\n setTrialBlocked(true);\n }\n } catch (e) {\n if (statusCode === 429 || bodyString.includes(\"quota exceeded\")) {\n setTrialBlocked(true);\n }\n }\n }\n\n async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n async shutdown(): Promise<void> {\n this._isShutdown = true;\n return Promise.resolve();\n }\n}\n","import {\n context as otelContext,\n propagation,\n ROOT_CONTEXT,\n} from \"@opentelemetry/api\";\nimport type { Baggage, Context, Span } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\n\nexport const LOCAL_BLOCKED_SPANS_BAGGAGE_KEY = \"netra.local_blocked_spans\";\nexport const LOCAL_BLOCKED_SPANS_ATTR_KEY = \"netra.local_blocked_spans\";\n\n/* ---------------------------------- utils --------------------------------- */\n\nfunction decodePatterns(raw: string): string[] | null {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === \"string\")) {\n return parsed.filter(Boolean);\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nfunction matchesAnyPattern(name: string, patterns: readonly string[]): boolean {\n return patterns.some((p) => {\n if (!p) return false;\n if (p.endsWith(\"*\") && !p.startsWith(\"*\")) {\n return name.startsWith(p.slice(0, -1));\n }\n if (p.startsWith(\"*\") && !p.endsWith(\"*\")) {\n return name.endsWith(p.slice(1));\n }\n return name === p;\n });\n}\n\n/* ----------------------- context-based local blocking ----------------------- */\n\nexport async function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T> | T,\n): Promise<T> {\n const payload = JSON.stringify(patterns.filter(Boolean));\n const activeCtx = otelContext.active();\n\n // Always ensure baggage exists\n const baggage: Baggage =\n propagation.getBaggage(activeCtx) ??\n propagation.getBaggage(ROOT_CONTEXT) ??\n propagation.createBaggage();\n\n const nextBaggage = baggage.setEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY, {\n value: payload,\n });\n\n const nextCtx = propagation.setBaggage(activeCtx, nextBaggage);\n return otelContext.with(nextCtx, fn);\n}\n\n/* -------------------------- span processor (mark) --------------------------- */\n\nexport class LocalFilteringSpanProcessor implements SpanProcessor {\n onStart(span: Span, parentContext: Context): void {\n const bag = propagation.getBaggage(parentContext);\n const raw = bag?.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n if (!raw) return;\n\n const patterns = decodePatterns(raw);\n if (!patterns || patterns.length === 0) return;\n\n const name = (span as any).name as string | undefined;\n if (!name) return;\n\n // expose patterns for exporter\n span.setAttribute(LOCAL_BLOCKED_SPANS_ATTR_KEY, patterns);\n\n if (matchesAnyPattern(name, patterns)) {\n span.setAttribute(\"netra.local_blocked\", true);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n // no-op (exporter handles removal)\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Instrumentation setup for Netra SDK\n */\n\nimport { context, trace } from \"@opentelemetry/api\";\nimport {\n ConsoleSpanExporter,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { initialize, InitializeOptions } from \"@traceloop/node-server-sdk\";\nimport { createRequire } from \"module\";\nimport { Config, NetraInstruments } from \"../config\";\nimport {\n InstrumentationSpanProcessor,\n LlmTraceIdentifierSpanProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n} from \"../processors\";\nimport { anthropicInstrumentor } from \"./anthropic\";\nimport { googleGenerativeAIInstrumentor } from \"./google-genai\";\nimport { groqInstrumentor } from \"./groq\";\nimport { langgraphInstrumentor } from \"./langgraph\";\nimport { mistralAIInstrumentor } from \"./mistralai\";\nimport { openAIInstrumentor } from \"./openai\";\nimport { typeORMInstrumentor } from \"./typeorm\";\nimport { FilteringSpanExporter, TrialAwareOTLPExporter } from \"../exporters\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { LocalFilteringSpanProcessor } from \"../processors/localfiltering-span-processor\";\nimport { propagation } from \"@opentelemetry/api\";\nimport {\n CompositePropagator,\n W3CBaggagePropagator as BaggagePropagator,\n W3CTraceContextPropagator,\n} from \"@opentelemetry/core\";\n\n// Interface for TracerProvider with addSpanProcessor method\ninterface TracerProviderWithProcessors {\n addSpanProcessor(processor: SpanProcessor): void;\n}\n\n// Re-export shared utilities for use across instrumentations\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Promise that resolves when custom instrumentations are initialized.\n * Can be awaited after calling initInstrumentations() to ensure\n * all async instrumentations are complete.\n */\nexport let instrumentationsReady: Promise<void> = Promise.resolve();\n\npropagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [new W3CTraceContextPropagator(), new BaggagePropagator()],\n }),\n);\n\nfunction patchTraceloopLangchainCallbackHandler(): void {\n const applyPatch = (mod: any, sourceLabel: string) => {\n const Handler = mod?.TraceloopCallbackHandler;\n if (!Handler || Handler.__netra_patched) return;\n\n const wrapWithParentContext = (methodName: string) => {\n const original = Handler.prototype[methodName];\n if (typeof original !== \"function\") return;\n Handler.prototype[methodName] = function (...args: any[]) {\n const parentRunId = args[3];\n const parentSpan = parentRunId\n ? this?.spans?.get(parentRunId)?.span\n : undefined;\n const active = trace.getSpan(context.active());\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\n `[Netra Debug] Traceloop ${methodName}: runId=${args[2]} parentRunId=${parentRunId} parentSpan=${parentSpan ? \"yes\" : \"no\"} activeSpanId=${active?.spanContext().spanId}`,\n );\n }\n // Always bind the current active context (or explicit parent) for this callback.\n const ctx = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : context.active();\n return context.with(ctx, () => original.apply(this, args));\n };\n };\n\n wrapWithParentContext(\"handleChainStart\");\n wrapWithParentContext(\"handleLLMStart\");\n wrapWithParentContext(\"handleChatModelStart\");\n wrapWithParentContext(\"handleToolStart\");\n\n Handler.__netra_patched = true;\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\n `[Netra Debug] Patched TraceloopCallbackHandler for parent context (${sourceLabel}).`,\n );\n }\n };\n\n try {\n const mod = require(\"@traceloop/instrumentation-langchain\");\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\n `[Netra Debug] Loaded @traceloop/instrumentation-langchain via require from ${require.resolve(\"@traceloop/instrumentation-langchain\")}`,\n );\n }\n applyPatch(mod, \"require\");\n return;\n } catch (e) {\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\"[Netra Debug] require() for traceloop langchain failed, falling back to import().\");\n }\n }\n\n import(\"@traceloop/instrumentation-langchain\")\n .then((mod: any) => {\n applyPatch(mod, \"import\");\n })\n .catch(() => {\n // No-op: langchain instrumentation not installed or not in use\n });\n}\n\nfunction disableTraceloopLangchainCallbackHandler(): void {\n try {\n const callbackManagerModule = require(\"@langchain/core/callbacks/manager\");\n const CallbackManager = callbackManagerModule?.CallbackManager;\n if (!CallbackManager || (CallbackManager as any).__netra_disable_traceloop) {\n return;\n }\n const originalConfigureSync = (CallbackManager as any)._configureSync;\n if (typeof originalConfigureSync !== \"function\") return;\n\n (CallbackManager as any)._configureSync = function (\n inheritableHandlers: any,\n localHandlers: any,\n inheritableTags: any,\n localTags: any,\n inheritableMetadata: any,\n localMetadata: any,\n options?: any,\n ) {\n const filterHandlers = (handlers: any) => {\n if (!handlers) return handlers;\n if (Array.isArray(handlers)) {\n return handlers.filter(\n (h) => h?.name !== \"traceloop_callback_handler\",\n );\n }\n return handlers;\n };\n const filteredInheritable = filterHandlers(inheritableHandlers);\n const filteredLocal = filterHandlers(localHandlers);\n return originalConfigureSync.call(\n this,\n filteredInheritable,\n filteredLocal,\n inheritableTags,\n localTags,\n inheritableMetadata,\n localMetadata,\n options,\n );\n };\n (CallbackManager as any).__netra_disable_traceloop = true;\n if (process.env.NETRA_DEBUG_LOGS) {\n console.log(\n \"[Netra Debug] Disabled Traceloop LangChain callback injection.\",\n );\n }\n } catch {\n // no-op\n }\n}\n\nexport function initInstrumentations(\n config: Config,\n instruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): TracerProviderWithProcessors | null {\n // Map Netra instruments to Traceloop instrument modules\n const instrumentModules: InitializeOptions[\"instrumentModules\"] = {};\n\n // Track whether to use custom instrumentors\n const customInstrumentModules: Record<string, boolean> = {\n openai: false,\n groq: false,\n mistral: false,\n langgraph: false,\n googleGenAI: false,\n anthropic: false,\n };\n\n if (!instruments || instruments.size === 0) {\n // Enable all by default\n customInstrumentModules.openai = true;\n customInstrumentModules.groq = true;\n customInstrumentModules.mistral = true;\n customInstrumentModules.langgraph = true;\n customInstrumentModules.googleGenAI = true;\n customInstrumentModules.anthropic = true;\n } else if (instruments.size) {\n // When specific instruments are provided, explicitly disable all Traceloop modules\n // to prevent default \"enable all\" behavior\n instrumentModules.google_vertexai = false;\n instrumentModules.langchain = false;\n instrumentModules.llamaIndex = false;\n instrumentModules.pinecone = false;\n instrumentModules.qdrant = false;\n instrumentModules.chromadb = false;\n instrumentModules.together = false;\n\n // Enable specific instruments\n if (instruments.has(NetraInstruments.OPENAI)) {\n customInstrumentModules.openai = true;\n }\n if (instruments.has(NetraInstruments.MISTRAL)) {\n customInstrumentModules.mistral = true;\n }\n if (instruments.has(NetraInstruments.GROQ)) {\n customInstrumentModules.groq = true;\n }\n if (instruments.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) {\n customInstrumentModules.googleGenAI = true;\n }\n if (instruments.has(NetraInstruments.VERTEX_AI)) {\n // Vertex AI still uses Traceloop's vertexai module\n instrumentModules.google_vertexai = true;\n }\n if (instruments.has(NetraInstruments.LANGCHAIN)) {\n instrumentModules.langchain = true;\n }\n if (instruments.has(NetraInstruments.LANGGRAPH)) {\n customInstrumentModules.langgraph = true;\n }\n if (instruments.has(NetraInstruments.LLAMA_INDEX)) {\n instrumentModules.llamaIndex = true;\n }\n if (instruments.has(NetraInstruments.PINECONE)) {\n instrumentModules.pinecone = true;\n }\n if (instruments.has(NetraInstruments.QDRANT)) {\n instrumentModules.qdrant = true;\n }\n if (instruments.has(NetraInstruments.CHROMADB)) {\n instrumentModules.chromadb = true;\n }\n if (instruments.has(NetraInstruments.TOGETHER)) {\n instrumentModules.together = true;\n }\n if (instruments.has(NetraInstruments.ANTHROPIC)) {\n customInstrumentModules.anthropic = true;\n }\n }\n\n // Set Traceloop environment variables before initializing\n // This ensures the SDK picks up our configuration\n config.setTraceloopEnv();\n\n // Debug: Log configuration being used\n if (config.debugMode) {\n console.debug(\"Netra SDK Configuration:\");\n console.debug(` App Name: ${config.appName}`);\n console.debug(\n ` OTLP Endpoint: ${config.otlpEndpoint || \"(default - localhost:3002)\"}`,\n );\n console.debug(\n ` API Key: ${\n config.apiKey ? \"***\" + config.apiKey.slice(-4) : \"(not set)\"\n }`,\n );\n console.debug(` Trace Content: ${config.traceContent}`);\n console.debug(` Enable Scrubbing: ${config.enableScrubbing}`);\n }\n\n // Initialize Traceloop SDK\n const traceloopOptions: InitializeOptions = {\n appName: config.appName,\n apiKey: config.apiKey,\n baseUrl: config.otlpEndpoint,\n disableBatch: config.disableBatch,\n traceContent: config.traceContent,\n headers: config.headers,\n instrumentModules,\n silenceInitializationMessage: !config.debugMode,\n };\n // ---- updated exporter setup (Python-equivalent) ----\n\n // 1) Pick base exporter (Console fallback OR TrialAware(OTLP))\n let exporter: SpanExporter;\n\n if (!traceloopOptions.baseUrl || traceloopOptions.baseUrl == undefined) {\n exporter = new ConsoleSpanExporter();\n } else {\n const formattedEndpoint = config.formatOtlpEndpoint();\n\n // In TS, we pass the config directly to our custom class\n // because it handles the HTTP transport itself to catch the error body.\n exporter = new TrialAwareOTLPExporter({\n url: formattedEndpoint,\n headers: config.headers,\n });\n }\n\n // 2) Always attempt filtering (even for Console fallback)\n const originalExporter = exporter;\n\n try {\n const patterns = config.blockedSpans ?? [];\n exporter = new FilteringSpanExporter(exporter, patterns);\n } catch {\n exporter = originalExporter;\n }\n\n traceloopOptions.exporter = exporter;\n\n initialize(traceloopOptions);\n\n if (instrumentModules.langchain) {\n patchTraceloopLangchainCallbackHandler();\n } else {\n disableTraceloopLangchainCallbackHandler();\n }\n\n // ---- rest stays same ----\n const tracerProvider = trace.getTracerProvider();\n\n // Add custom span processors to the TracerProvider\n // The Traceloop SDK creates a BasicTracerProvider internally\n const effectiveProvider = addCustomSpanProcessors(tracerProvider, config);\n\n // Initialize custom instrumentations asynchronously\n // We use async initialization to ensure we get the same ES module instances\n // that the application uses (important for ESM/CJS dual package handling)\n instrumentationsReady = initCustomInstrumentationsAsync(\n config,\n tracerProvider,\n customInstrumentModules,\n blockInstruments,\n );\n\n // Initialize additional OpenTelemetry instrumentations\n initOpenTelemetryInstrumentations(config, instruments, blockInstruments);\n\n return effectiveProvider;\n}\n\n/**\n * Initialize custom instrumentations asynchronously\n * This uses dynamic import() to ensure we patch the same ES module instances\n * that the application uses.\n */\nasync function initCustomInstrumentationsAsync(\n config: Config,\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n customInstrumentModules: Record<string, boolean>,\n blockInstruments?: Set<NetraInstruments>,\n): Promise<void> {\n // Initialize custom MistralAI instrumentation\n if (\n customInstrumentModules.mistral &&\n !blockInstruments?.has(NetraInstruments.MISTRAL)\n ) {\n try {\n await mistralAIInstrumentor.instrumentAsync({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom MistralAI instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\n \"Failed to initialize custom MistralAI instrumentation:\",\n e,\n );\n }\n }\n }\n\n // Initialize custom OpenAI instrumentation\n if (\n customInstrumentModules.openai &&\n !blockInstruments?.has(NetraInstruments.OPENAI)\n ) {\n try {\n await openAIInstrumentor.instrumentAsync({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom OpenAI instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Failed to initialize custom OpenAI instrumentation:\", e);\n }\n }\n }\n\n // Initialize custom Groq instrumentation\n if (\n customInstrumentModules.groq &&\n !blockInstruments?.has(NetraInstruments.GROQ)\n ) {\n try {\n await groqInstrumentor.instrumentAsync({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom Groq instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Failed to initialize custom Groq instrumentation:\", e);\n }\n }\n }\n\n // Initialize custom Google GenAI instrumentation\n if (\n customInstrumentModules.googleGenAI &&\n !blockInstruments?.has(NetraInstruments.GOOGLE_GENERATIVE_AI)\n ) {\n try {\n await googleGenerativeAIInstrumentor.instrumentAsync({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom Google GenAI instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\n \"Failed to initialize custom Google GenAI instrumentation:\",\n e,\n );\n }\n }\n }\n\n // Initialize custom Langgraph instrumentation\n if (\n customInstrumentModules.langgraph &&\n !blockInstruments?.has(NetraInstruments.LANGGRAPH)\n ) {\n try {\n await langgraphInstrumentor.instrument({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom Langgraph instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\n \"Failed to initialize custom Langgraph instrumentation:\",\n e,\n );\n }\n }\n }\n\n if (\n customInstrumentModules.anthropic &&\n !blockInstruments?.has(NetraInstruments.ANTHROPIC)\n ) {\n try {\n await anthropicInstrumentor.instrumentAsync({ tracerProvider });\n if (config.debugMode) {\n console.debug(\"Custom Anthropic instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\n \"Failed to initialize custom Anthropic instrumentation:\",\n e,\n );\n }\n }\n }\n}\n\nfunction initOpenTelemetryInstrumentations(\n config: Config,\n instruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): void {\n // HTTP/HTTPS instrumentation\n if (\n !blockInstruments?.has(NetraInstruments.HTTP) &&\n (!instruments || instruments.has(NetraInstruments.HTTP))\n ) {\n try {\n const {\n HttpInstrumentation,\n } = require(\"@opentelemetry/instrumentation-http\");\n const httpInstrumentation = new HttpInstrumentation();\n // Note: This would need to be registered with the SDK\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"HTTP instrumentation not available:\", e);\n }\n }\n }\n\n // Prisma instrumentation\n if (\n !blockInstruments?.has(NetraInstruments.PRISMA) &&\n (!instruments || instruments.has(NetraInstruments.PRISMA))\n ) {\n try {\n const { PrismaInstrumentation } = require(\"@prisma/instrumentation\");\n // Note: This would need to be registered with the SDK\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Prisma instrumentation not available:\", e);\n }\n }\n }\n\n if (\n !blockInstruments?.has(NetraInstruments.TYPEORM) &&\n (!instruments || instruments.has(NetraInstruments.TYPEORM))\n ) {\n try {\n typeORMInstrumentor\n .instrument()\n .then(() => {\n if (config.debugMode) {\n console.debug(\"TypeORM instrumentation successfully initialized\");\n }\n })\n .catch((e) => {\n console.error(\"TypeORM instrumentation error:\", e);\n if (config.debugMode) {\n console.debug(\"TypeORM instrumentation error details:\", e);\n }\n });\n if (config.debugMode) {\n console.debug(\"TypeORM instrumentation initialization started\");\n }\n } catch (e) {\n console.error(\"TypeORM instrumentation failed to start:\", e);\n if (config.debugMode) {\n console.debug(\"TypeORM instrumentation not available:\", e);\n }\n }\n }\n\n // Express instrumentation\n if (\n !blockInstruments?.has(NetraInstruments.EXPRESS) &&\n (!instruments || instruments.has(NetraInstruments.EXPRESS))\n ) {\n try {\n const {\n ExpressInstrumentation,\n } = require(\"@opentelemetry/instrumentation-express\");\n // Note: This would need to be registered with the SDK\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Express instrumentation not available:\", e);\n }\n }\n }\n}\n\n/**\n * Add custom span processors to the TracerProvider\n * These processors add session context, instrumentation metadata, and scrubbing\n *\n * Returns the effective TracerProvider that processors were added to.\n */\nfunction addCustomSpanProcessors(\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n config: Config,\n): TracerProviderWithProcessors | null {\n try {\n // The TracerProvider from Traceloop is a ProxyTracerProvider\n // We need to find the actual provider with addSpanProcessor method\n let provider: TracerProviderWithProcessors | null = null;\n\n // Try to access the delegate/underlying provider\n const providerAny = tracerProvider as any;\n\n // Check if it's a ProxyTracerProvider with a delegate\n if (\n providerAny._delegate &&\n typeof providerAny._delegate.addSpanProcessor === \"function\"\n ) {\n provider = providerAny._delegate as TracerProviderWithProcessors;\n }\n // Check if it has getDelegate method\n else if (typeof providerAny.getDelegate === \"function\") {\n const delegate = providerAny.getDelegate();\n if (delegate) {\n if (typeof delegate.addSpanProcessor === \"function\") {\n provider = delegate as TracerProviderWithProcessors;\n } else if (\n delegate._activeSpanProcessor &&\n delegate._activeSpanProcessor.constructor.name ===\n \"MultiSpanProcessor\" &&\n Array.isArray(delegate._activeSpanProcessor._spanProcessors)\n ) {\n // Fallback for OTel SDKs where addSpanProcessor is removed/protected\n // and MultiSpanProcessor is used (e.g. created by Traceloop)\n provider = {\n addSpanProcessor: (processor: SpanProcessor) => {\n delegate._activeSpanProcessor._spanProcessors.push(processor);\n },\n getTracer: (name: string, version?: string) => {\n return delegate.getTracer(name, version);\n },\n } as TracerProviderWithProcessors;\n }\n }\n }\n // Check if it directly has addSpanProcessor\n else if (typeof providerAny.addSpanProcessor === \"function\") {\n provider = providerAny as TracerProviderWithProcessors;\n }\n // Try accessing via global registry (NodeTracerProvider stores itself)\n else {\n try {\n // Try to get the active provider from the SDK\n const { NodeTracerProvider } = require(\"@opentelemetry/sdk-trace-node\");\n // The provider might be accessible via other means\n } catch {\n // SDK not available\n }\n }\n\n if (!provider) {\n if (config.debugMode) {\n console.debug(\n \"Could not access TracerProvider for adding span processors. \" +\n \"Session context will still be propagated via baggage.\",\n );\n }\n return null;\n }\n\n // 0. Local Filtering Span Processor - filters spans based on local context\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor();\n provider.addSpanProcessor(localFilteringSpanProcessor);\n\n // 1. Instrumentation Span Processor - truncates attributes and adds instrumentation name\n const instrumentationProcessor = new InstrumentationSpanProcessor();\n provider.addSpanProcessor(instrumentationProcessor);\n\n // 2. Session Span Processor - adds session context (session_id, user_id, etc.)\n const sessionProcessor = new SessionSpanProcessor();\n provider.addSpanProcessor(sessionProcessor);\n\n // 3. LLM Trace Identifier Span Processor - marks root spans that contain LLM calls\n const llmTraceProcessor = new LlmTraceIdentifierSpanProcessor();\n provider.addSpanProcessor(llmTraceProcessor);\n\n // 4. Scrubbing Span Processor - scrubs sensitive data (if enabled)\n if (config.enableScrubbing) {\n const scrubbingProcessor = new ScrubbingSpanProcessor();\n provider.addSpanProcessor(scrubbingProcessor);\n }\n\n if (config.debugMode) {\n console.debug(\"Custom span processors registered successfully\");\n }\n\n return provider;\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Failed to add custom span processors:\", e);\n }\n return null;\n }\n}\n\n/**\n * Uninstrument all active instrumentations\n * Should be called during shutdown\n */\nexport function uninstrumentAll(): void {\n // Uninstrument custom OpenAI instrumentation\n try {\n if (openAIInstrumentor.isInstrumented()) {\n openAIInstrumentor.uninstrument();\n console.debug(\"Custom OpenAI instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument OpenAI:\", e);\n }\n\n // Uninstrument custom MistralAI instrumentation\n try {\n if (mistralAIInstrumentor.isInstrumented()) {\n mistralAIInstrumentor.uninstrument();\n console.debug(\"Custom MistralAI instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument MistralAI:\", e);\n }\n\n // Uninstrument custom Groq instrumentation\n try {\n if (groqInstrumentor.isInstrumented()) {\n groqInstrumentor.uninstrument();\n console.debug(\"Custom Groq instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument Groq:\", e);\n }\n\n // Uninstrument custom Anthropic instrumentation\n try {\n if (anthropicInstrumentor.isInstrumented()) {\n anthropicInstrumentor.uninstrument();\n console.debug(\"Custom Anthropic instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument Anthropic:\", e);\n }\n\n // Uninstrument custom Google GenAI instrumentation\n try {\n if (googleGenerativeAIInstrumentor.isInstrumented()) {\n googleGenerativeAIInstrumentor.uninstrument();\n console.debug(\"Custom Google GenAI instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument Google GenAI:\", e);\n }\n\n // Uninstrument custom Langgraph instrumentation\n try {\n if (langgraphInstrumentor.isInstrumented()) {\n langgraphInstrumentor.uninstrument();\n console.debug(\"Custom Langgraph instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument Langgraph:\", e);\n }\n\n // Uninstrument custom TypeORM instrumentation\n try {\n if (typeORMInstrumentor.isInstrumented()) {\n typeORMInstrumentor.uninstrument();\n console.debug(\"Custom TypeORM instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument TypeORM:\", e);\n }\n}\n","import axios, { AxiosInstance, AxiosResponse, AxiosError } from \"axios\";\nimport { Config } from \"../config\";\nimport { ConversationResponse, SimulationItem } from \"./models\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_TIMEOUT = 10000; // 10 seconds in milliseconds\n\n/**\n * Result from creating a simulation run.\n */\nexport interface CreateRunResult {\n runId: string;\n simulationItems: SimulationItem[];\n}\n\n/**\n * Internal HTTP client for simulation API endpoints.\n */\nexport class SimulationHttpClient {\n private client: AxiosInstance | null = null;\n\n constructor(config: Config) {\n this.client = this._createClient(config);\n }\n\n /**\n * Create and configure the HTTP client.\n */\n private _createClient(config: Config): AxiosInstance | null {\n const endpoint = (config.otlpEndpoint || \"\").trim();\n if (!endpoint) {\n console.error(`${LOG_PREFIX}: NETRA_OTLP_ENDPOINT is required`);\n return null;\n }\n\n const baseURL = this._resolveBaseUrl(endpoint);\n const headers = this._buildHeaders(config);\n const timeout = this._getTimeout();\n\n try {\n return axios.create({\n baseURL,\n headers,\n timeout,\n });\n } catch (error) {\n console.error(`${LOG_PREFIX}: Failed to create HTTP client:`, error);\n return null;\n }\n }\n\n /**\n * Extract base URL, removing telemetry suffix if present.\n */\n private _resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint;\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n /**\n * Build request headers from configuration.\n */\n private _buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n return headers;\n }\n\n /**\n * Get timeout from environment or use default.\n */\n private _getTimeout(): number {\n const timeoutStr = process.env.NETRA_SIMULATION_TIMEOUT;\n if (!timeoutStr) {\n return DEFAULT_TIMEOUT;\n }\n\n const timeout = parseFloat(timeoutStr);\n if (isNaN(timeout)) {\n console.warn(\n `${LOG_PREFIX}: Invalid timeout '${timeoutStr}', using default ${DEFAULT_TIMEOUT}ms`,\n );\n return DEFAULT_TIMEOUT;\n }\n\n return timeout * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Create a new simulation run for the specified dataset.\n */\n async createRun(\n name: string,\n datasetId: string,\n context?: Record<string, any>,\n ): Promise<CreateRunResult | null> {\n if (!this.client) {\n console.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/test_run/multi-turn\";\n const payload = {\n name,\n datasetId,\n context: context || {},\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const userMessages = responseData.userMessages || [];\n\n if (userMessages.length === 0) {\n console.warn(`${LOG_PREFIX}: No user messages returned from create_run`);\n return null;\n }\n\n const runId = responseData.id || \"\";\n const simulationItems: SimulationItem[] = userMessages.map(\n (msg: any) => ({\n runItemId: msg.testRunItemId || \"\",\n message: msg.userMessage || \"\",\n turnId: msg.turnId || \"\",\n }),\n );\n\n return {\n runId,\n simulationItems,\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n console.error(`${LOG_PREFIX}: Failed to create simulation run:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Send a conversation turn to the backend and get the next response.\n */\n async triggerConversation(\n message: string,\n turnId: string,\n sessionId: string,\n traceId: string,\n ): Promise<ConversationResponse | null> {\n if (!this.client) {\n console.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/turn/agent-response\";\n const payload = {\n turnId,\n agentResponse: { message },\n sessionId,\n traceId,\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const decision = responseData.decision || \"continue\";\n\n if (decision === \"stop\") {\n return {\n decision,\n reason: responseData.reason || \"\",\n };\n }\n\n const userMessages = responseData.userMessages || [];\n if (userMessages.length === 0) {\n console.warn(`${LOG_PREFIX}: No user messages in continue response`);\n return null;\n }\n\n const nextMsg = userMessages[0];\n return {\n decision,\n nextTurnId: nextMsg.turnId || \"\",\n nextUserMessage: nextMsg.userMessage || \"\",\n nextRunItemId: nextMsg.testRunItemId || \"\",\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n console.error(`${LOG_PREFIX}: Failed to trigger conversation:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Report a task execution failure to the backend.\n */\n async reportFailure(runId: string, runItemId: string, error: string): Promise<void> {\n if (!this.client) {\n console.error(`${LOG_PREFIX}: Client not initialized`);\n return;\n }\n\n try {\n const url = `/evaluations/run/${runId}/item/${runItemId}/status`;\n const payload = { status: \"failed\", failureReason: error };\n await this.client.patch(url, payload);\n console.info(`${LOG_PREFIX}: Reported failure - ${error}`);\n } catch (err) {\n const errorMsg = this._extractErrorMessage(err);\n console.error(`${LOG_PREFIX}: Failed to report failure:`, errorMsg);\n }\n }\n\n /**\n * Submit the run status.\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.client) {\n console.error(\n `${LOG_PREFIX}: Client not initialized; cannot post run status`,\n );\n return { success: false };\n }\n\n try {\n const url = `/evaluations/run/${runId}/status`;\n const payload = { status };\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n if (data && typeof data === \"object\" && \"data\" in data) {\n console.info(`${LOG_PREFIX}: Completed test run successfully`);\n return data.data || {};\n }\n return data;\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n console.error(\n `${LOG_PREFIX}: Failed to post run status for run '${runId}':`,\n errorMsg,\n );\n return { success: false };\n }\n }\n\n /**\n * Extract error message from response or exception.\n */\n private _extractErrorMessage(error: any): string {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError;\n if (axiosError.response?.data) {\n const responseData = axiosError.response.data as any;\n if (\n typeof responseData === \"object\" &&\n responseData.error &&\n typeof responseData.error === \"object\"\n ) {\n return responseData.error.message || error.message;\n }\n }\n return axiosError.message;\n }\n return error?.message || String(error);\n }\n}\n","import { TaskResult } from \"./models\";\n\n\nexport abstract class BaseTask {\n /**\n * @param message - The input message from the simulation.\n * @param sessionId - The Session identifier.\n * @returns The task result containing:\n * - message (string): The response message from the task.\n * - sessionId (string): The session identifier.\n */\n abstract run(\n message: string,\n sessionId?: string | null,\n ): Promise<TaskResult> | TaskResult;\n}\n","import { BaseTask } from \"./task\";\n\nconst LOG_PREFIX = \"netra.simulation\";\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string.\n *\n * @param traceId - The integer trace ID to format\n * @returns The formatted trace ID as a hexadecimal string\n */\nexport function formatTraceId(traceId: number): string {\n return traceId.toString(16).padStart(32, \"0\");\n}\n\n/**\n * Validate required inputs for simulation.\n *\n * @param datasetId - The dataset identifier to validate\n * @param task - The task function to validate\n * @returns True if inputs are valid, false otherwise\n */\nexport function validateSimulationInputs(\n datasetId: string,\n task: BaseTask,\n): boolean {\n if (!datasetId) {\n console.error(`${LOG_PREFIX}: dataset_id is required`);\n return false;\n }\n if (!(task instanceof BaseTask)) {\n console.error(`${LOG_PREFIX}: task must be a BaseTask instance`);\n return false;\n }\n return true;\n}\n\n/**\n * Execute a task function (sync or async) and extract message and session_id.\n *\n * @param task - The task function to execute\n * @param message - The input message to pass to the task\n * @param sessionId - The current session identifier\n * @returns A tuple of [response_message, session_id]\n * @throws Error if the task returns an unsupported type\n */\nexport async function executeTask(\n task: BaseTask,\n message: string,\n sessionId: string | null,\n): Promise<[string, string | null]> {\n const result = task.run(message, sessionId);\n\n // Check if result is a Promise (async function)\n const resolvedResult = result instanceof Promise ? await result : result;\n\n // Validate that the result is a TaskResult\n if (\n typeof resolvedResult === \"object\" &&\n resolvedResult !== null &&\n \"message\" in resolvedResult &&\n \"sessionId\" in resolvedResult\n ) {\n return [resolvedResult.message, resolvedResult.sessionId];\n }\n\n throw new Error(\n `Task must return TaskResult, got ${typeof resolvedResult}`,\n );\n}\n","/**\n * Public API for running multi-turn conversation simulations.\n */\n\nimport pLimit from \"p-limit\";\nimport { Config } from \"../config\";\nimport { SpanWrapper } from \"../span-wrapper\";\nimport { SimulationHttpClient } from \"./client\";\nimport {\n ConversationResult,\n SimulationItem,\n SimulationResult,\n} from \"./models\";\nimport { BaseTask } from \"./task\";\nimport { executeTask, validateSimulationInputs } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst SPAN_NAME = \"Netra.Simulation.TestRun\";\n\n\nexport interface SimulationOptions {\n name: string;\n datasetId: string;\n task: BaseTask;\n context?: Record<string, any>;\n maxConcurrency?: number; // default: 5\n}\n\n/**\n * Public API for running multi-turn conversation simulations.\n */\nexport class Simulation {\n private _config: Config;\n private _client: SimulationHttpClient;\n\n constructor(config: Config) {\n this._config = config;\n this._client = new SimulationHttpClient(config);\n }\n\n /**\n * Run a multi-turn conversation simulation.\n *\n * @param options - Simulation configuration options\n * @returns Dictionary with simulation results, or null on failure\n */\n async runSimulation(\n options: SimulationOptions,\n ): Promise<SimulationResult | null> {\n const {\n name,\n datasetId,\n task,\n context,\n maxConcurrency = 5,\n } = options;\n\n if (!validateSimulationInputs(datasetId, task)) {\n return null;\n }\n\n const startTime = Date.now();\n const runResult = await this._client.createRun(name, datasetId, context);\n if (!runResult) {\n return null;\n }\n\n const { runId, simulationItems } = runResult;\n if (!simulationItems || simulationItems.length === 0) {\n console.error(`${LOG_PREFIX}: No items returned from create_run`);\n return null;\n }\n\n let interrupted = false;\n const proc = typeof process !== \"undefined\" ? process : undefined;\n const finalizeFailure = (signal?: NodeJS.Signals) => {\n if (interrupted) {\n return;\n }\n interrupted = true;\n proc?.removeListener(\"SIGINT\", handleSignal);\n proc?.removeListener(\"SIGTERM\", handleSignal);\n proc?.removeListener(\"uncaughtException\", handleException);\n proc?.removeListener(\"unhandledRejection\", handleRejection);\n void this._client.postRunStatus(runId, \"failed\").finally(() => {\n if (signal) {\n proc?.kill(proc.pid, signal);\n }\n });\n };\n const handleSignal = (signal: \"SIGINT\" | \"SIGTERM\") => {\n finalizeFailure(signal);\n };\n const handleException = () => {\n finalizeFailure();\n };\n const handleRejection = () => {\n finalizeFailure();\n };\n if (proc && typeof proc.once === \"function\") {\n proc.once(\"SIGINT\", handleSignal);\n proc.once(\"SIGTERM\", handleSignal);\n proc.once(\"uncaughtException\", handleException);\n proc.once(\"unhandledRejection\", handleRejection);\n }\n\n console.info(\n `${LOG_PREFIX}: Starting simulation with ${simulationItems.length} items`,\n );\n\n try {\n const result = await this._runSimulationAsync(\n runId,\n simulationItems,\n task,\n maxConcurrency,\n );\n\n const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(2);\n console.info(\n `${LOG_PREFIX}: Simulation completed in ${elapsedTime} seconds`,\n );\n\n return result;\n } catch (error) {\n console.error(`${LOG_PREFIX}: Run simulation failed`);\n await this._client.postRunStatus(runId, \"failed\");\n throw error;\n } finally {\n if (proc && typeof proc.removeListener === \"function\") {\n proc.removeListener(\"SIGINT\", handleSignal);\n proc.removeListener(\"SIGTERM\", handleSignal);\n proc.removeListener(\"uncaughtException\", handleException);\n proc.removeListener(\"unhandledRejection\", handleRejection);\n }\n }\n }\n\n /**\n * Async implementation of run_simulation with concurrency control.\n */\n private async _runSimulationAsync(\n runId: string,\n runItems: SimulationItem[],\n task: BaseTask,\n maxConcurrency: number,\n ): Promise<SimulationResult> {\n const results: SimulationResult = {\n success: true,\n completed: [],\n failed: [],\n totalItems: runItems.length,\n };\n\n let processedCount = 0;\n\n // Create concurrency limiter\n const limit = pLimit(Math.min(5, maxConcurrency));\n\n // Process items with concurrency control\n const promises = runItems.map((runItem) =>\n limit(async () => {\n const result = await this._executeConversation(runId, runItem, task);\n\n if (result.success) {\n results.completed.push(result);\n } else {\n results.failed.push(result);\n }\n\n processedCount++;\n console.info(\n `${LOG_PREFIX}: ${processedCount}/${runItems.length} processed (run_item_id=${runItem.runItemId})`,\n );\n\n return result;\n }),\n );\n\n await Promise.all(promises);\n\n console.info(\n `${LOG_PREFIX}: Completed=${results.completed.length}, Failed=${results.failed.length}`,\n );\n\n await this._client.postRunStatus(runId, \"completed\");\n\n return results;\n }\n\n /**\n * Execute a multi-turn conversation for a single simulation item.\n */\n private async _executeConversation(\n runId: string,\n runItem: SimulationItem,\n task: BaseTask,\n ): Promise<ConversationResult> {\n const { runItemId, message: initialMessage, turnId: initialTurnId } = runItem;\n let message = initialMessage;\n let turnId = initialTurnId;\n let sessionId: string | null = null;\n\n while (true) {\n try {\n const span = new SpanWrapper(SPAN_NAME, {}, LOG_PREFIX);\n span.start();\n\n const traceId = span.getCurrentSpan()?.spanContext().traceId ?? \"\";\n\n // Execute the user's task\n const [responseMessage, taskSessionId] = await executeTask(\n task,\n message,\n sessionId,\n );\n\n if (taskSessionId) {\n sessionId = taskSessionId;\n }\n\n span.end();\n\n // Trigger conversation with the backend\n const response = await this._client.triggerConversation(\n responseMessage,\n turnId,\n sessionId || \"\",\n traceId,\n );\n\n if (response === null) {\n const errorMsg = \"Failed to get conversation response\";\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n\n if (response.decision === \"stop\") {\n console.info(\n `${LOG_PREFIX}: Completed run_item_id=${runItemId} reason=${response.reason}`,\n );\n return {\n runItemId,\n success: true,\n finalTurnId: turnId,\n };\n }\n\n // Continue to next turn\n message = response.nextUserMessage!;\n turnId = response.nextTurnId!;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n console.error(\n `${LOG_PREFIX}: Task failed run_item_id=${runItemId}, turn_id=${turnId}: ${errorMsg}`,\n );\n await this._client.reportFailure(runId, runItemId, errorMsg);\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n }\n }\n}\n","/**\n * Decorators for easy instrumentation\n */\n\nimport { trace, Span } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { SessionManager } from \"./session-manager\";\nimport { SpanType, DecoratorOptions } from \"./types\";\n\ntype AnyFunction = (...args: any[]) => any;\ntype AsyncFunction = (...args: any[]) => Promise<any>;\n\nfunction serializeValue(value: any): string {\n try {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n ) {\n return String(value);\n } else if (Array.isArray(value) || typeof value === \"object\") {\n return JSON.stringify(value).substring(0, 1000);\n } else {\n return String(value).substring(0, 1000);\n }\n } catch {\n return String(typeof value);\n }\n}\n\nfunction addSpanAttributes(\n span: Span,\n func: AnyFunction,\n args: any[],\n kwargs: Record<string, any>,\n entityType: string\n): void {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.type`, entityType);\n\n try {\n const inputData: Record<string, string> = {};\n const paramNames = getParameterNames(func);\n\n for (let i = 0; i < args.length && i < paramNames.length; i++) {\n const paramName = paramNames[i];\n if (paramName !== \"self\" && paramName !== \"cls\") {\n inputData[paramName] = serializeValue(args[i]);\n }\n }\n\n for (const [key, value] of Object.entries(kwargs)) {\n inputData[key] = serializeValue(value);\n }\n\n if (Object.keys(inputData).length > 0) {\n span.setAttribute(\n `${Config.LIBRARY_NAME}.entity.input`,\n JSON.stringify(inputData)\n );\n }\n } catch (e) {\n span.setAttribute(\n `${Config.LIBRARY_NAME}.input_error`,\n String(e)\n );\n }\n}\n\nfunction addOutputAttributes(span: Span, result: any): void {\n try {\n const serializedOutput = serializeValue(result);\n span.setAttribute(\n `${Config.LIBRARY_NAME}.entity.output`,\n serializedOutput\n );\n } catch (e) {\n span.setAttribute(\n `${Config.LIBRARY_NAME}.entity.output_error`,\n String(e)\n );\n }\n}\n\nfunction getParameterNames(func: AnyFunction): string[] {\n const funcStr = func.toString();\n const match = funcStr.match(/\\(([^)]*)\\)/);\n if (!match) return [];\n return match[1]\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p);\n}\n\nfunction createFunctionWrapper<T extends AnyFunction>(\n func: T,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN\n): T {\n const moduleName = func.name || \"unknown\";\n const spanName = name || func.name || \"anonymous\";\n const isAsync = func.constructor.name === \"AsyncFunction\";\n\n if (isAsync) {\n return (async function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, async span => {\n span.setAttribute(\"netra.span.type\", asType);\n \n SessionManager.registerSpan(spanName, span);\n SessionManager.setCurrentSpan(span);\n \n try {\n const kwargs: Record<string, any> = {};\n addSpanAttributes(span, func, args, kwargs, entityType);\n \n const result = await (func as AsyncFunction).call(this, ...args);\n\n addOutputAttributes(span, result);\n return result;\n } catch (e: any) {\n span.setAttribute(\n `${Config.LIBRARY_NAME}.entity.error`,\n String(e)\n );\n span.recordException(e);\n throw e;\n } finally {\n span.end();\n SessionManager.unregisterSpan(spanName, span);\n SessionManager.popEntity(entityType);\n }\n });\n }) as T;\n } else {\n return (function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, span => {\n span.setAttribute(\"netra.span.type\", asType);\n SessionManager.registerSpan(spanName, span);\n SessionManager.setCurrentSpan(span);\n \n try {\n const kwargs: Record<string, any> = {};\n addSpanAttributes(span, func, args, kwargs, entityType);\n\n const result = (func as AnyFunction).call(this, ...args);\n addOutputAttributes(span, result);\n\n return result;\n } catch (e: any) {\n span.setAttribute(\n `${Config.LIBRARY_NAME}.entity.error`,\n String(e)\n );\n span.recordException(e);\n throw e;\n } finally {\n span.end();\n SessionManager.unregisterSpan(spanName, span);\n SessionManager.popEntity(entityType);\n }\n });\n }) as T;\n }\n}\n\nexport function workflow<T extends AnyFunction>(\n target: T,\n options?: DecoratorOptions\n): T;\nexport function workflow<T extends AnyFunction>(\n options?: DecoratorOptions\n): (target: T) => T;\nexport function workflow<T extends AnyFunction>(\n targetOrOptions?: T | DecoratorOptions,\n options?: DecoratorOptions\n): T | ((target: T) => T) {\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n \"workflow\",\n options?.name,\n SpanType.SPAN\n );\n } else {\n return (target: T) =>\n createFunctionWrapper(\n target,\n \"workflow\",\n targetOrOptions?.name,\n SpanType.SPAN\n );\n }\n}\n\nexport function agent<T extends AnyFunction>(\n target: T,\n options?: DecoratorOptions\n): T;\nexport function agent<T extends AnyFunction>(\n options?: DecoratorOptions\n): (target: T) => T;\nexport function agent<T extends AnyFunction>(\n targetOrOptions?: T | DecoratorOptions,\n options?: DecoratorOptions\n): T | ((target: T) => T) {\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n \"agent\",\n options?.name,\n SpanType.AGENT\n );\n } else {\n return (target: T) =>\n createFunctionWrapper(\n target,\n \"agent\",\n targetOrOptions?.name,\n SpanType.AGENT\n );\n }\n}\n\nexport function task<T extends AnyFunction>(\n target: T,\n options?: DecoratorOptions\n): T;\nexport function task<T extends AnyFunction>(\n options?: DecoratorOptions\n): (target: T) => T;\nexport function task<T extends AnyFunction>(\n targetOrOptions?: T | DecoratorOptions,\n options?: DecoratorOptions\n): T | ((target: T) => T) {\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n \"task\",\n options?.name,\n SpanType.TOOL\n );\n } else {\n return (target: T) =>\n createFunctionWrapper(\n target,\n \"task\",\n targetOrOptions?.name,\n SpanType.TOOL\n );\n }\n}\n\nexport function span<T extends AnyFunction>(\n target: T,\n options?: DecoratorOptions\n): T;\nexport function span<T extends AnyFunction>(\n options?: DecoratorOptions\n): (target: T) => T;\nexport function span<T extends AnyFunction>(\n targetOrOptions?: T | DecoratorOptions,\n options?: DecoratorOptions\n): T | ((target: T) => T) {\n const asType = options?.asType || (typeof targetOrOptions !== \"function\" ? targetOrOptions?.asType : undefined) || SpanType.SPAN;\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n \"span\",\n options?.name,\n asType\n );\n } else {\n return (target: T) =>\n createFunctionWrapper(\n target,\n \"span\",\n targetOrOptions?.name,\n asType\n );\n }\n}\n\n\n","/**\n * Netra SDK - Main entry point\n * A comprehensive TypeScript/JavaScript SDK for AI application observability\n * Built on top of OpenTelemetry and Traceloop\n */\n\nimport {\n context,\n Span,\n SpanKind,\n trace\n} from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { Dashboard } from \"./api/dashboard\";\nimport { Evaluation } from \"./api/evaluation\";\nimport { Usage } from \"./api/usage\";\nimport { Config, NetraConfig } from \"./config\";\nimport {\n initInstrumentations,\n instrumentationsReady,\n uninstrumentAll,\n} from \"./instrumentation\";\nimport { withBlockedSpansLocal } from \"./processors/localfiltering-span-processor\";\nimport { setSessionBaggage } from \"./processors/session-span-processor\";\nimport {\n ConversationType,\n runWithEntityContext,\n SessionManager,\n} from \"./session-manager\";\nimport { Simulation } from \"./simulation\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { SpanType } from \"./types\";\n\nexport { Config, NetraInstruments } from \"./config\";\nexport { agent, span, task, workflow } from \"./decorators\";\nexport {\n InstrumentationSpanProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor\n} from \"./processors\";\nexport { ConversationType } from \"./session-manager\";\nexport { SpanType } from \"./types\";\nexport type { ActionModel, UsageModel } from \"./types\";\n// Expose provider instrumentors for advanced usage/testing\nexport { mistralAIInstrumentor } from \"./instrumentation/mistralai\";\n\n// Export API types and classes\nexport {\n Aggregation,\n ChartType,\n // Dashboard API\n Dashboard,\n DimensionField,\n EntryStatus,\n // Evaluation API\n Evaluation,\n FilterField,\n FilterType,\n GroupBy,\n Measure,\n metadataField,\n Operator,\n RunEntryContext,\n RunStatus,\n Scope,\n // Usage API\n Usage\n} from \"./api\";\n\nexport type {\n // Dashboard API\n CategoricalDataPoint,\n // Evaluation API\n CreateDatasetParams,\n DashboardData,\n Dataset,\n DatasetEntry,\n DatasetItem,\n Dimension,\n DimensionValue,\n EvaluationScore,\n EvaluatorFunction,\n Filter,\n FilterConfig,\n // Usage API\n ListSpansParams,\n ListTracesParams,\n Metrics,\n NumberResponse,\n QueryDataParams,\n QueryResponse,\n Run,\n SessionUsageData,\n SpansPage,\n TaskFunction,\n TenantUsageData,\n TestSuiteResult,\n TimeRange,\n TimeSeriesDataPoint,\n TimeSeriesResponse,\n TimeSeriesWithDimension,\n TracesPage,\n TraceSpan,\n TraceSummary\n} from \"./api\";\n\n// Export simulation types and classes\nexport { BaseTask, Simulation } from \"./simulation\";\nexport type {\n ConversationResponse,\n ConversationResult,\n CreateRunResult,\n SimulationItem,\n SimulationOptions,\n SimulationResult,\n TaskResult,\n} from \"./simulation\";\nexport * from \"./exporters\";\n\nlet _initialized = false;\nlet _rootSpan: Span | undefined;\nlet _config: Config | undefined;\n\nexport class Netra {\n private static _initialized = false;\n private static _config: Config | undefined;\n\n private static _tracer: any;\n\n /**\n * Usage API client for usage and traces\n * Available after calling Netra.init()\n */\n static usage: Usage;\n\n /**\n * Evaluation API client for datasets, runs, and test suites\n * Available after calling Netra.init()\n */\n static evaluation: Evaluation;\n\n /**\n * Dashboard API client for querying metrics and time-series data\n * Available after calling Netra.init()\n */\n static dashboard: Dashboard;\n\n static simulation: Simulation;\n\n /**\n * Get the current Netra configuration\n */\n static getConfig(): Config {\n if (!this._config) {\n throw new Error(\"Netra SDK not initialized. Call Netra.init() first.\");\n }\n return this._config;\n }\n\n /**\n * Check if Netra has been initialized\n */\n static isInitialized(): boolean {\n return this._initialized;\n }\n\n /**\n * Initialize the Netra SDK\n *\n * This method is async and must be awaited to ensure all instrumentations\n * are ready before your application starts using instrumented modules.\n *\n * @example\n * await Netra.init({ appName: 'my-app', instruments: new Set([NetraInstruments.OPENAI]) });\n * // Now all instrumentations are ready\n * const openai = new OpenAI();\n */\n static async init(config: NetraConfig = {}): Promise<void> {\n if (this._initialized) {\n console.warn(\n \"Netra.init() called more than once; ignoring subsequent calls.\",\n );\n return;\n }\n\n // Build Config\n const cfg = new Config(config);\n this._config = cfg;\n\n // Initialize instrumentations and get effective provider\n const effectiveProvider = initInstrumentations(\n cfg,\n config.instruments,\n config.blockInstruments,\n );\n\n // If we found an effective provider (delegate), get a tracer from IT.\n // This ensures the tracer has the processors we added.\n if (\n effectiveProvider &&\n typeof (effectiveProvider as any).getTracer === \"function\"\n ) {\n this._tracer = (effectiveProvider as any).getTracer(\n Config.LIBRARY_NAME,\n Config.LIBRARY_VERSION,\n );\n } else {\n // Fallback\n this._tracer = trace.getTracer(\n Config.LIBRARY_NAME,\n Config.LIBRARY_VERSION,\n );\n }\n\n // Initialize API clients\n this.usage = new Usage(cfg);\n this.evaluation = new Evaluation(cfg);\n this.dashboard = new Dashboard(cfg);\n this.simulation = new Simulation(cfg);\n\n this._initialized = true;\n console.info(\"Netra successfully initialized.\");\n if (cfg.debugMode) {\n let pkgVersion = Config.LIBRARY_VERSION;\n let pkgPath = \"unknown\";\n try {\n const req = createRequire(import.meta.url);\n pkgPath = req.resolve(\"../package.json\");\n const pkg = req(\"../package.json\");\n pkgVersion = pkg?.version || pkgVersion;\n } catch {\n // keep defaults\n }\n console.debug(\n `[Netra Debug] SDK version=${pkgVersion} libraryVersion=${Config.LIBRARY_VERSION} build=langgraph-parenting-v3 packageJson=${pkgPath}`,\n );\n }\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n console.log(`\\nReceived ${signal}. Shutting down Netra SDK...`);\n await this.shutdown();\n process.exit(0);\n };\n\n const handleUncaughtException = async (error: Error) => {\n console.error(\"Uncaught exception:\", error);\n console.error(\"Shutting down Netra SDK due to crash...\");\n try {\n await this.shutdown();\n } catch (err) {\n console.error(\"Error during crash shutdown:\", err);\n }\n process.exit(1);\n };\n\n // Handle process running out of work\n process.once(\"beforeExit\", async () => {\n // beforeExit can be called multiple times if the loop fills up again\n // but for our purpose, we just want to ensure flush happens if the script finishes\n await this.shutdown();\n });\n\n // Handle termination signals\n process.once(\"SIGINT\", () => handleSignal(\"SIGINT\"));\n process.once(\"SIGTERM\", () => handleSignal(\"SIGTERM\"));\n\n // Handle crashes\n process.once(\"uncaughtException\", handleUncaughtException);\n\n // Create root span if enabled\n if (cfg.enableRootSpan) {\n // Use the effective tracer if available\n const tracer = this._tracer || trace.getTracer(\"netra.root.span\");\n const rootName = `${Config.LIBRARY_NAME}.root.span`;\n\n // Create the root span\n _rootSpan = tracer.startSpan(rootName, {\n kind: SpanKind.INTERNAL,\n });\n\n if (_rootSpan) {\n if (cfg.appName) {\n _rootSpan.setAttribute(\"service.name\", cfg.appName);\n }\n _rootSpan.setAttribute(\"netra.environment\", cfg.environment);\n _rootSpan.setAttribute(\"netra.library.version\", Config.LIBRARY_VERSION);\n\n try {\n SessionManager.setCurrentSpan(_rootSpan);\n // Also store the root span in SessionManager for access by SpanWrapper/decorators\n SessionManager.setRootSpan(_rootSpan);\n } catch (e) {\n // Ignore\n }\n\n console.info(\n \"Netra root span created. Use Netra.runWithRootSpan() to parent spans under it.\",\n );\n }\n }\n\n // Wait for all async instrumentations to be ready\n await instrumentationsReady;\n }\n\n /**\n * @deprecated Use `Netra.init()` instead. The init method is now async by default.\n *\n * Initialize the Netra SDK and wait for all instrumentations to be ready.\n * This method is kept for backwards compatibility.\n */\n static async initAsync(config: NetraConfig = {}): Promise<void> {\n await this.init(config);\n }\n\n /**\n * @deprecated Since `Netra.init()` is now async and waits for instrumentations,\n * this method is no longer necessary. It's kept for backwards compatibility.\n *\n * Returns a promise that resolves when all async instrumentations are ready.\n */\n static async ready(): Promise<void> {\n await instrumentationsReady;\n }\n\n /**\n * Optional cleanup to end the root span and uninstrument all.\n * Now async to ensure spans are flushed.\n */\n static async shutdown(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n\n // Unpatch any monkey-patched instrumentations first\n try {\n uninstrumentAll();\n } catch (e) {\n // Ignore\n if (this._config?.debugMode) {\n console.error(\"Error during uninstrumentAll:\", e);\n }\n }\n\n if (_rootSpan) {\n try {\n _rootSpan.end();\n } catch (e) {\n } finally {\n _rootSpan = undefined;\n }\n }\n\n try {\n const provider = trace.getTracerProvider();\n\n // Define timeouts\n const FLUSH_TIMEOUT_MS = 5000;\n\n const flushPromise = (async () => {\n if (\n \"forceFlush\" in provider &&\n typeof provider.forceFlush === \"function\"\n ) {\n await provider.forceFlush();\n }\n if (\"shutdown\" in provider && typeof provider.shutdown === \"function\") {\n await provider.shutdown();\n }\n })();\n\n // Race against timeout\n await Promise.race([\n flushPromise,\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n } catch (e) {\n if (this._config?.debugMode) {\n console.error(\"Error during Netra shutdown flush:\", e);\n }\n }\n\n this._initialized = false;\n this._tracer = undefined;\n }\n\n /**\n * Run a function with the root span as the active parent context.\n * All spans created within this function will be children of the root span.\n *\n * @param fn The function to run within the root span context\n * @returns The result of the function\n */\n static runWithRootSpan<T>(fn: () => T): T {\n const rootSpan = SessionManager.getRootSpan();\n if (!rootSpan) {\n console.warn(\n \"runWithRootSpan: No root span available. Running function without parent context.\",\n );\n return fn();\n }\n\n // Create a context with the root span and run the function within it\n const ctxWithRoot = trace.setSpan(context.active(), rootSpan);\n return context.with(ctxWithRoot, fn);\n }\n\n /**\n * Run an async function with the root span as the active parent context.\n * All spans created within this function will be children of the root span.\n *\n * @param fn The async function to run within the root span context\n * @returns A promise that resolves with the result of the function\n */\n static async runWithRootSpanAsync<T>(fn: () => Promise<T>): Promise<T> {\n const rootSpan = SessionManager.getRootSpan();\n if (!rootSpan) {\n console.warn(\n \"runWithRootSpanAsync: No root span available. Running function without parent context.\",\n );\n return fn();\n }\n\n // Create a context with the root span and run the function within it\n const ctxWithRoot = trace.setSpan(context.active(), rootSpan);\n return context.with(ctxWithRoot, fn);\n }\n\n /**\n * Run a function within an isolated entity context.\n * This ensures that entity stacks (workflow, task, agent, span) are isolated\n * per request in concurrent environments.\n *\n * Note: Session context (session_id, user_id, tenant_id) is automatically\n * isolated via OpenTelemetry's baggage API and AsyncLocalStorage.\n * This method is primarily needed if you're using workflow/task/agent decorators\n * or span wrappers in concurrent environments.\n *\n * @param fn The function to run with isolated entity context\n * @returns The result of the function\n *\n */\n static runWithContext<T>(fn: () => T): T {\n return runWithEntityContext(fn);\n }\n\n /**\n * Set session_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n *\n * Context automatically propagates across async boundaries in concurrent environments\n * thanks to AsyncLocalStorage in @opentelemetry/sdk-node.\n */\n static setSessionId(sessionId: string): void {\n if (typeof sessionId !== \"string\") {\n console.error(\n `setSessionId: sessionId must be a string, got ${typeof sessionId}`,\n );\n return;\n }\n if (sessionId) {\n // Store in OpenTelemetry baggage - automatically propagates across async boundaries\n setSessionBaggage(\"session_id\", sessionId);\n SessionManager.setSessionContext(\"session_id\", sessionId);\n } else {\n console.warn(\n \"setSessionId: Session ID must be provided for setting session_id.\",\n );\n }\n }\n\n /**\n * Set user_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setUserId(userId: string): void {\n if (typeof userId !== \"string\") {\n console.error(`setUserId: userId must be a string, got ${typeof userId}`);\n return;\n }\n if (userId) {\n // Store in OpenTelemetry baggage - automatically propagates across async boundaries\n setSessionBaggage(\"user_id\", userId);\n SessionManager.setSessionContext(\"user_id\", userId);\n } else {\n console.warn(\"setUserId: User ID must be provided for setting user_id.\");\n }\n }\n\n /**\n * Set tenant_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setTenantId(tenantId: string): void {\n if (typeof tenantId !== \"string\") {\n console.error(\n `setTenantId: tenantId must be a string, got ${typeof tenantId}`,\n );\n return;\n }\n if (tenantId) {\n // Store in OpenTelemetry baggage - automatically propagates across async boundaries\n setSessionBaggage(\"tenant_id\", tenantId);\n SessionManager.setSessionContext(\"tenant_id\", tenantId);\n } else {\n console.warn(\n \"setTenantId: Tenant ID must be provided for setting tenant_id.\",\n );\n }\n }\n\n /**\n * Set a custom attribute on the current active span\n */\n static setCustomAttributes(key: string, value: any): void {\n if (key && value !== undefined && value !== null) {\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.custom.${key}`,\n value,\n );\n } else {\n console.warn(\n \"Both key and value must be provided for custom attributes.\",\n );\n }\n }\n\n /**\n * Set custom event in the current active span\n */\n static setCustomEvent(\n eventName: string,\n attributes: Record<string, any>,\n ): void {\n if (eventName && attributes) {\n SessionManager.setCustomEvent(eventName, attributes);\n } else {\n console.warn(\n \"Both eventName and attributes must be provided for custom events.\",\n );\n }\n }\n\n /**\n * Append a conversation entry to the current active span\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n SessionManager.addConversation(conversationType, role, content);\n }\n\n /**\n * Start a new span\n */\n static startSpan(\n name: string,\n attributes: Record<string, string> = {},\n moduleName: string = \"netra_sdk\",\n asType: SpanType = SpanType.SPAN,\n ): SpanWrapper {\n // Pass the effective tracer derived from the provider we control\n return new SpanWrapper(\n name,\n attributes,\n moduleName,\n asType,\n this._tracer,\n ).start();\n }\n\n static withBlockedSpansLocal = withBlockedSpansLocal;\n}\n\n// Default export\nexport default Netra;\n"]}
1
+ {"version":3,"sources":["../src/logger.ts","../src/api/http-client.ts","../src/api/usage/client.ts","../src/api/usage/api.ts","../src/config.ts","../src/utils/pattern-matching.ts","../src/processors/localfiltering-span-processor.ts","../src/processors/root-span-processor.ts","../src/types.ts","../src/session-manager.ts","../src/span-wrapper.ts","../src/api/evaluation/client.ts","../src/api/evaluation/utils.ts","../src/api/evaluation/api.ts","../src/api/evaluation/models.ts","../src/api/evaluation/context.ts","../src/api/dashboard/client.ts","../src/api/dashboard/models.ts","../src/api/dashboard/api.ts","../src/api/prompts/client.ts","../src/api/prompts/api.ts","../src/processors/instrumentation-span-processor.ts","../src/processors/llm-trace-identifier-span-processor.ts","../src/processors/scrubbing-span-processor.ts","../src/processors/session-span-processor.ts","../src/processors/root-instrument-filter-processor.ts","../src/processors/span-io-processor.ts","../src/instrumentation/span-attributes.ts","../src/instrumentation/utils.ts","../src/instrumentation/anthropic/utils.ts","../src/instrumentation/anthropic/version.ts","../src/instrumentation/anthropic/wrappers.ts","../src/instrumentation/anthropic/index.ts","../src/instrumentation/google-genai/version.ts","../src/instrumentation/google-genai/utils.ts","../src/instrumentation/google-genai/wrappers.ts","../src/instrumentation/google-genai/index.ts","../src/instrumentation/groq/version.ts","../src/instrumentation/groq/utils.ts","../src/instrumentation/groq/wrappers.ts","../src/instrumentation/groq/index.ts","../src/instrumentation/langgraph/version.ts","../node_modules/@langchain/core/dist/_virtual/rolldown_runtime.js","../node_modules/@langchain/core/src/load/map_keys.ts","../node_modules/@langchain/core/src/load/validation.ts","../node_modules/@langchain/core/src/load/serializable.ts","../node_modules/@langchain/core/src/utils/env.ts","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/index.ts","../src/instrumentation/mistralai/version.ts","../src/instrumentation/mistralai/utils.ts","../src/instrumentation/mistralai/wrappers.ts","../src/instrumentation/mistralai/index.ts","../src/instrumentation/openai/version.ts","../src/instrumentation/openai/utils.ts","../src/instrumentation/openai/wrappers.ts","../src/instrumentation/openai/index.ts","../src/instrumentation/openai-agents/constants.ts","../src/instrumentation/openai-agents/utils.ts","../src/instrumentation/openai-agents/attributes.ts","../src/instrumentation/openai-agents/processor.ts","../src/instrumentation/openai-agents/version.ts","../src/instrumentation/openai-agents/index.ts","../src/instrumentation/typeorm/utils.ts","../src/instrumentation/typeorm/wrappers.ts","../src/instrumentation/typeorm/version.ts","../src/instrumentation/typeorm/index.ts","../src/exporters/utils.ts","../src/exporters/filteringSpanExporter.ts","../src/exporters/trialAwareOtlpExporter.ts","../src/instrumentation/index.ts","../src/simulation/client.ts","../src/simulation/task.ts","../src/simulation/utils.ts","../src/simulation/api.ts","../src/tracer.ts","../src/decorators.ts","../src/index.ts"],"names":["config","trace","span","NetraInstruments","isEmpty","otelContext","SpanType","ConversationType","context","propagation","task","EntryStatus","RunStatus","SpanKind","Scope","ChartType","Measure","Aggregation","GroupBy","DimensionField","Operator","FilterType","FilterField","SpanAttributes","setRequestAttributes","setResponseAttributes","SpanStatusCode","value","__version__","safeStringify","isTraceContentEnabled","CHAT_SPAN_NAME","chatWrapper","INSTRUMENTATION_NAME","INSTRUMENTS","isInstrumented","STREAM_ENABLED_REQUESTS","AsyncStreamingWrapper","originalMethods","key: string","map?: SerializedKeyAlias","snakeCase","fields: SerializedFields","mapper: typeof keyToJson","mapped: SerializedFields","obj: Record<string, unknown>","obj: unknown","id: string[]","value: unknown","pathSet: WeakSet<object>","result: Record<string, unknown>","obj: T","root: SerializedFields","secretsMap: { [key: string]: string }","current: any","serializableClass: typeof Serializable","Serializable","kwargs?: SerializedFields","aliases: { [key: string]: string }","secrets: { [key: string]: string }","read: any","write: any","escapedKwargs: SerializedFields","env: string","runtimeEnvironment: RuntimeEnvironment | undefined","name: string","x: BaseCallbackHandler","input?: BaseCallbackHandlerInput","methods: CallbackHandlerMethods","x: unknown","getContextManager","EMBEDDING_SPAN_NAME","endTime","StreamingWrapper","chatStreamWrapper","embeddingsWrapper","openAIClasses","setUsageAttributes","createRequire","require","ExportResultCode","BaggagePropagator","blockInstruments","resolved","instruments","LOG_PREFIX","executeTask","Tracer","serializeValue","tracer"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Centralized logger for the Netra SDK.\n *\n * Call Logger.setDebugMode(true) once during Netra.init() so all modules\n * automatically respect the configured debug flag without passing Config around.\n */\n\nconst PREFIX = \"[Netra]\";\n\nexport class Logger {\n private static _debugMode = false;\n\n static setDebugMode(enabled: boolean): void {\n this._debugMode = enabled;\n }\n\n private static get isDebug(): boolean {\n return (\n this._debugMode ||\n [\"1\", \"true\"].includes((process.env.NETRA_DEBUG ?? \"\").toLowerCase())\n );\n }\n\n static debug(...args: any[]): void {\n if (this.isDebug) console.debug(PREFIX, ...args);\n }\n\n static info(...args: any[]): void {\n if (this.isDebug) console.info(PREFIX, ...args);\n }\n\n static warn(...args: any[]): void {\n if (this.isDebug) console.warn(PREFIX, ...args);\n }\n\n static error(...args: any[]): void {\n console.error(PREFIX, ...args);\n }\n\n static log(...args: any[]): void {\n if (this.isDebug) console.log(PREFIX, ...args);\n }\n}\n","/**\n * Base HTTP client for Netra API calls\n */\n\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n headers: Record<string, string>;\n timeout: number;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n ok: boolean;\n}\n\nexport class NetraHttpClient {\n private baseUrl: string;\n private headers: Record<string, string>;\n private timeout: number;\n private initialized: boolean = false;\n\n constructor(config: Config, timeoutEnvVar: string, defaultTimeout: number) {\n const endpoint = config.otlpEndpoint?.trim() || \"\";\n if (!endpoint) {\n Logger.error(\n \"netra: NETRA_OTLP_ENDPOINT is required for API calls\"\n );\n this.baseUrl = \"\";\n this.headers = {};\n this.timeout = defaultTimeout;\n return;\n }\n\n this.baseUrl = this.resolveBaseUrl(endpoint);\n this.headers = this.buildHeaders(config);\n this.timeout = this.getTimeout(timeoutEnvVar, defaultTimeout);\n this.initialized = true;\n }\n\n private resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.replace(/\\/+$/, \"\");\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n private buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n headers[\"Content-Type\"] = \"application/json\";\n return headers;\n }\n\n private getTimeout(envVar: string, defaultValue: number): number {\n const envValue = process.env[envVar];\n if (!envValue) {\n return defaultValue;\n }\n const parsed = parseFloat(envValue);\n if (isNaN(parsed)) {\n Logger.warn(\n `netra: Invalid ${envVar} value '${envValue}', using default ${defaultValue}`\n );\n return defaultValue;\n }\n return parsed;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async get<T = any>(\n path: string,\n params?: Record<string, string | number | undefined>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: this.headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: GET ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n async post<T = any>(\n path: string,\n body?: Record<string, any>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"POST\",\n headers: this.headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: POST ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n /**\n * Extract data from nested response format\n * Netra API typically returns { data: { data: actualData } }\n */\n extractData<T>(response: HttpResponse<any>, defaultValue: T): T {\n if (!response.ok) {\n return defaultValue;\n }\n const data = response.data;\n if (data && typeof data === \"object\" && \"data\" in data) {\n return data.data ?? defaultValue;\n }\n return data ?? defaultValue;\n }\n}\n","/**\n * Internal HTTP client for Usage APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class UsageHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_USAGE_TIMEOUT\", 10.0);\n }\n\n async getSessionUsage(\n sessionId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch session usage '${sessionId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/sessions/${sessionId}`, params);\n return this.extractData(response, {});\n }\n\n async getTenantUsage(\n tenantId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch tenant usage '${tenantId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/tenants/${tenantId}`, params);\n return this.extractData(response, {});\n }\n\n async listTraces(params: {\n startTime?: string;\n endTime?: string;\n traceId?: string;\n sessionId?: string;\n userId?: string;\n tenantId?: string;\n limit?: number;\n cursor?: string;\n direction?: string;\n sortField?: string;\n sortOrder?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\"netra.usage: Usage client is not initialized; cannot list traces\");\n return {};\n }\n\n const payload: Record<string, any> = {};\n\n if (params.startTime) payload.startTime = params.startTime;\n if (params.endTime) payload.endTime = params.endTime;\n\n // Build filters array\n const filters: Array<{\n field: string;\n operator: string;\n type: string;\n value: string;\n }> = [];\n\n const filterMapping: Record<string, string | undefined> = {\n trace_id: params.traceId,\n session_id: params.sessionId,\n user_id: params.userId,\n tenant_id: params.tenantId,\n };\n\n for (const [field, value] of Object.entries(filterMapping)) {\n if (value !== undefined) {\n filters.push({\n field,\n operator: \"equals\",\n type: \"string\",\n value,\n });\n }\n }\n\n payload.filters = filters;\n\n // Build pagination object\n const pagination: Record<string, any> = {};\n if (params.limit !== undefined) pagination.limit = params.limit;\n if (params.cursor !== undefined) pagination.cursor = params.cursor;\n if (params.direction !== undefined) pagination.direction = params.direction;\n if (Object.keys(pagination).length > 0) {\n payload.pagination = pagination;\n }\n\n if (params.sortField !== undefined) payload.sortField = params.sortField;\n if (params.sortOrder !== undefined) payload.sortOrder = params.sortOrder;\n\n const response = await this.post(\"/sdk/traces\", payload);\n return response.ok ? response.data : {};\n }\n\n async listSpansByTraceId(params: {\n traceId: string;\n cursor?: string;\n direction?: string;\n limit?: number;\n spanName?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot list spans for trace '${params.traceId}'`\n );\n return {};\n }\n\n const queryParams: Record<string, string | number | undefined> = {};\n if (params.cursor !== undefined) queryParams.cursor = params.cursor;\n if (params.direction !== undefined) queryParams.direction = params.direction;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.spanName !== undefined) queryParams.spanName = params.spanName;\n\n const response = await this.get(\n `/sdk/traces/${params.traceId}/spans`,\n queryParams\n );\n return response.ok ? response.data : {};\n }\n}\n","/**\n * Public Usage API\n * Exposed as Netra.usage\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { UsageHttpClient } from \"./client\";\nimport {\n ListSpansParams,\n ListTracesParams,\n SessionUsageData,\n SpansPage,\n TenantUsageData,\n TraceSpan,\n TracesPage,\n TraceSummary,\n} from \"./models\";\n\nexport class Usage {\n private config: Config;\n private client: UsageHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new UsageHttpClient(config);\n }\n\n /**\n * Get session usage data\n * @param sessionId Session identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Session usage data or null on error\n */\n async getSessionUsage(\n sessionId: string,\n startTime: string,\n endTime: string\n ): Promise<SessionUsageData | null> {\n if (!sessionId) {\n Logger.error(\"netra.usage: session_id is required to fetch session usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch session usage\"\n );\n return null;\n }\n\n const result = await this.client.getSessionUsage(sessionId, startTime, endTime);\n const sessionIdFromResult = result.session_id;\n if (!sessionIdFromResult) {\n return null;\n }\n\n return {\n sessionId: sessionIdFromResult,\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * Get tenant usage data\n * @param tenantId Tenant identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Tenant usage data or null on error\n */\n async getTenantUsage(\n tenantId: string,\n startTime: string,\n endTime: string\n ): Promise<TenantUsageData | null> {\n if (!tenantId) {\n Logger.error(\"netra.usage: tenant_id is required to fetch tenant usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch tenant usage\"\n );\n return null;\n }\n\n const result = await this.client.getTenantUsage(tenantId, startTime, endTime);\n const tenantIdFromResult = result.tenant_id;\n if (!tenantIdFromResult) {\n return null;\n }\n\n return {\n tenantId: tenantIdFromResult,\n organisationId: result.organisation_id ?? \"\",\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n sessionCount: result.sessionsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * List all traces\n * @param params List traces parameters\n * @returns Traces page or null on error\n */\n async listTraces(params: ListTracesParams): Promise<TracesPage | null> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to list traces\");\n return null;\n }\n\n const result = await this.client.listTraces({\n startTime: params.startTime,\n endTime: params.endTime,\n traceId: params.traceId,\n sessionId: params.sessionId,\n userId: params.userId,\n tenantId: params.tenantId,\n limit: params.limit,\n cursor: params.cursor,\n direction: params.direction,\n sortField: params.sortField,\n sortOrder: params.sortOrder,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const traces: TraceSummary[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSummary(item));\n\n return {\n traces,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * List all spans for a given trace\n * @param params List spans parameters\n * @returns Spans page or null on error\n */\n async listSpansByTraceId(params: ListSpansParams): Promise<SpansPage | null> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to list spans\");\n return null;\n }\n\n const result = await this.client.listSpansByTraceId({\n traceId: params.traceId,\n cursor: params.cursor,\n direction: params.direction,\n limit: params.limit,\n spanName: params.spanName,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const spans: TraceSpan[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSpan(item));\n\n return {\n spans,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * Iterate over traces using cursor-based pagination\n * @param params List traces parameters\n * @returns Async generator yielding TraceSummary items\n */\n async *iterTraces(\n params: ListTracesParams\n ): AsyncGenerator<TraceSummary, void, unknown> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to iterate traces\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listTraces({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const trace of page.traces) {\n yield trace;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n /**\n * Iterate over spans for a given trace using cursor-based pagination\n * @param params List spans parameters\n * @returns Async generator yielding TraceSpan items\n */\n async *iterSpansByTraceId(\n params: ListSpansParams\n ): AsyncGenerator<TraceSpan, void, unknown> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to iterate spans\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listSpansByTraceId({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const span of page.spans) {\n yield span;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n private mapToTraceSummary(item: any): TraceSummary {\n return {\n id: item.id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n latencyMs: item.latency_ms ?? 0,\n startTime: item.start_time ?? \"\",\n endTime: item.end_time ?? \"\",\n cursor: item.cursor ?? \"\",\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n models: item.models,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n hasViolation: item.has_violation,\n violations: item.violations,\n hasError: item.has_error,\n service: item.service,\n };\n }\n\n private mapToTraceSpan(item: any): TraceSpan {\n return {\n id: item.id ?? \"\",\n traceId: item.trace_id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n parentSpanId: item.parent_span_id,\n latencyMs: item.latency_ms,\n startTimeMs: item.start_time_ms,\n endTimeMs: item.end_time_ms,\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n modelName: item.model_name,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n piiActions: item.pii_actions,\n hasViolation: item.has_violation,\n violations: item.violations,\n violationActions: item.violation_actions,\n status: item.status,\n attributes: item.attributes,\n events: item.events,\n links: item.links,\n resources: item.resources,\n metadata: item.metadata,\n hasError: item.has_error,\n createdAt: item.created_at ?? \"\",\n cursor: item.cursor ?? \"\",\n };\n }\n}\n","/**\n * Configuration management for Netra SDK\n */\n\nimport { Logger } from \"./logger\";\n\nexport interface NetraConfig {\n appName?: string;\n headers?: string | Record<string, string>;\n disableBatch?: boolean;\n traceContent?: boolean;\n debugMode?: boolean;\n enableRootSpan?: boolean;\n resourceAttributes?: Record<string, any>;\n environment?: string;\n enableScrubbing?: boolean;\n blockedSpans?: string[];\n instruments?: Set<NetraInstruments>;\n blockInstruments?: Set<NetraInstruments>;\n rootInstruments?: Set<NetraInstruments>;\n}\n\nexport enum NetraInstruments {\n /**\n * Sentinel value: when included in `instruments` or `rootInstruments`,\n * restores the legacy behaviour where every available instrumentation is\n * enabled automatically (no curated default list is applied).\n */\n ALL = \"__all__\",\n\n // LLM Providers\n OPENAI = \"openai\",\n GOOGLE_GENERATIVE_AI = \"google_genai\",\n MISTRAL = \"mistral_ai\",\n GROQ = \"groq\",\n VERTEX_AI = \"vertexai\",\n TOGETHER = \"together\",\n ANTHROPIC = \"anthropic\",\n\n // AI Frameworks\n LANGCHAIN = \"langchain\",\n LANGGRAPH = \"langgraph\",\n LLAMA_INDEX = \"llama_index\",\n OPENAI_AGENTS = \"openai_agents\",\n\n // Vector DBs\n PINECONE = \"pinecone\",\n QDRANT = \"qdrant\",\n CHROMADB = \"chromadb\",\n\n // HTTP Clients\n HTTP = \"http\",\n\n // Databases\n PRISMA = \"prisma\",\n TYPEORM = \"typeorm\",\n\n // Web Frameworks\n EXPRESS = \"express\",\n}\n\n/**\n * Subset of DEFAULT_INSTRUMENTS allowed to produce root-level spans.\n * Covers core LLM/AI providers and agent frameworks.\n */\nexport const DEFAULT_INSTRUMENTS_FOR_ROOT: Set<NetraInstruments> = new Set([\n // LLM / AI providers\n NetraInstruments.OPENAI,\n NetraInstruments.ANTHROPIC,\n NetraInstruments.GROQ,\n NetraInstruments.MISTRAL,\n NetraInstruments.GOOGLE_GENERATIVE_AI,\n NetraInstruments.VERTEX_AI,\n NetraInstruments.TOGETHER,\n // AI frameworks\n NetraInstruments.LANGCHAIN,\n NetraInstruments.LANGGRAPH,\n NetraInstruments.LLAMA_INDEX,\n]);\n\n/**\n * Full set of instrumentations installed by default. Includes the root\n * defaults plus common vector DBs, HTTP clients, and database libraries.\n */\nexport const DEFAULT_INSTRUMENTS: Set<NetraInstruments> = new Set([\n ...DEFAULT_INSTRUMENTS_FOR_ROOT,\n // Vector DBs\n NetraInstruments.PINECONE,\n NetraInstruments.QDRANT,\n NetraInstruments.CHROMADB,\n // HTTP\n NetraInstruments.HTTP,\n // Databases\n NetraInstruments.PRISMA,\n NetraInstruments.TYPEORM,\n // Web Frameworks\n NetraInstruments.EXPRESS,\n]);\n\nexport class Config {\n static readonly SDK_NAME = \"netra\";\n static readonly LIBRARY_NAME = \"netra\";\n static readonly LIBRARY_VERSION = \"1.0.0\";\n static readonly TRIAL_BLOCK_DURATION_SECONDS = 900; // 15 minutes\n static readonly ATTRIBUTE_MAX_LEN = parseInt(\n process.env.NETRA_ATTRIBUTE_MAX_LEN || \"50000\",\n );\n static readonly CONVERSATION_MAX_LEN = parseInt(\n process.env.NETRA_CONVERSATION_CONTENT_MAX_LEN || \"50000\",\n );\n\n appName: string;\n otlpEndpoint?: string;\n apiKey?: string;\n headers: Record<string, string>;\n disableBatch: boolean;\n traceContent: boolean;\n debugMode: boolean;\n enableRootSpan: boolean;\n enableScrubbing: boolean;\n environment: string;\n resourceAttributes: Record<string, any>;\n blockedSpans?: string[];\n\n constructor(config: NetraConfig = {}) {\n this.appName = this._getAppName(config.appName);\n this.otlpEndpoint = this._getOtlpEndpoint();\n this.apiKey = process.env.NETRA_API_KEY;\n this.headers = this._parseHeaders(config.headers);\n this.disableBatch = this._getBoolConfig(\n config.disableBatch,\n \"NETRA_DISABLE_BATCH\",\n false,\n );\n this.traceContent = this._getBoolConfig(\n config.traceContent,\n \"NETRA_TRACE_CONTENT\",\n true,\n );\n this.debugMode = this._getBoolConfig(\n config.debugMode,\n \"NETRA_DEBUG\",\n false,\n );\n this.enableRootSpan = this._getBoolConfig(\n config.enableRootSpan,\n \"NETRA_ENABLE_ROOT_SPAN\",\n false,\n );\n this.enableScrubbing = this._getBoolConfig(\n config.enableScrubbing,\n \"NETRA_ENABLE_SCRUBBING\",\n false,\n );\n this.environment = config.environment || process.env.NETRA_ENV || \"local\";\n this.resourceAttributes = this._getResourceAttributes(\n config.resourceAttributes,\n );\n this.blockedSpans = config.blockedSpans;\n\n this._validateApiKey();\n this._setupAuthentication();\n this._setTraceContentEnv();\n }\n\n private _getAppName(appName?: string): string {\n return (\n appName ||\n process.env.NETRA_APP_NAME ||\n process.env.OTEL_SERVICE_NAME ||\n process.env.npm_package_name ||\n \"llm_tracing_service\"\n );\n }\n\n private _getOtlpEndpoint(): string | undefined {\n return (\n process.env.NETRA_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT\n );\n }\n\n private _parseHeaders(\n headers?: string | Record<string, string>,\n ): Record<string, string> {\n if (!headers) {\n const envHeaders = process.env.NETRA_HEADERS;\n if (envHeaders) {\n return this._parseEnvHeaders(envHeaders);\n }\n return {};\n }\n\n if (typeof headers === \"string\") {\n return this._parseEnvHeaders(headers);\n }\n\n return headers;\n }\n\n private _parseEnvHeaders(headers: string): Record<string, string> {\n const result: Record<string, string> = {};\n const pairs = headers.split(\",\");\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split(\"=\");\n if (key && valueParts.length > 0) {\n result[key.trim()] = valueParts.join(\"=\").trim();\n }\n }\n return result;\n }\n\n private _validateApiKey(): void {\n if (\n this.otlpEndpoint &&\n this.otlpEndpoint.toLowerCase().includes(\"getnetra\") &&\n !this.apiKey\n ) {\n Logger.error(\n \"Error: Missing Netra API key, go to netra dashboard to create one\",\n );\n Logger.error(\"Set the NETRA_API_KEY environment variable to the key\");\n }\n }\n\n private _setupAuthentication(): void {\n if (!this.apiKey || !this.otlpEndpoint) {\n return;\n }\n\n const isNetra = this.otlpEndpoint.toLowerCase().includes(\"getnetra\");\n const authKey = isNetra ? \"x-api-key\" : \"Authorization\";\n const authValue = isNetra ? this.apiKey : `Bearer ${this.apiKey}`;\n\n if (!this.headers[authKey]) {\n this.headers[authKey] = authValue;\n }\n }\n\n private _getBoolConfig(\n param: boolean | undefined,\n envVar: string,\n defaultValue: boolean,\n ): boolean {\n if (param !== undefined) {\n return param;\n }\n\n const envValue = process.env[envVar];\n if (envValue === undefined) {\n return defaultValue;\n }\n\n return [\"1\", \"true\"].includes(envValue.toLowerCase());\n }\n\n private _getResourceAttributes(\n resourceAttributes?: Record<string, any>,\n ): Record<string, any> {\n if (resourceAttributes !== undefined) {\n return resourceAttributes;\n }\n\n const envRa = process.env.NETRA_RESOURCE_ATTRS;\n if (!envRa) {\n return {};\n }\n\n try {\n return JSON.parse(envRa);\n } catch (e) {\n Logger.warn(`Failed to parse NETRA_RESOURCE_ATTRS: ${e}`);\n return {};\n }\n }\n\n private _setTraceContentEnv(): void {\n process.env.TRACELOOP_TRACE_CONTENT = this.traceContent ? \"true\" : \"false\";\n }\n\n /**\n * Format the OTLP endpoint URL by appending /v1/traces if not already present\n */\n public formatOtlpEndpoint(): any {\n if (!this.otlpEndpoint) {\n return undefined;\n }\n\n const url = this.otlpEndpoint.trim();\n\n // Remove trailing slash if present\n const cleanUrl = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n\n // Append /v1/traces if not already present\n if (!cleanUrl.endsWith(\"/v1/traces\")) {\n return `${cleanUrl}/v1/traces`;\n }\n\n return cleanUrl;\n }\n\n /**\n * Set Traceloop environment variables based on Netra config.\n * This ensures the Traceloop SDK picks up our configuration.\n */\n public setTraceloopEnv(): void {\n // Set TRACELOOP_BASE_URL so Traceloop SDK uses our endpoint\n if (this.otlpEndpoint && !process.env.TRACELOOP_BASE_URL) {\n process.env.TRACELOOP_BASE_URL = this.otlpEndpoint;\n }\n\n // Set TRACELOOP_API_KEY if we have one\n if (this.apiKey && !process.env.TRACELOOP_API_KEY) {\n process.env.TRACELOOP_API_KEY = this.apiKey;\n }\n\n // Set headers for Traceloop\n if (\n Object.keys(this.headers).length > 0 &&\n !process.env.TRACELOOP_HEADERS\n ) {\n const headerStr = Object.entries(this.headers)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n process.env.TRACELOOP_HEADERS = headerStr;\n }\n }\n}\n","/**\n * Shared span-name pattern matching utilities for span blocking.\n *\n * Pattern forms, determined by the position of `*`:\n * - Exact: \"openai.chat\" → name === \"openai.chat\"\n * - Prefix: \"openai.*\" → name.startsWith(\"openai.\")\n * - Suffix: \"*.chat\" → name.endsWith(\".chat\")\n * - Contains: \"*openai*\" → name.includes(\"openai\")\n * - Wildcard: \"*\" → matches everything\n */\n\nexport interface CompiledPatterns {\n matchAll: boolean;\n exact: Set<string>;\n prefixes: string[];\n suffixes: string[];\n contains: string[];\n isEmpty: boolean;\n}\n\n/**\n * Compile a list of raw pattern strings into a CompiledPatterns object.\n * Empty strings are skipped.\n */\nexport function compilePatterns(patterns: string[]): CompiledPatterns {\n const exact = new Set<string>();\n const prefixes: string[] = [];\n const suffixes: string[] = [];\n const contains: string[] = [];\n let matchAll = false;\n\n for (const p of patterns) {\n if (!p) continue;\n\n if (p === \"*\") {\n matchAll = true;\n } else if (p.startsWith(\"*\") && p.endsWith(\"*\")) {\n const inner = p.slice(1, -1);\n if (inner) contains.push(inner);\n } else if (p.endsWith(\"*\")) {\n prefixes.push(p.slice(0, -1));\n } else if (p.startsWith(\"*\")) {\n suffixes.push(p.slice(1));\n } else {\n exact.add(p);\n }\n }\n\n const isEmpty = !matchAll && exact.size === 0 && prefixes.length === 0 &&\n suffixes.length === 0 && contains.length === 0;\n\n return { matchAll, exact, prefixes, suffixes, contains, isEmpty };\n}\n\n/**\n * Test whether `name` matches any pattern in a compiled set.\n */\nexport function matchesAnyPattern(\n name: string,\n compiled: CompiledPatterns,\n): boolean {\n if (compiled.matchAll) return true;\n if (compiled.exact.has(name)) return true;\n\n for (const pref of compiled.prefixes) {\n if (name.startsWith(pref)) return true;\n }\n\n for (const suf of compiled.suffixes) {\n if (name.endsWith(suf)) return true;\n }\n\n for (const sub of compiled.contains) {\n if (name.includes(sub)) return true;\n }\n\n return false;\n}\n","import {\n context as otelContext,\n propagation,\n ROOT_CONTEXT,\n SpanContext,\n trace,\n} from \"@opentelemetry/api\";\nimport type { Baggage, Context, Span } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { compilePatterns, matchesAnyPattern, CompiledPatterns } from \"../utils/pattern-matching\";\n\nexport const LOCAL_BLOCKED_SPANS_BAGGAGE_KEY = \"netra.local_blocked_spans\";\nexport const LOCAL_BLOCKED_SPANS_ATTR_KEY = \"netra.local_blocked_spans\";\n\nfunction decodePatterns(raw: string): string[] | null {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === \"string\")) {\n return parsed.filter(Boolean);\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T>,\n): Promise<T>;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => T,\n): T;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T> | T,\n): Promise<T> | T {\n const incoming = patterns.filter(Boolean);\n const activeCtx = otelContext.active();\n\n const baggage: Baggage =\n propagation.getBaggage(activeCtx) ??\n propagation.getBaggage(ROOT_CONTEXT) ??\n propagation.createBaggage();\n\n const existingRaw = baggage.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n const existingPatterns = existingRaw ? (decodePatterns(existingRaw) ?? []) : [];\n const merged = [...new Set([...existingPatterns, ...incoming])];\n const payload = JSON.stringify(merged);\n\n const nextBaggage = baggage.setEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY, {\n value: payload,\n });\n\n const nextCtx = propagation.setBaggage(activeCtx, nextBaggage);\n return otelContext.with(nextCtx, fn);\n}\n\nexport class LocalFilteringSpanProcessor implements SpanProcessor {\n private static readonly MAX_ENTRIES = 10_000;\n\n /**\n * Instance-scoped registry: spanId → parent SpanContext.\n *\n * Populated in onStart when a span's name matches blocking patterns\n * (both global and local). Shared with FilteringSpanExporter via\n * constructor injection (as a ReadonlyMap) for reparenting.\n *\n * Eviction is size-based (FIFO) rather than per-span onEnd deletion to\n * avoid a race condition: with SimpleSpanProcessor, onEnd fires before\n * export(), so deleting here would remove entries the exporter still needs.\n *\n * This map solves a timing problem with SimpleSpanProcessor: a child span may\n * be exported (and need reparenting) before its blocked parent is exported.\n * Pre-registering the blocked parent here lets the exporter find it immediately.\n */\n private readonly _blockedParentMap = new Map<string, SpanContext | undefined>();\n\n get blockedParentMap(): ReadonlyMap<string, SpanContext | undefined> {\n return this._blockedParentMap;\n }\n\n private readonly globalCompiled: CompiledPatterns;\n\n /** Cache for compiled local pattern sets from baggage. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 50;\n\n constructor(globalPatterns: string[] = []) {\n this.globalCompiled = compilePatterns(globalPatterns);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n // The OTel API `Span` interface does not expose `.name`, but the SDK's\n // concrete Span class (sdk-trace-base >=1.x) stores it as a public field.\n // This cast relies on that implementation detail.\n const name = (span as any).name as string | undefined;\n if (!name) return;\n\n let blocked = false;\n\n if (matchesAnyPattern(name, this.globalCompiled)) {\n blocked = true;\n }\n\n const bag = propagation.getBaggage(parentContext);\n const raw = bag?.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n\n if (raw) {\n const patterns = decodePatterns(raw);\n if (patterns && patterns.length > 0) {\n span.setAttribute(LOCAL_BLOCKED_SPANS_ATTR_KEY, patterns);\n\n const compiled = this.getCompiledLocalPatterns(raw, patterns);\n if (matchesAnyPattern(name, compiled)) {\n span.setAttribute(\"netra.local_blocked\", true);\n blocked = true;\n }\n }\n }\n\n if (blocked) {\n const spanId = span.spanContext().spanId;\n const parentSpan = trace.getSpan(parentContext);\n const parentSpanContext = parentSpan?.spanContext();\n this._blockedParentMap.set(spanId, parentSpanContext);\n this.evictIfNeeded();\n }\n } catch (e) {\n Logger.debug(\"LocalFilteringSpanProcessor.onStart error:\", e);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n // No-op: cleanup is handled by size-based eviction in onStart and by\n // FilteringSpanExporter.evictRememberedIfNeeded() to avoid race\n // conditions with out-of-order export batches.\n }\n\n shutdown(): Promise<void> {\n this._blockedParentMap.clear();\n this.localPatternCache.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private getCompiledLocalPatterns(cacheKey: string, patterns: string[]): CompiledPatterns {\n let compiled = this.localPatternCache.get(cacheKey);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(cacheKey, compiled);\n if (this.localPatternCache.size > LocalFilteringSpanProcessor.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictIfNeeded(): void {\n if (this._blockedParentMap.size <= LocalFilteringSpanProcessor.MAX_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-insertion eviction\n const toRemove = Math.max(\n this._blockedParentMap.size - LocalFilteringSpanProcessor.MAX_ENTRIES,\n Math.ceil(LocalFilteringSpanProcessor.MAX_ENTRIES * 0.25),\n );\n const keys = Array.from(this._blockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this._blockedParentMap.delete(key);\n }\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n/**\n * Tracks the root span for each trace keyed by traceId.\n * Exposes static helpers so other processors and session utilities\n * Register this processor AFTER LlmTraceIdentifierSpanProcessor so that\n * on_end cleanup happens after the LLM processor has finished marking the\n * root span.\n */\nexport class RootSpanProcessor implements SpanProcessor {\n private static readonly _rootSpans = new Map<string, Span>();\n\n static getRootSpanByTraceId(traceId: string): Span | undefined {\n return RootSpanProcessor._rootSpans.get(traceId);\n }\n\n static getRootSpan(span: Span): Span | undefined {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return undefined;\n return RootSpanProcessor._rootSpans.get(ctx.traceId);\n }\n\n static isRootSpanForTrace(traceId: string, spanId: string): boolean {\n const root = RootSpanProcessor._rootSpans.get(traceId);\n return root?.spanContext().spanId === spanId;\n }\n\n /**\n * Set an attribute on the root span of the currently active trace.\n * Resolves the root span via the active OTel context\n */\n static setAttributeOnRootSpan(key: string, value: string): void {\n try {\n const active = trace.getActiveSpan();\n if (!active) {\n Logger.warn(`setAttributeOnRootSpan: no active span`);\n return;\n }\n const spanCtx = active.spanContext();\n if (!trace.isSpanContextValid(spanCtx)) {\n Logger.warn(`setAttributeOnRootSpan: active span context is invalid`);\n return;\n }\n const root = RootSpanProcessor._rootSpans.get(spanCtx.traceId);\n if (!root) {\n Logger.warn(`setAttributeOnRootSpan: no root span found for current trace`);\n return;\n }\n root.setAttribute(key, value);\n } catch (e) {\n Logger.error(`setAttributeOnRootSpan: failed to set '${key}':`, e);\n }\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n if (!this._isRootSpan(parentContext)) return;\n // setdefault: first span with no valid parent wins\n if (!RootSpanProcessor._rootSpans.has(ctx.traceId)) {\n RootSpanProcessor._rootSpans.set(ctx.traceId, span);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onStart: unexpected error:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n const root = RootSpanProcessor._rootSpans.get(ctx.traceId);\n if (root?.spanContext().spanId === ctx.spanId) {\n RootSpanProcessor._rootSpans.delete(ctx.traceId);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onEnd: unexpected error:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n RootSpanProcessor._rootSpans.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isRootSpan(parentContext: Context | undefined): boolean {\n const parentSpan = parentContext ? trace.getSpan(parentContext) : undefined;\n if (!parentSpan) return true;\n const parentCtx = parentSpan.spanContext();\n return !parentCtx || !trace.isSpanContextValid(parentCtx);\n }\n}\n","/**\n * Type definitions for Netra SDK\n */\n\nimport { SpanWrapper } from \"./span-wrapper\";\n\nexport enum SpanType {\n SPAN = \"SPAN\",\n GENERATION = \"GENERATION\",\n TOOL = \"TOOL\",\n EMBEDDING = \"EMBEDDING\",\n AGENT = \"AGENT\",\n HANDOFF = \"HANDOFF\",\n GUARDRAIL = \"GUARDRAIL\",\n}\n\nexport enum ConversationType {\n INPUT = \"input\",\n OUTPUT = \"output\",\n}\n\nexport interface UsageModel {\n model: string;\n usage_type: string;\n units_used?: number;\n cost_in_usd?: number;\n}\n\nexport interface ActionModel {\n start_time: string;\n action: string;\n action_type: string;\n success: boolean;\n affected_records?: Array<{ record_id: string; record_type: string }>;\n metadata?: Record<string, string>;\n}\n\nexport type SpanAttributes = Record<string, string | string[] | boolean>;\n\nexport interface SpanOptions {\n attributes?: SpanAttributes;\n moduleName?: string;\n asType?: SpanType;\n /** Patterns for blocking descendant spans (e.g. [\"http.*\", \"*.resolve\"]) */\n blockedSpans?: string[];\n}\n\nexport interface DecoratorOptions {\n name?: string;\n asType?: SpanType;\n}\n\nexport type SpanCallback<T> = (span: SpanWrapper) => T;\n","/**\n * Session Manager — entity stack tracking and span annotation utilities.\n *\n * Uses AsyncLocalStorage for per-async-scope entity stacks (workflow, task,\n * agent, span) so concurrent requests stay isolated. All span resolution and\n * attribute writes delegate to OpenTelemetry's native APIs; no shadow copies\n * of spans are kept here.\n */\n\nimport { Span, context, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { RootSpanProcessor } from \"./processors/root-span-processor\";\nimport { ConversationType } from \"./types\";\n\nexport { ConversationType };\n\nconst MODULE_NAME = \"netra.session-manager\";\n\n/**\n * Per-async-scope state: entity name stacks and a name→span registry.\n * Deliberately minimal — live span references belong to OTel's context, not here.\n */\ninterface EntityContext {\n workflowStack: string[];\n taskStack: string[];\n agentStack: string[];\n spanStack: string[];\n spansByName: Map<string, Span[]>;\n}\n\nconst entityStorage = new AsyncLocalStorage<EntityContext>();\n\n// Global fallback for single-threaded / non-async entry points\nconst globalFallbackContext: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n};\n\nfunction getEntityContext(): EntityContext {\n return entityStorage.getStore() ?? globalFallbackContext;\n}\n\n/**\n * Run `fn` with a fresh, isolated entity context.\n * Use this when spawning concurrent async operations that should have\n * independent entity stacks.\n */\nexport function runWithEntityContext<T>(fn: () => T): T {\n const ctx: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n };\n return entityStorage.run(ctx, fn);\n}\n\n// Internal serialization\n\nfunction serializeValue(value: any): string {\n if (typeof value === \"string\") {\n return value.substring(0, Config.ATTRIBUTE_MAX_LEN);\n }\n return JSON.stringify(value).substring(0, Config.ATTRIBUTE_MAX_LEN);\n}\n\n// SessionManager\n\nexport class SessionManager {\n\n // Span registry (name → stack)\n\n static registerSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name) ?? [];\n stack.push(span);\n ctx.spansByName.set(name, stack);\n } catch (e) {\n Logger.error(`Failed to register span '${name}':`, e);\n }\n }\n\n static unregisterSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n if (!stack) return;\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i] === span) {\n stack.splice(i, 1);\n break;\n }\n }\n if (stack.length === 0) ctx.spansByName.delete(name);\n } catch (e) {\n Logger.error(`Failed to unregister span '${name}':`, e);\n }\n }\n\n static getSpanByName(name: string): Span | undefined {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n return stack?.length ? stack[stack.length - 1] : undefined;\n }\n\n // Entity stacks (workflow / task / agent / span)\n\n static pushEntity(entityType: string, entityName: string): void {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": ctx.workflowStack.push(entityName); break;\n case \"task\": ctx.taskStack.push(entityName); break;\n case \"agent\": ctx.agentStack.push(entityName); break;\n case \"span\": ctx.spanStack.push(entityName); break;\n }\n }\n\n static popEntity(entityType: string): string | undefined {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": return ctx.workflowStack.pop();\n case \"task\": return ctx.taskStack.pop();\n case \"agent\": return ctx.agentStack.pop();\n case \"span\": return ctx.spanStack.pop();\n default: return undefined;\n }\n }\n\n static getCurrentEntityAttributes(): Record<string, string> {\n const ctx = getEntityContext();\n const attrs: Record<string, string> = {};\n const last = <T>(arr: T[]) => arr[arr.length - 1];\n if (ctx.workflowStack.length) attrs[`${Config.LIBRARY_NAME}.workflow.name`] = last(ctx.workflowStack)!;\n if (ctx.taskStack.length) attrs[`${Config.LIBRARY_NAME}.task.name`] = last(ctx.taskStack)!;\n if (ctx.agentStack.length) attrs[`${Config.LIBRARY_NAME}.agent.name`] = last(ctx.agentStack)!;\n if (ctx.spanStack.length) attrs[`${Config.LIBRARY_NAME}.span.name`] = last(ctx.spanStack)!;\n return attrs;\n }\n\n static clearEntityStacks(): void {\n const ctx = getEntityContext();\n ctx.workflowStack = [];\n ctx.taskStack = [];\n ctx.agentStack = [];\n ctx.spanStack = [];\n }\n\n // OTel context helpers\n\n /**\n * Returns the trace ID of the currently active span, or undefined if none.\n */\n static getTraceId(): string | undefined {\n const ctx = trace.getActiveSpan()?.spanContext();\n return ctx && trace.isSpanContextValid(ctx) ? ctx.traceId : undefined;\n }\n\n // Span attribute writers\n\n /**\n * Set an attribute on the currently active OTel span.\n */\n static setAttributeOnActiveSpan(key: string, value: any): void {\n try {\n const span = trace.getActiveSpan();\n if (span?.isRecording()) {\n span.setAttribute(key, typeof value === \"string\" ? value : JSON.stringify(value));\n } else {\n Logger.warn(`setAttributeOnActiveSpan: no recording span for key '${key}'`);\n }\n } catch (e) {\n Logger.error(`Failed to set attribute '${key}' on active span:`, e);\n }\n }\n\n /**\n * Set input on the currently active span.\n * Writes to `netra.user.input` so that SpanIOProcessor can promote it\n * to `input` at span end, giving user-supplied values the highest priority.\n */\n static setInput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\"netra.user.input\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setInput failed:\", e);\n }\n }\n\n /**\n * Set output on the currently active span.\n * Writes to `netra.user.output` so that SpanIOProcessor can promote it\n * to `output` at span end, giving user-supplied values the highest priority.\n */\n static setOutput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\"netra.user.output\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setOutput failed:\", e);\n }\n }\n\n /**\n * Set input on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.input` so SpanIOProcessor promotes it at span end.\n */\n static setRootInput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\"netra.user.input\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setRootInput failed:\", e);\n }\n }\n\n /**\n * Set output on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.output` so SpanIOProcessor promotes it at span end.\n */\n static setRootOutput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\"netra.user.output\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setRootOutput failed:\", e);\n }\n }\n\n // Events and conversations\n\n static setCustomEvent(name: string, attributes: Record<string, any>): void {\n try {\n const span = trace.getActiveSpan();\n const timestamp = Date.now();\n if (span?.isRecording()) {\n span.addEvent(name, attributes, timestamp);\n } else {\n // Fallback: create a short-lived span to carry the event\n trace.getTracer(MODULE_NAME).startActiveSpan(\n `${Config.LIBRARY_NAME}.${name}`,\n { attributes },\n context.active(),\n (newSpan: Span) => {\n newSpan.addEvent(name, attributes, timestamp);\n newSpan.end();\n },\n );\n }\n } catch (e) {\n Logger.error(`setCustomEvent '${name}' failed:`, e);\n }\n }\n\n /**\n * Append a conversation entry to the active span's `conversation` attribute.\n *\n * Reads and re-serialises the existing JSON array so entries accumulate\n * rather than overwrite — matching the Python SDK's behaviour.\n * Writes directly to the span's internal attribute store to bypass OTel's\n * per-attribute length truncation on the final payload.\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n if (!role || !content) {\n Logger.error(\"addConversation: role and content must be provided\");\n return;\n }\n\n try {\n const span = trace.getActiveSpan();\n if (!span?.isRecording()) {\n Logger.warn(\"addConversation: no active recording span\");\n return;\n }\n\n // Read existing entries from the span's internal attribute store\n let existing: Array<{\n type: string;\n role: string;\n content: string | Record<string, any>;\n format: string;\n }> = [];\n try {\n const raw = (span as any)._attributes?.[\"conversation\"];\n if (typeof raw === \"string\") {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) existing = parsed;\n }\n } catch (e) {\n Logger.warn(\"addConversation: failed to parse existing conversation, starting fresh:\", e);\n }\n\n const maxLen = Config.CONVERSATION_MAX_LEN;\n const processedContent =\n typeof content === \"string\" ? content.substring(0, maxLen) : content;\n\n existing.push({\n type: conversationType,\n role,\n content: processedContent,\n format: typeof processedContent === \"string\" ? \"text\" : \"json\",\n });\n\n const payload = JSON.stringify(existing);\n\n // Bypass per-attribute truncation by writing to the internal store directly\n const internalAttrs = (span as any)._attributes;\n if (internalAttrs && typeof internalAttrs === \"object\") {\n internalAttrs[\"conversation\"] = payload;\n } else {\n span.setAttribute(\"conversation\", payload);\n }\n } catch (e) {\n Logger.error(\"addConversation failed:\", e);\n }\n }\n}\n","/**\n * Span Wrapper for custom span tracking\n */\n\nimport {\n context,\n propagation,\n Span,\n SpanKind,\n SpanStatusCode,\n trace,\n} from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { LOCAL_BLOCKED_SPANS_BAGGAGE_KEY } from \"./processors/localfiltering-span-processor\";\nimport { SessionManager } from \"./session-manager\";\nimport { ActionModel, SpanAttributes, SpanType, UsageModel } from \"./types\";\n\nexport class SpanWrapper {\n private name: string;\n private attributes: SpanAttributes;\n private moduleName: string;\n private startTime?: number;\n private endTime?: number;\n private status: string = \"pending\";\n private errorMessage?: string;\n private span?: Span;\n private activeContext?: ReturnType<typeof context.active>;\n private tracer?: any;\n private blockedSpanPatterns?: string[];\n\n constructor(\n name: string,\n attributes: SpanAttributes = {},\n moduleName: string = \"netra_sdk\",\n asType: SpanType = SpanType.SPAN,\n tracer?: any,\n blockedSpanPatterns?: string[],\n ) {\n this.name = name;\n this.attributes = { ...attributes };\n this.moduleName = moduleName;\n this.attributes[\"netra.span.type\"] = asType;\n this.tracer = tracer;\n this.blockedSpanPatterns = blockedSpanPatterns;\n }\n\n start(): this {\n this.startTime = Date.now();\n\n const tracer = this.tracer || trace.getTracer(this.moduleName);\n\n let ctx = context.active();\n\n if (this.blockedSpanPatterns && this.blockedSpanPatterns.length > 0) {\n const patterns = this.blockedSpanPatterns.filter(Boolean);\n if (patterns.length > 0) {\n const existingBaggage =\n propagation.getBaggage(ctx) ?? propagation.createBaggage();\n const existingRaw = existingBaggage.getEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n )?.value;\n const existingPatterns = this.decodeBaggagePatterns(existingRaw);\n const merged = [...new Set([...existingPatterns, ...patterns])];\n const payload = JSON.stringify(merged);\n const updatedBaggage = existingBaggage.setEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n { value: payload },\n );\n ctx = propagation.setBaggage(ctx, updatedBaggage);\n }\n }\n\n this.span = tracer.startSpan(\n this.name,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n ...this.attributes,\n \"netra.span.name\": this.name,\n },\n },\n ctx,\n );\n\n // Store the context with this span (and any baggage) so withActive()\n // propagates both parent-span and blocking baggage to child spans.\n if (this.span) {\n this.activeContext = trace.setSpan(ctx, this.span);\n SessionManager.registerSpan(this.name, this.span);\n }\n\n return this;\n }\n\n end(): this {\n this.endTime = Date.now();\n const durationMs =\n this.startTime && this.endTime\n ? (this.endTime - this.startTime) / 1000\n : undefined;\n\n if (durationMs !== undefined) {\n this.setAttribute(\n `${Config.LIBRARY_NAME}.duration_ms`,\n durationMs.toFixed(2),\n );\n }\n\n if (this.status === \"pending\") {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n this.setAttribute(`${Config.LIBRARY_NAME}.status`, this.status);\n\n if (this.span) {\n for (const [key, value] of Object.entries(this.attributes)) {\n if (value !== undefined) {\n this.span.setAttribute(key, value);\n }\n }\n\n SessionManager.unregisterSpan(this.name, this.span);\n this.span.end();\n }\n\n // Release the stored context so it can be GC'd\n this.activeContext = undefined;\n\n return this;\n }\n\n setAttribute(key: string, value: string | string[] | boolean): this {\n this.attributes[key] = value;\n if (this.span) {\n this.span.setAttribute(key, value);\n }\n return this;\n }\n\n /**\n * Run a function with this span set as the active span in the OTel context.\n * Child spans created inside `fn` will have this span as their parent and will\n * also inherit any blocking baggage set via `blockedSpans`. Works for both\n * sync and async functions — context.with() passes through the return value as-is.\n */\n withActive<T>(fn: () => T): T {\n if (!this.span) return fn();\n\n const ctx =\n this.activeContext ?? trace.setSpan(context.active(), this.span);\n return context.with(ctx, fn);\n }\n\n setPrompt(prompt: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.prompt`, prompt);\n }\n\n setNegativePrompt(negativePrompt: string): this {\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.negative_prompt`,\n negativePrompt,\n );\n }\n\n setUsage(usage: UsageModel[]): this {\n const usageJson = JSON.stringify(usage);\n return this.setAttribute(`${Config.LIBRARY_NAME}.usage`, usageJson);\n }\n\n setAction(action: ActionModel[]): this {\n const actionJson = JSON.stringify(action);\n return this.setAttribute(`${Config.LIBRARY_NAME}.action`, actionJson);\n }\n\n setModel(model: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.model`, model);\n }\n\n setLlmSystem(system: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.llm_system`, system);\n }\n\n setError(errorMessage: string): this {\n this.status = \"error\";\n this.errorMessage = errorMessage;\n if (this.span) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errorMessage,\n });\n }\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.error_message`,\n errorMessage,\n );\n }\n\n setSuccess(): this {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n return this;\n }\n\n addEvent(name: string, attributes?: Record<string, string>): this {\n if (this.span) {\n this.span.addEvent(name, attributes);\n }\n return this;\n }\n\n getCurrentSpan(): Span | undefined {\n return this.span;\n }\n\n private decodeBaggagePatterns(raw: string | undefined): string[] {\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.filter((v: unknown) => typeof v === \"string\" && v);\n }\n } catch {\n // ignore malformed baggage\n }\n return [];\n }\n}\n","/**\n * Internal HTTP client for Evaluation APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport { EntryStatus, EvaluationScore, RunStatus } from \"./models\";\n\nexport class EvaluationHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_EVALUATION_TIMEOUT\", 10.0);\n }\n\n /**\n * Fetch dataset items for a dataset id\n */\n async getDataset(datasetId: string): Promise<any[]> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot fetch dataset '${datasetId}'`,\n );\n return [];\n }\n\n const response = await this.get(`/evaluations/dataset/${datasetId}`);\n return this.extractData(response, []);\n }\n\n /**\n * Create a run for a dataset\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: Record<string, any>[],\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot create run for dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const payload = {\n name,\n datasetId,\n localEvaluators: evaluatorsConfig,\n };\n const response = await this.post(\"/evaluations/test_run\", payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Create an empty dataset and return backend data\n */\n async createDataset(name: string, tags?: string[]): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot create dataset\",\n );\n return { success: false };\n }\n\n const payload = {\n name,\n tags: tags ?? [],\n };\n\n const response = await this.post(\"/evaluations/dataset\", payload);\n \n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Add a single item to an existing dataset\n */\n async addDatasetItem(\n datasetId: string,\n itemPayload: Record<string, any>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot add item to dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const response = await this.post(\n `/evaluations/dataset/${datasetId}/items`,\n itemPayload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Fetch test run results by run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot fetch run\",\n );\n return { success: false };\n }\n\n try {\n const response = await this.get(`/evaluations/run/${runId}`);\n if (!response.ok) {\n const errorMessage =\n response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}': ${errorMessage}`,\n );\n return null;\n }\n const data = this.extractData(response, null);\n if (data !== null) {\n Logger.info(\"netra.evaluation: Run fetched successfully\");\n }\n return data;\n } catch {\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}'`,\n );\n return null;\n }\n }\n\n /**\n * Submit a new run item to the backend\n */\n async postRunItem(runId: string, payload: Record<string, any>): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run item\",\n );\n return { success: false };\n }\n\n const response = await this.post(`/evaluations/run/${runId}/item`, payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\" && \"item\" in data) {\n const runItem = data.item;\n if (runItem && typeof runItem === \"object\" && \"id\" in runItem) {\n return runItem.id;\n }\n }\n return data;\n }\n\n /**\n * Submit local evaluations result\n */\n async submitLocalEvaluations(\n runId: string,\n testRunItemId: string,\n evaluatorResults: Array<Record<string, any>>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot submit local evaluations\",\n );\n return { success: false };\n }\n\n const payload = { evaluatorResults };\n const response = await this.post(\n `/evaluations/run/${runId}/item/${testRunItemId}/local-evaluations`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Submit the run status\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run status\",\n );\n return { success: false };\n }\n\n const payload = { status };\n const response = await this.post(\n `/evaluations/run/${runId}/status`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\") {\n Logger.info(\"netra.evaluation: Completed test run successfully\");\n }\n return data;\n }\n\n /**\n * Check if a span exists in the backend\n */\n async getSpanById(spanId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot get span\",\n );\n return null;\n }\n\n try {\n const response = await this.get(`sdk/traces/spans/${spanId}`);\n if (!response.ok) {\n return null;\n }\n return this.extractData(response, null);\n } catch {\n return null;\n }\n }\n\n /**\n * Wait until a span is available in the backend\n * Polls the GET /spans/:id endpoint to verify span availability before running evaluators\n */\n async waitForSpanIngestion(\n spanId?: string,\n timeoutSeconds: number = 60.0,\n pollIntervalSeconds: number = 1.0,\n initialDelaySeconds: number = 0.5,\n ): Promise<boolean> {\n if (!spanId) {\n return false;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelaySeconds * 1000),\n );\n\n const deadline = Date.now() + timeoutSeconds * 1000;\n while (Date.now() < deadline) {\n const spanData = await this.getSpanById(spanId);\n if (spanData !== null) {\n return true;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, pollIntervalSeconds * 1000),\n );\n }\n\n return false;\n }\n}\n","/**\n * Evaluation Utility Functions\n */\n\nimport { propagation, context as otelContext } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { DatasetRecord, EvaluatorConfig, ItemContext } from \"./models\";\n\n/**\n * Get the session ID from the OpenTelemetry baggage\n */\nexport function getSessionIdFromBaggage(): string | undefined {\n const ctx = otelContext.active();\n const baggageObj = propagation.getBaggage(ctx);\n const sessionId = baggageObj?.getEntry(\"session_id\")?.value;\n if (typeof sessionId === \"string\" && sessionId) {\n return sessionId;\n }\n return undefined;\n}\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string\n */\nexport function formatTraceId(traceId: string): string {\n // Ensure it's 32 characters long, pad with zeros if needed\n return traceId.padStart(32, \"0\");\n}\n\n/**\n * Format the span ID as a 16-digit hexadecimal string\n */\nexport function formatSpanId(spanId: string): string {\n // Ensure it's 16 characters long, pad with zeros if needed\n return spanId.padStart(16, \"0\");\n}\n\n/**\n * Run a callable function that may be sync or async\n */\nexport async function runCallableMaybeAsync<T>(\n fn: (...args: any[]) => T | Promise<T>,\n ...args: any[]\n): Promise<T> {\n const result = fn(...args);\n if (result instanceof Promise) {\n return await result;\n }\n return result;\n}\n\n/**\n * Extract evaluator configuration from an evaluator object\n */\nexport function extractEvaluatorConfig(evaluator: any): EvaluatorConfig | null {\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"config\" in evaluator)\n ) {\n return null;\n }\n\n const config = evaluator.config;\n\n if (!config || typeof config !== \"object\") {\n return null;\n }\n\n return config as EvaluatorConfig;\n}\n\n/**\n * Execute a task function (sync or async) and return (output, status)\n */\nexport async function executeTask(\n task: (input: any) => any | Promise<any>,\n itemInput: any,\n): Promise<{ output: any; status: string }> {\n try {\n const result = await runCallableMaybeAsync(task, itemInput);\n return { output: result, status: \"completed\" };\n } catch (error) {\n return { output: String(error), status: \"failed\" };\n }\n}\n\n/**\n * Run a single evaluator and return normalized result\n */\nexport async function runSingleEvaluator(params: {\n evaluator: any;\n itemInput: any;\n taskOutput: any;\n expectedOutput: any;\n metadata?: Record<string, any>;\n}): Promise<Record<string, any> | null> {\n const { evaluator, itemInput, taskOutput, expectedOutput, metadata } =\n params;\n\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"evaluate\" in evaluator)\n ) {\n return null;\n }\n\n let expectedName: string | null = null;\n const config = extractEvaluatorConfig(evaluator);\n if (config) {\n expectedName = config.name;\n }\n\n const context = {\n input: itemInput,\n taskOutput: taskOutput,\n expectedOutput: expectedOutput,\n metadata: metadata,\n };\n\n let result = evaluator.evaluate(context);\n if (result instanceof Promise) {\n result = await result;\n }\n\n const resultPayload = {\n evaluatorName: result.evaluatorName,\n result: result.result,\n isPassed: result.isPassed,\n reason: result.reason,\n };\n\n if (expectedName && resultPayload.evaluatorName !== expectedName) {\n return null;\n }\n\n return resultPayload;\n}\n\n/**\n * Build a payload dict for posting item status\n */\nexport function buildItemPayload(\n ctx: ItemContext,\n status: string,\n includeOutput: boolean = false,\n): Record<string, any> {\n const payload: Record<string, any> = {\n traceId: ctx.traceId,\n sessionId: ctx.sessionId,\n };\n\n if (ctx.datasetItemId) {\n payload.datasetItemId = ctx.datasetItemId;\n } else {\n payload.input = ctx.itemInput;\n payload.expectedOutput = ctx.expectedOutput;\n if (ctx.metadata) {\n payload.metadata = ctx.metadata;\n }\n }\n\n if (ctx.status === \"failed\") {\n payload.status = \"failed\";\n return payload;\n }\n\n if (includeOutput) {\n payload.taskOutput = ctx.taskOutput;\n }\n\n return payload;\n}\n\n/**\n * Validate required inputs for runTestSuite\n */\nexport function validateRunInputs(\n name: string,\n data: any,\n task: ((arg: any) => any) | null | undefined,\n): boolean {\n if (!name) {\n Logger.error(\"netra.evaluation: run name is required\");\n return false;\n }\n if (!data) {\n Logger.error(\"netra.evaluation: data is required\");\n return false;\n }\n if (task == null) {\n Logger.error(\"netra.evaluation: task function is required\");\n return false;\n }\n return true;\n}\n\n/**\n * Extract datasetId from items if they are DatasetRecords\n */\nexport function extractDatasetId(items: any[]): string | null {\n if (items.length > 0 && isDatasetRecord(items[0])) {\n return items[0].datasetId;\n }\n return null;\n}\n\n/**\n * Type guard for DatasetRecord\n */\nfunction isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n}\n\n/**\n * Build evaluator configurations from evaluator objects\n */\nexport function buildEvaluatorsConfig(\n evaluators?: any[] | null,\n): EvaluatorConfig[] {\n const configs: EvaluatorConfig[] = [];\n if (!evaluators || evaluators.length === 0) {\n return configs;\n }\n\n for (const evaluator of evaluators) {\n const config = extractEvaluatorConfig(evaluator);\n if (!config) {\n continue;\n }\n\n try {\n configs.push(config);\n } catch {\n continue;\n }\n }\n\n return configs;\n}\n","/**\n * Public Evaluation API\n * Exposed as Netra.evaluation\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { SpanWrapper } from \"../../span-wrapper\";\nimport { EvaluationHttpClient } from \"./client\";\nimport {\n AddDatasetItemResponse,\n CreateDatasetResponse,\n Dataset,\n DatasetEntry,\n DatasetRecord,\n EvaluatorConfig,\n GetDatasetItemsResponse,\n ItemContext,\n TaskFunction,\n} from \"./models\";\nimport {\n buildEvaluatorsConfig,\n buildItemPayload,\n executeTask,\n extractDatasetId,\n formatSpanId,\n formatTraceId,\n getSessionIdFromBaggage,\n runSingleEvaluator,\n validateRunInputs,\n} from \"./utils\";\n\n/**\n * Public entry-point exposed as Netra.evaluation\n */\nexport class Evaluation {\n private config: Config;\n private client: EvaluationHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new EvaluationHttpClient(this.config);\n }\n\n /**\n * Create an empty dataset and return its id on success, else null\n * @param name The name of the dataset\n * @param tags Optional list of tags to associate with the dataset\n * @returns A backend JSON response containing dataset info (id, name, tags, etc.) on success\n */\n async createDataset(\n name: string,\n tags?: string[],\n ): Promise<CreateDatasetResponse | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create dataset: dataset name is required\",\n );\n return null;\n }\n\n const response = await this.client.createDataset(name, tags);\n\n if (!response) {\n return null;\n }\n\n return {\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n name: response.name ?? \"\",\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Add a single item to an existing dataset\n * @param datasetId The id of the dataset to which the item will be added\n * @param item The dataset item to add\n * @returns A backend JSON response containing dataset item info (id, input, expectedOutput, etc.) on success\n */\n async addDatasetItem(\n datasetId: string,\n item: DatasetEntry,\n ): Promise<AddDatasetItemResponse | null> {\n if (!item.input) {\n Logger.error(\n \"netra.evaluation: Skipping dataset item without required 'input'\",\n );\n return null;\n }\n\n const response = await this.client.addDatasetItem(datasetId, item);\n\n return {\n datasetId: response.datasetId ?? \"\",\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n source: response.source ?? \"\",\n input: response.input ?? \"\",\n expectedOutput: response.expectedOutput ?? \"\",\n isActive: true,\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n sourceId: response.sourceId ?? null,\n metadata: response.metadata ?? null,\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Get a dataset by ID\n * @param datasetId The id of the dataset to retrieve\n * @returns A backend JSON response containing dataset info (id, input, expectedOutput etc.) on success\n */\n async getDataset(datasetId: string): Promise<GetDatasetItemsResponse | null> {\n if (!datasetId) {\n Logger.error(\n \"netra.evaluation: Failed to get dataset: dataset id is required\",\n );\n return null;\n }\n\n const response = await this.client.getDataset(datasetId);\n if (!response) {\n return null;\n }\n\n const datasetItems: DatasetRecord[] = [];\n for (const item of response) {\n const itemId = item?.id;\n const itemInput = item?.input;\n const itemDatasetId = item?.datasetId;\n\n if (itemId == null || itemDatasetId == null || itemInput == null) {\n Logger.warn(\n \"netra.evaluation: Skipping dataset item with missing required fields:\",\n item,\n );\n continue;\n }\n\n try {\n datasetItems.push({\n id: itemId,\n input: itemInput,\n datasetId: itemDatasetId,\n expectedOutput: item?.expectedOutput ?? \"\",\n });\n } catch (exc) {\n Logger.error(\"netra.evaluation: Failed to parse dataset item:\", exc);\n }\n }\n\n return { items: datasetItems };\n }\n\n /**\n * Create a new run for the given dataset and evaluators\n * @param name The name of the run\n * @param datasetId The id of the dataset to which the run will be associated\n * @param evaluatorsConfig Optional list of evaluators to be used for the run\n * @returns runId: The id of the created run\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: EvaluatorConfig[],\n ): Promise<string | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create run: run name is required\",\n );\n return null;\n }\n\n const evaluatorsConfigDicts: Array<Record<string, any>> | undefined =\n evaluatorsConfig?.map((e) => ({\n name: e.name,\n label: e.label,\n scoreType: e.scoreType,\n }));\n\n const response = await this.client.createRun(\n name,\n datasetId,\n evaluatorsConfigDicts,\n );\n const runId = response?.id ?? null;\n return runId;\n }\n\n /**\n * Fetch test run results based on run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!runId) {\n Logger.error(\n \"netra.evaluation: Failed to get run: run_id is required\",\n );\n return null;\n }\n\n const response = await this.client.getRunResults(runId);\n return response;\n }\n\n /**\n * Netra evaluation function to initiate a test suite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns A dictionary containing the run id and the results of the test suite\n */\n runTestSuite(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators?: any[],\n maxConcurrency: number = 50,\n ): Promise<Record<string, any> | null> {\n return this.runTestSuiteAsync(name, data, task, evaluators, maxConcurrency);\n }\n\n /**\n * Async implementation of runTestSuite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns items: The results of the test suite\n */\n private async runTestSuiteAsync(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators: any[] | undefined,\n maxConcurrency: number,\n ): Promise<Record<string, any> | null> {\n if (!validateRunInputs(name, data, task)) {\n return null;\n }\n\n const items = [...data.items];\n const totalItems = items.length;\n const datasetId = extractDatasetId(items);\n const evaluatorsConfig = buildEvaluatorsConfig(evaluators);\n\n const runId = await this.createRun(\n name,\n datasetId ?? undefined,\n evaluatorsConfig,\n );\n if (!runId) {\n Logger.error(\"netra.evaluation: Failed to create run\");\n return null;\n }\n Logger.info(\"netra.evaluation: Initiated test run\");\n\n const semaphore = new Semaphore(Math.max(1, maxConcurrency));\n const results: Array<Record<string, any>> = [];\n const bgEvalTasks: Promise<void>[] = [];\n let completedItems = 0;\n\n const processItem = async (idx: number, item: any): Promise<void> => {\n await semaphore.acquire();\n try {\n const ctx = this.createItemContext(idx, item);\n const itemResult = await this.executeItemPipeline(\n runId,\n name,\n ctx,\n task,\n evaluators,\n results,\n bgEvalTasks,\n );\n\n completedItems += 1;\n Logger.info(\n `netra.evaluation: ${completedItems}/${totalItems} items processed (status=${itemResult.status})`,\n );\n } finally {\n semaphore.release();\n }\n };\n\n await Promise.all(items.map((item, i) => processItem(i, item)));\n\n if (bgEvalTasks.length > 0) {\n await Promise.allSettled(bgEvalTasks);\n }\n\n this.client.postRunStatus(runId, \"completed\");\n return { runId, items: results };\n }\n\n /**\n * Create an ItemContext from a dataset item\n * @param idx The index of the item\n * @param item The dataset item\n * @returns ItemContext: The created ItemContext\n */\n private createItemContext(idx: number, item: any): ItemContext {\n // Check if item is a DatasetRecord (has datasetId property)\n if (this.isDatasetRecord(item)) {\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n datasetItemId: item.id,\n };\n }\n\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n };\n }\n\n /**\n * Type guard for DatasetRecord\n */\n private isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n }\n\n /**\n * Execute the full pipeline for a single item\n * @param runId The run ID\n * @param runName The name of the run\n * @param ctx The item context\n * @param task The task function to execute\n * @param evaluators Optional list of evaluators\n * @param results List to append results to\n * @param bgEvalTasks List to append background evaluation tasks to\n */\n private async executeItemPipeline(\n runId: string,\n runName: string,\n ctx: ItemContext,\n task: TaskFunction,\n evaluators: any[] | undefined,\n results: Array<Record<string, any>>,\n bgEvalTasks: Promise<void>[],\n ): Promise<{ status: string }> {\n const spanName = `TestRun.${runName}`;\n\n const span = new SpanWrapper(spanName, {}, \"netra.evaluation\");\n span.start();\n\n try {\n const otelSpan = span.getCurrentSpan();\n if (otelSpan) {\n const spanContext = otelSpan.spanContext();\n ctx.traceId = formatTraceId(spanContext.traceId);\n ctx.spanId = formatSpanId(spanContext.spanId);\n }\n ctx.sessionId = getSessionIdFromBaggage();\n\n const { output, status } = await executeTask(task, ctx.itemInput);\n ctx.taskOutput = output;\n ctx.status = status;\n\n ctx.testRunItemId = await this.postCompletedStatus(runId, ctx);\n\n if (evaluators && ctx.status === \"completed\") {\n const evalTask = this.runEvaluatorsForItem(runId, ctx, evaluators);\n bgEvalTasks.push(evalTask);\n }\n\n results.push({\n index: ctx.index,\n status: ctx.status,\n traceId: ctx.traceId,\n spanId: ctx.spanId,\n testRunItemId: ctx.testRunItemId,\n });\n\n return { status: ctx.status ?? \"pending\" };\n } finally {\n span.end();\n }\n }\n\n /**\n * Post agent_triggered status and return testRunItemId\n * @param runId The run ID\n * @param ctx The item context\n * @returns str: The testRunItemId\n */\n private async postTriggeredStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<string> {\n const payload = buildItemPayload(ctx, \"agent_triggered\");\n const response = await this.client.postRunItem(runId, payload);\n\n if (response && typeof response === \"object\") {\n const itemId = response.id ?? response.testRunItemId;\n if (itemId) {\n return String(itemId);\n }\n }\n return `local-${ctx.index}`;\n }\n\n /**\n * Post completed/failed status with task output\n * @param runId The run ID\n * @param ctx The item context\n */\n private async postCompletedStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<any> {\n const payload = buildItemPayload(ctx, ctx.status ?? \"pending\", true);\n const runItemId = await this.client.postRunItem(runId, payload);\n return runItemId;\n }\n\n /**\n * Run all evaluators for a single item after span ingestion\n * @param runId The run ID\n * @param ctx The item context\n * @param evaluators List of evaluators\n */\n private async runEvaluatorsForItem(\n runId: string,\n ctx: ItemContext,\n evaluators: any[],\n ): Promise<void> {\n await this.client.waitForSpanIngestion(ctx.spanId);\n\n const evaluatorResults: Array<Record<string, any>> = [];\n for (const evaluator of evaluators) {\n try {\n const result = await runSingleEvaluator({\n evaluator,\n itemInput: ctx.itemInput,\n taskOutput: ctx.taskOutput,\n expectedOutput: ctx.expectedOutput,\n metadata: ctx.metadata,\n });\n\n if (result) {\n evaluatorResults.push(result);\n }\n } catch {\n continue;\n }\n }\n\n if (evaluatorResults.length > 0 && ctx.testRunItemId) {\n this.client.submitLocalEvaluations(\n runId,\n ctx.testRunItemId,\n evaluatorResults,\n );\n }\n }\n}\n\n/**\n * Simple semaphore for concurrency control\n */\nclass Semaphore {\n private permits: number;\n private waiting: Array<() => void> = [];\n\n constructor(permits: number) {\n this.permits = permits;\n }\n\n async acquire(): Promise<void> {\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.waiting.push(resolve);\n });\n }\n\n release(): void {\n if (this.waiting.length > 0) {\n const next = this.waiting.shift();\n next?.();\n } else {\n this.permits++;\n }\n }\n\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n}\n","/**\n * Evaluation API Models\n */\n\nexport interface DatasetEntry {\n id: string;\n input: string;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface DatasetItem {\n input: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n tags?: string[];\n}\n\nexport interface DatasetRecord {\n id: string;\n input: any;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface Dataset {\n items: DatasetItem[] | DatasetRecord[];\n}\n\nexport interface Run {\n id: string;\n datasetId: string;\n name?: string;\n testEntries: DatasetItem[];\n}\n\nexport interface EvaluationScore {\n metricType: string;\n score: number;\n}\n\nexport enum EntryStatus {\n AGENT_TRIGGERED = \"agent_triggered\",\n AGENT_COMPLETED = \"agent_completed\",\n FAILED = \"failed\",\n}\n\nexport enum RunStatus {\n COMPLETED = \"completed\",\n}\n\nexport interface CreateDatasetParams {\n name: string;\n tags?: string[];\n}\n\nexport interface TestSuiteResult {\n success: boolean;\n runId?: string;\n error?: string;\n results?: Array<{\n id: string;\n input: string;\n output: any;\n status: string;\n error?: string;\n }>;\n}\n\nexport enum ScoreType {\n BOOLEAN = \"boolean\",\n NUMERICAL = \"numerical\",\n CATEGORICAL = \"categorical\",\n}\n\nexport interface EvaluatorConfig {\n name: string;\n label: string;\n scoreType: ScoreType;\n}\n\nexport interface AddDatasetItemResponse {\n datasetId: string;\n projectId: string;\n organizationId: string;\n source: string;\n input: any;\n expectedOutput?: any;\n isActive: boolean;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n sourceId?: string;\n metadata?: Record<string, any>;\n id: string;\n createdAt?: string;\n deletedAt?: string;\n}\n\nexport interface ItemContext {\n index: number;\n itemInput: any;\n expectedOutput?: any;\n metadata?: any;\n datasetItemId?: string;\n traceId?: string;\n spanId?: string;\n sessionId?: string;\n taskOutput?: any;\n status?: string;\n testRunItemId?: string;\n}\n\nexport interface CreateDatasetResponse {\n projectId: string;\n organizationId: string;\n name: string;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n id: string;\n createdAt: string;\n deletedAt?: string | null;\n}\n\nexport interface GetDatasetItemsResponse {\n items: DatasetRecord[];\n}\n\nexport interface LocalDataset {\n items: DatasetEntry[];\n}\n\nexport interface EvaluatorContext {\n input: any;\n taskOutput: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n}\n\nexport interface EvaluatorOutput {\n evaluatorName: string;\n result: any;\n isPassed: boolean;\n reason?: string;\n}\n\nexport type EvaluatorFunction = (params: {\n input: string;\n output: any;\n expectedOutput?: any;\n}) =>\n | EvaluationScore\n | EvaluationScore[]\n | Promise<EvaluationScore | EvaluationScore[]>;\n\nexport type TaskFunction = (input: any) => any | Promise<any>;\n","/**\n * Run Entry Context for Evaluation\n * Provides context management for evaluation run entries\n */\n\nimport { Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { Config } from \"../../config\";\nimport { EvaluationHttpClient } from \"./client\";\nimport { DatasetEntry, EntryStatus, EvaluationScore, Run } from \"./models\";\n\nexport class RunEntryContext {\n private client: EvaluationHttpClient;\n private config: Config;\n readonly evaluationRun: Run;\n readonly entry: DatasetEntry;\n traceId?: string;\n private span?: Span;\n private startTime?: Date;\n\n constructor(\n client: EvaluationHttpClient,\n config: Config,\n run: Run,\n entry: DatasetEntry,\n ) {\n this.client = client;\n this.config = config;\n this.evaluationRun = run;\n this.entry = entry;\n }\n\n /**\n * Get the run associated with this context\n * Alias for evaluationRun for backwards compatibility\n */\n get run(): Run {\n return this.evaluationRun;\n }\n\n /**\n * Start the run entry context\n * Creates a span and posts agent_triggered status\n */\n async start(): Promise<void> {\n this.startTime = new Date();\n\n // Create a span for this entry\n const tracer = trace.getTracer(\"netra.evaluation\");\n this.span = tracer.startSpan(\n `evaluation.run.${this.evaluationRun.id}.entry.${this.entry.id}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"netra.evaluation.runId\": this.evaluationRun.id,\n \"netra.evaluation.entryId\": this.entry.id,\n \"netra.evaluation.datasetId\": this.evaluationRun.datasetId,\n },\n },\n );\n\n // Get trace ID from the span\n const spanContext = this.span.spanContext();\n this.traceId = spanContext.traceId;\n\n // Post agent_triggered status using postRunItem\n const payload = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: EntryStatus.AGENT_TRIGGERED,\n };\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n }\n\n /**\n * End the run entry context\n * @param success Whether the entry completed successfully\n * @param scores Optional scores to record\n */\n async end(\n success: boolean = true,\n scores?: EvaluationScore[],\n ): Promise<void> {\n const status = success ? EntryStatus.AGENT_COMPLETED : EntryStatus.FAILED;\n\n // Post completed/failed status using postRunItem\n const payload: Record<string, any> = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: status,\n };\n\n if (scores) {\n payload.scores = scores;\n }\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n\n if (this.span) {\n this.span.end();\n }\n }\n\n /**\n * Get the current span\n */\n getSpan(): Span | undefined {\n return this.span;\n }\n\n /**\n * Execute a function within this context\n * Automatically handles start/end and error handling\n */\n async execute<T>(\n fn: (ctx: RunEntryContext) => Promise<T>,\n scores?: EvaluationScore[],\n ): Promise<T> {\n await this.start();\n\n try {\n const result = await fn(this);\n await this.end(true, scores);\n return result;\n } catch (error) {\n await this.end(false);\n throw error;\n }\n }\n}\n","/**\n * Internal HTTP client for Dashboard APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n Scope,\n SessionFilter,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class DashboardHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_DASHBOARD_TIMEOUT\", 30.0);\n }\n\n /**\n * Execute a dynamic query for dashboards\n */\n async queryData(\n scope: Scope,\n chartType: ChartType,\n metrics: Metrics,\n filter: FilterConfig,\n dimension?: Dimension,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n const payload: Record<string, any> = {\n scope: scope,\n chartType: chartType,\n metrics: {\n measure: metrics.measure,\n aggregation: metrics.aggregation,\n },\n };\n\n // Build filter object\n if (filter) {\n const filterPayload: Record<string, any> = {\n startTime: filter.startTime,\n endTime: filter.endTime,\n groupBy: filter.groupBy,\n };\n\n if (filter.filters && filter.filters.length > 0) {\n filterPayload.filters = filter.filters.map((item) => {\n const filterItem: Record<string, any> = {\n field: item.field,\n operator: item.operator,\n type: item.type,\n value: item.value,\n };\n if (item.key) {\n filterItem.key = item.key;\n }\n return filterItem;\n });\n }\n\n payload.filter = filterPayload;\n }\n\n // Add dimension if provided\n if (dimension) {\n payload.dimension = {\n field: dimension.field,\n };\n }\n\n const response = await this.post(\"/public/dashboard/query-data\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n }\n\n /**\n * Get session statistics with pagination.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n * limit: Maximum number of results per page.\n * page: Page number for pagination.\n * sortField: Field to sort by.\n * sortOrder: Sort order (asc/desc).\n *\n * Returns:\n * The session stats response data or null on error.\n */\n async getSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n limit?: number,\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot get session stats\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/stats\";\n\n const payload: Record<string, any> = {\n startTime,\n endTime,\n };\n\n if (filters && filters.length > 0) {\n payload.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n if (limit !== undefined || cursor !== undefined) {\n payload.pagination = {};\n\n if (limit !== undefined) {\n payload.pagination.limit = limit;\n }\n\n if (cursor !== undefined) {\n payload.pagination.cursor = cursor;\n }\n }\n\n if (sortField !== undefined) {\n payload.sortField = sortField;\n }\n\n if (sortOrder !== undefined) {\n payload.sortOrder = sortOrder;\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.dashboard: Failed to fetch session stats:\", message);\n return null;\n }\n }\n\n /**\n * Get aggregated session metrics including total sessions, costs, latency,\n * and cost breakdown by model.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n *\n * Returns:\n * The session summary response data or null on error.\n */\n async getSessionSummary(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/summary\";\n\n const payload: Record<string, any> = {\n filter: {\n startTime,\n endTime,\n },\n };\n\n if (filters && filters.length > 0) {\n payload.filter.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\n \"netra.dashboard: Failed to fetch session summary:\",\n message,\n );\n return null;\n }\n }\n}\n","/**\n * Dashboard API Models\n */\n\nexport enum Scope {\n SPANS = \"Spans\",\n TRACES = \"Traces\",\n}\n\nexport enum ChartType {\n LINE_TIME_SERIES = \"Line Time Series\",\n BAR_TIME_SERIES = \"Bar Time Series\",\n HORIZONTAL_BAR = \"Horizontal Bar\",\n VERTICAL_BAR = \"Vertical Bar\",\n PIE = \"Pie\",\n NUMBER = \"Number\",\n}\n\nexport enum Measure {\n LATENCY = \"Latency\",\n ERROR_RATE = \"Error Rate\",\n PII_COUNT = \"PII Count\",\n REQUEST_COUNT = \"Request Count\",\n TOTAL_COST = \"Total Cost\",\n VIOLATIONS = \"Violations\",\n TOTAL_TOKENS = \"Total Tokens\",\n AUDIO_DURATION = \"Audio Duration\",\n CHARACTER_COUNT = \"Character Count\",\n}\n\nexport enum Aggregation {\n AVERAGE = \"Average\",\n P50 = \"p50\",\n P90 = \"p90\",\n P95 = \"p95\",\n P99 = \"p99\",\n MEDIAN = \"Median (p50)\",\n PERCENTAGE = \"Percentage\",\n TOTAL_COUNT = \"Total Count\",\n}\n\nexport enum GroupBy {\n DAY = \"day\",\n HOUR = \"hour\",\n MINUTE = \"minute\",\n}\n\nexport enum DimensionField {\n ENVIRONMENT = \"environment\",\n SERVICE = \"service\",\n MODEL_NAME = \"model_name\",\n}\n\nexport enum Operator {\n EQUALS = \"equals\",\n NOT_EQUALS = \"not_equals\",\n CONTAINS = \"contains\",\n NOT_CONTAINS = \"not_contains\",\n STARTS_WITH = \"starts_with\",\n ENDS_WITH = \"ends_with\",\n GREATER_THAN = \"greater_than\",\n LESS_THAN = \"less_than\",\n GREATER_EQUAL_TO = \"greater_equal_to\",\n LESS_EQUAL_TO = \"less_equal_to\",\n ANY_OF = \"any_of\",\n NONE_OF = \"none_of\",\n}\n\nexport enum FilterType {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY_OPTIONS = \"arrayOptions\",\n OBJECT = \"object\",\n}\n\nexport enum FilterField {\n TOTAL_COST = \"total_cost\",\n SERVICE = \"service\",\n TENANT_ID = \"tenant_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n ENVIRONMENT = \"environment\",\n LATENCY = \"latency\",\n MODEL_NAME = \"model_name\",\n MODELS = \"models\",\n METADATA = \"metadata\",\n}\n\nexport enum SessionFilterField {\n TENANT_ID = \"tenant_id\",\n}\n\nexport enum SessionOperator {\n ANY_OF = \"any_of\",\n}\n\nexport enum SessionFilterType {\n ARRAY = \"arrayOptions\",\n}\n\nexport enum SortField {\n SESSION_ID = \"session_id\",\n START_TIME = \"start_time\",\n TOTAL_REQUESTS = \"totalRequests\",\n TOTAL_COST = \"totalCost\",\n}\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n}\n\n/**\n * Create a metadata filter field\n * @param key The metadata key to filter on\n * @returns The formatted metadata field string\n * @example\n * metadataField(\"customer_tier\") // returns \"metadata['customer_tier']\"\n */\nexport function metadataField(key: string): string {\n return `metadata['${key}']`;\n}\n\nexport interface Filter {\n field: FilterField | string;\n operator: Operator;\n type: FilterType;\n value: any;\n key?: string;\n}\n\nexport interface Metrics {\n measure: Measure;\n aggregation: Aggregation;\n}\n\nexport interface Dimension {\n field: DimensionField;\n}\n\nexport interface FilterConfig {\n startTime: string;\n endTime: string;\n groupBy: GroupBy;\n filters?: Filter[];\n}\n\nexport interface TimeRange {\n startTime: string;\n endTime: string;\n}\n\nexport interface TimeSeriesDataPoint {\n date: string;\n value: number;\n}\n\nexport interface DimensionValue {\n dimension: string;\n value: number;\n}\n\nexport interface TimeSeriesWithDimension {\n date: string;\n values: DimensionValue[];\n}\n\nexport interface TimeSeriesResponse {\n timeSeries: TimeSeriesWithDimension[];\n dimensions: string[];\n}\n\nexport interface CategoricalDataPoint {\n dimension: string;\n value: number;\n}\n\nexport interface NumberResponse {\n value: number;\n}\n\nexport type DashboardData =\n | TimeSeriesDataPoint[]\n | TimeSeriesResponse\n | CategoricalDataPoint[]\n | NumberResponse\n | Record<string, any>;\n\nexport interface QueryResponse {\n timeRange: TimeRange;\n data: DashboardData;\n}\n\nexport interface QueryDataParams {\n scope: Scope;\n chartType: ChartType;\n metrics: Metrics;\n filter: FilterConfig;\n dimension?: Dimension;\n}\n\n//Sessions\nexport interface SessionFilter {\n field: SessionFilterField;\n operator: SessionOperator;\n type: SessionFilterType;\n value: string[];\n}\n\nexport interface SessionStatsResult {\n data: SessionStatsData[];\n hasNextPage: boolean;\n nextCursor?: string;\n}\n\nexport interface SessionFilterConfig {\n startTime: string;\n endTime: string;\n filters?: SessionFilter[];\n}\n\nexport interface SessionStatsData {\n session_id: string;\n session_start_time: string;\n totalRequests: number;\n totalCost: number;\n session_duration: string;\n cursor: string;\n}\n","/**\n * Public Dashboard API\n * Exposed as Netra.dashboard\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { DashboardHttpClient } from \"./client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n QueryDataParams,\n QueryResponse,\n Scope,\n SessionFilter,\n SessionFilterConfig,\n SessionStatsData,\n SessionStatsResult,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class Dashboard {\n private config: Config;\n private client: DashboardHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new DashboardHttpClient(config);\n }\n\n /**\n * Execute a dynamic query for dashboards to retrieve metrics and time-series data\n * @param params Query parameters\n * @returns Query response containing timeRange and data, or null on error\n */\n async queryData(params: QueryDataParams): Promise<QueryResponse | null> {\n // Validate parameters\n if (!this.isValidScope(params.scope)) {\n throw new TypeError(\n `scope must be a Scope value, got ${typeof params.scope}`,\n );\n }\n if (!this.isValidChartType(params.chartType)) {\n throw new TypeError(\n `chartType must be a ChartType value, got ${typeof params.chartType}`,\n );\n }\n if (!this.isValidMetrics(params.metrics)) {\n throw new TypeError(\n `metrics must be a Metrics object, got ${typeof params.metrics}`,\n );\n }\n if (!this.isValidFilterConfig(params.filter)) {\n throw new TypeError(\n `filter must be a FilterConfig object, got ${typeof params.filter}`,\n );\n }\n if (\n params.dimension !== undefined &&\n !this.isValidDimension(params.dimension)\n ) {\n throw new TypeError(\n `dimension must be a Dimension object or undefined, got ${typeof params.dimension}`,\n );\n }\n\n const result = await this.client.queryData(\n params.scope,\n params.chartType,\n params.metrics,\n params.filter,\n params.dimension,\n );\n\n return result;\n }\n \nasync getSessionStats(\n startTime: string,\n endTime: string,\n limit: number = 10,\n filters?: SessionFilter[],\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<SessionStatsResult | null> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session stats\",\n );\n return null;\n }\n\n const result = await this.client.getSessionStats(\n startTime,\n endTime,\n filters,\n limit,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return null;\n }\n\n const data = result.data ?? {};\n const sessionStats = data.sessions ?? [];\n const pageInfo = data.pageInfo ?? {};\n\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n \n let nextCursor: string | undefined = undefined;\n if (sessionStats.length > 0) {\n const lastItem = sessionStats[sessionStats.length - 1];\n nextCursor = lastItem.cursor;\n }\n\n return {\n data: sessionStats,\n hasNextPage,\n nextCursor,\n };\n }\n\n async *iterSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): AsyncGenerator<SessionStatsData, void, unknown> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to iterate session stats\",\n );\n return;\n }\n\n let cursor: string | undefined = undefined;\n\n while (true) {\n const result = await this.getSessionStats(\n startTime,\n endTime,\n undefined,\n filters,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return;\n }\n\n for (const session of result.data) {\n yield session;\n }\n\n if (!result.hasNextPage) {\n break;\n }\n\n cursor = result.nextCursor;\n }\n }\n\n async getSessionSummary(filter: SessionFilterConfig): Promise<any | null> {\n if (!this.isSessionFilterConfig(filter)) {\n Logger.error(\"netra.dashboard: filter must be a SessionFilterConfig\");\n return null;\n }\n\n if (!filter.startTime || !filter.endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session summary\",\n );\n return null;\n }\n\n const result = await this.client.getSessionSummary(\n filter.startTime,\n filter.endTime,\n filter.filters,\n );\n\n if (!result) {\n return null;\n }\n\n return result.data ?? {};\n }\n\n private isValidScope(scope: any): scope is Scope {\n return Object.values(Scope).includes(scope);\n }\n\n private isValidChartType(chartType: any): chartType is ChartType {\n return Object.values(ChartType).includes(chartType);\n }\n\n private isValidMetrics(metrics: any): metrics is Metrics {\n return (\n metrics &&\n typeof metrics === \"object\" &&\n \"measure\" in metrics &&\n \"aggregation\" in metrics\n );\n }\n\n private isValidFilterConfig(filter: any): filter is FilterConfig {\n return (\n filter &&\n typeof filter === \"object\" &&\n \"startTime\" in filter &&\n \"endTime\" in filter &&\n \"groupBy\" in filter\n );\n }\n\n private isValidDimension(dimension: any): dimension is Dimension {\n return dimension && typeof dimension === \"object\" && \"field\" in dimension;\n }\n\n private isSessionFilterConfig(value: unknown): value is SessionFilterConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"startTime\" in value &&\n \"endTime\" in value\n );\n }\n}\n","/**\n * Internal HTTP client for Prompts APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class PromptsHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_PROMPTS_TIMEOUT\", 30.0);\n }\n\n /**\n * Fetch prompt version from backend\n */\n async getPromptVersion(name: string, label: string): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.prompts: Prompts client is not initialized; cannot fetch prompt\",\n );\n return null;\n }\n\n try {\n const payload = {\n promptName: name,\n label: label,\n };\n\n const response = await this.post(\"/sdk/prompts/version\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n\n Logger.error(`netra.prompts: Failed to fetch prompt: ${errorMessage}`);\n\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.prompts: Failed to fetch prompt:\", message);\n\n return null;\n }\n }\n}\n","import { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { PromptsHttpClient } from \"./client\";\nimport { GetPromptParams, PromptResponse } from \"./models\";\n\nexport class Prompts {\n private config: Config;\n private client: PromptsHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new PromptsHttpClient(config);\n }\n\n /**\n * Fetch prompt version by name and label.\n *\n * @param params.name - Name of the prompt (required)\n * @param params.label - Label of the prompt version (default: \"production\")\n */\n async getPrompt(params: GetPromptParams): Promise<PromptResponse | null> {\n if (!params || typeof params.name !== \"string\" || !params.name) {\n Logger.error(\"netra.prompts: name is required to fetch a prompt\");\n return null;\n }\n\n const label = params.label ?? \"production\";\n const result = await this.client.getPromptVersion(params.name, label);\n\n if (!result) {\n return null;\n }\n\n return result.data ?? null;\n }\n}\n","/**\n * Instrumentation Span Processor\n * \n * OpenTelemetry span processor that:\n * 1. Records the raw instrumentation scope name for each span\n * 2. Truncates attribute values to prevent oversized payloads\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\n// Allowed instrumentation names that we recognize and tag\nconst ALLOWED_INSTRUMENTATION_NAMES = new Set([\n \"openai\",\n \"openai_agents\",\n \"groq\",\n \"mistral_ai\",\n \"mistralai\",\n \"google_genai\",\n \"langchain\",\n \"llama_index\",\n \"pinecone\",\n \"qdrant\",\n \"chromadb\",\n \"together\",\n \"vertexai\",\n \"cohere_ai\",\n \"litellm\",\n \"dspy\",\n \"pydantic_ai\",\n \"weaviate_db\",\n \"fastapi\",\n \"adk\",\n \"httpx\",\n \"aiohttp\",\n \"undici\",\n \"fetch\",\n \"cerebras\",\n \"deepgram\",\n \"cartesia\",\n \"elevenlabs\",\n]);\n\nexport class InstrumentationSpanProcessor implements SpanProcessor {\n private maxAttributeLength: number;\n\n constructor(maxAttributeLength?: number) {\n this.maxAttributeLength = maxAttributeLength ?? Config.ATTRIBUTE_MAX_LEN;\n }\n\n /**\n * Detect the raw instrumentation name from the span's instrumentation scope.\n */\n private detectRawInstrumentationName(span: Span): string | null {\n try {\n // Access the instrumentation scope from the span\n // In JS SDK, this is typically available via the span's internal properties\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n\n if (scope) {\n const name = scope.name;\n if (typeof name === \"string\" && name) {\n // Extract the base name from fully qualified names\n if (\n name.startsWith(\"opentelemetry.instrumentation.\") ||\n name.startsWith(\"netra.instrumentation.\") ||\n name.startsWith(\"@opentelemetry/instrumentation-\") ||\n name.startsWith(\"@traceloop/instrumentation-\")\n ) {\n try {\n // Get the last segment\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n } catch {\n // Fall through to return the full name\n }\n }\n return name;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n }\n\n /**\n * Truncate a value to the maximum allowed length.\n * Handles strings, bytes, and recursively handles lists and objects.\n */\n private truncateValue(value: unknown): unknown {\n try {\n if (typeof value === \"string\") {\n return value.length <= this.maxAttributeLength\n ? value\n : value.substring(0, this.maxAttributeLength);\n }\n\n if (Array.isArray(value)) {\n return value.map((v) =>\n typeof v === \"string\" ? this.truncateValue(v) : v\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = typeof v === \"string\" ? this.truncateValue(v) : v;\n }\n return result;\n }\n } catch {\n return value;\n }\n return value;\n }\n\n /**\n * Called when a span starts. Wraps setAttribute to truncate values\n * and records the instrumentation name.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Wrap setAttribute to truncate values\n const originalSetAttribute = span.setAttribute.bind(span);\n\n span.setAttribute = (key: string, value: unknown): Span => {\n try {\n const truncated = this.truncateValue(value);\n return originalSetAttribute(key, truncated as any);\n } catch {\n // Best-effort; never break span\n try {\n return originalSetAttribute(key, value as any);\n } catch {\n return span;\n }\n }\n };\n\n // Set instrumentation name attribute\n const name = this.detectRawInstrumentationName(span);\n if (name && ALLOWED_INSTRUMENTATION_NAMES.has(name.toLowerCase())) {\n span.setAttribute(`${Config.LIBRARY_NAME}.instrumentation.name`, name);\n }\n } catch (e) {\n Logger.error(\n \"InstrumentationSpanProcessor: Error on span start:\",\n e\n );\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { RootSpanProcessor } from \"./root-span-processor\";\n\n/**\n * Marks the root span of any trace that contains at least one LLM call with\n * `netra.trace.llm.call = true`.\n *\n * Root span resolution is delegated to RootSpanProcessor, which must be\n * registered AFTER this processor in the chain so that its on_end cleanup\n * runs after this processor has finished annotating the root span.\n */\nexport class LlmTraceIdentifierSpanProcessor implements SpanProcessor {\n static DEFAULT_REQUEST_MODEL_KEY = \"gen_ai.request.model\";\n static DEFAULT_RESPONSE_MODEL_KEY = \"gen_ai.response.model\";\n static DEFAULT_ROOT_MARKER_KEY = \"netra.trace.llm.call\";\n\n private readonly _requestModelKey: string;\n private readonly _responseModelKey: string;\n private readonly _rootMarkerKey: string;\n\n // Tracks which traces have already been marked to avoid redundant writes\n private readonly _markedTraces = new Set<string>();\n\n constructor(\n requestModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_REQUEST_MODEL_KEY,\n responseModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_RESPONSE_MODEL_KEY,\n rootMarkerAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_ROOT_MARKER_KEY,\n ) {\n if (!requestModelAttributeKey || !responseModelAttributeKey || !rootMarkerAttributeKey) {\n throw new Error(\"Attribute keys cannot be empty\");\n }\n this._requestModelKey = requestModelAttributeKey;\n this._responseModelKey = responseModelAttributeKey;\n this._rootMarkerKey = rootMarkerAttributeKey;\n }\n\n onStart(_span: Span, _parentContext: Context): void {\n // Root span tracking is owned by RootSpanProcessor\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const spanCtx = span.spanContext();\n if (!spanCtx || !trace.isSpanContextValid(spanCtx)) return;\n\n const { traceId, spanId } = spanCtx;\n\n // When the root span ends, clean up local state and stop processing\n if (RootSpanProcessor.isRootSpanForTrace(traceId, spanId)) {\n this._markedTraces.delete(traceId);\n return;\n }\n\n if (this._markedTraces.has(traceId)) return;\n if (!this._isLlmSpan(span)) return;\n\n this._markRootSpan(traceId);\n } catch (e) {\n Logger.warn(\"LlmTraceIdentifierSpanProcessor: error in onEnd:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n this._markedTraces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isLlmSpan(span: ReadableSpan): boolean {\n const attrs = span.attributes;\n if (!attrs) return false;\n return (\n Object.prototype.hasOwnProperty.call(attrs, this._requestModelKey) ||\n Object.prototype.hasOwnProperty.call(attrs, this._responseModelKey)\n );\n }\n\n private _markRootSpan(traceId: string): void {\n const root = RootSpanProcessor.getRootSpanByTraceId(traceId);\n this._markedTraces.add(traceId);\n if (!root) return;\n if (!root.isRecording()) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: root span for trace ${traceId} is not recording`);\n return;\n }\n try {\n root.setAttribute(this._rootMarkerKey, true);\n } catch (e) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: failed to mark root span for trace ${traceId}:`, e);\n }\n }\n}\n","/**\n * Scrubbing Span Processor\n *\n * OpenTelemetry span processor that scrubs sensitive data from span attributes.\n * This includes API keys, emails, phone numbers, SSNs, credit cards, passwords,\n * bearer tokens, and other sensitive information.\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n// Sensitive patterns for data detection (based on pydantic logfire scrubbing)\nconst SENSITIVE_PATTERNS: Record<string, RegExp> = {\n // API keys - scrub \"Token: <value>\" or sk-... tokens\n api_key: new RegExp(\n \"(?:Token:\\\\s*\\\\S{32,})\" + // Token: <32+ chars>\n \"|(?:sk-[A-Za-z0-9]{16,})\", // sk-... tokens\n \"g\",\n ),\n // Email addresses\n email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/gi,\n // Phone numbers (US format)\n phone: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}/g,\n // Credit cards (Visa, Mastercard, Amex, Discover)\n credit_card:\n /(?<!\\d)(?:4\\d{15}|5[1-5]\\d{14}|3[47]\\d{13}|6(?:011|5\\d{2})\\d{12})(?!\\d)/g,\n // Social Security Numbers\n ssn: /\\b\\d{3}-?\\d{2}-?\\d{4}\\b/g,\n // Password patterns\n password: /(?:password|passwd|pwd|secret|token)\\s*[:=]\\s*\\S+/gi,\n // Bearer tokens\n bearer_token: /(?:authorization:\\s*)?bearer\\s+[A-Za-z0-9\\-._~+/]+=*/gi,\n // Authorization headers\n authorization: /authorization\\s*:\\s*\\S+/gi,\n};\n\n// Generic pattern for long digit sequences (credit/debit cards)\nconst LONG_DIGIT_PATTERN = /(?<!\\d)\\d{13,19}(?!\\d)/g;\n\n// Sensitive attribute keys that should have their values scrubbed\nconst SENSITIVE_KEYS = new Set([\n \"password\",\n \"passwd\",\n \"pwd\",\n \"secret\",\n \"key\",\n \"api_key\",\n \"auth\",\n \"authorization\",\n \"bearer\",\n \"credential\",\n \"private_key\",\n \"access_token\",\n \"refresh_token\",\n \"session_token\",\n \"x-api-key\",\n \"x-auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"span\",\n]);\n\nconst SCRUB_REPLACEMENT = \"[SCRUBBED]\";\n\nexport class ScrubbingSpanProcessor implements SpanProcessor {\n /**\n * Check if a key is considered sensitive.\n */\n private isSensitiveKey(key: string): boolean {\n const keyLower = key.toLowerCase();\n for (const sensitiveKey of SENSITIVE_KEYS) {\n if (keyLower.includes(sensitiveKey)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrub sensitive patterns from a string value.\n */\n private scrubStringValue(value: string): string {\n let scrubbed = value;\n\n // Early catch-all for contiguous 13-19 digit sequences (credit/debit cards)\n scrubbed = scrubbed.replace(LONG_DIGIT_PATTERN, SCRUB_REPLACEMENT);\n\n // Apply all sensitive patterns\n for (const pattern of Object.values(SENSITIVE_PATTERNS)) {\n // Reset lastIndex for global patterns\n pattern.lastIndex = 0;\n if (pattern.test(scrubbed)) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, SCRUB_REPLACEMENT);\n }\n }\n\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a dictionary value.\n */\n private scrubDictValue(\n value: Record<string, unknown>,\n ): Record<string, unknown> {\n const scrubbed: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const [, scrubbedValue] = this.scrubKeyValue(k, v);\n scrubbed[k] = scrubbedValue;\n }\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a list value.\n */\n private scrubListValue(value: unknown[]): unknown[] {\n return value.map((item) => {\n if (typeof item === \"string\") {\n return this.scrubStringValue(item);\n } else if (Array.isArray(item)) {\n return this.scrubListValue(item);\n } else if (typeof item === \"object\" && item !== null) {\n return this.scrubDictValue(item as Record<string, unknown>);\n }\n return item;\n });\n }\n\n /**\n * Scrub sensitive data from a key-value pair.\n */\n private scrubKeyValue(key: string, value: unknown): [string, unknown] {\n // Check if key itself is sensitive and value is a simple type\n if (\n this.isSensitiveKey(key) &&\n typeof value !== \"object\" &&\n !Array.isArray(value)\n ) {\n return [key, SCRUB_REPLACEMENT];\n }\n\n // Scrub value based on its type\n if (typeof value === \"string\") {\n return [key, this.scrubStringValue(value)];\n } else if (Array.isArray(value)) {\n return [key, this.scrubListValue(value)];\n } else if (typeof value === \"object\" && value !== null) {\n return [key, this.scrubDictValue(value as Record<string, unknown>)];\n }\n\n return [key, value];\n }\n\n /**\n * Called when a span starts. No-op for this processor.\n */\n onStart(span: Span, parentContext: Context): void {\n // No-op - scrubbing happens on span end\n }\n\n /**\n * Called when a span ends. Scrubs sensitive data from span attributes.\n */\n onEnd(span: ReadableSpan): void {\n try {\n // Get span attributes - we need to access the internal attributes\n const spanAny = span as any;\n const attributes = spanAny.attributes || spanAny._attributes;\n\n if (attributes && typeof attributes === \"object\") {\n const scrubbedAttributes: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n const [, scrubbedValue] = this.scrubKeyValue(key, value);\n scrubbedAttributes[key] = scrubbedValue;\n }\n\n // Replace attributes with scrubbed versions\n // This works because ReadableSpan is actually a reference to the span object\n if (spanAny._attributes) {\n spanAny._attributes = scrubbedAttributes;\n } else if (spanAny.attributes) {\n // Some implementations use different property names\n Object.keys(spanAny.attributes).forEach(\n (k) => delete spanAny.attributes[k],\n );\n Object.assign(spanAny.attributes, scrubbedAttributes);\n }\n }\n } catch (e) {\n Logger.error(\"ScrubbingSpanProcessor: Error scrubbing attributes:\", e);\n }\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Session Span Processor\n *\n * OpenTelemetry span processor that automatically adds session attributes to spans.\n * This includes session_id, user_id, tenant_id from OpenTelemetry baggage, and entity context\n * (workflow, task, agent names) from SessionManager.\n *\n * Uses OpenTelemetry's baggage API for automatic context propagation across async boundaries.\n */\n\nimport { context, Context, propagation, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SessionManager } from \"../session-manager\";\n\n/**\n * Get the registered OTel context manager.\n * Skips NOOP_CONTEXT_MANAGER (returned when nothing is registered) and falls back\n * to inspecting the OTel global state to handle multiple @opentelemetry/api instances.\n */\nfunction getContextManager(): any {\n try {\n // 1. Try the ContextAPI's delegate — but only if it's a real manager (has _asyncLocalStorage)\n if ((context as any)._getContextManager) {\n const manager = (context as any)._getContextManager();\n if (manager?._asyncLocalStorage != null) {\n return manager;\n }\n }\n\n // 2. Fallback: read from OTel's globalThis symbol — handles multiple @opentelemetry/api copies.\n // OTel stores { context: ContextAPI, ... } keyed by Symbol('opentelemetry.js.api.<version>').\n // The registered context manager lives at ContextAPI._delegate.\n const globalSymbols = Object.getOwnPropertySymbols(globalThis);\n const otelSymbol = globalSymbols.find(s => s.toString().includes('opentelemetry.js.api'));\n if (otelSymbol) {\n const delegate = (globalThis as any)[otelSymbol]?.context?._delegate;\n if (delegate?._asyncLocalStorage != null) {\n return delegate;\n }\n }\n\n return null;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Binds newContext as the active context for the current async resource,\n * equivalent to Python's otel_context.attach(ctx).\n */\nfunction safeEnterWith(newContext: Context): void {\n const contextManager = getContextManager();\n\n if (!contextManager) {\n return;\n }\n\n // AsyncLocalStorageContextManager v2.x has no direct enterWith — go through _asyncLocalStorage\n if (typeof contextManager._asyncLocalStorage?.enterWith === 'function') {\n contextManager._asyncLocalStorage.enterWith(newContext);\n return;\n }\n\n // Future-proof: some managers may expose enterWith directly\n if (typeof contextManager.enterWith === 'function') {\n contextManager.enterWith(newContext);\n return;\n }\n\n Logger.warn(\"SessionSpanProcessor: enterWith not available on context manager; baggage will not propagate.\");\n}\n\n/**\n * Persistent store for session values (session_id, user_id, tenant_id, etc.).\n *\n * OTel's context.with() / asyncLocalStorage.run() creates isolated scopes — enterWith()\n * inside a span's callback does not propagate to sibling spans started after it. This map\n * lives outside any async scope so values set anywhere (pre-init, inside a span, etc.)\n * are visible to all subsequent spans. OTel baggage from parentContext still takes\n * precedence in onStart to honour cross-process propagated values.\n */\nconst sessionValues = new Map<string, string>();\n\n/**\n * Set a session baggage value using OpenTelemetry's baggage API\n * This automatically propagates across async boundaries via AsyncLocalStorage\n */\nexport function setSessionBaggage(key: string, value: string): void {\n // Always persist in the module-level store — survives run() scope boundaries\n sessionValues.set(key, value);\n\n // Best-effort: also push into OTel baggage for cross-process propagation\n try {\n const currentBaggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const newBaggage = currentBaggage.setEntry(key, { value });\n const newContext = propagation.setBaggage(context.active(), newBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n // non-fatal — sessionValues is the primary in-process store\n }\n}\n\n/**\n * Get a session baggage value — checks OTel baggage first, then the persistent store.\n */\nexport function getSessionBaggage(key: string): string | undefined {\n try {\n return propagation.getBaggage(context.active())?.getEntry(key)?.value ?? sessionValues.get(key);\n } catch (e) {\n return sessionValues.get(key);\n }\n}\n\n/**\n * Clear all session baggage from the current context\n */\nexport function clearSessionBaggage(): void {\n sessionValues.clear();\n try {\n const emptyBaggage = propagation.createBaggage();\n const newContext = propagation.setBaggage(context.active(), emptyBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n Logger.warn(\"SessionSpanProcessor: Failed to clear baggage:\", e);\n }\n}\n\nexport class SessionSpanProcessor implements SpanProcessor {\n /**\n * Called when a span starts. Adds session and entity context attributes.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Add library metadata\n span.setAttribute(\"library.name\", Config.LIBRARY_NAME);\n span.setAttribute(\"library.version\", Config.LIBRARY_VERSION);\n span.setAttribute(\"sdk.name\", Config.SDK_NAME);\n\n // Get baggage from the parent context (or current if not provided)\n const ctxToUse = parentContext || context.active();\n const baggage = propagation.getBaggage(ctxToUse);\n\n // Add session context — OTel baggage (cross-process) takes precedence, then persistent store\n const sessionId = baggage?.getEntry(\"session_id\")?.value ?? sessionValues.get(\"session_id\");\n const userId = baggage?.getEntry(\"user_id\")?.value ?? sessionValues.get(\"user_id\");\n const tenantId = baggage?.getEntry(\"tenant_id\")?.value ?? sessionValues.get(\"tenant_id\");\n\n if (sessionId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.session_id`, sessionId);\n }\n if (userId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.user_id`, userId);\n }\n if (tenantId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.tenant_id`, tenantId);\n }\n\n // Add custom attributes from baggage\n const customKeys = baggage?.getEntry(\"custom_keys\")?.value;\n if (customKeys) {\n for (const key of customKeys.split(\",\")) {\n const value = baggage?.getEntry(`custom.${key}`)?.value;\n if (value) {\n span.setAttribute(`${Config.LIBRARY_NAME}.custom.${key}`, value);\n }\n }\n }\n\n // Add entity attributes from SessionManager (workflow, task, agent context)\n const entityAttributes = SessionManager.getCurrentEntityAttributes();\n for (const [attrKey, attrValue] of Object.entries(entityAttributes)) {\n span.setAttribute(attrKey, attrValue);\n }\n } catch (e) {\n Logger.error(\"SessionSpanProcessor: Error setting span attributes:\", e);\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(_span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Root Instrument Filter Processor\n *\n * Blocks root spans (and their entire subtree) from instrumentations not in\n * the allowed root_instruments set. Tracking is trace-ID-based: when a root\n * span is blocked, its trace_id is recorded and all subsequent spans sharing\n * that trace_id are blocked as well.\n *\n * This guarantees correct propagation even in async frameworks where a parent\n * span may end before all children have started.\n */\n\nimport { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\nconst LOCAL_BLOCKED_ATTR = \"netra.local_blocked\";\n\nconst INSTRUMENTATION_PREFIXES = [\n \"opentelemetry.instrumentation.\",\n \"netra.instrumentation.\",\n \"@opentelemetry/instrumentation-\",\n \"@traceloop/instrumentation-\",\n];\n\nconst MAX_BLOCKED_TRACES = 4096;\nconst BLOCKED_TRACE_TTL_MS = 600_000; // 600 seconds\n\ninterface BlockedEntry {\n timestamp: number;\n}\n\nexport class RootInstrumentFilterProcessor implements SpanProcessor {\n private readonly _allowed: Set<string>;\n private readonly _blockedTraceIds: Map<string, BlockedEntry> = new Map();\n\n constructor(allowedRootInstrumentNames: Set<string>) {\n this._allowed = new Set(allowedRootInstrumentNames);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n this._processSpanStart(span, parentContext);\n } catch {\n // Best-effort; never break span pipeline\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n this._evictStaleTraces();\n } catch {\n // no-op\n }\n }\n\n shutdown(): Promise<void> {\n this._blockedTraceIds.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _processSpanStart(span: Span, parentContext: Context): void {\n const parentSpanId = this._resolveParentSpanId(parentContext)\n ?? this._getParentSpanIdFromSpan(span);\n\n const isChild = parentSpanId !== null && parentSpanId !== \"0000000000000000\";\n\n if (isChild) {\n this._maybeBlockChild(span);\n } else {\n this._maybeBlockRoot(span);\n }\n }\n\n private _maybeBlockChild(span: Span): void {\n const traceId = this._getTraceId(span);\n if (!traceId) {\n return;\n }\n if (this._blockedTraceIds.has(traceId)) {\n this._markBlocked(span);\n }\n }\n\n private _maybeBlockRoot(span: Span): void {\n if (!this._isFromInstrumentationLibrary(span)) {\n return;\n }\n\n const instrName = this._extractInstrumentationName(span);\n if (instrName === null || this._allowed.has(instrName)) {\n return;\n }\n\n const traceId = this._getTraceId(span);\n if (traceId) {\n this._blockedTraceIds.set(traceId, { timestamp: Date.now() });\n this._evictOverflow();\n }\n this._markBlocked(span);\n }\n\n private _resolveParentSpanId(parentContext: Context): string | null {\n const parentSpan = trace.getSpan(parentContext);\n if (!parentSpan) {\n return null;\n }\n const sc = parentSpan.spanContext();\n if (!sc || sc.spanId === \"0000000000000000\") {\n return null;\n }\n return sc.spanId;\n }\n\n private _getParentSpanIdFromSpan(span: Span): string | null {\n const spanAny = span as any;\n const parent = spanAny.parentSpanId ?? spanAny.parent?.spanId ?? null;\n if (!parent || parent === \"0000000000000000\") {\n return null;\n }\n return parent;\n }\n\n private _getTraceId(span: Span | ReadableSpan): string | null {\n try {\n const ctx = (span as any).spanContext?.() ?? (span as any).context;\n if (ctx) {\n return ctx.traceId ?? null;\n }\n } catch {\n // no-op\n }\n return null;\n }\n\n private _markBlocked(span: Span): void {\n try {\n span.setAttribute(LOCAL_BLOCKED_ATTR, true);\n } catch {\n // no-op\n }\n }\n\n private _isFromInstrumentationLibrary(span: Span): boolean {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return false;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return false;\n }\n return INSTRUMENTATION_PREFIXES.some((prefix) => name.startsWith(prefix));\n }\n\n private _extractInstrumentationName(span: Span): string | null {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return null;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return null;\n }\n for (const prefix of INSTRUMENTATION_PREFIXES) {\n if (name.startsWith(prefix)) {\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n }\n }\n return name;\n }\n\n private _evictStaleTraces(): void {\n const cutoff = Date.now() - BLOCKED_TRACE_TTL_MS;\n for (const [traceId, entry] of this._blockedTraceIds) {\n if (entry.timestamp > cutoff) {\n break;\n }\n this._blockedTraceIds.delete(traceId);\n }\n }\n\n private _evictOverflow(): void {\n while (this._blockedTraceIds.size > MAX_BLOCKED_TRACES) {\n const first = this._blockedTraceIds.keys().next().value;\n if (first !== undefined) {\n this._blockedTraceIds.delete(first);\n } else {\n break;\n }\n }\n }\n}\n","import { AttributeValue, Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\nconst _PROMPT_RE = /^gen_ai\\.prompts?\\.(\\d+)\\.(role|content)$/;\nconst _COMPLETION_RE = /^gen_ai\\.completions?\\.(\\d+)\\.(role|content)$/;\n\nconst _TRACELOOP_PREFIX = \"traceloop.\";\nconst _NETRA_PREFIX = \"netra.\";\n\nconst _USAGE_INPUT_TOKENS = \"gen_ai.usage.input_tokens\";\nconst _USAGE_PROMPT_TOKENS = \"gen_ai.usage.prompt_tokens\";\nconst _USAGE_OUTPUT_TOKENS = \"gen_ai.usage.output_tokens\";\nconst _USAGE_COMPLETION_TOKENS = \"gen_ai.usage.completion_tokens\";\n\nconst NETRA_USER_INPUT = \"netra.user.input\";\nconst NETRA_USER_OUTPUT = \"netra.user.output\";\n\nconst NETRA_ENTITY_INPUT = \"netra.entity.input\";\nconst NETRA_ENTITY_OUTPUT = \"netra.entity.output\";\n\nconst MAX_PARSE_LEN = 1_000_000;\n\ntype SetAttributeFn = (key: string, value: AttributeValue) => Span;\n\nfunction buildMessages(indexMap: Map<number, Record<string, string>>): string {\n const sorted = Array.from(indexMap.keys()).sort((a, b) => a - b);\n return JSON.stringify(sorted.map((i) => indexMap.get(i)!));\n}\n\nfunction extractTraceloopInput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"inputs\" in parsed\n ? (parsed as Record<string, unknown>).inputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction extractTraceloopOutput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"outputs\" in parsed\n ? (parsed as Record<string, unknown>).outputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction isEmpty(v: unknown): boolean {\n return v === undefined || v === null || v === \"\";\n}\n\nexport class SpanIOProcessor implements SpanProcessor {\n onStart(span: Span, _parentContext: Context): void {\n try {\n const attrs = (span as any).attributes ?? {};\n if (!(\"input\" in attrs)) {\n span.setAttribute(\"input\", \"\");\n }\n if (!(\"output\" in attrs)) {\n span.setAttribute(\"output\", \"\");\n }\n this._wrapSetAttribute(span);\n } catch (e) {\n Logger.error(\"SpanIOProcessor.onStart failed:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const attrs =\n (span as any)._attributes ?? (span as any).attributes;\n if (!attrs || typeof attrs !== \"object\") {\n Logger.debug(\n \"SpanIOProcessor.onEnd: could not access span attributes — OTel SDK internal API may have changed\",\n );\n return;\n }\n\n try {\n if (NETRA_USER_INPUT in attrs) {\n const userInput = attrs[NETRA_USER_INPUT];\n if (!isEmpty(userInput)) {\n attrs[\"input\"] = userInput;\n }\n delete attrs[NETRA_USER_INPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.input → input\",\n e,\n );\n }\n\n try {\n if (NETRA_USER_OUTPUT in attrs) {\n const userOutput = attrs[NETRA_USER_OUTPUT];\n if (!isEmpty(userOutput)) {\n attrs[\"output\"] = userOutput;\n }\n delete attrs[NETRA_USER_OUTPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.output → output\",\n e,\n );\n }\n } catch (e) {\n Logger.error(\n \"SpanIOProcessor.onEnd: unexpected error during netra.user promotion\",\n e,\n );\n }\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _wrapSetAttribute(span: Span): void {\n const original: SetAttributeFn = span.setAttribute.bind(span);\n\n let prompts: Map<number, Record<string, string>> | undefined;\n let completions: Map<number, Record<string, string>> | undefined;\n\n let genAiOwnsInput = false;\n let genAiOwnsOutput = false;\n\n const inputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"input\"]);\n\n const outputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"output\"]);\n\n const patched = (key: string, value: AttributeValue): Span => {\n try {\n // 1. gen_ai.prompt(s).N.{role,content} → accumulate into input\n const promptMatch = _PROMPT_RE.exec(key);\n if (promptMatch) {\n original(key, value);\n const idx = parseInt(promptMatch[1], 10);\n const field = promptMatch[2];\n if (!prompts) prompts = new Map();\n let entry = prompts.get(idx);\n if (!entry) {\n entry = {};\n prompts.set(idx, entry);\n }\n entry[field] = String(value);\n if (inputIsEmpty() || genAiOwnsInput) {\n original(\"input\", buildMessages(prompts));\n genAiOwnsInput = true;\n }\n return span;\n }\n\n // 2. gen_ai.completion(s).N.{role,content} → accumulate into output\n const completionMatch = _COMPLETION_RE.exec(key);\n if (completionMatch) {\n original(key, value);\n const idx = parseInt(completionMatch[1], 10);\n const field = completionMatch[2];\n if (!completions) completions = new Map();\n let entry = completions.get(idx);\n if (!entry) {\n entry = {};\n completions.set(idx, entry);\n }\n entry[field] = String(value);\n if (outputIsEmpty() || genAiOwnsOutput) {\n original(\"output\", buildMessages(completions));\n genAiOwnsOutput = true;\n }\n return span;\n }\n\n // 3. traceloop.entity.input → extract inputs → set input\n if (key === \"traceloop.entity.input\") {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 4. traceloop.entity.output → extract outputs → set output\n if (key === \"traceloop.entity.output\") {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 5. netra.entity.input → extract inputs → set input (LangGraph)\n if (key === NETRA_ENTITY_INPUT) {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 6. netra.entity.output → extract outputs → set output (LangGraph)\n if (key === NETRA_ENTITY_OUTPUT) {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 7. Other traceloop.* → remap to netra.*\n if (key.startsWith(_TRACELOOP_PREFIX)) {\n const newKey = _NETRA_PREFIX + key.slice(_TRACELOOP_PREFIX.length);\n return original(newKey, value);\n }\n\n // 8. gen_ai.usage token aliasing\n if (key === _USAGE_INPUT_TOKENS) {\n return original(_USAGE_PROMPT_TOKENS, value);\n }\n if (key === _USAGE_OUTPUT_TOKENS) {\n return original(_USAGE_COMPLETION_TOKENS, value);\n }\n\n // 9. Pass through\n return original(key, value);\n } catch (e) {\n Logger.debug(`SpanIOProcessor: error processing key=${key}`, e);\n try {\n return original(key, value);\n } catch {\n return span;\n }\n }\n };\n\n (span as any).setAttribute = patched;\n }\n}\n","// TODO: Replace this temporary implementation with the official OpenTelemetry GenAI semantic conventions\n// when they are published for the JavaScript SDK.\n\nexport const SpanAttributes = {\n LLM_SYSTEM: \"gen_ai.system\",\n\n LLM_REQUEST_TYPE: \"llm.request.type\",\n LLM_REQUEST_MODEL: \"gen_ai.request.model\",\n LLM_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n LLM_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n LLM_REQUEST_TOP_P: \"gen_ai.request.top_p\",\n LLM_REQUEST_REASONING: \"gen_ai.request.reasoning\",\n LLM_REQUEST_REASONING_EFFORT: \"gen_ai.request.reasoning_effort\",\n\n LLM_RESPONSE_MODEL: \"gen_ai.response.model\",\n\n LLM_USAGE_PROMPT_TOKENS: \"gen_ai.usage.prompt_tokens\",\n LLM_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n LLM_USAGE_CACHE_READ_INPUT_TOKENS: \"gen_ai.usage.cache_read_input_tokens\",\n LLM_USAGE_REASONING_TOKENS: \"gen_ai.usage.reasoning_tokens\",\n LLM_USAGE_TOTAL_TOKENS: \"llm.usage.total_tokens\",\n\n LLM_FREQUENCY_PENALTY: \"llm.frequency_penalty\",\n LLM_PRESENCE_PENALTY: \"llm.presence_penalty\",\n LLM_CHAT_STOP_SEQUENCES: \"llm.chat.stop_sequences\",\n LLM_IS_STREAMING: \"llm.is_streaming\",\n LLM_COMPLETIONS: \"gen_ai.completion\",\n LLM_PROMPTS: \"gen_ai.prompt\",\n} as const;\n","/**\n * Shared utility functions for instrumentation.\n * Handles setting OTel span attributes for LLM request/response tracing.\n */\n\nimport { Span, context } from \"@opentelemetry/api\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SpanAttributes } from \"./span-attributes\";\n\n// Suppression\nconst SUPPRESS_INSTRUMENTATION_KEY = Symbol(\"netra.suppress_instrumentation\");\n\nexport function shouldSuppressInstrumentation(): boolean {\n const ctx = context.active();\n return ctx.getValue(SUPPRESS_INSTRUMENTATION_KEY) === true;\n}\n\n// Type Utilities\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return value instanceof Promise;\n}\n\n/**\n * Define a non-enumerable, writable, configurable property on `target`.\n * Used to hide OTel internals (spans, contexts) from JSON.stringify\n * while keeping them accessible to instance methods.\n */\nexport function defineHidden<T>(target: object, key: string, value: T): void {\n Object.defineProperty(target, key, {\n value,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n}\n\nexport function isDict(v: unknown): v is Record<string, any> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport function modelAsDict(obj: unknown): Record<string, unknown> {\n if (obj == null || typeof obj !== \"object\") return {};\n\n if (\n \"toJSON\" in obj &&\n typeof (obj as { toJSON?: unknown }).toJSON === \"function\"\n ) {\n return (obj as { toJSON: () => unknown }).toJSON() as Record<\n string,\n unknown\n >;\n }\n\n if (Object.getPrototypeOf(obj) === Object.prototype) {\n return { ...(obj as Record<string, unknown>) };\n }\n\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch {\n return {};\n }\n}\n\n/**\n * A normalized input or output message used for span attribute recording.\n * Providers can build TracedMessage[] using their own extraction logic and\n * pass it directly to writePromptAttributes / writeCompletionAttributes.\n */\nexport interface TracedMessage {\n role: string;\n content: string;\n}\n\n// Internal Helpers\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction truncate(value: string, maxLen: number): string {\n if (!value || value.length <= maxLen) return value;\n return value.slice(0, maxLen) + \"...(truncated)\";\n}\n\n/**\n * Returns true if `value` represents meaningful content worth recording.\n * Guards against setting empty-string attributes on spans.\n */\nexport function hasContent(value: unknown): boolean {\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\") return value.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\n// Attribute Mapping (model params → span attributes)\nconst PARAM_ATTRIBUTE_MAP: Record<string, string> = {\n model: SpanAttributes.LLM_REQUEST_MODEL,\n temperature: SpanAttributes.LLM_REQUEST_TEMPERATURE,\n max_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_completion_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_output_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_tokens_to_sample: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n frequency_penalty: SpanAttributes.LLM_FREQUENCY_PENALTY,\n presence_penalty: SpanAttributes.LLM_PRESENCE_PENALTY,\n reasoning_effort: SpanAttributes.LLM_REQUEST_REASONING_EFFORT,\n stop: SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n stream: SpanAttributes.LLM_IS_STREAMING,\n top_p: SpanAttributes.LLM_REQUEST_TOP_P,\n};\n\nfunction setModelParams(span: Span, kwargs: Record<string, unknown>): void {\n for (const [key, attr] of Object.entries(PARAM_ATTRIBUTE_MAP)) {\n const value = kwargs[key];\n if (value !== undefined) {\n span.setAttribute(attr, value as any);\n }\n }\n}\n\n/**\n * Extracts input messages for OpenAI-compatible request shapes:\n * - \"chat\": messages[] (standard Chat Completions API)\n * - \"response\": instructions + input (Responses API)\n * - everything else: prompt string or embedding input\n *\n * Google GenAI and other providers with different shapes should build their\n * own TracedMessage[] and call writePromptAttributes directly.\n */\nexport function buildInputMessages(\n kwargs: Record<string, unknown>,\n requestType: string,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n if (requestType === \"chat\") {\n const rawMessages = kwargs.messages;\n if (!Array.isArray(rawMessages)) return messages;\n for (const msg of rawMessages) {\n if (!isDict(msg)) continue;\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n }\n }\n } else if (requestType === \"response\") {\n if (hasContent(kwargs.instructions)) {\n messages.push({ role: \"system\", content: String(kwargs.instructions) });\n }\n const input = kwargs.input;\n if (typeof input === \"string\" && input.length > 0) {\n messages.push({ role: \"user\", content: input });\n } else if (Array.isArray(input)) {\n for (const msg of input) {\n if (!isDict(msg)) continue;\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n }\n }\n }\n } else if (kwargs.prompt !== undefined) {\n // Legacy single-prompt (e.g.,completions)\n const content = String(kwargs.prompt);\n if (content.length > 0) {\n messages.push({ role: \"user\", content });\n }\n } else {\n // Embeddings / genericinput\n const input = kwargs.input ?? kwargs.inputs;\n if (hasContent(input)) {\n const content = truncate(\n safeStringify(input),\n Config.CONVERSATION_MAX_LEN,\n );\n messages.push({ role: \"user\", content });\n }\n }\n\n return messages;\n}\n\n/**\n * Extracts output messages for OpenAI-compatible response shapes:\n * - choices[].message (Chat Completions API) — with optional tool_calls\n * - output[].content[].text (Responses API)\n * - content[] text/tool_use blocks (Anthropic-style)\n * - scalar output_text shorthand\n *\n * Skips messages with empty content to avoid polluting traces.\n */\nexport function buildOutputMessages(\n response: Record<string, unknown>,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n // Priority 1: Chat Completions API (choices[]) — mutually exclusive with all others.\n // A response carrying choices[] is definitively a Chat Completions response; stop here.\n if (Array.isArray(response.choices)) {\n for (const choice of response.choices as Array<Record<string, any>>) {\n const msg = choice.message ?? choice.delta;\n if (!msg) continue;\n\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({ role: msg.role, content: String(msg.content) });\n }\n\n if (Array.isArray(msg.tool_calls)) {\n for (const tc of msg.tool_calls as Array<Record<string, unknown>>) {\n const fn = tc.function as Record<string, unknown> | undefined;\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: fn?.name ?? \"\",\n arguments: fn?.arguments ?? \"\",\n }),\n });\n }\n }\n }\n return messages;\n }\n\n // Priority 2: Responses API — output_text and/or output[].\n // output_text is a scalar shorthand that mirrors the text portions of output[].\n // When both are present, use output_text for text and output[] only for tool calls\n // to avoid duplicating the same text content.\n const hasOutputText =\n typeof response.output_text === \"string\" && response.output_text.length > 0;\n const hasOutputArray = Array.isArray(response.output);\n\n if (hasOutputText || hasOutputArray) {\n if (hasOutputText) {\n messages.push({\n role: \"assistant\",\n content: response.output_text as string,\n });\n }\n\n if (hasOutputArray) {\n for (const element of response.output as Array<Record<string, unknown>>) {\n if (!Array.isArray(element.content)) continue;\n for (const chunk of element.content as Array<Record<string, unknown>>) {\n // Only include text from output[] when output_text has not already covered it\n if (!hasOutputText && hasContent(chunk.text)) {\n messages.push({ role: \"assistant\", content: String(chunk.text) });\n }\n // Always capture tool_use blocks — output_text never contains these\n if (\n (chunk as any).type === \"tool_use\" &&\n (chunk as any).name\n ) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: (chunk as any).name,\n input: (chunk as any).input,\n }),\n });\n }\n }\n }\n }\n return messages;\n }\n\n // Priority 3: Anthropic-style content[] blocks — only reached when neither\n // Chat Completions nor Responses API fields are present.\n if (Array.isArray(response.content)) {\n for (const block of response.content as Array<any>) {\n if (block.type === \"text\" && hasContent(block.text)) {\n messages.push({ role: \"assistant\", content: String(block.text) });\n } else if (block.type === \"tool_use\" && block.name) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({ name: block.name, input: block.input }),\n });\n }\n }\n }\n\n return messages;\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.prompt.{i}.role / gen_ai.prompt.{i}.content (OTel GenAI conventions)\n * 2. \"input\" JSON blob (Netra dashboard attribute)\n */\nexport function writePromptAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n for (let i = 0; i < messages.length; i++) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.role`,\n messages[i].role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content`,\n messages[i].content,\n );\n }\n\n span.setAttribute(\"input\", JSON.stringify(messages));\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.completion.{i}.role / gen_ai.completion.{i}.content (OTel GenAI conventions)\n * 2. \"output\" JSON blob (Netra dashboard attribute)\n *\n * Tool-call blocks in the messages are also written to gen_ai.response.tool_calls.*.\n */\nexport function writeCompletionAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n let completionIdx = 0;\n\n for (const msg of messages) {\n if (msg.role === \"tool\") {\n // Tool entries are emitted as tool_call attributes, not completion entries\n try {\n const parsed = JSON.parse(msg.content) as Record<string, unknown>;\n const toolData = {\n name: parsed.name,\n id: parsed.id,\n input: parsed.input,\n arguments: parsed.arguments,\n };\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.role`,\n \"tool\",\n );\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.content`,\n JSON.stringify(toolData),\n );\n completionIdx++;\n } catch (error) {\n Logger.error(\"Error parsing tool content:\", error);\n }\n } else {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.role`,\n msg.role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.content`,\n msg.content,\n );\n completionIdx++;\n }\n }\n\n span.setAttribute(\"output\", JSON.stringify(messages));\n}\n\n\n// Request Attributes\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n system: string,\n): void {\n if (!span.isRecording()) return;\n\n // Core identifiers\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, system);\n\n if (kwargs.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Standard model parameters\n setModelParams(span, kwargs);\n\n // Reasoning config\n if (kwargs.reasoning !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_REASONING,\n JSON.stringify(kwargs.reasoning),\n );\n }\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildInputMessages(kwargs, requestType);\n writePromptAttributes(span, messages);\n\n // Legacy: FIMsuffix\n if (kwargs.suffix !== undefined) {\n span.setAttribute(\n \"llm.request.suffix\",\n truncate(safeStringify(kwargs.suffix), Config.CONVERSATION_MAX_LEN),\n );\n }\n }\n}\n\n// Response Attributes\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n\n // ResponseID\n if (response.id) {\n span.setAttribute(\"llm.response.id\", String(response.id));\n }\n\n // Model\n const model = response.model || (response.response_metadata as any)?.model;\n if (model) {\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, String(model));\n }\n\n // Tokenusage\n setUsageAttributes(span, response);\n\n // Finish reason (from firstchoice)\n setFinishReason(span, response);\n\n // Embeddingmetadata\n setEmbeddingResponseMeta(span, response);\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildOutputMessages(response);\n writeCompletionAttributes(span, messages);\n }\n}\n\n// Response Sub-helpers\nfunction setFinishReason(span: Span, response: Record<string, unknown>): void {\n const choices = response.choices as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(choices) || choices.length === 0) return;\n\n const reason = choices[0].finish_reason ?? choices[0].finishReason;\n if (reason) {\n span.setAttribute(\"gen_ai.response.finish_reason\", String(reason));\n span.setAttribute(\"llm.response.finish_reason\", String(reason));\n }\n}\n\nfunction setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usage = (response.usage ?? response.usage_metadata) as\n | Record<string, unknown>\n | undefined;\n if (!usage) return;\n\n const promptTokens = usage.prompt_tokens ?? usage.input_tokens;\n if (promptTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(promptTokens),\n );\n }\n\n const completionTokens = usage.completion_tokens ?? usage.output_tokens;\n if (completionTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(completionTokens),\n );\n }\n\n const totalTokens = usage.total_tokens;\n if (totalTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(totalTokens),\n );\n }\n\n const cacheTokens = (\n (usage.prompt_tokens_details ?? usage.input_tokens_details) as\n | { cached_tokens?: unknown }\n | undefined\n )?.cached_tokens;\n if (cacheTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(cacheTokens),\n );\n }\n\n const reasoningTokens = (\n (usage.completion_tokens_details ?? usage.output_tokens_details) as\n | { reasoning_tokens?: unknown }\n | undefined\n )?.reasoning_tokens;\n if (reasoningTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_REASONING_TOKENS,\n Number(reasoningTokens),\n );\n }\n}\n\nfunction setEmbeddingResponseMeta(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const data = response.data as Array<unknown> | undefined;\n if (!Array.isArray(data) || data.length === 0) return;\n\n span.setAttribute(\"llm.response.embedding_count\", data.length);\n\n const firstItem = data[0] as Record<string, unknown>;\n const embedding = firstItem?.embedding as number[] | undefined;\n if (Array.isArray(embedding)) {\n span.setAttribute(\"llm.response.embedding_dimensions\", embedding.length);\n }\n}\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"anthropic\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n if(response?.type === 'message_batch'){\n span.setAttribute(\"status\", response?.processing_status as string);\n }\n setBaseResponseAttributes(span, response);\n}\n","export const __version__ = \"1.0.0\";","import { context, Span, SpanKind, SpanStatusCode, trace, Tracer } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { defineHidden, isPromise, modelAsDict, shouldSuppressInstrumentation } from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype AnthropicRequestType = \"chat\" | \"beta\" | \"batches\";\n\nconst CHAT_SPAN_NAME = \"anthropic.chat\";\nconst BETA_SPAN_NAME = \"anthropic.beta\";\nconst BATCHES_SPAN_NAME = \"anthropic.batches\";\nconst STREAM_ENABLED_REQUESTS: AnthropicRequestType[] = [\"chat\", \"beta\"];\n\nfunction anthropicWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n const currentContext = context.active();\n const isStreaming = args[0]?.stream === true;\n \n const activeSpan = trace.getSpan(context.active());\n Logger.debug(`Anthropic invoke (${requestType}). Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n const span = tracer.startSpan(spanName + \".create\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.streaming\": true\n },\n },\n currentContext);\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n\n // Call the original function and get the APIPromise\n const spanContext = trace.setSpan(currentContext, span);\n const response = context.with(spanContext, () => wrapped.call(instance, ...args));\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n // For messages.create({stream: true}), return AsyncStreamingWrapper\n // which will track streaming events and finalize the span when done\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n // Should usually be a promise, but just in case\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n // Non streaming\n else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const spanContext = trace.setSpan(currentContext, span);\n const response = context.with(spanContext, () => wrapped.call(instance, ...args));\n if (isPromise(response)) {\n // Create a new promise that handles instrumentation\n const instrumentedPromise = (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n\n // Use a Proxy to preserve all methods from the original APIPromise\n // This includes withResponse(), asResponse(), etc.\n return new Proxy(instrumentedPromise, {\n get(target, prop, receiver) {\n // Special handling for then/catch/finally - use our instrumented promise\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n\n // For all other properties, first check the original response object\n // This ensures methods like withResponse() are available\n const responseValue = (response as any)[prop];\n if (responseValue !== undefined) {\n if (typeof responseValue === 'function') {\n return responseValue.bind(response);\n }\n return responseValue;\n }\n\n // Fall back to the instrumented promise\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n });\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const betaWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BETA_SPAN_NAME, \"beta\");\n\nexport const batchesWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BATCHES_SPAN_NAME, \"batches\"); \n\n\nconst WRAPPER_OWN_PROPS = new Set([\n 'span', 'messageStream', 'startTime', 'requestKwargs', 'completeResponse',\n 'processChunk', 'finalizeSpan', 'processEventData', 'finalizeSpanFromMessage',\n]);\n\nconst EVENT_EMITTER_METHODS = new Set([\n 'on', 'once', 'off', 'removeListener', 'addListener',\n 'emit', 'removeAllListeners', 'listeners', 'listenerCount',\n]);\n\nconst LISTENER_REGISTRATION_METHODS = new Set(['on', 'once', 'addListener']);\n\nconst COMPLETION_METHODS = new Set(['finalMessage', 'done', 'finalText']);\n\nconst TRACKED_STREAM_EVENTS = new Set(['message', 'contentBlock', 'text', 'finalMessage']);\n\nexport class MessageStreamWrapper {\n private completeResponse: Record<string, any> = {\n content: [],\n model: \"\",\n usage: {},\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private messageStream!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, messageStream: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"messageStream\", messageStream);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n // Use Proxy to delegate all properties and methods to messageStream\n return new Proxy(this, {\n get(target, prop, receiver) {\n if (prop === 'toJSON') {\n return () => target.completeResponse;\n }\n\n if (typeof prop === 'string' && WRAPPER_OWN_PROPS.has(prop)) {\n return Reflect.get(target, prop, receiver);\n }\n \n // Symbol.asyncIterator - use our custom implementation\n if (prop === Symbol.asyncIterator) {\n return target[Symbol.asyncIterator].bind(target);\n }\n \n // Event emitter methods - need special handling to maintain 'this' context\n if (typeof prop === 'string' && EVENT_EMITTER_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n if (LISTENER_REGISTRATION_METHODS.has(prop)) {\n return function(event: string, listener: Function) {\n // Wrap the listener to track events in our span\n const wrappedListener = (...args: any[]) => {\n target.span.addEvent(`messagestream.event.${event}`, {\n 'event.type': event,\n });\n \n if (TRACKED_STREAM_EVENTS.has(event)) {\n if (args[0]) {\n target.processEventData(event, args[0]);\n }\n }\n \n return listener(...args);\n };\n \n return method.call(target.messageStream, event, wrappedListener);\n };\n }\n return method.bind(target.messageStream);\n }\n return method;\n }\n \n if (typeof prop === 'string' && COMPLETION_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n return async function(...args: any[]) {\n try {\n const result = await method.call(target.messageStream, ...args);\n \n // When stream completes, finalize our span\n if (prop === 'finalMessage' || prop === 'done') {\n target.finalizeSpanFromMessage(result);\n }\n \n return result;\n } catch (error) {\n target.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n };\n }\n return method;\n }\n \n // Everything else - delegate to messageStream\n const value = target.messageStream[prop];\n if (typeof value === 'function') {\n return value.bind(target.messageStream);\n }\n return value;\n }\n });\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<unknown> {\n try {\n for await (const chunk of this.messageStream) {\n this.processChunk(chunk);\n yield chunk;\n }\n this.finalizeSpan(SpanStatusCode.OK);\n } catch (err) {\n Logger.error(\"netra.instrumentation.anthropic: Stream error\", err);\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw err;\n }\n }\n\n private processEventData(eventType: string, data: any): void {\n switch (eventType) {\n case 'message':\n // This is the message_start event data\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n if (data.usage) {\n this.completeResponse.usage = data.usage;\n }\n break;\n \n case 'text':\n // Accumulate text\n if (!this.completeResponse.currentText) {\n this.completeResponse.currentText = '';\n }\n this.completeResponse.currentText += data;\n break;\n \n case 'contentBlock':\n // Track content blocks\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push(data);\n break;\n \n case 'finalMessage':\n // Final message contains everything\n if (data.model) this.completeResponse.model = data.model;\n if (data.content) this.completeResponse.content = data.content;\n if (data.usage) this.completeResponse.usage = data.usage;\n break;\n }\n }\n\n private processChunk(chunk: any): void {\n /**\n * Anthropic streaming events look like:\n * - message_start\n * - content_block_start\n * - content_block_delta\n * - content_block_stop\n * - message_delta\n * - message_stop\n */\n\n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push({\n type: chunk.content_block.type,\n text: \"\",\n });\n break;\n }\n\n case \"content_block_delta\": {\n if (!this.completeResponse.content || this.completeResponse.content.length === 0) {\n this.completeResponse.content = [{ type: 'text', text: '' }];\n }\n \n const lastBlock =\n this.completeResponse.content[\n this.completeResponse.content.length - 1\n ];\n\n if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n this.completeResponse.usage = {\n ...this.completeResponse.usage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpanFromMessage(message: any): void {\n // Extract from final message if available\n if (message) {\n if (message.model) this.completeResponse.model = message.model;\n if (message.content) this.completeResponse.content = message.content;\n if (message.usage) this.completeResponse.usage = message.usage;\n }\n \n this.finalizeSpan(SpanStatusCode.OK);\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n // Anthropic Stream is AsyncIterable\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator!.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n // Reusing the same chunk processing logic as MessageStreamWrapper, but adapted for this context\n // The raw chunks from messages.create({stream:true}) are the same as what MessageStreamWrapper handles.\n \n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n const content = this.completeResponse.content as any[] || [];\n this.completeResponse.content = content;\n content.push({\n type: chunk.content_block.type,\n text: \"\",\n });\n break;\n }\n\n case \"content_block_delta\": {\n const content = this.completeResponse.content as any[] || [];\n if (content.length === 0) {\n content.push({ type: 'text', text: '' });\n this.completeResponse.content = content;\n }\n \n const lastBlock = content[content.length - 1];\n\n if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n const currentUsage = this.completeResponse.usage as any || {};\n this.completeResponse.usage = {\n ...currentUsage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n \n // We match the format expected by setResponseAttributes\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","import { SpanKind, trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { setRequestAttributes } from \"./utils\";\nimport { __version__ } from \"./version\";\nimport { batchesWrapper, betaWrapper, chatWrapper, MessageStreamWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.anthropic\";\nconst INSTRUMENTS = [\"anthropic >= 0.71.2\"];\n\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\nlet AnthropicClass: any = null;\n\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nasync function resolveAnthropicAsync(): Promise<any> {\n if (AnthropicClass) return AnthropicClass;\n\n try {\n // @ts-ignore - @anthropic-ai/sdk is an optional peer dependency\n const anthropicModule = await import(\"@anthropic-ai/sdk\");\n AnthropicClass = anthropicModule.Anthropic || anthropicModule.default || anthropicModule;\n return AnthropicClass;\n } catch {\n return null;\n }\n}\n\nfunction resolveAnthropic(): any {\n return AnthropicClass;\n}\n\n\nexport class NetraAnthropicInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n async instrumentAsync(options: InstrumentorOptions = {}): Promise<NetraAnthropicInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Anthropic is already instrumented\");\n return this;\n }\n\n const Anthropic = await resolveAnthropicAsync();\n if (!Anthropic) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentMessages();\n this._instrumentBetaMessages();\n this._instrumentBatchMessages();\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void{\n if (!isInstrumented) {\n Logger.warn(\"Anthropic is not instrumented\");\n return;\n }\n\n this._uninstrumentMessages();\n this._uninstrumentBetaMessages();\n this._uninstrumentBatchMessages();\n\n originalMethods.clear();\n AnthropicClass = null;\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\nprivate _instrumentMessages(): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n Logger.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const MessagesClass = AnthropicSDK.Messages;\n if (!MessagesClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Messages class to instrument\",\n );\n return;\n }\n\n if (MessagesClass?.prototype?.stream) {\n const originalStream = MessagesClass.prototype.stream as Function;\n originalMethods.set(\"messages.stream\", originalStream);\n const tracer = this.tracer;\n MessagesClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n\n const span = tracer.startSpan(\"anthropic\" + \".stream\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": \"chat\",\n \"llm.streaming\": true,\n \"llm.operation\": \"stream\"\n },\n });\n\n setRequestAttributes(span, kwargs, \"chat\");\n const startTime = Date.now();\n\n // Temporarily restore the original create method so stream() can use it\n const instrumentedCreate = (this as any).create;\n const originalCreate = originalMethods.get(\"messages.create\");\n if (originalCreate) {\n (this as any).create = originalCreate;\n }\n\n try {\n const messageStream = original(...args);\n return new MessageStreamWrapper(span, messageStream, startTime, kwargs);\n } finally {\n // Restore the instrumented create method\n if (originalCreate) {\n (this as any).create = instrumentedCreate;\n }\n }\n } as typeof MessagesClass.prototype.stream;\n }\n\n if (MessagesClass?.prototype?.create) {\n const originalCreate = MessagesClass.prototype.create as Function;\n originalMethods.set(\"messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n MessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof MessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument messages: ${error}`);\n }\n}\n\nprivate _instrumentBetaMessages(): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n Logger.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n if (!BetaMessagesClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Beta Messages class to instrument\",\n );\n return;\n }\n\n if (BetaMessagesClass?.prototype?.create) {\n const originalCreate = BetaMessagesClass.prototype.create as Function;\n originalMethods.set(\"beta.messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = betaWrapper(tracer);\n\n\n BetaMessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument beta: ${error}`);\n }\n}\n\nprivate _instrumentBatchMessages():void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) {\n Logger.warn(\"Anthropic instrumentation: Anthropic SDK not available\");\n return;\n }\n const BatchMessageClass = AnthropicSDK.Messages?.Batches;\n if (!BatchMessageClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Batches class to instrument\",\n );\n return;\n }\n\n if (BatchMessageClass?.prototype?.create) {\n const originalCreate = BatchMessageClass.prototype.create as Function;\n originalMethods.set(\"batch.messages.create\", originalCreate);\n const tracer = this.tracer;\n const wrapper = batchesWrapper(tracer);\n\n\n BatchMessageClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BatchMessageClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument batches: ${error}`);\n }\n}\n private _uninstrumentMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const MessagesClass = AnthropicSDK.Messages;\n\n const originalCreate = originalMethods.get(\"messages.create\");\n if (originalCreate && MessagesClass?.prototype) {\n MessagesClass.prototype.create =\n originalCreate as typeof MessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument messages: ${error}`);\n }\n }\n private _uninstrumentBetaMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n\n const originalCreate = originalMethods.get(\"beta.messages.create\");\n if (originalCreate && BetaMessagesClass?.prototype) {\n BetaMessagesClass.prototype.create =\n originalCreate as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument beta: ${error}`);\n }\n }\n private _uninstrumentBatchMessages(): void {\n try {\n const AnthropicSDK = resolveAnthropic();\n if (!AnthropicSDK) return;\n const BatchMessagesClass = AnthropicSDK.Messages?.Batches;\n\n const originalCreate = originalMethods.get(\"batch.messages.create\");\n if (originalCreate && BatchMessagesClass?.prototype) {\n BatchMessagesClass.prototype.create =\n originalCreate as typeof BatchMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument batches: ${error}`);\n }\n }\n}\n\nexport const anthropicInstrumentor = new NetraAnthropicInstrumentor();\n\nexport { AsyncStreamingWrapper, chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for Google GenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n","/**\n * Utility functions for Google GenAI instrumentation\n *\n * Google GenAI has a different response format than OpenAI:\n * - Response: { response: EnhancedGenerateContentResponse }\n * - EnhancedGenerateContentResponse: { candidates, usageMetadata, promptFeedback }\n * - UsageMetadata: { promptTokenCount, candidatesTokenCount, totalTokenCount, cachedContentTokenCount }\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nfunction safeStringify(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n args: Record<string, unknown>,\n): void {\n // Use a private property on the span to store kwargs temporarily for setResponseAttributes\n (span as any)._netra_kwargs = kwargs;\n if (!span.isRecording()) {\n return;\n }\n\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, \"google_genai\");\n\n // Model is set on the GenerativeModel instance, not in the request kwargs\n // We need to access it from `this.model` in the wrapper if available\n // For now, set from kwargs if provided\n if (kwargs.model !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Generation config parameters (from generationConfig object or direct kwargs)\n const generationConfig =\n (kwargs.generationConfig as Record<string, unknown>) ?? kwargs;\n\n if (generationConfig.temperature !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TEMPERATURE,\n Number(generationConfig.temperature),\n );\n }\n\n if (generationConfig.topP !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TOP_P,\n Number(generationConfig.topP),\n );\n }\n\n if (generationConfig.topK !== undefined) {\n span.setAttribute(\"gen_ai.request.top_k\", Number(generationConfig.topK));\n }\n\n if (generationConfig.maxOutputTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n Number(generationConfig.maxOutputTokens),\n );\n }\n\n if (generationConfig.stopSequences !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n safeStringify(generationConfig.stopSequences),\n );\n }\n\n // Candidate count\n if (generationConfig.candidateCount !== undefined) {\n span.setAttribute(\n \"gen_ai.request.candidate_count\",\n Number(generationConfig.candidateCount),\n );\n }\n\n // Presence/frequency penalty\n if (generationConfig.presencePenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_PRESENCE_PENALTY,\n Number(generationConfig.presencePenalty),\n );\n }\n if (generationConfig.frequencyPenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_FREQUENCY_PENALTY,\n Number(generationConfig.frequencyPenalty),\n );\n }\n\n // Embedding dimensions\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n\n // Tools\n if (Array.isArray(kwargs.tools) && kwargs.tools.length > 0) {\n span.setAttribute(\"gen_ai.request.tools_count\", kwargs.tools.length);\n }\n\n // Tool config\n if (kwargs.toolConfig !== undefined) {\n span.setAttribute(\n \"gen_ai.request.tool_config\",\n safeStringify(kwargs.toolConfig),\n );\n }\n\n // Safety settings\n if (\n Array.isArray(kwargs.safetySettings) &&\n kwargs.safetySettings.length > 0\n ) {\n span.setAttribute(\n \"gen_ai.request.safety_settings_count\",\n kwargs.safetySettings.length,\n );\n }\n\n // System instruction\n if (kwargs.systemInstruction !== undefined) {\n if (isTraceContentEnabled()) {\n span.setAttribute(\n \"gen_ai.request.system_instruction\",\n safeStringify(kwargs.systemInstruction),\n );\n }\n span.setAttribute(\"gen_ai.request.has_system_instruction\", true);\n }\n\n // Content tracing - prompts\n if (isTraceContentEnabled()) {\n _setPromptAttributes(span, kwargs, args);\n }\n}\n\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\n/**\n * Extract and set prompt content from Google GenAI request\n */\nfunction _setPromptAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n args: any,\n): void {\n // For generateContent, the prompt can be:\n // 1. A string (simple prompt)\n // 2. An array of Parts (Array<string | Part>)\n // 3. A GenerateContentRequest object with contents array\n\n let promptIndex = 0;\n\n // 1. Add system instruction if present (from getGenerativeModel)\n if (kwargs.systemInstruction !== undefined) {\n const systemInstruction = kwargs.systemInstruction as any;\n let systemContent = \"\";\n\n if (typeof systemInstruction === \"string\") {\n systemContent = systemInstruction;\n } else if (\n systemInstruction.parts &&\n Array.isArray(systemInstruction.parts)\n ) {\n systemContent = systemInstruction.parts\n .filter((p: any) => p.text !== undefined)\n .map((p: any) => String(p.text))\n .join(\"\");\n } else if (systemInstruction.text) {\n systemContent = String(systemInstruction.text);\n } else {\n systemContent = JSON.stringify(systemInstruction);\n }\n\n if (systemContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"system\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n systemContent,\n );\n promptIndex++;\n }\n }\n\n // 2. Add prompts from args (generateContent/embedContent call)\n if (!args) return;\n\n // Handle string prompt\n if (typeof args === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n args,\n );\n promptIndex++;\n return;\n }\n\n // Handle Array<string | Part>\n if (Array.isArray(args)) {\n const textParts = args\n .map((p: any) => {\n if (typeof p === \"string\") return p;\n if (p && typeof p.text === \"string\") return p.text;\n return \"\";\n })\n .filter(Boolean)\n .join(\" \");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n return;\n }\n\n // Handle GenerateContentRequest object { contents: [...] }\n const contents = args.contents as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(contents)) {\n for (const content of contents) {\n const role = String(content.role ?? \"user\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (Array.isArray(parts)) {\n const textParts = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n\n // Track non-text parts\n const inlineDataParts = parts.filter((p) => p.inlineData !== undefined);\n if (inlineDataParts.length > 0) {\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.has_inline_data`,\n true,\n );\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.inline_data_count`,\n inlineDataParts.length,\n );\n }\n }\n }\n }\n\n // For embedContent, handle content object { parts: [...] } or string\n if (args.content !== undefined) {\n const content = args.content as Record<string, unknown> | string;\n if (typeof content === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n content,\n );\n promptIndex++;\n } else if (content.parts !== undefined) {\n const parts = content.parts as Array<Record<string, unknown>>;\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n}\n\n/**\n * Set response attributes for Google GenAI responses\n * Handles the specific structure of GenerateContentResult\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) {\n return;\n }\n\n // Google GenAI returns { response: EnhancedGenerateContentResponse }\n // The response object itself is what we need to parse\n const actualResponse =\n (response.response as Record<string, unknown>) ?? response;\n\n // Set usage metadata\n _setUsageAttributes(span, actualResponse);\n\n // Set candidate attributes\n _setCandidateAttributes(span, actualResponse);\n\n // Set prompt feedback if present (content filtering)\n _setPromptFeedbackAttributes(span, actualResponse);\n\n // Set completion content if tracing is enabled\n if (isTraceContentEnabled()) {\n _setCompletionAttributes(span, actualResponse);\n }\n\n // Handle embedding response\n _setEmbeddingResponseAttributes(span, actualResponse);\n}\n\n/**\n * Extract and set token usage from usageMetadata\n */\nfunction _setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usageMetadata = response.usageMetadata as\n | Record<string, unknown>\n | undefined;\n if (!usageMetadata) return;\n\n // Prompt tokens\n if (usageMetadata.promptTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(usageMetadata.promptTokenCount),\n );\n }\n\n // Completion/candidates tokens\n if (usageMetadata.candidatesTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(usageMetadata.candidatesTokenCount),\n );\n }\n\n // Total tokens\n if (usageMetadata.totalTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(usageMetadata.totalTokenCount),\n );\n }\n\n // Cached content tokens\n if (usageMetadata.cachedContentTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(usageMetadata.cachedContentTokenCount),\n );\n }\n}\n\n/**\n * Extract and set attributes from candidates\n */\nfunction _setCandidateAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates) || candidates.length === 0) return;\n\n span.setAttribute(\"gen_ai.response.candidate_count\", candidates.length);\n\n const firstCandidate = candidates[0];\n\n // Finish reason\n if (firstCandidate.finishReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.finish_reason\",\n String(firstCandidate.finishReason),\n );\n }\n\n // Average log probs (if present)\n if (firstCandidate.avgLogprobs !== undefined) {\n span.setAttribute(\n \"gen_ai.response.avg_logprobs\",\n Number(firstCandidate.avgLogprobs),\n );\n }\n\n // Safety ratings\n const safetyRatings = firstCandidate.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings) && safetyRatings.length > 0) {\n span.setAttribute(\n \"gen_ai.response.safety_ratings_count\",\n safetyRatings.length,\n );\n\n // Set individual safety ratings\n for (let i = 0; i < safetyRatings.length; i++) {\n const rating = safetyRatings[i];\n if (rating.category !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.category`,\n String(rating.category),\n );\n }\n if (rating.probability !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.probability`,\n String(rating.probability),\n );\n }\n }\n }\n\n // Citation metadata\n const citationMetadata = firstCandidate.citationMetadata as\n | Record<string, unknown>\n | undefined;\n if (citationMetadata?.citationSources !== undefined) {\n const sources = citationMetadata.citationSources as Array<unknown>;\n span.setAttribute(\"gen_ai.response.citation_count\", sources.length);\n }\n\n // Grounding metadata\n if (firstCandidate.groundingMetadata !== undefined) {\n span.setAttribute(\"gen_ai.response.has_grounding\", true);\n }\n}\n\n/**\n * Set prompt feedback attributes (content filtering info)\n */\nfunction _setPromptFeedbackAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const promptFeedback = response.promptFeedback as\n | Record<string, unknown>\n | undefined;\n if (!promptFeedback) return;\n\n if (promptFeedback.blockReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_reason\",\n String(promptFeedback.blockReason),\n );\n }\n\n if (promptFeedback.blockReasonMessage !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_message\",\n String(promptFeedback.blockReasonMessage),\n );\n }\n\n const safetyRatings = promptFeedback.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings)) {\n span.setAttribute(\n \"gen_ai.response.prompt_safety_ratings_count\",\n safetyRatings.length,\n );\n }\n}\n\n/**\n * Extract and set completion content from candidates\n */\nfunction _setCompletionAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates)) return;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const content = candidate.content as Record<string, unknown> | undefined;\n\n if (!content) continue;\n\n const role = String(content.role ?? \"model\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (!Array.isArray(parts)) continue;\n\n // Extract text from parts\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textContent) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${i}.role`, role);\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${i}.content`,\n textContent,\n );\n }\n\n // Track function calls\n const functionCalls = parts.filter((p) => p.functionCall !== undefined);\n if (functionCalls.length > 0) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call_count`,\n functionCalls.length,\n );\n\n for (let j = 0; j < functionCalls.length; j++) {\n const fc = functionCalls[j].functionCall as Record<string, unknown>;\n if (fc.name !== undefined) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call.${j}.name`,\n String(fc.name),\n );\n }\n }\n }\n }\n}\n\n/**\n * Set attributes for embedding responses\n */\nfunction _setEmbeddingResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n // Single embedding response\n const embedding = response.embedding as Record<string, unknown> | undefined;\n if (embedding?.values !== undefined) {\n const values = embedding.values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n\n // Batch embedding response\n const embeddings = response.embeddings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(embeddings)) {\n span.setAttribute(\"gen_ai.response.embedding_count\", embeddings.length);\n if (embeddings.length > 0 && embeddings[0].values !== undefined) {\n const values = embeddings[0].values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n }\n}\n","import {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype GoogleGenAIRequestType = \"chat\" | \"embedding\";\n\nconst CHAT_SPAN_NAME = \"google_genai.chat\";\nconst EMBEDDING_SPAN_NAME = \"google_genai.embedding\";\n\nfunction googleGenAIWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n\n if (modelName) {\n kwargs.model = modelName;\n }\n if (systemInstruction) {\n kwargs.systemInstruction = systemInstruction;\n }\n\n const currentContext = context.active();\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n const startTime = Date.now();\n const response = original.apply(this, args);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\nfunction googleGenAIStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n\n if (modelName) kwargs.model = modelName;\n if (systemInstruction) kwargs.systemInstruction = systemInstruction;\n\n const currentContext = context.active();\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n const startTime = Date.now();\n\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n\n const response = original.apply(this, args);\n\n // generateContentStream() is async -> Promise<StreamResult>\n if (!isPromise(response)) {\n // If SDK changes to sync stream, still handle it safely\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n\n return (async () => {\n try {\n const streamResult: any = await response;\n\n // Google GenAI stream result typically looks like:\n // { stream: AsyncIterable<Chunk>, response?: Promise<FinalResponse> }\n // We will wrap streamResult.stream so we can end span at completion.\n const originalStream: AsyncIterable<any> = streamResult.stream;\n\n if (\n !originalStream ||\n typeof originalStream[Symbol.asyncIterator] !== \"function\"\n ) {\n // Not a real stream, treat like non-stream\n const endTime = Date.now();\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return streamResult;\n }\n\n let chunkIndex = 0;\n let finalText = \"\";\n let firstTokenRecorded = false;\n\n const wrappedStream: AsyncIterable<any> = {\n [Symbol.asyncIterator]() {\n const iterator = originalStream[Symbol.asyncIterator]();\n return {\n async next() {\n try {\n const res = await iterator.next();\n\n // res = { value, done }\n if (res?.done) {\n const endTime = Date.now();\n\n // Await the response promise if available to get full metadata (token counts, etc.)\n if (\n streamResult.response &&\n isPromise(streamResult.response)\n ) {\n try {\n const finalResponse =\n await streamResult.response;\n const responseDict = modelAsDict(finalResponse);\n setResponseAttributes(span, responseDict);\n } catch {\n // If response promise fails, still set what we have from stream\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n } else {\n // Fallback: set attributes from streamResult\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\n \"llm.response.duration\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return res;\n }\n\n const chunk = res.value;\n\n // Optional: store chunk-by-chunk attributes if you want\n // span.setAttribute(`llm.stream.chunk.${chunkIndex}`, ...)\n // Best-effort: accumulate chunk.text() if available\n try {\n const t =\n typeof chunk?.text === \"function\"\n ? chunk.text()\n : chunk?.text;\n if (typeof t === \"string\") {\n if (t && !firstTokenRecorded) {\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n (Date.now() - startTime) / 1000,\n );\n firstTokenRecorded = true;\n }\n finalText += t;\n }\n } catch {\n // ignore chunk parsing issues\n }\n\n chunkIndex += 1;\n return res;\n } catch (error) {\n // End span on streaming error\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error\n ? error.message\n : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n async return() {\n // Called if consumer stops early (break)\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return { value: undefined, done: true };\n },\n };\n },\n };\n\n // Return same object but with wrapped stream\n return {\n ...streamResult,\n stream: wrappedStream,\n };\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\n/* Specific wrappers for different requests */\nexport const chatWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\nexport const chatStreamWrapper = (tracer: Tracer) =>\n googleGenAIStreamWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n","/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatStreamWrapper, chatWrapper, embeddingsWrapper } from \"./wrappers\";\n// Cache the resolved GenerativeModel class\nlet GenerativeModel: any = null;\n\nimport shimmer from \"shimmer\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.google_genai\";\nconst INSTRUMENTS = [\"@google/genai >= 0.24.1\"];\n\n// Track instrumentation state\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Dynamically resolve the Google GenAI module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveGoogleGenerativeAIAsync(): Promise<any> {\n if (GenerativeModel) return GenerativeModel;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - @google/generative-ai is an optional peer dependency\n const googleGenAIModule = await import(\"@google/generative-ai\");\n GenerativeModel =\n googleGenAIModule.GenerativeModel ||\n googleGenAIModule.default?.GenerativeModel ||\n googleGenAIModule.default ||\n googleGenAIModule;\n return GenerativeModel;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveGoogleGenerativeAIAsync() first to populate cache.\n */\nfunction resolveGoogleGenerativeAI(): any {\n return GenerativeModel;\n}\n\n/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nexport class NetraGoogleGenerativeAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n // Tracer is initialized lazily during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n /**\n * Instrument Google GenAI client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {},\n ): Promise<NetraGoogleGenerativeAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n // Resolve Google GenAI from application context using dynamic import\n const model = await resolveGoogleGenerativeAIAsync();\n if (!model) {\n // package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentGenerativeModel();\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Google GenAI client methods (sync version)\n */\n instrument(\n options: InstrumentorOptions = {},\n ): NetraGoogleGenerativeAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n // Check if we have the cached class\n if (!resolveGoogleGenerativeAI()) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Google GenAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentGenerativeModel();\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument Google GenAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Google GenAI is not instrumented\");\n return;\n }\n\n this._uninstrumentGenerativeModel();\n\n GenerativeModel = null;\n isInstrumented = false;\n }\n\n /**\n * Check if Google GenAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentGenerativeModel(): void {\n if (!this.tracer) return;\n\n try {\n if (!GenerativeModel) {\n Logger.error(\n \"Failed to find Google GenAI GenerativeModel to instrument\",\n );\n return;\n }\n\n const tracer = this.tracer;\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContent\",\n chatWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContentStream\",\n chatStreamWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"embedContent\",\n embeddingsWrapper(tracer),\n );\n } catch (error) {\n Logger.debug(\n `Google GenAI instrumentation: failed to instrument: ${error}`,\n );\n }\n }\n\n private _uninstrumentGenerativeModel(): void {\n try {\n // Verify methods before unwrapping\n if (typeof GenerativeModel.prototype.generateContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContent\");\n }\n if (\n typeof GenerativeModel.prototype.generateContentStream === \"function\"\n ) {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContentStream\");\n }\n if (typeof GenerativeModel.prototype.embedContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"embedContent\");\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Google GenAI: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const googleGenerativeAIInstrumentor =\n new NetraGoogleGenerativeAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport { chatWrapper, chatStreamWrapper, embeddingsWrapper } from \"./wrappers\";\n\n// Re-export utilities\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"groq\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseResponseAttributes(span, response);\n}\n","import { Tracer, Span, SpanKind, SpanStatusCode, context } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport {\n defineHidden,\n modelAsDict,\n isPromise,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\ntype GroqRequestType = \"chat\";\n\nconst CHAT_SPAN_NAME = \"groq.chat\";\nconst STREAM_ENABLED_REQUESTS: GroqRequestType[] = [\"chat\"];\n\nfunction groqWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GroqRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n const isStreaming = kwargs.stream === true;\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext\n );\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream: any = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new StreamingWrapper(span, response, startTime, kwargs);\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n groqWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, any> = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (!this.iterator) {\n if (typeof this.response[Symbol.iterator] === \"function\") {\n this.iterator = this.response[Symbol.iterator]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) {\n throw new Error(\"Iterator not initialized\");\n }\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict =\n typeof chunk?.toDict === \"function\" ? chunk.toDict() : chunk;\n const choices = this.completeResponse.choices as any[];\n\n if (chunkDict.model) this.completeResponse.model = chunkDict.model;\n\n const chunkChoices = chunkDict.choices || [];\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = choice.delta || {};\n if (delta?.content) {\n if (!choices[index].message) {\n choices[index].message = { role: \"assistant\", content: \"\" };\n }\n choices[index].message.content += String(delta.content);\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n if (chunkDict.response?.status === \"completed\") {\n const outputs = chunkDict.response.output || [];\n outputs.forEach((output: any) => {\n const content = output.content || [];\n content.forEach((item: any) => {\n choices.push({\n message: { role: \"assistant\", content: item.text || \"\" },\n });\n });\n });\n this.completeResponse.usage = chunkDict.response.usage || {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const duration = (Date.now() - this.startTime) / 1000;\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (Symbol.iterator in (this.response as any)) {\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n\n // Completion API\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n // Response API\n if ((chunkDict.response as any)?.status === \"completed\") {\n const response = chunkDict.response as Record<string, unknown>;\n const responseOutput = (response.output || []) as Array<\n Record<string, unknown>\n >;\n responseOutput.forEach((output: any) => {\n const content = output.content as Array<Record<string, unknown>>;\n if (content) {\n for (const contentItem of content) {\n const assistantText = contentItem.text || \"\";\n // Append to choices array instead of replacing\n (\n this.completeResponse.choices as Array<Record<string, unknown>>\n ).push({\n message: { role: \"assistant\", content: assistantText },\n });\n }\n }\n const usage = response.usage || {};\n this.completeResponse.usage = usage;\n });\n }\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","/**\n * Custom Groq instrumentor for Netra SDK\n *\n * Note: 'groq-sdk' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.groq\";\nconst INSTRUMENTS = [\"groq-sdk >= 0.3.0\"];\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\n// Cache the resolved Groq class\nlet GroqClass: any = null;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Dynamically resolve the Groq module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveGroqAsync(): Promise<any> {\n if (GroqClass) return GroqClass;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - groq-sdk is an optional peer dependency\n const groqModule = await import(\"groq-sdk\");\n GroqClass = groqModule.Groq || groqModule.default || groqModule;\n return GroqClass;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveGroqAsync() first to populate cache.\n */\nfunction resolveGroq(): any {\n return GroqClass;\n}\n\nexport class NetraGroqInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument Groq client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraGroqInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n // Resolve Groq from application context using dynamic import\n const Groq = await resolveGroqAsync();\n if (!Groq) {\n // groq-sdk package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(Groq);\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Groq client methods (sync version - for backwards compatibility)\n * Note: This uses a cached Groq class. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraGroqInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n // Try to get cached Groq class (must have called instrumentAsync first)\n const Groq = resolveGroq();\n if (!Groq) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Groq:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentChatCompletions(Groq);\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Groq is not instrumented\");\n return;\n }\n\n const Groq = resolveGroq();\n if (Groq) {\n this._uninstrumentChatCompletions(Groq);\n }\n\n originalMethods.clear();\n GroqClass = null;\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentChatCompletions(Groq: any): void {\n if (!this.tracer) {\n Logger.warn(\"Groq instrumentation: No tracer available\");\n return;\n }\n\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n if (!CompletionsClass?.prototype?.create) {\n Logger.error(\n \"Groq instrumentation: Could not find Groq chat completions class to instrument\"\n );\n return;\n }\n const originalCreate = CompletionsClass.prototype.create as Function;\n originalMethods.set(\"chat.completions.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n CompletionsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n const wrappedFn = (...a: unknown[]) => original(...a);\n return wrapper(wrappedFn, this, args, kwargs);\n } as typeof CompletionsClass.prototype.create;\n } catch (error) {\n Logger.error(\n `Groq instrumentation: Failed to instrument chat completions: ${error}`\n );\n }\n }\n\n private _uninstrumentChatCompletions(Groq: any): void {\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n const originalCreate = originalMethods.get(\"chat.completions.create\");\n if (originalCreate && CompletionsClass?.prototype) {\n CompletionsClass.prototype.create =\n originalCreate as typeof CompletionsClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument chat completions: ${error}`);\n }\n }\n}\n\nexport const groqInstrumentor = new NetraGroqInstrumentor();\n\nexport { chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n","//#region rolldown:runtime\nvar __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n};\n\n//#endregion\nexport { __export };","import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n","/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n","import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented\n extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n","// Inlined from https://github.com/flexdinesh/browser-or-node\ndeclare global {\n const Deno:\n | {\n version: {\n deno: string;\n };\n env: {\n get: (name: string) => string | undefined;\n };\n }\n | undefined;\n}\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nexport const isWebWorker = () =>\n typeof globalThis === \"object\" &&\n globalThis.constructor &&\n globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const isJsDom = () =>\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\"));\n\n// Supabase Edge Function provides a `Deno` global object\n// without `version` property\nexport const isDeno = () => typeof Deno !== \"undefined\";\n\n// Mark not-as-node if in Supabase Edge Function\nexport const isNode = () =>\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\" &&\n !isDeno();\n\nexport const getEnv = () => {\n let env: string;\n if (isBrowser()) {\n env = \"browser\";\n } else if (isNode()) {\n env = \"node\";\n } else if (isWebWorker()) {\n env = \"webworker\";\n } else if (isJsDom()) {\n env = \"jsdom\";\n } else if (isDeno()) {\n env = \"deno\";\n } else {\n env = \"other\";\n }\n\n return env;\n};\n\nexport type RuntimeEnvironment = {\n library: string;\n libraryVersion?: string;\n runtime: string;\n runtimeVersion?: string;\n};\n\nlet runtimeEnvironment: RuntimeEnvironment | undefined;\n\nexport function getRuntimeEnvironment(): RuntimeEnvironment {\n if (runtimeEnvironment === undefined) {\n const env = getEnv();\n\n runtimeEnvironment = {\n library: \"langchain-js\",\n runtime: env,\n };\n }\n return runtimeEnvironment;\n}\n\nexport function getEnvironmentVariable(name: string): string | undefined {\n // Certain Deno setups will throw an error if you try to access environment variables\n // https://github.com/langchain-ai/langchainjs/issues/1412\n try {\n if (typeof process !== \"undefined\") {\n // eslint-disable-next-line no-process-env\n return process.env?.[name];\n } else if (isDeno()) {\n return Deno?.env.get(name);\n } else {\n return undefined;\n }\n } catch {\n return undefined;\n }\n}\n","import * as uuid from \"uuid\";\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type {\n ChatGenerationChunk,\n GenerationChunk,\n LLMResult,\n} from \"../outputs.js\";\nimport {\n Serializable,\n Serialized,\n SerializedNotImplemented,\n get_lc_unique_name,\n} from \"../load/serializable.js\";\nimport type { SerializedFields } from \"../load/map_keys.js\";\nimport type { DocumentInterface } from \"../documents/document.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Error = any;\n\n/**\n * Interface for the input parameters of the BaseCallbackHandler class. It\n * allows to specify which types of events should be ignored by the\n * callback handler.\n */\nexport interface BaseCallbackHandlerInput {\n ignoreLLM?: boolean;\n ignoreChain?: boolean;\n ignoreAgent?: boolean;\n ignoreRetriever?: boolean;\n ignoreCustomEvent?: boolean;\n _awaitHandler?: boolean;\n raiseError?: boolean;\n}\n\n/**\n * Interface for the indices of a new token produced by an LLM or Chat\n * Model in streaming mode.\n */\nexport interface NewTokenIndices {\n prompt: number;\n completion: number;\n}\n\n// TODO: Add all additional callback fields here\nexport type HandleLLMNewTokenCallbackFields = {\n chunk?: GenerationChunk | ChatGenerationChunk;\n};\n\n/**\n * Abstract class that provides a set of optional methods that can be\n * overridden in derived classes to handle various events during the\n * execution of a LangChain application.\n */\nabstract class BaseCallbackHandlerMethodsClass {\n /**\n * Called at the start of an LLM or Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleLLMStart?(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called when an LLM/ChatModel in `streaming` mode produces a new token\n */\n handleLLMNewToken?(\n token: string,\n /**\n * idx.prompt is the index of the prompt that produced the token\n * (if there are multiple prompts)\n * idx.completion is the index of the completion that produced the token\n * (if multiple completions per prompt are requested)\n */\n idx: NewTokenIndices,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if an LLM/ChatModel run encounters an error\n */\n handleLLMError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of an LLM/ChatModel run, with the output and the run ID.\n */\n handleLLMEnd?(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleChatModelStart?(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chain run, with the chain name and inputs\n * and the run ID.\n */\n handleChainStart?(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n runType?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n parentRunId?: string,\n extra?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Chain run encounters an error\n */\n handleChainError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Chain run, with the outputs and the run ID.\n */\n handleChainEnd?(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Tool run, with the tool name and input\n * and the run ID.\n */\n handleToolStart?(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Tool run encounters an error\n */\n handleToolError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Tool run, with the tool output and the run ID.\n */\n handleToolEnd?(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleText?(\n text: string,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent is about to execute an action,\n * with the action and the run ID.\n */\n handleAgentAction?(\n action: AgentAction,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent finishes execution, before it exits.\n * with the final output and the run ID.\n */\n handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n handleRetrieverStart?(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverEnd?(\n documents: DocumentInterface[],\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleCustomEvent?(\n eventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any,\n runId: string,\n tags?: string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n}\n\n/**\n * Base interface for callbacks. All methods are optional. If a method is not\n * implemented, it will be ignored. If a method is implemented, it will be\n * called at the appropriate time. All methods are called with the run ID of\n * the LLM/ChatModel/Chain that is running, which is generated by the\n * CallbackManager.\n *\n * @interface\n */\nexport type CallbackHandlerMethods = BaseCallbackHandlerMethodsClass;\n\n/**\n * Interface for handlers that can indicate a preference for streaming responses.\n * When implemented, this allows the handler to signal whether it prefers to receive\n * streaming responses from language models rather than complete responses.\n */\nexport interface CallbackHandlerPrefersStreaming {\n readonly lc_prefer_streaming: boolean;\n}\n\nexport function callbackHandlerPrefersStreaming(x: BaseCallbackHandler) {\n return \"lc_prefer_streaming\" in x && x.lc_prefer_streaming;\n}\n\n/**\n * Abstract base class for creating callback handlers in the LangChain\n * framework. It provides a set of optional methods that can be overridden\n * in derived classes to handle various events during the execution of a\n * LangChain application.\n */\nexport abstract class BaseCallbackHandler\n extends BaseCallbackHandlerMethodsClass\n implements BaseCallbackHandlerInput, Serializable\n{\n lc_serializable = false;\n\n get lc_namespace(): [\"langchain_core\", \"callbacks\", string] {\n return [\"langchain_core\", \"callbacks\", this.name];\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_attributes(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof BaseCallbackHandler),\n ];\n }\n\n lc_kwargs: SerializedFields;\n\n abstract name: string;\n\n ignoreLLM = false;\n\n ignoreChain = false;\n\n ignoreAgent = false;\n\n ignoreRetriever = false;\n\n ignoreCustomEvent = false;\n\n raiseError = false;\n\n awaitHandlers =\n getEnvironmentVariable(\"LANGCHAIN_CALLBACKS_BACKGROUND\") === \"false\";\n\n constructor(input?: BaseCallbackHandlerInput) {\n super();\n this.lc_kwargs = input || {};\n if (input) {\n this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM;\n this.ignoreChain = input.ignoreChain ?? this.ignoreChain;\n this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent;\n this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever;\n this.ignoreCustomEvent =\n input.ignoreCustomEvent ?? this.ignoreCustomEvent;\n this.raiseError = input.raiseError ?? this.raiseError;\n this.awaitHandlers =\n this.raiseError || (input._awaitHandler ?? this.awaitHandlers);\n }\n }\n\n copy(): BaseCallbackHandler {\n return new (this.constructor as new (\n input?: BaseCallbackHandlerInput\n ) => BaseCallbackHandler)(this);\n }\n\n toJSON(): Serialized {\n return Serializable.prototype.toJSON.call(this);\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return Serializable.prototype.toJSONNotImplemented.call(this);\n }\n\n static fromMethods(methods: CallbackHandlerMethods) {\n class Handler extends BaseCallbackHandler {\n name = uuid.v7();\n\n constructor() {\n super();\n Object.assign(this, methods);\n }\n }\n return new Handler();\n }\n}\n\nexport const isBaseCallbackHandler = (x: unknown) => {\n const callbackHandler = x as BaseCallbackHandler;\n return (\n callbackHandler !== undefined &&\n typeof callbackHandler.copy === \"function\" &&\n typeof callbackHandler.name === \"string\" &&\n typeof callbackHandler.awaitHandlers === \"boolean\"\n );\n};\n","import { Span } from \"@opentelemetry/api\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { SpanAttributes } from \"../span-attributes\";\n\nexport const NetraLanggraphAttributes = {\n spanType: \"netra.span.type\",\n entityInput: \"netra.entity.input\",\n entityOutput: \"netra.entity.output\",\n} as const;\n\nconst tagFilter = (tag: string) => {\n const filterableTags = [\"langsmith:hidden\"];\n return !filterableTags.includes(tag);\n};\n\nconst metadataFilter = (key: string) => {\n return !key.startsWith(\"__\");\n};\n\nexport function setGraphInputAttributes(\n span: Span,\n inputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify({ inputs }),\n );\n}\n\nexport function setGraphOutputAttributes(\n span: Span,\n outputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs }),\n );\n}\n\nexport function setLlmRequestAttributes(\n span: Span,\n metadata: Record<string, any>,\n prompts: string[],\n extraParams: Record<string, any>,\n): void {\n setLlmPrompts(span, prompts);\n const attributeMappings = mapLlmAttributes(metadata, extraParams);\n for (let [key, value] of Object.entries(attributeMappings)) {\n if (value !== undefined) {\n span.setAttribute(key, value);\n }\n }\n}\n\nexport function setChainInputAttributes(\n span: Span,\n inputs: ChainValues,\n tags?: string[],\n metadata?: Record<string, unknown>,\n): void {\n const entityInputs: Record<string, any> = { inputs };\n\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityInputs[\"tags\"] = filteredTags;\n }\n }\n\n if (metadata) {\n const filteredMetadata: Record<string, any> = {};\n const kwargs: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n if (key === \"langgraph_node\") kwargs.name = value;\n }\n\n entityInputs[\"metadata\"] = filteredMetadata;\n if (Object.keys(kwargs).length > 0) {\n entityInputs[\"kwargs\"] = kwargs;\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n}\n\nexport function setChainOutputAttributes(\n span: Span,\n outputs: ChainValues,\n tags?: string[],\n): void {\n const entityOutputs: Record<string, any> = { outputs };\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityOutputs[\"kwargs\"] = { tags: filteredTags };\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nexport function setToolAttributes(\n span: Span,\n toolName: string,\n input: Record<string, any>,\n output: string,\n metadata?: Record<string, any>,\n tags?: string[],\n): void {\n span.setAttribute(NetraLanggraphAttributes.spanType, \"TOOL\");\n const filteredTags = tags?.filter(tagFilter) ?? [];\n const filteredMetadata: Record<string, any> = {};\n\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n }\n }\n\n const entityInputs: Record<string, any> = {\n input_str: JSON.stringify(input),\n metadata: filteredMetadata,\n tags: filteredTags,\n };\n\n const entityOutputs: Record<string, any> = {\n output,\n kwargs: { name: toolName, tags: filteredTags },\n };\n\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nfunction mapLlmAttributes(\n metadata: Record<string, any>,\n extraParams: Record<string, any>,\n): Record<string, any> {\n const options = extraParams?.invocation_params?.options || {};\n\n return {\n [SpanAttributes.LLM_REQUEST_MODEL]: options.model || metadata.ls_model_name,\n [SpanAttributes.LLM_REQUEST_TEMPERATURE]:\n options.temperature ?? metadata.ls_temperature,\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n options.num_predict ?? metadata.ls_max_tokens,\n [SpanAttributes.LLM_FREQUENCY_PENALTY]: options.frequency_penalty,\n [SpanAttributes.LLM_PRESENCE_PENALTY]: options.presence_penalty,\n [SpanAttributes.LLM_CHAT_STOP_SEQUENCES]: options.stop ?? metadata.ls_stop,\n [SpanAttributes.LLM_REQUEST_TOP_P]: options.top_p,\n };\n}\n\nfunction setLlmPrompts(span: Span, prompts: string[]): void {\n const seperator = \":\";\n const roleMap: Record<string, string> = { human: \"user\" };\n\n prompts.forEach((prompt, index) => {\n const [role, ...rest] = prompt.split(seperator);\n const content = rest.join(seperator);\n\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.role`,\n roleMap[role.toLowerCase()] ?? role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n content,\n );\n });\n}\n","import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { LLMResult } from \"@langchain/core/outputs\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n Span,\n SpanKind,\n Tracer,\n Context,\n context,\n trace,\n createContextKey,\n} from \"@opentelemetry/api\";\n\nimport { Logger } from \"../../logger\";\nimport {\n defineHidden,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Context key to track if we're inside a LangGraph instrumented call\n// This prevents double-instrumentation when invoke internally calls stream\nconst LANGGRAPH_INSTRUMENTATION_ACTIVE = createContextKey(\"netra.langgraph.active\");\n\nfunction getContextManager(): any {\n try {\n if ((context as any)._getContextManager) {\n return (context as any)._getContextManager();\n }\n\n const globalSymbols = Object.getOwnPropertySymbols(global);\n const otelSymbol = globalSymbols.find(s =>\n s.toString().includes(\"opentelemetry.js.api\"),\n );\n if (otelSymbol) {\n const globalState = (global as any)[otelSymbol];\n if (globalState?.contextManager) {\n return globalState.contextManager;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nfunction enterWithContext(newContext: Context): void {\n const contextManager = getContextManager();\n if (!contextManager) return;\n\n if (typeof contextManager.enterWith === \"function\") {\n contextManager.enterWith(newContext);\n return;\n }\n\n if (\n contextManager._asyncLocalStorage &&\n typeof contextManager._asyncLocalStorage.enterWith === \"function\"\n ) {\n contextManager._asyncLocalStorage.enterWith(newContext);\n }\n}\nimport {\n NetraLanggraphAttributes,\n setChainInputAttributes,\n setChainOutputAttributes,\n setGraphInputAttributes,\n setGraphOutputAttributes,\n setLlmRequestAttributes,\n setToolAttributes,\n} from \"./utils\";\n\ntype AnyFunc = (...args: any[]) => any;\ntype AsyncIterableFunc = (...args: any[]) => Promise<AsyncIterable<any>>;\n\nclass NetraLanggraphCallbackHandler extends BaseCallbackHandler {\n name = \"netra-langgraph-callback-handler\";\n // Map runId -> Span for explicit parenting\n private spans: Map<string, Span> = new Map();\n private nodeAttributes: Map<string, Record<string, any>> = new Map();\n private runStack: string[] = [];\n private inferredParents: Map<string, string> = new Map();\n\n constructor(\n private tracer: Tracer,\n private rootSpan: Span,\n ) {\n super();\n }\n\n private getParentSpan(parentRunId?: string): Span {\n if (parentRunId && this.spans.has(parentRunId)) {\n return this.spans.get(parentRunId)!;\n }\n return this.rootSpan;\n }\n\n private addNodeAttributes(runId: string, attributes: Record<string, any>) {\n const current = this.nodeAttributes.get(runId) || {};\n this.nodeAttributes.set(runId, { ...current, ...attributes });\n }\n\n private inferParentRunId(parentRunId?: string): string | undefined {\n if (parentRunId) return parentRunId;\n return this.runStack.length > 0\n ? this.runStack[this.runStack.length - 1]\n : undefined;\n }\n\n private pushRun(runId: string): void {\n this.runStack.push(runId);\n }\n\n private popRun(runId: string): void {\n const last = this.runStack[this.runStack.length - 1];\n if (last === runId) {\n this.runStack.pop();\n return;\n }\n const idx = this.runStack.lastIndexOf(runId);\n if (idx >= 0) {\n this.runStack.splice(idx, 1);\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n runType?: string,\n ) {\n const metadataNodeName =\n typeof metadata?.langgraph_node === \"string\"\n ? (metadata.langgraph_node as string)\n : \"\";\n const runNameValue = typeof runName === \"string\" ? runName : \"\";\n const chainIdName =\n Array.isArray(chain.id) && chain.id.length > 0\n ? chain.id[chain.id.length - 1]\n : \"\";\n const nodeName = metadataNodeName || runNameValue || chainIdName || \"Chain\";\n const nodeType = chainIdName || \"Unknown\";\n\n const metadataKeys =\n metadata && typeof metadata === \"object\"\n ? Object.keys(metadata as Record<string, unknown>).join(\",\")\n : \"n/a\";\n Logger.debug(\n `NetraLanggraph handleChainStart: runId=${runId} parentRunId=${parentRunId} nodeName=${nodeName} nodeType=${nodeType} runName=${runNameValue || \"n/a\"} metadataKeys=${metadataKeys}`,\n );\n\n if (\n !nodeName ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const effectiveParentRunId = this.inferParentRunId(parentRunId);\n if (\n !parentRunId &&\n effectiveParentRunId &&\n effectiveParentRunId !== runId\n ) {\n this.inferredParents.set(runId, effectiveParentRunId);\n Logger.debug(`NetraLanggraph inferred parent: runId=${runId} parentRunId=${effectiveParentRunId}`);\n }\n\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n\n // Create span parented to the correct node/workflow\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${nodeName}.task`, undefined, ctx);\n\n setChainInputAttributes(span, inputs, tags, metadata);\n\n this.spans.set(runId, span);\n this.pushRun(runId);\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n\n setChainOutputAttributes(span, outputs, tags);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleChainError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n span.recordException(err);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const llmId = llm.id?.[llm.id.length - 1] || \"llm\";\n Logger.debug(`NetraLanggraph handleLLMStart: runId=${runId} parentRunId=${effectiveParentRunId} llmId=${llmId}`);\n }\n this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId: effectiveParentRunId, // Store parent ID to link back\n });\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const response = (output?.generations?.[0]?.[0] as any)?.message;\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n setLlmRequestAttributes(\n span,\n attributes.metadata,\n attributes.prompts,\n attributes.extraParams,\n );\n setBaseResponseAttributes(span, response);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>,\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n let parsedInput: Record<string | number, any>;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n parsedInput = {};\n }\n\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const toolName = tool.id?.[tool.id.length - 1] || \"tool\";\n Logger.debug(`NetraLanggraph handleToolStart: runId=${runId} parentRunId=${effectiveParentRunId} tool=${toolName}`);\n }\n this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\n parentRunId: effectiveParentRunId,\n });\n }\n\n async handleToolEnd(\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const { input, metadata } = attributes;\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n setToolAttributes(span, toolName, input ?? {}, output, metadata, tags);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n}\n\nclass LanggraphStreamingWrapper implements AsyncIterable<unknown> {\n private iterable: any;\n private output: Record<string, any> = {};\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private rootSpan!: Span;\n private rootContext!: Context;\n\n constructor(rootSpan: Span, rootContext: Context) {\n defineHidden(this, \"rootSpan\", rootSpan);\n defineHidden(this, \"rootContext\", rootContext);\n }\n\n toJSON() {\n try {\n return this.output;\n } catch {\n return {};\n }\n }\n\n async startStream(\n originalFunc: (...args: any[]) => any,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ) {\n this.iterable = await originalFunc.call(instance, input, config, ...rest);\n return this;\n }\n\n async *[Symbol.asyncIterator]() {\n const spanContext = trace.setSpan(this.rootContext, this.rootSpan);\n try {\n const iterator = await this.iterable[Symbol.asyncIterator]();\n while (true) {\n let result: any;\n await context.with(spanContext, async () => {\n result = await iterator.next();\n });\n if (result.done) break;\n const value = result?.value ?? {};\n this.output = { ...this.output, ...value };\n yield result;\n }\n this.rootSpan.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs: this.output }),\n );\n } catch (error) {\n this.rootSpan.recordException(error as Error);\n throw error;\n } finally {\n this.rootSpan.end();\n }\n }\n}\n\nexport class LanggraphWrapper {\n private spanName: string;\n\n constructor(private tracer: Tracer) {\n this.spanName = \"Langgraph.workflow\";\n }\n\n private getUpdatedConfig(\n config?: RunnableConfig,\n rootSpan?: Span,\n ): RunnableConfig {\n if (!rootSpan) return config || {};\n\n const callbackHandler = new NetraLanggraphCallbackHandler(\n this.tracer,\n rootSpan,\n );\n const callbacks = config?.callbacks;\n const normalizedCallbacks = callbacks\n ? Array.isArray(callbacks)\n ? callbacks\n : [callbacks]\n : [];\n const updatedConfig: RunnableConfig = {\n ...config,\n callbacks: [...normalizedCallbacks, callbackHandler],\n };\n return updatedConfig;\n }\n\n async invoke(\n originalFunc: AnyFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n const activeSpan = trace.getSpan(context.active());\n Logger.debug(`LangGraph invoke start. Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n\n // Start metadata spanning for the workflow\n // We use context.active() to parent to the current active span (e.g. request handler)\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active()\n );\n\n Logger.debug(`LangGraph span created. New TraceId: ${span.spanContext().traceId}, SpanId: ${span.spanContext().spanId}`);\n\n // Set the active flag to prevent nested instrumentation (e.g., when invoke calls stream internally)\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n\n return context.with(ctxWithFlag, async () => {\n {\n const innerSpan = trace.getSpan(context.active());\n Logger.debug(`Inside LangGraph context. Active TraceId: ${innerSpan?.spanContext().traceId}, SpanId: ${innerSpan?.spanContext().spanId}`);\n }\n try {\n setGraphInputAttributes(span, input);\n\n // Pass the workflow span as the root for the callback handler\n const updatedConfig = this.getUpdatedConfig(config, span);\n\n const output = await originalFunc.call(\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n\n setGraphOutputAttributes(span, output);\n\n return output;\n } catch (e) {\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n });\n }\n\n async stream(\n originalFunc: AsyncIterableFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n Logger.debug(\"LangGraph stream skipped (inside instrumented call)\");\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n Logger.debug(\"LangGraph stream starting instrumentation\");\n\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active(),\n );\n setGraphInputAttributes(span, input);\n const updatedConfig = this.getUpdatedConfig(config, span);\n try {\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n const streamingWrapper = new LanggraphStreamingWrapper(span, ctxWithFlag);\n return streamingWrapper.startStream(\n originalFunc,\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n }\n }\n}\n","import { RunnableConfig } from \"@langchain/core/runnables\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { LanggraphWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.langgraph\";\nconst INSTRUMENTS = [\"langgraph >= 1.1.1\"];\n\nlet isInstrumented = false;\nlet LanggraphClass: any = null;\nconst originalMethods: Map<string, Function | object> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Find a module in Node's require cache by name pattern.\n * This allows us to patch the same module instance the app is using.\n */\nfunction findModuleInCache(moduleName: string): any {\n // Try require.cache first (CommonJS)\n if (typeof require !== 'undefined' && require.cache) {\n const cache = require.cache;\n for (const key of Object.keys(cache)) {\n // Match the module name in the path, but exclude our own SDK's copy\n if (key.includes(moduleName.replace(/\\//g, '/')) && !key.includes('netra-sdk')) {\n Logger.debug(`Found module in require.cache: ${key}`);\n return cache[key]?.exports;\n }\n }\n Logger.debug(\n `Module ${moduleName} not found in require.cache. Cache keys containing 'langgraph':`,\n Object.keys(cache).filter(k => k.includes('langgraph')),\n );\n }\n return null;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n // First, try to find the module in require.cache (already loaded by the app)\n // This ensures we patch the same module instance the app is using\n let langgraphModule = findModuleInCache('@langchain/langgraph');\n\n if (langgraphModule) {\n Logger.debug(\"Found @langchain/langgraph in require.cache (using app's module instance)\");\n } else {\n // Fallback to dynamic import if not in cache\n langgraphModule = await import(\"@langchain/langgraph\");\n Logger.debug(\"Loaded @langchain/langgraph via dynamic import\");\n }\n\n Logger.debug(\"LangGraph Module Exports:\", Object.keys(langgraphModule));\n LanggraphClass = langgraphModule.CompiledStateGraph ?? langgraphModule.StateGraph;\n Logger.debug(\"Resolved LanggraphClass:\", !!LanggraphClass);\n Logger.debug(\"LanggraphClass name:\", LanggraphClass?.name);\n Logger.debug(\n \"LanggraphClass.prototype keys:\",\n LanggraphClass?.prototype ? Object.getOwnPropertyNames(LanggraphClass.prototype) : \"no prototype\",\n );\n Logger.debug(\"Has invoke on prototype:\", !!LanggraphClass?.prototype?.invoke);\n Logger.debug(\"Has stream on prototype:\", !!LanggraphClass?.prototype?.stream);\n\n // Check prototype chain to find where invoke is defined\n Logger.debug(\"Checking prototype chain for invoke location:\");\n let proto = LanggraphClass?.prototype;\n while (proto) {\n const hasOwn = Object.getOwnPropertyNames(proto).includes('invoke');\n Logger.debug(` ${proto.constructor?.name}: hasOwnProperty('invoke')=${hasOwn}`);\n if (hasOwn) {\n Logger.debug(` -> invoke is defined on: ${proto.constructor?.name}`);\n break;\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return LanggraphClass;\n } catch (e) {\n Logger.error(\"Failed to resolve LangGraph:\", e);\n return null;\n }\n}\n\nexport class NetraLanggraphInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraLanggraphInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Langgraph is already instrumented\");\n return this;\n }\n\n const Langgraph = await resolveLanggraph();\n if (!Langgraph) {\n Logger.warn(\"LangGraph class not found, skipping instrumentation\");\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentInvoke(Langgraph);\n this._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n Logger.warn(\"LangGraph is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (Langgraph) {\n this._uninstrumentInvoke(Langgraph);\n this._uninstrumentStream(Langgraph);\n }\n\n originalMethods.clear();\n LanggraphClass = null;\n isInstrumented = false;\n }\n\n private _instrumentInvoke(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the invoke method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('invoke')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.invoke) {\n Logger.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n\n Logger.debug(`Found invoke on prototype: ${targetProto.constructor?.name}`);\n\n const originalInvoke = targetProto.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.invoke.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n const patchedInvoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph invoke intercepted!\");\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\n };\n // Add marker to identify patched method\n (patchedInvoke as any).__netra_patched = true;\n targetProto.invoke = patchedInvoke;\n\n Logger.debug(`Successfully instrumented LangGraph invoke method on ${targetProto.constructor?.name}`);\n Logger.debug(`Patched Pregel class identity:`, targetProto.constructor);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph invoke: ${error}`);\n }\n }\n\n private _instrumentStream(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the stream method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('stream')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.stream) {\n Logger.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n\n Logger.debug(`Found stream on prototype: ${targetProto.constructor?.name}`);\n\n const originalStream = targetProto.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.stream.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n targetProto.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph stream intercepted!\");\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\n };\n\n Logger.debug(`Successfully instrumented LangGraph stream method on ${targetProto.constructor?.name}`);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph stream: ${error}`);\n }\n }\n\n private _uninstrumentInvoke(Langgraph: any): void {\n try {\n const originalInvoke = originalMethods.get(\"langgraph.graph.invoke\");\n const targetProto = originalMethods.get(\"langgraph.graph.invoke.proto\") || Langgraph?.prototype;\n if (originalInvoke && targetProto?.invoke) {\n targetProto.invoke = originalInvoke;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph invoke: ${error}`);\n }\n return;\n }\n\n private _uninstrumentStream(Langgraph: any): void {\n try {\n const originalStream = originalMethods.get(\"langgraph.graph.stream\");\n const targetProto = originalMethods.get(\"langgraph.graph.stream.proto\") || Langgraph?.prototype;\n if (originalStream && targetProto?.stream) {\n targetProto.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph stream: ${error}`);\n }\n return;\n }\n}\n\nexport const langgraphInstrumentor = new NetraLanggraphInstrumentor();\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for MistralAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","/**\n * MistralAI-specific utility functions for instrumentation.\n *\n * This file extends the shared instrumentation utilities with Mistral-only\n * fields while keeping attribute naming consistent across providers.\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport {\n modelAsDict,\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Re-export common utilities for convenience\nexport { modelAsDict, shouldSuppressInstrumentation };\n\n/**\n * Set request attributes on span for MistralAI.\n * Includes MistralAI-specific attributes.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n // Set shared/common attributes first\n setBaseRequestAttributes(span, kwargs, requestType, \"mistralai\");\n\n // MistralAI-specific: Agent ID (agents API)\n if (kwargs.agentId) {\n span.setAttribute(\"gen_ai.agent.id\", String(kwargs.agentId));\n span.setAttribute(\"llm.agent.id\", String(kwargs.agentId));\n }\n\n // MistralAI-specific: Safe prompt\n if (kwargs.safePrompt !== undefined) {\n span.setAttribute(\"gen_ai.mistral.safe_prompt\", Boolean(kwargs.safePrompt));\n }\n\n // MistralAI-specific: Random seed\n if (kwargs.randomSeed !== undefined && kwargs.randomSeed !== null) {\n span.setAttribute(\"gen_ai.mistral.random_seed\", Number(kwargs.randomSeed));\n }\n\n // MistralAI FIM-specific: prompt and suffix\n if (kwargs.prompt !== undefined) {\n span.setAttribute(\"llm.request.has_prompt\", true);\n }\n if (kwargs.suffix !== undefined && kwargs.suffix !== null) {\n span.setAttribute(\"llm.request.has_suffix\", true);\n }\n}\n\n/**\n * Set response attributes on span for MistralAI\n * Uses the shared response attributes (supports snake_case + camelCase).\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n // Use common response attributes - handles both snake_case and camelCase\n setBaseResponseAttributes(span, response);\n}\n","/**\n * Wrapper functions for MistralAI instrumentation\n */\n\nimport {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { defineHidden, isPromise } from \"../utils\";\nimport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\n// Span names\nconst CHAT_SPAN_NAME = \"mistralai.chat\";\nconst EMBEDDING_SPAN_NAME = \"mistralai.embedding\";\nconst FIM_SPAN_NAME = \"mistralai.fim\";\nconst AGENTS_SPAN_NAME = \"mistralai.agents\";\n// Align with OpenAI/Groq: streaming uses same span name\nconst CHAT_STREAM_SPAN_NAME = CHAT_SPAN_NAME;\nconst FIM_STREAM_SPAN_NAME = FIM_SPAN_NAME;\nconst AGENTS_STREAM_SPAN_NAME = AGENTS_SPAN_NAME;\n\ntype MistralRequestType = \"chat\" | \"embedding\" | \"fim\" | \"agent\";\n\nfunction mistralWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(value));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(response));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nfunction mistralStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.request.stream\": true,\n },\n },\n currentContext\n );\n\n try {\n // Force stream=true for attribution\n setRequestAttributes(span, { ...kwargs, stream: true }, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n if (\n stream &&\n typeof stream === \"object\" &&\n Symbol.asyncIterator in (stream as any)\n ) {\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n }\n return new StreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n if (\n response &&\n typeof response === \"object\" &&\n Symbol.asyncIterator in (response as any)\n ) {\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrapper factory for chat completions\n */\nexport const chatWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for chat stream\n */\nexport const chatStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, CHAT_STREAM_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for embeddings\n */\nexport const embeddingsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\n/**\n * Wrapper factory for FIM completions\n */\nexport const fimWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, FIM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for FIM stream\n */\nexport const fimStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, FIM_STREAM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for agents completions\n */\nexport const agentsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, AGENTS_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper factory for agents stream\n */\nexport const agentsStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, AGENTS_STREAM_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper for streaming responses when the SDK returns a sync Iterable/Iterator.\n * (Matches the newer OpenAI/Groq wrapper behavior.)\n */\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n\n constructor(span: Span, response: unknown, startTime: number, requestKwargs: Record<string, unknown>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) throw new Error(\"Response is not an iterable\");\n\n if (typeof (this.response as any)[Symbol.iterator] === \"function\") {\n this.iterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) throw new Error(\"Iterator not initialized\");\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n\n/**\n * Async wrapper for streaming responses (AsyncIterable from MistralAI SDK)\n */\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private iterator: AsyncIterator<unknown> | null = null;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n private completeResponse: Record<string, unknown>;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n this.completeResponse = { choices: [], model: \"\" };\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n // Initialize the iterator on first call\n if (!this.iterator) {\n // Check if response is an AsyncIterable and get the iterator\n if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.asyncIterator in this.response\n ) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.iterator in (this.response as any)\n ) {\n // Handle sync iterables\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n // Already an iterator\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n","/**\n * Custom MistralAI instrumentor for Netra SDK\n *\n * Note: '@mistralai/mistralai' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport {\n agentsStreamWrapper,\n agentsWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n} from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.mistral_ai\";\nconst INSTRUMENTS = [\"@mistralai/mistralai >= 1.0.0\"];\n\n// Store original methods for uninstrumentation\nconst originalMethods: Map<string, Function> = new Map();\n\n// Track instrumentation state\nlet isInstrumented = false;\n\n// Cache the resolved Mistral class\nlet MistralClass: any = null;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\ntype MistralResourceName = \"chat\" | \"embeddings\" | \"fim\" | \"agents\";\n\n/**\n * Dynamically resolve the Mistral module from the application's context.\n * This ensures we patch the same module instance that the application uses.\n *\n * IMPORTANT: We use dynamic import() to ensure we get the same ES module\n * instance that the application uses. Using require() would give us a\n * different instance due to ESM/CJS dual package handling in Node.js.\n */\nasync function resolveMistralAsync(): Promise<any> {\n if (MistralClass) return MistralClass;\n\n try {\n // Use dynamic import to get the same ES module instance\n // @ts-ignore - @mistralai/mistralai is an optional peer dependency\n const mistralModule = await import(\"@mistralai/mistralai\");\n MistralClass =\n mistralModule.Mistral || mistralModule.default || mistralModule;\n return MistralClass;\n } catch {\n // Package not installed - this is fine, it's optional\n return null;\n }\n}\n\n/**\n * Synchronous version that returns cached class or null.\n * Must call resolveMistralAsync() first to populate cache.\n */\nfunction resolveMistral(): any {\n return MistralClass;\n}\n\n/**\n * Custom MistralAI instrumentor for Netra SDK\n */\nexport class NetraMistralAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n private resourceCtors: Partial<Record<MistralResourceName, any>> = {};\n\n constructor() {\n // Initialize without tracer - will be set during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument MistralAI client methods (async version)\n * Uses dynamic import() to ensure we get the same ES module instance\n * that the application uses.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraMistralAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n // Resolve Mistral from application context using dynamic import\n const Mistral = await resolveMistralAsync();\n if (!Mistral) {\n // @mistralai/mistralai package not installed - skip silently (it's optional)\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n // Use provided tracer provider or fall back to global\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n // Instrument client methods. Mark instrumented only if we actually patched anything.\n const patchedChat = this._instrumentChat(Mistral);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral);\n const patchedFIM = this._instrumentFIM(Mistral);\n const patchedAgents = this._instrumentAgents(Mistral);\n const didPatch =\n patchedChat || patchedEmbeddings || patchedFIM || patchedAgents;\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument MistralAI client methods (sync version - for backwards compatibility)\n * Note: This uses a cached Mistral class. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraMistralAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n // Try to get cached Mistral class (must have called instrumentAsync first)\n const Mistral = resolveMistral();\n if (!Mistral) {\n // Fall back to async initialization\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument MistralAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n // Use provided tracer provider or fall back to global\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n // Instrument client methods. Mark instrumented only if we actually patched anything.\n const patchedChat = this._instrumentChat(Mistral);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral);\n const patchedFIM = this._instrumentFIM(Mistral);\n const patchedAgents = this._instrumentAgents(Mistral);\n const didPatch =\n patchedChat || patchedEmbeddings || patchedFIM || patchedAgents;\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument MistralAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"MistralAI is not instrumented\");\n return;\n }\n\n const Mistral = resolveMistral();\n if (Mistral) {\n this._uninstrumentChat(Mistral);\n this._uninstrumentEmbeddings(Mistral);\n this._uninstrumentFIM(Mistral);\n this._uninstrumentAgents(Mistral);\n }\n\n originalMethods.clear();\n MistralClass = null;\n isInstrumented = false;\n }\n\n /**\n * Check if MistralAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Resolve public resource constructors from the exported Mistral client.\n * This avoids relying on internal \"@mistralai/mistralai/sdk/*\" paths.\n *\n * We create a temporary client instance purely for discovery; it should not\n * make network calls.\n */\n private _ensureResourceCtors(Mistral: any): void {\n if (\n this.resourceCtors.chat &&\n this.resourceCtors.embeddings &&\n this.resourceCtors.fim &&\n this.resourceCtors.agents\n ) {\n return;\n }\n\n // Some SDK versions require an apiKey at construction time.\n // Use a dummy if none is provided; this is only for discovering constructors.\n const apiKey = process.env.MISTRAL_API_KEY ?? \"netra_dummy_api_key\";\n\n let client: any;\n try {\n client = new Mistral({ apiKey });\n } catch {\n // Fallback for alternate ctor signatures\n client = new Mistral(apiKey);\n }\n\n for (const name of [\"chat\", \"embeddings\", \"fim\", \"agents\"] as const) {\n const res = client?.[name];\n if (res && res.constructor) {\n this.resourceCtors[name] = res.constructor;\n }\n }\n }\n\n private _getCtor(Mistral: any, name: MistralResourceName): any | null {\n this._ensureResourceCtors(Mistral);\n return this.resourceCtors[name] ?? null;\n }\n\n private _instrumentChat(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n let didPatch = false;\n\n if (ChatClass?.prototype?.complete) {\n const originalComplete = ChatClass.prototype.complete;\n originalMethods.set(\"chat.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n ChatClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (ChatClass?.prototype?.stream) {\n const originalStream = ChatClass.prototype.stream;\n originalMethods.set(\"chat.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = chatStreamWrapper(tracer);\n\n ChatClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI chat:\", error);\n return false;\n }\n }\n\n private _instrumentEmbeddings(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n let didPatch = false;\n\n if (EmbeddingsClass?.prototype?.create) {\n const originalCreate = EmbeddingsClass.prototype.create;\n originalMethods.set(\"embeddings.create\", originalCreate);\n\n const tracer = this.tracer;\n const wrapper = embeddingsWrapper(tracer);\n\n EmbeddingsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI embeddings:\", error);\n return false;\n }\n }\n\n private _instrumentFIM(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n let didPatch = false;\n\n if (FimClass?.prototype?.complete) {\n const originalComplete = FimClass.prototype.complete;\n originalMethods.set(\"fim.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = fimWrapper(tracer);\n\n FimClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (FimClass?.prototype?.stream) {\n const originalStream = FimClass.prototype.stream;\n originalMethods.set(\"fim.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = fimStreamWrapper(tracer);\n\n FimClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI FIM:\", error);\n return false;\n }\n }\n\n private _instrumentAgents(Mistral: any): boolean {\n if (!this.tracer) return false;\n\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n let didPatch = false;\n\n if (AgentsClass?.prototype?.complete) {\n const originalComplete = AgentsClass.prototype.complete;\n originalMethods.set(\"agents.complete\", originalComplete);\n\n const tracer = this.tracer;\n const wrapper = agentsWrapper(tracer);\n\n AgentsClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (AgentsClass?.prototype?.stream) {\n const originalStream = AgentsClass.prototype.stream;\n originalMethods.set(\"agents.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = agentsStreamWrapper(tracer);\n\n AgentsClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI agents:\", error);\n return false;\n }\n }\n\n private _uninstrumentChat(Mistral: any): void {\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n\n const originalComplete = originalMethods.get(\"chat.complete\");\n if (originalComplete && ChatClass?.prototype) {\n ChatClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"chat.stream\");\n if (originalStream && ChatClass?.prototype) {\n ChatClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI chat: ${error}`);\n }\n }\n\n private _uninstrumentEmbeddings(Mistral: any): void {\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n\n const originalCreate = originalMethods.get(\"embeddings.create\");\n if (originalCreate && EmbeddingsClass?.prototype) {\n EmbeddingsClass.prototype.create = originalCreate;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI embeddings: ${error}`);\n }\n }\n\n private _uninstrumentFIM(Mistral: any): void {\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n\n const originalComplete = originalMethods.get(\"fim.complete\");\n if (originalComplete && FimClass?.prototype) {\n FimClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"fim.stream\");\n if (originalStream && FimClass?.prototype) {\n FimClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI FIM: ${error}`);\n }\n }\n\n private _uninstrumentAgents(Mistral: any): void {\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n\n const originalComplete = originalMethods.get(\"agents.complete\");\n if (originalComplete && AgentsClass?.prototype) {\n AgentsClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(\"agents.stream\");\n if (originalStream && AgentsClass?.prototype) {\n AgentsClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI agents: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const mistralAIInstrumentor = new NetraMistralAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport {\n agentsStreamWrapper,\n agentsWrapper,\n AsyncStreamingWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\n// Re-export utilities\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for OpenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\n/**\n * OpenAI-specific request attributes.\n * Calls the shared base implementation with \"openai\" as the system identifier,\n * then adds any OpenAI-only fields.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n): void {\n if (!span.isRecording()) return;\n setBaseRequestAttributes(span, kwargs, requestType, \"openai\");\n\n // Embeddings-only: output dimension hint\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n}\n\n/**\n * OpenAI-specific response attributes.\n * Delegates entirely to the shared base implementation.\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n setBaseResponseAttributes(span, response);\n}\n","import {\n Context,\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n defineHidden,\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport { OpenAIRequestType, StreamResponse, WrapperFn } from \"./types\";\n\nconst SPAN_NAMES: Record<OpenAIRequestType, string> = {\n chat: \"openai.chat\",\n embedding: \"openai.embedding\",\n response: \"openai.response\",\n};\n\nconst STREAMING_TYPES = new Set<OpenAIRequestType>([\"chat\", \"response\"]);\n\nfunction handleSpanError(span: Span, error: unknown): void {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n}\n\nfunction setSpanRequestContext(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n): void {\n setRequestAttributes(span, kwargs, requestType);\n}\n\nfunction finalizeSpanSuccess(\n span: Span,\n response: Record<string, unknown>,\n startTime: number,\n): void {\n setResponseAttributes(span, response);\n span.setAttribute(\"llm.response.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n}\n\nabstract class BaseStreamHandler {\n protected completeResponse: StreamResponse = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n protected span!: Span;\n protected startTime!: number;\n protected requestKwargs!: Record<string, unknown>;\n\n constructor(\n span: Span,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON(): StreamResponse {\n return this.completeResponse;\n }\n\n protected processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n\n if (chunkDict.model) {\n this.completeResponse.model = String(chunkDict.model);\n }\n\n const chunkChoices = chunkDict.choices;\n if (Array.isArray(chunkChoices)) {\n for (const choice of chunkChoices as Array<Record<string, unknown>>) {\n const index = Number(choice.index ?? 0);\n this.ensureChoice(index);\n const delta = (choice.delta ?? {}) as Record<string, unknown>;\n if (delta.content) {\n const entry = this.completeResponse.choices[index];\n if (!entry.message) {\n entry.message = { role: \"assistant\", content: \"\" };\n }\n const msg = entry.message as Record<string, unknown>;\n msg.content = String(msg.content ?? \"\") + String(delta.content);\n }\n if (choice.finish_reason) {\n this.completeResponse.choices[index].finish_reason =\n choice.finish_reason;\n }\n }\n }\n\n if (chunkDict.usage) {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n // Responses API: final response object arrives in a chunk\n const responseChunk = chunkDict.response as\n | Record<string, unknown>\n | undefined;\n if (responseChunk?.status === \"completed\") {\n const outputs = (responseChunk.output ?? []) as Array<\n Record<string, unknown>\n >;\n for (const out of outputs) {\n const content = out.content as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(content)) {\n for (const item of content) {\n this.completeResponse.choices.push({\n message: { role: \"assistant\", content: String(item.text ?? \"\") },\n });\n }\n }\n }\n this.completeResponse.usage = responseChunk.usage ?? {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n protected ensureChoice(index: number): void {\n const isChat = Array.isArray(this.requestKwargs.messages);\n while (this.completeResponse.choices.length <= index) {\n this.completeResponse.choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" },\n );\n }\n }\n\n protected finalizeSpan(code: SpanStatusCode): void {\n if (code === SpanStatusCode.OK) {\n finalizeSpanSuccess(\n this.span,\n this.completeResponse as Record<string, unknown>,\n this.startTime,\n );\n } else {\n this.span.setAttribute(\n \"llm.response.duration\",\n (Date.now() - this.startTime) / 1000,\n );\n this.span.setStatus({ code });\n this.span.end();\n }\n }\n}\n\nexport class StreamingWrapper\n extends BaseStreamHandler\n implements Iterable<unknown>\n{\n private iterator: Iterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): Iterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.iterator in (this.response as object)) {\n return (this.response as Iterable<unknown>)[Symbol.iterator]();\n }\n if (typeof (this.response as Iterator<unknown>).next === \"function\") {\n return this.response as Iterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nexport class AsyncStreamingWrapper\n extends BaseStreamHandler\n implements AsyncIterable<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): AsyncIterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.asyncIterator in (this.response as object)) {\n return (this.response as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n }\n if (Symbol.iterator in (this.response as object)) {\n const syncIter = (this.response as Iterable<unknown>)[Symbol.iterator]();\n return {\n async next() {\n return syncIter.next();\n },\n };\n }\n if (typeof (this.response as AsyncIterator<unknown>).next === \"function\") {\n return this.response as AsyncIterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nfunction executeStreaming(\n span: Span,\n ctx: Context,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const response = context.with(trace.setSpan(ctx, span), call);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n })();\n }\n\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction executeNonStreaming(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const result = call();\n\n if (isPromise(result)) {\n return result.then(\n (value) => {\n finalizeSpanSuccess(span, modelAsDict(value), startTime);\n return value;\n },\n (error) => {\n handleSpanError(span, error);\n throw error;\n },\n );\n }\n\n finalizeSpanSuccess(span, modelAsDict(result), startTime);\n return result;\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction openAIWrapper(\n tracer: Tracer,\n requestType: OpenAIRequestType,\n): WrapperFn {\n const spanName = SPAN_NAMES[requestType];\n const spanOpts = { kind: SpanKind.CLIENT, attributes: { \"llm.request.type\": requestType } };\n\n return (wrapped, instance, args, kwargs) => {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((v) => v) : result;\n }\n\n const currentContext = context.active();\n const call = () => wrapped.call(instance, ...args);\n const isStreaming = kwargs.stream === true && STREAMING_TYPES.has(requestType);\n\n if (isStreaming) {\n const span = tracer.startSpan(spanName, spanOpts, currentContext);\n return executeStreaming(span, currentContext, kwargs, requestType, call);\n }\n\n return tracer.startActiveSpan(spanName, spanOpts, (span) =>\n executeNonStreaming(span, kwargs, requestType, call),\n );\n };\n}\n\nexport const chatWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"embedding\");\n\nexport const responsesWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"response\");\n","import { createRequire } from \"module\";\nimport { trace, Tracer } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper, embeddingsWrapper, responsesWrapper } from \"./wrappers\";\nimport { InstrumentorOptions, PatchTarget } from \"./types\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.openai\";\nconst SUPPORTED_VERSIONS = [\"openai >= 4.0.0\"];\n\nlet openAIClasses: any[] = [];\n\n/**\n * Resolve the OpenAI module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveOpenAI(): Promise<any[]> {\n if (openAIClasses.length > 0) return openAIClasses;\n\n try {\n // @ts-ignore - openai is an optional peer dependency\n const mod = await import(\"openai\");\n openAIClasses.push(mod.OpenAI ?? mod.default ?? mod);\n } catch {\n Logger.warn(\"Failed to resolve OpenAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"openai\");\n const cjsClass = mod.OpenAI ?? mod.default ?? mod;\n // Only add if it resolves to a different class identity than what ESM gave us.\n // In bundler / dual-package setups the two could resolve to the same object,\n // and patching the same prototype twice would wrap methods redundantly.\n if (!openAIClasses.includes(cjsClass)) {\n openAIClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve OpenAI CJS module\");\n }\n\n return openAIClasses;\n}\n\nconst PATCH_TARGETS: PatchTarget[] = [\n {\n key: \"chat.completions.create\",\n getPrototype: (O) => O.Chat?.Completions?.prototype,\n wrapperFactory: chatWrapper,\n },\n {\n key: \"embeddings.create\",\n getPrototype: (O) => O.Embeddings?.prototype,\n wrapperFactory: embeddingsWrapper,\n },\n {\n key: \"responses.create\",\n getPrototype: (O) => O.Responses?.prototype,\n wrapperFactory: responsesWrapper,\n optional: true,\n },\n];\n\nexport class NetraOpenAIInstrumentor {\n private tracer: Tracer | null = null;\n private static _isInstrumented = false;\n private readonly originalMethods = new Map<string, Function>();\n\n instrumentationDependencies(): string[] {\n return [...SUPPORTED_VERSIONS];\n }\n\n isInstrumented(): boolean {\n return NetraOpenAIInstrumentor._isInstrumented;\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIInstrumentor> {\n if (this.isInstrumented()) {\n Logger.warn(\"OpenAI is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n this.tracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.patch(openAIClass, target, index);\n });\n });\n\n NetraOpenAIInstrumentor._isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!this.isInstrumented()) {\n Logger.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.unpatch(openAIClass, target, index);\n });\n });\n\n this.originalMethods.clear();\n openAIClasses.length = 0;\n NetraOpenAIInstrumentor._isInstrumented = false;\n }\n\n private patch(openAIClass: any, target: PatchTarget, index: number): void {\n if (!this.tracer) return;\n\n const proto = target.getPrototype(openAIClass);\n if (!proto?.create) {\n if (!target.optional) {\n Logger.error(`Failed to find OpenAI method to patch: ${target.key}`);\n }\n return;\n }\n\n try {\n const original = proto.create as Function;\n this.originalMethods.set(`${target.key}-${index}`, original);\n const wrapper = target.wrapperFactory(this.tracer);\n\n proto.create = function (this: unknown, ...args: unknown[]): unknown {\n const kwargs = (args[0] ?? {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => (original as any).call(this, ...a),\n this,\n args,\n kwargs,\n );\n };\n } catch (error) {\n Logger.error(`Failed to patch ${target.key}: ${error}`);\n }\n }\n\n private unpatch(openAIClass: any, target: PatchTarget, index: number): void {\n try {\n const proto = target.getPrototype(openAIClass);\n const original = this.originalMethods.get(`${target.key}-${index}`);\n if (proto && original) {\n proto.create = original;\n }\n } catch (error) {\n Logger.error(`Failed to unpatch ${target.key}: ${error}`);\n }\n }\n}\n\nexport const openAIInstrumentor = new NetraOpenAIInstrumentor();\n\nexport {\n AsyncStreamingWrapper,\n chatWrapper,\n embeddingsWrapper,\n responsesWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\nexport {\n setRequestAttributes,\n setResponseAttributes,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const INSTRUMENTATION_NAME = \"netra.instrumentation.openai_agents\";\nexport const DEFAULT_LLM_SYSTEM = \"openai\";\nexport const MAX_INDEXED_MESSAGES = 128;\nexport const MAX_STRINGIFY_LENGTH = 65_536;\n\nexport const NETRA_SPAN_TYPE_ATTR = \"netra.span.type\";\n\n// Workflow attributes\nexport const NETRA_WORKFLOW_NAME = \"netra.workflow.name\";\n\n// Agent attributes\nexport const NETRA_AGENT_NAME = \"netra.agent.name\";\nexport const NETRA_AGENT_HANDOFFS = \"netra.agent.handoffs\";\nexport const NETRA_AGENT_TOOLS = \"netra.agent.tools\";\nexport const NETRA_AGENT_OUTPUT_TYPE = \"netra.agent.output_type\";\n\n// Agents SDK trace/span attributes\nexport const NETRA_AGENTS_GROUP_ID = \"netra.agents.group_id\";\nexport const NETRA_AGENTS_METADATA = \"netra.agents.metadata\";\nexport const NETRA_AGENTS_SPAN_TYPE = \"netra.agents.span_type\";\nexport const NETRA_AGENTS_PARENT_AGENT = \"netra.agents.parent_agent\";\n\n// Handoff attributes\nexport const NETRA_HANDOFF_SOURCE_AGENT = \"netra.handoff.source_agent\";\nexport const NETRA_HANDOFF_TARGET_AGENT = \"netra.handoff.target_agent\";\n\n// Guardrail attributes\nexport const NETRA_GUARDRAIL_NAME = \"netra.guardrail.name\";\nexport const NETRA_GUARDRAIL_TRIGGERED = \"netra.guardrail.triggered\";\n\n// MCP attributes\nexport const NETRA_MCP_DATA = \"netra.mcp.data\";\nexport const NETRA_MCP_SERVER = \"netra.mcp.server\";\n\n// Custom span attributes\nexport const NETRA_SPAN_NAME = \"netra.span.name\";\nexport const NETRA_CUSTOM_DATA = \"netra.custom.data\";\n\n// GenAI semantic convention attributes not covered by shared SpanAttributes\nexport const GEN_AI_AGENT_NAME = \"gen_ai.agent.name\";\nexport const GEN_AI_TOOL_NAME = \"gen_ai.tool.name\";\nexport const GEN_AI_RESPONSE_ID = \"gen_ai.response.id\";\n","import { SpanType } from \"../../types\";\nimport { MAX_STRINGIFY_LENGTH } from \"./constants\";\nimport { AgentSpan, SpanData } from \"./types\";\n\nexport function safeJsonStringify(obj: unknown, maxLength: number = MAX_STRINGIFY_LENGTH): string {\n try {\n if (typeof obj === \"string\") {\n return maxLength > 0 && obj.length > maxLength ? obj.slice(0, maxLength) : obj;\n }\n const s = JSON.stringify(obj);\n return maxLength > 0 && s.length > maxLength ? s.slice(0, maxLength) : s;\n } catch {\n return String(obj);\n }\n}\n\nexport function getNetraSpanType(data: SpanData): SpanType {\n switch (data.type) {\n case \"agent\":\n return SpanType.AGENT;\n case \"generation\":\n case \"response\":\n return SpanType.GENERATION;\n case \"function\":\n case \"mcp_list_tools\":\n return SpanType.TOOL;\n case \"handoff\":\n return SpanType.HANDOFF;\n case \"guardrail\":\n return SpanType.GUARDRAIL;\n default:\n return SpanType.SPAN;\n }\n}\n\nexport function getSpanName(agentSpan: AgentSpan): string {\n const data = agentSpan.spanData;\n if (data.name) return data.name;\n if (data.type === \"handoff\" && data.to_agent) return `handoff to ${data.to_agent}`;\n return `openai.agents.${data.type}`;\n}\n\nexport function extractContentString(content: unknown): string {\n if (content === undefined || content === null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const texts: string[] = [];\n for (const item of content) {\n if (item && typeof item === \"object\") {\n const part = item as Record<string, unknown>;\n if (part.text !== undefined) {\n texts.push(String(part.text));\n }\n }\n }\n return texts.length > 0 ? texts.join(\" \") : safeJsonStringify(content);\n }\n return String(content);\n}\n\nexport function extractInstructions(response: unknown): string | undefined {\n if (!response || typeof response !== \"object\") return undefined;\n const resp = response as Record<string, unknown>;\n if (typeof resp.instructions === \"string\" && resp.instructions.length > 0) {\n return resp.instructions;\n }\n return undefined;\n}\n","import { Span as OTelSpan } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n GEN_AI_AGENT_NAME,\n GEN_AI_RESPONSE_ID,\n GEN_AI_TOOL_NAME,\n MAX_INDEXED_MESSAGES,\n NETRA_AGENT_HANDOFFS,\n NETRA_AGENT_NAME,\n NETRA_AGENT_OUTPUT_TYPE,\n NETRA_AGENT_TOOLS,\n NETRA_CUSTOM_DATA,\n NETRA_GUARDRAIL_NAME,\n NETRA_GUARDRAIL_TRIGGERED,\n NETRA_HANDOFF_SOURCE_AGENT,\n NETRA_HANDOFF_TARGET_AGENT,\n NETRA_MCP_DATA,\n NETRA_MCP_SERVER,\n NETRA_SPAN_NAME,\n} from \"./constants\";\nimport { Logger } from \"../../logger\";\nimport { AgentSpan, SpanData } from \"./types\";\nimport { extractContentString, extractInstructions, safeJsonStringify } from \"./utils\";\n\nexport function setSpanDataAttributes(\n otelSpan: OTelSpan,\n agentSpan: AgentSpan,\n systemName: string = DEFAULT_LLM_SYSTEM,\n): void {\n const data = agentSpan.spanData;\n\n switch (data.type) {\n case \"agent\":\n setAgentAttributes(otelSpan, data);\n break;\n case \"generation\":\n setGenerationAttributes(otelSpan, data, systemName);\n break;\n case \"response\":\n setResponseAttributes(otelSpan, agentSpan, systemName);\n break;\n case \"function\":\n setFunctionAttributes(otelSpan, data);\n break;\n case \"handoff\":\n setHandoffAttributes(otelSpan, data);\n break;\n case \"guardrail\":\n setGuardrailAttributes(otelSpan, data);\n break;\n case \"mcp_list_tools\":\n setMCPListToolsAttributes(otelSpan, data);\n break;\n default:\n setCustomAttributes(otelSpan, data);\n break;\n }\n}\n\nfunction setAgentAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_AGENT_NAME, data.name);\n span.setAttribute(GEN_AI_AGENT_NAME, data.name);\n }\n if (data.handoffs && data.handoffs.length > 0) {\n span.setAttribute(NETRA_AGENT_HANDOFFS, data.handoffs.join(\", \"));\n }\n if (data.tools && data.tools.length > 0) {\n span.setAttribute(NETRA_AGENT_TOOLS, data.tools.join(\", \"));\n }\n if (data.output_type) {\n span.setAttribute(NETRA_AGENT_OUTPUT_TYPE, data.output_type);\n }\n}\n\nfunction setGenerationAttributes(span: OTelSpan, data: SpanData, systemName: string): void {\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"chat\");\n\n if (data.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, data.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, data.model);\n }\n\n if (data.model_config) {\n const config = data.model_config;\n if (config.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, Number(config.temperature));\n }\n if (config.max_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MAX_TOKENS, Number(config.max_tokens));\n }\n if (config.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, Number(config.top_p));\n }\n if (config.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, Number(config.frequency_penalty));\n }\n if (config.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, Number(config.presence_penalty));\n }\n if (config.stop !== undefined) {\n span.setAttribute(SpanAttributes.LLM_CHAT_STOP_SEQUENCES, safeJsonStringify(config.stop));\n }\n if (config.reasoning_effort !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, String(config.reasoning_effort));\n } else if (config.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(config.reasoning));\n }\n }\n\n if (data.usage) {\n setUsageAttributes(span, data.usage);\n }\n\n if (data.input !== undefined) {\n setIndexedPromptAttributes(span, data.input);\n }\n if (data.output !== undefined) {\n setIndexedCompletionAttributes(span, data.output);\n }\n}\n\nfunction setResponseAttributes(span: OTelSpan, agentSpan: AgentSpan, systemName: string): void {\n const data = agentSpan.spanData;\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"response\");\n\n if (data.response_id) {\n span.setAttribute(GEN_AI_RESPONSE_ID, data.response_id);\n }\n\n if (!data._response && !data._input) {\n Logger.debug(\n \"NetraAgentsTracingProcessor: response span has no _response/_input data;\",\n \"the @openai/agents SDK may have changed its internal fields\",\n );\n }\n\n let promptStartIndex = 0;\n\n const instructions = extractInstructions(data._response);\n if (instructions) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"system\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, instructions);\n promptStartIndex = 1;\n }\n\n if (data._input !== undefined) {\n setIndexedPromptAttributes(span, data._input, promptStartIndex);\n }\n\n if (data._response) {\n setResponseObjectAttributes(span, data._response);\n setIndexedCompletionAttributes(span, data._response);\n }\n\n const resp = data._response as Record<string, unknown> | undefined;\n if (data.usage && !(resp && typeof resp === \"object\" && resp.usage)) {\n setUsageAttributes(span, data.usage);\n }\n}\n\nfunction setFunctionAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.name);\n }\n if (data.mcp_data) {\n span.setAttribute(NETRA_MCP_DATA, data.mcp_data);\n }\n if (data.input !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, safeJsonStringify(data.input));\n }\n if (data.output !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.content`, safeJsonStringify(data.output));\n }\n}\n\nfunction setHandoffAttributes(span: OTelSpan, data: SpanData): void {\n if (data.from_agent) {\n span.setAttribute(NETRA_HANDOFF_SOURCE_AGENT, data.from_agent);\n }\n if (data.to_agent) {\n span.setAttribute(NETRA_HANDOFF_TARGET_AGENT, data.to_agent);\n }\n}\n\nfunction setGuardrailAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_GUARDRAIL_NAME, data.name);\n }\n if (data.triggered !== undefined) {\n span.setAttribute(NETRA_GUARDRAIL_TRIGGERED, data.triggered);\n }\n}\n\nfunction setMCPListToolsAttributes(span: OTelSpan, data: SpanData): void {\n if (data.server) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.server);\n span.setAttribute(NETRA_MCP_SERVER, data.server);\n }\n}\n\nfunction setCustomAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_SPAN_NAME, data.name);\n }\n if (data.data !== undefined) {\n span.setAttribute(NETRA_CUSTOM_DATA, safeJsonStringify(data.data));\n }\n}\n\nfunction setUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<SpanData[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n usage.input_tokens + usage.output_tokens,\n );\n }\n\n if (usage.details) {\n const details = usage.details;\n if (details.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, Number(details.cached_tokens));\n }\n if (details.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, Number(details.reasoning_tokens));\n }\n }\n}\n\ninterface ResponseObject {\n model?: string;\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n reasoning?: unknown;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n input_tokens_details?: { cached_tokens?: number };\n output_tokens_details?: { reasoning_tokens?: number };\n };\n output?: Array<{\n type?: string;\n role?: string;\n content?: Array<{ type?: string; text?: string }>;\n name?: string;\n arguments?: string;\n call_id?: string;\n id?: string;\n }>;\n}\n\nfunction setResponseObjectAttributes(span: OTelSpan, response: unknown): void {\n if (!response || typeof response !== \"object\") return;\n const resp = response as ResponseObject;\n\n if (resp.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, resp.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, resp.model);\n }\n\n if (resp.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, resp.temperature);\n }\n if (resp.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, resp.top_p);\n }\n if (resp.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, resp.frequency_penalty);\n }\n if (resp.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, resp.presence_penalty);\n }\n if (resp.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(resp.reasoning));\n }\n\n if (resp.usage) {\n setResponseObjectUsageAttributes(span, resp.usage);\n }\n}\n\nfunction setResponseObjectUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<ResponseObject[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.total_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.total_tokens);\n } else if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.input_tokens + usage.output_tokens);\n }\n if (usage.input_tokens_details?.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, usage.input_tokens_details.cached_tokens);\n }\n if (usage.output_tokens_details?.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, usage.output_tokens_details.reasoning_tokens);\n }\n}\n\nfunction setIndexedPromptAttributes(span: OTelSpan, input: unknown, startIndex = 0): void {\n if (!input) return;\n\n if (typeof input === \"string\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.role`, \"user\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.content`, input);\n return;\n }\n\n if (!Array.isArray(input)) return;\n\n let index = startIndex;\n for (const message of input) {\n if (index - startIndex >= MAX_INDEXED_MESSAGES) break;\n if (!message || typeof message !== \"object\") continue;\n const msg = message as Record<string, unknown>;\n const msgType = msg.type as string | undefined;\n\n if (msgType === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n safeJsonStringify({ name: msg.name, arguments: msg.arguments }),\n );\n } else if (msgType === \"function_call_output\" || msgType === \"function_call_result\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"tool\");\n const output = msg.output;\n const outputText = output && typeof output === \"object\" && (output as Record<string, unknown>).text\n ? String((output as Record<string, unknown>).text)\n : String(output ?? \"\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, outputText);\n } else {\n const role = (msg.role as string) || \"user\";\n const content = extractContentString(msg.content);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, role);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, content);\n }\n index++;\n }\n}\n\nfunction setIndexedCompletionAttributes(span: OTelSpan, responseData: unknown): void {\n if (!responseData || typeof responseData !== \"object\") return;\n const resp = responseData as Record<string, unknown>;\n\n if (Array.isArray(resp.output)) {\n let index = 0;\n for (const item of resp.output) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!item || typeof item !== \"object\") continue;\n const element = item as Record<string, unknown>;\n\n if (element.type === \"message\" && Array.isArray(element.content)) {\n for (const contentItem of element.content as Array<Record<string, unknown>>) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (contentItem.type === \"output_text\" && contentItem.text) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.content`, String(contentItem.text));\n index++;\n }\n }\n } else if (element.type === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: element.name, arguments: element.arguments }),\n );\n const toolCallId = element.call_id || element.id;\n if (toolCallId) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(toolCallId));\n }\n index++;\n }\n }\n return;\n }\n\n if (Array.isArray(resp.choices)) {\n let index = 0;\n for (const choice of resp.choices) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!choice || typeof choice !== \"object\") continue;\n const c = choice as Record<string, unknown>;\n const message = (c.message || c.delta) as Record<string, unknown> | undefined;\n const choiceStartIndex = index;\n\n if (message) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.role`,\n String(message.role ?? \"assistant\"),\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n String(message.content ?? \"\"),\n );\n index++;\n\n const toolCalls = message.tool_calls as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(toolCalls)) {\n for (const tc of toolCalls) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n const func = (tc.function || {}) as Record<string, unknown>;\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: func.name ?? \"\", arguments: func.arguments ?? \"\" }),\n );\n if (tc.id) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(tc.id));\n }\n index++;\n }\n }\n }\n\n if (c.finish_reason) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${choiceStartIndex}.finish_reason`, String(c.finish_reason));\n }\n }\n }\n}\n","import {\n Span as OTelSpan,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport { SpanType } from \"../../types\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n NETRA_AGENTS_GROUP_ID,\n NETRA_AGENTS_METADATA,\n NETRA_AGENTS_PARENT_AGENT,\n NETRA_AGENTS_SPAN_TYPE,\n NETRA_SPAN_TYPE_ATTR,\n NETRA_WORKFLOW_NAME,\n} from \"./constants\";\nimport { getNetraSpanType, getSpanName, safeJsonStringify } from \"./utils\";\nimport { setSpanDataAttributes } from \"./attributes\";\nimport { Logger } from \"../../logger\";\nimport type { AgentSpan, AgentTrace, TracingProcessor } from \"./types\";\n\nexport class NetraAgentsTracingProcessor implements TracingProcessor {\n private static readonly MAX_TRACKED_SPANS = 10_000;\n private static readonly MAX_TRACKED_TRACES = 1_000;\n\n private _tracer: Tracer;\n private _systemName: string;\n private _isShutdown = false;\n private _rootSpans = new Map<string, OTelSpan>();\n private _otelSpans = new Map<string, OTelSpan>();\n private _handoffs = new Map<string, Map<string, string>>();\n private _traceErrors = new Set<string>();\n private _traceSpans = new Map<string, Set<string>>();\n\n constructor(tracer: Tracer, systemName: string = DEFAULT_LLM_SYSTEM) {\n this._tracer = tracer;\n this._systemName = systemName;\n }\n\n private _parseTimestamp(iso: string | null | undefined): Date | undefined {\n if (!iso) return undefined;\n const ts = new Date(iso);\n return isNaN(ts.getTime()) ? undefined : ts;\n }\n\n private _evictOldestSpan(): void {\n const oldest = this._otelSpans.keys().next().value;\n if (oldest) {\n const stale = this._otelSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(oldest);\n Logger.debug(\"NetraAgentsTracingProcessor: evicted span due to MAX_TRACKED_SPANS limit\");\n }\n }\n\n private _evictOldestTrace(): void {\n const oldest = this._rootSpans.keys().next().value;\n if (oldest) {\n const stale = this._rootSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.setStatus({ code: SpanStatusCode.ERROR, message: \"Trace evicted due to limit\" });\n stale?.end();\n } catch { /* already ended */ }\n this._rootSpans.delete(oldest);\n this._traceErrors.delete(oldest);\n this._handoffs.delete(oldest);\n\n const orphanedSpanIds = this._traceSpans.get(oldest);\n if (orphanedSpanIds) {\n for (const spanId of orphanedSpanIds) {\n const orphan = this._otelSpans.get(spanId);\n if (orphan) {\n try {\n orphan.setAttribute(\"netra.agents.evicted\", true);\n orphan.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(spanId);\n }\n }\n this._traceSpans.delete(oldest);\n }\n\n Logger.debug(\"NetraAgentsTracingProcessor: evicted root trace due to MAX_TRACKED_TRACES limit\");\n }\n }\n\n onTraceStart(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n if (agentTrace.disabled) return;\n\n const existingRoot = this._rootSpans.get(agentTrace.traceId);\n if (existingRoot) {\n try { existingRoot.end(); } catch { /* already ended */ }\n this._rootSpans.delete(agentTrace.traceId);\n }\n\n if (this._rootSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_TRACES) {\n this._evictOldestTrace();\n }\n\n const span = this._tracer.startSpan(agentTrace.name || \"Agent workflow\", {\n kind: SpanKind.INTERNAL,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: SpanType.AGENT,\n [NETRA_WORKFLOW_NAME]: agentTrace.name || \"Agent workflow\",\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n },\n });\n\n if (agentTrace.groupId) {\n span.setAttribute(NETRA_AGENTS_GROUP_ID, agentTrace.groupId);\n }\n if (agentTrace.metadata) {\n span.setAttribute(NETRA_AGENTS_METADATA, safeJsonStringify(agentTrace.metadata));\n }\n\n this._rootSpans.set(agentTrace.traceId, span);\n }\n\n onTraceEnd(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n\n const rootSpan = this._rootSpans.get(agentTrace.traceId);\n if (!rootSpan) return;\n\n const hasErrors = this._traceErrors.has(agentTrace.traceId);\n rootSpan.setStatus(hasErrors\n ? { code: SpanStatusCode.ERROR, message: \"One or more child spans failed\" }\n : { code: SpanStatusCode.OK },\n );\n rootSpan.end();\n\n this._rootSpans.delete(agentTrace.traceId);\n this._traceErrors.delete(agentTrace.traceId);\n this._handoffs.delete(agentTrace.traceId);\n this._traceSpans.delete(agentTrace.traceId);\n }\n\n onSpanStart(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const existingSpan = this._otelSpans.get(agentSpan.spanId);\n if (existingSpan) {\n try { existingSpan.end(); } catch { /* already ended */ }\n this._otelSpans.delete(agentSpan.spanId);\n }\n\n if (this._otelSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_SPANS) {\n this._evictOldestSpan();\n }\n\n const parentSpan = agentSpan.parentId\n ? this._otelSpans.get(agentSpan.parentId)\n : this._rootSpans.get(agentSpan.traceId);\n\n const parentContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined;\n\n const spanName = getSpanName(agentSpan);\n const netraType = getNetraSpanType(agentSpan.spanData);\n const startTime = this._parseTimestamp(agentSpan.startedAt);\n\n const span = this._tracer.startSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n startTime,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: netraType,\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n [NETRA_AGENTS_SPAN_TYPE]: agentSpan.spanData.type,\n },\n },\n parentContext,\n );\n\n this._otelSpans.set(agentSpan.spanId, span);\n\n let spanSet = this._traceSpans.get(agentSpan.traceId);\n if (!spanSet) {\n spanSet = new Set();\n this._traceSpans.set(agentSpan.traceId, spanSet);\n }\n spanSet.add(agentSpan.spanId);\n }\n\n onSpanEnd(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const span = this._otelSpans.get(agentSpan.spanId);\n if (!span) return;\n\n span.updateName(getSpanName(agentSpan));\n setSpanDataAttributes(span, agentSpan, this._systemName);\n\n const data = agentSpan.spanData;\n\n if (data.type === \"handoff\" && data.to_agent && data.from_agent) {\n let traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (!traceHandoffs) {\n traceHandoffs = new Map();\n this._handoffs.set(agentSpan.traceId, traceHandoffs);\n }\n traceHandoffs.set(data.to_agent, data.from_agent);\n }\n\n if (data.type === \"agent\" && data.name) {\n const traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (traceHandoffs) {\n const parentNode = traceHandoffs.get(data.name);\n if (parentNode) {\n span.setAttribute(NETRA_AGENTS_PARENT_AGENT, parentNode);\n traceHandoffs.delete(data.name);\n if (traceHandoffs.size === 0) {\n this._handoffs.delete(agentSpan.traceId);\n }\n }\n }\n }\n\n if (agentSpan.error) {\n const errorMsg = agentSpan.error.data\n ? `${agentSpan.error.message}: ${safeJsonStringify(agentSpan.error.data)}`\n : agentSpan.error.message;\n span.setStatus({ code: SpanStatusCode.ERROR, message: errorMsg });\n span.recordException(new Error(agentSpan.error.message));\n this._traceErrors.add(agentSpan.traceId);\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n\n const endTime = this._parseTimestamp(agentSpan.endedAt);\n span.end(endTime);\n this._otelSpans.delete(agentSpan.spanId);\n\n const spanSet = this._traceSpans.get(agentSpan.traceId);\n if (spanSet) {\n spanSet.delete(agentSpan.spanId);\n if (spanSet.size === 0) {\n this._traceSpans.delete(agentSpan.traceId);\n }\n }\n }\n\n forceFlush(): void {\n // The OTel pipeline handles flushing via its own span processors.\n // In-flight spans (started but not yet ended) cannot be flushed here\n // because they are still accumulating attributes; they will be exported\n // when their corresponding onSpanEnd / onTraceEnd callback fires.\n }\n\n shutdown(): void {\n this._isShutdown = true;\n\n for (const span of this._rootSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n\n for (const span of this._otelSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n this._rootSpans.clear();\n this._otelSpans.clear();\n this._handoffs.clear();\n this._traceErrors.clear();\n this._traceSpans.clear();\n }\n}\n","import { createRequire } from \"module\";\n\nlet _version = \"1.0.0\";\ntry {\n const req = createRequire(import.meta.url);\n const pkg = req(\"../../../package.json\");\n if (pkg?.version) _version = pkg.version;\n} catch {\n // Fall back to hardcoded version if package.json is unavailable at runtime\n}\n\nexport const __version__ = _version;\n","import { trace, Tracer } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { NetraAgentsTracingProcessor } from \"./processor\";\nimport { DEFAULT_LLM_SYSTEM, INSTRUMENTATION_NAME } from \"./constants\";\nimport { __version__ } from \"./version\";\nimport { Logger } from \"../../logger\";\nimport type { InstrumentorOptions } from \"./types\";\n\nlet cachedAgentsModule: any = null;\nlet isInstrumented = false;\nlet activeTracer: Tracer | null = null;\nlet activeProcessor: NetraAgentsTracingProcessor | null = null;\n\n/**\n * Resolve the @openai/agents module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveAgentsModule(): Promise<any> {\n if (cachedAgentsModule) return cachedAgentsModule;\n\n try {\n // @ts-ignore - @openai/agents is an optional peer dependency\n const mod = await import(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"ESM resolution of @openai/agents failed, trying CJS fallback\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"CJS resolution of @openai/agents also failed\");\n }\n\n return null;\n}\n\nexport class NetraOpenAIAgentsInstrumentor {\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Register the Netra tracing processor with the OpenAI Agents SDK.\n *\n * Returns `this` in all cases (success **and** failure) so the call can be\n * chained. Check {@link isInstrumented} afterwards to verify the processor\n * was registered successfully.\n */\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIAgentsInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n activeTracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer for OpenAI Agents: ${error}`);\n return this;\n }\n\n const agentsModule = await resolveAgentsModule();\n if (!agentsModule) {\n Logger.warn(\n \"OpenAI Agents SDK (@openai/agents) not found.\",\n \"Install it to enable automatic agent tracing.\",\n );\n return this;\n }\n\n const systemName = options.systemName ?? DEFAULT_LLM_SYSTEM;\n activeProcessor = new NetraAgentsTracingProcessor(activeTracer!, systemName);\n\n try {\n if (typeof agentsModule.addTraceProcessor === \"function\") {\n agentsModule.addTraceProcessor(activeProcessor);\n } else if (typeof agentsModule.setTraceProcessors === \"function\") {\n const existing = typeof agentsModule.getTraceProcessors === \"function\"\n ? agentsModule.getTraceProcessors()\n : [];\n agentsModule.setTraceProcessors([...existing, activeProcessor]);\n } else {\n Logger.warn(\n \"OpenAI Agents SDK does not expose addTraceProcessor or setTraceProcessors.\",\n \"Tracing integration may not work.\",\n );\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n } catch (error) {\n Logger.warn(\"Failed to register trace processor with @openai/agents:\", error);\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is not instrumented\");\n return;\n }\n\n if (activeProcessor) {\n activeProcessor.shutdown();\n // The Agents SDK TraceProvider has no API to remove a single processor.\n // Calling setTraceProcessors([]) would wipe all processors including\n // those registered by the user or other integrations.\n // After shutdown() our processor's internal state is cleared, so any\n // further callbacks from the SDK become safe no-ops.\n activeProcessor = null;\n }\n\n activeTracer = null;\n cachedAgentsModule = null;\n isInstrumented = false;\n }\n}\n\nexport const openaiAgentsInstrumentor = new NetraOpenAIAgentsInstrumentor();\n\nexport { NetraAgentsTracingProcessor } from \"./processor\";\nexport type { AgentSpan, AgentTrace, InstrumentorOptions, TracingProcessor } from \"./types\";\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\n\nexport function extractQuery(query: string | { query: string; parameters?: any[] }): {\n sql: string;\n parameters?: any[];\n} {\n if (typeof query === \"string\") {\n return { sql: query };\n }\n if (query && typeof query === \"object\" && \"query\" in query) {\n return {\n sql: String(query.query),\n parameters: Array.isArray(query.parameters) ? query.parameters : undefined,\n };\n }\n return { sql: String(query) };\n}\nexport function sanitizeQuery(sql: string, maxLength: number = 5000): string {\n if (sql.length <= maxLength) {\n return sql;\n }\n return sql.substring(0, maxLength) + \"...\";\n}\n\nexport function setQueryAttributes(\n span: Span,\n sql: string,\n parameters?: any[],\n operation?: string\n): void {\n span.setAttribute(\"db.system\", \"typeorm\");\n span.setAttribute(\"db.type\", \"sql\");\n \n if (operation) {\n span.setAttribute(\"db.operation\", operation);\n }\n\n if (!operation) {\n const upperSql = sql.trim().toUpperCase();\n if (upperSql.startsWith(\"SELECT\")) {\n span.setAttribute(\"db.operation\", \"SELECT\");\n } else if (upperSql.startsWith(\"INSERT\")) {\n span.setAttribute(\"db.operation\", \"INSERT\");\n } else if (upperSql.startsWith(\"UPDATE\")) {\n span.setAttribute(\"db.operation\", \"UPDATE\");\n } else if (upperSql.startsWith(\"DELETE\")) {\n span.setAttribute(\"db.operation\", \"DELETE\");\n } else if (upperSql.startsWith(\"CREATE\")) {\n span.setAttribute(\"db.operation\", \"CREATE\");\n } else if (upperSql.startsWith(\"DROP\")) {\n span.setAttribute(\"db.operation\", \"DROP\");\n } else if (upperSql.startsWith(\"ALTER\")) {\n span.setAttribute(\"db.operation\", \"ALTER\");\n }\n }\n\n span.setAttribute(\"db.statement\", sanitizeQuery(sql));\n\n if (parameters && parameters.length > 0) {\n try {\n span.setAttribute(\"db.statement.parameters\", JSON.stringify(parameters));\n } catch (e) {\n Logger.log(e);\n }\n }\n}\n\nexport function setResultAttributes(\n span: Span,\n result: any,\n rowCount?: number\n): void {\n if (rowCount !== undefined) {\n span.setAttribute(\"db.rows_affected\", rowCount);\n } else if (result !== undefined && result !== null) {\n if (Array.isArray(result)) {\n span.setAttribute(\"db.rows_affected\", result.length);\n } else if (typeof result === \"object\" && \"affected\" in result) {\n span.setAttribute(\"db.rows_affected\", Number(result.affected) || 0);\n } else if (typeof result === \"number\") {\n span.setAttribute(\"db.rows_affected\", result);\n }\n }\n}\n\nexport function extractDatabaseName(dataSource: any): string | undefined {\n if (!dataSource) return undefined;\n \n const options = dataSource.options || dataSource.connectionOptions;\n if (options) {\n if (options.database) return String(options.database);\n if (options.url) {\n try {\n const url = new URL(options.url);\n const dbName = url.pathname?.replace(/^\\//, \"\");\n if (dbName) return dbName;\n } catch(e) {\n Logger.log(e);\n }\n }\n }\n \n return undefined;\n}\n\n","import {\n Tracer,\n Span,\n SpanKind,\n SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport {\n extractQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nconst QUERY_SPAN_NAME = \"typeorm.query\";\nconst MANAGER_QUERY_SPAN_NAME = \"typeorm.manager.query\";\nconst REPOSITORY_QUERY_SPAN_NAME = \"typeorm.repository.query\";\n\ntype WrappedFunction = (...args: unknown[]) => unknown;\n\nexport function queryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const dbName = extractDatabaseName(instance);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function managerQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n MANAGER_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const manager = instance as any;\n const connection = manager.connection || manager.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function repositoryQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n REPOSITORY_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const repository = instance as any;\n const manager = repository.manager;\n const connection = manager?.connection || manager?.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n if (repository.metadata) {\n span.setAttribute(\"db.typeorm.entity\", repository.metadata.name);\n if (repository.metadata.tableName) {\n span.setAttribute(\"db.sql.table\", repository.metadata.tableName);\n }\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\n","export const __version__ = \"1.0.0\";\n\n","import {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\nimport { __version__ } from \"./version\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { createRequire } from \"module\";\n\nconst require = createRequire(import.meta.url);\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.typeorm\";\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nexport class NetraTypeORMInstrumentor {\n private tracer?: Tracer;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n }\n\n async instrument(options: InstrumentorOptions = {}): Promise<NetraTypeORMInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"TypeORM is already instrumented\");\n return this;\n }\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__) : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n await this._instrumentDataSource();\n await this._instrumentEntityManager();\n await this._instrumentRepository();\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"TypeORM is not instrumented\");\n return;\n }\n this._uninstrumentDataSource().catch(() => {\n });\n this._uninstrumentEntityManager().catch(() => {\n });\n this._uninstrumentRepository().catch(() => {\n });\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private async _instrumentDataSource(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n if (!DataSource) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM DataSource not found, skipping instrumentation\");\n }\n return;\n }\n\n if (DataSource.prototype?.query) {\n const originalQuery = DataSource.prototype.query;\n originalMethods.set(\"DataSource.prototype.query\", originalQuery);\n const tracer = this.tracer;\n const wrapper = queryWrapper(tracer);\n DataSource.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument DataSource: ${error}`);\n }\n }\n\n private async _instrumentEntityManager(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n if (!EntityManager) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM EntityManager not found, skipping instrumentation\");\n }\n return;\n }\n if (EntityManager.prototype?.query) {\n const originalQuery = EntityManager.prototype.query;\n originalMethods.set(\"EntityManager.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = managerQueryWrapper(tracer);\n\n EntityManager.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument EntityManager: ${error}`);\n }\n }\n\n private async _instrumentRepository(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n\n if (!Repository) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM Repository not found, skipping instrumentation\");\n }\n return;\n }\n\n if (Repository.prototype?.query) {\n const originalQuery = Repository.prototype.query;\n originalMethods.set(\"Repository.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = repositoryQueryWrapper(tracer);\n\n Repository.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument Repository: ${error}`);\n }\n }\n\n private async _uninstrumentDataSource(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n\n const originalQuery = originalMethods.get(\"DataSource.prototype.query\");\n if (originalQuery && DataSource?.prototype) {\n DataSource.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument DataSource: ${error}`);\n }\n }\n\n private async _uninstrumentEntityManager(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n const originalQuery = originalMethods.get(\"EntityManager.prototype.query\");\n if (originalQuery && EntityManager?.prototype) {\n EntityManager.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument EntityManager: ${error}`);\n }\n }\n\n private async _uninstrumentRepository(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n const originalQuery = originalMethods.get(\"Repository.prototype.query\");\n if (originalQuery && Repository?.prototype) {\n Repository.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Repository: ${error}`);\n }\n }\n}\n\nexport const typeORMInstrumentor = new NetraTypeORMInstrumentor();\n\nexport {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\n\nexport {\n extractQuery,\n sanitizeQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n\n","import { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\nlet trialBlockedAt: number | null = null;\nconst blockedTraceIds = new Set<string>();\n\nexport function setTrialBlocked(blocked: boolean) {\n if (blocked) {\n if (!trialBlockedAt) {\n trialBlockedAt = Date.now();\n Logger.warn(\n `Trial/quota exhausted: blocking span export for ${Config.TRIAL_BLOCK_DURATION_SECONDS}s`,\n );\n }\n } else {\n trialBlockedAt = null;\n }\n}\n\nexport function isTrialBlocked(): boolean {\n if (trialBlockedAt === null) return false;\n\n const elapsed = (Date.now() - trialBlockedAt) / 1000;\n\n if (elapsed >= Config.TRIAL_BLOCK_DURATION_SECONDS) {\n trialBlockedAt = null;\n return false;\n }\n\n return true;\n}\n\nexport function addBlockedTraceId(traceId: string) {\n blockedTraceIds.add(traceId);\n}\n\nexport function isTraceIdBlocked(traceId: string): boolean {\n return blockedTraceIds.has(traceId);\n}\n\nexport function getTraceId(span: ReadableSpan): string {\n try {\n return span.spanContext().traceId;\n } catch {\n return \"\";\n }\n}\n","import { ExportResultCode } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport type { SpanContext } from \"@opentelemetry/api\";\nimport {\n compilePatterns,\n matchesAnyPattern,\n CompiledPatterns,\n} from \"../utils/pattern-matching\";\nimport {\n addBlockedTraceId,\n getTraceId,\n isTraceIdBlocked,\n isTrialBlocked,\n} from \"./utils\";\n\n/**\n * Wrapper that overrides parentSpanContext without mutating the original span.\n * Delegates all other ReadableSpan properties to the original.\n *\n * NOTE: This class manually delegates every property of the ReadableSpan\n * interface. If the upstream interface adds new properties, they must be\n * forwarded here as well to avoid silent data loss during export.\n */\nclass ReparentedSpan implements ReadableSpan {\n constructor(\n private readonly delegate: ReadableSpan,\n private readonly newParent: SpanContext | undefined,\n ) {}\n\n get parentSpanContext(): SpanContext | undefined {\n return this.newParent;\n }\n\n get name() { return this.delegate.name; }\n get kind() { return this.delegate.kind; }\n spanContext() { return this.delegate.spanContext(); }\n get startTime() { return this.delegate.startTime; }\n get endTime() { return this.delegate.endTime; }\n get status() { return this.delegate.status; }\n get attributes() { return this.delegate.attributes; }\n get links() { return this.delegate.links; }\n get events() { return this.delegate.events; }\n get duration() { return this.delegate.duration; }\n get ended() { return this.delegate.ended; }\n get resource() { return this.delegate.resource; }\n get instrumentationScope() { return this.delegate.instrumentationScope; }\n get droppedAttributesCount() { return this.delegate.droppedAttributesCount; }\n get droppedEventsCount() { return this.delegate.droppedEventsCount; }\n get droppedLinksCount() { return this.delegate.droppedLinksCount; }\n}\n\nexport class FilteringSpanExporter implements SpanExporter {\n private static readonly MAX_REMEMBERED_ENTRIES = 10_000;\n\n /** Pre-compiled global patterns — compiled once in the constructor. */\n private readonly compiled: CompiledPatterns;\n\n /**\n * Spans that were blocked in a previous export() call but whose children\n * may still arrive in a later call (e.g. out-of-order export batches).\n */\n private readonly rememberedBlockedParentMap = new Map<\n string,\n SpanContext | undefined\n >();\n\n /** Cache for compiled local pattern sets to avoid per-span recompilation. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 100;\n\n constructor(\n private readonly exporter: SpanExporter,\n globalPatterns: string[],\n private readonly localBlockedMap?: ReadonlyMap<string, SpanContext | undefined>,\n ) {\n this.compiled = compilePatterns(globalPatterns);\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: { code: ExportResultCode }) => void,\n ): void {\n if (isTrialBlocked()) {\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId) addBlockedTraceId(traceId);\n }\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n const filtered: ReadableSpan[] = [];\n const batchBlockedMap = new Map<string, SpanContext | undefined>();\n\n // Snapshot the shared processor map to avoid iteration/mutation races\n // when BatchSpanProcessor invokes export() concurrently with onStart().\n const localBlockedSnapshot = this.localBlockedMap\n ? new Map(this.localBlockedMap)\n : undefined;\n\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId && isTraceIdBlocked(traceId)) continue;\n\n const name = span.name;\n\n const globallyBlocked = matchesAnyPattern(name, this.compiled);\n\n const localPatterns = this.getLocalPatterns(span);\n const locallyBlocked =\n (localPatterns.length > 0 &&\n matchesAnyPattern(name, this.getCompiledLocalPatterns(localPatterns))) ||\n this.hasLocalBlockFlag(span);\n\n if (!globallyBlocked && !locallyBlocked) {\n filtered.push(span);\n continue;\n }\n\n const spanId = span.spanContext().spanId;\n const parentCtx = span.parentSpanContext;\n batchBlockedMap.set(spanId, parentCtx);\n this.rememberedBlockedParentMap.set(spanId, parentCtx);\n }\n\n const merged = new Map<string, SpanContext | undefined>();\n\n for (const [k, v] of this.rememberedBlockedParentMap) {\n merged.set(k, v);\n }\n if (localBlockedSnapshot) {\n for (const [k, v] of localBlockedSnapshot) {\n merged.set(k, v);\n }\n }\n for (const [k, v] of batchBlockedMap) {\n merged.set(k, v);\n }\n\n if (merged.size > 0) {\n this.reparentBlockedChildren(filtered, merged);\n }\n\n this.evictRememberedIfNeeded();\n\n if (filtered.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.exporter.export(filtered, resultCallback);\n }\n\n shutdown(): Promise<void> {\n this.rememberedBlockedParentMap.clear();\n this.localPatternCache.clear();\n return this.exporter.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.() ?? Promise.resolve();\n }\n\n private getCompiledLocalPatterns(patterns: string[]): CompiledPatterns {\n const key = patterns.join(\"\\0\");\n let compiled = this.localPatternCache.get(key);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(key, compiled);\n if (this.localPatternCache.size > FilteringSpanExporter.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictRememberedIfNeeded(): void {\n if (this.rememberedBlockedParentMap.size <= FilteringSpanExporter.MAX_REMEMBERED_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-export eviction overhead\n const toRemove = Math.max(\n this.rememberedBlockedParentMap.size - FilteringSpanExporter.MAX_REMEMBERED_ENTRIES,\n Math.ceil(FilteringSpanExporter.MAX_REMEMBERED_ENTRIES * 0.25),\n );\n const keys = Array.from(this.rememberedBlockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this.rememberedBlockedParentMap.delete(key);\n }\n }\n\n private getLocalPatterns(span: ReadableSpan): string[] {\n const value = span.attributes?.[\"netra.local_blocked_spans\"];\n if (Array.isArray(value) && value.every((v) => typeof v === \"string\")) {\n return (value as string[]).filter((v) => v !== \"\");\n }\n return [];\n }\n\n private hasLocalBlockFlag(span: ReadableSpan): boolean {\n return span.attributes?.[\"netra.local_blocked\"] === true;\n }\n\n /**\n * Walk up the blocked-parent chain for each surviving span and wrap it\n * with a ReparentedSpan pointing to the nearest non-blocked ancestor.\n *\n * A cycle guard (visited set) prevents infinite loops in malformed traces.\n */\n private reparentBlockedChildren(\n spans: ReadableSpan[],\n blockedMap: Map<string, SpanContext | undefined>,\n ): void {\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n let parent = span.parentSpanContext;\n if (!parent) continue;\n\n const visited = new Set<string>();\n let changed = false;\n\n while (parent && blockedMap.has(parent.spanId)) {\n if (visited.has(parent.spanId)) break;\n visited.add(parent.spanId);\n parent = blockedMap.get(parent.spanId);\n changed = true;\n }\n\n if (changed) {\n spans[i] = new ReparentedSpan(span, parent);\n }\n }\n }\n}\n","import * as http from \"http\";\nimport * as https from \"https\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { JsonTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { isTrialBlocked, setTrialBlocked } from \"./utils\";\n\ninterface ExporterConfig {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport class TrialAwareOTLPExporter implements SpanExporter {\n private _url: string;\n private _headers: Record<string, string>;\n private _isShutdown = false;\n\n constructor(config: ExporterConfig) {\n this._url = config.url;\n this._headers = config.headers || {};\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this._isShutdown || isTrialBlocked()) {\n return resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n let data: Uint8Array | string;\n try {\n const serialized = JsonTraceSerializer.serializeRequest(spans);\n if (!serialized) throw new Error(\"Serialization failed\");\n data = serialized;\n } catch (err) {\n return resultCallback({\n code: ExportResultCode.FAILED,\n error: err instanceof Error ? err : new Error(\"Serialization failed\"),\n });\n }\n\n const url = new URL(this._url);\n const options: https.RequestOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.pathname,\n method: \"POST\",\n headers: {\n ...this._headers,\n host: url.host,\n \"Content-Type\": \"application/json\",\n \"Content-Length\":\n typeof data === \"string\" ? Buffer.byteLength(data) : data.byteLength,\n },\n };\n\n const lib = url.protocol === \"https:\" ? https : http;\n\n const req = lib.request(options, (res) => {\n let body = \"\";\n res.on(\"data\", (chunk) => (body += chunk));\n res.on(\"end\", () => {\n if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n } else {\n this.checkErrorBody(body, res.statusCode);\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error(`Status ${res.statusCode}`),\n });\n }\n });\n });\n\n req.on(\"error\", (err) =>\n resultCallback({ code: ExportResultCode.FAILED, error: err }),\n );\n req.write(data);\n req.end();\n }\n\n private checkErrorBody(bodyString: string, statusCode?: number) {\n try {\n const jsonBody = JSON.parse(bodyString);\n const errorCode = jsonBody?.error?.code || statusCode;\n const errorMessage = jsonBody?.error?.message || \"\";\n\n if (errorCode === 429 || errorMessage.includes(\"usage quota exceeded\")) {\n setTrialBlocked(true);\n }\n } catch (e) {\n if (statusCode === 429 || bodyString.includes(\"quota exceeded\")) {\n setTrialBlocked(true);\n }\n }\n }\n\n async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n async shutdown(): Promise<void> {\n this._isShutdown = true;\n return Promise.resolve();\n }\n}\n","/**\n * Instrumentation setup for Netra SDK\n */\n\nimport { context, trace } from \"@opentelemetry/api\";\nimport {\n ConsoleSpanExporter,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { initialize, InitializeOptions } from \"@traceloop/node-server-sdk\";\nimport { createRequire } from \"module\";\nimport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"../config\";\nimport { Logger } from \"../logger\";\nimport {\n InstrumentationSpanProcessor,\n LlmTraceIdentifierSpanProcessor,\n RootSpanProcessor,\n RootInstrumentFilterProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"../processors\";\nimport { anthropicInstrumentor } from \"./anthropic\";\nimport { googleGenerativeAIInstrumentor } from \"./google-genai\";\nimport { groqInstrumentor } from \"./groq\";\nimport { langgraphInstrumentor } from \"./langgraph\";\nimport { mistralAIInstrumentor } from \"./mistralai\";\nimport { openAIInstrumentor } from \"./openai\";\nimport { openaiAgentsInstrumentor } from \"./openai-agents\";\nimport { typeORMInstrumentor } from \"./typeorm\";\nimport { FilteringSpanExporter, TrialAwareOTLPExporter } from \"../exporters\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { LocalFilteringSpanProcessor } from \"../processors/localfiltering-span-processor\";\nimport { propagation } from \"@opentelemetry/api\";\nimport {\n CompositePropagator,\n W3CBaggagePropagator as BaggagePropagator,\n W3CTraceContextPropagator,\n} from \"@opentelemetry/core\";\n\n// Interface for TracerProvider with addSpanProcessor method\ninterface TracerProviderWithProcessors {\n addSpanProcessor(processor: SpanProcessor): void;\n}\n\n// Re-export shared utilities for use across instrumentations\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nconst require = createRequire(import.meta.url);\n\nlet _httpInstrumentation: any = null;\nlet _undiciInstrumentation: any = null;\n\n/**\n * Check if a package is installed and resolvable.\n * Equivalent to Python SDK's `is_package_installed()`.\n */\nfunction isPackageInstalled(packageName: string): boolean {\n try {\n require.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Promise that resolves when custom instrumentations are initialized.\n * Can be awaited after calling initInstrumentations() to ensure\n * all async instrumentations are complete.\n */\nexport let instrumentationsReady: Promise<void> = Promise.resolve();\n\npropagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [new W3CTraceContextPropagator(), new BaggagePropagator()],\n }),\n);\n\nfunction patchTraceloopLangchainCallbackHandler(): void {\n const applyPatch = (mod: any, sourceLabel: string) => {\n const Handler = mod?.TraceloopCallbackHandler;\n if (!Handler || Handler.__netra_patched) return;\n\n const wrapWithParentContext = (methodName: string) => {\n const original = Handler.prototype[methodName];\n if (typeof original !== \"function\") return;\n Handler.prototype[methodName] = function (...args: any[]) {\n const parentRunId = args[3];\n const parentSpan = parentRunId\n ? this?.spans?.get(parentRunId)?.span\n : undefined;\n const active = trace.getSpan(context.active());\n Logger.debug(\n `Traceloop ${methodName}: runId=${args[2]} parentRunId=${parentRunId} parentSpan=${parentSpan ? \"yes\" : \"no\"} activeSpanId=${active?.spanContext().spanId}`,\n );\n // Always bind the current active context (or explicit parent) for this callback.\n const ctx = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : context.active();\n return context.with(ctx, () => original.apply(this, args));\n };\n };\n\n wrapWithParentContext(\"handleChainStart\");\n wrapWithParentContext(\"handleLLMStart\");\n wrapWithParentContext(\"handleChatModelStart\");\n wrapWithParentContext(\"handleToolStart\");\n\n Handler.__netra_patched = true;\n Logger.debug(`Patched TraceloopCallbackHandler for parent context (${sourceLabel}).`);\n };\n\n try {\n const mod = require(\"@traceloop/instrumentation-langchain\");\n Logger.debug(`Loaded @traceloop/instrumentation-langchain via require from ${require.resolve(\"@traceloop/instrumentation-langchain\")}`);\n applyPatch(mod, \"require\");\n return;\n } catch (e) {\n Logger.debug(\"require() for traceloop langchain failed, falling back to import().\");\n }\n\n import(\"@traceloop/instrumentation-langchain\")\n .then((mod: any) => {\n applyPatch(mod, \"import\");\n })\n .catch(() => {\n // No-op: langchain instrumentation not installed or not in use\n });\n}\n\nfunction disableTraceloopLangchainCallbackHandler(): void {\n try {\n const callbackManagerModule = require(\"@langchain/core/callbacks/manager\");\n const CallbackManager = callbackManagerModule?.CallbackManager;\n if (!CallbackManager || (CallbackManager as any).__netra_disable_traceloop) {\n return;\n }\n const originalConfigureSync = (CallbackManager as any)._configureSync;\n if (typeof originalConfigureSync !== \"function\") return;\n\n (CallbackManager as any)._configureSync = function (\n inheritableHandlers: any,\n localHandlers: any,\n inheritableTags: any,\n localTags: any,\n inheritableMetadata: any,\n localMetadata: any,\n options?: any,\n ) {\n const filterHandlers = (handlers: any) => {\n if (!handlers) return handlers;\n if (Array.isArray(handlers)) {\n return handlers.filter(\n (h) => h?.name !== \"traceloop_callback_handler\",\n );\n }\n return handlers;\n };\n const filteredInheritable = filterHandlers(inheritableHandlers);\n const filteredLocal = filterHandlers(localHandlers);\n return originalConfigureSync.call(\n this,\n filteredInheritable,\n filteredLocal,\n inheritableTags,\n localTags,\n inheritableMetadata,\n localMetadata,\n options,\n );\n };\n (CallbackManager as any).__netra_disable_traceloop = true;\n Logger.debug(\"Disabled Traceloop LangChain callback injection.\");\n } catch {\n // no-op\n }\n}\n\n/**\n * Resolve the effective root instrument allow-list.\n *\n * `rootInstruments` is resolved independently of the non-root `instruments`\n * set. `blockInstruments` is subtracted from the resolved root set.\n *\n * When `NetraInstruments.ALL` is in `rootInstruments`, returns `null` (no\n * root filtering — all instrumentations may create root spans) unless\n * `blockInstruments` restricts the set.\n *\n * Returns a set of instrumentation-name strings, or `null` when no filtering\n * should be applied.\n */\nfunction resolveRootInstrumentNames(\n rootInstruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): Set<string> | null {\n const allSentinel = NetraInstruments.ALL;\n const rootHasAll = rootInstruments != null && rootInstruments.has(allSentinel);\n const blockHasAll = blockInstruments != null && blockInstruments.has(allSentinel);\n\n if (blockHasAll) {\n if (rootHasAll) {\n Logger.error(\n \"Netra: rootInstruments=ALL is contradicted by blockInstruments=ALL; \" +\n \"all root instrumentation is disabled.\",\n );\n } else {\n Logger.warn(\n \"Netra: blockInstruments contains ALL; all instrumentation will be disabled.\",\n );\n }\n }\n\n // All instrument values (excluding the ALL sentinel)\n const allInstrumentValues = new Set<string>(\n Object.values(NetraInstruments).filter((v) => v !== allSentinel),\n );\n\n // Compute blocked values\n let blockedValues: Set<string>;\n if (blockHasAll) {\n blockedValues = new Set(allInstrumentValues);\n } else if (blockInstruments && blockInstruments.size > 0) {\n blockedValues = new Set(\n [...blockInstruments]\n .filter((m) => m !== allSentinel)\n .map((m) => m.valueOf()),\n );\n } else {\n blockedValues = new Set();\n }\n\n // Resolve root set\n if (rootHasAll) {\n if (blockedValues.size > 0) {\n const resolved = new Set<string>();\n for (const v of allInstrumentValues) {\n if (!blockedValues.has(v)) {\n resolved.add(v);\n }\n }\n return resolved;\n }\n return null; // No filtering — all roots allowed\n }\n\n // Use explicit rootInstruments or fall back to DEFAULT_INSTRUMENTS_FOR_ROOT\n const effectiveRoot =\n rootInstruments && rootInstruments.size > 0\n ? rootInstruments\n : DEFAULT_INSTRUMENTS_FOR_ROOT;\n\n const resolved = new Set<string>();\n for (const m of effectiveRoot) {\n if (m === allSentinel) continue;\n const val = m.valueOf();\n if (!blockedValues.has(val)) {\n resolved.add(val);\n }\n }\n\n return resolved;\n}\n\nexport function initInstrumentations(\n config: Config,\n instruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n rootInstruments?: Set<NetraInstruments>,\n): TracerProviderWithProcessors | null {\n // Resolve effective instruments: use DEFAULT_INSTRUMENTS when not provided\n const enableAll = instruments != null && instruments.has(NetraInstruments.ALL);\n\n // Resolve root instrument names (independent of `instruments`).\n // blockInstruments is subtracted from the resolved root set.\n const resolvedRootNames: Set<string> | null = resolveRootInstrumentNames(\n rootInstruments,\n blockInstruments,\n );\n\n // Map Netra instruments to Traceloop instrument modules\n const instrumentModules: InitializeOptions[\"instrumentModules\"] = {};\n\n // Track whether to use custom instrumentors\n const customInstrumentModules: Record<string, boolean> = {\n openai: false,\n groq: false,\n mistral: false,\n langgraph: false,\n googleGenAI: false,\n anthropic: false,\n openAiAgents: false,\n };\n\n // Resolve effective instrument set (Python parity):\n // ALL → enable everything; otherwise fall back to DEFAULT_INSTRUMENTS\n const resolved: Set<NetraInstruments> = enableAll\n ? new Set(Object.values(NetraInstruments).filter((v) => v !== NetraInstruments.ALL) as NetraInstruments[])\n : (instruments && instruments.size > 0) ? instruments : DEFAULT_INSTRUMENTS;\n\n // Explicitly disable all Traceloop modules, then selectively enable\n instrumentModules.google_vertexai = false;\n instrumentModules.langchain = false;\n instrumentModules.llamaIndex = false;\n instrumentModules.pinecone = false;\n instrumentModules.qdrant = false;\n instrumentModules.chromadb = false;\n instrumentModules.together = false;\n\n if (resolved.has(NetraInstruments.OPENAI)) {\n customInstrumentModules.openai = true;\n }\n if (resolved.has(NetraInstruments.MISTRAL)) {\n customInstrumentModules.mistral = true;\n }\n if (resolved.has(NetraInstruments.GROQ)) {\n customInstrumentModules.groq = true;\n }\n if (resolved.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) {\n customInstrumentModules.googleGenAI = true;\n }\n if (resolved.has(NetraInstruments.VERTEX_AI) && isPackageInstalled(\"@google-cloud/vertexai\")) {\n instrumentModules.google_vertexai = require(\"@google-cloud/vertexai\");\n }\n if (resolved.has(NetraInstruments.LANGCHAIN)) {\n instrumentModules.langchain = true;\n }\n if (resolved.has(NetraInstruments.LANGGRAPH)) {\n customInstrumentModules.langgraph = true;\n }\n if (resolved.has(NetraInstruments.LLAMA_INDEX) && isPackageInstalled(\"llamaindex\")) {\n instrumentModules.llamaIndex = require(\"llamaindex\");\n }\n if (resolved.has(NetraInstruments.PINECONE) && isPackageInstalled(\"@pinecone-database/pinecone\")) {\n instrumentModules.pinecone = require(\"@pinecone-database/pinecone\");\n }\n if (resolved.has(NetraInstruments.QDRANT) && isPackageInstalled(\"@qdrant/js-client-rest\")) {\n instrumentModules.qdrant = require(\"@qdrant/js-client-rest\");\n }\n if (resolved.has(NetraInstruments.CHROMADB) && isPackageInstalled(\"chromadb\")) {\n instrumentModules.chromadb = require(\"chromadb\");\n }\n if (resolved.has(NetraInstruments.TOGETHER) && isPackageInstalled(\"together-ai\")) {\n instrumentModules.together = require(\"together-ai\");\n }\n if (resolved.has(NetraInstruments.ANTHROPIC)) {\n customInstrumentModules.anthropic = true;\n }\n\n // Apply blockInstruments to Traceloop and Netra custom modules\n if (blockInstruments && blockInstruments.size > 0) {\n const blockAll = blockInstruments.has(NetraInstruments.ALL);\n if (blockAll || blockInstruments.has(NetraInstruments.OPENAI)) customInstrumentModules.openai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GROQ)) customInstrumentModules.groq = false;\n if (blockAll || blockInstruments.has(NetraInstruments.MISTRAL)) customInstrumentModules.mistral = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGGRAPH)) customInstrumentModules.langgraph = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) customInstrumentModules.googleGenAI = false;\n if (blockAll || blockInstruments.has(NetraInstruments.ANTHROPIC)) customInstrumentModules.anthropic = false;\n if (blockAll || blockInstruments.has(NetraInstruments.VERTEX_AI)) instrumentModules.google_vertexai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGCHAIN)) instrumentModules.langchain = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LLAMA_INDEX)) instrumentModules.llamaIndex = false;\n if (blockAll || blockInstruments.has(NetraInstruments.PINECONE)) instrumentModules.pinecone = false;\n if (blockAll || blockInstruments.has(NetraInstruments.QDRANT)) instrumentModules.qdrant = false;\n if (blockAll || blockInstruments.has(NetraInstruments.CHROMADB)) instrumentModules.chromadb = false;\n if (blockAll || blockInstruments.has(NetraInstruments.TOGETHER)) instrumentModules.together = false;\n }\n\n // Set Traceloop environment variables before initializing\n // This ensures the SDK picks up our configuration\n config.setTraceloopEnv();\n\n // Debug: Log configuration being used\n Logger.debug(\"Netra SDK Configuration:\");\n Logger.debug(` App Name: ${config.appName}`);\n Logger.debug(` OTLP Endpoint: ${config.otlpEndpoint || \"(default - localhost:3002)\"}`);\n Logger.debug(` API Key: ${config.apiKey ? \"***\" + config.apiKey.slice(-4) : \"(not set)\"}`);\n Logger.debug(` Trace Content: ${config.traceContent}`);\n Logger.debug(` Enable Scrubbing: ${config.enableScrubbing}`);\n\n // Initialize Traceloop SDK\n const traceloopOptions: InitializeOptions = {\n appName: config.appName,\n apiKey: config.apiKey,\n baseUrl: config.otlpEndpoint,\n disableBatch: config.disableBatch,\n traceContent: config.traceContent,\n headers: config.headers,\n instrumentModules,\n silenceInitializationMessage: !config.debugMode,\n };\n // ---- updated exporter setup (Python-equivalent) ----\n\n // 1) Pick base exporter (Console fallback OR TrialAware(OTLP))\n let exporter: SpanExporter;\n\n if (!traceloopOptions.baseUrl || traceloopOptions.baseUrl == undefined) {\n exporter = new ConsoleSpanExporter();\n } else {\n const formattedEndpoint = config.formatOtlpEndpoint();\n\n // In TS, we pass the config directly to our custom class\n // because it handles the HTTP transport itself to catch the error body.\n exporter = new TrialAwareOTLPExporter({\n url: formattedEndpoint,\n headers: config.headers,\n });\n }\n\n // 2) Always attempt filtering (even for Console fallback)\n // The LocalFilteringSpanProcessor is instantiated below and its\n // blockedParentMap is injected into FilteringSpanExporter so the\n // two can share reparenting state without module-level globals.\n const globalBlockedPatterns = config.blockedSpans ?? [];\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor(globalBlockedPatterns);\n const originalExporter = exporter;\n\n try {\n exporter = new FilteringSpanExporter(\n exporter,\n globalBlockedPatterns,\n localFilteringSpanProcessor.blockedParentMap,\n );\n } catch {\n exporter = originalExporter;\n }\n\n traceloopOptions.exporter = exporter;\n\n initialize(traceloopOptions);\n\n if (instrumentModules.langchain) {\n patchTraceloopLangchainCallbackHandler();\n } else {\n disableTraceloopLangchainCallbackHandler();\n }\n\n // ---- rest stays same ----\n const tracerProvider = trace.getTracerProvider();\n\n // Add custom span processors to the TracerProvider\n // The Traceloop SDK creates a BasicTracerProvider internally\n const effectiveProvider = addCustomSpanProcessors(\n tracerProvider,\n config,\n resolvedRootNames,\n );\n\n // Initialize custom instrumentations asynchronously\n // We use async initialization to ensure we get the same ES module instances\n // that the application uses (important for ESM/CJS dual package handling)\n instrumentationsReady = initCustomInstrumentationsAsync(\n config,\n tracerProvider,\n customInstrumentModules,\n );\n\n // Initialize additional OpenTelemetry instrumentations (uses resolved set)\n initOpenTelemetryInstrumentations(config, resolved, blockInstruments);\n\n return effectiveProvider;\n}\n\n/**\n * Returns true if the given instrument should be blocked.\n * Handles the ALL sentinel (blocks everything).\n */\nfunction isBlocked(\n instrument: NetraInstruments,\n blockInstruments?: Set<NetraInstruments>,\n): boolean {\n if (!blockInstruments || blockInstruments.size === 0) return false;\n return (\n blockInstruments.has(NetraInstruments.ALL) ||\n blockInstruments.has(instrument)\n );\n}\n\n/**\n * Initialize custom instrumentations asynchronously\n * This uses dynamic import() to ensure we patch the same ES module instances\n * that the application uses.\n */\nasync function initCustomInstrumentationsAsync(\n config: Config,\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n customInstrumentModules: Record<string, boolean>,\n): Promise<void> {\n if (customInstrumentModules.mistral) {\n try {\n await mistralAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom MistralAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom MistralAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.openai) {\n try {\n await openAIInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.groq) {\n try {\n await groqInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Groq instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Groq instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.googleGenAI) {\n try {\n await googleGenerativeAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Google GenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Google GenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.langgraph) {\n try {\n await langgraphInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom Langgraph instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Langgraph instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.anthropic) {\n try {\n await anthropicInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Anthropic instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Anthropic instrumentation:\", e);\n }\n }\n\n // Initialize OpenAI Agents SDK instrumentation\n if (\n customInstrumentModules.openaiAgents &&\n !blockInstruments?.has(NetraInstruments.OPENAI_AGENTS)\n ) {\n try {\n await openaiAgentsInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI Agents SDK instrumentation:\", e);\n }\n }\n}\n\nfunction initOpenTelemetryInstrumentations(\n config: Config,\n resolved: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): void {\n // HTTP/HTTPS instrumentation\n // Also auto-enabled when Express is requested (Express needs HTTP for traceparent propagation)\n // Shared URL exclusion — mirrors Python's OTEL_PYTHON_EXCLUDED_URLS global.\n // Always skips internal Netra egress; OTEL_NODE_EXCLUDED_URLS adds user patterns.\n let netraHost = \"\";\n try {\n if (config.otlpEndpoint) {\n netraHost = new URL(config.otlpEndpoint).host;\n }\n } catch {\n console.debug(`OTEL_NODE_EXCLUDED_URLS: malformed otlpEndpoint '${config.otlpEndpoint}', skipping host-based exclusion`);\n }\n\n // Comma-separated regex patterns (unanchored search). Precompiled once;\n // invalid patterns are skipped so a bad entry never breaks instrumentation.\n const excludeRegexes = (process.env.OTEL_NODE_EXCLUDED_URLS || \"\")\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n .map((pattern) => {\n try {\n return new RegExp(pattern);\n } catch {\n if (config.debugMode) {\n console.debug(\n `Invalid OTEL_NODE_EXCLUDED_URLS pattern skipped: ${pattern}`,\n );\n }\n return null;\n }\n })\n .filter((re): re is RegExp => re !== null);\n\n const isExcludedUrl = (url: string): boolean => {\n if (netraHost && url.includes(netraHost)) return true;\n return excludeRegexes.some((re) => re.test(url));\n };\n\n if (\n !isBlocked(NetraInstruments.HTTP, blockInstruments) &&\n (resolved.has(NetraInstruments.HTTP) || resolved.has(NetraInstruments.EXPRESS))\n ) {\n try {\n const { HttpInstrumentation } = require(\"@opentelemetry/instrumentation-http\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n _httpInstrumentation = new HttpInstrumentation({\n ignoreOutgoingRequestHook: (request: { host?: string; hostname?: string; path?: string }) => {\n const url = `${request.host ?? request.hostname ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_httpInstrumentation] });\n if (config.debugMode) {\n Logger.debug(\"HTTP instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"HTTP instrumentation not available:\", e);\n }\n }\n\n // undici / native fetch instrumentation. instrumentation-http does NOT cover\n // Node's global fetch (Node 18+) — it is backed by undici and bypasses the\n // http module. This is the primary egress path for OpenAI/Anthropic/AI-SDK.\n const fetchEnabled =\n !blockInstruments?.has(NetraInstruments.FETCH) &&\n (!instruments || instruments.has(NetraInstruments.FETCH));\n\n if (fetchEnabled) {\n try {\n const { UndiciInstrumentation } = require(\"@opentelemetry/instrumentation-undici\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n\n _undiciInstrumentation = new UndiciInstrumentation({\n ignoreRequestHook: (request: { origin?: string; path?: string }) => {\n const url = `${request.origin ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_undiciInstrumentation] });\n if (config.debugMode) {\n console.debug(\"Undici/fetch instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n console.debug(\"Undici/fetch instrumentation not available:\", e);\n }\n }\n }\n\n // Prisma instrumentation\n if (\n !isBlocked(NetraInstruments.PRISMA, blockInstruments) &&\n resolved.has(NetraInstruments.PRISMA) &&\n isPackageInstalled(\"@prisma/instrumentation\")\n ) {\n try {\n const { PrismaInstrumentation } = require(\"@prisma/instrumentation\");\n // Note: This would need to be registered with the SDK\n } catch (e) {\n Logger.debug(\"Prisma instrumentation not available:\", e);\n }\n }\n\n if (\n !isBlocked(NetraInstruments.TYPEORM, blockInstruments) &&\n resolved.has(NetraInstruments.TYPEORM) &&\n isPackageInstalled(\"typeorm\")\n ) {\n typeORMInstrumentor\n .instrument()\n .then(() => {\n Logger.debug(\"TypeORM instrumentation successfully initialized\");\n })\n .catch((e) => {\n Logger.debug(\"TypeORM instrumentation error:\", e);\n });\n }\n\n // Express instrumentation\n if (\n !isBlocked(NetraInstruments.EXPRESS, blockInstruments) &&\n resolved.has(NetraInstruments.EXPRESS)\n ) {\n try {\n const { ExpressInstrumentation } = require(\"@opentelemetry/instrumentation-express\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n registerInstrumentations({ instrumentations: [new ExpressInstrumentation()] });\n if (config.debugMode) {\n Logger.debug(\"Express instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"Express instrumentation not available:\", e);\n }\n }\n}\n\n/**\n * Add custom span processors to the TracerProvider\n * These processors add session context, instrumentation metadata, and scrubbing\n *\n * Returns the effective TracerProvider that processors were added to.\n */\nfunction addCustomSpanProcessors(\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n config: Config,\n rootInstrumentNames: Set<string> | null,\n): TracerProviderWithProcessors | null {\n try {\n // The TracerProvider from Traceloop is a ProxyTracerProvider\n // We need to find the actual provider with addSpanProcessor method\n let provider: TracerProviderWithProcessors | null = null;\n\n // Try to access the delegate/underlying provider\n const providerAny = tracerProvider as any;\n\n // Check if it's a ProxyTracerProvider with a delegate\n if (\n providerAny._delegate &&\n typeof providerAny._delegate.addSpanProcessor === \"function\"\n ) {\n provider = providerAny._delegate as TracerProviderWithProcessors;\n }\n // Check if it has getDelegate method\n else if (typeof providerAny.getDelegate === \"function\") {\n const delegate = providerAny.getDelegate();\n if (delegate) {\n if (typeof delegate.addSpanProcessor === \"function\") {\n provider = delegate as TracerProviderWithProcessors;\n } else if (\n delegate._activeSpanProcessor &&\n delegate._activeSpanProcessor.constructor.name ===\n \"MultiSpanProcessor\" &&\n Array.isArray(delegate._activeSpanProcessor._spanProcessors)\n ) {\n // Fallback for OTel SDKs where addSpanProcessor is removed/protected\n // and MultiSpanProcessor is used (e.g. created by Traceloop)\n provider = {\n addSpanProcessor: (processor: SpanProcessor) => {\n delegate._activeSpanProcessor._spanProcessors.push(processor);\n },\n getTracer: (name: string, version?: string) => {\n return delegate.getTracer(name, version);\n },\n } as TracerProviderWithProcessors;\n }\n }\n }\n // Check if it directly has addSpanProcessor\n else if (typeof providerAny.addSpanProcessor === \"function\") {\n provider = providerAny as TracerProviderWithProcessors;\n }\n // Try accessing via global registry (NodeTracerProvider stores itself)\n else {\n try {\n // Try to get the active provider from the SDK\n const { NodeTracerProvider } = require(\"@opentelemetry/sdk-trace-node\");\n // The provider might be accessible via other means\n } catch {\n // SDK not available\n }\n }\n\n if (!provider) {\n Logger.debug(\n \"Could not access TracerProvider for adding span processors. \" +\n \"Session context will still be propagated via baggage.\",\n );\n return null;\n }\n\n // ─── Processor registration order matters ───\n // Processors that wrap span.setAttribute form an implicit call chain:\n // InstrumentationSpanProcessor (#1) wraps setAttribute for truncation,\n // then SpanIOProcessor (#3) wraps the already-wrapped setAttribute for\n // IO normalisation. Reordering these will break the chain silently.\n //\n // onEnd runs in registration order: SpanIOProcessor (#3) promotes\n // netra.user.input/output → input/output BEFORE RootSpanProcessor (#5)\n // cleans up its root span map.\n\n // 0. Local Filtering Span Processor - filters spans based on local context\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor();\n provider.addSpanProcessor(localFilteringSpanProcessor);\n\n // 0.5. Root Instrument Filter Processor - blocks root spans from non-allowed instrumentations\n // When rootInstrumentNames is null, all instrumentations may produce root spans (no filtering).\n if (rootInstrumentNames !== null) {\n const rootFilterProcessor = new RootInstrumentFilterProcessor(\n rootInstrumentNames,\n );\n provider.addSpanProcessor(rootFilterProcessor);\n }\n\n // 1. Instrumentation Span Processor - truncates attributes and adds instrumentation name.\n // MUST run before SpanIOProcessor so the IO processor's setAttribute wrapper\n // captures the truncation wrapper in its call chain.\n const instrumentationProcessor = new InstrumentationSpanProcessor();\n provider.addSpanProcessor(instrumentationProcessor);\n\n // 2. Session Span Processor - adds session context (session_id, user_id, etc.)\n const sessionProcessor = new SessionSpanProcessor();\n provider.addSpanProcessor(sessionProcessor);\n\n // 3. Span I/O Processor - normalises input/output from gen_ai.prompt/completion\n // and traceloop.entity attributes; remaps traceloop.* → netra.*\n // MUST run after InstrumentationSpanProcessor (captures its setAttribute wrapper).\n // MUST run before RootSpanProcessor (promotes netra.user.* in onEnd first).\n const spanIOProcessor = new SpanIOProcessor();\n provider.addSpanProcessor(spanIOProcessor);\n\n // 4. LLM Trace Identifier Span Processor - marks root spans that contain LLM calls\n const llmTraceProcessor = new LlmTraceIdentifierSpanProcessor();\n provider.addSpanProcessor(llmTraceProcessor);\n\n // 5. Root Span Processor - tracks the root span per trace by traceId.\n // Registered AFTER LlmTraceIdentifierSpanProcessor so that on_end cleanup\n // happens after the LLM processor has finished annotating the root span.\n // Registered AFTER SpanIOProcessor so root spans have setAttribute wrapped\n // before being stored in the root span map.\n const rootSpanProcessor = new RootSpanProcessor();\n provider.addSpanProcessor(rootSpanProcessor);\n\n // 6. Scrubbing Span Processor - scrubs sensitive data (if enabled)\n if (config.enableScrubbing) {\n const scrubbingProcessor = new ScrubbingSpanProcessor();\n provider.addSpanProcessor(scrubbingProcessor);\n }\n\n Logger.debug(\"Custom span processors registered successfully\");\n\n return provider;\n } catch (e) {\n Logger.debug(\"Failed to add custom span processors:\", e);\n return null;\n }\n}\n\n/**\n * Uninstrument all active instrumentations\n * Should be called during shutdown\n */\nexport async function uninstrumentAll(): Promise<void> {\n // Uninstrument custom OpenAI instrumentation\n try {\n if (openAIInstrumentor.isInstrumented()) {\n await openAIInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI:\", e);\n }\n\n // Uninstrument custom MistralAI instrumentation\n try {\n if (mistralAIInstrumentor.isInstrumented()) {\n mistralAIInstrumentor.uninstrument();\n Logger.debug(\"Custom MistralAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument MistralAI:\", e);\n }\n\n // Uninstrument custom Groq instrumentation\n try {\n if (groqInstrumentor.isInstrumented()) {\n groqInstrumentor.uninstrument();\n Logger.debug(\"Custom Groq instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Groq:\", e);\n }\n\n // Uninstrument custom Anthropic instrumentation\n try {\n if (anthropicInstrumentor.isInstrumented()) {\n anthropicInstrumentor.uninstrument();\n Logger.debug(\"Custom Anthropic instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Anthropic:\", e);\n }\n\n // Uninstrument custom Google GenAI instrumentation\n try {\n if (googleGenerativeAIInstrumentor.isInstrumented()) {\n googleGenerativeAIInstrumentor.uninstrument();\n Logger.debug(\"Custom Google GenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Google GenAI:\", e);\n }\n\n // Uninstrument custom Langgraph instrumentation\n try {\n if (langgraphInstrumentor.isInstrumented()) {\n await langgraphInstrumentor.uninstrument();\n Logger.debug(\"Custom Langgraph instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Langgraph:\", e);\n }\n\n // Uninstrument custom TypeORM instrumentation\n try {\n if (typeORMInstrumentor.isInstrumented()) {\n typeORMInstrumentor.uninstrument();\n Logger.debug(\"Custom TypeORM instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument TypeORM:\", e);\n }\n\n // Uninstrument custom OpenAI Agents SDK instrumentation\n try {\n if (openaiAgentsInstrumentor.isInstrumented()) {\n openaiAgentsInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI Agents SDK:\", e);\n }\n\n // Uninstrument HTTP instrumentation\n try {\n if (_httpInstrumentation) {\n _httpInstrumentation.disable();\n _httpInstrumentation = null;\n console.debug(\"HTTP instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument HTTP:\", e);\n }\n\n // Uninstrument undici/fetch instrumentation\n try {\n if (_undiciInstrumentation) {\n _undiciInstrumentation.disable();\n _undiciInstrumentation = null;\n console.debug(\"Undici/fetch instrumentation disabled\");\n }\n } catch (e) {\n console.debug(\"Failed to uninstrument undici:\", e);\n }\n}\n","import axios, { AxiosInstance, AxiosResponse, AxiosError } from \"axios\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { ConversationResponse, SimulationItem } from \"./models\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_TIMEOUT = 10000; // 10 seconds in milliseconds\n\n/**\n * Result from creating a simulation run.\n */\nexport interface CreateRunResult {\n runId: string;\n simulationItems: SimulationItem[];\n}\n\n/**\n * Internal HTTP client for simulation API endpoints.\n */\nexport class SimulationHttpClient {\n private client: AxiosInstance | null = null;\n\n constructor(config: Config) {\n this.client = this._createClient(config);\n }\n\n /**\n * Create and configure the HTTP client.\n */\n private _createClient(config: Config): AxiosInstance | null {\n const endpoint = (config.otlpEndpoint || \"\").trim();\n if (!endpoint) {\n Logger.error(`${LOG_PREFIX}: NETRA_OTLP_ENDPOINT is required`);\n return null;\n }\n\n const baseURL = this._resolveBaseUrl(endpoint);\n const headers = this._buildHeaders(config);\n const timeout = this._getTimeout();\n\n try {\n return axios.create({\n baseURL,\n headers,\n timeout,\n });\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Failed to create HTTP client:`, error);\n return null;\n }\n }\n\n /**\n * Extract base URL, removing telemetry suffix if present.\n */\n private _resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint;\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n /**\n * Build request headers from configuration.\n */\n private _buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n return headers;\n }\n\n /**\n * Get timeout from environment or use default.\n */\n private _getTimeout(): number {\n const timeoutStr = process.env.NETRA_SIMULATION_TIMEOUT;\n if (!timeoutStr) {\n return DEFAULT_TIMEOUT;\n }\n\n const timeout = parseFloat(timeoutStr);\n if (isNaN(timeout)) {\n Logger.warn(\n `${LOG_PREFIX}: Invalid timeout '${timeoutStr}', using default ${DEFAULT_TIMEOUT}ms`,\n );\n return DEFAULT_TIMEOUT;\n }\n\n return timeout * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Create a new simulation run for the specified dataset.\n */\n async createRun(\n name: string,\n datasetId: string,\n context?: Record<string, any>,\n ): Promise<CreateRunResult | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/test_run/multi-turn\";\n const payload = {\n name,\n datasetId,\n context: context || {},\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const userMessages = responseData.userMessages || [];\n\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages returned from create_run`);\n return null;\n }\n\n const runId = responseData.id || \"\";\n const simulationItems: SimulationItem[] = userMessages.map(\n (msg: any) => ({\n runItemId: msg.testRunItemId || \"\",\n message: msg.userMessage || \"\",\n turnId: msg.turnId || \"\",\n }),\n );\n\n return {\n runId,\n simulationItems,\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to create simulation run:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Send a conversation turn to the backend and get the next response.\n */\n async triggerConversation(\n message: string,\n turnId: string,\n sessionId: string,\n traceId: string,\n ): Promise<ConversationResponse | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/turn/agent-response\";\n const payload = {\n turnId,\n agentResponse: { message },\n sessionId,\n traceId,\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const decision = responseData.decision || \"continue\";\n\n if (decision === \"stop\") {\n return {\n decision,\n reason: responseData.reason || \"\",\n };\n }\n\n const userMessages = responseData.userMessages || [];\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages in continue response`);\n return null;\n }\n\n const nextMsg = userMessages[0];\n return {\n decision,\n nextTurnId: nextMsg.turnId || \"\",\n nextUserMessage: nextMsg.userMessage || \"\",\n nextRunItemId: nextMsg.testRunItemId || \"\",\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to trigger conversation:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Report a task execution failure to the backend.\n */\n async reportFailure(runId: string, runItemId: string, error: string): Promise<void> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return;\n }\n\n try {\n const url = `/evaluations/run/${runId}/item/${runItemId}/status`;\n const payload = { status: \"failed\", failureReason: error };\n await this.client.patch(url, payload);\n Logger.info(`${LOG_PREFIX}: Reported failure - ${error}`);\n } catch (err) {\n const errorMsg = this._extractErrorMessage(err);\n Logger.error(`${LOG_PREFIX}: Failed to report failure:`, errorMsg);\n }\n }\n\n /**\n * Submit the run status.\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.client) {\n Logger.error(\n `${LOG_PREFIX}: Client not initialized; cannot post run status`,\n );\n return { success: false };\n }\n\n try {\n const url = `/evaluations/run/${runId}/status`;\n const payload = { status };\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n if (data && typeof data === \"object\" && \"data\" in data) {\n Logger.info(`${LOG_PREFIX}: Completed test run successfully`);\n return data.data || {};\n }\n return data;\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(\n `${LOG_PREFIX}: Failed to post run status for run '${runId}':`,\n errorMsg,\n );\n return { success: false };\n }\n }\n\n /**\n * Extract error message from response or exception.\n */\n private _extractErrorMessage(error: any): string {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError;\n if (axiosError.response?.data) {\n const responseData = axiosError.response.data as any;\n if (\n typeof responseData === \"object\" &&\n responseData.error &&\n typeof responseData.error === \"object\"\n ) {\n return responseData.error.message || error.message;\n }\n }\n return axiosError.message;\n }\n return error?.message || String(error);\n }\n}\n","import { TaskResult } from \"./models\";\n\n\nexport abstract class BaseTask {\n /**\n * @param message - The input message from the simulation.\n * @param sessionId - The Session identifier.\n * @returns The task result containing:\n * - message (string): The response message from the task.\n * - sessionId (string): The session identifier.\n */\n abstract run(\n message: string,\n sessionId?: string | null,\n ): Promise<TaskResult> | TaskResult;\n}\n","import { Logger } from \"../logger\";\nimport { BaseTask } from \"./task\";\n\nconst LOG_PREFIX = \"netra.simulation\";\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string.\n *\n * @param traceId - The integer trace ID to format\n * @returns The formatted trace ID as a hexadecimal string\n */\nexport function formatTraceId(traceId: number): string {\n return traceId.toString(16).padStart(32, \"0\");\n}\n\n/**\n * Validate required inputs for simulation.\n *\n * @param datasetId - The dataset identifier to validate\n * @param task - The task function to validate\n * @returns True if inputs are valid, false otherwise\n */\nexport function validateSimulationInputs(\n datasetId: string,\n task: BaseTask,\n): boolean {\n if (!datasetId) {\n Logger.error(`${LOG_PREFIX}: dataset_id is required`);\n return false;\n }\n if (!(task instanceof BaseTask)) {\n Logger.error(`${LOG_PREFIX}: task must be a BaseTask instance`);\n return false;\n }\n return true;\n}\n\n/**\n * Execute a task function (sync or async) and extract message and session_id.\n *\n * @param task - The task function to execute\n * @param message - The input message to pass to the task\n * @param sessionId - The current session identifier\n * @returns A tuple of [response_message, session_id]\n * @throws Error if the task returns an unsupported type\n */\nexport async function executeTask(\n task: BaseTask,\n message: string,\n sessionId: string | null,\n): Promise<[string, string | null]> {\n const result = task.run(message, sessionId);\n\n // Check if result is a Promise (async function)\n const resolvedResult = result instanceof Promise ? await result : result;\n\n // Validate that the result is a TaskResult\n if (\n typeof resolvedResult === \"object\" &&\n resolvedResult !== null &&\n \"message\" in resolvedResult &&\n \"sessionId\" in resolvedResult\n ) {\n return [resolvedResult.message, resolvedResult.sessionId];\n }\n\n throw new Error(\n `Task must return TaskResult, got ${typeof resolvedResult}`,\n );\n}\n","/**\n * Public API for running multi-turn conversation simulations.\n */\n\nimport pLimit from \"p-limit\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SpanWrapper } from \"../span-wrapper\";\nimport { SimulationHttpClient } from \"./client\";\nimport {\n ConversationResult,\n SimulationItem,\n SimulationResult,\n} from \"./models\";\nimport { BaseTask } from \"./task\";\nimport { executeTask, validateSimulationInputs } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst SPAN_NAME = \"Netra.Simulation.TestRun\";\n\n\nexport interface SimulationOptions {\n name: string;\n datasetId: string;\n task: BaseTask;\n context?: Record<string, any>;\n maxConcurrency?: number; // default: 5\n}\n\n/**\n * Public API for running multi-turn conversation simulations.\n */\nexport class Simulation {\n private _config: Config;\n private _client: SimulationHttpClient;\n\n constructor(config: Config) {\n this._config = config;\n this._client = new SimulationHttpClient(config);\n }\n\n /**\n * Run a multi-turn conversation simulation.\n *\n * @param options - Simulation configuration options\n * @returns Dictionary with simulation results, or null on failure\n */\n async runSimulation(\n options: SimulationOptions,\n ): Promise<SimulationResult | null> {\n const {\n name,\n datasetId,\n task,\n context,\n maxConcurrency = 5,\n } = options;\n\n if (!validateSimulationInputs(datasetId, task)) {\n return null;\n }\n\n const startTime = Date.now();\n const runResult = await this._client.createRun(name, datasetId, context);\n if (!runResult) {\n return null;\n }\n\n const { runId, simulationItems } = runResult;\n if (!simulationItems || simulationItems.length === 0) {\n Logger.error(`${LOG_PREFIX}: No items returned from create_run`);\n return null;\n }\n\n let interrupted = false;\n const proc = typeof process !== \"undefined\" ? process : undefined;\n const finalizeFailure = (signal?: NodeJS.Signals) => {\n if (interrupted) {\n return;\n }\n interrupted = true;\n proc?.removeListener(\"SIGINT\", handleSignal);\n proc?.removeListener(\"SIGTERM\", handleSignal);\n proc?.removeListener(\"uncaughtException\", handleException);\n proc?.removeListener(\"unhandledRejection\", handleRejection);\n void this._client.postRunStatus(runId, \"failed\").finally(() => {\n if (signal) {\n proc?.kill(proc.pid, signal);\n }\n });\n };\n const handleSignal = (signal: \"SIGINT\" | \"SIGTERM\") => {\n finalizeFailure(signal);\n };\n const handleException = () => {\n finalizeFailure();\n };\n const handleRejection = () => {\n finalizeFailure();\n };\n if (proc && typeof proc.once === \"function\") {\n proc.once(\"SIGINT\", handleSignal);\n proc.once(\"SIGTERM\", handleSignal);\n proc.once(\"uncaughtException\", handleException);\n proc.once(\"unhandledRejection\", handleRejection);\n }\n\n Logger.info(\n `${LOG_PREFIX}: Starting simulation with ${simulationItems.length} items`,\n );\n\n try {\n const result = await this._runSimulationAsync(\n runId,\n simulationItems,\n task,\n maxConcurrency,\n );\n\n const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(2);\n Logger.info(\n `${LOG_PREFIX}: Simulation completed in ${elapsedTime} seconds`,\n );\n\n return result;\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Run simulation failed`);\n await this._client.postRunStatus(runId, \"failed\");\n throw error;\n } finally {\n if (proc && typeof proc.removeListener === \"function\") {\n proc.removeListener(\"SIGINT\", handleSignal);\n proc.removeListener(\"SIGTERM\", handleSignal);\n proc.removeListener(\"uncaughtException\", handleException);\n proc.removeListener(\"unhandledRejection\", handleRejection);\n }\n }\n }\n\n /**\n * Async implementation of run_simulation with concurrency control.\n */\n private async _runSimulationAsync(\n runId: string,\n runItems: SimulationItem[],\n task: BaseTask,\n maxConcurrency: number,\n ): Promise<SimulationResult> {\n const results: SimulationResult = {\n success: true,\n completed: [],\n failed: [],\n totalItems: runItems.length,\n };\n\n let processedCount = 0;\n\n // Create concurrency limiter\n const limit = pLimit(Math.min(5, maxConcurrency));\n\n // Process items with concurrency control\n const promises = runItems.map((runItem) =>\n limit(async () => {\n const result = await this._executeConversation(runId, runItem, task);\n\n if (result.success) {\n results.completed.push(result);\n } else {\n results.failed.push(result);\n }\n\n processedCount++;\n Logger.info(\n `${LOG_PREFIX}: ${processedCount}/${runItems.length} processed (run_item_id=${runItem.runItemId})`,\n );\n\n return result;\n }),\n );\n\n await Promise.all(promises);\n\n Logger.info(\n `${LOG_PREFIX}: Completed=${results.completed.length}, Failed=${results.failed.length}`,\n );\n\n await this._client.postRunStatus(runId, \"completed\");\n\n return results;\n }\n\n /**\n * Execute a multi-turn conversation for a single simulation item.\n */\n private async _executeConversation(\n runId: string,\n runItem: SimulationItem,\n task: BaseTask,\n ): Promise<ConversationResult> {\n const { runItemId, message: initialMessage, turnId: initialTurnId } = runItem;\n let message = initialMessage;\n let turnId = initialTurnId;\n let sessionId: string | null = null;\n\n while (true) {\n try {\n const span = new SpanWrapper(SPAN_NAME, {}, LOG_PREFIX);\n span.start();\n\n const traceId = span.getCurrentSpan()?.spanContext().traceId ?? \"\";\n\n // Execute the user's task\n const [responseMessage, taskSessionId] = await executeTask(\n task,\n message,\n sessionId,\n );\n\n if (taskSessionId) {\n sessionId = taskSessionId;\n }\n\n span.end();\n\n // Trigger conversation with the backend\n const response = await this._client.triggerConversation(\n responseMessage,\n turnId,\n sessionId || \"\",\n traceId,\n );\n\n if (response === null) {\n const errorMsg = \"Failed to get conversation response\";\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n\n if (response.decision === \"stop\") {\n Logger.info(\n `${LOG_PREFIX}: Completed run_item_id=${runItemId} reason=${response.reason}`,\n );\n return {\n runItemId,\n success: true,\n finalTurnId: turnId,\n };\n }\n\n // Continue to next turn\n message = response.nextUserMessage!;\n turnId = response.nextTurnId!;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n Logger.error(\n `${LOG_PREFIX}: Task failed run_item_id=${runItemId}, turn_id=${turnId}: ${errorMsg}`,\n );\n await this._client.reportFailure(runId, runItemId, errorMsg);\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n }\n }\n}\n","import { trace, Tracer as OtelTracer } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\n\nexport class Tracer {\n readonly tracer: OtelTracer;\n\n constructor(cfg: Config, effectiveProvider?: any) {\n if (effectiveProvider && typeof effectiveProvider.getTracer === \"function\") {\n this.tracer = effectiveProvider.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n } else {\n this.tracer = trace.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n }\n }\n}\n","/**\n * Decorators for easy instrumentation\n */\n\nimport { trace, Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { SessionManager } from \"./session-manager\";\nimport { SpanType, DecoratorOptions } from \"./types\";\n\ntype AnyFunction = (...args: any[]) => any;\ntype AsyncFunction = (...args: any[]) => Promise<any>;\ntype AnyClass = new (...args: any[]) => any;\ntype ClassDecoratorFn = (target: AnyClass) => void;\ntype MethodDecoratorFn = (\n target: any,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n) => void;\ntype UnifiedDecorator = ClassDecoratorFn & MethodDecoratorFn;\n\nfunction serializeValue(value: any): string {\n try {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n ) {\n return String(value);\n } else if (Array.isArray(value) || typeof value === \"object\") {\n return JSON.stringify(value).substring(0, 1000);\n } else {\n return String(value).substring(0, 1000);\n }\n } catch (e) {\n Logger.warn(\"serializeValue: serialization failed, falling back to type name:\", e);\n return String(typeof value);\n }\n}\n\n/**\n * Returns true if the span already has a non-empty `output` attribute.\n * Checks both the public `attributes` property and the internal `_attributes`\n * store to handle SDK implementations that buffer attributes before export.\n */\nfunction spanHasOutput(span: Span): boolean {\n try {\n for (const field of [\"attributes\", \"_attributes\"]) {\n const attrs = (span as any)[field];\n if (attrs && typeof attrs === \"object\" && attrs[\"output\"]) return true;\n }\n } catch (e) {\n Logger.warn(\"spanHasOutput: error inspecting span attributes:\", e);\n }\n return false;\n}\n\nfunction addInputAttributes(\n span: Span,\n args: any[],\n entityType: string,\n): void {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.type`, entityType);\n try {\n if (args.length > 0) {\n span.setAttribute(\"input\", JSON.stringify(args));\n }\n } catch (e) {\n span.setAttribute(\"input_error\", String(e));\n }\n}\n\nfunction addOutputAttributes(span: Span, result: any): void {\n // Skip if the user already set output explicitly inside the decorated function\n if (spanHasOutput(span)) return;\n try {\n span.setAttribute(\"output\", serializeValue(result));\n } catch (e) {\n span.setAttribute(\"output_error\", String(e));\n }\n}\n\nfunction isClassConstructor(value: unknown): value is AnyClass {\n if (typeof value !== \"function\") {\n return false;\n }\n\n const prototype = value.prototype;\n return (\n prototype != null &&\n typeof prototype === \"object\" &&\n prototype.constructor === value\n );\n}\n\nfunction createFunctionWrapper<T extends AnyFunction>(\n func: T,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): T {\n const moduleName = func.name || \"unknown\";\n const spanName = name || func.name || \"anonymous\";\n const isAsync = func.constructor.name === \"AsyncFunction\";\n\n const initSpan = (span: Span): void => {\n span.setAttribute(\"netra.span.type\", asType);\n SessionManager.registerSpan(spanName, span);\n };\n\n const handleError = (span: Span, e: any) => {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.error`, String(e));\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e instanceof Error ? e.message : String(e),\n });\n span.recordException(e);\n throw e;\n };\n\n const cleanup = (span: Span) => {\n span.end();\n SessionManager.unregisterSpan(spanName, span);\n SessionManager.popEntity(entityType);\n };\n\n if (isAsync) {\n const wrapper = async function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, async (span) => {\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = await (func as AsyncFunction).call(this, ...args);\n addOutputAttributes(span, result);\n return result;\n } catch (e: any) {\n handleError(span, e);\n } finally {\n cleanup(span);\n }\n });\n };\n return wrapper as T;\n } else {\n const wrapper = function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, (span) => {\n // Track whether the function returned a promise so the finally block\n // can skip its cleanup — the promise chain owns span lifecycle in that case.\n let returnedPromise = false;\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = (func as AnyFunction).call(this, ...args);\n\n // Detect promise-returning non-async functions (e.g. `function foo() { return fetch(...) }`)\n // Without this check, addOutputAttributes would capture the raw Promise object and\n // cleanup() would end the span before the async work completes.\n if (result != null && typeof (result as any).then === \"function\") {\n returnedPromise = true;\n return (result as Promise<any>)\n .then((resolved: any) => {\n addOutputAttributes(span, resolved);\n return resolved;\n })\n .catch((e: any) => handleError(span, e))\n .finally(() => cleanup(span));\n }\n\n addOutputAttributes(span, result);\n return result;\n } catch (e: any) {\n handleError(span, e);\n } finally {\n if (!returnedPromise) {\n cleanup(span);\n }\n }\n });\n };\n return wrapper as T;\n }\n}\n\nconst SKIP_STATIC_PROPS = new Set([\n \"length\",\n \"name\",\n \"prototype\",\n \"arguments\",\n \"caller\",\n]);\n\nfunction createClassWrapper(\n cls: AnyClass,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): void {\n const className = name ?? cls.name;\n\n for (const methodName of Object.getOwnPropertyNames(cls.prototype)) {\n if (methodName === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(cls.prototype, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n cls.prototype[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n\n for (const methodName of Object.getOwnPropertyNames(cls)) {\n if (SKIP_STATIC_PROPS.has(methodName)) continue;\n const desc = Object.getOwnPropertyDescriptor(cls, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n (cls as any)[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n}\n\nfunction decoratorFactory(\n entityType: string,\n spanType: SpanType,\n targetOrOptions?: AnyFunction | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): AnyFunction | AnyClass | UnifiedDecorator {\n if (isClassConstructor(targetOrOptions)) {\n createClassWrapper(targetOrOptions, entityType, options?.name, spanType);\n return targetOrOptions;\n }\n\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n entityType,\n options?.name,\n spanType,\n );\n }\n\n const opts = targetOrOptions as DecoratorOptions | undefined;\n return function (\n target: AnyFunction | AnyClass,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ): void {\n if (descriptor) {\n // Mutate descriptor in place — returning void is valid for method decorators\n descriptor.value = createFunctionWrapper(\n descriptor.value,\n entityType,\n opts?.name,\n spanType,\n );\n return;\n } else if (isClassConstructor(target)) {\n createClassWrapper(target, entityType, opts?.name, spanType);\n return;\n }\n } as UnifiedDecorator;\n}\n\nexport function workflow(target: AnyClass): void;\nexport function workflow<T extends AnyFunction>(target: T): T;\nexport function workflow(options?: DecoratorOptions): UnifiedDecorator;\nexport function workflow<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\n \"workflow\",\n SpanType.SPAN,\n targetOrOptions,\n options,\n ) as T | void | UnifiedDecorator;\n}\n\nexport function agent(target: AnyClass): void;\nexport function agent<T extends AnyFunction>(target: T): T;\nexport function agent(options?: DecoratorOptions): UnifiedDecorator;\nexport function agent<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"agent\", SpanType.AGENT, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function task(target: AnyClass): void;\nexport function task<T extends AnyFunction>(target: T): T;\nexport function task(options?: DecoratorOptions): UnifiedDecorator;\nexport function task<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"task\", SpanType.TOOL, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function span(target: AnyClass): void;\nexport function span<T extends AnyFunction>(target: T): T;\nexport function span(options?: DecoratorOptions): UnifiedDecorator;\nexport function span<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n const spanType =\n (typeof targetOrOptions !== \"function\"\n ? (targetOrOptions as DecoratorOptions)?.asType\n : options?.asType) ?? SpanType.SPAN;\n return decoratorFactory(\"span\", spanType, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n","/**\n * Netra SDK - Main entry point\n * A comprehensive TypeScript/JavaScript SDK for AI application observability\n * Built on top of OpenTelemetry and Traceloop\n */\n\nimport { context, Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { Prompts, Dashboard, Evaluation, Usage } from \"./api\";\nimport { Config, NetraConfig } from \"./config\";\nimport { initInstrumentations, instrumentationsReady, uninstrumentAll } from \"./instrumentation\";\nimport { Logger } from \"./logger\";\nimport { setSessionBaggage, withBlockedSpansLocal } from \"./processors\";\nimport { ConversationType, SessionManager } from \"./session-manager\";\nimport { Simulation } from \"./simulation\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { Tracer } from \"./tracer\";\nimport { SpanType, SpanCallback, SpanOptions, SpanAttributes } from \"./types\";\n\nexport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"./config\";\nexport { agent, span, task, workflow } from \"./decorators\";\nexport {\n InstrumentationSpanProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"./processors\";\nexport { ConversationType } from \"./session-manager\";\nexport { SpanType } from \"./types\";\nexport type { ActionModel, UsageModel, SpanOptions } from \"./types\";\n// Expose provider instrumentors for advanced usage/testing\nexport { mistralAIInstrumentor } from \"./instrumentation/mistralai\";\nexport {\n NetraOpenAIAgentsInstrumentor,\n openaiAgentsInstrumentor,\n NetraAgentsTracingProcessor,\n} from \"./instrumentation/openai-agents\";\n\n// Export API types and classes\nexport {\n Aggregation,\n ChartType,\n // Dashboard API\n Dashboard,\n DimensionField,\n EntryStatus,\n // Evaluation API\n Evaluation,\n FilterField,\n FilterType,\n GroupBy,\n Measure,\n metadataField,\n Operator,\n RunEntryContext,\n RunStatus,\n Scope,\n // Usage API\n Usage,\n // Prompts API\n Prompts,\n} from \"./api\";\n\nexport type {\n // Dashboard API\n CategoricalDataPoint,\n // Evaluation API\n CreateDatasetParams,\n DashboardData,\n Dataset,\n DatasetEntry,\n DatasetItem,\n Dimension,\n DimensionValue,\n EvaluationScore,\n EvaluatorFunction,\n Filter,\n FilterConfig,\n // Usage API\n ListSpansParams,\n ListTracesParams,\n Metrics,\n NumberResponse,\n QueryDataParams,\n QueryResponse,\n Run,\n SessionUsageData,\n SpansPage,\n TaskFunction,\n TenantUsageData,\n TestSuiteResult,\n TimeRange,\n TimeSeriesDataPoint,\n TimeSeriesResponse,\n TimeSeriesWithDimension,\n TracesPage,\n TraceSpan,\n TraceSummary,\n GetPromptParams,\n PromptResponse,\n} from \"./api\";\n\n// Export simulation types and classes\nexport { BaseTask, Simulation } from \"./simulation\";\nexport type {\n ConversationResponse,\n ConversationResult,\n CreateRunResult,\n SimulationItem,\n SimulationOptions,\n SimulationResult,\n TaskResult,\n} from \"./simulation\";\nexport * from \"./exporters\";\n\nexport class Netra {\n private static _SDK_NAME = \"netra_sdk\";\n\n private static _initialized = false;\n private static _config: Config | undefined;\n private static _tracer: any;\n private static _rootSpan: Span | undefined;\n private static _metricsEnabled = false;\n\n static usage: Usage;\n static evaluation: Evaluation;\n static dashboard: Dashboard;\n static simulation: Simulation;\n static prompts: Prompts;\n\n static getConfig(): Config {\n if (!this._config) {\n throw new Error(\"Netra SDK not initialized. Call Netra.init() first.\");\n }\n return this._config;\n }\n\n static isInitialized(): boolean {\n return this._initialized;\n }\n\n static async init(config: NetraConfig = {}): Promise<void> {\n if (this._initialized) {\n Logger.warn(\"Netra.init() called more than once; ignoring subsequent calls.\");\n return;\n }\n\n const cfg = new Config(config);\n this._config = cfg;\n\n // Wire the logger before anything else so all modules respect debugMode.\n Logger.setDebugMode(cfg.debugMode);\n\n // Initialize instrumentations and get effective provider\n const effectiveProvider = initInstrumentations(\n cfg,\n config.instruments,\n config.blockInstruments,\n config.rootInstruments,\n );\n\n // Create the tracer\n const tracer = new Tracer(cfg, effectiveProvider);\n this._tracer = tracer.tracer;\n\n try {\n this.usage = new Usage(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize usage client:\", e);\n }\n\n try {\n this.evaluation = new Evaluation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize evaluation client:\", e);\n }\n\n try {\n this.dashboard = new Dashboard(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize dashboard client:\", e);\n }\n\n try {\n this.simulation = new Simulation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize simulation client:\", e);\n }\n\n try {\n this.prompts = new Prompts(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize prompts client:\", e);\n }\n\n this._initialized = true;\n Logger.info(\"Netra successfully initialized.\");\n\n {\n let pkgVersion = Config.LIBRARY_VERSION;\n let pkgPath = \"unknown\";\n try {\n const req = createRequire(import.meta.url);\n pkgPath = req.resolve(\"../package.json\");\n const pkg = req(\"../package.json\");\n pkgVersion = pkg?.version || pkgVersion;\n } catch {\n // keep defaults\n }\n Logger.debug(\n `SDK version=${pkgVersion} libraryVersion=${Config.LIBRARY_VERSION} build=langgraph-parenting-v3 packageJson=${pkgPath}`,\n );\n }\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n Logger.log(`\\nReceived ${signal}. Shutting down Netra SDK...`);\n await this.shutdown();\n process.exit(0);\n };\n\n const handleUncaughtException = async (error: Error) => {\n Logger.error(\"Uncaught exception:\", error);\n Logger.error(\"Shutting down Netra SDK due to crash...\");\n try {\n await this.shutdown();\n } catch (err) {\n Logger.error(\"Error during crash shutdown:\", err);\n }\n process.exit(1);\n };\n\n // Handle process running out of work\n process.once(\"beforeExit\", async () => {\n // beforeExit can be called multiple times if the loop fills up again\n // but for our purpose, we just want to ensure flush happens if the script finishes\n await this.shutdown();\n });\n\n // Handle termination signals\n process.once(\"SIGINT\", () => handleSignal(\"SIGINT\"));\n process.once(\"SIGTERM\", () => handleSignal(\"SIGTERM\"));\n\n // Handle crashes\n process.once(\"uncaughtException\", handleUncaughtException);\n\n // Create root span if enabled\n if (cfg.enableRootSpan) {\n // Use the effective tracer if available\n const tracer = this._tracer || trace.getTracer(\"netra.root.span\");\n const rootName = `${Config.LIBRARY_NAME}.root.span`;\n\n // Create the root span\n this._rootSpan = tracer.startSpan(rootName, {\n kind: SpanKind.INTERNAL,\n });\n\n if (this._rootSpan) {\n if (cfg.appName) {\n this._rootSpan.setAttribute(\"service.name\", cfg.appName);\n }\n this._rootSpan.setAttribute(\"netra.environment\", cfg.environment);\n this._rootSpan.setAttribute(\n \"netra.library.version\",\n Config.LIBRARY_VERSION,\n );\n\n Logger.info(\n \"Netra root span created. Use Netra.runWithRootSpan() to parent spans under it.\",\n );\n }\n }\n\n // Wait for all async instrumentations to be ready\n await instrumentationsReady;\n }\n\n static async shutdown(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n\n // Unpatch any monkey-patched instrumentations first\n try {\n await uninstrumentAll();\n } catch (e) {\n Logger.error(\"Error during uninstrumentAll:\", e);\n }\n\n if (this._rootSpan) {\n try {\n this._rootSpan.end();\n } catch (e) {\n } finally {\n this._rootSpan = undefined;\n }\n }\n\n const FLUSH_TIMEOUT_MS = 5000;\n\n try {\n const traceProvider = trace.getTracerProvider();\n const flushPromise = (async () => {\n if (\n \"forceFlush\" in traceProvider &&\n typeof traceProvider.forceFlush === \"function\"\n ) {\n await traceProvider.forceFlush();\n }\n if (\n \"shutdown\" in traceProvider &&\n typeof traceProvider.shutdown === \"function\"\n ) {\n await traceProvider.shutdown();\n }\n })();\n\n await Promise.race([\n flushPromise,\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n } catch (e) {\n Logger.error(\"Error during Netra trace shutdown:\", e);\n }\n\n this._initialized = false;\n this._tracer = undefined;\n }\n\n static getTraceId(): string | undefined {\n return SessionManager.getTraceId();\n }\n\n static setInput(value: any): void {\n SessionManager.setInput(value);\n }\n\n static setOutput(value: any): void {\n SessionManager.setOutput(value);\n }\n\n static setRootInput(value: any): void {\n SessionManager.setRootInput(value);\n }\n\n static setRootOutput(value: any): void {\n SessionManager.setRootOutput(value);\n }\n\n /**\n * Run a function with the root span as the active parent context.\n * All spans created within this function will be children of the root span.\n * Note: required in JS because OTel JS has no persistent context.attach()\n */\n static runWithRootSpan<T>(fn: () => T): T {\n if (!this._rootSpan) {\n Logger.warn(\n \"runWithRootSpan: No root span available. Running function without parent context.\",\n );\n return fn();\n }\n return context.with(trace.setSpan(context.active(), this._rootSpan), fn);\n }\n\n static setSessionId(sessionId: string): void {\n if (typeof sessionId !== \"string\") {\n Logger.error(`setSessionId: sessionId must be a string, got ${typeof sessionId}`);\n return;\n }\n if (sessionId) {\n setSessionBaggage(\"session_id\", sessionId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.session_id`,\n sessionId,\n );\n } else {\n Logger.warn(\"setSessionId: Session ID must be provided for setting session_id.\");\n }\n }\n\n /**\n * Set user_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setUserId(userId: string): void {\n if (typeof userId !== \"string\") {\n Logger.error(`setUserId: userId must be a string, got ${typeof userId}`);\n return;\n }\n if (userId) {\n setSessionBaggage(\"user_id\", userId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.user_id`,\n userId,\n );\n } else {\n Logger.warn(\"setUserId: User ID must be provided for setting user_id.\");\n }\n }\n\n /**\n * Set tenant_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setTenantId(tenantId: string): void {\n if (typeof tenantId !== \"string\") {\n Logger.error(`setTenantId: tenantId must be a string, got ${typeof tenantId}`);\n return;\n }\n if (tenantId) {\n setSessionBaggage(\"tenant_id\", tenantId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.tenant_id`,\n tenantId,\n );\n } else {\n Logger.warn(\"setTenantId: Tenant ID must be provided for setting tenant_id.\");\n }\n }\n\n /**\n * Set a custom attribute on the current active span\n */\n static setCustomAttributes(key: string, value: any): void {\n if (key && value !== undefined && value !== null) {\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.custom.${key}`,\n value,\n );\n } else {\n Logger.warn(\"Both key and value must be provided for custom attributes.\");\n }\n }\n\n /**\n * Set custom event in the current active span\n */\n static setCustomEvent(\n eventName: string,\n attributes: Record<string, any>,\n ): void {\n if (eventName && attributes) {\n SessionManager.setCustomEvent(eventName, attributes);\n } else {\n Logger.warn(\"Both eventName and attributes must be provided for custom events.\");\n }\n }\n\n /**\n * Append a conversation entry to the current active span\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n SessionManager.addConversation(conversationType, role, content);\n }\n\n static startSpan(name: string): SpanWrapper;\n static startSpan(name: string, options: SpanOptions): SpanWrapper;\n static startSpan(name: string, options?: SpanOptions): SpanWrapper {\n const attributes = options?.attributes ?? {};\n const moduleName = options?.moduleName ?? this._SDK_NAME;\n const spanType = options?.asType ?? SpanType.SPAN;\n\n return new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n options?.blockedSpans,\n ).start();\n }\n\n static startActiveSpan<T>(name: string, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(name: string, options: SpanOptions, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(\n name: string,\n optionsOrFn: SpanOptions | SpanCallback<T>,\n fn?: SpanCallback<T>,\n ): T {\n let attributes: SpanAttributes = {};\n let moduleName = this._SDK_NAME;\n let spanType: SpanType = SpanType.SPAN;\n let callback: SpanCallback<T>;\n\n if (typeof optionsOrFn === \"function\") {\n callback = optionsOrFn;\n } else {\n attributes = optionsOrFn.attributes ?? {};\n moduleName = optionsOrFn.moduleName ?? this._SDK_NAME;\n spanType = optionsOrFn.asType ?? SpanType.SPAN;\n callback = fn!;\n }\n\n const blockedSpans = typeof optionsOrFn === \"function\"\n ? undefined\n : optionsOrFn.blockedSpans;\n\n const spanWrapper = new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n blockedSpans,\n ).start();\n\n return spanWrapper.withActive(() => {\n let result: T;\n try {\n result = callback(spanWrapper);\n } catch (e) {\n spanWrapper.setError(e instanceof Error ? e.message : String(e));\n spanWrapper.end();\n throw e;\n }\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .catch((e) => {\n spanWrapper.setError(e instanceof Error ? e.message : String(e));\n throw e;\n })\n .finally(() => spanWrapper.end()) as T;\n }\n\n spanWrapper.end();\n return result;\n });\n }\n\n static withBlockedSpansLocal = withBlockedSpansLocal;\n}\n\nexport default Netra;\n"]}