@anyway-sh/node-server-sdk 0.22.8 → 0.22.10
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/README.md +154 -0
- package/dist/index.d.ts +35 -2
- package/dist/index.js +92 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +92 -2
- package/dist/src/lib/interfaces/initialize-options.interface.d.ts +10 -0
- package/dist/src/lib/pricing/calculator.d.ts +24 -0
- package/dist/src/lib/pricing/index.d.ts +4 -0
- package/dist/src/lib/pricing/loader.d.ts +3 -0
- package/dist/src/lib/tracing/span-processor.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/lib/errors/index.ts","../../src/lib/client/annotation/base-annotation.ts","../../src/lib/client/annotation/user-feedback.ts","../../src/lib/utils/response-transformer.ts","../../src/lib/client/dataset/base-dataset.ts","../../src/lib/client/dataset/attachment.ts","../../src/lib/client/dataset/attachment-uploader.ts","../../src/lib/client/dataset/row.ts","../../src/lib/client/dataset/column.ts","../../src/lib/client/dataset/dataset.ts","../../src/lib/client/dataset/datasets.ts","../../src/lib/client/evaluator/evaluator.ts","../../src/lib/client/experiment/experiment.ts","../../src/lib/client/traceloop-client.ts","../../src/lib/generated/evaluators/registry.ts","../../src/lib/generated/evaluators/mbt-evaluators.ts","../../src/lib/configuration/validation.ts","../../src/lib/tracing/tracing.ts","../../src/lib/tracing/ai-sdk-transformations.ts","../../src/lib/tracing/baggage-utils.ts","../../src/lib/tracing/span-processor.ts","../../src/lib/images/image-uploader.ts","../../src/lib/tracing/index.ts","../../src/lib/prompts/fetch.ts","../../src/lib/prompts/registry.ts","../../src/lib/configuration/index.ts","../../src/lib/tracing/decorators.ts","../../src/lib/tracing/manual.ts","../../src/lib/tracing/association.ts","../../src/lib/tracing/custom-metric.ts","../../src/lib/interfaces/prompts.interface.ts","../../src/lib/prompts/template.ts","../../src/lib/prompts/index.ts","../../src/lib/associations/associations.ts"],"sourcesContent":["/**\n * The severity of an error.\n */\nexport const SEVERITY = {\n Warning: \"Warning\",\n Error: \"Error\",\n Critical: \"Critical\",\n} as const;\n\nexport type Severity = (typeof SEVERITY)[keyof typeof SEVERITY];\n\n/**\n * Base class for all Traceloop errors.\n */\nexport class TraceloopError extends Error {\n /**\n * The severity of the error.\n */\n severity: Severity;\n /**\n * The underlying cause of the error.\n */\n underlyingCause?: Error;\n\n constructor(message: string, severity: Severity = SEVERITY.Error) {\n super(message);\n this.severity = severity;\n }\n}\n\nexport class NotInitializedError extends TraceloopError {\n constructor() {\n super(\n `The Traceloop SDK must be initialized by calling the \"initialize\" function prior to use.`,\n SEVERITY.Critical,\n );\n }\n}\n\nexport class InitializationError extends TraceloopError {\n constructor(message?: string, cause?: Error) {\n super(message ?? \"Failed to initialize Traceloop SDK\", SEVERITY.Critical);\n this.underlyingCause = cause;\n }\n}\n\nexport class ArgumentNotProvidedError extends TraceloopError {\n constructor(argumentName: string) {\n super(`The \"${argumentName}\" argument is required and must be a string.`);\n }\n}\n\nexport class PromptNotFoundError extends TraceloopError {\n constructor(key: string) {\n super(`The prompt \"${key}\" was not found in the registry.`);\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { AnnotationCreateOptions } from \"../../interfaces/annotations.interface\";\n\nexport type AnnotationFlow = \"user_feedback\";\n\n/**\n * Base class for handling annotation operations with the Traceloop API.\n * @internal\n */\nexport class BaseAnnotation {\n constructor(\n protected client: TraceloopClient,\n protected flow: AnnotationFlow,\n ) {}\n\n /**\n * Creates a new annotation.\n *\n * @param options - The annotation creation options\n * @returns Promise resolving to the fetch Response\n */\n async create(options: AnnotationCreateOptions) {\n return await this.client.post(\n `/v2/annotation-tasks/${options.annotationTask}/annotations`,\n {\n entity_instance_id: options.entity.id,\n tags: options.tags,\n source: \"sdk\",\n flow: this.flow,\n actor: {\n type: \"service\",\n id: this.client.appName,\n },\n },\n );\n }\n}\n","import { BaseAnnotation } from \"./base-annotation\";\nimport { TraceloopClient } from \"../traceloop-client\";\nimport { AnnotationCreateOptions } from \"../../interfaces/annotations.interface\";\n\n/**\n * Handles user feedback annotations with the Traceloop API.\n */\nexport class UserFeedback extends BaseAnnotation {\n constructor(client: TraceloopClient) {\n super(client, \"user_feedback\");\n }\n\n /**\n * Creates a new annotation for a specific task and entity.\n *\n * @param options - The options for creating an annotation\n * @returns Promise resolving to the fetch Response\n *\n * @example\n * ```typescript\n * await client.annotation.create({\n * annotationTask: 'sample-annotation-task',\n * entity: {\n * id: '123456',\n * },\n * tags: {\n * sentiment: 'positive',\n * score: 0.85,\n * tones: ['happy', 'surprised']\n * }\n * });\n * ```\n */\n override async create(options: AnnotationCreateOptions) {\n return await super.create(options);\n }\n}\n","/**\n * Utility functions for transforming API responses from snake_case to camelCase\n */\n\n/**\n * Converts a snake_case string to camelCase\n * @param str The snake_case string to convert\n * @returns The camelCase version of the string\n */\nfunction snakeToCamel(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Recursively transforms all snake_case keys in an object to camelCase\n * @param obj The object to transform\n * @returns A new object with camelCase keys\n */\nexport function transformResponseKeys(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(transformResponseKeys);\n }\n\n if (typeof obj === \"object\" && obj.constructor === Object) {\n const transformed: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = snakeToCamel(key);\n transformed[camelKey] = transformResponseKeys(value);\n }\n\n return transformed;\n }\n\n return obj;\n}\n\n/**\n * Transforms API response data by converting snake_case keys to camelCase\n * This function is designed to be used in the BaseDataset.handleResponse() method\n * to ensure consistent camelCase format throughout the SDK\n *\n * @param data The raw API response data\n * @returns The transformed data with camelCase keys\n */\nexport function transformApiResponse<T = any>(data: any): T {\n return transformResponseKeys(data) as T;\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { transformApiResponse } from \"../../utils/response-transformer\";\n\nexport abstract class BaseDatasetEntity {\n constructor(protected client: TraceloopClient) {}\n\n protected async handleResponse(response: Response) {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default HTTP error message if JSON parsing fails\n }\n\n throw new Error(errorMessage);\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n const rawData = await response.json();\n return transformApiResponse(rawData);\n }\n\n // Handle non-JSON responses (text/csv, etc.)\n const textContent = await response.text();\n return {\n contentType: contentType || \"text/plain\",\n body: textContent,\n };\n }\n\n protected validateDatasetId(id: string): void {\n if (!id || typeof id !== \"string\" || id.trim().length === 0) {\n throw new Error(\"Dataset ID is required and must be a non-empty string\");\n }\n }\n\n protected validateDatasetSlug(slug: string): void {\n if (!slug || typeof slug !== \"string\" || slug.trim().length === 0) {\n throw new Error(\n \"Dataset slug is required and must be a non-empty string\",\n );\n }\n }\n\n protected validateDatasetName(name: string): void {\n if (!name || typeof name !== \"string\" || name.trim().length === 0) {\n throw new Error(\n \"Dataset name is required and must be a non-empty string\",\n );\n }\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as mime from \"mime-types\";\n\nexport type FileCellType = \"image\" | \"video\" | \"audio\" | \"file\";\n\nexport type FileStorageType = \"internal\" | \"external\";\n\nexport interface AttachmentMetadata {\n [key: string]: string | number | boolean;\n}\n\nfunction detectFileType(contentType: string): FileCellType {\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return \"file\";\n}\n\nfunction getMimeType(filename: string): string {\n return mime.lookup(filename) || \"application/octet-stream\";\n}\n\nexport interface AttachmentOptions {\n filePath?: string;\n data?: Buffer | Uint8Array;\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n}\n\nexport class Attachment {\n readonly type = \"attachment\" as const;\n\n private _filePath?: string;\n private _data?: Buffer | Uint8Array;\n private _filename?: string;\n private _contentType?: string;\n private _fileType?: FileCellType;\n private _metadata?: AttachmentMetadata;\n\n constructor(options: AttachmentOptions) {\n const { filePath, data, filename, contentType, fileType, metadata } =\n options;\n\n if (!filePath && !data) {\n throw new Error(\"Either filePath or data must be provided\");\n }\n if (filePath && data) {\n throw new Error(\"Cannot provide both filePath and data\");\n }\n if (data && !filename) {\n throw new Error(\"filename is required when using data\");\n }\n\n this._filePath = filePath;\n this._data = data;\n this._filename = filename;\n this._contentType = contentType;\n this._fileType = fileType;\n this._metadata = metadata;\n }\n\n async getData(): Promise<Buffer> {\n if (this._data) {\n return Buffer.isBuffer(this._data) ? this._data : Buffer.from(this._data);\n }\n if (this._filePath) {\n return fs.promises.readFile(this._filePath);\n }\n throw new Error(\"No data source available\");\n }\n\n getFileName(): string {\n if (this._filename) {\n return this._filename;\n }\n if (this._filePath) {\n return path.basename(this._filePath);\n }\n throw new Error(\"No filename available\");\n }\n\n getContentType(): string {\n if (this._contentType) {\n return this._contentType;\n }\n return getMimeType(this.getFileName());\n }\n\n get fileType(): FileCellType {\n if (this._fileType) {\n return this._fileType;\n }\n return detectFileType(this.getContentType());\n }\n\n get metadata(): AttachmentMetadata | undefined {\n return this._metadata;\n }\n}\n\nexport interface ExternalAttachmentOptions {\n url: string;\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n}\n\nexport class ExternalAttachment {\n readonly type = \"external\" as const;\n\n private _url: string;\n private _filename?: string;\n private _contentType?: string;\n private _fileType: FileCellType;\n private _metadata?: AttachmentMetadata;\n\n constructor(options: ExternalAttachmentOptions) {\n const { url, filename, contentType, fileType, metadata } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"URL is required and must be a string\");\n }\n\n try {\n new URL(url);\n } catch {\n throw new Error(\"Invalid URL provided\");\n }\n\n this._url = url;\n this._filename = filename;\n this._contentType = contentType;\n this._fileType = fileType || \"file\";\n this._metadata = metadata;\n }\n\n get url(): string {\n return this._url;\n }\n\n get filename(): string | undefined {\n return this._filename;\n }\n\n get contentType(): string | undefined {\n return this._contentType;\n }\n\n get fileType(): FileCellType {\n return this._fileType;\n }\n\n get metadata(): AttachmentMetadata | undefined {\n return this._metadata;\n }\n}\n\nexport class AttachmentReference {\n constructor(\n readonly storageType: FileStorageType,\n readonly storageKey: string,\n readonly url: string | undefined,\n readonly fileType: FileCellType,\n readonly metadata?: AttachmentMetadata,\n ) {}\n\n async download(filePath?: string): Promise<Buffer | void> {\n if (!this.url) {\n throw new Error(\"Cannot download attachment: no URL available\");\n }\n\n const response = await fetch(this.url);\n if (!response.ok) {\n throw new Error(\n `Failed to download attachment: ${response.status} ${response.statusText}`,\n );\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n if (filePath) {\n await fs.promises.writeFile(filePath, buffer);\n return;\n }\n\n return buffer;\n }\n\n getUrl(): string | undefined {\n return this.url;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n storageType: this.storageType,\n storageKey: this.storageKey,\n url: this.url,\n fileType: this.fileType,\n metadata: this.metadata,\n };\n }\n}\n\nexport function isAttachment(value: unknown): value is Attachment {\n return value instanceof Attachment || (value as any)?.type === \"attachment\";\n}\n\nexport function isExternalAttachment(\n value: unknown,\n): value is ExternalAttachment {\n return (\n value instanceof ExternalAttachment || (value as any)?.type === \"external\"\n );\n}\n\nexport function isAttachmentReference(\n value: unknown,\n): value is AttachmentReference {\n return (\n value instanceof AttachmentReference ||\n ((value as any)?.storageType !== undefined &&\n (value as any)?.storageKey !== undefined)\n );\n}\n\nexport function isAnyAttachment(\n value: unknown,\n): value is Attachment | ExternalAttachment {\n return isAttachment(value) || isExternalAttachment(value);\n}\n\nexport const attachment = {\n file: (\n filePath: string,\n options?: {\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): Attachment => {\n return new Attachment({\n filePath,\n ...options,\n });\n },\n\n buffer: (\n data: Buffer | Uint8Array,\n filename: string,\n options?: {\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): Attachment => {\n return new Attachment({\n data,\n filename,\n ...options,\n });\n },\n\n url: (\n url: string,\n options?: {\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): ExternalAttachment => {\n return new ExternalAttachment({\n url,\n ...options,\n });\n },\n};\n","import { TraceloopClient } from \"../traceloop-client\";\nimport {\n Attachment,\n ExternalAttachment,\n AttachmentReference,\n FileCellType,\n AttachmentMetadata,\n} from \"./attachment\";\n\n/**\n * Response from the upload URL endpoint\n */\nexport interface UploadUrlResponse {\n uploadUrl: string;\n storageKey: string;\n expiresAt?: string;\n method?: string;\n}\n\n/**\n * Handles attachment upload and registration operations\n */\nexport class AttachmentUploader {\n constructor(private client: TraceloopClient) {}\n\n /**\n * Requests a presigned upload URL from the API\n */\n async getUploadUrl(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n fileName: string,\n contentType: string,\n fileType: FileCellType,\n metadata?: AttachmentMetadata,\n ): Promise<UploadUrlResponse> {\n const response = await this.client.post(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/upload-url`,\n {\n type: fileType,\n file_name: fileName,\n content_type: contentType,\n metadata: metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to get upload URL: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n return {\n uploadUrl: data.upload_url,\n storageKey: data.storage_key,\n expiresAt: data.expires_at,\n method: data.method || \"PUT\",\n };\n }\n\n /**\n * Uploads file data directly to S3 using the presigned URL\n */\n async uploadToS3(\n uploadUrl: string,\n data: Buffer,\n contentType: string,\n ): Promise<void> {\n const response = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": contentType,\n },\n body: new Uint8Array(data),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to upload to S3: ${response.status} ${response.statusText}`,\n );\n }\n }\n\n /**\n * Confirms the upload status with the API\n */\n async confirmUpload(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n status: \"success\" | \"failed\",\n metadata?: AttachmentMetadata,\n ): Promise<void> {\n const response = await this.client.put(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/upload-status`,\n {\n status,\n metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to confirm upload: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n }\n\n /**\n * Registers an external URL as an attachment\n */\n async registerExternalUrl(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n url: string,\n fileType: FileCellType,\n metadata?: AttachmentMetadata,\n ): Promise<AttachmentReference> {\n const response = await this.client.post(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/external-url`,\n {\n type: fileType,\n url,\n metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to register external URL: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n return new AttachmentReference(\n \"external\",\n data.storage_key || \"\",\n url,\n fileType,\n metadata,\n );\n }\n\n /**\n * Uploads an Attachment through the full flow:\n * 1. Get presigned URL\n * 2. Upload to S3\n * 3. Confirm upload\n */\n async uploadAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachment: Attachment,\n ): Promise<AttachmentReference> {\n const fileName = attachment.getFileName();\n const contentType = attachment.getContentType();\n const fileType = attachment.fileType;\n const data = await attachment.getData();\n\n // Step 1: Get presigned upload URL\n const uploadInfo = await this.getUploadUrl(\n datasetSlug,\n rowId,\n columnSlug,\n fileName,\n contentType,\n fileType,\n attachment.metadata,\n );\n\n // Step 2: Upload to S3\n try {\n await this.uploadToS3(uploadInfo.uploadUrl, data, contentType);\n } catch (error) {\n // Confirm failure and re-throw\n try {\n await this.confirmUpload(\n datasetSlug,\n rowId,\n columnSlug,\n \"failed\",\n attachment.metadata,\n );\n } catch {\n // Ignore confirmation errors\n }\n throw error;\n }\n\n // Step 3: Confirm success\n await this.confirmUpload(\n datasetSlug,\n rowId,\n columnSlug,\n \"success\",\n attachment.metadata,\n );\n\n return new AttachmentReference(\n \"internal\",\n uploadInfo.storageKey,\n undefined,\n fileType,\n attachment.metadata,\n );\n }\n\n /**\n * Processes an ExternalAttachment by registering the URL\n */\n async processExternalAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachment: ExternalAttachment,\n ): Promise<AttachmentReference> {\n return this.registerExternalUrl(\n datasetSlug,\n rowId,\n columnSlug,\n attachment.url,\n attachment.fileType,\n attachment.metadata,\n );\n }\n\n /**\n * Processes any attachment type (Attachment or ExternalAttachment)\n */\n async processAnyAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachmentObj: Attachment | ExternalAttachment,\n ): Promise<AttachmentReference> {\n if (attachmentObj instanceof Attachment) {\n return this.uploadAttachment(\n datasetSlug,\n rowId,\n columnSlug,\n attachmentObj,\n );\n } else {\n return this.processExternalAttachment(\n datasetSlug,\n rowId,\n columnSlug,\n attachmentObj,\n );\n }\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { RowResponse, RowData, RowUpdateOptions } from \"../../interfaces\";\nimport {\n Attachment,\n ExternalAttachment,\n AttachmentReference,\n isAttachmentReference,\n} from \"./attachment\";\nimport { AttachmentUploader } from \"./attachment-uploader\";\n\nexport class Row extends BaseDatasetEntity {\n private _data: RowResponse;\n private _deleted = false;\n\n constructor(client: TraceloopClient, data: RowResponse) {\n super(client);\n this._data = data;\n }\n\n get id(): string {\n return this._data.id;\n }\n\n get datasetId(): string {\n return this._data.datasetId;\n }\n\n get datasetSlug(): string {\n return this._data.datasetSlug;\n }\n\n get data(): RowData {\n return { ...this._data.data };\n }\n\n get createdAt(): string {\n return this._data.createdAt;\n }\n\n get updatedAt(): string {\n return this._data.updatedAt;\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n getValue(\n columnName: string,\n ): string | number | boolean | Date | null | object {\n const value = this._data.data[columnName];\n return value !== undefined ? value : null;\n }\n\n hasColumn(columnName: string): boolean {\n return columnName in this._data.data;\n }\n\n getColumns(): string[] {\n return Object.keys(this._data.data);\n }\n\n async update(options: RowUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted row\");\n }\n\n if (!options.data || typeof options.data !== \"object\") {\n throw new Error(\"Update data must be a valid object\");\n }\n\n const updatedData = { ...this._data.data, ...options.data };\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n {\n Values: updatedData,\n },\n );\n\n const result = await this.handleResponse(response);\n\n if (result && result.id) {\n this._data = result;\n }\n }\n\n async partialUpdate(updates: Partial<RowData>): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted row\");\n }\n\n if (!updates || typeof updates !== \"object\") {\n throw new Error(\"Updates must be a valid object\");\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n {\n Values: updates,\n },\n );\n\n const result = await this.handleResponse(response);\n\n if (result && result.id) {\n this._data = result;\n }\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Row is already deleted\");\n }\n\n const response = await this.client.delete(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n );\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n toJSON(): RowData {\n return { ...this._data.data };\n }\n\n toCSVRow(columns?: string[], delimiter = \",\"): string {\n const columnsToUse = columns || this.getColumns();\n const values = columnsToUse.map((column) => {\n const value = this._data.data[column];\n if (value === null || value === undefined) {\n return \"\";\n }\n\n const stringValue = String(value);\n\n if (\n stringValue.includes(delimiter) ||\n stringValue.includes('\"') ||\n stringValue.includes(\"\\n\")\n ) {\n return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n }\n\n return stringValue;\n });\n\n return values.join(delimiter);\n }\n\n validate(columnValidators?: {\n [columnName: string]: (value: any) => boolean;\n }): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (columnValidators) {\n Object.keys(columnValidators).forEach((columnName) => {\n const validator = columnValidators[columnName];\n const value = this._data.data[columnName];\n\n if (!validator(value)) {\n errors.push(`Invalid value for column '${columnName}': ${value}`);\n }\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n clone(): Row {\n const clonedData: RowResponse = {\n ...this._data,\n data: { ...this._data.data },\n };\n\n return new Row(this.client, clonedData);\n }\n\n /**\n * Gets an attachment reference from a column\n * @param columnName The name of the column containing the attachment\n * @returns AttachmentReference if the column contains an attachment, null otherwise\n */\n getAttachment(columnName: string): AttachmentReference | null {\n const value = this._data.data[columnName];\n\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n // Value is now guaranteed to be an object\n const objValue = value as object;\n\n // Check if value is already an AttachmentReference\n if (objValue instanceof AttachmentReference) {\n return objValue;\n }\n\n // Check if value is a serialized attachment reference\n if (isAttachmentReference(objValue)) {\n const ref = objValue as any;\n return new AttachmentReference(\n ref.storageType,\n ref.storageKey,\n ref.url,\n ref.fileType,\n ref.metadata,\n );\n }\n\n return null;\n }\n\n /**\n * Checks if a column contains an attachment\n * @param columnName The name of the column to check\n */\n hasAttachment(columnName: string): boolean {\n return this.getAttachment(columnName) !== null;\n }\n\n /**\n * Sets/uploads an attachment to a column\n * @param columnSlug The slug of the column to set the attachment in\n * @param attachment The attachment to upload (Attachment or ExternalAttachment)\n * @returns The created AttachmentReference\n *\n * @example\n * // Upload from file\n * await row.setAttachment(\"image\", new Attachment({ filePath: \"./photo.jpg\" }));\n *\n * @example\n * // Set external URL\n * await row.setAttachment(\"document\", new ExternalAttachment({ url: \"https://example.com/doc.pdf\" }));\n */\n async setAttachment(\n columnSlug: string,\n attachment: Attachment | ExternalAttachment,\n ): Promise<AttachmentReference> {\n if (this._deleted) {\n throw new Error(\"Cannot set attachment on a deleted row\");\n }\n\n const uploader = new AttachmentUploader(this.client);\n const reference = await uploader.processAnyAttachment(\n this.datasetSlug,\n this.id,\n columnSlug,\n attachment,\n );\n\n // Update internal data\n this._data.data[columnSlug] = reference.toJSON() as any;\n\n return reference;\n }\n\n /**\n * Downloads an attachment from a column\n * @param columnName The name of the column containing the attachment\n * @param outputPath Optional file path to save the downloaded file\n * @returns Buffer if no outputPath provided, void if saved to file\n *\n * @example\n * // Get as buffer\n * const data = await row.downloadAttachment(\"image\");\n *\n * @example\n * // Save to file\n * await row.downloadAttachment(\"image\", \"./downloaded-image.png\");\n */\n async downloadAttachment(\n columnName: string,\n outputPath?: string,\n ): Promise<Buffer | void> {\n if (this._deleted) {\n throw new Error(\"Cannot download attachment from a deleted row\");\n }\n\n const attachment = this.getAttachment(columnName);\n if (!attachment) {\n throw new Error(`No attachment found in column '${columnName}'`);\n }\n\n return attachment.download(outputPath);\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport {\n ColumnResponse,\n ColumnUpdateOptions,\n DatasetColumnValue,\n} from \"../../interfaces\";\n\nexport class Column extends BaseDatasetEntity {\n private _data: ColumnResponse;\n private _deleted = false;\n\n constructor(client: TraceloopClient, data: ColumnResponse) {\n super(client);\n this._data = data;\n }\n\n get slug(): string {\n return this._data.slug;\n }\n\n get name(): string {\n return this._data.name;\n }\n\n get type(): \"string\" | \"number\" | \"boolean\" | \"date\" | \"file\" {\n return this._data.type;\n }\n\n get required(): boolean {\n return this._data.required || false;\n }\n\n get description(): string | undefined {\n return this._data.description;\n }\n\n get datasetId(): string {\n return this._data.datasetId;\n }\n\n get datasetSlug(): string {\n return this._data.datasetSlug;\n }\n\n get createdAt(): string {\n return this._data.createdAt;\n }\n\n get updatedAt(): string {\n return this._data.updatedAt;\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n async update(options: ColumnUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted column\");\n }\n\n if (options.name && typeof options.name !== \"string\") {\n throw new Error(\"Column name must be a string\");\n }\n\n if (\n options.type &&\n ![\"string\", \"number\", \"boolean\", \"date\", \"file\"].includes(options.type)\n ) {\n throw new Error(\n \"Column type must be one of: string, number, boolean, date, file\",\n );\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/columns/${this.slug}`,\n options,\n );\n const data = await this.handleResponse(response);\n\n // API returns dataset data, extract column info if available\n if (data.columns && data.columns[this.slug]) {\n const columnData = data.columns[this.slug];\n // Update only the fields that changed, preserve datasetSlug and other metadata\n this._data = {\n ...this._data,\n name: columnData.name || this._data.name,\n type: columnData.type || this._data.type,\n description: columnData.description || this._data.description,\n updatedAt: data.updatedAt || this._data.updatedAt,\n };\n }\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Column is already deleted\");\n }\n\n const response = await this.client.delete(\n `/v2/datasets/${this.datasetSlug}/columns/${this.slug}`,\n );\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n validateValue(value: DatasetColumnValue): boolean {\n if (this.required && (value === null || value === undefined)) {\n return false;\n }\n\n if (value === null || value === undefined) {\n return true;\n }\n\n switch (this.type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" && !isNaN(value) && isFinite(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n default:\n return false;\n }\n }\n\n convertValue(value: unknown): DatasetColumnValue {\n if (value === null || value === undefined) {\n return null;\n }\n\n switch (this.type) {\n case \"string\":\n return String(value);\n case \"number\": {\n const numValue = Number(value);\n return isNaN(numValue) ? null : numValue;\n }\n case \"boolean\":\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"true\" || lower === \"1\") return true;\n if (lower === \"false\" || lower === \"0\") return false;\n }\n return Boolean(value);\n default:\n return value as DatasetColumnValue;\n }\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { Row } from \"./row\";\nimport { Column } from \"./column\";\nimport * as Papa from \"papaparse\";\nimport { Attachment, ExternalAttachment, isAnyAttachment } from \"./attachment\";\nimport { AttachmentUploader } from \"./attachment-uploader\";\nimport {\n DatasetResponse,\n DatasetUpdateOptions,\n ColumnDefinition,\n RowData,\n DatasetPublishOptions,\n CSVImportOptions,\n ColumnResponse,\n RowResponse,\n DatasetVersionsResponse,\n DatasetVersion,\n} from \"../../interfaces\";\n\nexport class Dataset extends BaseDatasetEntity {\n private _data: DatasetResponse;\n private _deleted = false;\n private _attachmentUploader: AttachmentUploader;\n\n constructor(client: TraceloopClient, data: DatasetResponse) {\n super(client);\n this._data = data;\n this._attachmentUploader = new AttachmentUploader(client);\n }\n\n get id(): string {\n return this._data.id;\n }\n\n get slug(): string {\n return this._data.slug;\n }\n\n get name(): string {\n return this._data.name;\n }\n\n get description(): string | undefined {\n return this._data.description;\n }\n\n get version(): string | undefined {\n return this._data.version;\n }\n\n get published(): boolean {\n return this._data.published || false;\n }\n\n get createdAt(): string {\n return this._data.createdAt || \"\";\n }\n\n get updatedAt(): string {\n return this._data.updatedAt || \"\";\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n async update(options: DatasetUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted dataset\");\n }\n\n if (options.name) {\n this.validateDatasetName(options.name);\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.slug}`,\n options,\n );\n await this.handleResponse(response);\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Dataset is already deleted\");\n }\n\n const response = await this.client.delete(`/v2/datasets/${this.slug}`);\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n async publish(options: DatasetPublishOptions = {}): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot publish a deleted dataset\");\n }\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/publish`,\n options,\n );\n const data = await this.handleResponse(response);\n this._data = data;\n }\n\n async addColumn(columns: ColumnDefinition[]): Promise<Column[]> {\n if (this._deleted) {\n throw new Error(\"Cannot add columns to a deleted dataset\");\n }\n\n if (!Array.isArray(columns) || columns.length === 0) {\n throw new Error(\"Columns must be a non-empty array\");\n }\n\n const results: Column[] = [];\n\n for (const column of columns) {\n if (!column.name || typeof column.name !== \"string\") {\n throw new Error(\"Column name is required and must be a string\");\n }\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/columns`,\n column,\n );\n const data = await this.handleResponse(response);\n\n if (!data || !data.slug) {\n throw new Error(\"Failed to create column: Invalid API response\");\n }\n\n const columnResponse: ColumnResponse = {\n slug: data.slug,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n name: data.name,\n type: data.type,\n required: data.required,\n description: data.description,\n createdAt: data.createdAt,\n updatedAt: data.updatedAt,\n };\n\n results.push(new Column(this.client, columnResponse));\n }\n\n return results;\n }\n\n async getColumns(): Promise<Column[]> {\n if (this._deleted) {\n throw new Error(\"Cannot get columns from a deleted dataset\");\n }\n\n if (!this._data.columns) {\n return [];\n }\n\n const columns: Column[] = [];\n for (const [columnSlug, columnData] of Object.entries(this._data.columns)) {\n const col = columnData as any;\n const columnResponse: ColumnResponse = {\n slug: columnSlug,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n name: col.name,\n type: col.type,\n required: col.required === true,\n description: col.description,\n createdAt: this._data.createdAt || this.createdAt,\n updatedAt: this._data.updatedAt || this.updatedAt,\n };\n columns.push(new Column(this.client, columnResponse));\n }\n\n return columns;\n }\n\n async addRow(rowData: RowData): Promise<Row> {\n if (this._deleted) {\n throw new Error(\"Cannot add row to a deleted dataset\");\n }\n\n if (!rowData || typeof rowData !== \"object\") {\n throw new Error(\"Row data must be a valid object\");\n }\n\n const rows = await this.addRows([rowData]);\n if (rows.length === 0) {\n throw new Error(\"Failed to add row\");\n }\n return rows[0];\n }\n\n async addRows(rows: RowData[]): Promise<Row[]> {\n if (this._deleted) {\n throw new Error(\"Cannot add rows to a deleted dataset\");\n }\n\n if (!Array.isArray(rows)) {\n throw new Error(\"Rows must be an array\");\n }\n\n const columns = await this.getColumns();\n const columnMap = new Map<string, string>();\n\n columns.forEach((col) => {\n columnMap.set(col.name, col.slug);\n });\n\n // Phase 1: Extract attachments and prepare clean rows\n const { cleanRows, attachmentMap } = this.extractAttachments(\n rows,\n columnMap,\n );\n\n // Phase 2: Create rows with regular data (attachments replaced with null)\n const transformedRows = cleanRows.map((row) => {\n const transformedRow: { [key: string]: any } = {};\n Object.keys(row).forEach((columnName) => {\n const columnSlug = columnMap.get(columnName);\n if (columnSlug) {\n transformedRow[columnSlug] = row[columnName];\n }\n });\n return transformedRow;\n });\n\n const payload = {\n Rows: transformedRows,\n };\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/rows`,\n payload,\n );\n const result = await this.handleResponse(response);\n\n const createdRows: Row[] = [];\n if (result.rows) {\n for (const row of result.rows) {\n const rowResponse: RowResponse = {\n id: row.id,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n data: this.transformValuesBackToNames(row.values, columnMap),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n createdRows.push(new Row(this.client, rowResponse));\n }\n }\n\n // Phase 3: Process attachments for created rows\n if (attachmentMap.size > 0) {\n await this.processAttachments(createdRows, attachmentMap, columnMap);\n }\n\n return createdRows;\n }\n\n /**\n * Extracts attachments from rows and returns clean rows with null values\n */\n private extractAttachments(\n rows: RowData[],\n columnMap: Map<string, string>,\n ): {\n cleanRows: RowData[];\n attachmentMap: Map<number, Map<string, Attachment | ExternalAttachment>>;\n } {\n const attachmentMap = new Map<\n number,\n Map<string, Attachment | ExternalAttachment>\n >();\n const cleanRows: RowData[] = [];\n\n rows.forEach((row, rowIndex) => {\n const cleanRow: RowData = {};\n const rowAttachments = new Map<string, Attachment | ExternalAttachment>();\n\n Object.keys(row).forEach((columnName) => {\n const value = row[columnName];\n const columnSlug = columnMap.get(columnName);\n\n if (isAnyAttachment(value) && columnSlug) {\n // Store attachment for later processing\n rowAttachments.set(columnSlug, value);\n // Replace with null in the clean row\n cleanRow[columnName] = null;\n } else {\n cleanRow[columnName] = value;\n }\n });\n\n cleanRows.push(cleanRow);\n\n if (rowAttachments.size > 0) {\n attachmentMap.set(rowIndex, rowAttachments);\n }\n });\n\n return { cleanRows, attachmentMap };\n }\n\n /**\n * Processes attachments for created rows\n */\n private async processAttachments(\n rows: Row[],\n attachmentMap: Map<number, Map<string, Attachment | ExternalAttachment>>,\n columnMap: Map<string, string>,\n ): Promise<void> {\n // Create reverse map for slug to name lookup\n const reverseColumnMap = new Map<string, string>();\n columnMap.forEach((slug, name) => {\n reverseColumnMap.set(slug, name);\n });\n\n for (const [rowIndex, rowAttachments] of attachmentMap) {\n const row = rows[rowIndex];\n if (!row) continue;\n\n for (const [columnSlug, attachment] of rowAttachments) {\n try {\n const reference = await this._attachmentUploader.processAnyAttachment(\n this.slug,\n row.id,\n columnSlug,\n attachment,\n );\n\n // Update the row's internal data with the attachment reference\n const columnName = reverseColumnMap.get(columnSlug);\n if (columnName) {\n (row as any)._data.data[columnName] = reference.toJSON();\n }\n } catch (error) {\n // Log warning but don't fail the entire operation\n console.warn(\n `Failed to process attachment for row ${row.id}, column ${columnSlug}:`,\n error,\n );\n }\n }\n }\n }\n\n private transformValuesBackToNames(\n values: { [columnSlug: string]: any },\n columnMap: Map<string, string>,\n ): RowData {\n const result: RowData = {};\n\n const reverseMap = new Map<string, string>();\n columnMap.forEach((slug, name) => {\n reverseMap.set(slug, name);\n });\n\n Object.keys(values).forEach((columnSlug) => {\n const columnName = reverseMap.get(columnSlug);\n if (columnName) {\n result[columnName] = values[columnSlug];\n }\n });\n\n return result;\n }\n\n async getRows(limit = 100, offset = 0): Promise<Row[]> {\n if (this._deleted) {\n throw new Error(\"Cannot get rows from a deleted dataset\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${this.slug}/rows?limit=${limit}&offset=${offset}`,\n );\n const data = await this.handleResponse(response);\n\n const rows = data.rows || [];\n return rows.map((row: any) => {\n const rowResponse: RowResponse = {\n id: row.id,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n data: row.values || row.data || {},\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n return new Row(this.client, rowResponse);\n });\n }\n\n async fromCSV(\n csvContent: string,\n options: CSVImportOptions = {},\n ): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot import CSV to a deleted dataset\");\n }\n\n const { hasHeader = true, delimiter = \",\" } = options;\n\n if (!csvContent || typeof csvContent !== \"string\") {\n throw new Error(\"CSV content must be a valid string\");\n }\n\n const rows = this.parseCSV(csvContent, delimiter, hasHeader);\n\n if (rows.length === 0) {\n throw new Error(\"No data found in CSV\");\n }\n\n const batchSize = 100;\n for (let i = 0; i < rows.length; i += batchSize) {\n const batch = rows.slice(i, i + batchSize);\n await this.addRows(batch);\n }\n }\n\n async getVersions(): Promise<DatasetVersionsResponse> {\n if (this._deleted) {\n throw new Error(\"Cannot get versions of a deleted dataset\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${this.slug}/versions`,\n );\n return await this.handleResponse(response);\n }\n\n async getVersion(version: string): Promise<DatasetVersion | null> {\n if (this._deleted) {\n throw new Error(\"Cannot get version of a deleted dataset\");\n }\n\n const versionsData = await this.getVersions();\n return versionsData.versions.find((v) => v.version === version) || null;\n }\n\n private parseCSV(\n csvContent: string,\n delimiter: string,\n hasHeader: boolean,\n ): RowData[] {\n const parseResult = Papa.parse(csvContent, {\n delimiter,\n header: hasHeader,\n skipEmptyLines: true,\n transformHeader: (header: string) => header.trim(),\n transform: (value: string) => this.parseValue(value.trim()),\n });\n\n if (parseResult.errors.length > 0) {\n throw new Error(`CSV parsing failed: ${parseResult.errors[0].message}`);\n }\n\n return parseResult.data as RowData[];\n }\n\n private parseValue(value: string): string | number | boolean | null {\n if (value === \"\" || value.toLowerCase() === \"null\") {\n return null;\n }\n\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!isNaN(numValue) && isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { Dataset } from \"./dataset\";\nimport {\n DatasetCreateOptions,\n DatasetResponse,\n DatasetListResponse,\n} from \"../../interfaces\";\n\nexport class Datasets extends BaseDatasetEntity {\n constructor(client: TraceloopClient) {\n super(client);\n }\n\n async create(options: DatasetCreateOptions): Promise<Dataset> {\n this.validateDatasetName(options.name);\n\n const response = await this.client.post(\"/v2/datasets\", options);\n const data: DatasetResponse = await this.handleResponse(response);\n\n return new Dataset(this.client, data);\n }\n\n async get(slug: string): Promise<Dataset> {\n this.validateDatasetSlug(slug);\n\n const response = await this.client.get(`/v2/datasets/${slug}`);\n const data: DatasetResponse = await this.handleResponse(response);\n\n return new Dataset(this.client, data);\n }\n\n async list(): Promise<DatasetListResponse> {\n const response = await this.client.get(`/v2/datasets`);\n const data: DatasetListResponse = await this.handleResponse(response);\n\n if (!data || !data.datasets) {\n return {\n datasets: [],\n total: 0,\n };\n }\n\n const datasets = data.datasets.map(\n (datasetData) => new Dataset(this.client, datasetData),\n );\n\n return {\n ...data,\n datasets,\n };\n }\n\n async delete(slug: string): Promise<void> {\n this.validateDatasetSlug(slug);\n\n const response = await this.client.delete(`/v2/datasets/${slug}`);\n await this.handleResponse(response);\n }\n\n async getVersionCSV(slug: string, version: string): Promise<string> {\n this.validateDatasetSlug(slug);\n\n if (!version || typeof version !== \"string\") {\n throw new Error(\"Version must be a non-empty string\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${slug}/versions/${version}`,\n );\n const csvData = await this.handleResponse(response);\n\n if (typeof csvData !== \"string\") {\n throw new Error(\"Expected CSV data as string from API\");\n }\n\n return csvData;\n }\n\n async getVersionAsJsonl(slug: string, version: string): Promise<string> {\n if (!version || version === \"\") {\n throw new Error(\"Version is required\");\n }\n\n const url = `/v2/datasets/${slug}/versions/${version}/jsonl`;\n\n const response = await this.client.get(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch JSONL data: ${response.status} ${response.statusText}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n // If server returns JSON, handle it appropriately\n const jsonData = await response.json();\n if (jsonData.error) {\n throw new Error(jsonData.error);\n }\n // Convert JSON response to JSONL format if needed\n if (Array.isArray(jsonData)) {\n return jsonData.map((item) => JSON.stringify(item)).join(\"\\n\");\n }\n return JSON.stringify(jsonData);\n }\n\n // Expect JSONL format (text/plain or application/jsonl)\n return await response.text();\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"../dataset/base-dataset\";\nimport type {\n EvaluatorRunOptions,\n TriggerEvaluatorRequest,\n TriggerEvaluatorResponse,\n InputSchemaMapping,\n} from \"../../interfaces/evaluator.interface\";\nimport type { ExecutionResponse } from \"../../interfaces/experiment.interface\";\n\nexport class Evaluator extends BaseDatasetEntity {\n constructor(client: TraceloopClient) {\n super(client);\n }\n\n /**\n * Run evaluators on experiment task results and wait for completion\n */\n async runExperimentEvaluator(\n options: EvaluatorRunOptions,\n ): Promise<ExecutionResponse[]> {\n const {\n experimentId,\n experimentRunId,\n taskId,\n taskResult,\n evaluator,\n waitForResults = true,\n } = options;\n\n this.validateEvaluatorOptions(options);\n\n const triggerResponse = await this.triggerExperimentEvaluator({\n experimentId,\n experimentRunId,\n taskId,\n evaluator,\n taskResult,\n });\n\n if (!waitForResults) {\n return [\n {\n executionId: triggerResponse.executionId,\n result: { status: \"running\", startedAt: new Date().toISOString() },\n },\n ];\n }\n\n return this.waitForResult(\n triggerResponse.executionId,\n triggerResponse.streamUrl,\n );\n }\n\n /**\n * Trigger evaluator execution without waiting for results\n */\n async triggerExperimentEvaluator(\n request: TriggerEvaluatorRequest,\n ): Promise<TriggerEvaluatorResponse> {\n const { experimentId, experimentRunId, taskId, evaluator, taskResult } =\n request;\n\n if (!experimentId || !taskResult) {\n throw new Error(\"experimentId, evaluator, and taskResult are required\");\n }\n\n // Handle string, EvaluatorWithVersion, and EvaluatorWithConfig types\n const evaluatorName =\n typeof evaluator === \"string\" ? evaluator : evaluator.name;\n const evaluatorVersion =\n typeof evaluator === \"string\" ? undefined : evaluator.version;\n // Extract config if present (EvaluatorWithConfig type)\n const evaluatorConfig =\n typeof evaluator === \"object\" && \"config\" in evaluator\n ? evaluator.config\n : undefined;\n\n if (!evaluatorName) {\n throw new Error(\"evaluator name is required\");\n }\n\n const inputSchemaMapping = this.createInputSchemaMapping(taskResult);\n\n const payload: Record<string, unknown> = {\n experiment_id: experimentId,\n experiment_run_id: experimentRunId,\n evaluator_version: evaluatorVersion,\n task_id: taskId,\n input_schema_mapping: inputSchemaMapping,\n };\n\n // Add evaluator config if present\n if (evaluatorConfig && Object.keys(evaluatorConfig).length > 0) {\n payload.evaluator_config = evaluatorConfig;\n }\n\n const response = await this.client.post(\n `/v2/evaluators/slug/${evaluatorName}/execute`,\n payload,\n );\n const data = await this.handleResponse(response);\n\n return {\n executionId: data.executionId,\n streamUrl: data.streamUrl,\n };\n }\n\n /**\n * Wait for execution result via stream URL (actually JSON endpoint)\n */\n async waitForResult(\n executionId: string,\n streamUrl: string,\n ): Promise<ExecutionResponse[]> {\n if (!executionId || !streamUrl) {\n throw new Error(\"Execution ID and stream URL are required\");\n }\n\n const fullStreamUrl = `${this.client[\"baseUrl\"]}/v2${streamUrl}`;\n\n try {\n const response = await fetch(fullStreamUrl, {\n headers: {\n Authorization: `Bearer ${this.client[\"apiKey\"]}`,\n Accept: \"application/json\",\n \"Cache-Control\": \"no-cache\",\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get results: ${response.status}, body: ${errorText}`,\n );\n }\n\n const responseText = await response.text();\n const responseData = JSON.parse(responseText);\n\n // Check execution ID match\n if (\n responseData.execution_id &&\n responseData.execution_id !== executionId\n ) {\n throw new Error(\n `Execution ID mismatch: ${responseData.execution_id} !== ${executionId}`,\n );\n }\n\n // Convert to ExecutionResponse format\n const executionResponse: ExecutionResponse = {\n executionId: responseData.execution_id,\n result: responseData.result,\n };\n\n return [executionResponse];\n } catch (error) {\n throw new Error(\n `Failed to wait for result: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Validate evaluator run options\n */\n private validateEvaluatorOptions(options: EvaluatorRunOptions): void {\n const { experimentId, evaluator, taskResult } = options;\n\n if (\n !experimentId ||\n typeof experimentId !== \"string\" ||\n experimentId.trim().length === 0\n ) {\n throw new Error(\n \"Experiment ID is required and must be a non-empty string\",\n );\n }\n\n if (!evaluator) {\n throw new Error(\"At least one evaluator must be specified\");\n }\n\n if (!taskResult) {\n throw new Error(\"At least one task result must be provided\");\n }\n\n // Validate evaluator based on its type\n if (typeof evaluator === \"string\") {\n if (!evaluator.trim()) {\n throw new Error(\"Evaluator name cannot be empty\");\n }\n } else {\n if (\n !evaluator.name ||\n typeof evaluator.name !== \"string\" ||\n !evaluator.name.trim()\n ) {\n throw new Error(\"Evaluator must have a valid name\");\n }\n }\n\n // Validate each task result\n if (!taskResult || typeof taskResult !== \"object\") {\n throw new Error(`Task result must be a valid object`);\n }\n }\n\n /**\n * Create InputSchemaMapping from input object\n */\n private createInputSchemaMapping(\n input: Record<string, any>,\n ): InputSchemaMapping {\n const mapping: InputSchemaMapping = {};\n\n for (const [key, value] of Object.entries(input)) {\n mapping[key] = { source: String(value) };\n }\n\n return mapping;\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { Evaluator } from \"../evaluator/evaluator\";\nimport { Datasets } from \"../dataset/datasets\";\nimport { transformApiResponse } from \"../../utils/response-transformer\";\nimport type {\n ExperimentTaskFunction,\n ExperimentRunOptions,\n ExperimentRunResult,\n TaskResponse,\n InitExperimentRequest,\n ExperimentInitResponse,\n ExecutionResponse,\n CreateTaskRequest,\n CreateTaskResponse,\n GithubContext,\n TaskResult,\n RunInGithubOptions,\n RunInGithubResponse,\n} from \"../../interfaces/experiment.interface\";\n\nexport class Experiment {\n private client: TraceloopClient;\n private evaluator: Evaluator;\n private datasets: Datasets;\n private _lastExperimentSlug?: string;\n private _lastRunId?: string;\n\n constructor(client: TraceloopClient) {\n this.client = client;\n this.evaluator = new Evaluator(client);\n this.datasets = new Datasets(client);\n }\n\n /**\n * Generate a unique experiment slug\n */\n private generateExperimentSlug(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 7);\n return `exp-${timestamp}${random}`.substring(0, 15);\n }\n\n private async handleResponse(response: Response) {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default HTTP error message if JSON parsing fails\n }\n\n throw new Error(errorMessage);\n }\n\n const contentType = (\n response.headers.get(\"content-type\") || \"\"\n ).toLowerCase();\n if (\n contentType.includes(\"text/csv\") ||\n contentType.includes(\"application/x-ndjson\")\n ) {\n return await response.text();\n } else {\n const rawData = await response.json();\n return transformApiResponse(rawData);\n }\n }\n\n /**\n * Run an experiment with the given task function and options\n */\n async run<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions | RunInGithubOptions = {},\n ): Promise<ExperimentRunResult | RunInGithubResponse> {\n // Check if running in GitHub Actions\n if (process.env.GITHUB_ACTIONS === \"true\") {\n return await this.runInGithub(task, options as RunInGithubOptions);\n }\n\n return await this.runLocally(task, options);\n }\n\n /**\n * Run an experiment locally (not in GitHub Actions)\n */\n private async runLocally<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions = {},\n ): Promise<ExperimentRunResult> {\n const {\n datasetSlug,\n datasetVersion,\n evaluators = [],\n waitForResults = true,\n } = options;\n\n // When experimentSlug is not provided a random one is generated\n let { experimentSlug } = options;\n if (!experimentSlug) {\n experimentSlug =\n this.client.experimentSlug || this.generateExperimentSlug();\n }\n\n this.validateRunOptions(task, options);\n\n try {\n const evaluatorSlugs = evaluators.map((evaluator) =>\n typeof evaluator === \"string\" ? evaluator : evaluator.name,\n );\n const experimentResponse = await this.initializeExperiment({\n slug: experimentSlug,\n datasetSlug,\n datasetVersion,\n evaluatorSlugs,\n });\n\n const rows = await this.getDatasetRows(datasetSlug, datasetVersion);\n\n const taskResults: TaskResponse[] = [];\n const taskErrors: string[] = [];\n const evaluationResults: ExecutionResponse[] = [];\n\n for (const row of rows) {\n const taskOutput = await task(row as TInput);\n\n // Create TaskResponse object\n const taskResponse: TaskResponse = {\n input: row,\n output: taskOutput as Record<string, any>,\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n timestamp: Date.now(),\n };\n\n taskResults.push(taskResponse);\n\n const response = await this.createTask(\n experimentSlug,\n experimentResponse.run.id,\n row,\n taskOutput as Record<string, any>,\n );\n const taskId = response.id;\n\n if (evaluators.length > 0) {\n for (const evaluator of evaluators) {\n const singleEvaluationResult =\n await this.evaluator.runExperimentEvaluator({\n experimentId: experimentResponse.experiment.id,\n experimentRunId: experimentResponse.run.id,\n taskId,\n evaluator,\n taskResult: taskOutput as Record<string, any>,\n waitForResults,\n timeout: 120000, // 2 minutes default\n });\n evaluationResults.push(...singleEvaluationResult);\n }\n }\n }\n\n const evalResults = evaluationResults.map(\n (evaluation) => evaluation.result,\n );\n\n // Track last experiment slug and run ID for export methods\n this._lastExperimentSlug = experimentSlug;\n this._lastRunId = experimentResponse.run.id;\n\n return {\n taskResults: taskResults,\n errors: taskErrors,\n experimentId: experimentResponse.experiment.id,\n runId: experimentResponse.run.id,\n evaluations: evalResults,\n };\n } catch (error) {\n throw new Error(\n `Experiment execution failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Create a task for the experiment\n */\n async createTask(\n experimentSlug: string,\n experimentRunId: string,\n taskInput: Record<string, any>,\n taskOutput: Record<string, any>,\n ): Promise<CreateTaskResponse> {\n const body: CreateTaskRequest = {\n input: taskInput,\n output: taskOutput,\n };\n\n const response = await this.client.post(\n `/v2/experiments/${experimentSlug}/runs/${experimentRunId}/task`,\n body,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to create task for experiment '${experimentSlug}'`,\n );\n }\n\n const data = await this.handleResponse(response);\n return {\n id: data.id,\n };\n }\n\n /**\n * Initialize a new experiment\n */\n async initializeExperiment(\n request: InitExperimentRequest,\n ): Promise<ExperimentInitResponse> {\n if (request.aux) {\n request.experimentRunMetadata = {\n ...request.experimentRunMetadata,\n aux: request.aux,\n };\n }\n\n if (request.relatedRef) {\n request.experimentRunMetadata = {\n ...request.experimentRunMetadata,\n related_ref: request.relatedRef,\n };\n }\n\n const payload = {\n slug: request.slug,\n dataset_slug: request.datasetSlug,\n dataset_version: request.datasetVersion,\n evaluator_slugs: request.evaluatorSlugs,\n experiment_metadata: request.experimentMetadata,\n experiment_run_metadata: request.experimentRunMetadata,\n };\n\n const response = await this.client.put(\n \"/v2/experiments/initialize\",\n payload,\n );\n const data = await this.handleResponse(response);\n\n return data;\n }\n\n /**\n * Parse JSONL string into list of {col_name: col_value} dictionaries\n * Skips the first line (columns definition)\n */\n private parseJsonlToRows(jsonlData: string): Record<string, any>[] {\n const rows: Record<string, any>[] = [];\n const lines = jsonlData.trim().split(\"\\n\");\n\n // Skip the first line (columns definition)\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (line) {\n try {\n const rowData = JSON.parse(line);\n rows.push(rowData);\n } catch {\n // Skip invalid JSON lines\n continue;\n }\n }\n }\n\n return rows;\n }\n\n /**\n * Get dataset rows for experiment execution\n */\n private async getDatasetRows(\n datasetSlug?: string,\n datasetVersion?: string,\n ): Promise<Record<string, any>[]> {\n if (!datasetSlug) {\n throw new Error(\"Dataset slug is required for experiment execution\");\n }\n\n const dataset = await this.datasets.getVersionAsJsonl(\n datasetSlug,\n datasetVersion || \"\",\n );\n const rows = this.parseJsonlToRows(dataset);\n return rows;\n }\n\n /**\n * Validate experiment run options\n */\n private validateRunOptions<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions,\n ): void {\n if (!task || typeof task !== \"function\") {\n throw new Error(\"Task function is required and must be a function\");\n }\n\n if (options.evaluators) {\n options.evaluators.forEach((evaluator, index) => {\n if (typeof evaluator === \"string\") {\n if (!evaluator.trim()) {\n throw new Error(\n `Evaluator at index ${index} cannot be an empty string`,\n );\n }\n } else {\n if (!evaluator || typeof evaluator !== \"object\") {\n throw new Error(\n `Evaluator at index ${index} must be a string or object with name and version`,\n );\n }\n if (\n !evaluator.name ||\n typeof evaluator.name !== \"string\" ||\n !evaluator.name.trim()\n ) {\n throw new Error(\n `Evaluator at index ${index} must have a valid non-empty name`,\n );\n }\n }\n });\n }\n }\n\n /**\n * Extract GitHub Actions context from environment variables\n */\n private getGithubContext(): GithubContext {\n const repository = process.env.GITHUB_REPOSITORY;\n const ref = process.env.GITHUB_REF;\n const sha = process.env.GITHUB_SHA;\n const actor = process.env.GITHUB_ACTOR;\n\n if (!repository || !ref || !sha || !actor) {\n throw new Error(\n \"Missing required GitHub environment variables: GITHUB_REPOSITORY, GITHUB_REF, GITHUB_SHA, or GITHUB_ACTOR\",\n );\n }\n\n // Extract PR number from ref (e.g., refs/pull/123/merge -> 123)\n const prMatch = ref.match(/refs\\/pull\\/(\\d+)\\//);\n const prNumber = prMatch ? prMatch[1] : null;\n\n if (!prNumber) {\n throw new Error(\n `This method can only be run on pull request events. Current ref: ${ref}`,\n );\n }\n\n const prUrl = `https://github.com/${repository}/pull/${prNumber}`;\n\n return {\n repository,\n prUrl,\n commitHash: sha,\n actor,\n };\n }\n\n /**\n * Execute tasks locally and capture results\n */\n private async executeTasksLocally<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n rows: Record<string, any>[],\n ): Promise<TaskResult[]> {\n return await Promise.all(\n rows.map(async (row) => {\n try {\n const output = await task(row as TInput);\n return {\n input: row,\n output: output as Record<string, any>,\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n };\n } catch (error) {\n return {\n input: row,\n error: error instanceof Error ? error.message : String(error),\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n };\n }\n }),\n );\n }\n\n /**\n * Run an experiment in GitHub Actions environment\n * This method executes tasks locally and submits results to the backend for evaluation\n */\n async runInGithub<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: RunInGithubOptions,\n ): Promise<RunInGithubResponse> {\n const {\n datasetSlug,\n datasetVersion,\n evaluators = [],\n experimentMetadata,\n experimentRunMetadata,\n relatedRef,\n aux,\n } = options;\n\n // Generate or use provided experiment slug\n let { experimentSlug } = options;\n if (!experimentSlug) {\n experimentSlug =\n this.client.experimentSlug || this.generateExperimentSlug();\n }\n\n if (!task || typeof task !== \"function\") {\n throw new Error(\"Task function is required and must be a function\");\n }\n\n try {\n const githubContext = this.getGithubContext();\n\n const rows = await this.getDatasetRows(datasetSlug, datasetVersion);\n\n const taskResults = await this.executeTasksLocally(task, rows);\n\n // Prepare evaluator slugs\n const evaluatorSlugs = evaluators.map((evaluator) =>\n typeof evaluator === \"string\" ? evaluator : evaluator.name,\n );\n\n const mergedExperimentMetadata = {\n ...(experimentMetadata || {}),\n created_from: \"github\",\n };\n\n const mergedExperimentRunMetadata = {\n ...(experimentRunMetadata || {}),\n ...(relatedRef && { related_ref: relatedRef }),\n ...(aux && { aux: aux }),\n };\n\n // Submit to backend\n const payload = {\n experiment_slug: experimentSlug,\n dataset_slug: datasetSlug,\n dataset_version: datasetVersion,\n evaluator_slugs: evaluatorSlugs,\n task_results: taskResults,\n github_context: {\n repository: githubContext.repository,\n pr_url: githubContext.prUrl,\n commit_hash: githubContext.commitHash,\n actor: githubContext.actor,\n },\n experiment_metadata: mergedExperimentMetadata,\n experiment_run_metadata: mergedExperimentRunMetadata,\n };\n\n const response = await this.client.post(\n \"/v2/experiments/run-in-github\",\n payload,\n );\n const data = await this.handleResponse(response);\n\n // Track last experiment slug and run ID for export methods\n this._lastExperimentSlug = data.experimentSlug;\n this._lastRunId = data.runId;\n\n return data;\n } catch (error) {\n throw new Error(\n `GitHub experiment execution failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Resolve export parameters by falling back to last used values\n */\n private resolveExportParams(\n experimentSlug?: string,\n runId?: string,\n ): { slug: string; runId: string } {\n const slug = experimentSlug || this._lastExperimentSlug;\n const rid = runId || this._lastRunId;\n\n if (!slug) {\n throw new Error(\"experiment_slug is required\");\n }\n if (!rid) {\n throw new Error(\"run_id is required\");\n }\n\n return { slug, runId: rid };\n }\n\n /**\n * Export experiment results as CSV string\n * @param experimentSlug - Optional experiment slug (uses last run if not provided)\n * @param runId - Optional run ID (uses last run if not provided)\n * @returns CSV string of experiment results\n */\n async toCsvString(experimentSlug?: string, runId?: string): Promise<string> {\n const { slug, runId: rid } = this.resolveExportParams(\n experimentSlug,\n runId,\n );\n\n const response = await this.client.get(\n `/v2/experiments/${slug}/runs/${rid}/export/csv`,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to export CSV for experiment '${slug}' run '${rid}'`,\n );\n }\n\n const result = await this.handleResponse(response);\n\n if (result === null || result === undefined) {\n throw new Error(\n `Failed to export CSV for experiment '${slug}' run '${rid}'`,\n );\n }\n\n return String(result);\n }\n\n /**\n * Export experiment results as JSON string\n * @param experimentSlug - Optional experiment slug (uses last run if not provided)\n * @param runId - Optional run ID (uses last run if not provided)\n * @returns JSON string of experiment results\n */\n async toJsonString(experimentSlug?: string, runId?: string): Promise<string> {\n const { slug, runId: rid } = this.resolveExportParams(\n experimentSlug,\n runId,\n );\n\n const response = await this.client.get(\n `/v2/experiments/${slug}/runs/${rid}/export/json`,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to export JSON for experiment '${slug}' run '${rid}'`,\n );\n }\n\n const result = await this.handleResponse(response);\n\n if (result === null || result === undefined) {\n throw new Error(\n `Failed to export JSON for experiment '${slug}' run '${rid}'`,\n );\n }\n\n // If result is already a string, return it; otherwise stringify it\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n}\n","import { TraceloopClientOptions } from \"../interfaces\";\nimport { version } from \"../../../package.json\";\nimport { UserFeedback } from \"./annotation/user-feedback\";\nimport { Datasets } from \"./dataset/datasets\";\nimport { Experiment } from \"./experiment/experiment\";\nimport { Evaluator } from \"./evaluator/evaluator\";\n\n/**\n * The main client for interacting with Traceloop's API.\n * This client can be used either directly or through the singleton pattern via configuration.\n *\n * @example\n * // Direct usage\n * const client = new TraceloopClient('your-api-key');\n *\n * @example\n * // Through configuration (recommended)\n * initialize({ apiKey: 'your-api-key', appName: 'your-app' });\n * const client = getClient();\n */\nexport class TraceloopClient {\n private version: string = version;\n public appName: string;\n private baseUrl: string;\n private apiKey: string;\n public experimentSlug?: string;\n\n public userFeedback: UserFeedback;\n public datasets: Datasets;\n public experiment: Experiment;\n public evaluator: Evaluator;\n\n /**\n * Creates a new instance of the TraceloopClient.\n *\n * @param options - Configuration options for the client\n */\n constructor(options: TraceloopClientOptions) {\n this.apiKey = options.apiKey;\n this.appName = options.appName;\n this.baseUrl =\n options.baseUrl ||\n process.env.ANYWAY_BASE_URL ||\n \"https://api.traceloop.com\";\n this.experimentSlug = options.experimentSlug;\n\n this.userFeedback = new UserFeedback(this);\n this.datasets = new Datasets(this);\n this.experiment = new Experiment(this);\n this.evaluator = new Evaluator(this);\n }\n\n async post(path: string, body: Record<string, unknown> | any) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n body: JSON.stringify(body),\n });\n }\n\n async get(path: string) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n });\n }\n\n async put(path: string, body: Record<string, unknown> | any) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n body: JSON.stringify(body),\n });\n }\n\n async delete(path: string) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n });\n }\n}\n","// Auto-generated - DO NOT EDIT\n// Regenerate with: pnpm generate:evaluator-models\n\nexport interface EvaluatorSchema {\n slug: string;\n requiredInputFields: string[];\n optionalConfigFields: string[];\n description?: string;\n}\n\nexport type EvaluatorSlug = 'agent-efficiency' | 'agent-flow-quality' | 'agent-goal-accuracy' | 'agent-goal-completeness' | 'agent-tool-error-detector' | 'agent-tool-trajectory' | 'answer-completeness' | 'answer-correctness' | 'answer-relevancy' | 'char-count' | 'char-count-ratio' | 'context-relevance' | 'conversation-quality' | 'faithfulness' | 'html-comparison' | 'instruction-adherence' | 'intent-change' | 'json-validator' | 'perplexity' | 'pii-detector' | 'placeholder-regex' | 'profanity-detector' | 'prompt-injection' | 'prompt-perplexity' | 'regex-validator' | 'secrets-detector' | 'semantic-similarity' | 'sexism-detector' | 'sql-validator' | 'tone-detection' | 'topic-adherence' | 'toxicity-detector' | 'uncertainty-detector' | 'word-count' | 'word-count-ratio';\n\nexport const EVALUATOR_SLUGS: EvaluatorSlug[] = [\n 'agent-efficiency',\n 'agent-flow-quality',\n 'agent-goal-accuracy',\n 'agent-goal-completeness',\n 'agent-tool-error-detector',\n 'agent-tool-trajectory',\n 'answer-completeness',\n 'answer-correctness',\n 'answer-relevancy',\n 'char-count',\n 'char-count-ratio',\n 'context-relevance',\n 'conversation-quality',\n 'faithfulness',\n 'html-comparison',\n 'instruction-adherence',\n 'intent-change',\n 'json-validator',\n 'perplexity',\n 'pii-detector',\n 'placeholder-regex',\n 'profanity-detector',\n 'prompt-injection',\n 'prompt-perplexity',\n 'regex-validator',\n 'secrets-detector',\n 'semantic-similarity',\n 'sexism-detector',\n 'sql-validator',\n 'tone-detection',\n 'topic-adherence',\n 'toxicity-detector',\n 'uncertainty-detector',\n 'word-count',\n 'word-count-ratio',\n];\n\nexport const EVALUATOR_SCHEMAS: Record<EvaluatorSlug, EvaluatorSchema> = {\n 'agent-efficiency': {\n slug: 'agent-efficiency',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: [],\n description: \"Evaluate agent efficiency - detect redundant calls, unnecessary follow-ups\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\",\n },\n 'agent-flow-quality': {\n slug: 'agent-flow-quality',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: ['conditions', 'threshold'],\n description: \"Validate agent trajectory against user-defined conditions\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\\n- `config.conditions` (array of strings, required): Array of evaluation conditions/rules to validate against\\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\",\n },\n 'agent-goal-accuracy': {\n slug: 'agent-goal-accuracy',\n requiredInputFields: ['completion', 'question', 'reference'],\n optionalConfigFields: [],\n description: \"Evaluate agent goal accuracy\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question or goal\\n- `input.completion` (string, required): The agent's completion/response\\n- `input.reference` (string, required): The expected reference answer\",\n },\n 'agent-goal-completeness': {\n slug: 'agent-goal-completeness',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: ['threshold'],\n description: \"Measure if agent accomplished all user goals\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\",\n },\n 'agent-tool-error-detector': {\n slug: 'agent-tool-error-detector',\n requiredInputFields: ['tool_input', 'tool_output'],\n optionalConfigFields: [],\n description: \"Detect errors or failures during tool execution\\n\\n**Request Body:**\\n- `input.tool_input` (string, required): JSON string of the tool input\\n- `input.tool_output` (string, required): JSON string of the tool output\",\n },\n 'agent-tool-trajectory': {\n slug: 'agent-tool-trajectory',\n requiredInputFields: ['executed_tool_calls', 'expected_tool_calls'],\n optionalConfigFields: ['input_params_sensitive', 'mismatch_sensitive', 'order_sensitive', 'threshold'],\n description: \"Compare actual tool calls against expected reference tool calls\\n\\n**Request Body:**\\n- `input.executed_tool_calls` (string, required): JSON array of actual tool calls made by the agent\\n- `input.expected_tool_calls` (string, required): JSON array of expected/reference tool calls\\n- `config.threshold` (float, optional): Score threshold for pass/fail determination (default: 0.5)\\n- `config.mismatch_sensitive` (bool, optional): Whether tool calls must match exactly (default: false)\\n- `config.order_sensitive` (bool, optional): Whether order of tool calls matters (default: false)\\n- `config.input_params_sensitive` (bool, optional): Whether to compare input parameters (default: true)\",\n },\n 'answer-completeness': {\n slug: 'answer-completeness',\n requiredInputFields: ['completion', 'context', 'question'],\n optionalConfigFields: [],\n description: \"Evaluate whether the answer is complete and contains all the necessary information\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate for completeness\\n- `input.context` (string, required): The context that provides the complete information\",\n },\n 'answer-correctness': {\n slug: 'answer-correctness',\n requiredInputFields: ['completion', 'ground_truth', 'question'],\n optionalConfigFields: [],\n description: \"Evaluate factual accuracy by comparing answers against ground truth\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate\\n- `input.ground_truth` (string, required): The expected correct answer\",\n },\n 'answer-relevancy': {\n slug: 'answer-relevancy',\n requiredInputFields: ['answer', 'question'],\n optionalConfigFields: [],\n description: \"Check if an answer is relevant to a question\\n\\n**Request Body:**\\n- `input.answer` (string, required): The answer to evaluate for relevancy\\n- `input.question` (string, required): The question that the answer should be relevant to\",\n },\n 'char-count': {\n slug: 'char-count',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Count the number of characters in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to count characters in\",\n },\n 'char-count-ratio': {\n slug: 'char-count-ratio',\n requiredInputFields: ['denominator_text', 'numerator_text'],\n optionalConfigFields: [],\n description: \"Calculate the ratio of characters between two texts\\n\\n**Request Body:**\\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\",\n },\n 'context-relevance': {\n slug: 'context-relevance',\n requiredInputFields: ['context', 'query'],\n optionalConfigFields: ['model'],\n description: \"Evaluate whether retrieved context contains sufficient information to answer the query\\n\\n**Request Body:**\\n- `input.query` (string, required): The query/question to evaluate context relevance for\\n- `input.context` (string, required): The context to evaluate for relevance to the query\\n- `config.model` (string, optional): Model to use for evaluation (default: gpt-4o)\",\n },\n 'conversation-quality': {\n slug: 'conversation-quality',\n requiredInputFields: ['completions', 'prompts'],\n optionalConfigFields: [],\n description: \"Evaluate conversation quality based on tone, clarity, flow, responsiveness, and transparency\\n\\n**Request Body:**\\n- `input.prompts` (string, required): JSON array of prompts in the conversation\\n- `input.completions` (string, required): JSON array of completions in the conversation\",\n },\n 'faithfulness': {\n slug: 'faithfulness',\n requiredInputFields: ['completion', 'context', 'question'],\n optionalConfigFields: [],\n description: \"Check if a completion is faithful to the provided context\\n\\n**Request Body:**\\n- `input.completion` (string, required): The LLM completion to check for faithfulness\\n- `input.context` (string, required): The context that the completion should be faithful to\\n- `input.question` (string, required): The original question asked\",\n },\n 'html-comparison': {\n slug: 'html-comparison',\n requiredInputFields: ['html1', 'html2'],\n optionalConfigFields: [],\n description: \"Compare two HTML documents for structural and content similarity\\n\\n**Request Body:**\\n- `input.html1` (string, required): The first HTML document to compare\\n- `input.html2` (string, required): The second HTML document to compare\",\n },\n 'instruction-adherence': {\n slug: 'instruction-adherence',\n requiredInputFields: ['instructions', 'response'],\n optionalConfigFields: [],\n description: \"Evaluate how well responses follow given instructions\\n\\n**Request Body:**\\n- `input.instructions` (string, required): The instructions that should be followed\\n- `input.response` (string, required): The response to evaluate for instruction adherence\",\n },\n 'intent-change': {\n slug: 'intent-change',\n requiredInputFields: ['completions', 'prompts'],\n optionalConfigFields: [],\n description: \"Detect changes in user intent between prompts and completions\\n\\n**Request Body:**\\n- `input.prompts` (string, required): JSON array of prompts in the conversation\\n- `input.completions` (string, required): JSON array of completions in the conversation\",\n },\n 'json-validator': {\n slug: 'json-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: ['enable_schema_validation', 'schema_string'],\n description: \"Validate JSON syntax\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate as JSON\\n- `config.enable_schema_validation` (bool, optional): Enable JSON schema validation\\n- `config.schema_string` (string, optional): JSON schema to validate against\",\n },\n 'perplexity': {\n slug: 'perplexity',\n requiredInputFields: ['logprobs'],\n optionalConfigFields: [],\n description: \"Measure text perplexity from logprobs\\n\\n**Request Body:**\\n- `input.logprobs` (string, required): JSON array of log probabilities from the model\",\n },\n 'pii-detector': {\n slug: 'pii-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['probability_threshold'],\n description: \"Detect personally identifiable information in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for personally identifiable information\\n- `config.probability_threshold` (float, optional): Detection threshold (default: 0.8)\",\n },\n 'placeholder-regex': {\n slug: 'placeholder-regex',\n requiredInputFields: ['placeholder_value', 'text'],\n optionalConfigFields: ['case_sensitive', 'dot_include_nl', 'multi_line', 'should_match'],\n description: \"Validate text against a placeholder regex pattern\\n\\n**Request Body:**\\n- `input.placeholder_value` (string, required): The regex pattern to match against\\n- `input.text` (string, required): The text to validate against the regex pattern\\n- `config.should_match` (bool, optional): Whether the text should match the regex\\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\\n- `config.multi_line` (bool, optional): Multi-line mode\",\n },\n 'profanity-detector': {\n slug: 'profanity-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect profanity in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for profanity\",\n },\n 'prompt-injection': {\n slug: 'prompt-injection',\n requiredInputFields: ['prompt'],\n optionalConfigFields: ['threshold'],\n description: \"Detect prompt injection attempts\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The prompt to check for injection attempts\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'prompt-perplexity': {\n slug: 'prompt-perplexity',\n requiredInputFields: ['prompt'],\n optionalConfigFields: [],\n description: \"Measure prompt perplexity to detect potential injection attempts\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The prompt to calculate perplexity for\",\n },\n 'regex-validator': {\n slug: 'regex-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: ['case_sensitive', 'dot_include_nl', 'multi_line', 'regex', 'should_match'],\n description: \"Validate text against a regex pattern\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate against a regex pattern\\n- `config.regex` (string, optional): The regex pattern to match against\\n- `config.should_match` (bool, optional): Whether the text should match the regex\\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\\n- `config.multi_line` (bool, optional): Multi-line mode\",\n },\n 'secrets-detector': {\n slug: 'secrets-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect secrets and credentials in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for secrets (API keys, passwords, etc.)\",\n },\n 'semantic-similarity': {\n slug: 'semantic-similarity',\n requiredInputFields: ['completion', 'reference'],\n optionalConfigFields: [],\n description: \"Calculate semantic similarity between completion and reference\\n\\n**Request Body:**\\n- `input.completion` (string, required): The completion text to compare\\n- `input.reference` (string, required): The reference text to compare against\",\n },\n 'sexism-detector': {\n slug: 'sexism-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['threshold'],\n description: \"Detect sexist language and bias\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for sexist content\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'sql-validator': {\n slug: 'sql-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Validate SQL query syntax\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate as SQL\",\n },\n 'tone-detection': {\n slug: 'tone-detection',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect the tone of the text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to detect the tone of\",\n },\n 'topic-adherence': {\n slug: 'topic-adherence',\n requiredInputFields: ['completion', 'question', 'reference_topics'],\n optionalConfigFields: [],\n description: \"Evaluate topic adherence\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate\\n- `input.reference_topics` (string, required): Comma-separated list of expected topics\",\n },\n 'toxicity-detector': {\n slug: 'toxicity-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['threshold'],\n description: \"Detect toxic or harmful language\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for toxic content\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'uncertainty-detector': {\n slug: 'uncertainty-detector',\n requiredInputFields: ['prompt'],\n optionalConfigFields: [],\n description: \"Detect uncertainty in the text\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The text to detect uncertainty in\",\n },\n 'word-count': {\n slug: 'word-count',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Count the number of words in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to count words in\",\n },\n 'word-count-ratio': {\n slug: 'word-count-ratio',\n requiredInputFields: ['denominator_text', 'numerator_text'],\n optionalConfigFields: [],\n description: \"Calculate the ratio of words between two texts\\n\\n**Request Body:**\\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\",\n },\n};\n\nexport function getEvaluatorSchema<S extends EvaluatorSlug>(slug: S): EvaluatorSchema {\n return EVALUATOR_SCHEMAS[slug];\n}\n\nexport function isValidEvaluatorSlug(slug: string): slug is EvaluatorSlug {\n return slug in EVALUATOR_SCHEMAS;\n}\n","// Auto-generated - DO NOT EDIT\n// Regenerate with: pnpm generate:evaluator-models\n\nimport type { EvaluatorWithConfig } from '../../interfaces/experiment.interface';\nimport type { components } from './types';\nimport { EVALUATOR_SLUGS, EVALUATOR_SCHEMAS, isValidEvaluatorSlug, type EvaluatorSlug, type EvaluatorSchema } from './registry';\n\n// Config type aliases from generated OpenAPI types\nexport type AgentFlowQualityConfig = components['schemas']['request.AgentFlowQualityRequest']['config'];\nexport type AgentGoalCompletenessConfig = components['schemas']['request.AgentGoalCompletenessRequest']['config'];\nexport type AgentToolTrajectoryConfig = components['schemas']['request.AgentToolTrajectoryRequest']['config'];\nexport type ContextRelevanceConfig = components['schemas']['request.ContextRelevanceRequest']['config'];\nexport type JsonValidatorConfig = components['schemas']['request.JSONValidatorRequest']['config'];\nexport type PiiDetectorConfig = components['schemas']['request.PIIDetectorRequest']['config'];\nexport type PlaceholderRegexConfig = components['schemas']['request.PlaceholderRegexRequest']['config'];\nexport type PromptInjectionConfig = components['schemas']['request.PromptInjectionRequest']['config'];\nexport type RegexValidatorConfig = components['schemas']['request.RegexValidatorRequest']['config'];\nexport type SexismDetectorConfig = components['schemas']['request.SexismDetectorRequest']['config'];\nexport type ToxicityDetectorConfig = components['schemas']['request.ToxicityDetectorRequest']['config'];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Utility functions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create an evaluator configuration object.\n */\nexport function createEvaluator(\n slug: EvaluatorSlug,\n options?: { version?: string; config?: Record<string, unknown> }\n): EvaluatorWithConfig {\n return {\n name: slug,\n version: options?.version,\n config: options?.config,\n };\n}\n\n/**\n * Validate that required input fields are present in task output.\n */\nexport function validateEvaluatorInput(\n slug: EvaluatorSlug,\n taskOutput: Record<string, unknown>\n): { valid: boolean; missingFields: string[] } {\n const schema = EVALUATOR_SCHEMAS[slug];\n if (!schema) {\n return { valid: false, missingFields: [] };\n }\n\n const missingFields = schema.requiredInputFields.filter(\n (field) => !(field in taskOutput) || taskOutput[field] === undefined\n );\n\n return {\n valid: missingFields.length === 0,\n missingFields,\n };\n}\n\n/**\n * Get all available evaluator slugs.\n */\nexport function getAvailableEvaluatorSlugs(): EvaluatorSlug[] {\n return [...EVALUATOR_SLUGS];\n}\n\n/**\n * Get schema information for an evaluator.\n */\nexport function getEvaluatorSchemaInfo(slug: EvaluatorSlug): EvaluatorSchema | undefined {\n return EVALUATOR_SCHEMAS[slug];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Factory class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Factory class for creating type-safe MBT evaluator configurations.\n *\n * @example\n * ```typescript\n * import { EvaluatorMadeByTraceloop } from '@anyway-sh/node-server-sdk';\n *\n * const evaluators = [\n * EvaluatorMadeByTraceloop.piiDetector({ probability_threshold: 0.8 }),\n * EvaluatorMadeByTraceloop.faithfulness(),\n * ];\n * ```\n */\nexport class EvaluatorMadeByTraceloop {\n static create(slug: EvaluatorSlug, options?: { version?: string; config?: Record<string, unknown> }): EvaluatorWithConfig {\n return createEvaluator(slug, options);\n }\n\n static getAvailableSlugs(): EvaluatorSlug[] {\n return getAvailableEvaluatorSlugs();\n }\n\n static isValidSlug(slug: string): slug is EvaluatorSlug {\n return isValidEvaluatorSlug(slug);\n }\n\n /**\n * Evaluate agent efficiency - detect redundant calls, unnecessary follow-ups\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentEfficiency(): EvaluatorWithConfig {\n return createEvaluator('agent-efficiency');\n }\n\n /**\n * Validate agent trajectory against user-defined conditions\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n- `config.conditions` (array of strings, required): Array of evaluation conditions/rules to validate against\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentFlowQuality(config?: AgentFlowQualityConfig): EvaluatorWithConfig {\n return createEvaluator('agent-flow-quality', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate agent goal accuracy\n\n**Request Body:**\n- `input.question` (string, required): The original question or goal\n- `input.completion` (string, required): The agent's completion/response\n- `input.reference` (string, required): The expected reference answer\n * Required task output fields: completion, question, reference\n */\n static agentGoalAccuracy(): EvaluatorWithConfig {\n return createEvaluator('agent-goal-accuracy');\n }\n\n /**\n * Measure if agent accomplished all user goals\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentGoalCompleteness(config?: AgentGoalCompletenessConfig): EvaluatorWithConfig {\n return createEvaluator('agent-goal-completeness', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect errors or failures during tool execution\n\n**Request Body:**\n- `input.tool_input` (string, required): JSON string of the tool input\n- `input.tool_output` (string, required): JSON string of the tool output\n * Required task output fields: tool_input, tool_output\n */\n static agentToolErrorDetector(): EvaluatorWithConfig {\n return createEvaluator('agent-tool-error-detector');\n }\n\n /**\n * Compare actual tool calls against expected reference tool calls\n\n**Request Body:**\n- `input.executed_tool_calls` (string, required): JSON array of actual tool calls made by the agent\n- `input.expected_tool_calls` (string, required): JSON array of expected/reference tool calls\n- `config.threshold` (float, optional): Score threshold for pass/fail determination (default: 0.5)\n- `config.mismatch_sensitive` (bool, optional): Whether tool calls must match exactly (default: false)\n- `config.order_sensitive` (bool, optional): Whether order of tool calls matters (default: false)\n- `config.input_params_sensitive` (bool, optional): Whether to compare input parameters (default: true)\n * Required task output fields: executed_tool_calls, expected_tool_calls\n */\n static agentToolTrajectory(config?: AgentToolTrajectoryConfig): EvaluatorWithConfig {\n return createEvaluator('agent-tool-trajectory', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate whether the answer is complete and contains all the necessary information\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate for completeness\n- `input.context` (string, required): The context that provides the complete information\n * Required task output fields: completion, context, question\n */\n static answerCompleteness(): EvaluatorWithConfig {\n return createEvaluator('answer-completeness');\n }\n\n /**\n * Evaluate factual accuracy by comparing answers against ground truth\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate\n- `input.ground_truth` (string, required): The expected correct answer\n * Required task output fields: completion, ground_truth, question\n */\n static answerCorrectness(): EvaluatorWithConfig {\n return createEvaluator('answer-correctness');\n }\n\n /**\n * Check if an answer is relevant to a question\n\n**Request Body:**\n- `input.answer` (string, required): The answer to evaluate for relevancy\n- `input.question` (string, required): The question that the answer should be relevant to\n * Required task output fields: answer, question\n */\n static answerRelevancy(): EvaluatorWithConfig {\n return createEvaluator('answer-relevancy');\n }\n\n /**\n * Count the number of characters in text\n\n**Request Body:**\n- `input.text` (string, required): The text to count characters in\n * Required task output fields: text\n */\n static charCount(): EvaluatorWithConfig {\n return createEvaluator('char-count');\n }\n\n /**\n * Calculate the ratio of characters between two texts\n\n**Request Body:**\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\n * Required task output fields: denominator_text, numerator_text\n */\n static charCountRatio(): EvaluatorWithConfig {\n return createEvaluator('char-count-ratio');\n }\n\n /**\n * Evaluate whether retrieved context contains sufficient information to answer the query\n\n**Request Body:**\n- `input.query` (string, required): The query/question to evaluate context relevance for\n- `input.context` (string, required): The context to evaluate for relevance to the query\n- `config.model` (string, optional): Model to use for evaluation (default: gpt-4o)\n * Required task output fields: context, query\n */\n static contextRelevance(config?: ContextRelevanceConfig): EvaluatorWithConfig {\n return createEvaluator('context-relevance', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate conversation quality based on tone, clarity, flow, responsiveness, and transparency\n\n**Request Body:**\n- `input.prompts` (string, required): JSON array of prompts in the conversation\n- `input.completions` (string, required): JSON array of completions in the conversation\n * Required task output fields: completions, prompts\n */\n static conversationQuality(): EvaluatorWithConfig {\n return createEvaluator('conversation-quality');\n }\n\n /**\n * Check if a completion is faithful to the provided context\n\n**Request Body:**\n- `input.completion` (string, required): The LLM completion to check for faithfulness\n- `input.context` (string, required): The context that the completion should be faithful to\n- `input.question` (string, required): The original question asked\n * Required task output fields: completion, context, question\n */\n static faithfulness(): EvaluatorWithConfig {\n return createEvaluator('faithfulness');\n }\n\n /**\n * Compare two HTML documents for structural and content similarity\n\n**Request Body:**\n- `input.html1` (string, required): The first HTML document to compare\n- `input.html2` (string, required): The second HTML document to compare\n * Required task output fields: html1, html2\n */\n static htmlComparison(): EvaluatorWithConfig {\n return createEvaluator('html-comparison');\n }\n\n /**\n * Evaluate how well responses follow given instructions\n\n**Request Body:**\n- `input.instructions` (string, required): The instructions that should be followed\n- `input.response` (string, required): The response to evaluate for instruction adherence\n * Required task output fields: instructions, response\n */\n static instructionAdherence(): EvaluatorWithConfig {\n return createEvaluator('instruction-adherence');\n }\n\n /**\n * Detect changes in user intent between prompts and completions\n\n**Request Body:**\n- `input.prompts` (string, required): JSON array of prompts in the conversation\n- `input.completions` (string, required): JSON array of completions in the conversation\n * Required task output fields: completions, prompts\n */\n static intentChange(): EvaluatorWithConfig {\n return createEvaluator('intent-change');\n }\n\n /**\n * Validate JSON syntax\n\n**Request Body:**\n- `input.text` (string, required): The text to validate as JSON\n- `config.enable_schema_validation` (bool, optional): Enable JSON schema validation\n- `config.schema_string` (string, optional): JSON schema to validate against\n * Required task output fields: text\n */\n static jsonValidator(config?: JsonValidatorConfig): EvaluatorWithConfig {\n return createEvaluator('json-validator', { config: config as Record<string, unknown> });\n }\n\n /**\n * Measure text perplexity from logprobs\n\n**Request Body:**\n- `input.logprobs` (string, required): JSON array of log probabilities from the model\n * Required task output fields: logprobs\n */\n static perplexity(): EvaluatorWithConfig {\n return createEvaluator('perplexity');\n }\n\n /**\n * Detect personally identifiable information in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for personally identifiable information\n- `config.probability_threshold` (float, optional): Detection threshold (default: 0.8)\n * Required task output fields: text\n */\n static piiDetector(config?: PiiDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('pii-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Validate text against a placeholder regex pattern\n\n**Request Body:**\n- `input.placeholder_value` (string, required): The regex pattern to match against\n- `input.text` (string, required): The text to validate against the regex pattern\n- `config.should_match` (bool, optional): Whether the text should match the regex\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\n- `config.multi_line` (bool, optional): Multi-line mode\n * Required task output fields: placeholder_value, text\n */\n static placeholderRegex(config?: PlaceholderRegexConfig): EvaluatorWithConfig {\n return createEvaluator('placeholder-regex', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect profanity in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for profanity\n * Required task output fields: text\n */\n static profanityDetector(): EvaluatorWithConfig {\n return createEvaluator('profanity-detector');\n }\n\n /**\n * Detect prompt injection attempts\n\n**Request Body:**\n- `input.prompt` (string, required): The prompt to check for injection attempts\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: prompt\n */\n static promptInjection(config?: PromptInjectionConfig): EvaluatorWithConfig {\n return createEvaluator('prompt-injection', { config: config as Record<string, unknown> });\n }\n\n /**\n * Measure prompt perplexity to detect potential injection attempts\n\n**Request Body:**\n- `input.prompt` (string, required): The prompt to calculate perplexity for\n * Required task output fields: prompt\n */\n static promptPerplexity(): EvaluatorWithConfig {\n return createEvaluator('prompt-perplexity');\n }\n\n /**\n * Validate text against a regex pattern\n\n**Request Body:**\n- `input.text` (string, required): The text to validate against a regex pattern\n- `config.regex` (string, optional): The regex pattern to match against\n- `config.should_match` (bool, optional): Whether the text should match the regex\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\n- `config.multi_line` (bool, optional): Multi-line mode\n * Required task output fields: text\n */\n static regexValidator(config?: RegexValidatorConfig): EvaluatorWithConfig {\n return createEvaluator('regex-validator', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect secrets and credentials in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for secrets (API keys, passwords, etc.)\n * Required task output fields: text\n */\n static secretsDetector(): EvaluatorWithConfig {\n return createEvaluator('secrets-detector');\n }\n\n /**\n * Calculate semantic similarity between completion and reference\n\n**Request Body:**\n- `input.completion` (string, required): The completion text to compare\n- `input.reference` (string, required): The reference text to compare against\n * Required task output fields: completion, reference\n */\n static semanticSimilarity(): EvaluatorWithConfig {\n return createEvaluator('semantic-similarity');\n }\n\n /**\n * Detect sexist language and bias\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for sexist content\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: text\n */\n static sexismDetector(config?: SexismDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('sexism-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Validate SQL query syntax\n\n**Request Body:**\n- `input.text` (string, required): The text to validate as SQL\n * Required task output fields: text\n */\n static sqlValidator(): EvaluatorWithConfig {\n return createEvaluator('sql-validator');\n }\n\n /**\n * Detect the tone of the text\n\n**Request Body:**\n- `input.text` (string, required): The text to detect the tone of\n * Required task output fields: text\n */\n static toneDetection(): EvaluatorWithConfig {\n return createEvaluator('tone-detection');\n }\n\n /**\n * Evaluate topic adherence\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate\n- `input.reference_topics` (string, required): Comma-separated list of expected topics\n * Required task output fields: completion, question, reference_topics\n */\n static topicAdherence(): EvaluatorWithConfig {\n return createEvaluator('topic-adherence');\n }\n\n /**\n * Detect toxic or harmful language\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for toxic content\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: text\n */\n static toxicityDetector(config?: ToxicityDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('toxicity-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect uncertainty in the text\n\n**Request Body:**\n- `input.prompt` (string, required): The text to detect uncertainty in\n * Required task output fields: prompt\n */\n static uncertaintyDetector(): EvaluatorWithConfig {\n return createEvaluator('uncertainty-detector');\n }\n\n /**\n * Count the number of words in text\n\n**Request Body:**\n- `input.text` (string, required): The text to count words in\n * Required task output fields: text\n */\n static wordCount(): EvaluatorWithConfig {\n return createEvaluator('word-count');\n }\n\n /**\n * Calculate the ratio of words between two texts\n\n**Request Body:**\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\n * Required task output fields: denominator_text, numerator_text\n */\n static wordCountRatio(): EvaluatorWithConfig {\n return createEvaluator('word-count-ratio');\n }\n}\n","import { InitializeOptions } from \"../interfaces\";\nimport { InitializationError } from \"../errors\";\n\nexport const validateConfiguration = (options: InitializeOptions): void => {\n const {\n apiKey,\n traceloopSyncEnabled,\n traceloopSyncMaxRetries,\n traceloopSyncPollingInterval,\n traceloopSyncDevPollingInterval,\n } = options;\n if (apiKey && typeof apiKey !== \"string\") {\n throw new InitializationError('\"apiKey\" must be a string');\n }\n\n if (traceloopSyncEnabled) {\n if (\n typeof traceloopSyncMaxRetries !== \"number\" ||\n traceloopSyncMaxRetries <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncMaxRetries\" must be an integer greater than 0.',\n );\n }\n\n if (\n typeof traceloopSyncPollingInterval !== \"number\" ||\n traceloopSyncPollingInterval <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncPollingInterval\" must be an integer greater than 0.',\n );\n }\n\n if (\n typeof traceloopSyncDevPollingInterval !== \"number\" ||\n traceloopSyncDevPollingInterval <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncDevPollingInterval\" must be an integer greater than 0.',\n );\n }\n }\n};\n","import { trace, createContextKey, Context } from \"@opentelemetry/api\";\nimport { version } from \"../../../package.json\";\n\nconst TRACER_NAME = \"@anyway-sh/node-server-sdk\";\nconst TRACER_VERSION = version;\n\nexport const WORKFLOW_NAME_KEY = createContextKey(\"workflow_name\");\nexport const ENTITY_NAME_KEY = createContextKey(\"entity_name\");\nexport const AGENT_NAME_KEY = createContextKey(\"agent_name\");\nexport const CONVERSATION_ID_KEY = createContextKey(\"conversation_id\");\nexport const ASSOCATION_PROPERTIES_KEY = createContextKey(\n \"association_properties\",\n);\n\nexport const getTracer = () => {\n return trace.getTracer(TRACER_NAME, TRACER_VERSION);\n};\n\nexport const getTraceloopTracer = getTracer;\n\nexport const getEntityPath = (entityContext: Context): string | undefined => {\n const path = entityContext.getValue(ENTITY_NAME_KEY);\n\n return path ? `${path}` : undefined;\n};\n","import { ReadableSpan, Span } from \"@opentelemetry/sdk-trace-node\";\nimport {\n SpanAttributes,\n TraceloopSpanKindValues,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_COMPLETION,\n ATTR_GEN_AI_CONVERSATION_ID,\n ATTR_GEN_AI_INPUT_MESSAGES,\n ATTR_GEN_AI_OPERATION_NAME,\n ATTR_GEN_AI_OUTPUT_MESSAGES,\n ATTR_GEN_AI_PROMPT,\n ATTR_GEN_AI_PROVIDER_NAME,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n ATTR_GEN_AI_RESPONSE_ID,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_SYSTEM,\n ATTR_GEN_AI_TOOL_CALL_ARGUMENTS,\n ATTR_GEN_AI_TOOL_CALL_ID,\n ATTR_GEN_AI_TOOL_CALL_RESULT,\n ATTR_GEN_AI_TOOL_NAME,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\n\nconst AI_GENERATE_TEXT = \"ai.generateText\";\nconst AI_STREAM_TEXT = \"ai.streamText\";\nconst AI_GENERATE_OBJECT = \"ai.generateObject\";\nconst AI_STREAM_OBJECT = \"ai.streamObject\";\nconst AI_GENERATE_TEXT_DO_GENERATE = \"ai.generateText.doGenerate\";\nconst AI_GENERATE_OBJECT_DO_GENERATE = \"ai.generateObject.doGenerate\";\nconst AI_STREAM_TEXT_DO_STREAM = \"ai.streamText.doStream\";\nconst AI_STREAM_OBJECT_DO_STREAM = \"ai.streamObject.doStream\";\nconst HANDLED_SPAN_NAMES: Record<string, string> = {\n [AI_GENERATE_TEXT]: \"run.ai\",\n [AI_STREAM_TEXT]: \"stream.ai\",\n [AI_GENERATE_OBJECT]: \"object.ai\",\n [AI_STREAM_OBJECT]: \"stream-object.ai\",\n [AI_GENERATE_TEXT_DO_GENERATE]: \"text.generate\",\n [AI_GENERATE_OBJECT_DO_GENERATE]: \"object.generate\",\n [AI_STREAM_TEXT_DO_STREAM]: \"text.stream\",\n [AI_STREAM_OBJECT_DO_STREAM]: \"object.stream\",\n};\n\nconst TOOL_SPAN_NAME = \"ai.toolCall\";\n\nconst AI_RESPONSE_TEXT = \"ai.response.text\";\nconst AI_RESPONSE_OBJECT = \"ai.response.object\";\nconst AI_RESPONSE_TOOL_CALLS = \"ai.response.toolCalls\";\nconst AI_RESPONSE_PROVIDER_METADATA = \"ai.response.providerMetadata\";\nconst AI_PROMPT_MESSAGES = \"ai.prompt.messages\";\nconst AI_PROMPT = \"ai.prompt\";\nconst AI_USAGE_PROMPT_TOKENS = \"ai.usage.promptTokens\";\nconst AI_USAGE_COMPLETION_TOKENS = \"ai.usage.completionTokens\";\nconst AI_MODEL_PROVIDER = \"ai.model.provider\";\nconst AI_PROMPT_TOOLS = \"ai.prompt.tools\";\nconst AI_TELEMETRY_METADATA_PREFIX = \"ai.telemetry.metadata.\";\nconst TYPE_TEXT = \"text\";\nconst TYPE_TOOL_CALL = \"tool_call\";\nconst ROLE_ASSISTANT = \"assistant\";\nconst ROLE_USER = \"user\";\n\n// Vendor mapping from AI SDK provider prefixes to standardized LLM_SYSTEM values\n// Uses prefixes to match AI SDK patterns like \"openai.chat\", \"anthropic.messages\", etc.\nconst VENDOR_MAPPING: Record<string, string> = {\n openai: \"OpenAI\",\n azure: \"Azure\",\n \"azure-openai\": \"Azure\",\n anthropic: \"Anthropic\",\n cohere: \"Cohere\",\n mistral: \"MistralAI\",\n groq: \"Groq\",\n replicate: \"Replicate\",\n together: \"TogetherAI\",\n fireworks: \"Fireworks\",\n deepseek: \"DeepSeek\",\n perplexity: \"Perplexity\",\n \"amazon-bedrock\": \"AWS\",\n bedrock: \"AWS\",\n google: \"Google\",\n vertex: \"Google\",\n ollama: \"Ollama\",\n huggingface: \"HuggingFace\",\n openrouter: \"OpenRouter\",\n};\n\nconst getAgentNameFromAttributes = (\n attributes: Record<string, any>,\n): string | null => {\n const agentAttr = attributes[`${AI_TELEMETRY_METADATA_PREFIX}agent`];\n return agentAttr && typeof agentAttr === \"string\" ? agentAttr : null;\n};\n\nconst transformResponseText = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_TEXT in attributes) {\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.content`] =\n attributes[AI_RESPONSE_TEXT];\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: [\n {\n type: TYPE_TEXT,\n content: attributes[AI_RESPONSE_TEXT],\n },\n ],\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([outputMessage]);\n\n delete attributes[AI_RESPONSE_TEXT];\n }\n};\n\nconst transformResponseObject = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_OBJECT in attributes) {\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.content`] =\n attributes[AI_RESPONSE_OBJECT];\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: [\n {\n type: TYPE_TEXT,\n content: attributes[AI_RESPONSE_OBJECT],\n },\n ],\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([outputMessage]);\n\n delete attributes[AI_RESPONSE_OBJECT];\n }\n};\n\nconst transformResponseToolCalls = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_TOOL_CALLS in attributes) {\n try {\n const toolCalls = JSON.parse(\n attributes[AI_RESPONSE_TOOL_CALLS] as string,\n );\n\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const toolCallParts: any[] = [];\n toolCalls.forEach((toolCall: any, index: number) => {\n // Support both v4 (args) and v5 (input) formats\n // Prefer v5 (input) if present\n const toolArgs = toolCall.input ?? toolCall.args;\n\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.tool_calls.${index}.name`] =\n toolCall.toolName;\n attributes[\n `${ATTR_GEN_AI_COMPLETION}.0.tool_calls.${index}.arguments`\n ] = toolArgs;\n\n toolCallParts.push({\n type: TYPE_TOOL_CALL,\n tool_call: {\n name: toolCall.toolName,\n arguments: toolArgs,\n },\n });\n });\n\n if (toolCallParts.length > 0) {\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: toolCallParts,\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([\n outputMessage,\n ]);\n }\n\n delete attributes[AI_RESPONSE_TOOL_CALLS];\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst processMessageContent = (content: any): string => {\n if (Array.isArray(content)) {\n const textItems = content.filter(\n (item: any) =>\n item &&\n typeof item === \"object\" &&\n item.type === TYPE_TEXT &&\n item.text,\n );\n\n if (textItems.length > 0) {\n const joinedText = textItems.map((item: any) => item.text).join(\" \");\n return joinedText;\n } else {\n return JSON.stringify(content);\n }\n }\n\n if (content && typeof content === \"object\") {\n if (content.type === TYPE_TEXT && content.text) {\n return content.text;\n }\n return JSON.stringify(content);\n }\n\n if (typeof content === \"string\") {\n try {\n const parsed = JSON.parse(content);\n if (Array.isArray(parsed)) {\n const allTextItems = parsed.every(\n (item: any) =>\n item &&\n typeof item === \"object\" &&\n item.type === TYPE_TEXT &&\n item.text,\n );\n\n if (allTextItems && parsed.length > 0) {\n return parsed.map((item: any) => item.text).join(\" \");\n } else {\n return content;\n }\n }\n } catch {\n // Ignore parsing errors\n }\n\n return content;\n }\n\n return String(content);\n};\n\nconst transformTools = (attributes: Record<string, any>): void => {\n if (AI_PROMPT_TOOLS in attributes) {\n try {\n const tools = attributes[AI_PROMPT_TOOLS];\n if (Array.isArray(tools)) {\n tools.forEach((toolItem: any, index: number) => {\n let tool = toolItem;\n if (typeof toolItem === \"string\") {\n try {\n tool = JSON.parse(toolItem);\n } catch {\n return;\n }\n }\n\n if (tool && typeof tool === \"object\") {\n if (tool.name) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`\n ] = tool.name;\n }\n\n if (tool.description) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`\n ] = tool.description;\n }\n\n // Support both v4 (parameters) and v5 (inputSchema) formats\n // Prefer v5 (inputSchema) if present\n const schema = tool.inputSchema ?? tool.parameters;\n if (schema) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.parameters`\n ] = typeof schema === \"string\" ? schema : JSON.stringify(schema);\n }\n }\n });\n }\n delete attributes[AI_PROMPT_TOOLS];\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst transformPrompts = (attributes: Record<string, any>): void => {\n if (AI_PROMPT_MESSAGES in attributes) {\n try {\n let jsonString = attributes[AI_PROMPT_MESSAGES] as string;\n\n try {\n JSON.parse(jsonString);\n } catch {\n jsonString = jsonString.replace(/\\\\'/g, \"'\");\n jsonString = jsonString.replace(/\\\\\\\\\\\\\\\\/g, \"\\\\\\\\\");\n }\n\n const messages = JSON.parse(jsonString);\n const inputMessages: any[] = [];\n\n messages.forEach((msg: { role: string; content: any }, index: number) => {\n const processedContent = processMessageContent(msg.content);\n const contentKey = `${ATTR_GEN_AI_PROMPT}.${index}.content`;\n attributes[contentKey] = processedContent;\n attributes[`${ATTR_GEN_AI_PROMPT}.${index}.role`] = msg.role;\n\n // Add to OpenTelemetry standard gen_ai.input.messages format\n inputMessages.push({\n role: msg.role,\n parts: [\n {\n type: TYPE_TEXT,\n content: processedContent,\n },\n ],\n });\n });\n\n // Set the OpenTelemetry standard input messages attribute\n if (inputMessages.length > 0) {\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] = JSON.stringify(inputMessages);\n }\n\n delete attributes[AI_PROMPT_MESSAGES];\n } catch {\n // Ignore parsing errors\n }\n }\n\n if (AI_PROMPT in attributes) {\n try {\n const promptData = JSON.parse(attributes[AI_PROMPT] as string);\n if (promptData.messages && Array.isArray(promptData.messages)) {\n const messages = promptData.messages;\n const inputMessages: any[] = [];\n\n messages.forEach(\n (msg: { role: string; content: any }, index: number) => {\n const processedContent = processMessageContent(msg.content);\n const contentKey = `${ATTR_GEN_AI_PROMPT}.${index}.content`;\n attributes[contentKey] = processedContent;\n attributes[`${ATTR_GEN_AI_PROMPT}.${index}.role`] = msg.role;\n\n inputMessages.push({\n role: msg.role,\n parts: [\n {\n type: TYPE_TEXT,\n content: processedContent,\n },\n ],\n });\n },\n );\n\n if (inputMessages.length > 0) {\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] =\n JSON.stringify(inputMessages);\n }\n\n delete attributes[AI_PROMPT];\n } else if (promptData.prompt && typeof promptData.prompt === \"string\") {\n attributes[`${ATTR_GEN_AI_PROMPT}.0.content`] = promptData.prompt;\n attributes[`${ATTR_GEN_AI_PROMPT}.0.role`] = ROLE_USER;\n\n const inputMessage = {\n role: ROLE_USER,\n parts: [\n {\n type: TYPE_TEXT,\n content: promptData.prompt,\n },\n ],\n };\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] = JSON.stringify([inputMessage]);\n\n delete attributes[AI_PROMPT];\n }\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst transformPromptTokens = (attributes: Record<string, any>): void => {\n if (\n !(ATTR_GEN_AI_USAGE_INPUT_TOKENS in attributes) &&\n AI_USAGE_PROMPT_TOKENS in attributes\n ) {\n attributes[ATTR_GEN_AI_USAGE_INPUT_TOKENS] =\n attributes[AI_USAGE_PROMPT_TOKENS];\n }\n\n delete attributes[AI_USAGE_PROMPT_TOKENS];\n};\n\nconst transformCompletionTokens = (attributes: Record<string, any>): void => {\n if (\n !(ATTR_GEN_AI_USAGE_OUTPUT_TOKENS in attributes) &&\n AI_USAGE_COMPLETION_TOKENS in attributes\n ) {\n attributes[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS] =\n attributes[AI_USAGE_COMPLETION_TOKENS];\n }\n\n delete attributes[AI_USAGE_COMPLETION_TOKENS];\n};\n\nconst transformProviderMetadata = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_PROVIDER_METADATA in attributes) {\n try {\n const metadataStr = attributes[AI_RESPONSE_PROVIDER_METADATA];\n let metadata: any;\n\n if (typeof metadataStr === \"string\") {\n metadata = JSON.parse(metadataStr);\n } else if (typeof metadataStr === \"object\") {\n metadata = metadataStr;\n } else {\n return;\n }\n\n if (metadata.anthropic) {\n const anthropicMetadata = metadata.anthropic;\n\n if (anthropicMetadata.cacheCreationInputTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] =\n anthropicMetadata.cacheCreationInputTokens;\n }\n\n if (anthropicMetadata.cacheReadInputTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] =\n anthropicMetadata.cacheReadInputTokens;\n }\n }\n\n if (metadata.openai) {\n const openaiMetadata = metadata.openai;\n\n if (openaiMetadata.cachedPromptTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] =\n openaiMetadata.cachedPromptTokens;\n }\n\n if (openaiMetadata.reasoningTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_REASONING_TOKENS] =\n openaiMetadata.reasoningTokens;\n }\n }\n\n delete attributes[AI_RESPONSE_PROVIDER_METADATA];\n } catch {\n // Ignore JSON parsing errors\n }\n }\n};\n\nconst calculateTotalTokens = (attributes: Record<string, any>): void => {\n const inputTokens = attributes[ATTR_GEN_AI_USAGE_INPUT_TOKENS];\n const outputTokens = attributes[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS];\n\n if (inputTokens && outputTokens) {\n attributes[`${SpanAttributes.LLM_USAGE_TOTAL_TOKENS}`] =\n Number(inputTokens) + Number(outputTokens);\n }\n};\n\nconst transformVendor = (attributes: Record<string, any>): void => {\n if (AI_MODEL_PROVIDER in attributes) {\n const vendor = attributes[AI_MODEL_PROVIDER];\n\n // Find matching vendor prefix in mapping\n let mappedVendor = null;\n let providerName = vendor;\n if (typeof vendor === \"string\" && vendor.length > 0) {\n // Extract provider name (part before first dot, or entire string if no dot)\n const dotIndex = vendor.indexOf(\".\");\n providerName = dotIndex > 0 ? vendor.substring(0, dotIndex) : vendor;\n\n for (const prefix of Object.keys(VENDOR_MAPPING)) {\n if (vendor.startsWith(prefix)) {\n mappedVendor = VENDOR_MAPPING[prefix];\n break;\n }\n }\n\n attributes[ATTR_GEN_AI_SYSTEM] = mappedVendor || vendor;\n attributes[ATTR_GEN_AI_PROVIDER_NAME] = providerName;\n }\n\n delete attributes[AI_MODEL_PROVIDER];\n }\n};\n\nconst transformOperationName = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n if (!spanName) return;\n\n let operationName: string | undefined;\n if (\n spanName.includes(\"generateText\") ||\n spanName.includes(\"streamText\") ||\n spanName.includes(\"generateObject\") ||\n spanName.includes(\"streamObject\")\n ) {\n operationName = \"chat\";\n } else if (spanName === \"ai.toolCall\" || spanName.endsWith(\".tool\")) {\n operationName = \"execute_tool\";\n }\n\n if (operationName) {\n attributes[ATTR_GEN_AI_OPERATION_NAME] = operationName;\n }\n};\n\nconst transformModelId = (attributes: Record<string, any>): void => {\n const AI_MODEL_ID = \"ai.model.id\";\n if (AI_MODEL_ID in attributes) {\n attributes[ATTR_GEN_AI_REQUEST_MODEL] = attributes[AI_MODEL_ID];\n delete attributes[AI_MODEL_ID];\n }\n};\n\nconst transformFinishReason = (attributes: Record<string, any>): void => {\n const AI_RESPONSE_FINISH_REASON = \"ai.response.finishReason\";\n if (AI_RESPONSE_FINISH_REASON in attributes) {\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON];\n attributes[ATTR_GEN_AI_RESPONSE_FINISH_REASONS] = Array.isArray(\n finishReason,\n )\n ? finishReason\n : [finishReason];\n delete attributes[AI_RESPONSE_FINISH_REASON];\n }\n};\n\nconst transformToolCallAttributes = (attributes: Record<string, any>): void => {\n if (\"ai.toolCall.name\" in attributes) {\n attributes[ATTR_GEN_AI_TOOL_NAME] = attributes[\"ai.toolCall.name\"];\n // Keep ai.toolCall.name for now, will be deleted in transformToolCalls\n }\n\n if (\"ai.toolCall.id\" in attributes) {\n attributes[ATTR_GEN_AI_TOOL_CALL_ID] = attributes[\"ai.toolCall.id\"];\n delete attributes[\"ai.toolCall.id\"];\n }\n\n // Support both v4 (args) and v5 (input) formats\n // Prefer v5 (input) if present\n const toolArgs =\n attributes[\"ai.toolCall.input\"] ?? attributes[\"ai.toolCall.args\"];\n if (toolArgs !== undefined) {\n attributes[ATTR_GEN_AI_TOOL_CALL_ARGUMENTS] = toolArgs;\n // Don't delete yet - transformToolCalls will handle entity input/output\n }\n\n // Support both v4 (result) and v5 (output) formats\n // Prefer v5 (output) if present\n const toolResult =\n attributes[\"ai.toolCall.output\"] ?? attributes[\"ai.toolCall.result\"];\n if (toolResult !== undefined) {\n attributes[ATTR_GEN_AI_TOOL_CALL_RESULT] = toolResult;\n // Don't delete yet - transformToolCalls will handle entity input/output\n }\n};\n\nconst transformConversationId = (attributes: Record<string, any>): void => {\n const conversationId = attributes[\"ai.telemetry.metadata.conversationId\"];\n const sessionId = attributes[\"ai.telemetry.metadata.sessionId\"];\n\n if (conversationId) {\n attributes[ATTR_GEN_AI_CONVERSATION_ID] = conversationId;\n } else if (sessionId) {\n attributes[ATTR_GEN_AI_CONVERSATION_ID] = sessionId;\n }\n};\n\nconst transformResponseMetadata = (attributes: Record<string, any>): void => {\n const AI_RESPONSE_MODEL = \"ai.response.model\";\n const AI_RESPONSE_ID = \"ai.response.id\";\n\n if (AI_RESPONSE_MODEL in attributes) {\n attributes[ATTR_GEN_AI_RESPONSE_MODEL] = attributes[AI_RESPONSE_MODEL];\n delete attributes[AI_RESPONSE_MODEL];\n }\n\n if (AI_RESPONSE_ID in attributes) {\n attributes[ATTR_GEN_AI_RESPONSE_ID] = attributes[AI_RESPONSE_ID];\n delete attributes[AI_RESPONSE_ID];\n }\n};\n\nconst transformTelemetryMetadata = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n const metadataAttributes: Record<string, string> = {};\n const keysToDelete: string[] = [];\n // Use the helper function to extract agent name\n const agentName = getAgentNameFromAttributes(attributes);\n\n // Find all ai.telemetry.metadata.* attributes\n for (const [key, value] of Object.entries(attributes)) {\n if (key.startsWith(AI_TELEMETRY_METADATA_PREFIX)) {\n const metadataKey = key.substring(AI_TELEMETRY_METADATA_PREFIX.length);\n\n // Always mark for deletion since it's a telemetry metadata attribute\n keysToDelete.push(key);\n\n if (metadataKey && value != null) {\n // Convert value to string for association properties\n const stringValue = typeof value === \"string\" ? value : String(value);\n metadataAttributes[metadataKey] = stringValue;\n\n // Also set as traceloop association property attribute\n attributes[\n `${SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${metadataKey}`\n ] = stringValue;\n }\n }\n }\n\n if (agentName) {\n attributes[ATTR_GEN_AI_AGENT_NAME] = agentName;\n\n const topLevelSpanNames = [\n AI_GENERATE_TEXT,\n AI_STREAM_TEXT,\n AI_GENERATE_OBJECT,\n AI_STREAM_OBJECT,\n ];\n\n if (\n spanName &&\n (spanName === `${agentName}.agent` ||\n topLevelSpanNames.includes(spanName))\n ) {\n attributes[SpanAttributes.TRACELOOP_SPAN_KIND] =\n TraceloopSpanKindValues.AGENT;\n attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] = agentName;\n\n const inputMessages = attributes[ATTR_GEN_AI_INPUT_MESSAGES];\n const outputMessages = attributes[ATTR_GEN_AI_OUTPUT_MESSAGES];\n const toolArgs = attributes[\"ai.toolCall.args\"];\n const toolResult = attributes[\"ai.toolCall.result\"];\n\n if (inputMessages || outputMessages) {\n if (inputMessages) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = inputMessages;\n }\n if (outputMessages) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = outputMessages;\n }\n } else if (toolArgs || toolResult) {\n if (toolArgs) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = toolArgs;\n }\n if (toolResult) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = toolResult;\n }\n }\n }\n }\n\n keysToDelete.forEach((key) => {\n delete attributes[key];\n });\n};\n\nexport const transformLLMSpans = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n transformOperationName(attributes, spanName);\n transformModelId(attributes);\n transformResponseText(attributes);\n transformResponseObject(attributes);\n transformResponseToolCalls(attributes);\n transformPrompts(attributes);\n transformTools(attributes);\n transformPromptTokens(attributes);\n transformCompletionTokens(attributes);\n transformProviderMetadata(attributes);\n transformFinishReason(attributes);\n transformResponseMetadata(attributes);\n calculateTotalTokens(attributes);\n transformVendor(attributes); // Also sets GEN_AI_PROVIDER_NAME\n transformConversationId(attributes);\n transformToolCallAttributes(attributes);\n transformTelemetryMetadata(attributes, spanName);\n};\n\nconst transformToolCalls = (span: ReadableSpan): void => {\n // Support both v4 (args/result) and v5 (input/output) formats\n // Prefer v5 (input/output) if present\n const toolInput =\n span.attributes[\"ai.toolCall.input\"] ?? span.attributes[\"ai.toolCall.args\"];\n const toolOutput =\n span.attributes[\"ai.toolCall.output\"] ??\n span.attributes[\"ai.toolCall.result\"];\n\n if (toolInput && toolOutput) {\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = toolInput;\n delete span.attributes[\"ai.toolCall.args\"];\n delete span.attributes[\"ai.toolCall.input\"];\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = toolOutput;\n delete span.attributes[\"ai.toolCall.result\"];\n delete span.attributes[\"ai.toolCall.output\"];\n span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] =\n TraceloopSpanKindValues.TOOL;\n\n // Set entity name from tool call name\n const toolName = span.attributes[\"ai.toolCall.name\"];\n if (toolName) {\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] = toolName;\n delete span.attributes[\"ai.toolCall.name\"];\n }\n }\n};\n\nconst shouldHandleSpan = (span: ReadableSpan): boolean => {\n return span.instrumentationScope?.name === \"ai\";\n};\n\nconst getAiSdkVersion = (): string | undefined => {\n try {\n return require(\"ai/package.json\").version;\n } catch {\n return undefined;\n }\n};\n\nconst TOP_LEVEL_AI_SPANS = [\n AI_GENERATE_TEXT,\n AI_STREAM_TEXT,\n AI_GENERATE_OBJECT,\n AI_STREAM_OBJECT,\n];\n\nexport const transformAiSdkSpanNames = (span: Span): void => {\n if (span.name === TOOL_SPAN_NAME) {\n span.updateName(`${span.attributes[\"ai.toolCall.name\"] as string}.tool`);\n }\n if (span.name in HANDLED_SPAN_NAMES) {\n const agentName = getAgentNameFromAttributes(span.attributes);\n const isTopLevelSpan = TOP_LEVEL_AI_SPANS.includes(span.name);\n\n if (agentName && isTopLevelSpan) {\n span.updateName(`${agentName}.agent`);\n } else if (!isTopLevelSpan) {\n span.updateName(HANDLED_SPAN_NAMES[span.name]);\n }\n }\n};\n\nexport const transformAiSdkSpanAttributes = (span: ReadableSpan): void => {\n if (!shouldHandleSpan(span)) {\n return;\n }\n\n const aiSdkVersion = getAiSdkVersion();\n if (aiSdkVersion) {\n span.attributes[\"ai.sdk.version\"] = aiSdkVersion;\n }\n\n transformLLMSpans(span.attributes, span.name);\n transformToolCalls(span);\n};\n","export function parseKeyPairsIntoRecord(\n keyPairs: string,\n): Record<string, string> {\n const result: Record<string, string> = {};\n if (!keyPairs) return result;\n\n keyPairs.split(\",\").forEach((pair) => {\n const [key, value] = pair.split(\"=\");\n if (key && value) {\n result[key.trim()] = value.trim();\n }\n });\n return result;\n}\n","import {\n SimpleSpanProcessor,\n BatchSpanProcessor,\n SpanProcessor,\n Span,\n ReadableSpan,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { context } from \"@opentelemetry/api\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport {\n ASSOCATION_PROPERTIES_KEY,\n ENTITY_NAME_KEY,\n WORKFLOW_NAME_KEY,\n AGENT_NAME_KEY,\n CONVERSATION_ID_KEY,\n} from \"./tracing\";\nimport { SpanAttributes } from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_CONVERSATION_ID,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport {\n transformAiSdkSpanAttributes,\n transformAiSdkSpanNames,\n} from \"./ai-sdk-transformations\";\nimport { parseKeyPairsIntoRecord } from \"./baggage-utils\";\n\nexport const ALL_INSTRUMENTATION_LIBRARIES = \"all\" as const;\ntype AllInstrumentationLibraries = typeof ALL_INSTRUMENTATION_LIBRARIES;\n\nconst spanAgentNames = new Map<\n string,\n { agentName: string; timestamp: number }\n>();\n\nconst SPAN_AGENT_NAME_TTL = 5 * 60 * 1000;\n\nconst AI_TELEMETRY_METADATA_AGENT = \"ai.telemetry.metadata.agent\";\n\nconst cleanupExpiredSpanAgentNames = (): void => {\n const now = Date.now();\n for (const [spanId, entry] of spanAgentNames.entries()) {\n if (now - entry.timestamp > SPAN_AGENT_NAME_TTL) {\n spanAgentNames.delete(spanId);\n }\n }\n};\n\nexport interface SpanProcessorOptions {\n /**\n * The API Key for sending traces data. Optional.\n * Defaults to the ANYWAY_API_KEY environment variable.\n */\n apiKey?: string;\n\n /**\n * The OTLP endpoint for sending traces data. Optional.\n * Defaults to ANYWAY_BASE_URL environment variable or https://api.traceloop.com/\n */\n baseUrl?: string;\n\n /**\n * Sends traces and spans without batching, for local development. Optional.\n * Defaults to false.\n */\n disableBatch?: boolean;\n\n /**\n * The OpenTelemetry SpanExporter to be used for sending traces data. Optional.\n * Defaults to the OTLP exporter.\n */\n exporter?: SpanExporter;\n\n /**\n * The headers to be sent with the traces data. Optional.\n */\n headers?: Record<string, string>;\n\n /**\n * The instrumentation libraries to be allowed in the traces. Optional.\n * Defaults to Traceloop instrumentation libraries.\n * If set to ALL_INSTRUMENTATION_LIBRARIES, all instrumentation libraries will be allowed.\n * If set to an array of instrumentation libraries, only traceloop instrumentation libraries and the specified instrumentation libraries will be allowed.\n */\n allowedInstrumentationLibraries?: string[] | AllInstrumentationLibraries;\n}\n\n/**\n * Creates a span processor with Traceloop's custom span handling logic.\n * This can be used independently of the full SDK initialization.\n *\n * @param options - Configuration options for the span processor\n * @returns A configured SpanProcessor instance\n */\nexport const createSpanProcessor = (\n options: SpanProcessorOptions,\n): SpanProcessor => {\n const url = `${options.baseUrl || process.env.ANYWAY_BASE_URL || \"https://api.traceloop.com\"}/v1/traces`;\n const headers =\n options.headers ||\n (process.env.ANYWAY_HEADERS\n ? parseKeyPairsIntoRecord(process.env.ANYWAY_HEADERS)\n : { Authorization: `Bearer ${options.apiKey}` });\n\n const traceExporter =\n options.exporter ??\n new OTLPTraceExporter({\n url,\n headers,\n });\n\n const spanProcessor = options.disableBatch\n ? new SimpleSpanProcessor(traceExporter)\n : new BatchSpanProcessor(traceExporter);\n\n // Store the original onEnd method\n const originalOnEnd = spanProcessor.onEnd.bind(spanProcessor);\n\n spanProcessor.onStart = onSpanStart;\n\n if (\n options.allowedInstrumentationLibraries === ALL_INSTRUMENTATION_LIBRARIES\n ) {\n spanProcessor.onEnd = onSpanEnd(originalOnEnd);\n } else {\n const instrumentationLibraries = [...traceloopInstrumentationLibraries];\n\n if (options.allowedInstrumentationLibraries) {\n instrumentationLibraries.push(...options.allowedInstrumentationLibraries);\n }\n\n spanProcessor.onEnd = onSpanEnd(originalOnEnd, instrumentationLibraries);\n }\n\n return spanProcessor;\n};\n\nexport const traceloopInstrumentationLibraries = [\n \"ai\",\n \"@anyway-sh/node-server-sdk\",\n \"@traceloop/instrumentation-openai\",\n \"@traceloop/instrumentation-langchain\",\n \"@traceloop/instrumentation-chroma\",\n \"@traceloop/instrumentation-anthropic\",\n \"@traceloop/instrumentation-llamaindex\",\n \"@traceloop/instrumentation-vertexai\",\n \"@traceloop/instrumentation-bedrock\",\n \"@traceloop/instrumentation-cohere\",\n \"@traceloop/instrumentation-pinecone\",\n \"@traceloop/instrumentation-qdrant\",\n \"@traceloop/instrumentation-together\",\n \"@traceloop/instrumentation-mcp\",\n];\n\nconst onSpanStart = (span: Span): void => {\n const workflowName = context.active().getValue(WORKFLOW_NAME_KEY);\n if (workflowName) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_WORKFLOW_NAME,\n workflowName as string,\n );\n }\n\n const entityName = context.active().getValue(ENTITY_NAME_KEY);\n if (entityName) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_PATH,\n entityName as string,\n );\n }\n\n let agentName = context.active().getValue(AGENT_NAME_KEY) as\n | string\n | undefined;\n\n if (!agentName) {\n const aiSdkAgent = span.attributes[AI_TELEMETRY_METADATA_AGENT];\n if (aiSdkAgent && typeof aiSdkAgent === \"string\") {\n agentName = aiSdkAgent;\n }\n }\n\n if (!agentName) {\n const parentSpanContext = (span as any).parentSpanContext;\n const parentSpanId = parentSpanContext?.spanId;\n if (\n parentSpanId &&\n parentSpanId !== \"0000000000000000\" &&\n spanAgentNames.has(parentSpanId)\n ) {\n agentName = spanAgentNames.get(parentSpanId)!.agentName;\n }\n }\n\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName);\n const spanId = span.spanContext().spanId;\n spanAgentNames.set(spanId, { agentName, timestamp: Date.now() });\n }\n\n // Check for conversation ID in context\n const conversationId = context.active().getValue(CONVERSATION_ID_KEY);\n if (conversationId) {\n span.setAttribute(ATTR_GEN_AI_CONVERSATION_ID, conversationId as string);\n }\n\n // Check for association properties in context (set by decorators or withAssociationProperties)\n const associationProperties = context\n .active()\n .getValue(ASSOCATION_PROPERTIES_KEY) as\n | { [name: string]: string }\n | undefined;\n\n if (associationProperties && Object.keys(associationProperties).length > 0) {\n for (const [key, value] of Object.entries(associationProperties)) {\n span.setAttribute(\n `${SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${key}`,\n value,\n );\n }\n }\n\n transformAiSdkSpanNames(span);\n};\n\n/**\n * Ensures span compatibility between OTel v1.x and v2.x for OTLP transformer\n */\nconst ensureSpanCompatibility = (span: ReadableSpan): ReadableSpan => {\n const spanAny = span as any;\n\n // If the span already has instrumentationLibrary, it's compatible (OTel v2.x)\n if (spanAny.instrumentationLibrary) {\n return span;\n }\n\n // If it has instrumentationScope but no instrumentationLibrary (OTel v1.x),\n // add instrumentationLibrary as an alias to prevent OTLP transformer errors\n if (spanAny.instrumentationScope) {\n // Create a proxy that provides both properties\n return new Proxy(span, {\n get(target, prop) {\n if (prop === \"instrumentationLibrary\") {\n return (target as any).instrumentationScope;\n }\n return (target as any)[prop];\n },\n }) as ReadableSpan;\n }\n\n // Fallback: add both properties with defaults\n return new Proxy(span, {\n get(target, prop) {\n if (\n prop === \"instrumentationLibrary\" ||\n prop === \"instrumentationScope\"\n ) {\n return {\n name: \"unknown\",\n version: undefined,\n schemaUrl: undefined,\n };\n }\n return (target as any)[prop];\n },\n }) as ReadableSpan;\n};\n\nconst onSpanEnd = (\n originalOnEnd: (span: ReadableSpan) => void,\n instrumentationLibraries?: string[],\n) => {\n return (span: ReadableSpan): void => {\n if (\n instrumentationLibraries &&\n !instrumentationLibraries.includes(\n (span as any).instrumentationScope?.name ||\n (span as any).instrumentationLibrary?.name,\n )\n ) {\n return;\n }\n\n transformAiSdkSpanAttributes(span);\n\n const spanId = span.spanContext().spanId;\n const parentSpanId = span.parentSpanContext?.spanId;\n let agentName = span.attributes[ATTR_GEN_AI_AGENT_NAME];\n\n if (agentName && typeof agentName === \"string\") {\n spanAgentNames.set(spanId, {\n agentName,\n timestamp: Date.now(),\n });\n } else if (\n parentSpanId &&\n parentSpanId !== \"0000000000000000\" &&\n spanAgentNames.has(parentSpanId)\n ) {\n agentName = spanAgentNames.get(parentSpanId)!.agentName;\n span.attributes[ATTR_GEN_AI_AGENT_NAME] = agentName;\n spanAgentNames.set(spanId, {\n agentName,\n timestamp: Date.now(),\n });\n }\n\n if (Math.random() < 0.01) {\n cleanupExpiredSpanAgentNames();\n }\n\n const compatibleSpan = ensureSpanCompatibility(span);\n\n originalOnEnd(compatibleSpan);\n };\n};\n","export interface ImageUploadResponse {\n url: string;\n}\n\nexport interface ImageUploadPayload {\n image_data: string;\n}\n\nexport class ImageUploader {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n async uploadBase64Image(\n traceId: string,\n spanId: string,\n imageName: string,\n base64ImageData: string,\n ): Promise<string> {\n try {\n const imageUrl = await this.getImageUrl(traceId, spanId, imageName);\n await this.uploadImageData(imageUrl, base64ImageData);\n return imageUrl;\n } catch (error) {\n console.error(\"Failed to upload image:\", error);\n throw error;\n }\n }\n\n private async getImageUrl(\n traceId: string,\n spanId: string,\n imageName: string,\n ): Promise<string> {\n const response = await fetch(\n `${this.baseUrl}/v2/traces/${traceId}/spans/${spanId}/images`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n image_name: imageName,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to get image URL: ${response.status} ${response.statusText}`,\n );\n }\n\n const result: ImageUploadResponse = await response.json();\n return result.url;\n }\n\n private async uploadImageData(\n url: string,\n base64ImageData: string,\n ): Promise<void> {\n const payload: ImageUploadPayload = {\n image_data: base64ImageData,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to upload image data: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n }\n}\n","import { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport { SpanProcessor } from \"@opentelemetry/sdk-trace-node\";\nimport { context, diag } from \"@opentelemetry/api\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { TraceExporter as GcpTraceExporter } from \"@google-cloud/opentelemetry-cloud-trace-exporter\";\nimport { Resource } from \"@opentelemetry/resources\";\nimport { ATTR_SERVICE_NAME } from \"@opentelemetry/semantic-conventions\";\nimport { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { InitializeOptions } from \"../interfaces\";\nimport { _configuration } from \"../configuration\";\nimport { CONTEXT_KEY_ALLOW_TRACE_CONTENT } from \"@traceloop/ai-semantic-conventions\";\nimport { AnthropicInstrumentation } from \"@traceloop/instrumentation-anthropic\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { LlamaIndexInstrumentation } from \"@traceloop/instrumentation-llamaindex\";\nimport {\n AIPlatformInstrumentation,\n VertexAIInstrumentation,\n} from \"@traceloop/instrumentation-vertexai\";\nimport { BedrockInstrumentation } from \"@traceloop/instrumentation-bedrock\";\nimport { CohereInstrumentation } from \"@traceloop/instrumentation-cohere\";\nimport { PineconeInstrumentation } from \"@traceloop/instrumentation-pinecone\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport { ChromaDBInstrumentation } from \"@traceloop/instrumentation-chromadb\";\nimport { QdrantInstrumentation } from \"@traceloop/instrumentation-qdrant\";\nimport { TogetherInstrumentation } from \"@traceloop/instrumentation-together\";\nimport { McpInstrumentation } from \"@traceloop/instrumentation-mcp\";\nimport {\n ALL_INSTRUMENTATION_LIBRARIES,\n createSpanProcessor,\n} from \"./span-processor\";\nimport { parseKeyPairsIntoRecord } from \"./baggage-utils\";\nimport { ImageUploader } from \"../images\";\n\nlet _sdk: NodeSDK;\nlet _spanProcessor: SpanProcessor;\nlet openAIInstrumentation: OpenAIInstrumentation | undefined;\nlet anthropicInstrumentation: AnthropicInstrumentation | undefined;\nlet cohereInstrumentation: CohereInstrumentation | undefined;\nlet vertexaiInstrumentation: VertexAIInstrumentation | undefined;\nlet aiplatformInstrumentation: AIPlatformInstrumentation | undefined;\nlet bedrockInstrumentation: BedrockInstrumentation | undefined;\nlet langchainInstrumentation: LangChainInstrumentation | undefined;\nlet llamaIndexInstrumentation: LlamaIndexInstrumentation | undefined;\nlet pineconeInstrumentation: PineconeInstrumentation | undefined;\nlet chromadbInstrumentation: ChromaDBInstrumentation | undefined;\nlet qdrantInstrumentation: QdrantInstrumentation | undefined;\nlet togetherInstrumentation: TogetherInstrumentation | undefined;\nlet mcpInstrumentation: McpInstrumentation | undefined;\n\nconst instrumentations: Instrumentation[] = [];\n\nexport const initInstrumentations = (apiKey?: string, baseUrl?: string) => {\n const exceptionLogger = (e: Error) => {\n console.debug(\"[Traceloop] Instrumentation exception:\", e.message);\n };\n const enrichTokens =\n (process.env.ANYWAY_ENRICH_TOKENS || \"true\").toLowerCase() === \"true\";\n\n // Create image upload callback if we have credentials\n let uploadBase64ImageCallback;\n if (apiKey && baseUrl) {\n const imageUploader = new ImageUploader(baseUrl, apiKey);\n uploadBase64ImageCallback =\n imageUploader.uploadBase64Image.bind(imageUploader);\n }\n\n // Create or update OpenAI instrumentation\n if (openAIInstrumentation) {\n // Update existing instrumentation with new callback\n openAIInstrumentation.setConfig({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n } else {\n // Create new instrumentation\n openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n instrumentations.push(openAIInstrumentation);\n }\n\n if (!anthropicInstrumentation) {\n anthropicInstrumentation = new AnthropicInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(anthropicInstrumentation);\n }\n\n cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });\n instrumentations.push(cohereInstrumentation);\n\n vertexaiInstrumentation = new VertexAIInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(vertexaiInstrumentation);\n\n aiplatformInstrumentation = new AIPlatformInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(aiplatformInstrumentation);\n\n bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger });\n instrumentations.push(bedrockInstrumentation);\n\n pineconeInstrumentation = new PineconeInstrumentation({ exceptionLogger });\n instrumentations.push(pineconeInstrumentation);\n\n langchainInstrumentation = new LangChainInstrumentation({ exceptionLogger });\n instrumentations.push(langchainInstrumentation);\n\n llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(llamaIndexInstrumentation);\n\n chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger });\n instrumentations.push(chromadbInstrumentation);\n\n qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });\n instrumentations.push(qdrantInstrumentation);\n\n togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger });\n instrumentations.push(togetherInstrumentation);\n\n mcpInstrumentation = new McpInstrumentation({ exceptionLogger });\n instrumentations.push(mcpInstrumentation);\n};\n\nexport const manuallyInitInstrumentations = (\n instrumentModules: InitializeOptions[\"instrumentModules\"],\n apiKey?: string,\n baseUrl?: string,\n) => {\n const exceptionLogger = (e: Error) => {\n console.debug(\"[Traceloop] Instrumentation exception:\", e.message);\n };\n const enrichTokens =\n (process.env.ANYWAY_ENRICH_TOKENS || \"true\").toLowerCase() === \"true\";\n\n // Create image upload callback if we have credentials\n let uploadBase64ImageCallback;\n if (apiKey && baseUrl) {\n const imageUploader = new ImageUploader(baseUrl, apiKey);\n uploadBase64ImageCallback =\n imageUploader.uploadBase64Image.bind(imageUploader);\n }\n\n // Clear the instrumentations array that was initialized by default\n instrumentations.length = 0;\n\n if (instrumentModules?.openAI) {\n openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.openAI);\n }\n\n if (instrumentModules?.anthropic) {\n anthropicInstrumentation = new AnthropicInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(anthropicInstrumentation);\n anthropicInstrumentation.manuallyInstrument(instrumentModules.anthropic);\n }\n\n if (instrumentModules?.cohere) {\n cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });\n instrumentations.push(cohereInstrumentation);\n cohereInstrumentation.manuallyInstrument(instrumentModules.cohere);\n }\n\n if (instrumentModules?.google_vertexai) {\n vertexaiInstrumentation = new VertexAIInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(vertexaiInstrumentation);\n vertexaiInstrumentation.manuallyInstrument(\n instrumentModules.google_vertexai,\n );\n }\n\n if (instrumentModules?.google_aiplatform) {\n aiplatformInstrumentation = new AIPlatformInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(aiplatformInstrumentation);\n aiplatformInstrumentation.manuallyInstrument(\n instrumentModules.google_aiplatform,\n );\n }\n\n if (instrumentModules?.bedrock) {\n bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger });\n instrumentations.push(bedrockInstrumentation);\n bedrockInstrumentation.manuallyInstrument(instrumentModules.bedrock);\n }\n\n if (instrumentModules?.pinecone) {\n const instrumentation = new PineconeInstrumentation({ exceptionLogger });\n instrumentations.push(instrumentation as Instrumentation);\n instrumentation.manuallyInstrument(instrumentModules.pinecone);\n }\n\n // Always enable LangChain instrumentation\n langchainInstrumentation = new LangChainInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(langchainInstrumentation);\n\n if (instrumentModules?.llamaIndex) {\n llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(llamaIndexInstrumentation);\n llamaIndexInstrumentation.manuallyInstrument(instrumentModules.llamaIndex);\n }\n\n if (instrumentModules?.chromadb) {\n chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger });\n instrumentations.push(chromadbInstrumentation);\n chromadbInstrumentation.manuallyInstrument(instrumentModules.chromadb);\n }\n\n if (instrumentModules?.qdrant) {\n qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });\n instrumentations.push(qdrantInstrumentation);\n qdrantInstrumentation.manuallyInstrument(instrumentModules.qdrant);\n }\n\n if (instrumentModules?.together) {\n togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger });\n instrumentations.push(togetherInstrumentation);\n togetherInstrumentation.manuallyInstrument(instrumentModules.together);\n }\n\n if (instrumentModules?.mcp) {\n mcpInstrumentation = new McpInstrumentation({ exceptionLogger });\n instrumentations.push(mcpInstrumentation);\n mcpInstrumentation.manuallyInstrument(instrumentModules.mcp);\n }\n};\n\n/**\n * Initializes the Traceloop SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions} for details.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch feature data.\n */\nexport const startTracing = (options: InitializeOptions) => {\n const apiKey = options.apiKey || process.env.ANYWAY_API_KEY;\n const baseUrl =\n options.baseUrl ||\n process.env.ANYWAY_BASE_URL ||\n \"https://api.traceloop.com\";\n\n if (Object.keys(options.instrumentModules || {}).length > 0) {\n manuallyInitInstrumentations(options.instrumentModules, apiKey, baseUrl);\n } else {\n // Initialize default instrumentations if no manual modules specified\n initInstrumentations(apiKey, baseUrl);\n }\n if (!shouldSendTraces()) {\n openAIInstrumentation?.setConfig({\n traceContent: false,\n });\n llamaIndexInstrumentation?.setConfig({\n traceContent: false,\n });\n vertexaiInstrumentation?.setConfig({\n traceContent: false,\n });\n aiplatformInstrumentation?.setConfig({\n traceContent: false,\n });\n bedrockInstrumentation?.setConfig({\n traceContent: false,\n });\n cohereInstrumentation?.setConfig({\n traceContent: false,\n });\n chromadbInstrumentation?.setConfig({\n traceContent: false,\n });\n togetherInstrumentation?.setConfig({\n traceContent: false,\n });\n }\n\n const headers =\n options.headers ||\n (process.env.ANYWAY_HEADERS\n ? parseKeyPairsIntoRecord(process.env.ANYWAY_HEADERS)\n : { Authorization: `Bearer ${options.apiKey}` });\n\n const traceExporter =\n options.exporter ??\n (options.gcpProjectId\n ? new GcpTraceExporter({ projectId: options.gcpProjectId })\n : new OTLPTraceExporter({\n url: `${baseUrl}/v1/traces`,\n headers,\n }));\n\n _spanProcessor = createSpanProcessor({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n disableBatch: options.disableBatch,\n exporter: traceExporter,\n headers,\n allowedInstrumentationLibraries: ALL_INSTRUMENTATION_LIBRARIES,\n });\n\n const spanProcessors: SpanProcessor[] = [_spanProcessor];\n if (options.processor) {\n spanProcessors.push(options.processor);\n }\n\n const resource = createResource({\n [ATTR_SERVICE_NAME]:\n options.appName || process.env.npm_package_name || \"unknown_service\",\n });\n\n _sdk = new NodeSDK({\n resource,\n spanProcessors,\n contextManager: options.contextManager,\n textMapPropagator: options.propagator,\n traceExporter,\n instrumentations,\n // We should re-consider removing irrelevant spans here in the future\n // sampler: new TraceloopSampler(),\n });\n\n _sdk.start();\n};\n\nexport const shouldSendTraces = () => {\n if (!_configuration) {\n diag.warn(\"Traceloop not initialized\");\n return false;\n }\n\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n if (\n _configuration.traceContent === false ||\n (process.env.ANYWAY_TRACE_CONTENT || \"true\").toLowerCase() === \"false\"\n ) {\n return false;\n }\n\n return true;\n};\n\nexport const forceFlush = async () => {\n await _spanProcessor.forceFlush();\n};\n\n// Compatibility function for creating resources that works with both OTel v1.x and v2.x\nfunction createResource(attributes: Record<string, any>): Resource {\n // Import the resource module at runtime to handle both v1.x and v2.x\n const resourcesModule = require(\"@opentelemetry/resources\");\n\n // Try to use resourceFromAttributes if it exists (OTel v2.x)\n if (resourcesModule.resourceFromAttributes) {\n return resourcesModule.resourceFromAttributes(attributes);\n }\n\n // Fallback to constructor for OTel v1.x\n return new resourcesModule.Resource(attributes);\n}\n","import { InitializeOptions } from \"../interfaces\";\nimport fetch from \"cross-fetch\";\nimport fetchBuilder from \"fetch-retry\";\n\nconst fetchRetry = fetchBuilder(fetch);\n\nexport const fetchPrompts = async (options: InitializeOptions) => {\n const { apiKey, baseUrl, traceloopSyncMaxRetries } = options;\n\n const response = await fetchRetry(`${baseUrl}/v1/traceloop/prompts`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n \"X-Traceloop-SDK-Version\": \"0.0.30\",\n },\n retries: traceloopSyncMaxRetries,\n retryOn: function (attempt: any, error: any, response: any) {\n if (attempt >= traceloopSyncMaxRetries!) return false;\n if (response?.status && response.status >= 500) {\n return true;\n }\n return false;\n },\n retryDelay: function (attempt: any) {\n return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000\n },\n });\n\n return await response.json();\n};\n","import { InitializeOptions, Prompt } from \"../interfaces\";\nimport { InitializationError, PromptNotFoundError } from \"../errors\";\nimport { fetchPrompts } from \"./fetch\";\nimport { diag } from \"@opentelemetry/api\";\n\nconst _prompts: Record<string, Prompt> = {};\nlet _initialized = false;\nlet _initializedPromise: Promise<boolean>;\n\n/**\n * Returns true once SDK prompt registry has been initialized, else rejects with an error.\n * @returns Promise<boolean>\n */\nexport const waitForInitialization = async () => {\n if (_initialized) {\n return true;\n }\n return await _initializedPromise;\n};\n\nexport const getPromptByKey = (key: string) => {\n if (!_prompts[key]) {\n throw new PromptNotFoundError(key);\n }\n return _prompts[key];\n};\n\nconst populateRegistry = (prompts: unknown[]) => {\n prompts?.forEach((prompt: unknown) => {\n _prompts[(prompt as any).key] = prompt as any;\n });\n};\n\nexport const initializeRegistry = (options: InitializeOptions) => {\n const {\n baseUrl,\n traceloopSyncEnabled,\n traceloopSyncPollingInterval,\n traceloopSyncDevPollingInterval,\n } = options;\n\n if (!traceloopSyncEnabled || !baseUrl?.includes(\"traceloop\")) return;\n\n let pollingInterval = traceloopSyncPollingInterval;\n\n _initializedPromise = fetchPrompts(options)\n .then(({ prompts, environment }) => {\n if (environment === \"dev\") {\n pollingInterval = traceloopSyncDevPollingInterval;\n }\n populateRegistry(prompts);\n _initialized = true;\n\n setInterval(async () => {\n try {\n const { prompts } = await fetchPrompts(options);\n populateRegistry(prompts);\n } catch (err) {\n diag.error(\"Failed to fetch prompt data\", err);\n }\n }, pollingInterval! * 1000).unref();\n\n return true;\n })\n .catch((e) => {\n throw new InitializationError(\n \"Failed to fetch prompt data to initialize Traceloop SDK\",\n e,\n );\n });\n};\n","import { InitializeOptions } from \"../interfaces\";\nimport { validateConfiguration } from \"./validation\";\nimport { startTracing } from \"../tracing\";\nimport { initializeRegistry } from \"../prompts/registry\";\nimport { diag, DiagConsoleLogger, DiagLogLevel } from \"@opentelemetry/api\";\nimport { TraceloopClient } from \"../client/traceloop-client\";\n\nexport let _configuration: InitializeOptions | undefined;\nlet _client: TraceloopClient | undefined;\n\n/**\n * Initializes the Traceloop SDK and creates a singleton client instance if API key is provided.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions} for details.\n * @returns TraceloopClient - The singleton client instance if API key is provided, otherwise undefined.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch feature data.\n *\n * @example\n * ```typescript\n * initialize({\n * apiKey: 'your-api-key',\n * appName: 'your-app',\n * });\n * ```\n */\nexport const initialize = (options: InitializeOptions = {}) => {\n if (_configuration) {\n return;\n }\n\n if (!options.baseUrl) {\n options.baseUrl =\n process.env.ANYWAY_BASE_URL || \"https://api.traceloop.com\";\n }\n if (!options.apiKey) {\n options.apiKey = process.env.ANYWAY_API_KEY;\n }\n if (!options.appName) {\n options.appName = process.env.npm_package_name;\n }\n if (!options.experimentSlug) {\n options.experimentSlug = process.env.ANYWAY_EXP_SLUG;\n }\n\n if (options.traceloopSyncEnabled === undefined) {\n if (process.env.ANYWAY_SYNC_ENABLED !== undefined) {\n options.traceloopSyncEnabled = [\"1\", \"true\"].includes(\n process.env.ANYWAY_SYNC_ENABLED.toLowerCase(),\n );\n } else {\n options.traceloopSyncEnabled = true;\n }\n }\n\n if (options.traceloopSyncEnabled) {\n if (!options.traceloopSyncMaxRetries) {\n options.traceloopSyncMaxRetries =\n Number(process.env.ANYWAY_SYNC_MAX_RETRIES) || 3;\n }\n\n if (!options.traceloopSyncPollingInterval) {\n options.traceloopSyncPollingInterval =\n Number(process.env.ANYWAY_SYNC_POLLING_INTERVAL) || 60;\n }\n\n if (!options.traceloopSyncDevPollingInterval) {\n options.traceloopSyncDevPollingInterval =\n Number(process.env.ANYWAY_SYNC_DEV_POLLING_INTERVAL) || 5;\n }\n }\n\n validateConfiguration(options);\n\n _configuration = Object.freeze(options);\n\n if (!options.silenceInitializationMessage) {\n console.log(\n `Traceloop exporting traces to ${\n _configuration.exporter ? \"a custom exporter\" : _configuration.baseUrl\n }`,\n );\n }\n\n if (options.tracingEnabled === undefined || options.tracingEnabled) {\n if (options.logLevel) {\n diag.setLogger(\n new DiagConsoleLogger(),\n logLevelToOtelLogLevel(options.logLevel),\n );\n }\n\n startTracing(_configuration);\n }\n\n initializeRegistry(_configuration);\n if (options.apiKey) {\n _client = new TraceloopClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n appName: options.appName!,\n experimentSlug: options.experimentSlug,\n });\n return _client;\n }\n return;\n};\n\nconst logLevelToOtelLogLevel = (\n logLevel: \"debug\" | \"info\" | \"warn\" | \"error\",\n) => {\n switch (logLevel) {\n case \"debug\":\n return DiagLogLevel.DEBUG;\n case \"info\":\n return DiagLogLevel.INFO;\n case \"warn\":\n return DiagLogLevel.WARN;\n case \"error\":\n return DiagLogLevel.ERROR;\n }\n};\n\n/**\n * Gets the singleton instance of the TraceloopClient.\n * The SDK must be initialized with an API key before calling this function.\n *\n * @returns The TraceloopClient singleton instance\n * @throws {Error} if the SDK hasn't been initialized or was initialized without an API key\n *\n * @example\n * ```typescript\n * const client = getClient();\n * await client.annotation.create({ annotationTask: 'taskId', entityInstanceId: 'entityId', tags: { score: 0.9 } });\n * ```\n */\nexport const getClient = (): TraceloopClient => {\n if (!_client) {\n throw new Error(\n \"Traceloop must be initialized before getting client, Call initialize() first.\" +\n \"If you already called initialize(), make sure you have an api key.\",\n );\n }\n return _client;\n};\n","import { Span, context } from \"@opentelemetry/api\";\nimport { suppressTracing } from \"@opentelemetry/core\";\nimport {\n AGENT_NAME_KEY,\n ASSOCATION_PROPERTIES_KEY,\n CONVERSATION_ID_KEY,\n ENTITY_NAME_KEY,\n getEntityPath,\n getTracer,\n WORKFLOW_NAME_KEY,\n} from \"./tracing\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n SpanAttributes,\n TraceloopSpanKindValues,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_CONVERSATION_ID,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport { shouldSendTraces } from \".\";\n\nexport type DecoratorConfig = {\n name: string;\n version?: number;\n associationProperties?: { [name: string]: string };\n conversationId?: string;\n traceContent?: boolean;\n inputParameters?: unknown[];\n suppressTracing?: boolean;\n};\n\nfunction withEntity<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n type: TraceloopSpanKindValues,\n {\n name,\n version,\n associationProperties,\n conversationId,\n traceContent: overrideTraceContent,\n inputParameters,\n suppressTracing: shouldSuppressTracing,\n }: DecoratorConfig,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n) {\n let entityContext = context.active();\n if (\n type === TraceloopSpanKindValues.WORKFLOW ||\n type === TraceloopSpanKindValues.AGENT\n ) {\n entityContext = entityContext.setValue(WORKFLOW_NAME_KEY, name);\n }\n\n if (type === TraceloopSpanKindValues.AGENT) {\n entityContext = entityContext.setValue(AGENT_NAME_KEY, name);\n }\n\n const entityPath = getEntityPath(entityContext);\n if (\n type === TraceloopSpanKindValues.TOOL ||\n type === TraceloopSpanKindValues.TASK\n ) {\n const fullEntityName = entityPath ? `${entityPath}.${name}` : name;\n entityContext = entityContext.setValue(ENTITY_NAME_KEY, fullEntityName);\n }\n\n if (overrideTraceContent != undefined) {\n entityContext = entityContext.setValue(\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n overrideTraceContent,\n );\n }\n if (associationProperties) {\n entityContext = entityContext.setValue(\n ASSOCATION_PROPERTIES_KEY,\n associationProperties,\n );\n }\n if (conversationId) {\n entityContext = entityContext.setValue(CONVERSATION_ID_KEY, conversationId);\n }\n\n if (shouldSuppressTracing) {\n entityContext = suppressTracing(entityContext);\n }\n\n return context.with(entityContext, () =>\n getTracer().startActiveSpan(\n `${name}.${type}`,\n {},\n entityContext,\n async (span: Span) => {\n if (\n type === TraceloopSpanKindValues.WORKFLOW ||\n type === TraceloopSpanKindValues.AGENT\n ) {\n span.setAttribute(SpanAttributes.TRACELOOP_WORKFLOW_NAME, name);\n }\n span.setAttribute(SpanAttributes.TRACELOOP_ENTITY_NAME, name);\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_PATH,\n entityPath || \"\",\n );\n span.setAttribute(SpanAttributes.TRACELOOP_SPAN_KIND, type);\n\n // Set agent name on all spans when there's an active agent context\n const agentName = entityContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n // Set conversation ID on all spans when there's an active conversation context\n const conversationId = entityContext.getValue(CONVERSATION_ID_KEY);\n if (conversationId) {\n span.setAttribute(\n ATTR_GEN_AI_CONVERSATION_ID,\n conversationId as string,\n );\n }\n\n if (version) {\n span.setAttribute(SpanAttributes.TRACELOOP_ENTITY_VERSION, version);\n }\n\n if (shouldSendTraces()) {\n try {\n const input = inputParameters ?? args;\n if (\n input.length === 1 &&\n typeof input[0] === \"object\" &&\n !(input[0] instanceof Map)\n ) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_INPUT,\n serialize({ args: [], kwargs: input[0] }),\n );\n } else {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_INPUT,\n serialize({\n args: input,\n kwargs: {},\n }),\n );\n }\n } catch (error) {\n console.debug(\"Error setting input attributes\", error);\n }\n }\n\n const res = fn.apply(thisArg, args);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n try {\n if (shouldSendTraces()) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_OUTPUT,\n serialize(resolvedRes),\n );\n }\n } catch (error) {\n console.debug(\"Error setting output attributes\", error);\n } finally {\n span.end();\n }\n\n return resolvedRes;\n });\n }\n try {\n if (shouldSendTraces()) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_OUTPUT,\n serialize(res),\n );\n }\n } catch (error) {\n console.debug(\"Error setting output attributes\", error);\n } finally {\n span.end();\n }\n\n return res;\n },\n ),\n );\n}\n\nexport function withWorkflow<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.WORKFLOW,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withTask<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.TASK,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withAgent<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.AGENT,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withTool<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.TOOL,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nfunction entity(\n type: TraceloopSpanKindValues,\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return function (\n target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConfig;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const entityName = actualConfig.name ?? originalMethod.name;\n\n return withEntity(\n type,\n { ...actualConfig, name: entityName },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\nexport function workflow(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.WORKFLOW, config ?? {});\n}\n\nexport function task(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.TASK, config ?? {});\n}\n\nexport function agent(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.AGENT, config ?? {});\n}\n\nexport function tool(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.TOOL, config ?? {});\n}\n\nexport function withConversation<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(conversationId: string, fn: F, thisArg?: ThisParameterType<F>, ...args: A) {\n const conversationContext = context\n .active()\n .setValue(CONVERSATION_ID_KEY, conversationId);\n\n return context.with(conversationContext, () =>\n withEntity(\n TraceloopSpanKindValues.WORKFLOW,\n { name: `conversation.${conversationId}` },\n fn,\n thisArg,\n ...args,\n ),\n );\n}\n\nexport function conversation(\n conversationId:\n | string\n | ((thisArg: unknown, ...funcArgs: unknown[]) => string),\n) {\n return function (\n target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConversationId: string;\n\n if (typeof conversationId === \"function\") {\n actualConversationId = conversationId(this, ...args);\n } else {\n actualConversationId = conversationId;\n }\n\n return withConversation(\n actualConversationId,\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\nfunction cleanInput(input: unknown): unknown {\n if (input instanceof Map) {\n return Array.from(input.entries());\n } else if (Array.isArray(input)) {\n return input.map((value) => cleanInput(value));\n } else if (!input) {\n return input;\n } else if (typeof input === \"object\") {\n // serialize object one by one\n const output: any = {};\n Object.entries(input as any).forEach(([key, value]) => {\n output[key] = cleanInput(value);\n });\n return output;\n }\n\n return input;\n}\n\nfunction serialize(input: unknown): string {\n return JSON.stringify(cleanInput(input));\n}\n","import { Span, context, trace } from \"@opentelemetry/api\";\nimport { getTracer, AGENT_NAME_KEY } from \"./tracing\";\nimport {\n Events,\n EventAttributes,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_COMPLETION,\n ATTR_GEN_AI_PROMPT,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport { shouldSendTraces } from \".\";\n\ntype VectorDBCallConfig = {\n vendor: string;\n type: \"query\" | \"upsert\" | \"delete\";\n};\n\ntype LLMCallConfig = {\n vendor: string;\n type: \"chat\" | \"completion\";\n};\n\nexport class VectorSpan {\n private span: Span;\n\n constructor(span: Span) {\n this.span = span;\n }\n\n reportQuery({ queryVector }: { queryVector: number[] }) {\n if (!shouldSendTraces()) {\n this.span.addEvent(Events.DB_QUERY_EMBEDDINGS);\n }\n\n this.span.addEvent(Events.DB_QUERY_EMBEDDINGS, {\n [EventAttributes.DB_QUERY_EMBEDDINGS_VECTOR]: JSON.stringify(queryVector),\n });\n }\n\n reportResults({\n results,\n }: {\n results: {\n ids?: string;\n scores?: number;\n distances?: number;\n metadata?: Record<string, unknown>;\n vectors?: number[];\n documents?: string;\n }[];\n }) {\n for (let i = 0; i < results.length; i++) {\n this.span.addEvent(Events.DB_QUERY_RESULT, {\n [EventAttributes.DB_QUERY_RESULT_ID]: results[i].ids,\n [EventAttributes.DB_QUERY_RESULT_SCORE]: results[i].scores,\n [EventAttributes.DB_QUERY_RESULT_DISTANCE]: results[i].distances,\n [EventAttributes.DB_QUERY_RESULT_METADATA]: JSON.stringify(\n results[i].metadata,\n ),\n [EventAttributes.DB_QUERY_RESULT_VECTOR]: results[i].vectors,\n [EventAttributes.DB_QUERY_RESULT_DOCUMENT]: results[i].documents,\n });\n }\n }\n}\n\nexport class LLMSpan {\n private span: Span;\n\n constructor(span: Span) {\n this.span = span;\n }\n\n reportRequest({\n model,\n messages,\n }: {\n model: string;\n messages: {\n role: string;\n content?: string | unknown;\n }[];\n }) {\n this.span.setAttributes({\n [ATTR_GEN_AI_REQUEST_MODEL]: model,\n });\n\n messages.forEach((message, index) => {\n this.span.setAttributes({\n [`${ATTR_GEN_AI_PROMPT}.${index}.role`]: message.role,\n [`${ATTR_GEN_AI_PROMPT}.${index}.content`]:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n });\n });\n }\n\n reportResponse({\n model,\n usage,\n completions,\n }: {\n model: string;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n completions?: {\n finish_reason: string;\n message: {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | null;\n };\n }[];\n }) {\n this.span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, model);\n\n if (usage) {\n this.span.setAttributes({\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: usage.prompt_tokens,\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: usage.completion_tokens,\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: usage.total_tokens,\n });\n }\n\n completions?.forEach((completion, index) => {\n this.span.setAttributes({\n [`${ATTR_GEN_AI_COMPLETION}.${index}.finish_reason`]:\n completion.finish_reason,\n [`${ATTR_GEN_AI_COMPLETION}.${index}.role`]: completion.message.role,\n [`${ATTR_GEN_AI_COMPLETION}.${index}.content`]:\n completion.message.content || \"\",\n });\n });\n }\n}\n\nexport function withVectorDBCall<\n F extends ({ span }: { span: VectorSpan }) => ReturnType<F>,\n>({ vendor, type }: VectorDBCallConfig, fn: F, thisArg?: ThisParameterType<F>) {\n const entityContext = context.active();\n\n return getTracer().startActiveSpan(\n `${vendor}.${type}`,\n { [SpanAttributes.LLM_REQUEST_TYPE]: type },\n entityContext,\n (span: Span) => {\n // Set agent name if there's an active agent context\n const agentName = entityContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n const res = fn.apply(thisArg, [{ span: new VectorSpan(span) }]);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n span.end();\n return resolvedRes;\n });\n }\n\n span.end();\n return res;\n },\n );\n}\n\nexport function withLLMCall<\n F extends ({ span }: { span: LLMSpan }) => ReturnType<F>,\n>({ vendor, type }: LLMCallConfig, fn: F, thisArg?: ThisParameterType<F>) {\n const currentContext = context.active();\n const span = getTracer().startSpan(`${vendor}.${type}`, {}, currentContext);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, type);\n\n // Set agent name if there's an active agent context\n const agentName = currentContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n trace.setSpan(currentContext, span);\n\n const res = fn.apply(thisArg, [{ span: new LLMSpan(span) }]);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n span.end();\n return resolvedRes;\n });\n }\n\n span.end();\n return res;\n}\n","import { context } from \"@opentelemetry/api\";\nimport { ASSOCATION_PROPERTIES_KEY } from \"./tracing\";\n\nexport function withAssociationProperties<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n properties: { [name: string]: string },\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n) {\n if (Object.keys(properties).length === 0) {\n return fn.apply(thisArg, args);\n }\n\n const newContext = context\n .active()\n .setValue(ASSOCATION_PROPERTIES_KEY, properties);\n return context.with(newContext, fn, thisArg, ...args);\n}\n","import { context, diag, trace } from \"@opentelemetry/api\";\n\n/**\n * Reports a custom metric to the current active span.\n *\n * This function allows you to add a custom metric to the current span in the trace.\n * If there is no active span, a warning will be logged.\n *\n * @param {string} metricName - The name of the custom metric.\n * @param {number} metricValue - The numeric value of the custom metric.\n *\n * @example\n * reportCustomMetric('processing_time', 150);\n */\nexport const reportCustomMetric = (metricName: string, metricValue: number) => {\n const currentContext = context.active();\n const currentSpan = trace.getSpan(currentContext);\n\n if (currentSpan) {\n currentSpan.setAttribute(\n `traceloop.custom_metric.${metricName}`,\n metricValue,\n );\n } else {\n diag.warn(`No active span found to report custom metric: ${metricName}`);\n }\n};\n","export const TEMPLATING_ENGINE = {\n JINJA2: \"jinja2\",\n} as const;\n\nexport type TemplatingEngine =\n (typeof TEMPLATING_ENGINE)[keyof typeof TEMPLATING_ENGINE];\n\nexport type Content =\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } };\n\nexport interface PromptMessage {\n index: number;\n template: string | Content[];\n role: string;\n variables: string[];\n}\n\nexport interface RenderedMessage {\n role: string;\n content: string | Content[];\n}\n\nexport interface PromptTarget {\n id: string;\n environment: string;\n version: string;\n updated_at: string;\n}\n\nexport interface PromptVersion {\n templating_engine: TemplatingEngine;\n provider: string;\n messages: PromptMessage[];\n id: string;\n hash: string;\n version: number;\n name?: string;\n updated_at: string;\n created_at: string;\n author?: string;\n publishable: boolean;\n llm_config: any;\n}\n\nexport interface Prompt {\n id: string;\n org_id: string;\n key: string;\n updated_at: string;\n created_at: string;\n versions: PromptVersion[];\n target: PromptTarget;\n}\n","import { TraceloopError } from \"../errors\";\nimport {\n PromptVersion,\n RenderedMessage,\n TEMPLATING_ENGINE,\n} from \"../interfaces\";\nimport { Environment } from \"nunjucks\";\n\nconst env = new Environment(null, {\n throwOnUndefined: true, // throw error if param not found\n});\n\nexport const renderMessages = (\n promptVersion: PromptVersion,\n variables: Record<string, any>,\n): RenderedMessage[] => {\n if (promptVersion.templating_engine === TEMPLATING_ENGINE.JINJA2) {\n return promptVersion.messages.map((message) => {\n try {\n if (typeof message.template === \"string\") {\n return {\n content: env.renderString(message.template, variables),\n role: message.role,\n };\n } else {\n return {\n content: message.template.map((content) => {\n if (content.type === \"text\") {\n return {\n type: \"text\",\n text: env.renderString(content.text, variables),\n };\n } else {\n return content;\n }\n }),\n role: message.role,\n };\n }\n } catch (err) {\n throw new TraceloopError(\n `Failed to render message template. Missing variables?`,\n );\n }\n });\n } else {\n throw new TraceloopError(\n `Templating engine ${promptVersion.templating_engine} is not supported`,\n );\n }\n};\n","import { TraceloopError } from \"../errors\";\nimport { Prompt, PromptVersion } from \"../interfaces\";\nimport { getPromptByKey } from \"./registry\";\nimport { renderMessages } from \"./template\";\nexport { waitForInitialization } from \"./registry\";\n\nconst getEffectiveVersion = (prompt: Prompt): PromptVersion => {\n const version = prompt.versions.find(\n (v: PromptVersion) => v.id === prompt.target.version,\n );\n if (!version) {\n throw new TraceloopError(\n `Prompt version ${prompt.target.version} not found`,\n );\n }\n return version;\n};\n\nconst managedPromptTracingAttributes = (\n prompt: Prompt,\n promptVersion: PromptVersion,\n variables: Record<string, string>,\n) => {\n const variableAttributes = Object.keys(variables).reduce(\n (acc, key) => {\n acc[`traceloop.prompt.template_variables.${key}`] = variables[key];\n return acc;\n },\n {} as Record<string, string>,\n );\n\n return {\n \"traceloop.prompt.key\": prompt.key,\n \"traceloop.prompt.version\": promptVersion.version,\n \"traceloop.prompt.version_hash\": promptVersion.hash,\n \"traceloop.prompt.version_name\": promptVersion.name,\n ...variableAttributes,\n };\n};\n\nexport const getPrompt = (key: string, variables: Record<string, string>) => {\n const prompt = getPromptByKey(key);\n const promptVersion = getEffectiveVersion(prompt);\n\n let result: any = {}; //TODO - SDK needs to do work specific to each vendor/model? maybe we do this in the backend?\n if (promptVersion.llm_config.mode === \"completion\") {\n const message = renderMessages(promptVersion, variables);\n result = {\n ...promptVersion.llm_config,\n prompt: message?.[0]?.content,\n };\n } else {\n result = {\n messages: renderMessages(promptVersion, variables),\n ...promptVersion.llm_config,\n };\n }\n if (result?.[\"stop\"].length === 0) delete result[\"stop\"];\n delete result[\"mode\"];\n\n result.extraAttributes = managedPromptTracingAttributes(\n prompt,\n promptVersion,\n variables,\n );\n\n return result;\n};\n","/**\n * Standard association properties for tracing.\n * Use these with withAssociationProperties() or decorator associationProperties config.\n *\n * @example\n * ```typescript\n * // With withAssociationProperties\n * await traceloop.withAssociationProperties(\n * {\n * [traceloop.AssociationProperty.USER_ID]: \"12345\",\n * [traceloop.AssociationProperty.SESSION_ID]: \"session-abc\"\n * },\n * async () => {\n * await chat();\n * }\n * );\n *\n * // With decorator\n * @traceloop.workflow((thisArg) => ({\n * name: \"my_workflow\",\n * associationProperties: {\n * [traceloop.AssociationProperty.USER_ID]: (thisArg as MyClass).userId,\n * },\n * }))\n * ```\n */\nexport enum AssociationProperty {\n CUSTOMER_ID = \"customer_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n}\n"],"names":["mime","fs","path","Papa","createContextKey","trace","ATTR_GEN_AI_COMPLETION","ATTR_GEN_AI_OUTPUT_MESSAGES","SpanAttributes","ATTR_GEN_AI_PROMPT","ATTR_GEN_AI_INPUT_MESSAGES","ATTR_GEN_AI_USAGE_INPUT_TOKENS","ATTR_GEN_AI_USAGE_OUTPUT_TOKENS","ATTR_GEN_AI_SYSTEM","ATTR_GEN_AI_PROVIDER_NAME","ATTR_GEN_AI_OPERATION_NAME","ATTR_GEN_AI_REQUEST_MODEL","ATTR_GEN_AI_RESPONSE_FINISH_REASONS","ATTR_GEN_AI_TOOL_NAME","ATTR_GEN_AI_TOOL_CALL_ID","ATTR_GEN_AI_TOOL_CALL_ARGUMENTS","ATTR_GEN_AI_TOOL_CALL_RESULT","ATTR_GEN_AI_CONVERSATION_ID","ATTR_GEN_AI_RESPONSE_MODEL","ATTR_GEN_AI_RESPONSE_ID","ATTR_GEN_AI_AGENT_NAME","TraceloopSpanKindValues","OTLPTraceExporter","SimpleSpanProcessor","BatchSpanProcessor","context","OpenAIInstrumentation","AnthropicInstrumentation","CohereInstrumentation","VertexAIInstrumentation","AIPlatformInstrumentation","BedrockInstrumentation","PineconeInstrumentation","LangChainInstrumentation","LlamaIndexInstrumentation","ChromaDBInstrumentation","QdrantInstrumentation","TogetherInstrumentation","McpInstrumentation","GcpTraceExporter","ATTR_SERVICE_NAME","NodeSDK","diag","CONTEXT_KEY_ALLOW_TRACE_CONTENT","fetch","DiagConsoleLogger","DiagLogLevel","suppressTracing","Events","EventAttributes","Environment","AssociationProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/lib/errors/index.ts","../../src/lib/client/annotation/base-annotation.ts","../../src/lib/client/annotation/user-feedback.ts","../../src/lib/utils/response-transformer.ts","../../src/lib/client/dataset/base-dataset.ts","../../src/lib/client/dataset/attachment.ts","../../src/lib/client/dataset/attachment-uploader.ts","../../src/lib/client/dataset/row.ts","../../src/lib/client/dataset/column.ts","../../src/lib/client/dataset/dataset.ts","../../src/lib/client/dataset/datasets.ts","../../src/lib/client/evaluator/evaluator.ts","../../src/lib/client/experiment/experiment.ts","../../src/lib/client/traceloop-client.ts","../../src/lib/generated/evaluators/registry.ts","../../src/lib/generated/evaluators/mbt-evaluators.ts","../../src/lib/configuration/validation.ts","../../src/lib/tracing/tracing.ts","../../src/lib/tracing/ai-sdk-transformations.ts","../../src/lib/tracing/baggage-utils.ts","../../src/lib/tracing/span-processor.ts","../../src/lib/images/image-uploader.ts","../../src/lib/tracing/index.ts","../../src/lib/prompts/fetch.ts","../../src/lib/prompts/registry.ts","../../src/lib/pricing/calculator.ts","../../src/lib/pricing/loader.ts","../../src/lib/configuration/index.ts","../../src/lib/tracing/decorators.ts","../../src/lib/tracing/manual.ts","../../src/lib/tracing/association.ts","../../src/lib/tracing/custom-metric.ts","../../src/lib/interfaces/prompts.interface.ts","../../src/lib/prompts/template.ts","../../src/lib/prompts/index.ts","../../src/lib/associations/associations.ts"],"sourcesContent":["/**\n * The severity of an error.\n */\nexport const SEVERITY = {\n Warning: \"Warning\",\n Error: \"Error\",\n Critical: \"Critical\",\n} as const;\n\nexport type Severity = (typeof SEVERITY)[keyof typeof SEVERITY];\n\n/**\n * Base class for all Traceloop errors.\n */\nexport class TraceloopError extends Error {\n /**\n * The severity of the error.\n */\n severity: Severity;\n /**\n * The underlying cause of the error.\n */\n underlyingCause?: Error;\n\n constructor(message: string, severity: Severity = SEVERITY.Error) {\n super(message);\n this.severity = severity;\n }\n}\n\nexport class NotInitializedError extends TraceloopError {\n constructor() {\n super(\n `The Traceloop SDK must be initialized by calling the \"initialize\" function prior to use.`,\n SEVERITY.Critical,\n );\n }\n}\n\nexport class InitializationError extends TraceloopError {\n constructor(message?: string, cause?: Error) {\n super(message ?? \"Failed to initialize Traceloop SDK\", SEVERITY.Critical);\n this.underlyingCause = cause;\n }\n}\n\nexport class ArgumentNotProvidedError extends TraceloopError {\n constructor(argumentName: string) {\n super(`The \"${argumentName}\" argument is required and must be a string.`);\n }\n}\n\nexport class PromptNotFoundError extends TraceloopError {\n constructor(key: string) {\n super(`The prompt \"${key}\" was not found in the registry.`);\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { AnnotationCreateOptions } from \"../../interfaces/annotations.interface\";\n\nexport type AnnotationFlow = \"user_feedback\";\n\n/**\n * Base class for handling annotation operations with the Traceloop API.\n * @internal\n */\nexport class BaseAnnotation {\n constructor(\n protected client: TraceloopClient,\n protected flow: AnnotationFlow,\n ) {}\n\n /**\n * Creates a new annotation.\n *\n * @param options - The annotation creation options\n * @returns Promise resolving to the fetch Response\n */\n async create(options: AnnotationCreateOptions) {\n return await this.client.post(\n `/v2/annotation-tasks/${options.annotationTask}/annotations`,\n {\n entity_instance_id: options.entity.id,\n tags: options.tags,\n source: \"sdk\",\n flow: this.flow,\n actor: {\n type: \"service\",\n id: this.client.appName,\n },\n },\n );\n }\n}\n","import { BaseAnnotation } from \"./base-annotation\";\nimport { TraceloopClient } from \"../traceloop-client\";\nimport { AnnotationCreateOptions } from \"../../interfaces/annotations.interface\";\n\n/**\n * Handles user feedback annotations with the Traceloop API.\n */\nexport class UserFeedback extends BaseAnnotation {\n constructor(client: TraceloopClient) {\n super(client, \"user_feedback\");\n }\n\n /**\n * Creates a new annotation for a specific task and entity.\n *\n * @param options - The options for creating an annotation\n * @returns Promise resolving to the fetch Response\n *\n * @example\n * ```typescript\n * await client.annotation.create({\n * annotationTask: 'sample-annotation-task',\n * entity: {\n * id: '123456',\n * },\n * tags: {\n * sentiment: 'positive',\n * score: 0.85,\n * tones: ['happy', 'surprised']\n * }\n * });\n * ```\n */\n override async create(options: AnnotationCreateOptions) {\n return await super.create(options);\n }\n}\n","/**\n * Utility functions for transforming API responses from snake_case to camelCase\n */\n\n/**\n * Converts a snake_case string to camelCase\n * @param str The snake_case string to convert\n * @returns The camelCase version of the string\n */\nfunction snakeToCamel(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Recursively transforms all snake_case keys in an object to camelCase\n * @param obj The object to transform\n * @returns A new object with camelCase keys\n */\nexport function transformResponseKeys(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(transformResponseKeys);\n }\n\n if (typeof obj === \"object\" && obj.constructor === Object) {\n const transformed: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = snakeToCamel(key);\n transformed[camelKey] = transformResponseKeys(value);\n }\n\n return transformed;\n }\n\n return obj;\n}\n\n/**\n * Transforms API response data by converting snake_case keys to camelCase\n * This function is designed to be used in the BaseDataset.handleResponse() method\n * to ensure consistent camelCase format throughout the SDK\n *\n * @param data The raw API response data\n * @returns The transformed data with camelCase keys\n */\nexport function transformApiResponse<T = any>(data: any): T {\n return transformResponseKeys(data) as T;\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { transformApiResponse } from \"../../utils/response-transformer\";\n\nexport abstract class BaseDatasetEntity {\n constructor(protected client: TraceloopClient) {}\n\n protected async handleResponse(response: Response) {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default HTTP error message if JSON parsing fails\n }\n\n throw new Error(errorMessage);\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n const rawData = await response.json();\n return transformApiResponse(rawData);\n }\n\n // Handle non-JSON responses (text/csv, etc.)\n const textContent = await response.text();\n return {\n contentType: contentType || \"text/plain\",\n body: textContent,\n };\n }\n\n protected validateDatasetId(id: string): void {\n if (!id || typeof id !== \"string\" || id.trim().length === 0) {\n throw new Error(\"Dataset ID is required and must be a non-empty string\");\n }\n }\n\n protected validateDatasetSlug(slug: string): void {\n if (!slug || typeof slug !== \"string\" || slug.trim().length === 0) {\n throw new Error(\n \"Dataset slug is required and must be a non-empty string\",\n );\n }\n }\n\n protected validateDatasetName(name: string): void {\n if (!name || typeof name !== \"string\" || name.trim().length === 0) {\n throw new Error(\n \"Dataset name is required and must be a non-empty string\",\n );\n }\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as mime from \"mime-types\";\n\nexport type FileCellType = \"image\" | \"video\" | \"audio\" | \"file\";\n\nexport type FileStorageType = \"internal\" | \"external\";\n\nexport interface AttachmentMetadata {\n [key: string]: string | number | boolean;\n}\n\nfunction detectFileType(contentType: string): FileCellType {\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return \"file\";\n}\n\nfunction getMimeType(filename: string): string {\n return mime.lookup(filename) || \"application/octet-stream\";\n}\n\nexport interface AttachmentOptions {\n filePath?: string;\n data?: Buffer | Uint8Array;\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n}\n\nexport class Attachment {\n readonly type = \"attachment\" as const;\n\n private _filePath?: string;\n private _data?: Buffer | Uint8Array;\n private _filename?: string;\n private _contentType?: string;\n private _fileType?: FileCellType;\n private _metadata?: AttachmentMetadata;\n\n constructor(options: AttachmentOptions) {\n const { filePath, data, filename, contentType, fileType, metadata } =\n options;\n\n if (!filePath && !data) {\n throw new Error(\"Either filePath or data must be provided\");\n }\n if (filePath && data) {\n throw new Error(\"Cannot provide both filePath and data\");\n }\n if (data && !filename) {\n throw new Error(\"filename is required when using data\");\n }\n\n this._filePath = filePath;\n this._data = data;\n this._filename = filename;\n this._contentType = contentType;\n this._fileType = fileType;\n this._metadata = metadata;\n }\n\n async getData(): Promise<Buffer> {\n if (this._data) {\n return Buffer.isBuffer(this._data) ? this._data : Buffer.from(this._data);\n }\n if (this._filePath) {\n return fs.promises.readFile(this._filePath);\n }\n throw new Error(\"No data source available\");\n }\n\n getFileName(): string {\n if (this._filename) {\n return this._filename;\n }\n if (this._filePath) {\n return path.basename(this._filePath);\n }\n throw new Error(\"No filename available\");\n }\n\n getContentType(): string {\n if (this._contentType) {\n return this._contentType;\n }\n return getMimeType(this.getFileName());\n }\n\n get fileType(): FileCellType {\n if (this._fileType) {\n return this._fileType;\n }\n return detectFileType(this.getContentType());\n }\n\n get metadata(): AttachmentMetadata | undefined {\n return this._metadata;\n }\n}\n\nexport interface ExternalAttachmentOptions {\n url: string;\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n}\n\nexport class ExternalAttachment {\n readonly type = \"external\" as const;\n\n private _url: string;\n private _filename?: string;\n private _contentType?: string;\n private _fileType: FileCellType;\n private _metadata?: AttachmentMetadata;\n\n constructor(options: ExternalAttachmentOptions) {\n const { url, filename, contentType, fileType, metadata } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"URL is required and must be a string\");\n }\n\n try {\n new URL(url);\n } catch {\n throw new Error(\"Invalid URL provided\");\n }\n\n this._url = url;\n this._filename = filename;\n this._contentType = contentType;\n this._fileType = fileType || \"file\";\n this._metadata = metadata;\n }\n\n get url(): string {\n return this._url;\n }\n\n get filename(): string | undefined {\n return this._filename;\n }\n\n get contentType(): string | undefined {\n return this._contentType;\n }\n\n get fileType(): FileCellType {\n return this._fileType;\n }\n\n get metadata(): AttachmentMetadata | undefined {\n return this._metadata;\n }\n}\n\nexport class AttachmentReference {\n constructor(\n readonly storageType: FileStorageType,\n readonly storageKey: string,\n readonly url: string | undefined,\n readonly fileType: FileCellType,\n readonly metadata?: AttachmentMetadata,\n ) {}\n\n async download(filePath?: string): Promise<Buffer | void> {\n if (!this.url) {\n throw new Error(\"Cannot download attachment: no URL available\");\n }\n\n const response = await fetch(this.url);\n if (!response.ok) {\n throw new Error(\n `Failed to download attachment: ${response.status} ${response.statusText}`,\n );\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n\n if (filePath) {\n await fs.promises.writeFile(filePath, buffer);\n return;\n }\n\n return buffer;\n }\n\n getUrl(): string | undefined {\n return this.url;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n storageType: this.storageType,\n storageKey: this.storageKey,\n url: this.url,\n fileType: this.fileType,\n metadata: this.metadata,\n };\n }\n}\n\nexport function isAttachment(value: unknown): value is Attachment {\n return value instanceof Attachment || (value as any)?.type === \"attachment\";\n}\n\nexport function isExternalAttachment(\n value: unknown,\n): value is ExternalAttachment {\n return (\n value instanceof ExternalAttachment || (value as any)?.type === \"external\"\n );\n}\n\nexport function isAttachmentReference(\n value: unknown,\n): value is AttachmentReference {\n return (\n value instanceof AttachmentReference ||\n ((value as any)?.storageType !== undefined &&\n (value as any)?.storageKey !== undefined)\n );\n}\n\nexport function isAnyAttachment(\n value: unknown,\n): value is Attachment | ExternalAttachment {\n return isAttachment(value) || isExternalAttachment(value);\n}\n\nexport const attachment = {\n file: (\n filePath: string,\n options?: {\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): Attachment => {\n return new Attachment({\n filePath,\n ...options,\n });\n },\n\n buffer: (\n data: Buffer | Uint8Array,\n filename: string,\n options?: {\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): Attachment => {\n return new Attachment({\n data,\n filename,\n ...options,\n });\n },\n\n url: (\n url: string,\n options?: {\n filename?: string;\n contentType?: string;\n fileType?: FileCellType;\n metadata?: AttachmentMetadata;\n },\n ): ExternalAttachment => {\n return new ExternalAttachment({\n url,\n ...options,\n });\n },\n};\n","import { TraceloopClient } from \"../traceloop-client\";\nimport {\n Attachment,\n ExternalAttachment,\n AttachmentReference,\n FileCellType,\n AttachmentMetadata,\n} from \"./attachment\";\n\n/**\n * Response from the upload URL endpoint\n */\nexport interface UploadUrlResponse {\n uploadUrl: string;\n storageKey: string;\n expiresAt?: string;\n method?: string;\n}\n\n/**\n * Handles attachment upload and registration operations\n */\nexport class AttachmentUploader {\n constructor(private client: TraceloopClient) {}\n\n /**\n * Requests a presigned upload URL from the API\n */\n async getUploadUrl(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n fileName: string,\n contentType: string,\n fileType: FileCellType,\n metadata?: AttachmentMetadata,\n ): Promise<UploadUrlResponse> {\n const response = await this.client.post(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/upload-url`,\n {\n type: fileType,\n file_name: fileName,\n content_type: contentType,\n metadata: metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to get upload URL: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n return {\n uploadUrl: data.upload_url,\n storageKey: data.storage_key,\n expiresAt: data.expires_at,\n method: data.method || \"PUT\",\n };\n }\n\n /**\n * Uploads file data directly to S3 using the presigned URL\n */\n async uploadToS3(\n uploadUrl: string,\n data: Buffer,\n contentType: string,\n ): Promise<void> {\n const response = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": contentType,\n },\n body: new Uint8Array(data),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to upload to S3: ${response.status} ${response.statusText}`,\n );\n }\n }\n\n /**\n * Confirms the upload status with the API\n */\n async confirmUpload(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n status: \"success\" | \"failed\",\n metadata?: AttachmentMetadata,\n ): Promise<void> {\n const response = await this.client.put(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/upload-status`,\n {\n status,\n metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to confirm upload: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n }\n\n /**\n * Registers an external URL as an attachment\n */\n async registerExternalUrl(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n url: string,\n fileType: FileCellType,\n metadata?: AttachmentMetadata,\n ): Promise<AttachmentReference> {\n const response = await this.client.post(\n `/v2/datasets/${datasetSlug}/rows/${rowId}/cells/${columnSlug}/external-url`,\n {\n type: fileType,\n url,\n metadata,\n },\n );\n\n if (!response.ok) {\n let errorMessage = `Failed to register external URL: ${response.status} ${response.statusText}`;\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default error message\n }\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n return new AttachmentReference(\n \"external\",\n data.storage_key || \"\",\n url,\n fileType,\n metadata,\n );\n }\n\n /**\n * Uploads an Attachment through the full flow:\n * 1. Get presigned URL\n * 2. Upload to S3\n * 3. Confirm upload\n */\n async uploadAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachment: Attachment,\n ): Promise<AttachmentReference> {\n const fileName = attachment.getFileName();\n const contentType = attachment.getContentType();\n const fileType = attachment.fileType;\n const data = await attachment.getData();\n\n // Step 1: Get presigned upload URL\n const uploadInfo = await this.getUploadUrl(\n datasetSlug,\n rowId,\n columnSlug,\n fileName,\n contentType,\n fileType,\n attachment.metadata,\n );\n\n // Step 2: Upload to S3\n try {\n await this.uploadToS3(uploadInfo.uploadUrl, data, contentType);\n } catch (error) {\n // Confirm failure and re-throw\n try {\n await this.confirmUpload(\n datasetSlug,\n rowId,\n columnSlug,\n \"failed\",\n attachment.metadata,\n );\n } catch {\n // Ignore confirmation errors\n }\n throw error;\n }\n\n // Step 3: Confirm success\n await this.confirmUpload(\n datasetSlug,\n rowId,\n columnSlug,\n \"success\",\n attachment.metadata,\n );\n\n return new AttachmentReference(\n \"internal\",\n uploadInfo.storageKey,\n undefined,\n fileType,\n attachment.metadata,\n );\n }\n\n /**\n * Processes an ExternalAttachment by registering the URL\n */\n async processExternalAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachment: ExternalAttachment,\n ): Promise<AttachmentReference> {\n return this.registerExternalUrl(\n datasetSlug,\n rowId,\n columnSlug,\n attachment.url,\n attachment.fileType,\n attachment.metadata,\n );\n }\n\n /**\n * Processes any attachment type (Attachment or ExternalAttachment)\n */\n async processAnyAttachment(\n datasetSlug: string,\n rowId: string,\n columnSlug: string,\n attachmentObj: Attachment | ExternalAttachment,\n ): Promise<AttachmentReference> {\n if (attachmentObj instanceof Attachment) {\n return this.uploadAttachment(\n datasetSlug,\n rowId,\n columnSlug,\n attachmentObj,\n );\n } else {\n return this.processExternalAttachment(\n datasetSlug,\n rowId,\n columnSlug,\n attachmentObj,\n );\n }\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { RowResponse, RowData, RowUpdateOptions } from \"../../interfaces\";\nimport {\n Attachment,\n ExternalAttachment,\n AttachmentReference,\n isAttachmentReference,\n} from \"./attachment\";\nimport { AttachmentUploader } from \"./attachment-uploader\";\n\nexport class Row extends BaseDatasetEntity {\n private _data: RowResponse;\n private _deleted = false;\n\n constructor(client: TraceloopClient, data: RowResponse) {\n super(client);\n this._data = data;\n }\n\n get id(): string {\n return this._data.id;\n }\n\n get datasetId(): string {\n return this._data.datasetId;\n }\n\n get datasetSlug(): string {\n return this._data.datasetSlug;\n }\n\n get data(): RowData {\n return { ...this._data.data };\n }\n\n get createdAt(): string {\n return this._data.createdAt;\n }\n\n get updatedAt(): string {\n return this._data.updatedAt;\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n getValue(\n columnName: string,\n ): string | number | boolean | Date | null | object {\n const value = this._data.data[columnName];\n return value !== undefined ? value : null;\n }\n\n hasColumn(columnName: string): boolean {\n return columnName in this._data.data;\n }\n\n getColumns(): string[] {\n return Object.keys(this._data.data);\n }\n\n async update(options: RowUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted row\");\n }\n\n if (!options.data || typeof options.data !== \"object\") {\n throw new Error(\"Update data must be a valid object\");\n }\n\n const updatedData = { ...this._data.data, ...options.data };\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n {\n Values: updatedData,\n },\n );\n\n const result = await this.handleResponse(response);\n\n if (result && result.id) {\n this._data = result;\n }\n }\n\n async partialUpdate(updates: Partial<RowData>): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted row\");\n }\n\n if (!updates || typeof updates !== \"object\") {\n throw new Error(\"Updates must be a valid object\");\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n {\n Values: updates,\n },\n );\n\n const result = await this.handleResponse(response);\n\n if (result && result.id) {\n this._data = result;\n }\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Row is already deleted\");\n }\n\n const response = await this.client.delete(\n `/v2/datasets/${this.datasetSlug}/rows/${this.id}`,\n );\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n toJSON(): RowData {\n return { ...this._data.data };\n }\n\n toCSVRow(columns?: string[], delimiter = \",\"): string {\n const columnsToUse = columns || this.getColumns();\n const values = columnsToUse.map((column) => {\n const value = this._data.data[column];\n if (value === null || value === undefined) {\n return \"\";\n }\n\n const stringValue = String(value);\n\n if (\n stringValue.includes(delimiter) ||\n stringValue.includes('\"') ||\n stringValue.includes(\"\\n\")\n ) {\n return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n }\n\n return stringValue;\n });\n\n return values.join(delimiter);\n }\n\n validate(columnValidators?: {\n [columnName: string]: (value: any) => boolean;\n }): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (columnValidators) {\n Object.keys(columnValidators).forEach((columnName) => {\n const validator = columnValidators[columnName];\n const value = this._data.data[columnName];\n\n if (!validator(value)) {\n errors.push(`Invalid value for column '${columnName}': ${value}`);\n }\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n clone(): Row {\n const clonedData: RowResponse = {\n ...this._data,\n data: { ...this._data.data },\n };\n\n return new Row(this.client, clonedData);\n }\n\n /**\n * Gets an attachment reference from a column\n * @param columnName The name of the column containing the attachment\n * @returns AttachmentReference if the column contains an attachment, null otherwise\n */\n getAttachment(columnName: string): AttachmentReference | null {\n const value = this._data.data[columnName];\n\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n // Value is now guaranteed to be an object\n const objValue = value as object;\n\n // Check if value is already an AttachmentReference\n if (objValue instanceof AttachmentReference) {\n return objValue;\n }\n\n // Check if value is a serialized attachment reference\n if (isAttachmentReference(objValue)) {\n const ref = objValue as any;\n return new AttachmentReference(\n ref.storageType,\n ref.storageKey,\n ref.url,\n ref.fileType,\n ref.metadata,\n );\n }\n\n return null;\n }\n\n /**\n * Checks if a column contains an attachment\n * @param columnName The name of the column to check\n */\n hasAttachment(columnName: string): boolean {\n return this.getAttachment(columnName) !== null;\n }\n\n /**\n * Sets/uploads an attachment to a column\n * @param columnSlug The slug of the column to set the attachment in\n * @param attachment The attachment to upload (Attachment or ExternalAttachment)\n * @returns The created AttachmentReference\n *\n * @example\n * // Upload from file\n * await row.setAttachment(\"image\", new Attachment({ filePath: \"./photo.jpg\" }));\n *\n * @example\n * // Set external URL\n * await row.setAttachment(\"document\", new ExternalAttachment({ url: \"https://example.com/doc.pdf\" }));\n */\n async setAttachment(\n columnSlug: string,\n attachment: Attachment | ExternalAttachment,\n ): Promise<AttachmentReference> {\n if (this._deleted) {\n throw new Error(\"Cannot set attachment on a deleted row\");\n }\n\n const uploader = new AttachmentUploader(this.client);\n const reference = await uploader.processAnyAttachment(\n this.datasetSlug,\n this.id,\n columnSlug,\n attachment,\n );\n\n // Update internal data\n this._data.data[columnSlug] = reference.toJSON() as any;\n\n return reference;\n }\n\n /**\n * Downloads an attachment from a column\n * @param columnName The name of the column containing the attachment\n * @param outputPath Optional file path to save the downloaded file\n * @returns Buffer if no outputPath provided, void if saved to file\n *\n * @example\n * // Get as buffer\n * const data = await row.downloadAttachment(\"image\");\n *\n * @example\n * // Save to file\n * await row.downloadAttachment(\"image\", \"./downloaded-image.png\");\n */\n async downloadAttachment(\n columnName: string,\n outputPath?: string,\n ): Promise<Buffer | void> {\n if (this._deleted) {\n throw new Error(\"Cannot download attachment from a deleted row\");\n }\n\n const attachment = this.getAttachment(columnName);\n if (!attachment) {\n throw new Error(`No attachment found in column '${columnName}'`);\n }\n\n return attachment.download(outputPath);\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport {\n ColumnResponse,\n ColumnUpdateOptions,\n DatasetColumnValue,\n} from \"../../interfaces\";\n\nexport class Column extends BaseDatasetEntity {\n private _data: ColumnResponse;\n private _deleted = false;\n\n constructor(client: TraceloopClient, data: ColumnResponse) {\n super(client);\n this._data = data;\n }\n\n get slug(): string {\n return this._data.slug;\n }\n\n get name(): string {\n return this._data.name;\n }\n\n get type(): \"string\" | \"number\" | \"boolean\" | \"date\" | \"file\" {\n return this._data.type;\n }\n\n get required(): boolean {\n return this._data.required || false;\n }\n\n get description(): string | undefined {\n return this._data.description;\n }\n\n get datasetId(): string {\n return this._data.datasetId;\n }\n\n get datasetSlug(): string {\n return this._data.datasetSlug;\n }\n\n get createdAt(): string {\n return this._data.createdAt;\n }\n\n get updatedAt(): string {\n return this._data.updatedAt;\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n async update(options: ColumnUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted column\");\n }\n\n if (options.name && typeof options.name !== \"string\") {\n throw new Error(\"Column name must be a string\");\n }\n\n if (\n options.type &&\n ![\"string\", \"number\", \"boolean\", \"date\", \"file\"].includes(options.type)\n ) {\n throw new Error(\n \"Column type must be one of: string, number, boolean, date, file\",\n );\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.datasetSlug}/columns/${this.slug}`,\n options,\n );\n const data = await this.handleResponse(response);\n\n // API returns dataset data, extract column info if available\n if (data.columns && data.columns[this.slug]) {\n const columnData = data.columns[this.slug];\n // Update only the fields that changed, preserve datasetSlug and other metadata\n this._data = {\n ...this._data,\n name: columnData.name || this._data.name,\n type: columnData.type || this._data.type,\n description: columnData.description || this._data.description,\n updatedAt: data.updatedAt || this._data.updatedAt,\n };\n }\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Column is already deleted\");\n }\n\n const response = await this.client.delete(\n `/v2/datasets/${this.datasetSlug}/columns/${this.slug}`,\n );\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n validateValue(value: DatasetColumnValue): boolean {\n if (this.required && (value === null || value === undefined)) {\n return false;\n }\n\n if (value === null || value === undefined) {\n return true;\n }\n\n switch (this.type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" && !isNaN(value) && isFinite(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n default:\n return false;\n }\n }\n\n convertValue(value: unknown): DatasetColumnValue {\n if (value === null || value === undefined) {\n return null;\n }\n\n switch (this.type) {\n case \"string\":\n return String(value);\n case \"number\": {\n const numValue = Number(value);\n return isNaN(numValue) ? null : numValue;\n }\n case \"boolean\":\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"true\" || lower === \"1\") return true;\n if (lower === \"false\" || lower === \"0\") return false;\n }\n return Boolean(value);\n default:\n return value as DatasetColumnValue;\n }\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { Row } from \"./row\";\nimport { Column } from \"./column\";\nimport * as Papa from \"papaparse\";\nimport { Attachment, ExternalAttachment, isAnyAttachment } from \"./attachment\";\nimport { AttachmentUploader } from \"./attachment-uploader\";\nimport {\n DatasetResponse,\n DatasetUpdateOptions,\n ColumnDefinition,\n RowData,\n DatasetPublishOptions,\n CSVImportOptions,\n ColumnResponse,\n RowResponse,\n DatasetVersionsResponse,\n DatasetVersion,\n} from \"../../interfaces\";\n\nexport class Dataset extends BaseDatasetEntity {\n private _data: DatasetResponse;\n private _deleted = false;\n private _attachmentUploader: AttachmentUploader;\n\n constructor(client: TraceloopClient, data: DatasetResponse) {\n super(client);\n this._data = data;\n this._attachmentUploader = new AttachmentUploader(client);\n }\n\n get id(): string {\n return this._data.id;\n }\n\n get slug(): string {\n return this._data.slug;\n }\n\n get name(): string {\n return this._data.name;\n }\n\n get description(): string | undefined {\n return this._data.description;\n }\n\n get version(): string | undefined {\n return this._data.version;\n }\n\n get published(): boolean {\n return this._data.published || false;\n }\n\n get createdAt(): string {\n return this._data.createdAt || \"\";\n }\n\n get updatedAt(): string {\n return this._data.updatedAt || \"\";\n }\n\n get deleted(): boolean {\n return this._deleted;\n }\n\n async update(options: DatasetUpdateOptions): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot update a deleted dataset\");\n }\n\n if (options.name) {\n this.validateDatasetName(options.name);\n }\n\n const response = await this.client.put(\n `/v2/datasets/${this.slug}`,\n options,\n );\n await this.handleResponse(response);\n }\n\n async delete(): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Dataset is already deleted\");\n }\n\n const response = await this.client.delete(`/v2/datasets/${this.slug}`);\n await this.handleResponse(response);\n this._deleted = true;\n }\n\n async publish(options: DatasetPublishOptions = {}): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot publish a deleted dataset\");\n }\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/publish`,\n options,\n );\n const data = await this.handleResponse(response);\n this._data = data;\n }\n\n async addColumn(columns: ColumnDefinition[]): Promise<Column[]> {\n if (this._deleted) {\n throw new Error(\"Cannot add columns to a deleted dataset\");\n }\n\n if (!Array.isArray(columns) || columns.length === 0) {\n throw new Error(\"Columns must be a non-empty array\");\n }\n\n const results: Column[] = [];\n\n for (const column of columns) {\n if (!column.name || typeof column.name !== \"string\") {\n throw new Error(\"Column name is required and must be a string\");\n }\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/columns`,\n column,\n );\n const data = await this.handleResponse(response);\n\n if (!data || !data.slug) {\n throw new Error(\"Failed to create column: Invalid API response\");\n }\n\n const columnResponse: ColumnResponse = {\n slug: data.slug,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n name: data.name,\n type: data.type,\n required: data.required,\n description: data.description,\n createdAt: data.createdAt,\n updatedAt: data.updatedAt,\n };\n\n results.push(new Column(this.client, columnResponse));\n }\n\n return results;\n }\n\n async getColumns(): Promise<Column[]> {\n if (this._deleted) {\n throw new Error(\"Cannot get columns from a deleted dataset\");\n }\n\n if (!this._data.columns) {\n return [];\n }\n\n const columns: Column[] = [];\n for (const [columnSlug, columnData] of Object.entries(this._data.columns)) {\n const col = columnData as any;\n const columnResponse: ColumnResponse = {\n slug: columnSlug,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n name: col.name,\n type: col.type,\n required: col.required === true,\n description: col.description,\n createdAt: this._data.createdAt || this.createdAt,\n updatedAt: this._data.updatedAt || this.updatedAt,\n };\n columns.push(new Column(this.client, columnResponse));\n }\n\n return columns;\n }\n\n async addRow(rowData: RowData): Promise<Row> {\n if (this._deleted) {\n throw new Error(\"Cannot add row to a deleted dataset\");\n }\n\n if (!rowData || typeof rowData !== \"object\") {\n throw new Error(\"Row data must be a valid object\");\n }\n\n const rows = await this.addRows([rowData]);\n if (rows.length === 0) {\n throw new Error(\"Failed to add row\");\n }\n return rows[0];\n }\n\n async addRows(rows: RowData[]): Promise<Row[]> {\n if (this._deleted) {\n throw new Error(\"Cannot add rows to a deleted dataset\");\n }\n\n if (!Array.isArray(rows)) {\n throw new Error(\"Rows must be an array\");\n }\n\n const columns = await this.getColumns();\n const columnMap = new Map<string, string>();\n\n columns.forEach((col) => {\n columnMap.set(col.name, col.slug);\n });\n\n // Phase 1: Extract attachments and prepare clean rows\n const { cleanRows, attachmentMap } = this.extractAttachments(\n rows,\n columnMap,\n );\n\n // Phase 2: Create rows with regular data (attachments replaced with null)\n const transformedRows = cleanRows.map((row) => {\n const transformedRow: { [key: string]: any } = {};\n Object.keys(row).forEach((columnName) => {\n const columnSlug = columnMap.get(columnName);\n if (columnSlug) {\n transformedRow[columnSlug] = row[columnName];\n }\n });\n return transformedRow;\n });\n\n const payload = {\n Rows: transformedRows,\n };\n\n const response = await this.client.post(\n `/v2/datasets/${this.slug}/rows`,\n payload,\n );\n const result = await this.handleResponse(response);\n\n const createdRows: Row[] = [];\n if (result.rows) {\n for (const row of result.rows) {\n const rowResponse: RowResponse = {\n id: row.id,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n data: this.transformValuesBackToNames(row.values, columnMap),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n createdRows.push(new Row(this.client, rowResponse));\n }\n }\n\n // Phase 3: Process attachments for created rows\n if (attachmentMap.size > 0) {\n await this.processAttachments(createdRows, attachmentMap, columnMap);\n }\n\n return createdRows;\n }\n\n /**\n * Extracts attachments from rows and returns clean rows with null values\n */\n private extractAttachments(\n rows: RowData[],\n columnMap: Map<string, string>,\n ): {\n cleanRows: RowData[];\n attachmentMap: Map<number, Map<string, Attachment | ExternalAttachment>>;\n } {\n const attachmentMap = new Map<\n number,\n Map<string, Attachment | ExternalAttachment>\n >();\n const cleanRows: RowData[] = [];\n\n rows.forEach((row, rowIndex) => {\n const cleanRow: RowData = {};\n const rowAttachments = new Map<string, Attachment | ExternalAttachment>();\n\n Object.keys(row).forEach((columnName) => {\n const value = row[columnName];\n const columnSlug = columnMap.get(columnName);\n\n if (isAnyAttachment(value) && columnSlug) {\n // Store attachment for later processing\n rowAttachments.set(columnSlug, value);\n // Replace with null in the clean row\n cleanRow[columnName] = null;\n } else {\n cleanRow[columnName] = value;\n }\n });\n\n cleanRows.push(cleanRow);\n\n if (rowAttachments.size > 0) {\n attachmentMap.set(rowIndex, rowAttachments);\n }\n });\n\n return { cleanRows, attachmentMap };\n }\n\n /**\n * Processes attachments for created rows\n */\n private async processAttachments(\n rows: Row[],\n attachmentMap: Map<number, Map<string, Attachment | ExternalAttachment>>,\n columnMap: Map<string, string>,\n ): Promise<void> {\n // Create reverse map for slug to name lookup\n const reverseColumnMap = new Map<string, string>();\n columnMap.forEach((slug, name) => {\n reverseColumnMap.set(slug, name);\n });\n\n for (const [rowIndex, rowAttachments] of attachmentMap) {\n const row = rows[rowIndex];\n if (!row) continue;\n\n for (const [columnSlug, attachment] of rowAttachments) {\n try {\n const reference = await this._attachmentUploader.processAnyAttachment(\n this.slug,\n row.id,\n columnSlug,\n attachment,\n );\n\n // Update the row's internal data with the attachment reference\n const columnName = reverseColumnMap.get(columnSlug);\n if (columnName) {\n (row as any)._data.data[columnName] = reference.toJSON();\n }\n } catch (error) {\n // Log warning but don't fail the entire operation\n console.warn(\n `Failed to process attachment for row ${row.id}, column ${columnSlug}:`,\n error,\n );\n }\n }\n }\n }\n\n private transformValuesBackToNames(\n values: { [columnSlug: string]: any },\n columnMap: Map<string, string>,\n ): RowData {\n const result: RowData = {};\n\n const reverseMap = new Map<string, string>();\n columnMap.forEach((slug, name) => {\n reverseMap.set(slug, name);\n });\n\n Object.keys(values).forEach((columnSlug) => {\n const columnName = reverseMap.get(columnSlug);\n if (columnName) {\n result[columnName] = values[columnSlug];\n }\n });\n\n return result;\n }\n\n async getRows(limit = 100, offset = 0): Promise<Row[]> {\n if (this._deleted) {\n throw new Error(\"Cannot get rows from a deleted dataset\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${this.slug}/rows?limit=${limit}&offset=${offset}`,\n );\n const data = await this.handleResponse(response);\n\n const rows = data.rows || [];\n return rows.map((row: any) => {\n const rowResponse: RowResponse = {\n id: row.id,\n datasetId: this._data.id,\n datasetSlug: this.slug,\n data: row.values || row.data || {},\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n return new Row(this.client, rowResponse);\n });\n }\n\n async fromCSV(\n csvContent: string,\n options: CSVImportOptions = {},\n ): Promise<void> {\n if (this._deleted) {\n throw new Error(\"Cannot import CSV to a deleted dataset\");\n }\n\n const { hasHeader = true, delimiter = \",\" } = options;\n\n if (!csvContent || typeof csvContent !== \"string\") {\n throw new Error(\"CSV content must be a valid string\");\n }\n\n const rows = this.parseCSV(csvContent, delimiter, hasHeader);\n\n if (rows.length === 0) {\n throw new Error(\"No data found in CSV\");\n }\n\n const batchSize = 100;\n for (let i = 0; i < rows.length; i += batchSize) {\n const batch = rows.slice(i, i + batchSize);\n await this.addRows(batch);\n }\n }\n\n async getVersions(): Promise<DatasetVersionsResponse> {\n if (this._deleted) {\n throw new Error(\"Cannot get versions of a deleted dataset\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${this.slug}/versions`,\n );\n return await this.handleResponse(response);\n }\n\n async getVersion(version: string): Promise<DatasetVersion | null> {\n if (this._deleted) {\n throw new Error(\"Cannot get version of a deleted dataset\");\n }\n\n const versionsData = await this.getVersions();\n return versionsData.versions.find((v) => v.version === version) || null;\n }\n\n private parseCSV(\n csvContent: string,\n delimiter: string,\n hasHeader: boolean,\n ): RowData[] {\n const parseResult = Papa.parse(csvContent, {\n delimiter,\n header: hasHeader,\n skipEmptyLines: true,\n transformHeader: (header: string) => header.trim(),\n transform: (value: string) => this.parseValue(value.trim()),\n });\n\n if (parseResult.errors.length > 0) {\n throw new Error(`CSV parsing failed: ${parseResult.errors[0].message}`);\n }\n\n return parseResult.data as RowData[];\n }\n\n private parseValue(value: string): string | number | boolean | null {\n if (value === \"\" || value.toLowerCase() === \"null\") {\n return null;\n }\n\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!isNaN(numValue) && isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"./base-dataset\";\nimport { Dataset } from \"./dataset\";\nimport {\n DatasetCreateOptions,\n DatasetResponse,\n DatasetListResponse,\n} from \"../../interfaces\";\n\nexport class Datasets extends BaseDatasetEntity {\n constructor(client: TraceloopClient) {\n super(client);\n }\n\n async create(options: DatasetCreateOptions): Promise<Dataset> {\n this.validateDatasetName(options.name);\n\n const response = await this.client.post(\"/v2/datasets\", options);\n const data: DatasetResponse = await this.handleResponse(response);\n\n return new Dataset(this.client, data);\n }\n\n async get(slug: string): Promise<Dataset> {\n this.validateDatasetSlug(slug);\n\n const response = await this.client.get(`/v2/datasets/${slug}`);\n const data: DatasetResponse = await this.handleResponse(response);\n\n return new Dataset(this.client, data);\n }\n\n async list(): Promise<DatasetListResponse> {\n const response = await this.client.get(`/v2/datasets`);\n const data: DatasetListResponse = await this.handleResponse(response);\n\n if (!data || !data.datasets) {\n return {\n datasets: [],\n total: 0,\n };\n }\n\n const datasets = data.datasets.map(\n (datasetData) => new Dataset(this.client, datasetData),\n );\n\n return {\n ...data,\n datasets,\n };\n }\n\n async delete(slug: string): Promise<void> {\n this.validateDatasetSlug(slug);\n\n const response = await this.client.delete(`/v2/datasets/${slug}`);\n await this.handleResponse(response);\n }\n\n async getVersionCSV(slug: string, version: string): Promise<string> {\n this.validateDatasetSlug(slug);\n\n if (!version || typeof version !== \"string\") {\n throw new Error(\"Version must be a non-empty string\");\n }\n\n const response = await this.client.get(\n `/v2/datasets/${slug}/versions/${version}`,\n );\n const csvData = await this.handleResponse(response);\n\n if (typeof csvData !== \"string\") {\n throw new Error(\"Expected CSV data as string from API\");\n }\n\n return csvData;\n }\n\n async getVersionAsJsonl(slug: string, version: string): Promise<string> {\n if (!version || version === \"\") {\n throw new Error(\"Version is required\");\n }\n\n const url = `/v2/datasets/${slug}/versions/${version}/jsonl`;\n\n const response = await this.client.get(url);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch JSONL data: ${response.status} ${response.statusText}`,\n );\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n // If server returns JSON, handle it appropriately\n const jsonData = await response.json();\n if (jsonData.error) {\n throw new Error(jsonData.error);\n }\n // Convert JSON response to JSONL format if needed\n if (Array.isArray(jsonData)) {\n return jsonData.map((item) => JSON.stringify(item)).join(\"\\n\");\n }\n return JSON.stringify(jsonData);\n }\n\n // Expect JSONL format (text/plain or application/jsonl)\n return await response.text();\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { BaseDatasetEntity } from \"../dataset/base-dataset\";\nimport type {\n EvaluatorRunOptions,\n TriggerEvaluatorRequest,\n TriggerEvaluatorResponse,\n InputSchemaMapping,\n} from \"../../interfaces/evaluator.interface\";\nimport type { ExecutionResponse } from \"../../interfaces/experiment.interface\";\n\nexport class Evaluator extends BaseDatasetEntity {\n constructor(client: TraceloopClient) {\n super(client);\n }\n\n /**\n * Run evaluators on experiment task results and wait for completion\n */\n async runExperimentEvaluator(\n options: EvaluatorRunOptions,\n ): Promise<ExecutionResponse[]> {\n const {\n experimentId,\n experimentRunId,\n taskId,\n taskResult,\n evaluator,\n waitForResults = true,\n } = options;\n\n this.validateEvaluatorOptions(options);\n\n const triggerResponse = await this.triggerExperimentEvaluator({\n experimentId,\n experimentRunId,\n taskId,\n evaluator,\n taskResult,\n });\n\n if (!waitForResults) {\n return [\n {\n executionId: triggerResponse.executionId,\n result: { status: \"running\", startedAt: new Date().toISOString() },\n },\n ];\n }\n\n return this.waitForResult(\n triggerResponse.executionId,\n triggerResponse.streamUrl,\n );\n }\n\n /**\n * Trigger evaluator execution without waiting for results\n */\n async triggerExperimentEvaluator(\n request: TriggerEvaluatorRequest,\n ): Promise<TriggerEvaluatorResponse> {\n const { experimentId, experimentRunId, taskId, evaluator, taskResult } =\n request;\n\n if (!experimentId || !taskResult) {\n throw new Error(\"experimentId, evaluator, and taskResult are required\");\n }\n\n // Handle string, EvaluatorWithVersion, and EvaluatorWithConfig types\n const evaluatorName =\n typeof evaluator === \"string\" ? evaluator : evaluator.name;\n const evaluatorVersion =\n typeof evaluator === \"string\" ? undefined : evaluator.version;\n // Extract config if present (EvaluatorWithConfig type)\n const evaluatorConfig =\n typeof evaluator === \"object\" && \"config\" in evaluator\n ? evaluator.config\n : undefined;\n\n if (!evaluatorName) {\n throw new Error(\"evaluator name is required\");\n }\n\n const inputSchemaMapping = this.createInputSchemaMapping(taskResult);\n\n const payload: Record<string, unknown> = {\n experiment_id: experimentId,\n experiment_run_id: experimentRunId,\n evaluator_version: evaluatorVersion,\n task_id: taskId,\n input_schema_mapping: inputSchemaMapping,\n };\n\n // Add evaluator config if present\n if (evaluatorConfig && Object.keys(evaluatorConfig).length > 0) {\n payload.evaluator_config = evaluatorConfig;\n }\n\n const response = await this.client.post(\n `/v2/evaluators/slug/${evaluatorName}/execute`,\n payload,\n );\n const data = await this.handleResponse(response);\n\n return {\n executionId: data.executionId,\n streamUrl: data.streamUrl,\n };\n }\n\n /**\n * Wait for execution result via stream URL (actually JSON endpoint)\n */\n async waitForResult(\n executionId: string,\n streamUrl: string,\n ): Promise<ExecutionResponse[]> {\n if (!executionId || !streamUrl) {\n throw new Error(\"Execution ID and stream URL are required\");\n }\n\n const fullStreamUrl = `${this.client[\"baseUrl\"]}/v2${streamUrl}`;\n\n try {\n const response = await fetch(fullStreamUrl, {\n headers: {\n Authorization: `Bearer ${this.client[\"apiKey\"]}`,\n Accept: \"application/json\",\n \"Cache-Control\": \"no-cache\",\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to get results: ${response.status}, body: ${errorText}`,\n );\n }\n\n const responseText = await response.text();\n const responseData = JSON.parse(responseText);\n\n // Check execution ID match\n if (\n responseData.execution_id &&\n responseData.execution_id !== executionId\n ) {\n throw new Error(\n `Execution ID mismatch: ${responseData.execution_id} !== ${executionId}`,\n );\n }\n\n // Convert to ExecutionResponse format\n const executionResponse: ExecutionResponse = {\n executionId: responseData.execution_id,\n result: responseData.result,\n };\n\n return [executionResponse];\n } catch (error) {\n throw new Error(\n `Failed to wait for result: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Validate evaluator run options\n */\n private validateEvaluatorOptions(options: EvaluatorRunOptions): void {\n const { experimentId, evaluator, taskResult } = options;\n\n if (\n !experimentId ||\n typeof experimentId !== \"string\" ||\n experimentId.trim().length === 0\n ) {\n throw new Error(\n \"Experiment ID is required and must be a non-empty string\",\n );\n }\n\n if (!evaluator) {\n throw new Error(\"At least one evaluator must be specified\");\n }\n\n if (!taskResult) {\n throw new Error(\"At least one task result must be provided\");\n }\n\n // Validate evaluator based on its type\n if (typeof evaluator === \"string\") {\n if (!evaluator.trim()) {\n throw new Error(\"Evaluator name cannot be empty\");\n }\n } else {\n if (\n !evaluator.name ||\n typeof evaluator.name !== \"string\" ||\n !evaluator.name.trim()\n ) {\n throw new Error(\"Evaluator must have a valid name\");\n }\n }\n\n // Validate each task result\n if (!taskResult || typeof taskResult !== \"object\") {\n throw new Error(`Task result must be a valid object`);\n }\n }\n\n /**\n * Create InputSchemaMapping from input object\n */\n private createInputSchemaMapping(\n input: Record<string, any>,\n ): InputSchemaMapping {\n const mapping: InputSchemaMapping = {};\n\n for (const [key, value] of Object.entries(input)) {\n mapping[key] = { source: String(value) };\n }\n\n return mapping;\n }\n}\n","import { TraceloopClient } from \"../traceloop-client\";\nimport { Evaluator } from \"../evaluator/evaluator\";\nimport { Datasets } from \"../dataset/datasets\";\nimport { transformApiResponse } from \"../../utils/response-transformer\";\nimport type {\n ExperimentTaskFunction,\n ExperimentRunOptions,\n ExperimentRunResult,\n TaskResponse,\n InitExperimentRequest,\n ExperimentInitResponse,\n ExecutionResponse,\n CreateTaskRequest,\n CreateTaskResponse,\n GithubContext,\n TaskResult,\n RunInGithubOptions,\n RunInGithubResponse,\n} from \"../../interfaces/experiment.interface\";\n\nexport class Experiment {\n private client: TraceloopClient;\n private evaluator: Evaluator;\n private datasets: Datasets;\n private _lastExperimentSlug?: string;\n private _lastRunId?: string;\n\n constructor(client: TraceloopClient) {\n this.client = client;\n this.evaluator = new Evaluator(client);\n this.datasets = new Datasets(client);\n }\n\n /**\n * Generate a unique experiment slug\n */\n private generateExperimentSlug(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 7);\n return `exp-${timestamp}${random}`.substring(0, 15);\n }\n\n private async handleResponse(response: Response) {\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const errorData = await response.json();\n if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Use default HTTP error message if JSON parsing fails\n }\n\n throw new Error(errorMessage);\n }\n\n const contentType = (\n response.headers.get(\"content-type\") || \"\"\n ).toLowerCase();\n if (\n contentType.includes(\"text/csv\") ||\n contentType.includes(\"application/x-ndjson\")\n ) {\n return await response.text();\n } else {\n const rawData = await response.json();\n return transformApiResponse(rawData);\n }\n }\n\n /**\n * Run an experiment with the given task function and options\n */\n async run<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions | RunInGithubOptions = {},\n ): Promise<ExperimentRunResult | RunInGithubResponse> {\n // Check if running in GitHub Actions\n if (process.env.GITHUB_ACTIONS === \"true\") {\n return await this.runInGithub(task, options as RunInGithubOptions);\n }\n\n return await this.runLocally(task, options);\n }\n\n /**\n * Run an experiment locally (not in GitHub Actions)\n */\n private async runLocally<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions = {},\n ): Promise<ExperimentRunResult> {\n const {\n datasetSlug,\n datasetVersion,\n evaluators = [],\n waitForResults = true,\n } = options;\n\n // When experimentSlug is not provided a random one is generated\n let { experimentSlug } = options;\n if (!experimentSlug) {\n experimentSlug =\n this.client.experimentSlug || this.generateExperimentSlug();\n }\n\n this.validateRunOptions(task, options);\n\n try {\n const evaluatorSlugs = evaluators.map((evaluator) =>\n typeof evaluator === \"string\" ? evaluator : evaluator.name,\n );\n const experimentResponse = await this.initializeExperiment({\n slug: experimentSlug,\n datasetSlug,\n datasetVersion,\n evaluatorSlugs,\n });\n\n const rows = await this.getDatasetRows(datasetSlug, datasetVersion);\n\n const taskResults: TaskResponse[] = [];\n const taskErrors: string[] = [];\n const evaluationResults: ExecutionResponse[] = [];\n\n for (const row of rows) {\n const taskOutput = await task(row as TInput);\n\n // Create TaskResponse object\n const taskResponse: TaskResponse = {\n input: row,\n output: taskOutput as Record<string, any>,\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n timestamp: Date.now(),\n };\n\n taskResults.push(taskResponse);\n\n const response = await this.createTask(\n experimentSlug,\n experimentResponse.run.id,\n row,\n taskOutput as Record<string, any>,\n );\n const taskId = response.id;\n\n if (evaluators.length > 0) {\n for (const evaluator of evaluators) {\n const singleEvaluationResult =\n await this.evaluator.runExperimentEvaluator({\n experimentId: experimentResponse.experiment.id,\n experimentRunId: experimentResponse.run.id,\n taskId,\n evaluator,\n taskResult: taskOutput as Record<string, any>,\n waitForResults,\n timeout: 120000, // 2 minutes default\n });\n evaluationResults.push(...singleEvaluationResult);\n }\n }\n }\n\n const evalResults = evaluationResults.map(\n (evaluation) => evaluation.result,\n );\n\n // Track last experiment slug and run ID for export methods\n this._lastExperimentSlug = experimentSlug;\n this._lastRunId = experimentResponse.run.id;\n\n return {\n taskResults: taskResults,\n errors: taskErrors,\n experimentId: experimentResponse.experiment.id,\n runId: experimentResponse.run.id,\n evaluations: evalResults,\n };\n } catch (error) {\n throw new Error(\n `Experiment execution failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Create a task for the experiment\n */\n async createTask(\n experimentSlug: string,\n experimentRunId: string,\n taskInput: Record<string, any>,\n taskOutput: Record<string, any>,\n ): Promise<CreateTaskResponse> {\n const body: CreateTaskRequest = {\n input: taskInput,\n output: taskOutput,\n };\n\n const response = await this.client.post(\n `/v2/experiments/${experimentSlug}/runs/${experimentRunId}/task`,\n body,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to create task for experiment '${experimentSlug}'`,\n );\n }\n\n const data = await this.handleResponse(response);\n return {\n id: data.id,\n };\n }\n\n /**\n * Initialize a new experiment\n */\n async initializeExperiment(\n request: InitExperimentRequest,\n ): Promise<ExperimentInitResponse> {\n if (request.aux) {\n request.experimentRunMetadata = {\n ...request.experimentRunMetadata,\n aux: request.aux,\n };\n }\n\n if (request.relatedRef) {\n request.experimentRunMetadata = {\n ...request.experimentRunMetadata,\n related_ref: request.relatedRef,\n };\n }\n\n const payload = {\n slug: request.slug,\n dataset_slug: request.datasetSlug,\n dataset_version: request.datasetVersion,\n evaluator_slugs: request.evaluatorSlugs,\n experiment_metadata: request.experimentMetadata,\n experiment_run_metadata: request.experimentRunMetadata,\n };\n\n const response = await this.client.put(\n \"/v2/experiments/initialize\",\n payload,\n );\n const data = await this.handleResponse(response);\n\n return data;\n }\n\n /**\n * Parse JSONL string into list of {col_name: col_value} dictionaries\n * Skips the first line (columns definition)\n */\n private parseJsonlToRows(jsonlData: string): Record<string, any>[] {\n const rows: Record<string, any>[] = [];\n const lines = jsonlData.trim().split(\"\\n\");\n\n // Skip the first line (columns definition)\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (line) {\n try {\n const rowData = JSON.parse(line);\n rows.push(rowData);\n } catch {\n // Skip invalid JSON lines\n continue;\n }\n }\n }\n\n return rows;\n }\n\n /**\n * Get dataset rows for experiment execution\n */\n private async getDatasetRows(\n datasetSlug?: string,\n datasetVersion?: string,\n ): Promise<Record<string, any>[]> {\n if (!datasetSlug) {\n throw new Error(\"Dataset slug is required for experiment execution\");\n }\n\n const dataset = await this.datasets.getVersionAsJsonl(\n datasetSlug,\n datasetVersion || \"\",\n );\n const rows = this.parseJsonlToRows(dataset);\n return rows;\n }\n\n /**\n * Validate experiment run options\n */\n private validateRunOptions<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: ExperimentRunOptions,\n ): void {\n if (!task || typeof task !== \"function\") {\n throw new Error(\"Task function is required and must be a function\");\n }\n\n if (options.evaluators) {\n options.evaluators.forEach((evaluator, index) => {\n if (typeof evaluator === \"string\") {\n if (!evaluator.trim()) {\n throw new Error(\n `Evaluator at index ${index} cannot be an empty string`,\n );\n }\n } else {\n if (!evaluator || typeof evaluator !== \"object\") {\n throw new Error(\n `Evaluator at index ${index} must be a string or object with name and version`,\n );\n }\n if (\n !evaluator.name ||\n typeof evaluator.name !== \"string\" ||\n !evaluator.name.trim()\n ) {\n throw new Error(\n `Evaluator at index ${index} must have a valid non-empty name`,\n );\n }\n }\n });\n }\n }\n\n /**\n * Extract GitHub Actions context from environment variables\n */\n private getGithubContext(): GithubContext {\n const repository = process.env.GITHUB_REPOSITORY;\n const ref = process.env.GITHUB_REF;\n const sha = process.env.GITHUB_SHA;\n const actor = process.env.GITHUB_ACTOR;\n\n if (!repository || !ref || !sha || !actor) {\n throw new Error(\n \"Missing required GitHub environment variables: GITHUB_REPOSITORY, GITHUB_REF, GITHUB_SHA, or GITHUB_ACTOR\",\n );\n }\n\n // Extract PR number from ref (e.g., refs/pull/123/merge -> 123)\n const prMatch = ref.match(/refs\\/pull\\/(\\d+)\\//);\n const prNumber = prMatch ? prMatch[1] : null;\n\n if (!prNumber) {\n throw new Error(\n `This method can only be run on pull request events. Current ref: ${ref}`,\n );\n }\n\n const prUrl = `https://github.com/${repository}/pull/${prNumber}`;\n\n return {\n repository,\n prUrl,\n commitHash: sha,\n actor,\n };\n }\n\n /**\n * Execute tasks locally and capture results\n */\n private async executeTasksLocally<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n rows: Record<string, any>[],\n ): Promise<TaskResult[]> {\n return await Promise.all(\n rows.map(async (row) => {\n try {\n const output = await task(row as TInput);\n return {\n input: row,\n output: output as Record<string, any>,\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n };\n } catch (error) {\n return {\n input: row,\n error: error instanceof Error ? error.message : String(error),\n metadata: {\n rowId: row.id,\n timestamp: Date.now(),\n },\n };\n }\n }),\n );\n }\n\n /**\n * Run an experiment in GitHub Actions environment\n * This method executes tasks locally and submits results to the backend for evaluation\n */\n async runInGithub<TInput, TOutput>(\n task: ExperimentTaskFunction<TInput, TOutput>,\n options: RunInGithubOptions,\n ): Promise<RunInGithubResponse> {\n const {\n datasetSlug,\n datasetVersion,\n evaluators = [],\n experimentMetadata,\n experimentRunMetadata,\n relatedRef,\n aux,\n } = options;\n\n // Generate or use provided experiment slug\n let { experimentSlug } = options;\n if (!experimentSlug) {\n experimentSlug =\n this.client.experimentSlug || this.generateExperimentSlug();\n }\n\n if (!task || typeof task !== \"function\") {\n throw new Error(\"Task function is required and must be a function\");\n }\n\n try {\n const githubContext = this.getGithubContext();\n\n const rows = await this.getDatasetRows(datasetSlug, datasetVersion);\n\n const taskResults = await this.executeTasksLocally(task, rows);\n\n // Prepare evaluator slugs\n const evaluatorSlugs = evaluators.map((evaluator) =>\n typeof evaluator === \"string\" ? evaluator : evaluator.name,\n );\n\n const mergedExperimentMetadata = {\n ...(experimentMetadata || {}),\n created_from: \"github\",\n };\n\n const mergedExperimentRunMetadata = {\n ...(experimentRunMetadata || {}),\n ...(relatedRef && { related_ref: relatedRef }),\n ...(aux && { aux: aux }),\n };\n\n // Submit to backend\n const payload = {\n experiment_slug: experimentSlug,\n dataset_slug: datasetSlug,\n dataset_version: datasetVersion,\n evaluator_slugs: evaluatorSlugs,\n task_results: taskResults,\n github_context: {\n repository: githubContext.repository,\n pr_url: githubContext.prUrl,\n commit_hash: githubContext.commitHash,\n actor: githubContext.actor,\n },\n experiment_metadata: mergedExperimentMetadata,\n experiment_run_metadata: mergedExperimentRunMetadata,\n };\n\n const response = await this.client.post(\n \"/v2/experiments/run-in-github\",\n payload,\n );\n const data = await this.handleResponse(response);\n\n // Track last experiment slug and run ID for export methods\n this._lastExperimentSlug = data.experimentSlug;\n this._lastRunId = data.runId;\n\n return data;\n } catch (error) {\n throw new Error(\n `GitHub experiment execution failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n }\n }\n\n /**\n * Resolve export parameters by falling back to last used values\n */\n private resolveExportParams(\n experimentSlug?: string,\n runId?: string,\n ): { slug: string; runId: string } {\n const slug = experimentSlug || this._lastExperimentSlug;\n const rid = runId || this._lastRunId;\n\n if (!slug) {\n throw new Error(\"experiment_slug is required\");\n }\n if (!rid) {\n throw new Error(\"run_id is required\");\n }\n\n return { slug, runId: rid };\n }\n\n /**\n * Export experiment results as CSV string\n * @param experimentSlug - Optional experiment slug (uses last run if not provided)\n * @param runId - Optional run ID (uses last run if not provided)\n * @returns CSV string of experiment results\n */\n async toCsvString(experimentSlug?: string, runId?: string): Promise<string> {\n const { slug, runId: rid } = this.resolveExportParams(\n experimentSlug,\n runId,\n );\n\n const response = await this.client.get(\n `/v2/experiments/${slug}/runs/${rid}/export/csv`,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to export CSV for experiment '${slug}' run '${rid}'`,\n );\n }\n\n const result = await this.handleResponse(response);\n\n if (result === null || result === undefined) {\n throw new Error(\n `Failed to export CSV for experiment '${slug}' run '${rid}'`,\n );\n }\n\n return String(result);\n }\n\n /**\n * Export experiment results as JSON string\n * @param experimentSlug - Optional experiment slug (uses last run if not provided)\n * @param runId - Optional run ID (uses last run if not provided)\n * @returns JSON string of experiment results\n */\n async toJsonString(experimentSlug?: string, runId?: string): Promise<string> {\n const { slug, runId: rid } = this.resolveExportParams(\n experimentSlug,\n runId,\n );\n\n const response = await this.client.get(\n `/v2/experiments/${slug}/runs/${rid}/export/json`,\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to export JSON for experiment '${slug}' run '${rid}'`,\n );\n }\n\n const result = await this.handleResponse(response);\n\n if (result === null || result === undefined) {\n throw new Error(\n `Failed to export JSON for experiment '${slug}' run '${rid}'`,\n );\n }\n\n // If result is already a string, return it; otherwise stringify it\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n}\n","import { TraceloopClientOptions } from \"../interfaces\";\nimport { version } from \"../../../package.json\";\nimport { UserFeedback } from \"./annotation/user-feedback\";\nimport { Datasets } from \"./dataset/datasets\";\nimport { Experiment } from \"./experiment/experiment\";\nimport { Evaluator } from \"./evaluator/evaluator\";\n\n/**\n * The main client for interacting with Traceloop's API.\n * This client can be used either directly or through the singleton pattern via configuration.\n *\n * @example\n * // Direct usage\n * const client = new TraceloopClient('your-api-key');\n *\n * @example\n * // Through configuration (recommended)\n * initialize({ apiKey: 'your-api-key', appName: 'your-app' });\n * const client = getClient();\n */\nexport class TraceloopClient {\n private version: string = version;\n public appName: string;\n private baseUrl: string;\n private apiKey: string;\n public experimentSlug?: string;\n\n public userFeedback: UserFeedback;\n public datasets: Datasets;\n public experiment: Experiment;\n public evaluator: Evaluator;\n\n /**\n * Creates a new instance of the TraceloopClient.\n *\n * @param options - Configuration options for the client\n */\n constructor(options: TraceloopClientOptions) {\n this.apiKey = options.apiKey;\n this.appName = options.appName;\n this.baseUrl =\n options.baseUrl ||\n process.env.ANYWAY_BASE_URL ||\n \"https://api.traceloop.com\";\n this.experimentSlug = options.experimentSlug;\n\n this.userFeedback = new UserFeedback(this);\n this.datasets = new Datasets(this);\n this.experiment = new Experiment(this);\n this.evaluator = new Evaluator(this);\n }\n\n async post(path: string, body: Record<string, unknown> | any) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n body: JSON.stringify(body),\n });\n }\n\n async get(path: string) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n });\n }\n\n async put(path: string, body: Record<string, unknown> | any) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n body: JSON.stringify(body),\n });\n }\n\n async delete(path: string) {\n return await fetch(`${this.baseUrl}${path}`, {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Traceloop-SDK-Version\": this.version,\n },\n });\n }\n}\n","// Auto-generated - DO NOT EDIT\n// Regenerate with: pnpm generate:evaluator-models\n\nexport interface EvaluatorSchema {\n slug: string;\n requiredInputFields: string[];\n optionalConfigFields: string[];\n description?: string;\n}\n\nexport type EvaluatorSlug = 'agent-efficiency' | 'agent-flow-quality' | 'agent-goal-accuracy' | 'agent-goal-completeness' | 'agent-tool-error-detector' | 'agent-tool-trajectory' | 'answer-completeness' | 'answer-correctness' | 'answer-relevancy' | 'char-count' | 'char-count-ratio' | 'context-relevance' | 'conversation-quality' | 'faithfulness' | 'html-comparison' | 'instruction-adherence' | 'intent-change' | 'json-validator' | 'perplexity' | 'pii-detector' | 'placeholder-regex' | 'profanity-detector' | 'prompt-injection' | 'prompt-perplexity' | 'regex-validator' | 'secrets-detector' | 'semantic-similarity' | 'sexism-detector' | 'sql-validator' | 'tone-detection' | 'topic-adherence' | 'toxicity-detector' | 'uncertainty-detector' | 'word-count' | 'word-count-ratio';\n\nexport const EVALUATOR_SLUGS: EvaluatorSlug[] = [\n 'agent-efficiency',\n 'agent-flow-quality',\n 'agent-goal-accuracy',\n 'agent-goal-completeness',\n 'agent-tool-error-detector',\n 'agent-tool-trajectory',\n 'answer-completeness',\n 'answer-correctness',\n 'answer-relevancy',\n 'char-count',\n 'char-count-ratio',\n 'context-relevance',\n 'conversation-quality',\n 'faithfulness',\n 'html-comparison',\n 'instruction-adherence',\n 'intent-change',\n 'json-validator',\n 'perplexity',\n 'pii-detector',\n 'placeholder-regex',\n 'profanity-detector',\n 'prompt-injection',\n 'prompt-perplexity',\n 'regex-validator',\n 'secrets-detector',\n 'semantic-similarity',\n 'sexism-detector',\n 'sql-validator',\n 'tone-detection',\n 'topic-adherence',\n 'toxicity-detector',\n 'uncertainty-detector',\n 'word-count',\n 'word-count-ratio',\n];\n\nexport const EVALUATOR_SCHEMAS: Record<EvaluatorSlug, EvaluatorSchema> = {\n 'agent-efficiency': {\n slug: 'agent-efficiency',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: [],\n description: \"Evaluate agent efficiency - detect redundant calls, unnecessary follow-ups\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\",\n },\n 'agent-flow-quality': {\n slug: 'agent-flow-quality',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: ['conditions', 'threshold'],\n description: \"Validate agent trajectory against user-defined conditions\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\\n- `config.conditions` (array of strings, required): Array of evaluation conditions/rules to validate against\\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\",\n },\n 'agent-goal-accuracy': {\n slug: 'agent-goal-accuracy',\n requiredInputFields: ['completion', 'question', 'reference'],\n optionalConfigFields: [],\n description: \"Evaluate agent goal accuracy\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question or goal\\n- `input.completion` (string, required): The agent's completion/response\\n- `input.reference` (string, required): The expected reference answer\",\n },\n 'agent-goal-completeness': {\n slug: 'agent-goal-completeness',\n requiredInputFields: ['trajectory_completions', 'trajectory_prompts'],\n optionalConfigFields: ['threshold'],\n description: \"Measure if agent accomplished all user goals\\n\\n**Request Body:**\\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\",\n },\n 'agent-tool-error-detector': {\n slug: 'agent-tool-error-detector',\n requiredInputFields: ['tool_input', 'tool_output'],\n optionalConfigFields: [],\n description: \"Detect errors or failures during tool execution\\n\\n**Request Body:**\\n- `input.tool_input` (string, required): JSON string of the tool input\\n- `input.tool_output` (string, required): JSON string of the tool output\",\n },\n 'agent-tool-trajectory': {\n slug: 'agent-tool-trajectory',\n requiredInputFields: ['executed_tool_calls', 'expected_tool_calls'],\n optionalConfigFields: ['input_params_sensitive', 'mismatch_sensitive', 'order_sensitive', 'threshold'],\n description: \"Compare actual tool calls against expected reference tool calls\\n\\n**Request Body:**\\n- `input.executed_tool_calls` (string, required): JSON array of actual tool calls made by the agent\\n- `input.expected_tool_calls` (string, required): JSON array of expected/reference tool calls\\n- `config.threshold` (float, optional): Score threshold for pass/fail determination (default: 0.5)\\n- `config.mismatch_sensitive` (bool, optional): Whether tool calls must match exactly (default: false)\\n- `config.order_sensitive` (bool, optional): Whether order of tool calls matters (default: false)\\n- `config.input_params_sensitive` (bool, optional): Whether to compare input parameters (default: true)\",\n },\n 'answer-completeness': {\n slug: 'answer-completeness',\n requiredInputFields: ['completion', 'context', 'question'],\n optionalConfigFields: [],\n description: \"Evaluate whether the answer is complete and contains all the necessary information\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate for completeness\\n- `input.context` (string, required): The context that provides the complete information\",\n },\n 'answer-correctness': {\n slug: 'answer-correctness',\n requiredInputFields: ['completion', 'ground_truth', 'question'],\n optionalConfigFields: [],\n description: \"Evaluate factual accuracy by comparing answers against ground truth\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate\\n- `input.ground_truth` (string, required): The expected correct answer\",\n },\n 'answer-relevancy': {\n slug: 'answer-relevancy',\n requiredInputFields: ['answer', 'question'],\n optionalConfigFields: [],\n description: \"Check if an answer is relevant to a question\\n\\n**Request Body:**\\n- `input.answer` (string, required): The answer to evaluate for relevancy\\n- `input.question` (string, required): The question that the answer should be relevant to\",\n },\n 'char-count': {\n slug: 'char-count',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Count the number of characters in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to count characters in\",\n },\n 'char-count-ratio': {\n slug: 'char-count-ratio',\n requiredInputFields: ['denominator_text', 'numerator_text'],\n optionalConfigFields: [],\n description: \"Calculate the ratio of characters between two texts\\n\\n**Request Body:**\\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\",\n },\n 'context-relevance': {\n slug: 'context-relevance',\n requiredInputFields: ['context', 'query'],\n optionalConfigFields: ['model'],\n description: \"Evaluate whether retrieved context contains sufficient information to answer the query\\n\\n**Request Body:**\\n- `input.query` (string, required): The query/question to evaluate context relevance for\\n- `input.context` (string, required): The context to evaluate for relevance to the query\\n- `config.model` (string, optional): Model to use for evaluation (default: gpt-4o)\",\n },\n 'conversation-quality': {\n slug: 'conversation-quality',\n requiredInputFields: ['completions', 'prompts'],\n optionalConfigFields: [],\n description: \"Evaluate conversation quality based on tone, clarity, flow, responsiveness, and transparency\\n\\n**Request Body:**\\n- `input.prompts` (string, required): JSON array of prompts in the conversation\\n- `input.completions` (string, required): JSON array of completions in the conversation\",\n },\n 'faithfulness': {\n slug: 'faithfulness',\n requiredInputFields: ['completion', 'context', 'question'],\n optionalConfigFields: [],\n description: \"Check if a completion is faithful to the provided context\\n\\n**Request Body:**\\n- `input.completion` (string, required): The LLM completion to check for faithfulness\\n- `input.context` (string, required): The context that the completion should be faithful to\\n- `input.question` (string, required): The original question asked\",\n },\n 'html-comparison': {\n slug: 'html-comparison',\n requiredInputFields: ['html1', 'html2'],\n optionalConfigFields: [],\n description: \"Compare two HTML documents for structural and content similarity\\n\\n**Request Body:**\\n- `input.html1` (string, required): The first HTML document to compare\\n- `input.html2` (string, required): The second HTML document to compare\",\n },\n 'instruction-adherence': {\n slug: 'instruction-adherence',\n requiredInputFields: ['instructions', 'response'],\n optionalConfigFields: [],\n description: \"Evaluate how well responses follow given instructions\\n\\n**Request Body:**\\n- `input.instructions` (string, required): The instructions that should be followed\\n- `input.response` (string, required): The response to evaluate for instruction adherence\",\n },\n 'intent-change': {\n slug: 'intent-change',\n requiredInputFields: ['completions', 'prompts'],\n optionalConfigFields: [],\n description: \"Detect changes in user intent between prompts and completions\\n\\n**Request Body:**\\n- `input.prompts` (string, required): JSON array of prompts in the conversation\\n- `input.completions` (string, required): JSON array of completions in the conversation\",\n },\n 'json-validator': {\n slug: 'json-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: ['enable_schema_validation', 'schema_string'],\n description: \"Validate JSON syntax\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate as JSON\\n- `config.enable_schema_validation` (bool, optional): Enable JSON schema validation\\n- `config.schema_string` (string, optional): JSON schema to validate against\",\n },\n 'perplexity': {\n slug: 'perplexity',\n requiredInputFields: ['logprobs'],\n optionalConfigFields: [],\n description: \"Measure text perplexity from logprobs\\n\\n**Request Body:**\\n- `input.logprobs` (string, required): JSON array of log probabilities from the model\",\n },\n 'pii-detector': {\n slug: 'pii-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['probability_threshold'],\n description: \"Detect personally identifiable information in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for personally identifiable information\\n- `config.probability_threshold` (float, optional): Detection threshold (default: 0.8)\",\n },\n 'placeholder-regex': {\n slug: 'placeholder-regex',\n requiredInputFields: ['placeholder_value', 'text'],\n optionalConfigFields: ['case_sensitive', 'dot_include_nl', 'multi_line', 'should_match'],\n description: \"Validate text against a placeholder regex pattern\\n\\n**Request Body:**\\n- `input.placeholder_value` (string, required): The regex pattern to match against\\n- `input.text` (string, required): The text to validate against the regex pattern\\n- `config.should_match` (bool, optional): Whether the text should match the regex\\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\\n- `config.multi_line` (bool, optional): Multi-line mode\",\n },\n 'profanity-detector': {\n slug: 'profanity-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect profanity in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for profanity\",\n },\n 'prompt-injection': {\n slug: 'prompt-injection',\n requiredInputFields: ['prompt'],\n optionalConfigFields: ['threshold'],\n description: \"Detect prompt injection attempts\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The prompt to check for injection attempts\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'prompt-perplexity': {\n slug: 'prompt-perplexity',\n requiredInputFields: ['prompt'],\n optionalConfigFields: [],\n description: \"Measure prompt perplexity to detect potential injection attempts\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The prompt to calculate perplexity for\",\n },\n 'regex-validator': {\n slug: 'regex-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: ['case_sensitive', 'dot_include_nl', 'multi_line', 'regex', 'should_match'],\n description: \"Validate text against a regex pattern\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate against a regex pattern\\n- `config.regex` (string, optional): The regex pattern to match against\\n- `config.should_match` (bool, optional): Whether the text should match the regex\\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\\n- `config.multi_line` (bool, optional): Multi-line mode\",\n },\n 'secrets-detector': {\n slug: 'secrets-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect secrets and credentials in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for secrets (API keys, passwords, etc.)\",\n },\n 'semantic-similarity': {\n slug: 'semantic-similarity',\n requiredInputFields: ['completion', 'reference'],\n optionalConfigFields: [],\n description: \"Calculate semantic similarity between completion and reference\\n\\n**Request Body:**\\n- `input.completion` (string, required): The completion text to compare\\n- `input.reference` (string, required): The reference text to compare against\",\n },\n 'sexism-detector': {\n slug: 'sexism-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['threshold'],\n description: \"Detect sexist language and bias\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for sexist content\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'sql-validator': {\n slug: 'sql-validator',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Validate SQL query syntax\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to validate as SQL\",\n },\n 'tone-detection': {\n slug: 'tone-detection',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Detect the tone of the text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to detect the tone of\",\n },\n 'topic-adherence': {\n slug: 'topic-adherence',\n requiredInputFields: ['completion', 'question', 'reference_topics'],\n optionalConfigFields: [],\n description: \"Evaluate topic adherence\\n\\n**Request Body:**\\n- `input.question` (string, required): The original question\\n- `input.completion` (string, required): The completion to evaluate\\n- `input.reference_topics` (string, required): Comma-separated list of expected topics\",\n },\n 'toxicity-detector': {\n slug: 'toxicity-detector',\n requiredInputFields: ['text'],\n optionalConfigFields: ['threshold'],\n description: \"Detect toxic or harmful language\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to scan for toxic content\\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\",\n },\n 'uncertainty-detector': {\n slug: 'uncertainty-detector',\n requiredInputFields: ['prompt'],\n optionalConfigFields: [],\n description: \"Detect uncertainty in the text\\n\\n**Request Body:**\\n- `input.prompt` (string, required): The text to detect uncertainty in\",\n },\n 'word-count': {\n slug: 'word-count',\n requiredInputFields: ['text'],\n optionalConfigFields: [],\n description: \"Count the number of words in text\\n\\n**Request Body:**\\n- `input.text` (string, required): The text to count words in\",\n },\n 'word-count-ratio': {\n slug: 'word-count-ratio',\n requiredInputFields: ['denominator_text', 'numerator_text'],\n optionalConfigFields: [],\n description: \"Calculate the ratio of words between two texts\\n\\n**Request Body:**\\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\",\n },\n};\n\nexport function getEvaluatorSchema<S extends EvaluatorSlug>(slug: S): EvaluatorSchema {\n return EVALUATOR_SCHEMAS[slug];\n}\n\nexport function isValidEvaluatorSlug(slug: string): slug is EvaluatorSlug {\n return slug in EVALUATOR_SCHEMAS;\n}\n","// Auto-generated - DO NOT EDIT\n// Regenerate with: pnpm generate:evaluator-models\n\nimport type { EvaluatorWithConfig } from '../../interfaces/experiment.interface';\nimport type { components } from './types';\nimport { EVALUATOR_SLUGS, EVALUATOR_SCHEMAS, isValidEvaluatorSlug, type EvaluatorSlug, type EvaluatorSchema } from './registry';\n\n// Config type aliases from generated OpenAPI types\nexport type AgentFlowQualityConfig = components['schemas']['request.AgentFlowQualityRequest']['config'];\nexport type AgentGoalCompletenessConfig = components['schemas']['request.AgentGoalCompletenessRequest']['config'];\nexport type AgentToolTrajectoryConfig = components['schemas']['request.AgentToolTrajectoryRequest']['config'];\nexport type ContextRelevanceConfig = components['schemas']['request.ContextRelevanceRequest']['config'];\nexport type JsonValidatorConfig = components['schemas']['request.JSONValidatorRequest']['config'];\nexport type PiiDetectorConfig = components['schemas']['request.PIIDetectorRequest']['config'];\nexport type PlaceholderRegexConfig = components['schemas']['request.PlaceholderRegexRequest']['config'];\nexport type PromptInjectionConfig = components['schemas']['request.PromptInjectionRequest']['config'];\nexport type RegexValidatorConfig = components['schemas']['request.RegexValidatorRequest']['config'];\nexport type SexismDetectorConfig = components['schemas']['request.SexismDetectorRequest']['config'];\nexport type ToxicityDetectorConfig = components['schemas']['request.ToxicityDetectorRequest']['config'];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Utility functions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create an evaluator configuration object.\n */\nexport function createEvaluator(\n slug: EvaluatorSlug,\n options?: { version?: string; config?: Record<string, unknown> }\n): EvaluatorWithConfig {\n return {\n name: slug,\n version: options?.version,\n config: options?.config,\n };\n}\n\n/**\n * Validate that required input fields are present in task output.\n */\nexport function validateEvaluatorInput(\n slug: EvaluatorSlug,\n taskOutput: Record<string, unknown>\n): { valid: boolean; missingFields: string[] } {\n const schema = EVALUATOR_SCHEMAS[slug];\n if (!schema) {\n return { valid: false, missingFields: [] };\n }\n\n const missingFields = schema.requiredInputFields.filter(\n (field) => !(field in taskOutput) || taskOutput[field] === undefined\n );\n\n return {\n valid: missingFields.length === 0,\n missingFields,\n };\n}\n\n/**\n * Get all available evaluator slugs.\n */\nexport function getAvailableEvaluatorSlugs(): EvaluatorSlug[] {\n return [...EVALUATOR_SLUGS];\n}\n\n/**\n * Get schema information for an evaluator.\n */\nexport function getEvaluatorSchemaInfo(slug: EvaluatorSlug): EvaluatorSchema | undefined {\n return EVALUATOR_SCHEMAS[slug];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Factory class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Factory class for creating type-safe MBT evaluator configurations.\n *\n * @example\n * ```typescript\n * import { EvaluatorMadeByTraceloop } from '@anyway-sh/node-server-sdk';\n *\n * const evaluators = [\n * EvaluatorMadeByTraceloop.piiDetector({ probability_threshold: 0.8 }),\n * EvaluatorMadeByTraceloop.faithfulness(),\n * ];\n * ```\n */\nexport class EvaluatorMadeByTraceloop {\n static create(slug: EvaluatorSlug, options?: { version?: string; config?: Record<string, unknown> }): EvaluatorWithConfig {\n return createEvaluator(slug, options);\n }\n\n static getAvailableSlugs(): EvaluatorSlug[] {\n return getAvailableEvaluatorSlugs();\n }\n\n static isValidSlug(slug: string): slug is EvaluatorSlug {\n return isValidEvaluatorSlug(slug);\n }\n\n /**\n * Evaluate agent efficiency - detect redundant calls, unnecessary follow-ups\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentEfficiency(): EvaluatorWithConfig {\n return createEvaluator('agent-efficiency');\n }\n\n /**\n * Validate agent trajectory against user-defined conditions\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n- `config.conditions` (array of strings, required): Array of evaluation conditions/rules to validate against\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentFlowQuality(config?: AgentFlowQualityConfig): EvaluatorWithConfig {\n return createEvaluator('agent-flow-quality', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate agent goal accuracy\n\n**Request Body:**\n- `input.question` (string, required): The original question or goal\n- `input.completion` (string, required): The agent's completion/response\n- `input.reference` (string, required): The expected reference answer\n * Required task output fields: completion, question, reference\n */\n static agentGoalAccuracy(): EvaluatorWithConfig {\n return createEvaluator('agent-goal-accuracy');\n }\n\n /**\n * Measure if agent accomplished all user goals\n\n**Request Body:**\n- `input.trajectory_prompts` (string, required): JSON array of prompts in the agent trajectory\n- `input.trajectory_completions` (string, required): JSON array of completions in the agent trajectory\n- `config.threshold` (number, required): Score threshold for pass/fail determination (0.0-1.0)\n * Required task output fields: trajectory_completions, trajectory_prompts\n */\n static agentGoalCompleteness(config?: AgentGoalCompletenessConfig): EvaluatorWithConfig {\n return createEvaluator('agent-goal-completeness', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect errors or failures during tool execution\n\n**Request Body:**\n- `input.tool_input` (string, required): JSON string of the tool input\n- `input.tool_output` (string, required): JSON string of the tool output\n * Required task output fields: tool_input, tool_output\n */\n static agentToolErrorDetector(): EvaluatorWithConfig {\n return createEvaluator('agent-tool-error-detector');\n }\n\n /**\n * Compare actual tool calls against expected reference tool calls\n\n**Request Body:**\n- `input.executed_tool_calls` (string, required): JSON array of actual tool calls made by the agent\n- `input.expected_tool_calls` (string, required): JSON array of expected/reference tool calls\n- `config.threshold` (float, optional): Score threshold for pass/fail determination (default: 0.5)\n- `config.mismatch_sensitive` (bool, optional): Whether tool calls must match exactly (default: false)\n- `config.order_sensitive` (bool, optional): Whether order of tool calls matters (default: false)\n- `config.input_params_sensitive` (bool, optional): Whether to compare input parameters (default: true)\n * Required task output fields: executed_tool_calls, expected_tool_calls\n */\n static agentToolTrajectory(config?: AgentToolTrajectoryConfig): EvaluatorWithConfig {\n return createEvaluator('agent-tool-trajectory', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate whether the answer is complete and contains all the necessary information\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate for completeness\n- `input.context` (string, required): The context that provides the complete information\n * Required task output fields: completion, context, question\n */\n static answerCompleteness(): EvaluatorWithConfig {\n return createEvaluator('answer-completeness');\n }\n\n /**\n * Evaluate factual accuracy by comparing answers against ground truth\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate\n- `input.ground_truth` (string, required): The expected correct answer\n * Required task output fields: completion, ground_truth, question\n */\n static answerCorrectness(): EvaluatorWithConfig {\n return createEvaluator('answer-correctness');\n }\n\n /**\n * Check if an answer is relevant to a question\n\n**Request Body:**\n- `input.answer` (string, required): The answer to evaluate for relevancy\n- `input.question` (string, required): The question that the answer should be relevant to\n * Required task output fields: answer, question\n */\n static answerRelevancy(): EvaluatorWithConfig {\n return createEvaluator('answer-relevancy');\n }\n\n /**\n * Count the number of characters in text\n\n**Request Body:**\n- `input.text` (string, required): The text to count characters in\n * Required task output fields: text\n */\n static charCount(): EvaluatorWithConfig {\n return createEvaluator('char-count');\n }\n\n /**\n * Calculate the ratio of characters between two texts\n\n**Request Body:**\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\n * Required task output fields: denominator_text, numerator_text\n */\n static charCountRatio(): EvaluatorWithConfig {\n return createEvaluator('char-count-ratio');\n }\n\n /**\n * Evaluate whether retrieved context contains sufficient information to answer the query\n\n**Request Body:**\n- `input.query` (string, required): The query/question to evaluate context relevance for\n- `input.context` (string, required): The context to evaluate for relevance to the query\n- `config.model` (string, optional): Model to use for evaluation (default: gpt-4o)\n * Required task output fields: context, query\n */\n static contextRelevance(config?: ContextRelevanceConfig): EvaluatorWithConfig {\n return createEvaluator('context-relevance', { config: config as Record<string, unknown> });\n }\n\n /**\n * Evaluate conversation quality based on tone, clarity, flow, responsiveness, and transparency\n\n**Request Body:**\n- `input.prompts` (string, required): JSON array of prompts in the conversation\n- `input.completions` (string, required): JSON array of completions in the conversation\n * Required task output fields: completions, prompts\n */\n static conversationQuality(): EvaluatorWithConfig {\n return createEvaluator('conversation-quality');\n }\n\n /**\n * Check if a completion is faithful to the provided context\n\n**Request Body:**\n- `input.completion` (string, required): The LLM completion to check for faithfulness\n- `input.context` (string, required): The context that the completion should be faithful to\n- `input.question` (string, required): The original question asked\n * Required task output fields: completion, context, question\n */\n static faithfulness(): EvaluatorWithConfig {\n return createEvaluator('faithfulness');\n }\n\n /**\n * Compare two HTML documents for structural and content similarity\n\n**Request Body:**\n- `input.html1` (string, required): The first HTML document to compare\n- `input.html2` (string, required): The second HTML document to compare\n * Required task output fields: html1, html2\n */\n static htmlComparison(): EvaluatorWithConfig {\n return createEvaluator('html-comparison');\n }\n\n /**\n * Evaluate how well responses follow given instructions\n\n**Request Body:**\n- `input.instructions` (string, required): The instructions that should be followed\n- `input.response` (string, required): The response to evaluate for instruction adherence\n * Required task output fields: instructions, response\n */\n static instructionAdherence(): EvaluatorWithConfig {\n return createEvaluator('instruction-adherence');\n }\n\n /**\n * Detect changes in user intent between prompts and completions\n\n**Request Body:**\n- `input.prompts` (string, required): JSON array of prompts in the conversation\n- `input.completions` (string, required): JSON array of completions in the conversation\n * Required task output fields: completions, prompts\n */\n static intentChange(): EvaluatorWithConfig {\n return createEvaluator('intent-change');\n }\n\n /**\n * Validate JSON syntax\n\n**Request Body:**\n- `input.text` (string, required): The text to validate as JSON\n- `config.enable_schema_validation` (bool, optional): Enable JSON schema validation\n- `config.schema_string` (string, optional): JSON schema to validate against\n * Required task output fields: text\n */\n static jsonValidator(config?: JsonValidatorConfig): EvaluatorWithConfig {\n return createEvaluator('json-validator', { config: config as Record<string, unknown> });\n }\n\n /**\n * Measure text perplexity from logprobs\n\n**Request Body:**\n- `input.logprobs` (string, required): JSON array of log probabilities from the model\n * Required task output fields: logprobs\n */\n static perplexity(): EvaluatorWithConfig {\n return createEvaluator('perplexity');\n }\n\n /**\n * Detect personally identifiable information in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for personally identifiable information\n- `config.probability_threshold` (float, optional): Detection threshold (default: 0.8)\n * Required task output fields: text\n */\n static piiDetector(config?: PiiDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('pii-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Validate text against a placeholder regex pattern\n\n**Request Body:**\n- `input.placeholder_value` (string, required): The regex pattern to match against\n- `input.text` (string, required): The text to validate against the regex pattern\n- `config.should_match` (bool, optional): Whether the text should match the regex\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\n- `config.multi_line` (bool, optional): Multi-line mode\n * Required task output fields: placeholder_value, text\n */\n static placeholderRegex(config?: PlaceholderRegexConfig): EvaluatorWithConfig {\n return createEvaluator('placeholder-regex', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect profanity in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for profanity\n * Required task output fields: text\n */\n static profanityDetector(): EvaluatorWithConfig {\n return createEvaluator('profanity-detector');\n }\n\n /**\n * Detect prompt injection attempts\n\n**Request Body:**\n- `input.prompt` (string, required): The prompt to check for injection attempts\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: prompt\n */\n static promptInjection(config?: PromptInjectionConfig): EvaluatorWithConfig {\n return createEvaluator('prompt-injection', { config: config as Record<string, unknown> });\n }\n\n /**\n * Measure prompt perplexity to detect potential injection attempts\n\n**Request Body:**\n- `input.prompt` (string, required): The prompt to calculate perplexity for\n * Required task output fields: prompt\n */\n static promptPerplexity(): EvaluatorWithConfig {\n return createEvaluator('prompt-perplexity');\n }\n\n /**\n * Validate text against a regex pattern\n\n**Request Body:**\n- `input.text` (string, required): The text to validate against a regex pattern\n- `config.regex` (string, optional): The regex pattern to match against\n- `config.should_match` (bool, optional): Whether the text should match the regex\n- `config.case_sensitive` (bool, optional): Case-sensitive matching\n- `config.dot_include_nl` (bool, optional): Dot matches newlines\n- `config.multi_line` (bool, optional): Multi-line mode\n * Required task output fields: text\n */\n static regexValidator(config?: RegexValidatorConfig): EvaluatorWithConfig {\n return createEvaluator('regex-validator', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect secrets and credentials in text\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for secrets (API keys, passwords, etc.)\n * Required task output fields: text\n */\n static secretsDetector(): EvaluatorWithConfig {\n return createEvaluator('secrets-detector');\n }\n\n /**\n * Calculate semantic similarity between completion and reference\n\n**Request Body:**\n- `input.completion` (string, required): The completion text to compare\n- `input.reference` (string, required): The reference text to compare against\n * Required task output fields: completion, reference\n */\n static semanticSimilarity(): EvaluatorWithConfig {\n return createEvaluator('semantic-similarity');\n }\n\n /**\n * Detect sexist language and bias\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for sexist content\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: text\n */\n static sexismDetector(config?: SexismDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('sexism-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Validate SQL query syntax\n\n**Request Body:**\n- `input.text` (string, required): The text to validate as SQL\n * Required task output fields: text\n */\n static sqlValidator(): EvaluatorWithConfig {\n return createEvaluator('sql-validator');\n }\n\n /**\n * Detect the tone of the text\n\n**Request Body:**\n- `input.text` (string, required): The text to detect the tone of\n * Required task output fields: text\n */\n static toneDetection(): EvaluatorWithConfig {\n return createEvaluator('tone-detection');\n }\n\n /**\n * Evaluate topic adherence\n\n**Request Body:**\n- `input.question` (string, required): The original question\n- `input.completion` (string, required): The completion to evaluate\n- `input.reference_topics` (string, required): Comma-separated list of expected topics\n * Required task output fields: completion, question, reference_topics\n */\n static topicAdherence(): EvaluatorWithConfig {\n return createEvaluator('topic-adherence');\n }\n\n /**\n * Detect toxic or harmful language\n\n**Request Body:**\n- `input.text` (string, required): The text to scan for toxic content\n- `config.threshold` (float, optional): Detection threshold (default: 0.5)\n * Required task output fields: text\n */\n static toxicityDetector(config?: ToxicityDetectorConfig): EvaluatorWithConfig {\n return createEvaluator('toxicity-detector', { config: config as Record<string, unknown> });\n }\n\n /**\n * Detect uncertainty in the text\n\n**Request Body:**\n- `input.prompt` (string, required): The text to detect uncertainty in\n * Required task output fields: prompt\n */\n static uncertaintyDetector(): EvaluatorWithConfig {\n return createEvaluator('uncertainty-detector');\n }\n\n /**\n * Count the number of words in text\n\n**Request Body:**\n- `input.text` (string, required): The text to count words in\n * Required task output fields: text\n */\n static wordCount(): EvaluatorWithConfig {\n return createEvaluator('word-count');\n }\n\n /**\n * Calculate the ratio of words between two texts\n\n**Request Body:**\n- `input.numerator_text` (string, required): The numerator text (will be divided by denominator)\n- `input.denominator_text` (string, required): The denominator text (divides the numerator)\n * Required task output fields: denominator_text, numerator_text\n */\n static wordCountRatio(): EvaluatorWithConfig {\n return createEvaluator('word-count-ratio');\n }\n}\n","import { InitializeOptions } from \"../interfaces\";\nimport { InitializationError } from \"../errors\";\n\nexport const validateConfiguration = (options: InitializeOptions): void => {\n const {\n apiKey,\n traceloopSyncEnabled,\n traceloopSyncMaxRetries,\n traceloopSyncPollingInterval,\n traceloopSyncDevPollingInterval,\n } = options;\n if (apiKey && typeof apiKey !== \"string\") {\n throw new InitializationError('\"apiKey\" must be a string');\n }\n\n if (traceloopSyncEnabled) {\n if (\n typeof traceloopSyncMaxRetries !== \"number\" ||\n traceloopSyncMaxRetries <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncMaxRetries\" must be an integer greater than 0.',\n );\n }\n\n if (\n typeof traceloopSyncPollingInterval !== \"number\" ||\n traceloopSyncPollingInterval <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncPollingInterval\" must be an integer greater than 0.',\n );\n }\n\n if (\n typeof traceloopSyncDevPollingInterval !== \"number\" ||\n traceloopSyncDevPollingInterval <= 0\n ) {\n throw new InitializationError(\n '\"traceloopSyncDevPollingInterval\" must be an integer greater than 0.',\n );\n }\n }\n};\n","import { trace, createContextKey, Context } from \"@opentelemetry/api\";\nimport { version } from \"../../../package.json\";\n\nconst TRACER_NAME = \"@anyway-sh/node-server-sdk\";\nconst TRACER_VERSION = version;\n\nexport const WORKFLOW_NAME_KEY = createContextKey(\"workflow_name\");\nexport const ENTITY_NAME_KEY = createContextKey(\"entity_name\");\nexport const AGENT_NAME_KEY = createContextKey(\"agent_name\");\nexport const CONVERSATION_ID_KEY = createContextKey(\"conversation_id\");\nexport const ASSOCATION_PROPERTIES_KEY = createContextKey(\n \"association_properties\",\n);\n\nexport const getTracer = () => {\n return trace.getTracer(TRACER_NAME, TRACER_VERSION);\n};\n\nexport const getTraceloopTracer = getTracer;\n\nexport const getEntityPath = (entityContext: Context): string | undefined => {\n const path = entityContext.getValue(ENTITY_NAME_KEY);\n\n return path ? `${path}` : undefined;\n};\n","import { ReadableSpan, Span } from \"@opentelemetry/sdk-trace-node\";\nimport {\n SpanAttributes,\n TraceloopSpanKindValues,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_COMPLETION,\n ATTR_GEN_AI_CONVERSATION_ID,\n ATTR_GEN_AI_INPUT_MESSAGES,\n ATTR_GEN_AI_OPERATION_NAME,\n ATTR_GEN_AI_OUTPUT_MESSAGES,\n ATTR_GEN_AI_PROMPT,\n ATTR_GEN_AI_PROVIDER_NAME,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n ATTR_GEN_AI_RESPONSE_ID,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_SYSTEM,\n ATTR_GEN_AI_TOOL_CALL_ARGUMENTS,\n ATTR_GEN_AI_TOOL_CALL_ID,\n ATTR_GEN_AI_TOOL_CALL_RESULT,\n ATTR_GEN_AI_TOOL_NAME,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\n\nconst AI_GENERATE_TEXT = \"ai.generateText\";\nconst AI_STREAM_TEXT = \"ai.streamText\";\nconst AI_GENERATE_OBJECT = \"ai.generateObject\";\nconst AI_STREAM_OBJECT = \"ai.streamObject\";\nconst AI_GENERATE_TEXT_DO_GENERATE = \"ai.generateText.doGenerate\";\nconst AI_GENERATE_OBJECT_DO_GENERATE = \"ai.generateObject.doGenerate\";\nconst AI_STREAM_TEXT_DO_STREAM = \"ai.streamText.doStream\";\nconst AI_STREAM_OBJECT_DO_STREAM = \"ai.streamObject.doStream\";\nconst HANDLED_SPAN_NAMES: Record<string, string> = {\n [AI_GENERATE_TEXT]: \"run.ai\",\n [AI_STREAM_TEXT]: \"stream.ai\",\n [AI_GENERATE_OBJECT]: \"object.ai\",\n [AI_STREAM_OBJECT]: \"stream-object.ai\",\n [AI_GENERATE_TEXT_DO_GENERATE]: \"text.generate\",\n [AI_GENERATE_OBJECT_DO_GENERATE]: \"object.generate\",\n [AI_STREAM_TEXT_DO_STREAM]: \"text.stream\",\n [AI_STREAM_OBJECT_DO_STREAM]: \"object.stream\",\n};\n\nconst TOOL_SPAN_NAME = \"ai.toolCall\";\n\nconst AI_RESPONSE_TEXT = \"ai.response.text\";\nconst AI_RESPONSE_OBJECT = \"ai.response.object\";\nconst AI_RESPONSE_TOOL_CALLS = \"ai.response.toolCalls\";\nconst AI_RESPONSE_PROVIDER_METADATA = \"ai.response.providerMetadata\";\nconst AI_PROMPT_MESSAGES = \"ai.prompt.messages\";\nconst AI_PROMPT = \"ai.prompt\";\nconst AI_USAGE_PROMPT_TOKENS = \"ai.usage.promptTokens\";\nconst AI_USAGE_COMPLETION_TOKENS = \"ai.usage.completionTokens\";\nconst AI_MODEL_PROVIDER = \"ai.model.provider\";\nconst AI_PROMPT_TOOLS = \"ai.prompt.tools\";\nconst AI_TELEMETRY_METADATA_PREFIX = \"ai.telemetry.metadata.\";\nconst TYPE_TEXT = \"text\";\nconst TYPE_TOOL_CALL = \"tool_call\";\nconst ROLE_ASSISTANT = \"assistant\";\nconst ROLE_USER = \"user\";\n\n// Vendor mapping from AI SDK provider prefixes to standardized LLM_SYSTEM values\n// Uses prefixes to match AI SDK patterns like \"openai.chat\", \"anthropic.messages\", etc.\nconst VENDOR_MAPPING: Record<string, string> = {\n openai: \"OpenAI\",\n azure: \"Azure\",\n \"azure-openai\": \"Azure\",\n anthropic: \"Anthropic\",\n cohere: \"Cohere\",\n mistral: \"MistralAI\",\n groq: \"Groq\",\n replicate: \"Replicate\",\n together: \"TogetherAI\",\n fireworks: \"Fireworks\",\n deepseek: \"DeepSeek\",\n perplexity: \"Perplexity\",\n \"amazon-bedrock\": \"AWS\",\n bedrock: \"AWS\",\n google: \"Google\",\n vertex: \"Google\",\n ollama: \"Ollama\",\n huggingface: \"HuggingFace\",\n openrouter: \"OpenRouter\",\n};\n\nconst getAgentNameFromAttributes = (\n attributes: Record<string, any>,\n): string | null => {\n const agentAttr = attributes[`${AI_TELEMETRY_METADATA_PREFIX}agent`];\n return agentAttr && typeof agentAttr === \"string\" ? agentAttr : null;\n};\n\nconst transformResponseText = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_TEXT in attributes) {\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.content`] =\n attributes[AI_RESPONSE_TEXT];\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: [\n {\n type: TYPE_TEXT,\n content: attributes[AI_RESPONSE_TEXT],\n },\n ],\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([outputMessage]);\n\n delete attributes[AI_RESPONSE_TEXT];\n }\n};\n\nconst transformResponseObject = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_OBJECT in attributes) {\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.content`] =\n attributes[AI_RESPONSE_OBJECT];\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: [\n {\n type: TYPE_TEXT,\n content: attributes[AI_RESPONSE_OBJECT],\n },\n ],\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([outputMessage]);\n\n delete attributes[AI_RESPONSE_OBJECT];\n }\n};\n\nconst transformResponseToolCalls = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_TOOL_CALLS in attributes) {\n try {\n const toolCalls = JSON.parse(\n attributes[AI_RESPONSE_TOOL_CALLS] as string,\n );\n\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.role`] = ROLE_ASSISTANT;\n\n const toolCallParts: any[] = [];\n toolCalls.forEach((toolCall: any, index: number) => {\n // Support both v4 (args) and v5 (input) formats\n // Prefer v5 (input) if present\n const toolArgs = toolCall.input ?? toolCall.args;\n\n attributes[`${ATTR_GEN_AI_COMPLETION}.0.tool_calls.${index}.name`] =\n toolCall.toolName;\n attributes[\n `${ATTR_GEN_AI_COMPLETION}.0.tool_calls.${index}.arguments`\n ] = toolArgs;\n\n toolCallParts.push({\n type: TYPE_TOOL_CALL,\n tool_call: {\n name: toolCall.toolName,\n arguments: toolArgs,\n },\n });\n });\n\n if (toolCallParts.length > 0) {\n const outputMessage = {\n role: ROLE_ASSISTANT,\n parts: toolCallParts,\n };\n attributes[ATTR_GEN_AI_OUTPUT_MESSAGES] = JSON.stringify([\n outputMessage,\n ]);\n }\n\n delete attributes[AI_RESPONSE_TOOL_CALLS];\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst processMessageContent = (content: any): string => {\n if (Array.isArray(content)) {\n const textItems = content.filter(\n (item: any) =>\n item &&\n typeof item === \"object\" &&\n item.type === TYPE_TEXT &&\n item.text,\n );\n\n if (textItems.length > 0) {\n const joinedText = textItems.map((item: any) => item.text).join(\" \");\n return joinedText;\n } else {\n return JSON.stringify(content);\n }\n }\n\n if (content && typeof content === \"object\") {\n if (content.type === TYPE_TEXT && content.text) {\n return content.text;\n }\n return JSON.stringify(content);\n }\n\n if (typeof content === \"string\") {\n try {\n const parsed = JSON.parse(content);\n if (Array.isArray(parsed)) {\n const allTextItems = parsed.every(\n (item: any) =>\n item &&\n typeof item === \"object\" &&\n item.type === TYPE_TEXT &&\n item.text,\n );\n\n if (allTextItems && parsed.length > 0) {\n return parsed.map((item: any) => item.text).join(\" \");\n } else {\n return content;\n }\n }\n } catch {\n // Ignore parsing errors\n }\n\n return content;\n }\n\n return String(content);\n};\n\nconst transformTools = (attributes: Record<string, any>): void => {\n if (AI_PROMPT_TOOLS in attributes) {\n try {\n const tools = attributes[AI_PROMPT_TOOLS];\n if (Array.isArray(tools)) {\n tools.forEach((toolItem: any, index: number) => {\n let tool = toolItem;\n if (typeof toolItem === \"string\") {\n try {\n tool = JSON.parse(toolItem);\n } catch {\n return;\n }\n }\n\n if (tool && typeof tool === \"object\") {\n if (tool.name) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`\n ] = tool.name;\n }\n\n if (tool.description) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`\n ] = tool.description;\n }\n\n // Support both v4 (parameters) and v5 (inputSchema) formats\n // Prefer v5 (inputSchema) if present\n const schema = tool.inputSchema ?? tool.parameters;\n if (schema) {\n attributes[\n `${SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.parameters`\n ] = typeof schema === \"string\" ? schema : JSON.stringify(schema);\n }\n }\n });\n }\n delete attributes[AI_PROMPT_TOOLS];\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst transformPrompts = (attributes: Record<string, any>): void => {\n if (AI_PROMPT_MESSAGES in attributes) {\n try {\n let jsonString = attributes[AI_PROMPT_MESSAGES] as string;\n\n try {\n JSON.parse(jsonString);\n } catch {\n jsonString = jsonString.replace(/\\\\'/g, \"'\");\n jsonString = jsonString.replace(/\\\\\\\\\\\\\\\\/g, \"\\\\\\\\\");\n }\n\n const messages = JSON.parse(jsonString);\n const inputMessages: any[] = [];\n\n messages.forEach((msg: { role: string; content: any }, index: number) => {\n const processedContent = processMessageContent(msg.content);\n const contentKey = `${ATTR_GEN_AI_PROMPT}.${index}.content`;\n attributes[contentKey] = processedContent;\n attributes[`${ATTR_GEN_AI_PROMPT}.${index}.role`] = msg.role;\n\n // Add to OpenTelemetry standard gen_ai.input.messages format\n inputMessages.push({\n role: msg.role,\n parts: [\n {\n type: TYPE_TEXT,\n content: processedContent,\n },\n ],\n });\n });\n\n // Set the OpenTelemetry standard input messages attribute\n if (inputMessages.length > 0) {\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] = JSON.stringify(inputMessages);\n }\n\n delete attributes[AI_PROMPT_MESSAGES];\n } catch {\n // Ignore parsing errors\n }\n }\n\n if (AI_PROMPT in attributes) {\n try {\n const promptData = JSON.parse(attributes[AI_PROMPT] as string);\n if (promptData.messages && Array.isArray(promptData.messages)) {\n const messages = promptData.messages;\n const inputMessages: any[] = [];\n\n messages.forEach(\n (msg: { role: string; content: any }, index: number) => {\n const processedContent = processMessageContent(msg.content);\n const contentKey = `${ATTR_GEN_AI_PROMPT}.${index}.content`;\n attributes[contentKey] = processedContent;\n attributes[`${ATTR_GEN_AI_PROMPT}.${index}.role`] = msg.role;\n\n inputMessages.push({\n role: msg.role,\n parts: [\n {\n type: TYPE_TEXT,\n content: processedContent,\n },\n ],\n });\n },\n );\n\n if (inputMessages.length > 0) {\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] =\n JSON.stringify(inputMessages);\n }\n\n delete attributes[AI_PROMPT];\n } else if (promptData.prompt && typeof promptData.prompt === \"string\") {\n attributes[`${ATTR_GEN_AI_PROMPT}.0.content`] = promptData.prompt;\n attributes[`${ATTR_GEN_AI_PROMPT}.0.role`] = ROLE_USER;\n\n const inputMessage = {\n role: ROLE_USER,\n parts: [\n {\n type: TYPE_TEXT,\n content: promptData.prompt,\n },\n ],\n };\n attributes[ATTR_GEN_AI_INPUT_MESSAGES] = JSON.stringify([inputMessage]);\n\n delete attributes[AI_PROMPT];\n }\n } catch {\n // Ignore parsing errors\n }\n }\n};\n\nconst transformPromptTokens = (attributes: Record<string, any>): void => {\n if (\n !(ATTR_GEN_AI_USAGE_INPUT_TOKENS in attributes) &&\n AI_USAGE_PROMPT_TOKENS in attributes\n ) {\n attributes[ATTR_GEN_AI_USAGE_INPUT_TOKENS] =\n attributes[AI_USAGE_PROMPT_TOKENS];\n }\n\n delete attributes[AI_USAGE_PROMPT_TOKENS];\n};\n\nconst transformCompletionTokens = (attributes: Record<string, any>): void => {\n if (\n !(ATTR_GEN_AI_USAGE_OUTPUT_TOKENS in attributes) &&\n AI_USAGE_COMPLETION_TOKENS in attributes\n ) {\n attributes[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS] =\n attributes[AI_USAGE_COMPLETION_TOKENS];\n }\n\n delete attributes[AI_USAGE_COMPLETION_TOKENS];\n};\n\nconst transformProviderMetadata = (attributes: Record<string, any>): void => {\n if (AI_RESPONSE_PROVIDER_METADATA in attributes) {\n try {\n const metadataStr = attributes[AI_RESPONSE_PROVIDER_METADATA];\n let metadata: any;\n\n if (typeof metadataStr === \"string\") {\n metadata = JSON.parse(metadataStr);\n } else if (typeof metadataStr === \"object\") {\n metadata = metadataStr;\n } else {\n return;\n }\n\n if (metadata.anthropic) {\n const anthropicMetadata = metadata.anthropic;\n\n if (anthropicMetadata.cacheCreationInputTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] =\n anthropicMetadata.cacheCreationInputTokens;\n }\n\n if (anthropicMetadata.cacheReadInputTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] =\n anthropicMetadata.cacheReadInputTokens;\n }\n }\n\n if (metadata.openai) {\n const openaiMetadata = metadata.openai;\n\n if (openaiMetadata.cachedPromptTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] =\n openaiMetadata.cachedPromptTokens;\n }\n\n if (openaiMetadata.reasoningTokens !== undefined) {\n attributes[SpanAttributes.GEN_AI_USAGE_REASONING_TOKENS] =\n openaiMetadata.reasoningTokens;\n }\n }\n\n delete attributes[AI_RESPONSE_PROVIDER_METADATA];\n } catch {\n // Ignore JSON parsing errors\n }\n }\n};\n\nconst calculateTotalTokens = (attributes: Record<string, any>): void => {\n const inputTokens = attributes[ATTR_GEN_AI_USAGE_INPUT_TOKENS];\n const outputTokens = attributes[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS];\n\n if (inputTokens && outputTokens) {\n attributes[`${SpanAttributes.LLM_USAGE_TOTAL_TOKENS}`] =\n Number(inputTokens) + Number(outputTokens);\n }\n};\n\nconst transformVendor = (attributes: Record<string, any>): void => {\n if (AI_MODEL_PROVIDER in attributes) {\n const vendor = attributes[AI_MODEL_PROVIDER];\n\n // Find matching vendor prefix in mapping\n let mappedVendor = null;\n let providerName = vendor;\n if (typeof vendor === \"string\" && vendor.length > 0) {\n // Extract provider name (part before first dot, or entire string if no dot)\n const dotIndex = vendor.indexOf(\".\");\n providerName = dotIndex > 0 ? vendor.substring(0, dotIndex) : vendor;\n\n for (const prefix of Object.keys(VENDOR_MAPPING)) {\n if (vendor.startsWith(prefix)) {\n mappedVendor = VENDOR_MAPPING[prefix];\n break;\n }\n }\n\n attributes[ATTR_GEN_AI_SYSTEM] = mappedVendor || vendor;\n attributes[ATTR_GEN_AI_PROVIDER_NAME] = providerName;\n }\n\n delete attributes[AI_MODEL_PROVIDER];\n }\n};\n\nconst transformOperationName = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n if (!spanName) return;\n\n let operationName: string | undefined;\n if (\n spanName.includes(\"generateText\") ||\n spanName.includes(\"streamText\") ||\n spanName.includes(\"generateObject\") ||\n spanName.includes(\"streamObject\")\n ) {\n operationName = \"chat\";\n } else if (spanName === \"ai.toolCall\" || spanName.endsWith(\".tool\")) {\n operationName = \"execute_tool\";\n }\n\n if (operationName) {\n attributes[ATTR_GEN_AI_OPERATION_NAME] = operationName;\n }\n};\n\nconst transformModelId = (attributes: Record<string, any>): void => {\n const AI_MODEL_ID = \"ai.model.id\";\n if (AI_MODEL_ID in attributes) {\n attributes[ATTR_GEN_AI_REQUEST_MODEL] = attributes[AI_MODEL_ID];\n delete attributes[AI_MODEL_ID];\n }\n};\n\nconst transformFinishReason = (attributes: Record<string, any>): void => {\n const AI_RESPONSE_FINISH_REASON = \"ai.response.finishReason\";\n if (AI_RESPONSE_FINISH_REASON in attributes) {\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON];\n attributes[ATTR_GEN_AI_RESPONSE_FINISH_REASONS] = Array.isArray(\n finishReason,\n )\n ? finishReason\n : [finishReason];\n delete attributes[AI_RESPONSE_FINISH_REASON];\n }\n};\n\nconst transformToolCallAttributes = (attributes: Record<string, any>): void => {\n if (\"ai.toolCall.name\" in attributes) {\n attributes[ATTR_GEN_AI_TOOL_NAME] = attributes[\"ai.toolCall.name\"];\n // Keep ai.toolCall.name for now, will be deleted in transformToolCalls\n }\n\n if (\"ai.toolCall.id\" in attributes) {\n attributes[ATTR_GEN_AI_TOOL_CALL_ID] = attributes[\"ai.toolCall.id\"];\n delete attributes[\"ai.toolCall.id\"];\n }\n\n // Support both v4 (args) and v5 (input) formats\n // Prefer v5 (input) if present\n const toolArgs =\n attributes[\"ai.toolCall.input\"] ?? attributes[\"ai.toolCall.args\"];\n if (toolArgs !== undefined) {\n attributes[ATTR_GEN_AI_TOOL_CALL_ARGUMENTS] = toolArgs;\n // Don't delete yet - transformToolCalls will handle entity input/output\n }\n\n // Support both v4 (result) and v5 (output) formats\n // Prefer v5 (output) if present\n const toolResult =\n attributes[\"ai.toolCall.output\"] ?? attributes[\"ai.toolCall.result\"];\n if (toolResult !== undefined) {\n attributes[ATTR_GEN_AI_TOOL_CALL_RESULT] = toolResult;\n // Don't delete yet - transformToolCalls will handle entity input/output\n }\n};\n\nconst transformConversationId = (attributes: Record<string, any>): void => {\n const conversationId = attributes[\"ai.telemetry.metadata.conversationId\"];\n const sessionId = attributes[\"ai.telemetry.metadata.sessionId\"];\n\n if (conversationId) {\n attributes[ATTR_GEN_AI_CONVERSATION_ID] = conversationId;\n } else if (sessionId) {\n attributes[ATTR_GEN_AI_CONVERSATION_ID] = sessionId;\n }\n};\n\nconst transformResponseMetadata = (attributes: Record<string, any>): void => {\n const AI_RESPONSE_MODEL = \"ai.response.model\";\n const AI_RESPONSE_ID = \"ai.response.id\";\n\n if (AI_RESPONSE_MODEL in attributes) {\n attributes[ATTR_GEN_AI_RESPONSE_MODEL] = attributes[AI_RESPONSE_MODEL];\n delete attributes[AI_RESPONSE_MODEL];\n }\n\n if (AI_RESPONSE_ID in attributes) {\n attributes[ATTR_GEN_AI_RESPONSE_ID] = attributes[AI_RESPONSE_ID];\n delete attributes[AI_RESPONSE_ID];\n }\n};\n\nconst transformTelemetryMetadata = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n const metadataAttributes: Record<string, string> = {};\n const keysToDelete: string[] = [];\n // Use the helper function to extract agent name\n const agentName = getAgentNameFromAttributes(attributes);\n\n // Find all ai.telemetry.metadata.* attributes\n for (const [key, value] of Object.entries(attributes)) {\n if (key.startsWith(AI_TELEMETRY_METADATA_PREFIX)) {\n const metadataKey = key.substring(AI_TELEMETRY_METADATA_PREFIX.length);\n\n // Always mark for deletion since it's a telemetry metadata attribute\n keysToDelete.push(key);\n\n if (metadataKey && value != null) {\n // Convert value to string for association properties\n const stringValue = typeof value === \"string\" ? value : String(value);\n metadataAttributes[metadataKey] = stringValue;\n\n // Also set as traceloop association property attribute\n attributes[\n `${SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${metadataKey}`\n ] = stringValue;\n }\n }\n }\n\n if (agentName) {\n attributes[ATTR_GEN_AI_AGENT_NAME] = agentName;\n\n const topLevelSpanNames = [\n AI_GENERATE_TEXT,\n AI_STREAM_TEXT,\n AI_GENERATE_OBJECT,\n AI_STREAM_OBJECT,\n ];\n\n if (\n spanName &&\n (spanName === `${agentName}.agent` ||\n topLevelSpanNames.includes(spanName))\n ) {\n attributes[SpanAttributes.TRACELOOP_SPAN_KIND] =\n TraceloopSpanKindValues.AGENT;\n attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] = agentName;\n\n const inputMessages = attributes[ATTR_GEN_AI_INPUT_MESSAGES];\n const outputMessages = attributes[ATTR_GEN_AI_OUTPUT_MESSAGES];\n const toolArgs = attributes[\"ai.toolCall.args\"];\n const toolResult = attributes[\"ai.toolCall.result\"];\n\n if (inputMessages || outputMessages) {\n if (inputMessages) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = inputMessages;\n }\n if (outputMessages) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = outputMessages;\n }\n } else if (toolArgs || toolResult) {\n if (toolArgs) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = toolArgs;\n }\n if (toolResult) {\n attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = toolResult;\n }\n }\n }\n }\n\n keysToDelete.forEach((key) => {\n delete attributes[key];\n });\n};\n\nexport const transformLLMSpans = (\n attributes: Record<string, any>,\n spanName?: string,\n): void => {\n transformOperationName(attributes, spanName);\n transformModelId(attributes);\n transformResponseText(attributes);\n transformResponseObject(attributes);\n transformResponseToolCalls(attributes);\n transformPrompts(attributes);\n transformTools(attributes);\n transformPromptTokens(attributes);\n transformCompletionTokens(attributes);\n transformProviderMetadata(attributes);\n transformFinishReason(attributes);\n transformResponseMetadata(attributes);\n calculateTotalTokens(attributes);\n transformVendor(attributes); // Also sets GEN_AI_PROVIDER_NAME\n transformConversationId(attributes);\n transformToolCallAttributes(attributes);\n transformTelemetryMetadata(attributes, spanName);\n};\n\nconst transformToolCalls = (span: ReadableSpan): void => {\n // Support both v4 (args/result) and v5 (input/output) formats\n // Prefer v5 (input/output) if present\n const toolInput =\n span.attributes[\"ai.toolCall.input\"] ?? span.attributes[\"ai.toolCall.args\"];\n const toolOutput =\n span.attributes[\"ai.toolCall.output\"] ??\n span.attributes[\"ai.toolCall.result\"];\n\n if (toolInput && toolOutput) {\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT] = toolInput;\n delete span.attributes[\"ai.toolCall.args\"];\n delete span.attributes[\"ai.toolCall.input\"];\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = toolOutput;\n delete span.attributes[\"ai.toolCall.result\"];\n delete span.attributes[\"ai.toolCall.output\"];\n span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] =\n TraceloopSpanKindValues.TOOL;\n\n // Set entity name from tool call name\n const toolName = span.attributes[\"ai.toolCall.name\"];\n if (toolName) {\n span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] = toolName;\n delete span.attributes[\"ai.toolCall.name\"];\n }\n }\n};\n\nconst shouldHandleSpan = (span: ReadableSpan): boolean => {\n return span.instrumentationScope?.name === \"ai\";\n};\n\nconst getAiSdkVersion = (): string | undefined => {\n try {\n return require(\"ai/package.json\").version;\n } catch {\n return undefined;\n }\n};\n\nconst TOP_LEVEL_AI_SPANS = [\n AI_GENERATE_TEXT,\n AI_STREAM_TEXT,\n AI_GENERATE_OBJECT,\n AI_STREAM_OBJECT,\n];\n\nexport const transformAiSdkSpanNames = (span: Span): void => {\n if (span.name === TOOL_SPAN_NAME) {\n span.updateName(`${span.attributes[\"ai.toolCall.name\"] as string}.tool`);\n }\n if (span.name in HANDLED_SPAN_NAMES) {\n const agentName = getAgentNameFromAttributes(span.attributes);\n const isTopLevelSpan = TOP_LEVEL_AI_SPANS.includes(span.name);\n\n if (agentName && isTopLevelSpan) {\n span.updateName(`${agentName}.agent`);\n } else if (!isTopLevelSpan) {\n span.updateName(HANDLED_SPAN_NAMES[span.name]);\n }\n }\n};\n\nexport const transformAiSdkSpanAttributes = (span: ReadableSpan): void => {\n if (!shouldHandleSpan(span)) {\n return;\n }\n\n const aiSdkVersion = getAiSdkVersion();\n if (aiSdkVersion) {\n span.attributes[\"ai.sdk.version\"] = aiSdkVersion;\n }\n\n transformLLMSpans(span.attributes, span.name);\n transformToolCalls(span);\n};\n","export function parseKeyPairsIntoRecord(\n keyPairs: string,\n): Record<string, string> {\n const result: Record<string, string> = {};\n if (!keyPairs) return result;\n\n keyPairs.split(\",\").forEach((pair) => {\n const [key, value] = pair.split(\"=\");\n if (key && value) {\n result[key.trim()] = value.trim();\n }\n });\n return result;\n}\n","import {\n SimpleSpanProcessor,\n BatchSpanProcessor,\n SpanProcessor,\n Span,\n ReadableSpan,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { context } from \"@opentelemetry/api\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport {\n ASSOCATION_PROPERTIES_KEY,\n ENTITY_NAME_KEY,\n WORKFLOW_NAME_KEY,\n AGENT_NAME_KEY,\n CONVERSATION_ID_KEY,\n} from \"./tracing\";\nimport { SpanAttributes } from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_CONVERSATION_ID,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport {\n transformAiSdkSpanAttributes,\n transformAiSdkSpanNames,\n} from \"./ai-sdk-transformations\";\nimport { parseKeyPairsIntoRecord } from \"./baggage-utils\";\nimport { PricingCalculator } from \"../pricing\";\n\nexport const ALL_INSTRUMENTATION_LIBRARIES = \"all\" as const;\ntype AllInstrumentationLibraries = typeof ALL_INSTRUMENTATION_LIBRARIES;\n\nlet _pricingCalculator: PricingCalculator | null = null;\n\nexport const setPricingCalculator = (\n calculator: PricingCalculator | null,\n): void => {\n _pricingCalculator = calculator;\n};\n\nconst spanAgentNames = new Map<\n string,\n { agentName: string; timestamp: number }\n>();\n\nconst SPAN_AGENT_NAME_TTL = 5 * 60 * 1000;\n\nconst AI_TELEMETRY_METADATA_AGENT = \"ai.telemetry.metadata.agent\";\n\nconst cleanupExpiredSpanAgentNames = (): void => {\n const now = Date.now();\n for (const [spanId, entry] of spanAgentNames.entries()) {\n if (now - entry.timestamp > SPAN_AGENT_NAME_TTL) {\n spanAgentNames.delete(spanId);\n }\n }\n};\n\nexport interface SpanProcessorOptions {\n /**\n * The API Key for sending traces data. Optional.\n * Defaults to the ANYWAY_API_KEY environment variable.\n */\n apiKey?: string;\n\n /**\n * The OTLP endpoint for sending traces data. Optional.\n * Defaults to ANYWAY_BASE_URL environment variable or https://api.traceloop.com/\n */\n baseUrl?: string;\n\n /**\n * Sends traces and spans without batching, for local development. Optional.\n * Defaults to false.\n */\n disableBatch?: boolean;\n\n /**\n * The OpenTelemetry SpanExporter to be used for sending traces data. Optional.\n * Defaults to the OTLP exporter.\n */\n exporter?: SpanExporter;\n\n /**\n * The headers to be sent with the traces data. Optional.\n */\n headers?: Record<string, string>;\n\n /**\n * The instrumentation libraries to be allowed in the traces. Optional.\n * Defaults to Traceloop instrumentation libraries.\n * If set to ALL_INSTRUMENTATION_LIBRARIES, all instrumentation libraries will be allowed.\n * If set to an array of instrumentation libraries, only traceloop instrumentation libraries and the specified instrumentation libraries will be allowed.\n */\n allowedInstrumentationLibraries?: string[] | AllInstrumentationLibraries;\n}\n\n/**\n * Creates a span processor with Traceloop's custom span handling logic.\n * This can be used independently of the full SDK initialization.\n *\n * @param options - Configuration options for the span processor\n * @returns A configured SpanProcessor instance\n */\nexport const createSpanProcessor = (\n options: SpanProcessorOptions,\n): SpanProcessor => {\n const url = `${options.baseUrl || process.env.ANYWAY_BASE_URL || \"https://api.traceloop.com\"}/v1/traces`;\n const headers =\n options.headers ||\n (process.env.ANYWAY_HEADERS\n ? parseKeyPairsIntoRecord(process.env.ANYWAY_HEADERS)\n : { Authorization: `Bearer ${options.apiKey}` });\n\n const traceExporter =\n options.exporter ??\n new OTLPTraceExporter({\n url,\n headers,\n });\n\n const spanProcessor = options.disableBatch\n ? new SimpleSpanProcessor(traceExporter)\n : new BatchSpanProcessor(traceExporter);\n\n // Store the original onEnd method\n const originalOnEnd = spanProcessor.onEnd.bind(spanProcessor);\n\n spanProcessor.onStart = onSpanStart;\n\n if (\n options.allowedInstrumentationLibraries === ALL_INSTRUMENTATION_LIBRARIES\n ) {\n spanProcessor.onEnd = onSpanEnd(originalOnEnd);\n } else {\n const instrumentationLibraries = [...traceloopInstrumentationLibraries];\n\n if (options.allowedInstrumentationLibraries) {\n instrumentationLibraries.push(...options.allowedInstrumentationLibraries);\n }\n\n spanProcessor.onEnd = onSpanEnd(originalOnEnd, instrumentationLibraries);\n }\n\n return spanProcessor;\n};\n\nexport const traceloopInstrumentationLibraries = [\n \"ai\",\n \"@anyway-sh/node-server-sdk\",\n \"@traceloop/instrumentation-openai\",\n \"@traceloop/instrumentation-langchain\",\n \"@traceloop/instrumentation-chroma\",\n \"@traceloop/instrumentation-anthropic\",\n \"@traceloop/instrumentation-llamaindex\",\n \"@traceloop/instrumentation-vertexai\",\n \"@traceloop/instrumentation-bedrock\",\n \"@traceloop/instrumentation-cohere\",\n \"@traceloop/instrumentation-pinecone\",\n \"@traceloop/instrumentation-qdrant\",\n \"@traceloop/instrumentation-together\",\n \"@traceloop/instrumentation-mcp\",\n];\n\nconst onSpanStart = (span: Span): void => {\n const workflowName = context.active().getValue(WORKFLOW_NAME_KEY);\n if (workflowName) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_WORKFLOW_NAME,\n workflowName as string,\n );\n }\n\n const entityName = context.active().getValue(ENTITY_NAME_KEY);\n if (entityName) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_PATH,\n entityName as string,\n );\n }\n\n let agentName = context.active().getValue(AGENT_NAME_KEY) as\n | string\n | undefined;\n\n if (!agentName) {\n const aiSdkAgent = span.attributes[AI_TELEMETRY_METADATA_AGENT];\n if (aiSdkAgent && typeof aiSdkAgent === \"string\") {\n agentName = aiSdkAgent;\n }\n }\n\n if (!agentName) {\n const parentSpanContext = (span as any).parentSpanContext;\n const parentSpanId = parentSpanContext?.spanId;\n if (\n parentSpanId &&\n parentSpanId !== \"0000000000000000\" &&\n spanAgentNames.has(parentSpanId)\n ) {\n agentName = spanAgentNames.get(parentSpanId)!.agentName;\n }\n }\n\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName);\n const spanId = span.spanContext().spanId;\n spanAgentNames.set(spanId, { agentName, timestamp: Date.now() });\n }\n\n // Check for conversation ID in context\n const conversationId = context.active().getValue(CONVERSATION_ID_KEY);\n if (conversationId) {\n span.setAttribute(ATTR_GEN_AI_CONVERSATION_ID, conversationId as string);\n }\n\n // Check for association properties in context (set by decorators or withAssociationProperties)\n const associationProperties = context\n .active()\n .getValue(ASSOCATION_PROPERTIES_KEY) as\n | { [name: string]: string }\n | undefined;\n\n if (associationProperties && Object.keys(associationProperties).length > 0) {\n for (const [key, value] of Object.entries(associationProperties)) {\n span.setAttribute(\n `${SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${key}`,\n value,\n );\n }\n }\n\n transformAiSdkSpanNames(span);\n};\n\n/**\n * Ensures span compatibility between OTel v1.x and v2.x for OTLP transformer\n */\nconst ensureSpanCompatibility = (span: ReadableSpan): ReadableSpan => {\n const spanAny = span as any;\n\n // If the span already has instrumentationLibrary, it's compatible (OTel v2.x)\n if (spanAny.instrumentationLibrary) {\n return span;\n }\n\n // If it has instrumentationScope but no instrumentationLibrary (OTel v1.x),\n // add instrumentationLibrary as an alias to prevent OTLP transformer errors\n if (spanAny.instrumentationScope) {\n // Create a proxy that provides both properties\n return new Proxy(span, {\n get(target, prop) {\n if (prop === \"instrumentationLibrary\") {\n return (target as any).instrumentationScope;\n }\n return (target as any)[prop];\n },\n }) as ReadableSpan;\n }\n\n // Fallback: add both properties with defaults\n return new Proxy(span, {\n get(target, prop) {\n if (\n prop === \"instrumentationLibrary\" ||\n prop === \"instrumentationScope\"\n ) {\n return {\n name: \"unknown\",\n version: undefined,\n schemaUrl: undefined,\n };\n }\n return (target as any)[prop];\n },\n }) as ReadableSpan;\n};\n\nconst onSpanEnd = (\n originalOnEnd: (span: ReadableSpan) => void,\n instrumentationLibraries?: string[],\n) => {\n return (span: ReadableSpan): void => {\n if (\n instrumentationLibraries &&\n !instrumentationLibraries.includes(\n (span as any).instrumentationScope?.name ||\n (span as any).instrumentationLibrary?.name,\n )\n ) {\n return;\n }\n\n transformAiSdkSpanAttributes(span);\n\n const spanId = span.spanContext().spanId;\n const parentSpanId = span.parentSpanContext?.spanId;\n let agentName = span.attributes[ATTR_GEN_AI_AGENT_NAME];\n\n if (agentName && typeof agentName === \"string\") {\n spanAgentNames.set(spanId, {\n agentName,\n timestamp: Date.now(),\n });\n } else if (\n parentSpanId &&\n parentSpanId !== \"0000000000000000\" &&\n spanAgentNames.has(parentSpanId)\n ) {\n agentName = spanAgentNames.get(parentSpanId)!.agentName;\n span.attributes[ATTR_GEN_AI_AGENT_NAME] = agentName;\n spanAgentNames.set(spanId, {\n agentName,\n timestamp: Date.now(),\n });\n }\n\n if (Math.random() < 0.01) {\n cleanupExpiredSpanAgentNames();\n }\n\n if (_pricingCalculator) {\n _pricingCalculator.addCostAttributes(span);\n }\n\n const compatibleSpan = ensureSpanCompatibility(span);\n\n originalOnEnd(compatibleSpan);\n };\n};\n","export interface ImageUploadResponse {\n url: string;\n}\n\nexport interface ImageUploadPayload {\n image_data: string;\n}\n\nexport class ImageUploader {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n async uploadBase64Image(\n traceId: string,\n spanId: string,\n imageName: string,\n base64ImageData: string,\n ): Promise<string> {\n try {\n const imageUrl = await this.getImageUrl(traceId, spanId, imageName);\n await this.uploadImageData(imageUrl, base64ImageData);\n return imageUrl;\n } catch (error) {\n console.error(\"Failed to upload image:\", error);\n throw error;\n }\n }\n\n private async getImageUrl(\n traceId: string,\n spanId: string,\n imageName: string,\n ): Promise<string> {\n const response = await fetch(\n `${this.baseUrl}/v2/traces/${traceId}/spans/${spanId}/images`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n image_name: imageName,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `Failed to get image URL: ${response.status} ${response.statusText}`,\n );\n }\n\n const result: ImageUploadResponse = await response.json();\n return result.url;\n }\n\n private async uploadImageData(\n url: string,\n base64ImageData: string,\n ): Promise<void> {\n const payload: ImageUploadPayload = {\n image_data: base64ImageData,\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Failed to upload image data: ${response.status} ${response.statusText}. ${errorText}`,\n );\n }\n }\n}\n","import { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport { SpanProcessor } from \"@opentelemetry/sdk-trace-node\";\nimport { context, diag } from \"@opentelemetry/api\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\nimport { TraceExporter as GcpTraceExporter } from \"@google-cloud/opentelemetry-cloud-trace-exporter\";\nimport { Resource } from \"@opentelemetry/resources\";\nimport { ATTR_SERVICE_NAME } from \"@opentelemetry/semantic-conventions\";\nimport { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { InitializeOptions } from \"../interfaces\";\nimport { _configuration } from \"../configuration\";\nimport { CONTEXT_KEY_ALLOW_TRACE_CONTENT } from \"@traceloop/ai-semantic-conventions\";\nimport { AnthropicInstrumentation } from \"@traceloop/instrumentation-anthropic\";\nimport { OpenAIInstrumentation } from \"@traceloop/instrumentation-openai\";\nimport { LlamaIndexInstrumentation } from \"@traceloop/instrumentation-llamaindex\";\nimport {\n AIPlatformInstrumentation,\n VertexAIInstrumentation,\n} from \"@traceloop/instrumentation-vertexai\";\nimport { BedrockInstrumentation } from \"@traceloop/instrumentation-bedrock\";\nimport { CohereInstrumentation } from \"@traceloop/instrumentation-cohere\";\nimport { PineconeInstrumentation } from \"@traceloop/instrumentation-pinecone\";\nimport { LangChainInstrumentation } from \"@traceloop/instrumentation-langchain\";\nimport { ChromaDBInstrumentation } from \"@traceloop/instrumentation-chromadb\";\nimport { QdrantInstrumentation } from \"@traceloop/instrumentation-qdrant\";\nimport { TogetherInstrumentation } from \"@traceloop/instrumentation-together\";\nimport { McpInstrumentation } from \"@traceloop/instrumentation-mcp\";\nimport {\n ALL_INSTRUMENTATION_LIBRARIES,\n createSpanProcessor,\n} from \"./span-processor\";\nimport { parseKeyPairsIntoRecord } from \"./baggage-utils\";\nimport { ImageUploader } from \"../images\";\n\nlet _sdk: NodeSDK;\nlet _spanProcessor: SpanProcessor;\nlet openAIInstrumentation: OpenAIInstrumentation | undefined;\nlet anthropicInstrumentation: AnthropicInstrumentation | undefined;\nlet cohereInstrumentation: CohereInstrumentation | undefined;\nlet vertexaiInstrumentation: VertexAIInstrumentation | undefined;\nlet aiplatformInstrumentation: AIPlatformInstrumentation | undefined;\nlet bedrockInstrumentation: BedrockInstrumentation | undefined;\nlet langchainInstrumentation: LangChainInstrumentation | undefined;\nlet llamaIndexInstrumentation: LlamaIndexInstrumentation | undefined;\nlet pineconeInstrumentation: PineconeInstrumentation | undefined;\nlet chromadbInstrumentation: ChromaDBInstrumentation | undefined;\nlet qdrantInstrumentation: QdrantInstrumentation | undefined;\nlet togetherInstrumentation: TogetherInstrumentation | undefined;\nlet mcpInstrumentation: McpInstrumentation | undefined;\n\nconst instrumentations: Instrumentation[] = [];\n\nexport const initInstrumentations = (apiKey?: string, baseUrl?: string) => {\n const exceptionLogger = (e: Error) => {\n console.debug(\"[Traceloop] Instrumentation exception:\", e.message);\n };\n const enrichTokens =\n (process.env.ANYWAY_ENRICH_TOKENS || \"true\").toLowerCase() === \"true\";\n\n // Create image upload callback if we have credentials\n let uploadBase64ImageCallback;\n if (apiKey && baseUrl) {\n const imageUploader = new ImageUploader(baseUrl, apiKey);\n uploadBase64ImageCallback =\n imageUploader.uploadBase64Image.bind(imageUploader);\n }\n\n // Create or update OpenAI instrumentation\n if (openAIInstrumentation) {\n // Update existing instrumentation with new callback\n openAIInstrumentation.setConfig({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n } else {\n // Create new instrumentation\n openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n instrumentations.push(openAIInstrumentation);\n }\n\n if (!anthropicInstrumentation) {\n anthropicInstrumentation = new AnthropicInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(anthropicInstrumentation);\n }\n\n cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });\n instrumentations.push(cohereInstrumentation);\n\n vertexaiInstrumentation = new VertexAIInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(vertexaiInstrumentation);\n\n aiplatformInstrumentation = new AIPlatformInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(aiplatformInstrumentation);\n\n bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger });\n instrumentations.push(bedrockInstrumentation);\n\n pineconeInstrumentation = new PineconeInstrumentation({ exceptionLogger });\n instrumentations.push(pineconeInstrumentation);\n\n langchainInstrumentation = new LangChainInstrumentation({ exceptionLogger });\n instrumentations.push(langchainInstrumentation);\n\n llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(llamaIndexInstrumentation);\n\n chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger });\n instrumentations.push(chromadbInstrumentation);\n\n qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });\n instrumentations.push(qdrantInstrumentation);\n\n togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger });\n instrumentations.push(togetherInstrumentation);\n\n mcpInstrumentation = new McpInstrumentation({ exceptionLogger });\n instrumentations.push(mcpInstrumentation);\n};\n\nexport const manuallyInitInstrumentations = (\n instrumentModules: InitializeOptions[\"instrumentModules\"],\n apiKey?: string,\n baseUrl?: string,\n) => {\n const exceptionLogger = (e: Error) => {\n console.debug(\"[Traceloop] Instrumentation exception:\", e.message);\n };\n const enrichTokens =\n (process.env.ANYWAY_ENRICH_TOKENS || \"true\").toLowerCase() === \"true\";\n\n // Create image upload callback if we have credentials\n let uploadBase64ImageCallback;\n if (apiKey && baseUrl) {\n const imageUploader = new ImageUploader(baseUrl, apiKey);\n uploadBase64ImageCallback =\n imageUploader.uploadBase64Image.bind(imageUploader);\n }\n\n // Clear the instrumentations array that was initialized by default\n instrumentations.length = 0;\n\n if (instrumentModules?.openAI) {\n openAIInstrumentation = new OpenAIInstrumentation({\n enrichTokens,\n exceptionLogger,\n uploadBase64Image: uploadBase64ImageCallback,\n });\n instrumentations.push(openAIInstrumentation);\n openAIInstrumentation.manuallyInstrument(instrumentModules.openAI);\n }\n\n if (instrumentModules?.anthropic) {\n anthropicInstrumentation = new AnthropicInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(anthropicInstrumentation);\n anthropicInstrumentation.manuallyInstrument(instrumentModules.anthropic);\n }\n\n if (instrumentModules?.cohere) {\n cohereInstrumentation = new CohereInstrumentation({ exceptionLogger });\n instrumentations.push(cohereInstrumentation);\n cohereInstrumentation.manuallyInstrument(instrumentModules.cohere);\n }\n\n if (instrumentModules?.google_vertexai) {\n vertexaiInstrumentation = new VertexAIInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(vertexaiInstrumentation);\n vertexaiInstrumentation.manuallyInstrument(\n instrumentModules.google_vertexai,\n );\n }\n\n if (instrumentModules?.google_aiplatform) {\n aiplatformInstrumentation = new AIPlatformInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(aiplatformInstrumentation);\n aiplatformInstrumentation.manuallyInstrument(\n instrumentModules.google_aiplatform,\n );\n }\n\n if (instrumentModules?.bedrock) {\n bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger });\n instrumentations.push(bedrockInstrumentation);\n bedrockInstrumentation.manuallyInstrument(instrumentModules.bedrock);\n }\n\n if (instrumentModules?.pinecone) {\n const instrumentation = new PineconeInstrumentation({ exceptionLogger });\n instrumentations.push(instrumentation as Instrumentation);\n instrumentation.manuallyInstrument(instrumentModules.pinecone);\n }\n\n // Always enable LangChain instrumentation\n langchainInstrumentation = new LangChainInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(langchainInstrumentation);\n\n if (instrumentModules?.llamaIndex) {\n llamaIndexInstrumentation = new LlamaIndexInstrumentation({\n exceptionLogger,\n });\n instrumentations.push(llamaIndexInstrumentation);\n llamaIndexInstrumentation.manuallyInstrument(instrumentModules.llamaIndex);\n }\n\n if (instrumentModules?.chromadb) {\n chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger });\n instrumentations.push(chromadbInstrumentation);\n chromadbInstrumentation.manuallyInstrument(instrumentModules.chromadb);\n }\n\n if (instrumentModules?.qdrant) {\n qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger });\n instrumentations.push(qdrantInstrumentation);\n qdrantInstrumentation.manuallyInstrument(instrumentModules.qdrant);\n }\n\n if (instrumentModules?.together) {\n togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger });\n instrumentations.push(togetherInstrumentation);\n togetherInstrumentation.manuallyInstrument(instrumentModules.together);\n }\n\n if (instrumentModules?.mcp) {\n mcpInstrumentation = new McpInstrumentation({ exceptionLogger });\n instrumentations.push(mcpInstrumentation);\n mcpInstrumentation.manuallyInstrument(instrumentModules.mcp);\n }\n};\n\n/**\n * Initializes the Traceloop SDK.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions} for details.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch feature data.\n */\nexport const startTracing = (options: InitializeOptions) => {\n const apiKey = options.apiKey || process.env.ANYWAY_API_KEY;\n const baseUrl =\n options.baseUrl ||\n process.env.ANYWAY_BASE_URL ||\n \"https://api.traceloop.com\";\n\n if (Object.keys(options.instrumentModules || {}).length > 0) {\n manuallyInitInstrumentations(options.instrumentModules, apiKey, baseUrl);\n } else {\n // Initialize default instrumentations if no manual modules specified\n initInstrumentations(apiKey, baseUrl);\n }\n if (!shouldSendTraces()) {\n openAIInstrumentation?.setConfig({\n traceContent: false,\n });\n llamaIndexInstrumentation?.setConfig({\n traceContent: false,\n });\n vertexaiInstrumentation?.setConfig({\n traceContent: false,\n });\n aiplatformInstrumentation?.setConfig({\n traceContent: false,\n });\n bedrockInstrumentation?.setConfig({\n traceContent: false,\n });\n cohereInstrumentation?.setConfig({\n traceContent: false,\n });\n chromadbInstrumentation?.setConfig({\n traceContent: false,\n });\n togetherInstrumentation?.setConfig({\n traceContent: false,\n });\n }\n\n const headers =\n options.headers ||\n (process.env.ANYWAY_HEADERS\n ? parseKeyPairsIntoRecord(process.env.ANYWAY_HEADERS)\n : { Authorization: `Bearer ${options.apiKey}` });\n\n const traceExporter =\n options.exporter ??\n (options.gcpProjectId\n ? new GcpTraceExporter({ projectId: options.gcpProjectId })\n : new OTLPTraceExporter({\n url: `${baseUrl}/v1/traces`,\n headers,\n }));\n\n _spanProcessor = createSpanProcessor({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n disableBatch: options.disableBatch,\n exporter: traceExporter,\n headers,\n allowedInstrumentationLibraries: ALL_INSTRUMENTATION_LIBRARIES,\n });\n\n const spanProcessors: SpanProcessor[] = [_spanProcessor];\n if (options.processor) {\n spanProcessors.push(options.processor);\n }\n\n const resource = createResource({\n [ATTR_SERVICE_NAME]:\n options.appName || process.env.npm_package_name || \"unknown_service\",\n });\n\n _sdk = new NodeSDK({\n resource,\n spanProcessors,\n contextManager: options.contextManager,\n textMapPropagator: options.propagator,\n traceExporter,\n instrumentations,\n // We should re-consider removing irrelevant spans here in the future\n // sampler: new TraceloopSampler(),\n });\n\n _sdk.start();\n};\n\nexport const shouldSendTraces = () => {\n if (!_configuration) {\n diag.warn(\"Traceloop not initialized\");\n return false;\n }\n\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n if (\n _configuration.traceContent === false ||\n (process.env.ANYWAY_TRACE_CONTENT || \"true\").toLowerCase() === \"false\"\n ) {\n return false;\n }\n\n return true;\n};\n\nexport const forceFlush = async () => {\n await _spanProcessor.forceFlush();\n};\n\n// Compatibility function for creating resources that works with both OTel v1.x and v2.x\nfunction createResource(attributes: Record<string, any>): Resource {\n // Import the resource module at runtime to handle both v1.x and v2.x\n const resourcesModule = require(\"@opentelemetry/resources\");\n\n // Try to use resourceFromAttributes if it exists (OTel v2.x)\n if (resourcesModule.resourceFromAttributes) {\n return resourcesModule.resourceFromAttributes(attributes);\n }\n\n // Fallback to constructor for OTel v1.x\n return new resourcesModule.Resource(attributes);\n}\n","import { InitializeOptions } from \"../interfaces\";\nimport fetch from \"cross-fetch\";\nimport fetchBuilder from \"fetch-retry\";\n\nconst fetchRetry = fetchBuilder(fetch);\n\nexport const fetchPrompts = async (options: InitializeOptions) => {\n const { apiKey, baseUrl, traceloopSyncMaxRetries } = options;\n\n const response = await fetchRetry(`${baseUrl}/v1/traceloop/prompts`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n \"X-Traceloop-SDK-Version\": \"0.0.30\",\n },\n retries: traceloopSyncMaxRetries,\n retryOn: function (attempt: any, error: any, response: any) {\n if (attempt >= traceloopSyncMaxRetries!) return false;\n if (response?.status && response.status >= 500) {\n return true;\n }\n return false;\n },\n retryDelay: function (attempt: any) {\n return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000\n },\n });\n\n return await response.json();\n};\n","import { InitializeOptions, Prompt } from \"../interfaces\";\nimport { InitializationError, PromptNotFoundError } from \"../errors\";\nimport { fetchPrompts } from \"./fetch\";\nimport { diag } from \"@opentelemetry/api\";\n\nconst _prompts: Record<string, Prompt> = {};\nlet _initialized = false;\nlet _initializedPromise: Promise<boolean>;\n\n/**\n * Returns true once SDK prompt registry has been initialized, else rejects with an error.\n * @returns Promise<boolean>\n */\nexport const waitForInitialization = async () => {\n if (_initialized) {\n return true;\n }\n return await _initializedPromise;\n};\n\nexport const getPromptByKey = (key: string) => {\n if (!_prompts[key]) {\n throw new PromptNotFoundError(key);\n }\n return _prompts[key];\n};\n\nconst populateRegistry = (prompts: unknown[]) => {\n prompts?.forEach((prompt: unknown) => {\n _prompts[(prompt as any).key] = prompt as any;\n });\n};\n\nexport const initializeRegistry = (options: InitializeOptions) => {\n const {\n baseUrl,\n traceloopSyncEnabled,\n traceloopSyncPollingInterval,\n traceloopSyncDevPollingInterval,\n } = options;\n\n if (!traceloopSyncEnabled || !baseUrl?.includes(\"traceloop\")) return;\n\n let pollingInterval = traceloopSyncPollingInterval;\n\n _initializedPromise = fetchPrompts(options)\n .then(({ prompts, environment }) => {\n if (environment === \"dev\") {\n pollingInterval = traceloopSyncDevPollingInterval;\n }\n populateRegistry(prompts);\n _initialized = true;\n\n setInterval(async () => {\n try {\n const { prompts } = await fetchPrompts(options);\n populateRegistry(prompts);\n } catch (err) {\n diag.error(\"Failed to fetch prompt data\", err);\n }\n }, pollingInterval! * 1000).unref();\n\n return true;\n })\n .catch((e) => {\n throw new InitializationError(\n \"Failed to fetch prompt data to initialize Traceloop SDK\",\n e,\n );\n });\n};\n","import { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport {\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\n\ninterface NormalizedPricing {\n inputCostPerToken: number;\n outputCostPerToken: number;\n}\n\ninterface ModelPricing {\n promptPrice: number;\n completionPrice: number;\n}\n\nexport interface PricingData {\n chat?: Record<string, ModelPricing>;\n embeddings?: Record<string, number>;\n images?: Record<string, unknown>;\n audio?: Record<string, unknown>;\n}\n\nconst DATE_SUFFIX_PATTERN = /-\\d{4}-\\d{2}-\\d{2}$/;\nconst DATE_COMPACT_SUFFIX_PATTERN = /-\\d{8}$/;\n\nexport class PricingCalculator {\n private chatModels: Record<string, ModelPricing>;\n\n constructor(pricingData: PricingData) {\n this.chatModels = pricingData.chat ?? {};\n }\n\n findPricing(modelName: string): NormalizedPricing | null {\n if (!modelName) return null;\n\n const models = this.chatModels;\n\n // 1. Exact match\n if (models[modelName]) {\n return this.normalize(models[modelName]);\n }\n\n // 2. Strip date suffix and retry\n let stripped = modelName.replace(DATE_SUFFIX_PATTERN, \"\");\n stripped = stripped.replace(DATE_COMPACT_SUFFIX_PATTERN, \"\");\n if (stripped !== modelName && models[stripped]) {\n return this.normalize(models[stripped]);\n }\n\n // 3. Prefix match (longest wins)\n let bestMatch: string | null = null;\n let bestLen = 0;\n for (const baseModel of Object.keys(models)) {\n if (modelName.startsWith(baseModel) && baseModel.length > bestLen) {\n bestMatch = baseModel;\n bestLen = baseModel.length;\n }\n }\n if (bestMatch) {\n return this.normalize(models[bestMatch]);\n }\n\n return null;\n }\n\n addCostAttributes(span: ReadableSpan): void {\n const attrs = span.attributes;\n if (!attrs) return;\n\n const model =\n (attrs[ATTR_GEN_AI_RESPONSE_MODEL] as string) ||\n (attrs[ATTR_GEN_AI_REQUEST_MODEL] as string);\n if (!model) return;\n\n const inputTokens = attrs[ATTR_GEN_AI_USAGE_INPUT_TOKENS] as\n | number\n | undefined;\n const outputTokens = attrs[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS] as\n | number\n | undefined;\n\n if (inputTokens == null && outputTokens == null) return;\n\n const pricing = this.findPricing(model);\n if (!pricing) return;\n\n const inputCost = (inputTokens ?? 0) * pricing.inputCostPerToken;\n const outputCost = (outputTokens ?? 0) * pricing.outputCostPerToken;\n\n span.attributes[\"gen_ai.usage.input_cost\"] = inputCost;\n span.attributes[\"gen_ai.usage.output_cost\"] = outputCost;\n span.attributes[\"gen_ai.usage.cost\"] = inputCost + outputCost;\n }\n\n private normalize(pricing: ModelPricing): NormalizedPricing {\n return {\n inputCostPerToken: (pricing.promptPrice ?? 0) / 1000,\n outputCostPerToken: (pricing.completionPrice ?? 0) / 1000,\n };\n }\n}\n","import { PricingData } from \"./calculator\";\n\nexport function loadPricing(pricingJsonPath?: string): PricingData {\n if (pricingJsonPath) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const fs = require(\"fs\");\n return JSON.parse(fs.readFileSync(pricingJsonPath, \"utf-8\"));\n }\n return require(\"./data/default_pricing.json\");\n}\n","import { InitializeOptions } from \"../interfaces\";\nimport { validateConfiguration } from \"./validation\";\nimport { startTracing } from \"../tracing\";\nimport { initializeRegistry } from \"../prompts/registry\";\nimport { diag, DiagConsoleLogger, DiagLogLevel } from \"@opentelemetry/api\";\nimport { TraceloopClient } from \"../client/traceloop-client\";\nimport { PricingCalculator, loadPricing } from \"../pricing\";\nimport { setPricingCalculator } from \"../tracing/span-processor\";\n\nexport let _configuration: InitializeOptions | undefined;\nlet _client: TraceloopClient | undefined;\n\n/**\n * Initializes the Traceloop SDK and creates a singleton client instance if API key is provided.\n * Must be called once before any other SDK methods.\n *\n * @param options - The options to initialize the SDK. See the {@link InitializeOptions} for details.\n * @returns TraceloopClient - The singleton client instance if API key is provided, otherwise undefined.\n * @throws {InitializationError} if the configuration is invalid or if failed to fetch feature data.\n *\n * @example\n * ```typescript\n * initialize({\n * apiKey: 'your-api-key',\n * appName: 'your-app',\n * });\n * ```\n */\nexport const initialize = (options: InitializeOptions = {}) => {\n if (_configuration) {\n return;\n }\n\n if (!options.baseUrl) {\n options.baseUrl =\n process.env.ANYWAY_BASE_URL || \"https://api.traceloop.com\";\n }\n if (!options.apiKey) {\n options.apiKey = process.env.ANYWAY_API_KEY;\n }\n if (!options.appName) {\n options.appName = process.env.npm_package_name;\n }\n if (!options.experimentSlug) {\n options.experimentSlug = process.env.ANYWAY_EXP_SLUG;\n }\n\n if (options.traceloopSyncEnabled === undefined) {\n if (process.env.ANYWAY_SYNC_ENABLED !== undefined) {\n options.traceloopSyncEnabled = [\"1\", \"true\"].includes(\n process.env.ANYWAY_SYNC_ENABLED.toLowerCase(),\n );\n } else {\n options.traceloopSyncEnabled = true;\n }\n }\n\n if (options.traceloopSyncEnabled) {\n if (!options.traceloopSyncMaxRetries) {\n options.traceloopSyncMaxRetries =\n Number(process.env.ANYWAY_SYNC_MAX_RETRIES) || 3;\n }\n\n if (!options.traceloopSyncPollingInterval) {\n options.traceloopSyncPollingInterval =\n Number(process.env.ANYWAY_SYNC_POLLING_INTERVAL) || 60;\n }\n\n if (!options.traceloopSyncDevPollingInterval) {\n options.traceloopSyncDevPollingInterval =\n Number(process.env.ANYWAY_SYNC_DEV_POLLING_INTERVAL) || 5;\n }\n }\n\n validateConfiguration(options);\n\n _configuration = Object.freeze(options);\n\n if (!options.silenceInitializationMessage) {\n console.log(\n `Traceloop exporting traces to ${\n _configuration.exporter ? \"a custom exporter\" : _configuration.baseUrl\n }`,\n );\n }\n\n if (options.tracingEnabled === undefined || options.tracingEnabled) {\n if (options.logLevel) {\n diag.setLogger(\n new DiagConsoleLogger(),\n logLevelToOtelLogLevel(options.logLevel),\n );\n }\n\n startTracing(_configuration);\n }\n\n if (options.pricingEnabled !== false) {\n try {\n const pricingData = loadPricing(options.pricingJsonPath);\n setPricingCalculator(new PricingCalculator(pricingData));\n } catch (e) {\n console.warn(\n `[Traceloop] Failed to initialize pricing: ${(e as Error).message}`,\n );\n }\n }\n\n initializeRegistry(_configuration);\n if (options.apiKey) {\n _client = new TraceloopClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n appName: options.appName!,\n experimentSlug: options.experimentSlug,\n });\n return _client;\n }\n return;\n};\n\nconst logLevelToOtelLogLevel = (\n logLevel: \"debug\" | \"info\" | \"warn\" | \"error\",\n) => {\n switch (logLevel) {\n case \"debug\":\n return DiagLogLevel.DEBUG;\n case \"info\":\n return DiagLogLevel.INFO;\n case \"warn\":\n return DiagLogLevel.WARN;\n case \"error\":\n return DiagLogLevel.ERROR;\n }\n};\n\n/**\n * Gets the singleton instance of the TraceloopClient.\n * The SDK must be initialized with an API key before calling this function.\n *\n * @returns The TraceloopClient singleton instance\n * @throws {Error} if the SDK hasn't been initialized or was initialized without an API key\n *\n * @example\n * ```typescript\n * const client = getClient();\n * await client.annotation.create({ annotationTask: 'taskId', entityInstanceId: 'entityId', tags: { score: 0.9 } });\n * ```\n */\nexport const getClient = (): TraceloopClient => {\n if (!_client) {\n throw new Error(\n \"Traceloop must be initialized before getting client, Call initialize() first.\" +\n \"If you already called initialize(), make sure you have an api key.\",\n );\n }\n return _client;\n};\n","import { Span, context } from \"@opentelemetry/api\";\nimport { suppressTracing } from \"@opentelemetry/core\";\nimport {\n AGENT_NAME_KEY,\n ASSOCATION_PROPERTIES_KEY,\n CONVERSATION_ID_KEY,\n ENTITY_NAME_KEY,\n getEntityPath,\n getTracer,\n WORKFLOW_NAME_KEY,\n} from \"./tracing\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n SpanAttributes,\n TraceloopSpanKindValues,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_CONVERSATION_ID,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport { shouldSendTraces } from \".\";\n\nexport type DecoratorConfig = {\n name: string;\n version?: number;\n associationProperties?: { [name: string]: string };\n conversationId?: string;\n traceContent?: boolean;\n inputParameters?: unknown[];\n suppressTracing?: boolean;\n};\n\nfunction withEntity<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n type: TraceloopSpanKindValues,\n {\n name,\n version,\n associationProperties,\n conversationId,\n traceContent: overrideTraceContent,\n inputParameters,\n suppressTracing: shouldSuppressTracing,\n }: DecoratorConfig,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n) {\n let entityContext = context.active();\n if (\n type === TraceloopSpanKindValues.WORKFLOW ||\n type === TraceloopSpanKindValues.AGENT\n ) {\n entityContext = entityContext.setValue(WORKFLOW_NAME_KEY, name);\n }\n\n if (type === TraceloopSpanKindValues.AGENT) {\n entityContext = entityContext.setValue(AGENT_NAME_KEY, name);\n }\n\n const entityPath = getEntityPath(entityContext);\n if (\n type === TraceloopSpanKindValues.TOOL ||\n type === TraceloopSpanKindValues.TASK\n ) {\n const fullEntityName = entityPath ? `${entityPath}.${name}` : name;\n entityContext = entityContext.setValue(ENTITY_NAME_KEY, fullEntityName);\n }\n\n if (overrideTraceContent != undefined) {\n entityContext = entityContext.setValue(\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n overrideTraceContent,\n );\n }\n if (associationProperties) {\n entityContext = entityContext.setValue(\n ASSOCATION_PROPERTIES_KEY,\n associationProperties,\n );\n }\n if (conversationId) {\n entityContext = entityContext.setValue(CONVERSATION_ID_KEY, conversationId);\n }\n\n if (shouldSuppressTracing) {\n entityContext = suppressTracing(entityContext);\n }\n\n return context.with(entityContext, () =>\n getTracer().startActiveSpan(\n `${name}.${type}`,\n {},\n entityContext,\n async (span: Span) => {\n if (\n type === TraceloopSpanKindValues.WORKFLOW ||\n type === TraceloopSpanKindValues.AGENT\n ) {\n span.setAttribute(SpanAttributes.TRACELOOP_WORKFLOW_NAME, name);\n }\n span.setAttribute(SpanAttributes.TRACELOOP_ENTITY_NAME, name);\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_PATH,\n entityPath || \"\",\n );\n span.setAttribute(SpanAttributes.TRACELOOP_SPAN_KIND, type);\n\n // Set agent name on all spans when there's an active agent context\n const agentName = entityContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n // Set conversation ID on all spans when there's an active conversation context\n const conversationId = entityContext.getValue(CONVERSATION_ID_KEY);\n if (conversationId) {\n span.setAttribute(\n ATTR_GEN_AI_CONVERSATION_ID,\n conversationId as string,\n );\n }\n\n if (version) {\n span.setAttribute(SpanAttributes.TRACELOOP_ENTITY_VERSION, version);\n }\n\n if (shouldSendTraces()) {\n try {\n const input = inputParameters ?? args;\n if (\n input.length === 1 &&\n typeof input[0] === \"object\" &&\n !(input[0] instanceof Map)\n ) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_INPUT,\n serialize({ args: [], kwargs: input[0] }),\n );\n } else {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_INPUT,\n serialize({\n args: input,\n kwargs: {},\n }),\n );\n }\n } catch (error) {\n console.debug(\"Error setting input attributes\", error);\n }\n }\n\n const res = fn.apply(thisArg, args);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n try {\n if (shouldSendTraces()) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_OUTPUT,\n serialize(resolvedRes),\n );\n }\n } catch (error) {\n console.debug(\"Error setting output attributes\", error);\n } finally {\n span.end();\n }\n\n return resolvedRes;\n });\n }\n try {\n if (shouldSendTraces()) {\n span.setAttribute(\n SpanAttributes.TRACELOOP_ENTITY_OUTPUT,\n serialize(res),\n );\n }\n } catch (error) {\n console.debug(\"Error setting output attributes\", error);\n } finally {\n span.end();\n }\n\n return res;\n },\n ),\n );\n}\n\nexport function withWorkflow<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.WORKFLOW,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withTask<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.TASK,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withAgent<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.AGENT,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nexport function withTool<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(config: DecoratorConfig, fn: F, ...args: A) {\n return withEntity(\n TraceloopSpanKindValues.TOOL,\n config,\n fn,\n undefined,\n ...args,\n );\n}\n\nfunction entity(\n type: TraceloopSpanKindValues,\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return function (\n target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConfig;\n\n if (typeof config === \"function\") {\n actualConfig = config(this, ...args);\n } else {\n actualConfig = config;\n }\n\n const entityName = actualConfig.name ?? originalMethod.name;\n\n return withEntity(\n type,\n { ...actualConfig, name: entityName },\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\nexport function workflow(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.WORKFLOW, config ?? {});\n}\n\nexport function task(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.TASK, config ?? {});\n}\n\nexport function agent(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.AGENT, config ?? {});\n}\n\nexport function tool(\n config:\n | Partial<DecoratorConfig>\n | ((thisArg: unknown, ...funcArgs: unknown[]) => Partial<DecoratorConfig>),\n) {\n return entity(TraceloopSpanKindValues.TOOL, config ?? {});\n}\n\nexport function withConversation<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(conversationId: string, fn: F, thisArg?: ThisParameterType<F>, ...args: A) {\n const conversationContext = context\n .active()\n .setValue(CONVERSATION_ID_KEY, conversationId);\n\n return context.with(conversationContext, () =>\n withEntity(\n TraceloopSpanKindValues.WORKFLOW,\n { name: `conversation.${conversationId}` },\n fn,\n thisArg,\n ...args,\n ),\n );\n}\n\nexport function conversation(\n conversationId:\n | string\n | ((thisArg: unknown, ...funcArgs: unknown[]) => string),\n) {\n return function (\n target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n let actualConversationId: string;\n\n if (typeof conversationId === \"function\") {\n actualConversationId = conversationId(this, ...args);\n } else {\n actualConversationId = conversationId;\n }\n\n return withConversation(\n actualConversationId,\n originalMethod,\n this,\n ...args,\n );\n };\n };\n}\n\nfunction cleanInput(input: unknown): unknown {\n if (input instanceof Map) {\n return Array.from(input.entries());\n } else if (Array.isArray(input)) {\n return input.map((value) => cleanInput(value));\n } else if (!input) {\n return input;\n } else if (typeof input === \"object\") {\n // serialize object one by one\n const output: any = {};\n Object.entries(input as any).forEach(([key, value]) => {\n output[key] = cleanInput(value);\n });\n return output;\n }\n\n return input;\n}\n\nfunction serialize(input: unknown): string {\n return JSON.stringify(cleanInput(input));\n}\n","import { Span, context, trace } from \"@opentelemetry/api\";\nimport { getTracer, AGENT_NAME_KEY } from \"./tracing\";\nimport {\n Events,\n EventAttributes,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_AGENT_NAME,\n ATTR_GEN_AI_COMPLETION,\n ATTR_GEN_AI_PROMPT,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport { shouldSendTraces } from \".\";\n\ntype VectorDBCallConfig = {\n vendor: string;\n type: \"query\" | \"upsert\" | \"delete\";\n};\n\ntype LLMCallConfig = {\n vendor: string;\n type: \"chat\" | \"completion\";\n};\n\nexport class VectorSpan {\n private span: Span;\n\n constructor(span: Span) {\n this.span = span;\n }\n\n reportQuery({ queryVector }: { queryVector: number[] }) {\n if (!shouldSendTraces()) {\n this.span.addEvent(Events.DB_QUERY_EMBEDDINGS);\n }\n\n this.span.addEvent(Events.DB_QUERY_EMBEDDINGS, {\n [EventAttributes.DB_QUERY_EMBEDDINGS_VECTOR]: JSON.stringify(queryVector),\n });\n }\n\n reportResults({\n results,\n }: {\n results: {\n ids?: string;\n scores?: number;\n distances?: number;\n metadata?: Record<string, unknown>;\n vectors?: number[];\n documents?: string;\n }[];\n }) {\n for (let i = 0; i < results.length; i++) {\n this.span.addEvent(Events.DB_QUERY_RESULT, {\n [EventAttributes.DB_QUERY_RESULT_ID]: results[i].ids,\n [EventAttributes.DB_QUERY_RESULT_SCORE]: results[i].scores,\n [EventAttributes.DB_QUERY_RESULT_DISTANCE]: results[i].distances,\n [EventAttributes.DB_QUERY_RESULT_METADATA]: JSON.stringify(\n results[i].metadata,\n ),\n [EventAttributes.DB_QUERY_RESULT_VECTOR]: results[i].vectors,\n [EventAttributes.DB_QUERY_RESULT_DOCUMENT]: results[i].documents,\n });\n }\n }\n}\n\nexport class LLMSpan {\n private span: Span;\n\n constructor(span: Span) {\n this.span = span;\n }\n\n reportRequest({\n model,\n messages,\n }: {\n model: string;\n messages: {\n role: string;\n content?: string | unknown;\n }[];\n }) {\n this.span.setAttributes({\n [ATTR_GEN_AI_REQUEST_MODEL]: model,\n });\n\n messages.forEach((message, index) => {\n this.span.setAttributes({\n [`${ATTR_GEN_AI_PROMPT}.${index}.role`]: message.role,\n [`${ATTR_GEN_AI_PROMPT}.${index}.content`]:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n });\n });\n }\n\n reportResponse({\n model,\n usage,\n completions,\n }: {\n model: string;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n completions?: {\n finish_reason: string;\n message: {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | null;\n };\n }[];\n }) {\n this.span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, model);\n\n if (usage) {\n this.span.setAttributes({\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: usage.prompt_tokens,\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: usage.completion_tokens,\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: usage.total_tokens,\n });\n }\n\n completions?.forEach((completion, index) => {\n this.span.setAttributes({\n [`${ATTR_GEN_AI_COMPLETION}.${index}.finish_reason`]:\n completion.finish_reason,\n [`${ATTR_GEN_AI_COMPLETION}.${index}.role`]: completion.message.role,\n [`${ATTR_GEN_AI_COMPLETION}.${index}.content`]:\n completion.message.content || \"\",\n });\n });\n }\n}\n\nexport function withVectorDBCall<\n F extends ({ span }: { span: VectorSpan }) => ReturnType<F>,\n>({ vendor, type }: VectorDBCallConfig, fn: F, thisArg?: ThisParameterType<F>) {\n const entityContext = context.active();\n\n return getTracer().startActiveSpan(\n `${vendor}.${type}`,\n { [SpanAttributes.LLM_REQUEST_TYPE]: type },\n entityContext,\n (span: Span) => {\n // Set agent name if there's an active agent context\n const agentName = entityContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n const res = fn.apply(thisArg, [{ span: new VectorSpan(span) }]);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n span.end();\n return resolvedRes;\n });\n }\n\n span.end();\n return res;\n },\n );\n}\n\nexport function withLLMCall<\n F extends ({ span }: { span: LLMSpan }) => ReturnType<F>,\n>({ vendor, type }: LLMCallConfig, fn: F, thisArg?: ThisParameterType<F>) {\n const currentContext = context.active();\n const span = getTracer().startSpan(`${vendor}.${type}`, {}, currentContext);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, type);\n\n // Set agent name if there's an active agent context\n const agentName = currentContext.getValue(AGENT_NAME_KEY);\n if (agentName) {\n span.setAttribute(ATTR_GEN_AI_AGENT_NAME, agentName as string);\n }\n\n trace.setSpan(currentContext, span);\n\n const res = fn.apply(thisArg, [{ span: new LLMSpan(span) }]);\n if (res instanceof Promise) {\n return res.then((resolvedRes) => {\n span.end();\n return resolvedRes;\n });\n }\n\n span.end();\n return res;\n}\n","import { context } from \"@opentelemetry/api\";\nimport { ASSOCATION_PROPERTIES_KEY } from \"./tracing\";\n\nexport function withAssociationProperties<\n A extends unknown[],\n F extends (...args: A) => ReturnType<F>,\n>(\n properties: { [name: string]: string },\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n) {\n if (Object.keys(properties).length === 0) {\n return fn.apply(thisArg, args);\n }\n\n const newContext = context\n .active()\n .setValue(ASSOCATION_PROPERTIES_KEY, properties);\n return context.with(newContext, fn, thisArg, ...args);\n}\n","import { context, diag, trace } from \"@opentelemetry/api\";\n\n/**\n * Reports a custom metric to the current active span.\n *\n * This function allows you to add a custom metric to the current span in the trace.\n * If there is no active span, a warning will be logged.\n *\n * @param {string} metricName - The name of the custom metric.\n * @param {number} metricValue - The numeric value of the custom metric.\n *\n * @example\n * reportCustomMetric('processing_time', 150);\n */\nexport const reportCustomMetric = (metricName: string, metricValue: number) => {\n const currentContext = context.active();\n const currentSpan = trace.getSpan(currentContext);\n\n if (currentSpan) {\n currentSpan.setAttribute(\n `traceloop.custom_metric.${metricName}`,\n metricValue,\n );\n } else {\n diag.warn(`No active span found to report custom metric: ${metricName}`);\n }\n};\n","export const TEMPLATING_ENGINE = {\n JINJA2: \"jinja2\",\n} as const;\n\nexport type TemplatingEngine =\n (typeof TEMPLATING_ENGINE)[keyof typeof TEMPLATING_ENGINE];\n\nexport type Content =\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } };\n\nexport interface PromptMessage {\n index: number;\n template: string | Content[];\n role: string;\n variables: string[];\n}\n\nexport interface RenderedMessage {\n role: string;\n content: string | Content[];\n}\n\nexport interface PromptTarget {\n id: string;\n environment: string;\n version: string;\n updated_at: string;\n}\n\nexport interface PromptVersion {\n templating_engine: TemplatingEngine;\n provider: string;\n messages: PromptMessage[];\n id: string;\n hash: string;\n version: number;\n name?: string;\n updated_at: string;\n created_at: string;\n author?: string;\n publishable: boolean;\n llm_config: any;\n}\n\nexport interface Prompt {\n id: string;\n org_id: string;\n key: string;\n updated_at: string;\n created_at: string;\n versions: PromptVersion[];\n target: PromptTarget;\n}\n","import { TraceloopError } from \"../errors\";\nimport {\n PromptVersion,\n RenderedMessage,\n TEMPLATING_ENGINE,\n} from \"../interfaces\";\nimport { Environment } from \"nunjucks\";\n\nconst env = new Environment(null, {\n throwOnUndefined: true, // throw error if param not found\n});\n\nexport const renderMessages = (\n promptVersion: PromptVersion,\n variables: Record<string, any>,\n): RenderedMessage[] => {\n if (promptVersion.templating_engine === TEMPLATING_ENGINE.JINJA2) {\n return promptVersion.messages.map((message) => {\n try {\n if (typeof message.template === \"string\") {\n return {\n content: env.renderString(message.template, variables),\n role: message.role,\n };\n } else {\n return {\n content: message.template.map((content) => {\n if (content.type === \"text\") {\n return {\n type: \"text\",\n text: env.renderString(content.text, variables),\n };\n } else {\n return content;\n }\n }),\n role: message.role,\n };\n }\n } catch (err) {\n throw new TraceloopError(\n `Failed to render message template. Missing variables?`,\n );\n }\n });\n } else {\n throw new TraceloopError(\n `Templating engine ${promptVersion.templating_engine} is not supported`,\n );\n }\n};\n","import { TraceloopError } from \"../errors\";\nimport { Prompt, PromptVersion } from \"../interfaces\";\nimport { getPromptByKey } from \"./registry\";\nimport { renderMessages } from \"./template\";\nexport { waitForInitialization } from \"./registry\";\n\nconst getEffectiveVersion = (prompt: Prompt): PromptVersion => {\n const version = prompt.versions.find(\n (v: PromptVersion) => v.id === prompt.target.version,\n );\n if (!version) {\n throw new TraceloopError(\n `Prompt version ${prompt.target.version} not found`,\n );\n }\n return version;\n};\n\nconst managedPromptTracingAttributes = (\n prompt: Prompt,\n promptVersion: PromptVersion,\n variables: Record<string, string>,\n) => {\n const variableAttributes = Object.keys(variables).reduce(\n (acc, key) => {\n acc[`traceloop.prompt.template_variables.${key}`] = variables[key];\n return acc;\n },\n {} as Record<string, string>,\n );\n\n return {\n \"traceloop.prompt.key\": prompt.key,\n \"traceloop.prompt.version\": promptVersion.version,\n \"traceloop.prompt.version_hash\": promptVersion.hash,\n \"traceloop.prompt.version_name\": promptVersion.name,\n ...variableAttributes,\n };\n};\n\nexport const getPrompt = (key: string, variables: Record<string, string>) => {\n const prompt = getPromptByKey(key);\n const promptVersion = getEffectiveVersion(prompt);\n\n let result: any = {}; //TODO - SDK needs to do work specific to each vendor/model? maybe we do this in the backend?\n if (promptVersion.llm_config.mode === \"completion\") {\n const message = renderMessages(promptVersion, variables);\n result = {\n ...promptVersion.llm_config,\n prompt: message?.[0]?.content,\n };\n } else {\n result = {\n messages: renderMessages(promptVersion, variables),\n ...promptVersion.llm_config,\n };\n }\n if (result?.[\"stop\"].length === 0) delete result[\"stop\"];\n delete result[\"mode\"];\n\n result.extraAttributes = managedPromptTracingAttributes(\n prompt,\n promptVersion,\n variables,\n );\n\n return result;\n};\n","/**\n * Standard association properties for tracing.\n * Use these with withAssociationProperties() or decorator associationProperties config.\n *\n * @example\n * ```typescript\n * // With withAssociationProperties\n * await traceloop.withAssociationProperties(\n * {\n * [traceloop.AssociationProperty.USER_ID]: \"12345\",\n * [traceloop.AssociationProperty.SESSION_ID]: \"session-abc\"\n * },\n * async () => {\n * await chat();\n * }\n * );\n *\n * // With decorator\n * @traceloop.workflow((thisArg) => ({\n * name: \"my_workflow\",\n * associationProperties: {\n * [traceloop.AssociationProperty.USER_ID]: (thisArg as MyClass).userId,\n * },\n * }))\n * ```\n */\nexport enum AssociationProperty {\n CUSTOMER_ID = \"customer_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n}\n"],"names":["mime","fs","path","Papa","createContextKey","trace","ATTR_GEN_AI_COMPLETION","ATTR_GEN_AI_OUTPUT_MESSAGES","SpanAttributes","ATTR_GEN_AI_PROMPT","ATTR_GEN_AI_INPUT_MESSAGES","ATTR_GEN_AI_USAGE_INPUT_TOKENS","ATTR_GEN_AI_USAGE_OUTPUT_TOKENS","ATTR_GEN_AI_SYSTEM","ATTR_GEN_AI_PROVIDER_NAME","ATTR_GEN_AI_OPERATION_NAME","ATTR_GEN_AI_REQUEST_MODEL","ATTR_GEN_AI_RESPONSE_FINISH_REASONS","ATTR_GEN_AI_TOOL_NAME","ATTR_GEN_AI_TOOL_CALL_ID","ATTR_GEN_AI_TOOL_CALL_ARGUMENTS","ATTR_GEN_AI_TOOL_CALL_RESULT","ATTR_GEN_AI_CONVERSATION_ID","ATTR_GEN_AI_RESPONSE_MODEL","ATTR_GEN_AI_RESPONSE_ID","ATTR_GEN_AI_AGENT_NAME","TraceloopSpanKindValues","OTLPTraceExporter","SimpleSpanProcessor","BatchSpanProcessor","context","OpenAIInstrumentation","AnthropicInstrumentation","CohereInstrumentation","VertexAIInstrumentation","AIPlatformInstrumentation","BedrockInstrumentation","PineconeInstrumentation","LangChainInstrumentation","LlamaIndexInstrumentation","ChromaDBInstrumentation","QdrantInstrumentation","TogetherInstrumentation","McpInstrumentation","GcpTraceExporter","ATTR_SERVICE_NAME","NodeSDK","diag","CONTEXT_KEY_ALLOW_TRACE_CONTENT","fetch","DiagConsoleLogger","DiagLogLevel","suppressTracing","Events","EventAttributes","Environment","AssociationProperty"],"mappings":"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"}
|