{"version":3,"file":"langsmith.cjs","names":["BaseDocumentLoader","Client"],"sources":["../../src/document_loaders/langsmith.ts"],"sourcesContent":["import { KVMap } from \"langsmith/schemas\";\nimport { Client } from \"langsmith\";\nimport { Document, DocumentInterface } from \"../documents/document.js\";\nimport { AsyncCallerParams } from \"../utils/async_caller.js\";\nimport { BaseDocumentLoader } from \"./base.js\";\n\n// TODO: Replace with import from `langsmith` once exposed.\ninterface ClientConfig {\n  apiUrl?: string;\n  apiKey?: string;\n  callerOptions?: AsyncCallerParams;\n  timeout_ms?: number;\n  webUrl?: string;\n  anonymizer?: (values: KVMap) => KVMap;\n  hideInputs?: boolean | ((inputs: KVMap) => KVMap);\n  hideOutputs?: boolean | ((outputs: KVMap) => KVMap);\n  autoBatchTracing?: boolean;\n  pendingAutoBatchedRunLimit?: number;\n  fetchOptions?: RequestInit;\n}\n\nexport interface LangSmithLoaderFields {\n  datasetId?: string;\n  datasetName?: string;\n  exampleIds?: Array<string>;\n  asOf?: Date | string;\n  splits?: string[];\n  inlineS3Urls?: boolean;\n  offset?: number;\n  limit?: number;\n  metadata?: KVMap;\n  filter?: string;\n  contentKey?: string;\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  formatContent?: (content: any) => string;\n  client?: Client;\n  clientConfig?: ClientConfig;\n}\n\n/**\n * Document loader integration with LangSmith.\n *\n * ## [Constructor args](https://api.js.langchain.com/interfaces/_langchain_core.document_loaders_langsmith.LangSmithLoaderFields.html)\n *\n * <details open>\n * <summary><strong>Load</strong></summary>\n *\n * ```typescript\n * import { LangSmithLoader } from '@langchain/core/document_loaders/langsmith';\n * import { Client } from 'langsmith';\n *\n * const langSmithClient = new Client({\n *   apiKey: process.env.LANGSMITH_API_KEY,\n * })\n *\n * const loader = new LangSmithLoader({\n *   datasetId: \"9a3b36f7-b308-40a5-9b46-6613853b6330\",\n *   limit: 1,\n * });\n *\n * const docs = await loader.load();\n * ```\n *\n * ```txt\n * [\n *   {\n *     pageContent: '{\\n  \"input_key_str\": \"string\",\\n  \"input_key_bool\": true\\n}',\n *     metadata: {\n *       id: '8523d9e9-c123-4b23-9b46-21021nds289e',\n *       created_at: '2024-08-19T17:09:14.806441+00:00',\n *       modified_at: '2024-08-19T17:09:14.806441+00:00',\n *       name: '#8517 @ brace-test-dataset',\n *       dataset_id: '9a3b36f7-b308-40a5-9b46-6613853b6330',\n *       source_run_id: null,\n *       metadata: [Object],\n *       inputs: [Object],\n *       outputs: [Object]\n *     }\n *   }\n * ]\n * ```\n * </details>\n */\nexport class LangSmithLoader extends BaseDocumentLoader {\n  datasetId?: string;\n\n  datasetName?: string;\n\n  exampleIds?: Array<string>;\n\n  asOf?: Date | string;\n\n  splits?: string[];\n\n  inlineS3Urls?: boolean;\n\n  offset?: number;\n\n  limit?: number;\n\n  metadata?: KVMap;\n\n  filter?: string;\n\n  contentKey: string[];\n\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  formatContent: (content: any) => string;\n\n  client: Client;\n\n  constructor(fields: LangSmithLoaderFields) {\n    super();\n\n    if (fields.client && fields.clientConfig) {\n      throw new Error(\"client and clientConfig cannot both be provided.\");\n    }\n    this.client = fields.client ?? new Client(fields?.clientConfig);\n    this.contentKey = fields.contentKey ? fields.contentKey.split(\".\") : [];\n    this.formatContent = fields.formatContent ?? _stringify;\n    this.datasetId = fields.datasetId;\n    this.datasetName = fields.datasetName;\n    this.exampleIds = fields.exampleIds;\n    this.asOf = fields.asOf;\n    this.splits = fields.splits;\n    this.inlineS3Urls = fields.inlineS3Urls;\n    this.offset = fields.offset;\n    this.limit = fields.limit;\n    this.metadata = fields.metadata;\n    this.filter = fields.filter;\n  }\n\n  async load(): Promise<Document[]> {\n    const documents: DocumentInterface[] = [];\n    for await (const example of this.client.listExamples({\n      datasetId: this.datasetId,\n      datasetName: this.datasetName,\n      exampleIds: this.exampleIds,\n      asOf: this.asOf,\n      splits: this.splits,\n      inlineS3Urls: this.inlineS3Urls,\n      offset: this.offset,\n      limit: this.limit,\n      metadata: this.metadata,\n      filter: this.filter,\n    })) {\n      let content = example.inputs;\n      for (const key of this.contentKey) {\n        content = content[key];\n      }\n      const contentStr = this.formatContent(content);\n\n      const metadata: KVMap = example;\n      [\"created_at\", \"modified_at\"].forEach((k) => {\n        if (k in metadata) {\n          if (typeof metadata[k] === \"object\") {\n            // Dates are of type `object`, we want to convert them to strings.\n            metadata[k] = metadata[k].toString();\n          }\n        }\n      });\n\n      documents.push({\n        pageContent: contentStr,\n        metadata,\n      });\n    }\n    return documents;\n  }\n}\n\nfunction _stringify(x: string | KVMap): string {\n  if (typeof x === \"string\") {\n    return x;\n  } else {\n    try {\n      return JSON.stringify(x, null, 2);\n    } catch {\n      return String(x);\n    }\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,IAAa,kBAAb,cAAqCA,8BAAAA,mBAAmB;CACtD;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAGA;CAEA;CAEA,YAAY,QAA+B;AACzC,SAAO;AAEP,MAAI,OAAO,UAAU,OAAO,aAC1B,OAAM,IAAI,MAAM,mDAAmD;AAErE,OAAK,SAAS,OAAO,UAAU,IAAIC,UAAAA,OAAO,QAAQ,aAAa;AAC/D,OAAK,aAAa,OAAO,aAAa,OAAO,WAAW,MAAM,IAAI,GAAG,EAAE;AACvE,OAAK,gBAAgB,OAAO,iBAAiB;AAC7C,OAAK,YAAY,OAAO;AACxB,OAAK,cAAc,OAAO;AAC1B,OAAK,aAAa,OAAO;AACzB,OAAK,OAAO,OAAO;AACnB,OAAK,SAAS,OAAO;AACrB,OAAK,eAAe,OAAO;AAC3B,OAAK,SAAS,OAAO;AACrB,OAAK,QAAQ,OAAO;AACpB,OAAK,WAAW,OAAO;AACvB,OAAK,SAAS,OAAO;;CAGvB,MAAM,OAA4B;EAChC,MAAM,YAAiC,EAAE;AACzC,aAAW,MAAM,WAAW,KAAK,OAAO,aAAa;GACnD,WAAW,KAAK;GAChB,aAAa,KAAK;GAClB,YAAY,KAAK;GACjB,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,UAAU,KAAK;GACf,QAAQ,KAAK;GACd,CAAC,EAAE;GACF,IAAI,UAAU,QAAQ;AACtB,QAAK,MAAM,OAAO,KAAK,WACrB,WAAU,QAAQ;GAEpB,MAAM,aAAa,KAAK,cAAc,QAAQ;GAE9C,MAAM,WAAkB;AACxB,IAAC,cAAc,cAAc,CAAC,SAAS,MAAM;AAC3C,QAAI,KAAK;SACH,OAAO,SAAS,OAAO,SAEzB,UAAS,KAAK,SAAS,GAAG,UAAU;;KAGxC;AAEF,aAAU,KAAK;IACb,aAAa;IACb;IACD,CAAC;;AAEJ,SAAO;;;AAIX,SAAS,WAAW,GAA2B;AAC7C,KAAI,OAAO,MAAM,SACf,QAAO;KAEP,KAAI;AACF,SAAO,KAAK,UAAU,GAAG,MAAM,EAAE;SAC3B;AACN,SAAO,OAAO,EAAE"}