Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions langfuse/_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
LANGFUSE_DEBUG,
LANGFUSE_HOST,
LANGFUSE_PUBLIC_KEY,
LANGFUSE_RELEASE,
LANGFUSE_SAMPLE_RATE,
LANGFUSE_SECRET_KEY,
LANGFUSE_TIMEOUT,
Expand All @@ -76,6 +77,7 @@
)
from langfuse._client.utils import get_sha256_hash_hex, run_async_safely
from langfuse._utils import _get_timestamp
from langfuse._utils.environment import get_common_release_envs
from langfuse._utils.parse_error import handle_fern_exception
from langfuse._utils.prompt_cache import PromptCache
from langfuse.api.resources.commons.errors.error import Error
Expand Down Expand Up @@ -240,6 +242,11 @@ def __init__(
self._environment = environment or cast(
str, os.environ.get(LANGFUSE_TRACING_ENVIRONMENT)
)
self._release = (
release
or os.environ.get(LANGFUSE_RELEASE, None)
or get_common_release_envs()
)
self._project_id: Optional[str] = None
sample_rate = sample_rate or float(os.environ.get(LANGFUSE_SAMPLE_RATE, 1.0))
if not 0.0 <= sample_rate <= 1.0:
Expand Down Expand Up @@ -723,6 +730,7 @@ def _create_observation_from_otel_span(
otel_span=otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
input=input,
output=output,
metadata=metadata,
Expand All @@ -745,6 +753,7 @@ def _create_observation_from_otel_span(
otel_span=otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
input=input,
output=output,
metadata=metadata,
Expand Down Expand Up @@ -1448,6 +1457,7 @@ def _start_as_current_otel_span_with_processed_media(
"otel_span": otel_span,
"langfuse_client": self,
"environment": self._environment,
"release": self._release,
"input": input,
"output": output,
"metadata": metadata,
Expand Down Expand Up @@ -1626,6 +1636,7 @@ def update_current_span(
otel_span=current_otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
)

if name:
Expand Down Expand Up @@ -1687,6 +1698,7 @@ def update_current_trace(
otel_span=current_otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
)

span.update_trace(
Expand Down Expand Up @@ -1760,6 +1772,7 @@ def create_event(
otel_span=otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
input=input,
output=output,
metadata=metadata,
Expand All @@ -1777,6 +1790,7 @@ def create_event(
otel_span=otel_span,
langfuse_client=self,
environment=self._environment,
release=self._release,
input=input,
output=output,
metadata=metadata,
Expand Down
20 changes: 20 additions & 0 deletions langfuse/_client/span.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ def __init__(
output: Optional[Any] = None,
metadata: Optional[Any] = None,
environment: Optional[str] = None,
release: Optional[str] = None,
version: Optional[str] = None,
level: Optional[SpanLevel] = None,
status_message: Optional[str] = None,
Expand All @@ -104,6 +105,7 @@ def __init__(
output: Output data from the span (any JSON-serializable object)
metadata: Additional metadata to associate with the span
environment: The tracing environment
release: Release identifier for the application
version: Version identifier for the code or component
level: Importance level of the span (info, warning, error)
status_message: Optional status message for the span
Expand All @@ -130,6 +132,12 @@ def __init__(
LangfuseOtelSpanAttributes.ENVIRONMENT, self._environment
)

self._release = release or self._langfuse_client._release
if self._release is not None:
self._otel_span.set_attribute(
LangfuseOtelSpanAttributes.RELEASE, self._release
)

# Handle media only if span is sampled
if self._otel_span.is_recording():
media_processed_input = self._process_media_and_apply_mask(
Expand Down Expand Up @@ -907,6 +915,7 @@ def start_observation(
output=output,
metadata=metadata,
environment=self._environment,
release=self._release,
version=version,
level=level,
status_message=status_message,
Expand All @@ -927,6 +936,7 @@ def start_observation(
"otel_span": new_otel_span,
"langfuse_client": self._langfuse_client,
"environment": self._environment,
"release": self._release,
"input": input,
"output": output,
"metadata": metadata,
Expand Down Expand Up @@ -1181,6 +1191,7 @@ def __init__(
output: Optional[Any] = None,
metadata: Optional[Any] = None,
environment: Optional[str] = None,
release: Optional[str] = None,
version: Optional[str] = None,
level: Optional[SpanLevel] = None,
status_message: Optional[str] = None,
Expand All @@ -1194,6 +1205,7 @@ def __init__(
output: Output data from the span (any JSON-serializable object)
metadata: Additional metadata to associate with the span
environment: The tracing environment
release: Release identifier for the application
version: Version identifier for the code or component
level: Importance level of the span (info, warning, error)
status_message: Optional status message for the span
Expand All @@ -1206,6 +1218,7 @@ def __init__(
output=output,
metadata=metadata,
environment=environment,
release=release,
version=version,
level=level,
status_message=status_message,
Expand Down Expand Up @@ -1576,6 +1589,7 @@ def create_event(
output=output,
metadata=metadata,
environment=self._environment,
release=self._release,
version=version,
level=level,
status_message=status_message,
Expand All @@ -1600,6 +1614,7 @@ def __init__(
output: Optional[Any] = None,
metadata: Optional[Any] = None,
environment: Optional[str] = None,
release: Optional[str] = None,
version: Optional[str] = None,
level: Optional[SpanLevel] = None,
status_message: Optional[str] = None,
Expand All @@ -1619,6 +1634,7 @@ def __init__(
output: Output from the generation (e.g., completions)
metadata: Additional metadata to associate with the generation
environment: The tracing environment
release: Release identifier for the application
version: Version identifier for the model or component
level: Importance level of the generation (info, warning, error)
status_message: Optional status message for the generation
Expand All @@ -1637,6 +1653,7 @@ def __init__(
output=output,
metadata=metadata,
environment=environment,
release=release,
version=version,
level=level,
status_message=status_message,
Expand All @@ -1661,6 +1678,7 @@ def __init__(
output: Optional[Any] = None,
metadata: Optional[Any] = None,
environment: Optional[str] = None,
release: Optional[str] = None,
version: Optional[str] = None,
level: Optional[SpanLevel] = None,
status_message: Optional[str] = None,
Expand All @@ -1674,6 +1692,7 @@ def __init__(
output: Output from the event
metadata: Additional metadata to associate with the generation
environment: The tracing environment
release: Release identifier for the application
version: Version identifier for the model or component
level: Importance level of the generation (info, warning, error)
status_message: Optional status message for the generation
Expand All @@ -1686,6 +1705,7 @@ def __init__(
output=output,
metadata=metadata,
environment=environment,
release=release,
version=version,
level=level,
status_message=status_message,
Expand Down
1 change: 1 addition & 0 deletions tests/test_resource_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def test_get_client_preserves_all_settings():
retrieved_client = get_client()

assert retrieved_client._environment == settings["environment"]
assert retrieved_client._release == settings["release"]

assert retrieved_client._resources is not None
rm = retrieved_client._resources
Expand Down
Loading