UNPKG

langsmith

Version:

Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.

41 lines (40 loc) 1.95 kB
import { RunTree, RunnableConfigLike } from "../run_trees.js"; import { ROOT } from "./traceable.js"; type SmartPromise<T> = T extends AsyncGenerator ? T : T extends Promise<unknown> ? T : Promise<T>; type WrapArgReturnPair<Pair> = Pair extends [ infer Args extends any[], infer Return ] ? Args extends [RunTree, ...infer RestArgs] ? { (runTree: RunTree | typeof ROOT, ...args: RestArgs): SmartPromise<Return>; (config: RunnableConfigLike, ...args: RestArgs): SmartPromise<Return>; } : { (...args: Args): SmartPromise<Return>; (runTree: RunTree, ...rest: Args): SmartPromise<Return>; (config: RunnableConfigLike, ...args: Args): SmartPromise<Return>; } : never; type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never; export type TraceableFunction<Func extends (...args: any[]) => any> = (Func extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; (...args: infer A4): infer R4; (...args: infer A5): infer R5; } ? UnionToIntersection<WrapArgReturnPair<[A1, R1] | [A2, R2] | [A3, R3] | [A4, R4] | [A5, R5]>> : Func extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; (...args: infer A4): infer R4; } ? UnionToIntersection<WrapArgReturnPair<[A1, R1] | [A2, R2] | [A3, R3] | [A4, R4]>> : Func extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; (...args: infer A3): infer R3; } ? UnionToIntersection<WrapArgReturnPair<[A1, R1] | [A2, R2] | [A3, R3]>> : Func extends { (...args: infer A1): infer R1; (...args: infer A2): infer R2; } ? UnionToIntersection<WrapArgReturnPair<[A1, R1] | [A2, R2]>> : Func extends { (...args: infer A1): infer R1; } ? UnionToIntersection<WrapArgReturnPair<[A1, R1]>> : never) & { [K in keyof Func]: Func[K]; }; export type RunTreeLike = RunTree; export {};