@@ -17,6 +17,8 @@ import {
1717 startActiveObservation ,
1818 LangfuseGeneration ,
1919 LangfuseSpan ,
20+ LangfuseTool ,
21+ LangfuseObservationAttributes ,
2022 LangfuseGenerationAttributes ,
2123 LangfuseSpanAttributes ,
2224 propagateAttributes ,
@@ -49,6 +51,8 @@ type ConstructorParams = {
4951 traceMetadata ?: Record < string , unknown > ; // added to all traces
5052} ;
5153
54+ type TrackedObservation = LangfuseSpan | LangfuseGeneration | LangfuseTool ;
55+
5256export class CallbackHandler extends BaseCallbackHandler {
5357 name = "LangfuseCallbackHandler" ;
5458
@@ -60,7 +64,7 @@ export class CallbackHandler extends BaseCallbackHandler {
6064
6165 private completionStartTimes : Record < string , Date > = { } ;
6266 private promptToParentRunMap ;
63- private runMap : Map < string , LangfuseSpan | LangfuseGeneration > = new Map ( ) ;
67+ private runMap : Map < string , TrackedObservation > = new Map ( ) ;
6468
6569 public last_trace_id : string | null = null ;
6670
@@ -457,6 +461,7 @@ export class CallbackHandler extends BaseCallbackHandler {
457461 this . logger . debug ( `Tool start with ID: ${ runId } ` ) ;
458462
459463 this . startAndRegisterOtelSpan ( {
464+ type : "tool" ,
460465 runId,
461466 parentRunId,
462467 runName : name ?? tool . id . at ( - 1 ) ?. toString ( ) ?? "Tool execution" ,
@@ -716,7 +721,7 @@ export class CallbackHandler extends BaseCallbackHandler {
716721 runName : string ;
717722 runId : string ;
718723 parentRunId ?: string ;
719- attributes : LangfuseGenerationAttributes ;
724+ attributes : LangfuseSpanAttributes ;
720725 metadata ?: Record < string , unknown > ;
721726 tags ?: string [ ] ;
722727 } ) : LangfuseSpan ;
@@ -730,14 +735,23 @@ export class CallbackHandler extends BaseCallbackHandler {
730735 tags ?: string [ ] ;
731736 } ) : LangfuseGeneration ;
732737 private startAndRegisterOtelSpan ( params : {
733- type ? : "span" | "generation ";
738+ type : "tool " ;
734739 runName : string ;
735740 runId : string ;
736741 parentRunId ?: string ;
737- attributes : LangfuseGenerationAttributes ;
742+ attributes : LangfuseSpanAttributes ;
743+ metadata ?: Record < string , unknown > ;
744+ tags ?: string [ ] ;
745+ } ) : LangfuseTool ;
746+ private startAndRegisterOtelSpan ( params : {
747+ type ?: "span" | "generation" | "tool" ;
748+ runName : string ;
749+ runId : string ;
750+ parentRunId ?: string ;
751+ attributes : LangfuseObservationAttributes ;
738752 metadata ?: Record < string , unknown > ;
739753 tags ?: string [ ] ;
740- } ) : LangfuseSpan | LangfuseGeneration {
754+ } ) : TrackedObservation {
741755 const { type, runName, runId, parentRunId, attributes, metadata, tags } =
742756 params ;
743757
@@ -746,37 +760,50 @@ export class CallbackHandler extends BaseCallbackHandler {
746760 metadata : this . joinTagsAndMetaData ( tags , metadata ) ,
747761 level : tags && tags . includes ( LANGSMITH_HIDDEN_TAG ) ? "DEBUG" : undefined ,
748762 ...attributes ,
749- } as LangfuseGenerationAttributes ;
763+ } as LangfuseObservationAttributes ;
764+
765+ const parentSpanContext = parentRunId
766+ ? this . runMap . get ( parentRunId ) ?. otelSpan . spanContext ( )
767+ : undefined ;
750768
751769 const observation =
752770 type === "generation"
753771 ? startActiveObservation (
754772 runName ,
755773 ( gen ) => {
756- gen . update ( observationAttributes ) ;
774+ gen . update ( observationAttributes as LangfuseGenerationAttributes ) ;
757775 return gen ;
758776 } ,
759777 {
760778 asType : "generation" ,
761- parentSpanContext : parentRunId
762- ? this . runMap . get ( parentRunId ) ?. otelSpan . spanContext ( )
763- : undefined ,
779+ parentSpanContext,
764780 endOnExit : false ,
765781 } ,
766782 )
767- : startActiveObservation (
768- runName ,
769- ( span ) => {
770- span . update ( observationAttributes ) ;
771- return span ;
772- } ,
773- {
774- parentSpanContext : parentRunId
775- ? this . runMap . get ( parentRunId ) ?. otelSpan . spanContext ( )
776- : undefined ,
777- endOnExit : false ,
778- } ,
779- ) ;
783+ : type === "tool"
784+ ? startActiveObservation (
785+ runName ,
786+ ( tool ) => {
787+ tool . update ( observationAttributes as LangfuseSpanAttributes ) ;
788+ return tool ;
789+ } ,
790+ {
791+ asType : "tool" ,
792+ parentSpanContext,
793+ endOnExit : false ,
794+ } ,
795+ )
796+ : startActiveObservation (
797+ runName ,
798+ ( span ) => {
799+ span . update ( observationAttributes as LangfuseSpanAttributes ) ;
800+ return span ;
801+ } ,
802+ {
803+ parentSpanContext,
804+ endOnExit : false ,
805+ } ,
806+ ) ;
780807 this . runMap . set ( runId , observation ) ;
781808
782809 return observation ;
0 commit comments