Skip to content

Commit 191b665

Browse files
committed
fix(client): pass release variable to span clients
1 parent 9efcca0 commit 191b665

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
@@ -52,6 +52,7 @@
5252
LANGFUSE_DEBUG,
5353
LANGFUSE_HOST,
5454
LANGFUSE_PUBLIC_KEY,
55+
LANGFUSE_RELEASE,
5556
LANGFUSE_SAMPLE_RATE,
5657
LANGFUSE_SECRET_KEY,
5758
LANGFUSE_TIMEOUT,
@@ -77,6 +78,7 @@
7778
)
7879
from langfuse._client.utils import get_sha256_hash_hex, run_async_safely
7980
from langfuse._utils import _get_timestamp
81+
from langfuse._utils.environment import get_common_release_envs
8082
from langfuse._utils.parse_error import handle_fern_exception
8183
from langfuse._utils.prompt_cache import PromptCache
8284
from langfuse.api import (
@@ -252,6 +254,11 @@ def __init__(
252254
self._environment = environment or cast(
253255
str, os.environ.get(LANGFUSE_TRACING_ENVIRONMENT)
254256
)
257+
self._release = (
258+
release
259+
or os.environ.get(LANGFUSE_RELEASE, None)
260+
or get_common_release_envs()
261+
)
255262
self._project_id: Optional[str] = None
256263
sample_rate = sample_rate or float(os.environ.get(LANGFUSE_SAMPLE_RATE, 1.0))
257264
if not 0.0 <= sample_rate <= 1.0:
@@ -633,6 +640,7 @@ def _create_observation_from_otel_span(
633640
otel_span=otel_span,
634641
langfuse_client=self,
635642
environment=self._environment,
643+
release=self._release,
636644
input=input,
637645
output=output,
638646
metadata=metadata,
@@ -655,6 +663,7 @@ def _create_observation_from_otel_span(
655663
otel_span=otel_span,
656664
langfuse_client=self,
657665
environment=self._environment,
666+
release=self._release,
658667
input=input,
659668
output=output,
660669
metadata=metadata,
@@ -1168,6 +1177,7 @@ def _start_as_current_otel_span_with_processed_media(
11681177
"otel_span": otel_span,
11691178
"langfuse_client": self,
11701179
"environment": self._environment,
1180+
"release": self._release,
11711181
"input": input,
11721182
"output": output,
11731183
"metadata": metadata,
@@ -1346,6 +1356,7 @@ def update_current_span(
13461356
otel_span=current_otel_span,
13471357
langfuse_client=self,
13481358
environment=self._environment,
1359+
release=self._release,
13491360
)
13501361

13511362
if name:
@@ -1403,6 +1414,7 @@ def set_current_trace_io(
14031414
otel_span=current_otel_span,
14041415
langfuse_client=self,
14051416
environment=self._environment,
1417+
release=self._release,
14061418
)
14071419

14081420
span.set_trace_io(
@@ -1502,6 +1514,7 @@ def create_event(
15021514
otel_span=otel_span,
15031515
langfuse_client=self,
15041516
environment=self._environment,
1517+
release=self._release,
15051518
input=input,
15061519
output=output,
15071520
metadata=metadata,
@@ -1519,6 +1532,7 @@ def create_event(
15191532
otel_span=otel_span,
15201533
langfuse_client=self,
15211534
environment=self._environment,
1535+
release=self._release,
15221536
input=input,
15231537
output=output,
15241538
metadata=metadata,

langfuse/_client/span.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def __init__(
8585
output: Optional[Any] = None,
8686
metadata: Optional[Any] = None,
8787
environment: Optional[str] = None,
88+
release: Optional[str] = None,
8889
version: Optional[str] = None,
8990
level: Optional[SpanLevel] = None,
9091
status_message: Optional[str] = None,
@@ -105,6 +106,7 @@ def __init__(
105106
output: Output data from the span (any JSON-serializable object)
106107
metadata: Additional metadata to associate with the span
107108
environment: The tracing environment
109+
release: Release identifier for the application
108110
version: Version identifier for the code or component
109111
level: Importance level of the span (info, warning, error)
110112
status_message: Optional status message for the span
@@ -131,6 +133,12 @@ def __init__(
131133
LangfuseOtelSpanAttributes.ENVIRONMENT, self._environment
132134
)
133135

136+
self._release = release or self._langfuse_client._release
137+
if self._release is not None:
138+
self._otel_span.set_attribute(
139+
LangfuseOtelSpanAttributes.RELEASE, self._release
140+
)
141+
134142
# Handle media only if span is sampled
135143
if self._otel_span.is_recording():
136144
media_processed_input = self._process_media_and_apply_mask(
@@ -925,6 +933,7 @@ def start_observation(
925933
output=output,
926934
metadata=metadata,
927935
environment=self._environment,
936+
release=self._release,
928937
version=version,
929938
level=level,
930939
status_message=status_message,
@@ -945,6 +954,7 @@ def start_observation(
945954
"otel_span": new_otel_span,
946955
"langfuse_client": self._langfuse_client,
947956
"environment": self._environment,
957+
"release": self._release,
948958
"input": input,
949959
"output": output,
950960
"metadata": metadata,
@@ -1225,6 +1235,7 @@ def create_event(
12251235
output=output,
12261236
metadata=metadata,
12271237
environment=self._environment,
1238+
release=self._release,
12281239
version=version,
12291240
level=level,
12301241
status_message=status_message,
@@ -1251,6 +1262,7 @@ def __init__(
12511262
output: Optional[Any] = None,
12521263
metadata: Optional[Any] = None,
12531264
environment: Optional[str] = None,
1265+
release: Optional[str] = None,
12541266
version: Optional[str] = None,
12551267
level: Optional[SpanLevel] = None,
12561268
status_message: Optional[str] = None,
@@ -1264,6 +1276,7 @@ def __init__(
12641276
output: Output data from the span (any JSON-serializable object)
12651277
metadata: Additional metadata to associate with the span
12661278
environment: The tracing environment
1279+
release: Release identifier for the application
12671280
version: Version identifier for the code or component
12681281
level: Importance level of the span (info, warning, error)
12691282
status_message: Optional status message for the span
@@ -1276,6 +1289,7 @@ def __init__(
12761289
output=output,
12771290
metadata=metadata,
12781291
environment=environment,
1292+
release=release,
12791293
version=version,
12801294
level=level,
12811295
status_message=status_message,
@@ -1299,6 +1313,7 @@ def __init__(
12991313
output: Optional[Any] = None,
13001314
metadata: Optional[Any] = None,
13011315
environment: Optional[str] = None,
1316+
release: Optional[str] = None,
13021317
version: Optional[str] = None,
13031318
level: Optional[SpanLevel] = None,
13041319
status_message: Optional[str] = None,
@@ -1318,6 +1333,7 @@ def __init__(
13181333
output: Output from the generation (e.g., completions)
13191334
metadata: Additional metadata to associate with the generation
13201335
environment: The tracing environment
1336+
release: Release identifier for the application
13211337
version: Version identifier for the model or component
13221338
level: Importance level of the generation (info, warning, error)
13231339
status_message: Optional status message for the generation
@@ -1336,6 +1352,7 @@ def __init__(
13361352
output=output,
13371353
metadata=metadata,
13381354
environment=environment,
1355+
release=release,
13391356
version=version,
13401357
level=level,
13411358
status_message=status_message,
@@ -1360,6 +1377,7 @@ def __init__(
13601377
output: Optional[Any] = None,
13611378
metadata: Optional[Any] = None,
13621379
environment: Optional[str] = None,
1380+
release: Optional[str] = None,
13631381
version: Optional[str] = None,
13641382
level: Optional[SpanLevel] = None,
13651383
status_message: Optional[str] = None,
@@ -1373,6 +1391,7 @@ def __init__(
13731391
output: Output from the event
13741392
metadata: Additional metadata to associate with the generation
13751393
environment: The tracing environment
1394+
release: Release identifier for the application
13761395
version: Version identifier for the model or component
13771396
level: Importance level of the generation (info, warning, error)
13781397
status_message: Optional status message for the generation
@@ -1385,6 +1404,7 @@ def __init__(
13851404
output=output,
13861405
metadata=metadata,
13871406
environment=environment,
1407+
release=release,
13881408
version=version,
13891409
level=level,
13901410
status_message=status_message,

tests/test_resource_manager.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def should_export(span):
2727
retrieved_client = get_client()
2828

2929
assert retrieved_client._environment == settings["environment"]
30+
assert retrieved_client._release == settings["release"]
3031

3132
assert retrieved_client._resources is not None
3233
rm = retrieved_client._resources

0 commit comments

Comments
 (0)