UNPKG

@langchain/core

Version:
1 lines 6.62 kB
{"version":3,"file":"langsmith.cjs","names":["BaseDocumentLoader","fields: LangSmithLoaderFields","Client","documents: DocumentInterface[]","metadata: KVMap","x: string | KVMap"],"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 // eslint-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 // eslint-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,iDAAmB;CACtD;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAGA;CAEA;CAEA,YAAYC,QAA+B;EACzC,OAAO;AAEP,MAAI,OAAO,UAAU,OAAO,aAC1B,OAAM,IAAI,MAAM;EAElB,KAAK,SAAS,OAAO,UAAU,IAAIC,iBAAO,QAAQ;EAClD,KAAK,aAAa,OAAO,aAAa,OAAO,WAAW,MAAM,IAAI,GAAG,CAAE;EACvE,KAAK,gBAAgB,OAAO,iBAAiB;EAC7C,KAAK,YAAY,OAAO;EACxB,KAAK,cAAc,OAAO;EAC1B,KAAK,aAAa,OAAO;EACzB,KAAK,OAAO,OAAO;EACnB,KAAK,SAAS,OAAO;EACrB,KAAK,eAAe,OAAO;EAC3B,KAAK,SAAS,OAAO;EACrB,KAAK,QAAQ,OAAO;EACpB,KAAK,WAAW,OAAO;EACvB,KAAK,SAAS,OAAO;CACtB;CAED,MAAM,OAA4B;EAChC,MAAMC,YAAiC,CAAE;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;EACd,EAAC,EAAE;GACF,IAAI,UAAU,QAAQ;AACtB,QAAK,MAAM,OAAO,KAAK,YACrB,UAAU,QAAQ;GAEpB,MAAM,aAAa,KAAK,cAAc,QAAQ;GAE9C,MAAMC,WAAkB;GACxB,CAAC,cAAc,aAAc,EAAC,QAAQ,CAAC,MAAM;AAC3C,QAAI,KAAK,UACP;SAAI,OAAO,SAAS,OAAO,UAEzB,SAAS,KAAK,SAAS,GAAG,UAAU;IACrC;GAEJ,EAAC;GAEF,UAAU,KAAK;IACb,aAAa;IACb;GACD,EAAC;EACH;AACD,SAAO;CACR;AACF;AAED,SAAS,WAAWC,GAA2B;AAC7C,KAAI,OAAO,MAAM,SACf,QAAO;KAEP,KAAI;AACF,SAAO,KAAK,UAAU,GAAG,MAAM,EAAE;CAClC,QAAO;AACN,SAAO,OAAO,EAAE;CACjB;AAEJ"}