netra-sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/decamelize/index.js","../node_modules/camelcase/index.js","../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","../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/uuid/dist/esm-node/stringify.js","../node_modules/uuid/dist/esm-node/rng.js","../node_modules/uuid/dist/esm-node/v7.js","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/version.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/decorators.ts","../src/index.ts"],"names":["exports","camelCase","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","__defProp","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","EMBEDDING_SPAN_NAME","endTime","StreamingWrapper","chatStreamWrapper","embeddingsWrapper","ExportResultCode","require","BaggagePropagator"],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\nmodule.exports = function (str, sep) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tsep = typeof sep === 'undefined' ? '_' : sep;\n\n\treturn str\n\t\t.replace(/([a-z\\d])([A-Z])/g, '$1' + sep + '$2')\n\t\t.replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, '$1' + sep + '$2')\n\t\t.toLowerCase();\n};\n","'use strict';\n\nconst UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/gu;\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp('\\\\d+' + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => {\n\tLEADING_CAPITAL.lastIndex = 0;\n\n\treturn input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));\n};\n\nconst postProcess = (input, toUpperCase) => {\n\tSEPARATORS_AND_IDENTIFIER.lastIndex = 0;\n\tNUMBERS_AND_IDENTIFIER.lastIndex = 0;\n\n\treturn input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))\n\t\t.replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst toLowerCase = options.locale === false ?\n\t\tstring => string.toLowerCase() :\n\t\tstring => string.toLocaleLowerCase(options.locale);\n\tconst toUpperCase = options.locale === false ?\n\t\tstring => string.toUpperCase() :\n\t\tstring => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? toUpperCase(input) : toLowerCase(input);\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input, toLowerCase, toUpperCase);\n\t}\n\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\n\tif (options.preserveConsecutiveUppercase) {\n\t\tinput = preserveConsecutiveUppercase(input, toLowerCase);\n\t} else {\n\t\tinput = toLowerCase(input);\n\t}\n\n\tif (options.pascalCase) {\n\t\tinput = toUpperCase(input.charAt(0)) + input.slice(1);\n\t}\n\n\treturn postProcess(input, toUpperCase);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","/**\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 { Session } from \"openai/resources/beta/realtime.mjs\";\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 */\nasync 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}\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, 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 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","//#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 validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\n/**\n * UUID V7 - Unix Epoch time-based UUID\n *\n * The IETF has published RFC9562, introducing 3 new UUID versions (6,7,8). This\n * implementation of V7 is based on the accepted, though not yet approved,\n * revisions.\n *\n * RFC 9562:https://www.rfc-editor.org/rfc/rfc9562.html Universally Unique\n * IDentifiers (UUIDs)\n\n *\n * Sample V7 value:\n * https://www.rfc-editor.org/rfc/rfc9562.html#name-example-of-a-uuidv7-value\n *\n * Monotonic Bit Layout: RFC rfc9562.6.2 Method 1, Dedicated Counter Bits ref:\n * https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-5.1\n *\n * 0 1 2 3 0 1 2 3 4 5 6\n * 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | unix_ts_ms |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | unix_ts_ms | ver | seq_hi |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |var| seq_low | rand |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | rand |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n *\n * seq is a 31 bit serialized counter; comprised of 12 bit seq_hi and 19 bit\n * seq_low, and randomly initialized upon timestamp change. 31 bit counter size\n * was selected as any bitwise operations in node are done as _signed_ 32 bit\n * ints. we exclude the sign bit.\n */\n\nlet _seqLow = null;\nlet _seqHigh = null;\nlet _msecs = 0;\nfunction v7(options, buf, offset) {\n options = options || {};\n\n // initialize buffer and pointer\n let i = buf && offset || 0;\n const b = buf || new Uint8Array(16);\n\n // rnds is Uint8Array(16) filled with random bytes\n const rnds = options.random || (options.rng || rng)();\n\n // milliseconds since unix epoch, 1970-01-01 00:00\n const msecs = options.msecs !== undefined ? options.msecs : Date.now();\n\n // seq is user provided 31 bit counter\n let seq = options.seq !== undefined ? options.seq : null;\n\n // initialize local seq high/low parts\n let seqHigh = _seqHigh;\n let seqLow = _seqLow;\n\n // check if clock has advanced and user has not provided msecs\n if (msecs > _msecs && options.msecs === undefined) {\n _msecs = msecs;\n\n // unless user provided seq, reset seq parts\n if (seq !== null) {\n seqHigh = null;\n seqLow = null;\n }\n }\n\n // if we have a user provided seq\n if (seq !== null) {\n // trim provided seq to 31 bits of value, avoiding overflow\n if (seq > 0x7fffffff) {\n seq = 0x7fffffff;\n }\n\n // split provided seq into high/low parts\n seqHigh = seq >>> 19 & 0xfff;\n seqLow = seq & 0x7ffff;\n }\n\n // randomly initialize seq\n if (seqHigh === null || seqLow === null) {\n seqHigh = rnds[6] & 0x7f;\n seqHigh = seqHigh << 8 | rnds[7];\n seqLow = rnds[8] & 0x3f; // pad for var\n seqLow = seqLow << 8 | rnds[9];\n seqLow = seqLow << 5 | rnds[10] >>> 3;\n }\n\n // increment seq if within msecs window\n if (msecs + 10000 > _msecs && seq === null) {\n if (++seqLow > 0x7ffff) {\n seqLow = 0;\n if (++seqHigh > 0xfff) {\n seqHigh = 0;\n\n // increment internal _msecs. this allows us to continue incrementing\n // while staying monotonic. Note, once we hit 10k milliseconds beyond system\n // clock, we will reset breaking monotonicity (after (2^31)*10000 generations)\n _msecs++;\n }\n }\n } else {\n // resetting; we have advanced more than\n // 10k milliseconds beyond system clock\n _msecs = msecs;\n }\n _seqHigh = seqHigh;\n _seqLow = seqLow;\n\n // [bytes 0-5] 48 bits of local timestamp\n b[i++] = _msecs / 0x10000000000 & 0xff;\n b[i++] = _msecs / 0x100000000 & 0xff;\n b[i++] = _msecs / 0x1000000 & 0xff;\n b[i++] = _msecs / 0x10000 & 0xff;\n b[i++] = _msecs / 0x100 & 0xff;\n b[i++] = _msecs & 0xff;\n\n // [byte 6] - set 4 bits of version (7) with first 4 bits seq_hi\n b[i++] = seqHigh >>> 4 & 0x0f | 0x70;\n\n // [byte 7] remaining 8 bits of seq_hi\n b[i++] = seqHigh & 0xff;\n\n // [byte 8] - variant (2 bits), first 6 bits seq_low\n b[i++] = seqLow >>> 13 & 0x3f | 0x80;\n\n // [byte 9] 8 bits seq_low\n b[i++] = seqLow >>> 5 & 0xff;\n\n // [byte 10] remaining 5 bits seq_low, 3 bits random\n b[i++] = seqLow << 3 & 0xff | rnds[10] & 0x07;\n\n // [bytes 11-15] always random\n b[i++] = rnds[11];\n b[i++] = rnds[12];\n b[i++] = rnds[13];\n b[i++] = rnds[14];\n b[i++] = rnds[15];\n return buf || unsafeStringify(b);\n}\nexport default v7;","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 { Span, SpanKind, Tracer, context, trace } from \"@opentelemetry/api\";\n\nimport {\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\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\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 async 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 ) {\n const nodeName = (metadata?.langgraph_node ?? \"\") as string;\n const nodeType = chain.id?.[chain.id.length - 1] || \"Unknown\";\n\n if (\n !nodeName ||\n nodeType.toUpperCase() !== \"RUNNABLESEQUENCE\" ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const parentSpan = this.getParentSpan(parentRunId);\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 }\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 }\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 }\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 this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId, // 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 parentSpan = this.getParentSpan(parentRunId);\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 parentSpan = this.getParentSpan(parentRunId);\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 this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\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 parentSpan = this.getParentSpan(parentRunId);\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 parentSpan = this.getParentSpan(parentRunId);\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(private rootSpan: Span) {}\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(context.active(), 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 if (shouldSuppressInstrumentation()) {\n return await originalFunc.call(instance, input, config, ...rest);\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(this.spanName, {\n kind: SpanKind.CLIENT,\n });\n\n return context.with(trace.setSpan(context.active(), span), async () => {\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 if (shouldSuppressInstrumentation()) {\n return await originalFunc.call(instance, input, config, ...rest);\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 streamingWrapper = new LanggraphStreamingWrapper(span);\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","export const __version__ = \"1.0.0\";\n","import { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { LanggraphWrapper } from \"./wrappers\";\nimport { __version__ } from \"./version\";\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> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n const langgraphModule = await import(\"@langchain/langgraph\");\n LanggraphClass = langgraphModule.CompiledStateGraph;\n return LanggraphClass;\n } catch {\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 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._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n console.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (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 if (!Langgraph?.prototype?.invoke) {\n console.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n const originalInvoke = Langgraph.prototype.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n Langgraph.prototype.invoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\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 if (!Langgraph?.prototype?.stream) {\n console.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n const originalStream = Langgraph.prototype.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n Langgraph.prototype.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\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 if (originalInvoke && Langgraph?.prototype?.invoke) {\n Langgraph.prototype.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 if (originalStream && Langgraph?.prototype?.stream) {\n Langgraph.prototype.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 { 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\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 // 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 // ---- 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","/**\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 propagation,\n} from \"@opentelemetry/api\";\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 { setSessionBaggage } from \"./processors/session-span-processor\";\nimport {\n ConversationType,\n runWithEntityContext,\n SessionManager,\n} from \"./session-manager\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { SpanType } from \"./types\";\nimport { withBlockedSpansLocal } from \"./processors/localfiltering-span-processor\";\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\";\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 /**\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 * Note: Custom instrumentations (OpenAI, Groq, MistralAI) are initialized\n * asynchronously. Use initAsync() or await Netra.ready() to ensure\n * instrumentations are complete before using instrumented modules.\n */\n static init(config: NetraConfig = {}): 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\n this._initialized = true;\n console.info(\"Netra successfully initialized.\");\n this._initialized = true;\n console.info(\"Netra successfully initialized.\");\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n console.log(`\\nRecepived ${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\n /**\n * Initialize the Netra SDK and wait for all instrumentations to be ready.\n * This is the recommended way to initialize Netra when using ES modules,\n * as it ensures all async instrumentations (OpenAI, Groq, MistralAI) are\n * complete before the application starts using the instrumented modules.\n *\n * @example\n * await Netra.initAsync({ appName: 'my-app', instruments: new Set([NetraInstruments.OPENAI]) });\n * // Now OpenAI is fully instrumented\n * const openai = new OpenAI();\n */\n static async initAsync(config: NetraConfig = {}): Promise<void> {\n this.init(config);\n await instrumentationsReady;\n }\n\n /**\n * Returns a promise that resolves when all async instrumentations are ready.\n * Can be called after init() to wait for instrumentations.\n *\n * @example\n * Netra.init({ appName: 'my-app' });\n * await Netra.ready();\n * // Now all instrumentations are complete\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":["../node_modules/decamelize/index.js","../node_modules/camelcase/index.js","../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","../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/uuid/dist/esm-node/stringify.js","../node_modules/uuid/dist/esm-node/rng.js","../node_modules/uuid/dist/esm-node/v7.js","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/version.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/decorators.ts","../src/index.ts"],"names":["exports","camelCase","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","__defProp","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","EMBEDDING_SPAN_NAME","endTime","StreamingWrapper","chatStreamWrapper","embeddingsWrapper","ExportResultCode","require","BaggagePropagator"],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\nmodule.exports = function (str, sep) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tsep = typeof sep === 'undefined' ? '_' : sep;\n\n\treturn str\n\t\t.replace(/([a-z\\d])([A-Z])/g, '$1' + sep + '$2')\n\t\t.replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, '$1' + sep + '$2')\n\t\t.toLowerCase();\n};\n","'use strict';\n\nconst UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/gu;\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp('\\\\d+' + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => {\n\tLEADING_CAPITAL.lastIndex = 0;\n\n\treturn input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));\n};\n\nconst postProcess = (input, toUpperCase) => {\n\tSEPARATORS_AND_IDENTIFIER.lastIndex = 0;\n\tNUMBERS_AND_IDENTIFIER.lastIndex = 0;\n\n\treturn input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))\n\t\t.replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst toLowerCase = options.locale === false ?\n\t\tstring => string.toLowerCase() :\n\t\tstring => string.toLocaleLowerCase(options.locale);\n\tconst toUpperCase = options.locale === false ?\n\t\tstring => string.toUpperCase() :\n\t\tstring => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? toUpperCase(input) : toLowerCase(input);\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input, toLowerCase, toUpperCase);\n\t}\n\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\n\tif (options.preserveConsecutiveUppercase) {\n\t\tinput = preserveConsecutiveUppercase(input, toLowerCase);\n\t} else {\n\t\tinput = toLowerCase(input);\n\t}\n\n\tif (options.pascalCase) {\n\t\tinput = toUpperCase(input.charAt(0)) + input.slice(1);\n\t}\n\n\treturn postProcess(input, toUpperCase);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","/**\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 { Session } from \"openai/resources/beta/realtime.mjs\";\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 */\nasync 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}\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, 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 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","//#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 validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\n/**\n * UUID V7 - Unix Epoch time-based UUID\n *\n * The IETF has published RFC9562, introducing 3 new UUID versions (6,7,8). This\n * implementation of V7 is based on the accepted, though not yet approved,\n * revisions.\n *\n * RFC 9562:https://www.rfc-editor.org/rfc/rfc9562.html Universally Unique\n * IDentifiers (UUIDs)\n\n *\n * Sample V7 value:\n * https://www.rfc-editor.org/rfc/rfc9562.html#name-example-of-a-uuidv7-value\n *\n * Monotonic Bit Layout: RFC rfc9562.6.2 Method 1, Dedicated Counter Bits ref:\n * https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-5.1\n *\n * 0 1 2 3 0 1 2 3 4 5 6\n * 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | unix_ts_ms |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | unix_ts_ms | ver | seq_hi |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |var| seq_low | rand |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | rand |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n *\n * seq is a 31 bit serialized counter; comprised of 12 bit seq_hi and 19 bit\n * seq_low, and randomly initialized upon timestamp change. 31 bit counter size\n * was selected as any bitwise operations in node are done as _signed_ 32 bit\n * ints. we exclude the sign bit.\n */\n\nlet _seqLow = null;\nlet _seqHigh = null;\nlet _msecs = 0;\nfunction v7(options, buf, offset) {\n options = options || {};\n\n // initialize buffer and pointer\n let i = buf && offset || 0;\n const b = buf || new Uint8Array(16);\n\n // rnds is Uint8Array(16) filled with random bytes\n const rnds = options.random || (options.rng || rng)();\n\n // milliseconds since unix epoch, 1970-01-01 00:00\n const msecs = options.msecs !== undefined ? options.msecs : Date.now();\n\n // seq is user provided 31 bit counter\n let seq = options.seq !== undefined ? options.seq : null;\n\n // initialize local seq high/low parts\n let seqHigh = _seqHigh;\n let seqLow = _seqLow;\n\n // check if clock has advanced and user has not provided msecs\n if (msecs > _msecs && options.msecs === undefined) {\n _msecs = msecs;\n\n // unless user provided seq, reset seq parts\n if (seq !== null) {\n seqHigh = null;\n seqLow = null;\n }\n }\n\n // if we have a user provided seq\n if (seq !== null) {\n // trim provided seq to 31 bits of value, avoiding overflow\n if (seq > 0x7fffffff) {\n seq = 0x7fffffff;\n }\n\n // split provided seq into high/low parts\n seqHigh = seq >>> 19 & 0xfff;\n seqLow = seq & 0x7ffff;\n }\n\n // randomly initialize seq\n if (seqHigh === null || seqLow === null) {\n seqHigh = rnds[6] & 0x7f;\n seqHigh = seqHigh << 8 | rnds[7];\n seqLow = rnds[8] & 0x3f; // pad for var\n seqLow = seqLow << 8 | rnds[9];\n seqLow = seqLow << 5 | rnds[10] >>> 3;\n }\n\n // increment seq if within msecs window\n if (msecs + 10000 > _msecs && seq === null) {\n if (++seqLow > 0x7ffff) {\n seqLow = 0;\n if (++seqHigh > 0xfff) {\n seqHigh = 0;\n\n // increment internal _msecs. this allows us to continue incrementing\n // while staying monotonic. Note, once we hit 10k milliseconds beyond system\n // clock, we will reset breaking monotonicity (after (2^31)*10000 generations)\n _msecs++;\n }\n }\n } else {\n // resetting; we have advanced more than\n // 10k milliseconds beyond system clock\n _msecs = msecs;\n }\n _seqHigh = seqHigh;\n _seqLow = seqLow;\n\n // [bytes 0-5] 48 bits of local timestamp\n b[i++] = _msecs / 0x10000000000 & 0xff;\n b[i++] = _msecs / 0x100000000 & 0xff;\n b[i++] = _msecs / 0x1000000 & 0xff;\n b[i++] = _msecs / 0x10000 & 0xff;\n b[i++] = _msecs / 0x100 & 0xff;\n b[i++] = _msecs & 0xff;\n\n // [byte 6] - set 4 bits of version (7) with first 4 bits seq_hi\n b[i++] = seqHigh >>> 4 & 0x0f | 0x70;\n\n // [byte 7] remaining 8 bits of seq_hi\n b[i++] = seqHigh & 0xff;\n\n // [byte 8] - variant (2 bits), first 6 bits seq_low\n b[i++] = seqLow >>> 13 & 0x3f | 0x80;\n\n // [byte 9] 8 bits seq_low\n b[i++] = seqLow >>> 5 & 0xff;\n\n // [byte 10] remaining 5 bits seq_low, 3 bits random\n b[i++] = seqLow << 3 & 0xff | rnds[10] & 0x07;\n\n // [bytes 11-15] always random\n b[i++] = rnds[11];\n b[i++] = rnds[12];\n b[i++] = rnds[13];\n b[i++] = rnds[14];\n b[i++] = rnds[15];\n return buf || unsafeStringify(b);\n}\nexport default v7;","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 { Span, SpanKind, Tracer, context, trace } from \"@opentelemetry/api\";\n\nimport {\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\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\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 async 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 ) {\n const nodeName = (metadata?.langgraph_node ?? \"\") as string;\n const nodeType = chain.id?.[chain.id.length - 1] || \"Unknown\";\n\n if (\n !nodeName ||\n nodeType.toUpperCase() !== \"RUNNABLESEQUENCE\" ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const parentSpan = this.getParentSpan(parentRunId);\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 }\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 }\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 }\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 this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId, // 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 parentSpan = this.getParentSpan(parentRunId);\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 parentSpan = this.getParentSpan(parentRunId);\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 this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\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 parentSpan = this.getParentSpan(parentRunId);\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 parentSpan = this.getParentSpan(parentRunId);\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(private rootSpan: Span) {}\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(context.active(), 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 if (shouldSuppressInstrumentation()) {\n return await originalFunc.call(instance, input, config, ...rest);\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 return context.with(trace.setSpan(context.active(), span), async () => {\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 if (shouldSuppressInstrumentation()) {\n return await originalFunc.call(instance, input, config, ...rest);\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 streamingWrapper = new LanggraphStreamingWrapper(span);\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","export const __version__ = \"1.0.0\";\n","import { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { LanggraphWrapper } from \"./wrappers\";\nimport { __version__ } from \"./version\";\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> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n const langgraphModule = await import(\"@langchain/langgraph\");\n LanggraphClass = langgraphModule.CompiledStateGraph;\n return LanggraphClass;\n } catch {\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 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._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n console.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (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 if (!Langgraph?.prototype?.invoke) {\n console.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n const originalInvoke = Langgraph.prototype.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n Langgraph.prototype.invoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\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 if (!Langgraph?.prototype?.stream) {\n console.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n const originalStream = Langgraph.prototype.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n Langgraph.prototype.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\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 if (originalInvoke && Langgraph?.prototype?.invoke) {\n Langgraph.prototype.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 if (originalStream && Langgraph?.prototype?.stream) {\n Langgraph.prototype.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 { 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\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 // ---- 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","/**\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 propagation,\n} from \"@opentelemetry/api\";\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 { setSessionBaggage } from \"./processors/session-span-processor\";\nimport {\n ConversationType,\n runWithEntityContext,\n SessionManager,\n} from \"./session-manager\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { SpanType } from \"./types\";\nimport { withBlockedSpansLocal } from \"./processors/localfiltering-span-processor\";\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\";\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 /**\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 * Note: Custom instrumentations (OpenAI, Groq, MistralAI) are initialized\n * asynchronously. Use initAsync() or await Netra.ready() to ensure\n * instrumentations are complete before using instrumented modules.\n */\n static init(config: NetraConfig = {}): 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\n this._initialized = true;\n console.info(\"Netra successfully initialized.\");\n this._initialized = true;\n console.info(\"Netra successfully initialized.\");\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n console.log(`\\nRecepived ${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\n /**\n * Initialize the Netra SDK and wait for all instrumentations to be ready.\n * This is the recommended way to initialize Netra when using ES modules,\n * as it ensures all async instrumentations (OpenAI, Groq, MistralAI) are\n * complete before the application starts using the instrumented modules.\n *\n * @example\n * await Netra.initAsync({ appName: 'my-app', instruments: new Set([NetraInstruments.OPENAI]) });\n * // Now OpenAI is fully instrumented\n * const openai = new OpenAI();\n */\n static async initAsync(config: NetraConfig = {}): Promise<void> {\n this.init(config);\n await instrumentationsReady;\n }\n\n /**\n * Returns a promise that resolves when all async instrumentations are ready.\n * Can be called after init() to wait for instrumentations.\n *\n * @example\n * Netra.init({ appName: 'my-app' });\n * await Netra.ready();\n * // Now all instrumentations are complete\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"]}