Skip to content

Commit 784334a

Browse files
authored
Add opt-in telemetry auto-configuration (#553)
* Add opt-in telemetry auto-configuration * Clarify telemetry helper opt-in API * Consolidate telemetry provider configuration * Isolate dedicated telemetry endpoint config
1 parent 90e2c78 commit 784334a

6 files changed

Lines changed: 1029 additions & 19 deletions

File tree

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ agents = [
2929
realtime = [
3030
"websockets >=13.0",
3131
]
32+
telemetry = [
33+
"opentelemetry-sdk (>=1.33.1,<2.0.0)",
34+
"opentelemetry-exporter-otlp-proto-http (>=1.33.1,<2.0.0)",
35+
]
3236

3337
workflow_payload_offloading_azure = [
3438
"azure-storage-blob[aio]>=12.28.0,<13.0.0",
@@ -65,6 +69,7 @@ dev = [
6569
"mypy==1.15.0",
6670
"msgpack>=1.1.0,<2.0.0",
6771
"opentelemetry-sdk (>=1.33.1,<2.0.0)",
72+
"opentelemetry-exporter-otlp-proto-http (>=1.33.1,<2.0.0)",
6873
"pylint==3.2.3",
6974
"pytest>=8.2.2,<9",
7075
"pytest-asyncio>=0.23.7,<0.24",

src/mistralai/client/_hooks/tracing.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
2-
from typing import Optional, Tuple, Union
2+
import weakref
3+
from typing import Any, Optional, Tuple, Union
34

45
import httpx
56
from opentelemetry import trace
@@ -11,6 +12,7 @@
1112
get_traced_request_and_span,
1213
get_traced_response,
1314
)
15+
from mistralai.extra.observability.telemetry import configure_telemetry_for_hook
1416
from .types import (
1517
AfterErrorContext,
1618
AfterErrorHook,
@@ -29,11 +31,19 @@
2931
class TracingHook(BeforeRequestHook, AfterSuccessHook, AfterErrorHook):
3032
def __init__(self) -> None:
3133
self.tracer_provider: Optional[trace.TracerProvider] = None
34+
self._auto_telemetry_provider: Optional[Any] = None
35+
self._telemetry_finalizer: Optional[weakref.finalize] = None
36+
self._telemetry_auto_disabled: bool = False
3237
self.tracing_enabled, self.tracer = get_or_create_otel_tracer()
3338

3439
def before_request(
3540
self, hook_ctx: BeforeRequestContext, request: httpx.Request
3641
) -> Union[httpx.Request, Exception]:
42+
configure_telemetry_for_hook(
43+
self,
44+
hook_ctx.config,
45+
respect_global_provider=True,
46+
)
3747
# Refresh tracer/provider per request so tracing can be enabled if the
3848
# application configures OpenTelemetry after the client is instantiated.
3949
self.tracing_enabled, self.tracer = get_or_create_otel_tracer(

src/mistralai/extra/observability/__init__.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
from opentelemetry import trace as otel_trace
55

66
from .otel import MISTRAL_SDK_OTEL_TRACER_NAME
7+
from .telemetry import (
8+
TelemetryConfigurationError,
9+
configure_telemetry,
10+
)
711

812
if TYPE_CHECKING:
913
from mistralai.client.sdk import Mistral
@@ -25,6 +29,9 @@ def set_tracer_provider(
2529
When set, all SDK spans produced by *client* will be emitted through
2630
*provider* instead of the global TracerProvider.
2731
32+
This helper is kept for compatibility. New code can call
33+
configure_telemetry(client, provider=provider) directly.
34+
2835
Usage::
2936
3037
from opentelemetry.sdk.trace import TracerProvider
@@ -34,22 +41,12 @@ def set_tracer_provider(
3441
client = Mistral(api_key="...")
3542
set_tracer_provider(client, TracerProvider())
3643
"""
37-
from mistralai.client._hooks.tracing import TracingHook
38-
39-
hooks = getattr(client.sdk_configuration, "_hooks", None)
40-
if hooks is None:
41-
raise ValueError(
42-
"Cannot set tracer_provider: SDK hooks not initialised on this client."
43-
)
44-
45-
for hook in hooks.before_request_hooks:
46-
if isinstance(hook, TracingHook):
47-
hook.tracer_provider = provider
48-
return
49-
50-
raise ValueError(
51-
"Cannot set tracer_provider: TracingHook not found in the client's hooks."
52-
)
44+
configure_telemetry(client, provider=provider)
5345

5446

55-
__all__ = ["trace", "set_tracer_provider"]
47+
__all__ = [
48+
"TelemetryConfigurationError",
49+
"configure_telemetry",
50+
"set_tracer_provider",
51+
"trace",
52+
]

0 commit comments

Comments
 (0)