Skip to content

Commit f1b31fd

Browse files
committed
fix(client): pass release variable to span clients
1 parent 54fff05 commit f1b31fd

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

langfuse/_client/client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
LANGFUSE_DEBUG,
5252
LANGFUSE_HOST,
5353
LANGFUSE_PUBLIC_KEY,
54+
LANGFUSE_RELEASE,
5455
LANGFUSE_SAMPLE_RATE,
5556
LANGFUSE_SECRET_KEY,
5657
LANGFUSE_TIMEOUT,
@@ -76,6 +77,7 @@
7677
)
7778
from langfuse._client.utils import get_sha256_hash_hex, run_async_safely
7879
from langfuse._utils import _get_timestamp
80+
from langfuse._utils.environment import get_common_release_envs
7981
from langfuse._utils.parse_error import handle_fern_exception
8082
from langfuse._utils.prompt_cache import PromptCache
8183
from langfuse.api.resources.commons.errors.error import Error
@@ -240,6 +242,11 @@ def __init__(
240242
self._environment = environment or cast(
241243
str, os.environ.get(LANGFUSE_TRACING_ENVIRONMENT)
242244
)
245+
self._release = (
246+
release
247+
or os.environ.get(LANGFUSE_RELEASE, None)
248+
or get_common_release_envs()
249+
)
243250
self._project_id: Optional[str] = None
244251
sample_rate = sample_rate or float(os.environ.get(LANGFUSE_SAMPLE_RATE, 1.0))
245252
if not 0.0 <= sample_rate <= 1.0:
@@ -723,6 +730,7 @@ def _create_observation_from_otel_span(
723730
otel_span=otel_span,
724731
langfuse_client=self,
725732
environment=self._environment,
733+
release=self._release,
726734
input=input,
727735
output=output,
728736
metadata=metadata,
@@ -745,6 +753,7 @@ def _create_observation_from_otel_span(
745753
otel_span=otel_span,
746754
langfuse_client=self,
747755
environment=self._environment,
756+
release=self._release,
748757
input=input,
749758
output=output,
750759
metadata=metadata,
@@ -1448,6 +1457,7 @@ def _start_as_current_otel_span_with_processed_media(
14481457
"otel_span": otel_span,
14491458
"langfuse_client": self,
14501459
"environment": self._environment,
1460+
"release": self._release,
14511461
"input": input,
14521462
"output": output,
14531463
"metadata": metadata,
@@ -1626,6 +1636,7 @@ def update_current_span(
16261636
otel_span=current_otel_span,
16271637
langfuse_client=self,
16281638
environment=self._environment,
1639+
release=self._release,
16291640
)
16301641

16311642
if name:
@@ -1687,6 +1698,7 @@ def update_current_trace(
16871698
otel_span=current_otel_span,
16881699
langfuse_client=self,
16891700
environment=self._environment,
1701+
release=self._release,
16901702
)
16911703

16921704
span.update_trace(
@@ -1760,6 +1772,7 @@ def create_event(
17601772
otel_span=otel_span,
17611773
langfuse_client=self,
17621774
environment=self._environment,
1775+
release=self._release,
17631776
input=input,
17641777
output=output,
17651778
metadata=metadata,
@@ -1777,6 +1790,7 @@ def create_event(
17771790
otel_span=otel_span,
17781791
langfuse_client=self,
17791792
environment=self._environment,
1793+
release=self._release,
17801794
input=input,
17811795
output=output,
17821796
metadata=metadata,

langfuse/_client/span.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def __init__(
8484
output: Optional[Any] = None,
8585
metadata: Optional[Any] = None,
8686
environment: Optional[str] = None,
87+
release: Optional[str] = None,
8788
version: Optional[str] = None,
8889
level: Optional[SpanLevel] = None,
8990
status_message: Optional[str] = None,
@@ -104,6 +105,7 @@ def __init__(
104105
output: Output data from the span (any JSON-serializable object)
105106
metadata: Additional metadata to associate with the span
106107
environment: The tracing environment
108+
release: Release identifier for the application
107109
version: Version identifier for the code or component
108110
level: Importance level of the span (info, warning, error)
109111
status_message: Optional status message for the span
@@ -130,6 +132,12 @@ def __init__(
130132
LangfuseOtelSpanAttributes.ENVIRONMENT, self._environment
131133
)
132134

135+
self._release = release or self._langfuse_client._release
136+
if self._release is not None:
137+
self._otel_span.set_attribute(
138+
LangfuseOtelSpanAttributes.RELEASE, self._release
139+
)
140+
133141
# Handle media only if span is sampled
134142
if self._otel_span.is_recording():
135143
media_processed_input = self._process_media_and_apply_mask(
@@ -907,6 +915,7 @@ def start_observation(
907915
output=output,
908916
metadata=metadata,
909917
environment=self._environment,
918+
release=self._release,
910919
version=version,
911920
level=level,
912921
status_message=status_message,
@@ -927,6 +936,7 @@ def start_observation(
927936
"otel_span": new_otel_span,
928937
"langfuse_client": self._langfuse_client,
929938
"environment": self._environment,
939+
"release": self._release,
930940
"input": input,
931941
"output": output,
932942
"metadata": metadata,
@@ -1181,6 +1191,7 @@ def __init__(
11811191
output: Optional[Any] = None,
11821192
metadata: Optional[Any] = None,
11831193
environment: Optional[str] = None,
1194+
release: Optional[str] = None,
11841195
version: Optional[str] = None,
11851196
level: Optional[SpanLevel] = None,
11861197
status_message: Optional[str] = None,
@@ -1194,6 +1205,7 @@ def __init__(
11941205
output: Output data from the span (any JSON-serializable object)
11951206
metadata: Additional metadata to associate with the span
11961207
environment: The tracing environment
1208+
release: Release identifier for the application
11971209
version: Version identifier for the code or component
11981210
level: Importance level of the span (info, warning, error)
11991211
status_message: Optional status message for the span
@@ -1206,6 +1218,7 @@ def __init__(
12061218
output=output,
12071219
metadata=metadata,
12081220
environment=environment,
1221+
release=release,
12091222
version=version,
12101223
level=level,
12111224
status_message=status_message,
@@ -1576,6 +1589,7 @@ def create_event(
15761589
output=output,
15771590
metadata=metadata,
15781591
environment=self._environment,
1592+
release=self._release,
15791593
version=version,
15801594
level=level,
15811595
status_message=status_message,
@@ -1600,6 +1614,7 @@ def __init__(
16001614
output: Optional[Any] = None,
16011615
metadata: Optional[Any] = None,
16021616
environment: Optional[str] = None,
1617+
release: Optional[str] = None,
16031618
version: Optional[str] = None,
16041619
level: Optional[SpanLevel] = None,
16051620
status_message: Optional[str] = None,
@@ -1619,6 +1634,7 @@ def __init__(
16191634
output: Output from the generation (e.g., completions)
16201635
metadata: Additional metadata to associate with the generation
16211636
environment: The tracing environment
1637+
release: Release identifier for the application
16221638
version: Version identifier for the model or component
16231639
level: Importance level of the generation (info, warning, error)
16241640
status_message: Optional status message for the generation
@@ -1637,6 +1653,7 @@ def __init__(
16371653
output=output,
16381654
metadata=metadata,
16391655
environment=environment,
1656+
release=release,
16401657
version=version,
16411658
level=level,
16421659
status_message=status_message,
@@ -1661,6 +1678,7 @@ def __init__(
16611678
output: Optional[Any] = None,
16621679
metadata: Optional[Any] = None,
16631680
environment: Optional[str] = None,
1681+
release: Optional[str] = None,
16641682
version: Optional[str] = None,
16651683
level: Optional[SpanLevel] = None,
16661684
status_message: Optional[str] = None,
@@ -1674,6 +1692,7 @@ def __init__(
16741692
output: Output from the event
16751693
metadata: Additional metadata to associate with the generation
16761694
environment: The tracing environment
1695+
release: Release identifier for the application
16771696
version: Version identifier for the model or component
16781697
level: Importance level of the generation (info, warning, error)
16791698
status_message: Optional status message for the generation
@@ -1686,6 +1705,7 @@ def __init__(
16861705
output=output,
16871706
metadata=metadata,
16881707
environment=environment,
1708+
release=release,
16891709
version=version,
16901710
level=level,
16911711
status_message=status_message,

tests/test_resource_manager.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def test_get_client_preserves_all_settings():
2323
retrieved_client = get_client()
2424

2525
assert retrieved_client._environment == settings["environment"]
26+
assert retrieved_client._release == settings["release"]
2627

2728
assert retrieved_client._resources is not None
2829
rm = retrieved_client._resources

0 commit comments

Comments
 (0)