telemetry-dev 0.2.6__tar.gz → 0.2.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: telemetry-dev
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: telemetry.dev SDK for Python — OpenTelemetry-native GenAI tracing, logs, and metrics
5
5
  Keywords: telemetry,opentelemetry,llm,genai,tracing,observability
6
6
  Author: telemetry.dev
@@ -14,9 +14,9 @@ Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Typing :: Typed
17
- Requires-Dist: opentelemetry-api>=1.35.0,<2
18
- Requires-Dist: opentelemetry-sdk>=1.35.0,<2
19
- Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.35.0,<2
17
+ Requires-Dist: opentelemetry-api>=1.39.0,<2
18
+ Requires-Dist: opentelemetry-sdk>=1.39.0,<2
19
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.0,<2
20
20
  Requires-Python: >=3.10
21
21
  Project-URL: Homepage, https://telemetry.dev
22
22
  Project-URL: Repository, https://github.com/telemetry-dev/telemetry
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "telemetry-dev"
3
- version = "0.2.6"
3
+ version = "0.2.7"
4
4
  description = "telemetry.dev SDK for Python — OpenTelemetry-native GenAI tracing, logs, and metrics"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -25,9 +25,9 @@ classifiers = [
25
25
  "Typing :: Typed",
26
26
  ]
27
27
  dependencies = [
28
- "opentelemetry-api>=1.35.0,<2",
29
- "opentelemetry-sdk>=1.35.0,<2",
30
- "opentelemetry-exporter-otlp-proto-http>=1.35.0,<2",
28
+ "opentelemetry-api>=1.39.0,<2",
29
+ "opentelemetry-sdk>=1.39.0,<2",
30
+ "opentelemetry-exporter-otlp-proto-http>=1.39.0,<2",
31
31
  ]
32
32
 
33
33
  [[project.authors]]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "telemetry-dev"
3
- version = "0.2.6"
3
+ version = "0.2.7"
4
4
  description = "telemetry.dev SDK for Python — OpenTelemetry-native GenAI tracing, logs, and metrics"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -19,9 +19,9 @@ classifiers = [
19
19
  "Typing :: Typed",
20
20
  ]
21
21
  dependencies = [
22
- "opentelemetry-api>=1.35.0,<2",
23
- "opentelemetry-sdk>=1.35.0,<2",
24
- "opentelemetry-exporter-otlp-proto-http>=1.35.0,<2",
22
+ "opentelemetry-api>=1.39.0,<2",
23
+ "opentelemetry-sdk>=1.39.0,<2",
24
+ "opentelemetry-exporter-otlp-proto-http>=1.39.0,<2",
25
25
  ]
26
26
 
27
27
  [project.urls]
@@ -41,7 +41,12 @@ from ._config import (
41
41
  resolve_config,
42
42
  )
43
43
  from ._context import SessionSampler
44
- from ._metrics import GuardedOTLPMetricExporter, MetricsRecorder, OutputChunkAggregation
44
+ from ._metrics import (
45
+ GuardedOTLPMetricExporter,
46
+ MetricsRecorder,
47
+ OutputChunkAggregation,
48
+ sdk_meter_provider,
49
+ )
45
50
  from ._processor import ExportMode, StampingSpanProcessor
46
51
  from ._semconv import SCOPE_NAME
47
52
  from ._serialize import Mask, serialize_content
@@ -207,9 +212,7 @@ class Client:
207
212
  )
208
213
  metrics_recorder: MetricsRecorder | None = None
209
214
  if metric_reader is not None:
210
- self._meter_provider = MeterProvider(
211
- metric_readers=[metric_reader], resource=resource, shutdown_on_exit=False
212
- )
215
+ self._meter_provider = sdk_meter_provider(metric_reader, resource)
213
216
  meter = self._meter_provider.get_meter(SCOPE_NAME, SDK_VERSION)
214
217
  metrics_recorder = MetricsRecorder(
215
218
  meter, on_error=on_error, output_chunks=self._output_chunks
@@ -9,16 +9,20 @@ from typing import Any
9
9
 
10
10
  from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
11
11
  from opentelemetry.metrics import Meter
12
+ from opentelemetry.sdk.metrics import MeterProvider
12
13
  from opentelemetry.sdk.metrics.export import (
13
14
  AggregationTemporality,
14
15
  Histogram,
15
16
  HistogramDataPoint,
16
17
  Metric,
17
18
  MetricExportResult,
19
+ MetricReader,
18
20
  MetricsData,
19
21
  ResourceMetrics,
20
22
  ScopeMetrics,
21
23
  )
24
+ from opentelemetry.sdk.metrics.view import DropAggregation, View
25
+ from opentelemetry.sdk.resources import Resource
22
26
  from opentelemetry.sdk.trace import ReadableSpan
23
27
  from opentelemetry.trace import INVALID_SPAN_CONTEXT, NonRecordingSpan, set_span_in_context
24
28
 
@@ -41,6 +45,23 @@ _MAX_CHUNK_ATTRIBUTE_SETS = 2000
41
45
  _CHUNK_METRIC_NAME = "gen_ai.client.operation.time_per_output_chunk"
42
46
 
43
47
 
48
+ def sdk_meter_provider(reader: MetricReader, resource: Resource) -> MeterProvider:
49
+ return MeterProvider(
50
+ metric_readers=[reader],
51
+ resource=resource,
52
+ shutdown_on_exit=False,
53
+ # OpenTelemetry records metric-reader metrics on the reader's own provider (always in
54
+ # 1.41, opt-in from 1.42); they must not be exported to telemetry.dev.
55
+ views=[
56
+ View(
57
+ meter_name="opentelemetry-sdk",
58
+ instrument_name="otel.sdk.*",
59
+ aggregation=DropAggregation(),
60
+ )
61
+ ],
62
+ )
63
+
64
+
44
65
  @dataclass
45
66
  class _ChunkAggregate:
46
67
  count: int
@@ -22,7 +22,7 @@ from opentelemetry.sdk.trace import ReadableSpan, Span, SpanProcessor
22
22
  from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
23
23
 
24
24
  from ._config import SDK_VERSION, logger, report_error, resolve_config
25
- from ._metrics import GuardedOTLPMetricExporter, MetricsRecorder
25
+ from ._metrics import GuardedOTLPMetricExporter, MetricsRecorder, sdk_meter_provider
26
26
  from ._processor import ExportMode, StampingSpanProcessor
27
27
  from ._semconv import SCOPE_NAME
28
28
 
@@ -137,9 +137,7 @@ class TelemetrySpanProcessor(SpanProcessor):
137
137
  else _DORMANT_METRIC_INTERVAL_MILLIS
138
138
  ),
139
139
  )
140
- self._meter_provider = MeterProvider(
141
- metric_readers=[reader], resource=resource, shutdown_on_exit=False
142
- )
140
+ self._meter_provider = sdk_meter_provider(reader, resource)
143
141
  meter = self._meter_provider.get_meter(SCOPE_NAME, SDK_VERSION)
144
142
  metrics_recorder = MetricsRecorder(meter, on_error=on_error)
145
143
 
File without changes
File without changes