Skip to content

Commit aa7ab84

Browse files
committed
Clarify telemetry helper opt-in API
1 parent 4303bf8 commit aa7ab84

2 files changed

Lines changed: 40 additions & 22 deletions

File tree

src/mistralai/extra/observability/telemetry.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,15 @@ def _has_otel_exporter_endpoint_env() -> bool:
8181
)
8282

8383

84-
def configure_telemetry(
85-
client: "Mistral",
86-
telemetry: bool | None = None,
87-
) -> bool:
84+
def configure_telemetry(client: "Mistral") -> bool:
8885
"""Configure an isolated telemetry provider for a Mistral client.
8986
87+
Calling configure_telemetry(client) explicitly enables SDK telemetry.
88+
Environment and SDKConfiguration-based auto-resolution are handled by the
89+
request hook.
90+
9091
Returns True when telemetry is enabled and a provider is attached. Returns
91-
False when telemetry is disabled or a non-telemetry provider is already set.
92+
False when a non-telemetry provider is already set.
9293
"""
9394
hooks = getattr(client.sdk_configuration, "_hooks", None)
9495
if hooks is None:
@@ -97,7 +98,7 @@ def configure_telemetry(
9798
return configure_telemetry_for_hook(
9899
_get_tracing_hook(hooks),
99100
client.sdk_configuration,
100-
telemetry=telemetry,
101+
telemetry=True,
101102
finalizer_owner=client,
102103
)
103104

@@ -111,11 +112,10 @@ def configure_telemetry_for_hook(
111112
) -> bool:
112113
"""Configure telemetry for a tracing hook when the user has opted in."""
113114
# Fast path: already resolved and no explicit override requested.
114-
if telemetry is None:
115-
if hook._auto_telemetry_provider is not None:
116-
return True
117-
if hook._telemetry_auto_disabled:
118-
return False
115+
if hook._auto_telemetry_provider is not None and telemetry is not False:
116+
return True
117+
if telemetry is None and hook._telemetry_auto_disabled:
118+
return False
119119

120120
telemetry_setting = telemetry
121121
if telemetry_setting is None:

src/mistralai/extra/tests/test_telemetry.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def test_configure_telemetry_attaches_per_client_provider(self):
141141
return_value=provider,
142142
) as create_provider:
143143
client = _make_client(api_key="test-key")
144-
configured = configure_telemetry(client, telemetry=True)
144+
configured = configure_telemetry(client)
145145

146146
self.assertTrue(configured)
147147
create_provider.assert_called_once_with(
@@ -150,19 +150,24 @@ def test_configure_telemetry_attaches_per_client_provider(self):
150150
)
151151
self.assertIs(_get_tracing_hook(client).tracer_provider, provider)
152152

153-
def test_explicit_false_overrides_env_true(self):
153+
def test_internal_explicit_false_overrides_env_true(self):
154154
with patch.dict(os.environ, {MISTRAL_SDK_TELEMETRY_ENV: "true"}, clear=True):
155155
with patch(
156156
"mistralai.extra.observability.telemetry._create_telemetry_tracer_provider"
157157
) as create_provider:
158158
client = _make_client(api_key="test-key")
159-
configured = configure_telemetry(client, telemetry=False)
159+
hook = _get_tracing_hook(client)
160+
configured = configure_telemetry_for_hook(
161+
hook,
162+
client.sdk_configuration,
163+
telemetry=False,
164+
)
160165

161166
self.assertFalse(configured)
162167
create_provider.assert_not_called()
163168
self.assertIsNone(_get_tracing_hook(client).tracer_provider)
164169

165-
def test_explicit_false_disables_auto_telemetry_provider(self):
170+
def test_internal_explicit_false_disables_auto_telemetry_provider(self):
166171
provider = FakeProvider()
167172

168173
with patch.dict(os.environ, {}, clear=True):
@@ -171,8 +176,13 @@ def test_explicit_false_disables_auto_telemetry_provider(self):
171176
return_value=provider,
172177
):
173178
client = _make_client(api_key="test-key")
174-
configure_telemetry(client, telemetry=True)
175-
configured = configure_telemetry(client, telemetry=False)
179+
configure_telemetry(client)
180+
hook = _get_tracing_hook(client)
181+
configured = configure_telemetry_for_hook(
182+
hook,
183+
client.sdk_configuration,
184+
telemetry=False,
185+
)
176186

177187
self.assertFalse(configured)
178188
self.assertTrue(provider.shutdown_called)
@@ -191,7 +201,11 @@ def test_env_true_uses_mistral_api_key_fallback(self):
191201
return_value=provider,
192202
) as create_provider:
193203
client = _make_client(api_key=None)
194-
configured = configure_telemetry(client)
204+
hook = _get_tracing_hook(client)
205+
configured = configure_telemetry_for_hook(
206+
hook,
207+
client.sdk_configuration,
208+
)
195209

196210
self.assertTrue(configured)
197211
create_provider.assert_called_once_with(
@@ -215,7 +229,7 @@ def test_otel_endpoint_env_configures_without_mistral_api_key(self):
215229
return_value=provider,
216230
) as create_provider:
217231
client = _make_client(api_key=None)
218-
configured = configure_telemetry(client, telemetry=True)
232+
configured = configure_telemetry(client)
219233

220234
self.assertTrue(configured)
221235
resolve_api_key.assert_not_called()
@@ -241,7 +255,11 @@ def test_env_true_prefers_otel_endpoint_env_over_mistral_endpoint(self):
241255
return_value=provider,
242256
) as create_provider:
243257
client = _make_client(api_key=None)
244-
configured = configure_telemetry(client)
258+
hook = _get_tracing_hook(client)
259+
configured = configure_telemetry_for_hook(
260+
hook,
261+
client.sdk_configuration,
262+
)
245263

246264
self.assertTrue(configured)
247265
resolve_api_key.assert_not_called()
@@ -263,7 +281,7 @@ def test_missing_optional_dependencies_raise_install_hint(self):
263281
TelemetryConfigurationError,
264282
r"mistralai\[telemetry\]",
265283
):
266-
configure_telemetry(client, telemetry=True)
284+
configure_telemetry(client)
267285

268286
def test_manual_provider_replaces_auto_telemetry_provider(self):
269287
provider = FakeProvider()
@@ -275,7 +293,7 @@ def test_manual_provider_replaces_auto_telemetry_provider(self):
275293
return_value=provider,
276294
):
277295
client = _make_client(api_key="test-key")
278-
configure_telemetry(client, telemetry=True)
296+
configure_telemetry(client)
279297

280298
set_tracer_provider(client, manual_provider)
281299

0 commit comments

Comments
 (0)