1- import { HumanloopClient as FernClient } from "./Client" ;
1+ import { NodeTracerProvider , Tracer } from "@opentelemetry/sdk-trace-node" ;
2+ import { HumanloopClient as BaseHumanloopClient } from "./Client" ;
3+ import { HumanloopSpanProcessor } from "otel/processor" ;
4+ import { HumanloopSpanExporter } from "otel/exporter" ;
5+ import { instrumentProvider } from "otel" ;
6+ import { UtilityPromptKernel , prompt as promptUtilityFactory } from "decorators/prompt" ;
7+ import { tool as toolUtilityFactory } from "decorators/tool" ;
8+ import { flow as flowUtilityFactory } from "decorators/flow" ;
9+ import { ToolKernelRequest } from "api/types/ToolKernelRequest" ;
10+ import { FlowKernelRequest } from "api/types/FlowKernelRequest" ;
211
3- export class HumanloopClient extends FernClient {
4-
5- }
12+ export class HumanloopClient extends BaseHumanloopClient {
13+ protected readonly opentelemetryTracerProvider : NodeTracerProvider ;
14+ protected readonly opentelemetryTracer : Tracer ;
15+
16+ constructor (
17+ _options : BaseHumanloopClient . Options ,
18+ opentelemetryTracerProvider : NodeTracerProvider ,
19+ opentelemetryTracer : Tracer
20+ ) {
21+ super ( _options ) ;
22+
23+ if ( opentelemetryTracerProvider ) {
24+ this . opentelemetryTracerProvider = opentelemetryTracerProvider ;
25+ } else {
26+ this . opentelemetryTracerProvider = new NodeTracerProvider ( {
27+ spanProcessors : [ new HumanloopSpanProcessor ( new HumanloopSpanExporter ( this ) ) ] ,
28+ } ) ;
29+ }
30+
31+ instrumentProvider ( this . opentelemetryTracerProvider ) ;
32+
33+ this . opentelemetryTracerProvider . register ( ) ;
34+
35+ if ( this . opentelemetryTracerProvider !== undefined ) {
36+ this . opentelemetryTracer = this . opentelemetryTracerProvider . getTracer ( "humanloop.sdk" ) ;
37+ } else {
38+ this . opentelemetryTracer = opentelemetryTracer ;
39+ }
40+ }
41+
42+ public prompt < T extends ( ...args : any [ ] ) => any > ( func : T , promptKernel ?: UtilityPromptKernel , path ?: string ) {
43+ return promptUtilityFactory ( this . opentelemetryTracer , func , promptKernel , path ) ;
44+ }
45+
46+ public tool < T extends ( ...args : any [ ] ) => any > ( func : T , toolKernel : ToolKernelRequest , path ?: string ) {
47+ return toolUtilityFactory ( this . opentelemetryTracer , func , toolKernel , path ) ;
48+ }
49+
50+ public flow < T extends ( ...args : any [ ] ) => any > ( func : T , flowKernel : FlowKernelRequest , path ?: string ) {
51+ return flowUtilityFactory ( this . opentelemetryTracer , func , flowKernel , path ) ;
52+ }
53+ }
0 commit comments