3636 LANGFUSE_TRACING_ENABLED ,
3737 LANGFUSE_TRACING_ENVIRONMENT ,
3838)
39+ from langfuse ._client .constants import ObservationTypeLiteral , ObservationTypeLiteralNoEvent
3940from langfuse ._client .resource_manager import LangfuseResourceManager
4041from langfuse ._client .span import (
4142 LangfuseEvent ,
4546 LangfuseTool ,
4647 LangfuseChain ,
4748 LangfuseRetriever ,
49+ LangfuseEvaluator ,
4850 LangfuseEmbedding ,
51+ LangfuseGuardrail ,
4952)
5053from langfuse ._utils import _get_timestamp
5154from langfuse ._utils .parse_error import handle_fern_exception
@@ -355,18 +358,6 @@ def start_as_current_span(
355358 level : Optional [SpanLevel ] = None ,
356359 status_message : Optional [str ] = None ,
357360 end_on_exit : Optional [bool ] = None ,
358- as_type : Optional [
359- Literal [
360- "generation" ,
361- "span" ,
362- "event" ,
363- "agent" ,
364- "tool" ,
365- "chain" ,
366- "retriever" ,
367- "embedding" ,
368- ]
369- ] = None ,
370361 ) -> _AgnosticContextManager [LangfuseSpan ]:
371362 """Create a new span and set it as the current span in a context manager.
372363
@@ -685,33 +676,33 @@ def start_as_current_generation(
685676
686677 def _get_span_class (
687678 self ,
688- as_type : Literal [
689- "span" ,
690- "generation" ,
691- "event" ,
692- "agent" ,
693- "tool" ,
694- "chain" ,
695- "retriever" ,
696- "embedding" ,
697- ],
679+ as_type : ObservationTypeLiteral ,
698680 ) -> type :
699681 """Get the appropriate span class based on as_type."""
700- if as_type == "agent" :
682+ normalized_type = as_type .upper ()
683+
684+ if normalized_type == "AGENT" :
701685 return LangfuseAgent
702- elif as_type == "tool " :
686+ elif normalized_type == "TOOL " :
703687 return LangfuseTool
704- elif as_type == "chain " :
688+ elif normalized_type == "CHAIN " :
705689 return LangfuseChain
706- elif as_type == "retriever " :
690+ elif normalized_type == "RETRIEVER " :
707691 return LangfuseRetriever
708- elif as_type == "embedding" :
692+ elif normalized_type == "EVALUATOR" :
693+ return LangfuseEvaluator
694+ elif normalized_type == "EMBEDDING" :
709695 return LangfuseEmbedding
710- elif as_type == "generation" :
696+ elif normalized_type == "GUARDRAIL" :
697+ return LangfuseGuardrail
698+ elif normalized_type == "GENERATION" :
711699 return LangfuseGeneration
712- elif as_type == "event " :
700+ elif normalized_type == "EVENT " :
713701 return LangfuseEvent
714- elif as_type == "span" :
702+ elif normalized_type == "SPAN" :
703+ return LangfuseSpan
704+ else :
705+ # Default to LangfuseSpan for unrecognized types
715706 return LangfuseSpan
716707
717708 @_agnosticcontextmanager
@@ -721,7 +712,7 @@ def _create_span_with_parent_context(
721712 name : str ,
722713 parent : Optional [otel_trace_api .Span ] = None ,
723714 remote_parent_span : Optional [otel_trace_api .Span ] = None ,
724- as_type : Literal [ "generation" , "span" , "agent" , "tool" , "chain" , "retriever" ] ,
715+ as_type : ObservationTypeLiteralNoEvent ,
725716 end_on_exit : Optional [bool ] = None ,
726717 input : Optional [Any ] = None ,
727718 output : Optional [Any ] = None ,
@@ -768,18 +759,7 @@ def _start_as_current_otel_span_with_processed_media(
768759 self ,
769760 * ,
770761 name : str ,
771- as_type : Optional [
772- Literal [
773- "generation" ,
774- "span" ,
775- "event" ,
776- "agent" ,
777- "tool" ,
778- "chain" ,
779- "retriever" ,
780- "embedding" ,
781- ]
782- ] = None ,
762+ as_type : Optional [ObservationTypeLiteralNoEvent ] = None ,
783763 end_on_exit : Optional [bool ] = None ,
784764 input : Optional [Any ] = None ,
785765 output : Optional [Any ] = None ,
@@ -798,7 +778,7 @@ def _start_as_current_otel_span_with_processed_media(
798778 name = name ,
799779 end_on_exit = end_on_exit if end_on_exit is not None else True ,
800780 ) as otel_span :
801- span_class = self ._get_span_class (as_type or "generation" )
781+ span_class = self ._get_span_class (as_type or "generation" ) # default was "generation"
802782 common_args = {
803783 "otel_span" : otel_span ,
804784 "langfuse_client" : self ,
@@ -822,13 +802,16 @@ def _start_as_current_otel_span_with_processed_media(
822802 "prompt" : prompt ,
823803 }
824804 )
805+ # TODO: for some, create generation-like classes with those props.
825806 elif span_class in [
826807 LangfuseSpan ,
827808 LangfuseAgent ,
828809 LangfuseTool ,
829810 LangfuseChain ,
830811 LangfuseRetriever ,
812+ LangfuseEvaluator ,
831813 LangfuseEmbedding ,
814+ LangfuseGuardrail ,
832815 ]:
833816 # set their type internally in the class
834817 pass
0 commit comments