|
7 | 7 | import types
|
8 | 8 | from datetime import datetime, timezone
|
9 | 9 | from typing import TYPE_CHECKING, Any
|
| 10 | +from uuid import UUID |
10 | 11 |
|
11 | 12 | from langchain_core.documents import Document
|
12 | 13 | from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage
|
13 | 14 | from loguru import logger
|
14 | 15 | from openinference.semconv.trace import OpenInferenceMimeTypeValues, SpanAttributes
|
| 16 | +from opentelemetry.propagators.textmap import CarrierT |
15 | 17 | from opentelemetry.semconv.trace import SpanAttributes as OTELSpanAttributes
|
16 | 18 | from opentelemetry.trace import Span, Status, StatusCode, use_span
|
17 | 19 | from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
@@ -64,35 +66,47 @@ def __init__(
|
64 | 66 | self.trace_type = trace_type
|
65 | 67 | self.project_name = project_name
|
66 | 68 | self.trace_id = trace_id
|
67 |
| - self.flow_name = trace_name.split(" - ")[0] |
68 |
| - self.flow_id = trace_name.split(" - ")[-1] |
| 69 | + self.flow_name, self.flow_id = trace_name.split(" - ")[0], trace_name.split(" - ")[-1] |
69 | 70 | self.chat_input_value = ""
|
70 | 71 | self.chat_output_value = ""
|
71 | 72 | self.session_id = session_id
|
72 | 73 |
|
73 |
| - for key in ArizePhoenixTracer.get_required_variable_names(): |
74 |
| - set_env_from_globals(key, global_vars) |
| 74 | + required_vars = ArizePhoenixTracer.get_required_variable_names() |
| 75 | + if global_vars: |
| 76 | + for key in required_vars: |
| 77 | + set_env_from_globals(key, global_vars) |
| 78 | + else: |
| 79 | + for key in required_vars: |
| 80 | + set_env_from_globals(key, None) |
75 | 81 |
|
76 | 82 | try:
|
77 | 83 | self._ready = self.setup_arize_phoenix()
|
78 | 84 | if not self._ready:
|
79 | 85 | return
|
80 | 86 |
|
81 |
| - self.tracer = self.tracer_provider.get_tracer(__name__) |
| 87 | + tracer_provider = self.tracer_provider |
| 88 | + self.tracer = tracer_provider.get_tracer(__name__) |
82 | 89 | self.propagator = TraceContextTextMapPropagator()
|
83 | 90 | self.carrier: dict[Any, CarrierT] = {}
|
84 | 91 |
|
85 | 92 | self.root_span = self.tracer.start_span(
|
86 | 93 | name=self.flow_id,
|
87 | 94 | start_time=self._get_current_timestamp(),
|
88 | 95 | )
|
89 |
| - self.root_span.set_attribute(SpanAttributes.SESSION_ID, self.session_id or self.flow_id) |
90 |
| - self.root_span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, self.trace_type) |
91 |
| - self.root_span.set_attribute("langflow.project.name", self.project_name) |
92 |
| - self.root_span.set_attribute("langflow.flow.name", self.flow_name) |
93 |
| - self.root_span.set_attribute("langflow.flow.id", self.flow_id) |
| 96 | + root_span = self.root_span # create local reference for better performance |
| 97 | + |
| 98 | + attributes = { |
| 99 | + SpanAttributes.SESSION_ID: self.session_id or self.flow_id, |
| 100 | + SpanAttributes.OPENINFERENCE_SPAN_KIND: self.trace_type, |
| 101 | + "langflow.project.name": self.project_name, |
| 102 | + "langflow.flow.name": self.flow_name, |
| 103 | + "langflow.flow.id": self.flow_id, |
| 104 | + } |
| 105 | + |
| 106 | + for key, value in attributes.items(): |
| 107 | + root_span.set_attribute(key, value) |
94 | 108 |
|
95 |
| - with use_span(self.root_span, end_on_exit=False): |
| 109 | + with use_span(root_span, end_on_exit=False): |
96 | 110 | self.propagator.inject(carrier=self.carrier)
|
97 | 111 |
|
98 | 112 | self.child_spans: dict[str, Span] = {}
|
|
0 commit comments