4747from langfuse ._client .constants import (
4848 ObservationTypeLiteral ,
4949 ObservationTypeGenerationLike ,
50+ ObservationTypeSpanLike ,
5051 ObservationTypeLiteralNoEvent ,
52+ get_observation_types_list ,
5153)
5254from langfuse .logger import langfuse_logger
5355from langfuse .types import MapValue , ScoreDataType , SpanLevel
@@ -142,7 +144,7 @@ def __init__(
142144
143145 attributes = {}
144146
145- if as_type in get_args (ObservationTypeGenerationLike ):
147+ if as_type in get_observation_types_list (ObservationTypeGenerationLike ):
146148 attributes = create_generation_attributes (
147149 input = media_processed_input ,
148150 output = media_processed_output ,
@@ -157,21 +159,13 @@ def __init__(
157159 cost_details = cost_details ,
158160 prompt = prompt ,
159161 observation_type = cast (
160- Literal [
161- "generation" ,
162- "agent" ,
163- "tool" ,
164- "chain" ,
165- "retriever" ,
166- "evaluator" ,
167- "embedding" ,
168- ],
162+ ObservationTypeGenerationLike ,
169163 as_type ,
170164 ),
171165 )
172166
173167 else :
174- # For span-like types: "span", "guardrail", "event"
168+ # For span-like types and events
175169 attributes = create_span_attributes (
176170 input = media_processed_input ,
177171 output = media_processed_output ,
@@ -180,8 +174,12 @@ def __init__(
180174 level = level ,
181175 status_message = status_message ,
182176 observation_type = cast (
183- Optional [Literal ["span" , "guardrail" , "event" ]],
184- as_type if as_type in ["span" , "guardrail" , "event" ] else None ,
177+ Optional [Union [ObservationTypeSpanLike , Literal ["event" ]]],
178+ as_type
179+ if as_type
180+ in get_observation_types_list (ObservationTypeSpanLike )
181+ or as_type == "event"
182+ else None ,
185183 ),
186184 )
187185
@@ -597,7 +595,9 @@ def update(
597595 if name :
598596 self ._otel_span .update_name (name )
599597
600- if self ._observation_type in get_args (ObservationTypeGenerationLike ):
598+ if self ._observation_type in get_observation_types_list (
599+ ObservationTypeGenerationLike
600+ ):
601601 attributes = create_generation_attributes (
602602 input = processed_input ,
603603 output = processed_output ,
@@ -617,7 +617,7 @@ def update(
617617 prompt = prompt ,
618618 )
619619 else :
620- # For span-like types: "span", "guardrail", "event"
620+ # For span-like types and events
621621 attributes = create_span_attributes (
622622 input = processed_input ,
623623 output = processed_output ,
@@ -626,9 +626,11 @@ def update(
626626 level = level ,
627627 status_message = status_message ,
628628 observation_type = cast (
629- Optional [Literal [ "span" , "guardrail" , " event" ]],
629+ Optional [Union [ ObservationTypeSpanLike , Literal [ " event"] ]],
630630 self ._observation_type
631- if self ._observation_type in ["span" , "guardrail" , "event" ]
631+ if self ._observation_type
632+ in get_observation_types_list (ObservationTypeSpanLike )
633+ or self ._observation_type == "event"
632634 else None ,
633635 ),
634636 )
@@ -683,12 +685,6 @@ def start_observation(
683685 version : Optional [str ] = None ,
684686 level : Optional [SpanLevel ] = None ,
685687 status_message : Optional [str ] = None ,
686- completion_start_time : Optional [datetime ] = None ,
687- model : Optional [str ] = None ,
688- model_parameters : Optional [Dict [str , MapValue ]] = None ,
689- usage_details : Optional [Dict [str , int ]] = None ,
690- cost_details : Optional [Dict [str , float ]] = None ,
691- prompt : Optional [PromptClient ] = None ,
692688 ) -> "LangfuseAgent" : ...
693689
694690 @overload
@@ -703,12 +699,6 @@ def start_observation(
703699 version : Optional [str ] = None ,
704700 level : Optional [SpanLevel ] = None ,
705701 status_message : Optional [str ] = None ,
706- completion_start_time : Optional [datetime ] = None ,
707- model : Optional [str ] = None ,
708- model_parameters : Optional [Dict [str , MapValue ]] = None ,
709- usage_details : Optional [Dict [str , int ]] = None ,
710- cost_details : Optional [Dict [str , float ]] = None ,
711- prompt : Optional [PromptClient ] = None ,
712702 ) -> "LangfuseTool" : ...
713703
714704 @overload
@@ -723,12 +713,6 @@ def start_observation(
723713 version : Optional [str ] = None ,
724714 level : Optional [SpanLevel ] = None ,
725715 status_message : Optional [str ] = None ,
726- completion_start_time : Optional [datetime ] = None ,
727- model : Optional [str ] = None ,
728- model_parameters : Optional [Dict [str , MapValue ]] = None ,
729- usage_details : Optional [Dict [str , int ]] = None ,
730- cost_details : Optional [Dict [str , float ]] = None ,
731- prompt : Optional [PromptClient ] = None ,
732716 ) -> "LangfuseChain" : ...
733717
734718 @overload
@@ -743,12 +727,6 @@ def start_observation(
743727 version : Optional [str ] = None ,
744728 level : Optional [SpanLevel ] = None ,
745729 status_message : Optional [str ] = None ,
746- completion_start_time : Optional [datetime ] = None ,
747- model : Optional [str ] = None ,
748- model_parameters : Optional [Dict [str , MapValue ]] = None ,
749- usage_details : Optional [Dict [str , int ]] = None ,
750- cost_details : Optional [Dict [str , float ]] = None ,
751- prompt : Optional [PromptClient ] = None ,
752730 ) -> "LangfuseRetriever" : ...
753731
754732 @overload
@@ -763,12 +741,6 @@ def start_observation(
763741 version : Optional [str ] = None ,
764742 level : Optional [SpanLevel ] = None ,
765743 status_message : Optional [str ] = None ,
766- completion_start_time : Optional [datetime ] = None ,
767- model : Optional [str ] = None ,
768- model_parameters : Optional [Dict [str , MapValue ]] = None ,
769- usage_details : Optional [Dict [str , int ]] = None ,
770- cost_details : Optional [Dict [str , float ]] = None ,
771- prompt : Optional [PromptClient ] = None ,
772744 ) -> "LangfuseEvaluator" : ...
773745
774746 @overload
@@ -912,7 +884,7 @@ def start_observation(
912884 "status_message" : status_message ,
913885 }
914886
915- if as_type in get_args (ObservationTypeGenerationLike ):
887+ if as_type in get_observation_types_list (ObservationTypeGenerationLike ):
916888 common_args .update (
917889 {
918890 "completion_start_time" : completion_start_time ,
@@ -960,15 +932,81 @@ def start_as_current_observation(
960932 prompt : Optional [PromptClient ] = None ,
961933 ) -> _AgnosticContextManager [
962934 Union [
963- "LangfuseAgent" ,
964- "LangfuseTool" ,
965- "LangfuseChain" ,
966- "LangfuseRetriever" ,
967- "LangfuseEvaluator" ,
935+ "LangfuseGeneration" ,
968936 "LangfuseEmbedding" ,
969937 ]
970938 ]: ...
971939
940+ @overload
941+ def start_as_current_observation (
942+ self ,
943+ * ,
944+ name : str ,
945+ as_type : Literal ["agent" ],
946+ input : Optional [Any ] = None ,
947+ output : Optional [Any ] = None ,
948+ metadata : Optional [Any ] = None ,
949+ version : Optional [str ] = None ,
950+ level : Optional [SpanLevel ] = None ,
951+ status_message : Optional [str ] = None ,
952+ ) -> _AgnosticContextManager ["LangfuseAgent" ]: ...
953+
954+ @overload
955+ def start_as_current_observation (
956+ self ,
957+ * ,
958+ name : str ,
959+ as_type : Literal ["tool" ],
960+ input : Optional [Any ] = None ,
961+ output : Optional [Any ] = None ,
962+ metadata : Optional [Any ] = None ,
963+ version : Optional [str ] = None ,
964+ level : Optional [SpanLevel ] = None ,
965+ status_message : Optional [str ] = None ,
966+ ) -> _AgnosticContextManager ["LangfuseTool" ]: ...
967+
968+ @overload
969+ def start_as_current_observation (
970+ self ,
971+ * ,
972+ name : str ,
973+ as_type : Literal ["chain" ],
974+ input : Optional [Any ] = None ,
975+ output : Optional [Any ] = None ,
976+ metadata : Optional [Any ] = None ,
977+ version : Optional [str ] = None ,
978+ level : Optional [SpanLevel ] = None ,
979+ status_message : Optional [str ] = None ,
980+ ) -> _AgnosticContextManager ["LangfuseChain" ]: ...
981+
982+ @overload
983+ def start_as_current_observation (
984+ self ,
985+ * ,
986+ name : str ,
987+ as_type : Literal ["retriever" ],
988+ input : Optional [Any ] = None ,
989+ output : Optional [Any ] = None ,
990+ metadata : Optional [Any ] = None ,
991+ version : Optional [str ] = None ,
992+ level : Optional [SpanLevel ] = None ,
993+ status_message : Optional [str ] = None ,
994+ ) -> _AgnosticContextManager ["LangfuseRetriever" ]: ...
995+
996+ @overload
997+ def start_as_current_observation (
998+ self ,
999+ * ,
1000+ name : str ,
1001+ as_type : Literal ["evaluator" ],
1002+ input : Optional [Any ] = None ,
1003+ output : Optional [Any ] = None ,
1004+ metadata : Optional [Any ] = None ,
1005+ version : Optional [str ] = None ,
1006+ level : Optional [SpanLevel ] = None ,
1007+ status_message : Optional [str ] = None ,
1008+ ) -> _AgnosticContextManager ["LangfuseEvaluator" ]: ...
1009+
9721010 @overload
9731011 def start_as_current_observation (
9741012 self ,
0 commit comments