4040from langtrace_python_sdk .constants .exporter .langtrace_exporter import (
4141 LANGTRACE_REMOTE_URL ,
4242)
43- from langtrace_python_sdk .extensions .langtrace_exporter import LangTraceExporter
4443from langtrace_python_sdk .instrumentation import (
4544 AnthropicInstrumentation ,
4645 ChromaInstrumentation ,
6564 VertexAIInstrumentation ,
6665 WeaviateInstrumentation ,
6766)
67+ from opentelemetry .util .re import parse_env_headers
68+
6869from langtrace_python_sdk .types import DisableInstrumentations , InstrumentationMethods
6970from langtrace_python_sdk .utils import (
7071 check_if_sdk_is_outdated ,
8081
8182class LangtraceConfig :
8283 def __init__ (self , ** kwargs ):
83- self .api_key = kwargs .get ("api_key" )
84+ self .api_key = kwargs .get ("api_key" ) or os . environ . get ( "LANGTRACE_API_KEY" )
8485 self .batch = kwargs .get ("batch" , True )
8586 self .write_spans_to_console = kwargs .get ("write_spans_to_console" , False )
8687 self .custom_remote_exporter = kwargs .get ("custom_remote_exporter" )
@@ -89,7 +90,11 @@ def __init__(self, **kwargs):
8990 self .disable_tracing_for_functions = kwargs .get ("disable_tracing_for_functions" )
9091 self .service_name = kwargs .get ("service_name" )
9192 self .disable_logging = kwargs .get ("disable_logging" , False )
92- self .headers = kwargs .get ("headers" , {})
93+ self .headers = (
94+ kwargs .get ("headers" )
95+ or os .environ .get ("LANGTRACE_HEADERS" )
96+ or os .environ .get ("OTEL_EXPORTER_OTLP_HEADERS" )
97+ )
9398
9499
95100def get_host (config : LangtraceConfig ) -> str :
@@ -102,30 +107,51 @@ def get_host(config: LangtraceConfig) -> str:
102107 )
103108
104109
110+ def get_service_name (config : LangtraceConfig ):
111+ service_name = os .environ .get ("OTEL_SERVICE_NAME" )
112+ if service_name :
113+ return service_name
114+
115+ resource_attributes = os .environ .get ("OTEL_RESOURCE_ATTRIBUTES" )
116+ if resource_attributes :
117+ attrs = dict (attr .split ("=" ) for attr in resource_attributes .split ("," ))
118+ if "service.name" in attrs :
119+ return attrs ["service.name" ]
120+
121+ if config .service_name :
122+ return config .service_name
123+
124+ return sys .argv [0 ]
125+
126+
105127def setup_tracer_provider (config : LangtraceConfig , host : str ) -> TracerProvider :
106128 sampler = LangtraceSampler (disabled_methods = config .disable_tracing_for_functions )
107- resource = Resource .create (
108- attributes = {
109- SERVICE_NAME : os .environ .get ("OTEL_SERVICE_NAME" )
110- or config .service_name
111- or sys .argv [0 ]
112- }
113- )
129+ resource = Resource .create (attributes = {SERVICE_NAME : get_service_name (config )})
114130 return TracerProvider (resource = resource , sampler = sampler )
115131
116132
133+ def get_headers (config : LangtraceConfig ):
134+ if not config .headers :
135+ return {
136+ "x-api-key" : config .api_key ,
137+ }
138+
139+ if isinstance (config .headers , str ):
140+ return parse_env_headers (config .headers , liberal = True )
141+
142+ return config .headers
143+
144+
117145def get_exporter (config : LangtraceConfig , host : str ):
118146 if config .custom_remote_exporter :
119147 return config .custom_remote_exporter
120148
121- headers = {
122- "x-api-key" : config .api_key or os .environ .get ("LANGTRACE_API_KEY" ),
123- }
149+ headers = get_headers (config )
124150 if "http" in host .lower () or "https" in host .lower ():
125151 return HTTPExporter (endpoint = host , headers = headers )
126152 else :
127153 return GRPCExporter (endpoint = host , headers = headers )
128-
154+
129155
130156def add_span_processor (provider : TracerProvider , config : LangtraceConfig , exporter ):
131157 if config .write_spans_to_console :
@@ -212,6 +238,15 @@ def init(
212238 + Fore .RESET
213239 )
214240
241+ if host == LANGTRACE_REMOTE_URL and not config .api_key :
242+ print (Fore .RED )
243+ print (
244+ "Missing Langtrace API key, proceed to https://langtrace.ai to create one"
245+ )
246+ print ("Set the API key as an environment variable LANGTRACE_API_KEY" )
247+ print (Fore .RESET )
248+ return
249+
215250 provider = setup_tracer_provider (config , host )
216251 exporter = get_exporter (config , host )
217252
0 commit comments