nvidia-nat-opentelemetry 1.4.0a20251010__py3-none-any.whl → 1.4.0a20251206__py3-none-any.whl

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.
@@ -13,11 +13,13 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ from nat.plugins.opentelemetry.mixin.otlp_span_exporter_mixin import OTLPProtocol
16
17
  from nat.plugins.opentelemetry.otel_span_exporter import OtelSpanExporter
17
18
  from nat.plugins.opentelemetry.otlp_span_adapter_exporter import OTLPSpanAdapterExporter
18
19
  from nat.plugins.opentelemetry.otlp_span_redaction_adapter_exporter import OTLPSpanHeaderRedactionAdapterExporter
19
20
 
20
21
  __all__ = [
22
+ "OTLPProtocol",
21
23
  "OTLPSpanHeaderRedactionAdapterExporter",
22
24
  "OTLPSpanAdapterExporter",
23
25
  "OtelSpanExporter",
@@ -14,21 +14,25 @@
14
14
  # limitations under the License.
15
15
 
16
16
  import logging
17
+ from typing import Literal
17
18
 
18
19
  from nat.plugins.opentelemetry.otel_span import OtelSpan
19
- from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
20
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as OTLPSpanExporterGRPC
21
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter as OTLPSpanExporterHTTP
20
22
 
21
23
  logger = logging.getLogger(__name__)
22
24
 
25
+ OTLPProtocol = Literal['http', 'grpc']
26
+
23
27
 
24
28
  class OTLPSpanExporterMixin:
25
29
  """Mixin for OTLP span exporters.
26
30
 
27
31
  This mixin provides OTLP-specific functionality for OpenTelemetry span exporters.
28
- It handles OTLP protocol transmission using the standard OpenTelemetry OTLP HTTP exporter.
32
+ It handles OTLP protocol transmission using the standard OpenTelemetry OTLP exporters.
29
33
 
30
34
  Key Features:
31
- - Standard OTLP HTTP protocol support for span export
35
+ - Standard OTLP HTTP and gRPC protocol support for span export
32
36
  - Configurable endpoint and headers for authentication/routing
33
37
  - Integration with OpenTelemetry's OTLPSpanExporter for reliable transmission
34
38
  - Works with any OTLP-compatible collector or service
@@ -42,16 +46,29 @@ class OTLPSpanExporterMixin:
42
46
  super().__init__(endpoint=endpoint, headers=headers, **kwargs)
43
47
  """
44
48
 
45
- def __init__(self, *args, endpoint: str, headers: dict[str, str] | None = None, **kwargs):
49
+ def __init__(self,
50
+ *args,
51
+ endpoint: str,
52
+ headers: dict[str, str] | None = None,
53
+ protocol: OTLPProtocol = 'http',
54
+ **kwargs):
46
55
  """Initialize the OTLP span exporter.
47
56
 
48
57
  Args:
49
58
  endpoint: OTLP service endpoint URL.
50
59
  headers: HTTP headers for authentication and metadata.
60
+ protocol: Transport protocol to use ('http' or 'grpc'). Defaults to 'http'.
51
61
  """
52
62
  # Initialize exporter before super().__init__() to ensure it's available
53
63
  # if parent class initialization potentially calls export_otel_spans()
54
- self._exporter = OTLPSpanExporter(endpoint=endpoint, headers=headers)
64
+
65
+ if protocol == 'http':
66
+ self._exporter = OTLPSpanExporterHTTP(endpoint=endpoint, headers=headers)
67
+ elif protocol == 'grpc':
68
+ self._exporter = OTLPSpanExporterGRPC(endpoint=endpoint, headers=headers)
69
+ else:
70
+ raise ValueError(f"Invalid protocol: {protocol}")
71
+
55
72
  super().__init__(*args, **kwargs)
56
73
 
57
74
  async def export_otel_spans(self, spans: list[OtelSpan]) -> None:
@@ -16,6 +16,7 @@
16
16
  import logging
17
17
 
18
18
  from nat.builder.context import ContextState
19
+ from nat.plugins.opentelemetry.mixin.otlp_span_exporter_mixin import OTLPProtocol
19
20
  from nat.plugins.opentelemetry.mixin.otlp_span_exporter_mixin import OTLPSpanExporterMixin
20
21
  from nat.plugins.opentelemetry.otel_span_exporter import OtelSpanExporter
21
22
 
@@ -32,7 +33,7 @@ class OTLPSpanAdapterExporter(OTLPSpanExporterMixin, OtelSpanExporter):
32
33
  Key Features:
33
34
  - Complete span processing pipeline (IntermediateStep → Span → OtelSpan → Export)
34
35
  - Batching support for efficient transmission
35
- - OTLP HTTP protocol for maximum compatibility
36
+ - OTLP HTTP and gRPC protocol for maximum compatibility
36
37
  - Configurable authentication via headers
37
38
  - Resource attribute management
38
39
  - Error handling and retry logic
@@ -48,6 +49,7 @@ class OTLPSpanAdapterExporter(OTLPSpanExporterMixin, OtelSpanExporter):
48
49
  exporter = OTLPSpanAdapterExporter(
49
50
  endpoint="https://api.service.com/v1/traces",
50
51
  headers={"Authorization": "Bearer your-token"},
52
+ protocol='http',
51
53
  batch_size=50,
52
54
  flush_interval=10.0
53
55
  )
@@ -67,6 +69,7 @@ class OTLPSpanAdapterExporter(OTLPSpanExporterMixin, OtelSpanExporter):
67
69
  # OTLPSpanExporterMixin args
68
70
  endpoint: str,
69
71
  headers: dict[str, str] | None = None,
72
+ protocol: OTLPProtocol = 'http',
70
73
  **otlp_kwargs):
71
74
  """Initialize the OTLP span exporter.
72
75
 
@@ -80,6 +83,7 @@ class OTLPSpanAdapterExporter(OTLPSpanExporterMixin, OtelSpanExporter):
80
83
  resource_attributes: Additional resource attributes for spans.
81
84
  endpoint: The endpoint for the OTLP service.
82
85
  headers: The headers for the OTLP service.
86
+ protocol: The protocol to use for the OTLP service, default is 'http'.
83
87
  otlp_kwargs: Additional keyword arguments for the OTLP service.
84
88
  """
85
89
  super().__init__(context_state=context_state,
@@ -91,4 +95,5 @@ class OTLPSpanAdapterExporter(OTLPSpanExporterMixin, OtelSpanExporter):
91
95
  resource_attributes=resource_attributes,
92
96
  endpoint=endpoint,
93
97
  headers=headers,
98
+ protocol=protocol,
94
99
  **otlp_kwargs)
@@ -22,6 +22,7 @@ from typing import Any
22
22
  from nat.builder.context import ContextState
23
23
  from nat.observability.processor.redaction import SpanHeaderRedactionProcessor
24
24
  from nat.observability.processor.span_tagging_processor import SpanTaggingProcessor
25
+ from nat.plugins.opentelemetry.mixin.otlp_span_exporter_mixin import OTLPProtocol
25
26
  from nat.plugins.opentelemetry.otlp_span_adapter_exporter import OTLPSpanAdapterExporter
26
27
 
27
28
  logger = logging.getLogger(__name__)
@@ -39,7 +40,7 @@ class OTLPSpanHeaderRedactionAdapterExporter(OTLPSpanAdapterExporter):
39
40
  - Privacy level tagging for compliance and governance
40
41
  - Complete span processing pipeline (IntermediateStep → Span → Redaction → Tagging → OtelSpan → Batching → Export)
41
42
  - Batching support for efficient transmission
42
- - OTLP HTTP protocol for maximum compatibility
43
+ - OTLP HTTP and gRPC protocol for maximum compatibility
43
44
  - Configurable authentication via headers
44
45
  - Resource attribute management
45
46
  - Error handling and retry logic
@@ -63,6 +64,7 @@ class OTLPSpanHeaderRedactionAdapterExporter(OTLPSpanAdapterExporter):
63
64
  exporter = OTLPSpanRedactionAdapterExporter(
64
65
  endpoint="https://api.service.com/v1/traces",
65
66
  headers={"Authorization": "Bearer your-token"},
67
+ protocol='http',
66
68
  redaction_attributes=["user.email", "request.body"],
67
69
  redaction_headers=["x-user-id"],
68
70
  redaction_callback=should_redact,
@@ -96,6 +98,7 @@ class OTLPSpanHeaderRedactionAdapterExporter(OTLPSpanAdapterExporter):
96
98
  # OTLPSpanExporterMixin args
97
99
  endpoint: str,
98
100
  headers: dict[str, str] | None = None,
101
+ protocol: OTLPProtocol = 'http',
99
102
  **otlp_kwargs):
100
103
  """Initialize the OTLP span exporter with redaction and tagging capabilities.
101
104
 
@@ -117,6 +120,7 @@ class OTLPSpanHeaderRedactionAdapterExporter(OTLPSpanAdapterExporter):
117
120
  redaction_tag: Tag to add to spans when redaction occurs.
118
121
  endpoint: The endpoint for the OTLP service.
119
122
  headers: The headers for the OTLP service.
123
+ protocol: The protocol to use for the OTLP service, default is 'http'.
120
124
  otlp_kwargs: Additional keyword arguments for the OTLP service.
121
125
  """
122
126
  super().__init__(context_state=context_state,
@@ -128,6 +132,7 @@ class OTLPSpanHeaderRedactionAdapterExporter(OTLPSpanAdapterExporter):
128
132
  resource_attributes=resource_attributes,
129
133
  endpoint=endpoint,
130
134
  headers=headers,
135
+ protocol=protocol,
131
136
  **otlp_kwargs)
132
137
 
133
138
  # Insert redaction and tagging processors to the front of the processing pipeline
@@ -20,6 +20,9 @@ from pydantic import Field
20
20
 
21
21
  from nat.builder.builder import Builder
22
22
  from nat.cli.register_workflow import register_telemetry_exporter
23
+ from nat.data_models.common import OptionalSecretStr
24
+ from nat.data_models.common import SerializableSecretStr
25
+ from nat.data_models.common import get_secret_value
23
26
  from nat.data_models.telemetry_exporter import TelemetryExporterBaseConfig
24
27
  from nat.observability.mixin.batch_config_mixin import BatchConfigMixin
25
28
  from nat.observability.mixin.collector_config_mixin import CollectorConfigMixin
@@ -31,8 +34,8 @@ class LangfuseTelemetryExporter(BatchConfigMixin, TelemetryExporterBaseConfig, n
31
34
  """A telemetry exporter to transmit traces to externally hosted langfuse service."""
32
35
 
33
36
  endpoint: str = Field(description="The langfuse OTEL endpoint (/api/public/otel/v1/traces)")
34
- public_key: str = Field(description="The Langfuse public key", default="")
35
- secret_key: str = Field(description="The Langfuse secret key", default="")
37
+ public_key: SerializableSecretStr = Field(description="The Langfuse public key", default="")
38
+ secret_key: SerializableSecretStr = Field(description="The Langfuse secret key", default="")
36
39
  resource_attributes: dict[str, str] = Field(default_factory=dict,
37
40
  description="The resource attributes to add to the span")
38
41
 
@@ -44,8 +47,8 @@ async def langfuse_telemetry_exporter(config: LangfuseTelemetryExporter, builder
44
47
 
45
48
  from nat.plugins.opentelemetry import OTLPSpanAdapterExporter
46
49
 
47
- secret_key = config.secret_key or os.environ.get("LANGFUSE_SECRET_KEY")
48
- public_key = config.public_key or os.environ.get("LANGFUSE_PUBLIC_KEY")
50
+ secret_key = get_secret_value(config.secret_key) if config.secret_key else os.environ.get("LANGFUSE_SECRET_KEY")
51
+ public_key = get_secret_value(config.public_key) if config.public_key else os.environ.get("LANGFUSE_PUBLIC_KEY")
49
52
  if not secret_key or not public_key:
50
53
  raise ValueError("secret and public keys are required for langfuse")
51
54
 
@@ -69,7 +72,7 @@ class LangsmithTelemetryExporter(BatchConfigMixin, CollectorConfigMixin, Telemet
69
72
  description="The langsmith OTEL endpoint",
70
73
  default="https://api.smith.langchain.com/otel/v1/traces",
71
74
  )
72
- api_key: str = Field(description="The Langsmith API key", default="")
75
+ api_key: SerializableSecretStr = Field(description="The Langsmith API key", default="")
73
76
  resource_attributes: dict[str, str] = Field(default_factory=dict,
74
77
  description="The resource attributes to add to the span")
75
78
 
@@ -80,7 +83,7 @@ async def langsmith_telemetry_exporter(config: LangsmithTelemetryExporter, build
80
83
 
81
84
  from nat.plugins.opentelemetry import OTLPSpanAdapterExporter
82
85
 
83
- api_key = config.api_key or os.environ.get("LANGSMITH_API_KEY")
86
+ api_key = get_secret_value(config.api_key) if config.api_key else os.environ.get("LANGSMITH_API_KEY")
84
87
  if not api_key:
85
88
  raise ValueError("API key is required for langsmith")
86
89
 
@@ -134,7 +137,7 @@ async def otel_telemetry_exporter(config: OtelCollectorTelemetryExporter, builde
134
137
  class PatronusTelemetryExporter(BatchConfigMixin, CollectorConfigMixin, TelemetryExporterBaseConfig, name="patronus"):
135
138
  """A telemetry exporter to transmit traces to Patronus service."""
136
139
 
137
- api_key: str = Field(description="The Patronus API key", default="")
140
+ api_key: SerializableSecretStr = Field(description="The Patronus API key", default="")
138
141
  resource_attributes: dict[str, str] = Field(default_factory=dict,
139
142
  description="The resource attributes to add to the span")
140
143
 
@@ -145,7 +148,7 @@ async def patronus_telemetry_exporter(config: PatronusTelemetryExporter, builder
145
148
 
146
149
  from nat.plugins.opentelemetry import OTLPSpanAdapterExporter
147
150
 
148
- api_key = config.api_key or os.environ.get("PATRONUS_API_KEY")
151
+ api_key = get_secret_value(config.api_key) if config.api_key else os.environ.get("PATRONUS_API_KEY")
149
152
  if not api_key:
150
153
  raise ValueError("API key is required for Patronus")
151
154
 
@@ -159,7 +162,8 @@ async def patronus_telemetry_exporter(config: PatronusTelemetryExporter, builder
159
162
  flush_interval=config.flush_interval,
160
163
  max_queue_size=config.max_queue_size,
161
164
  drop_on_overflow=config.drop_on_overflow,
162
- shutdown_timeout=config.shutdown_timeout)
165
+ shutdown_timeout=config.shutdown_timeout,
166
+ protocol="grpc")
163
167
 
164
168
 
165
169
  class GalileoTelemetryExporter(BatchConfigMixin, CollectorConfigMixin, TelemetryExporterBaseConfig, name="galileo"):
@@ -168,7 +172,7 @@ class GalileoTelemetryExporter(BatchConfigMixin, CollectorConfigMixin, Telemetry
168
172
  endpoint: str = Field(description="The galileo endpoint to export telemetry traces.",
169
173
  default="https://app.galileo.ai/api/galileo/otel/traces")
170
174
  logstream: str = Field(description="The logstream name to group the telemetry traces.")
171
- api_key: str = Field(description="The api key to authenticate with the galileo service.")
175
+ api_key: SerializableSecretStr = Field(description="The api key to authenticate with the galileo service.")
172
176
 
173
177
 
174
178
  @register_telemetry_exporter(config_type=GalileoTelemetryExporter)
@@ -178,7 +182,7 @@ async def galileo_telemetry_exporter(config: GalileoTelemetryExporter, builder:
178
182
  from nat.plugins.opentelemetry import OTLPSpanAdapterExporter
179
183
 
180
184
  headers = {
181
- "Galileo-API-Key": config.api_key,
185
+ "Galileo-API-Key": get_secret_value(config.api_key),
182
186
  "logstream": config.logstream,
183
187
  "project": config.project,
184
188
  }
@@ -192,3 +196,45 @@ async def galileo_telemetry_exporter(config: GalileoTelemetryExporter, builder:
192
196
  drop_on_overflow=config.drop_on_overflow,
193
197
  shutdown_timeout=config.shutdown_timeout,
194
198
  )
199
+
200
+
201
+ class DBNLTelemetryExporter(BatchConfigMixin, TelemetryExporterBaseConfig, name="dbnl"):
202
+ """A telemetry exporter to transmit traces to DBNL."""
203
+
204
+ api_url: str | None = Field(description="The DBNL API URL.", default=None)
205
+ api_token: OptionalSecretStr = Field(description="The DBNL API token.", default=None)
206
+ project_id: str | None = Field(description="The DBNL project id.", default=None)
207
+
208
+
209
+ @register_telemetry_exporter(config_type=DBNLTelemetryExporter)
210
+ async def dbnl_telemetry_exporter(config: DBNLTelemetryExporter, builder: Builder):
211
+ """Create a DBNL telemetry exporter."""
212
+
213
+ from nat.plugins.opentelemetry import OTLPSpanAdapterExporter
214
+
215
+ api_token = get_secret_value(config.api_token) if config.api_token else os.environ.get("DBNL_API_TOKEN")
216
+ if not api_token:
217
+ raise ValueError("API token is required for DBNL")
218
+ project_id = config.project_id or os.environ.get("DBNL_PROJECT_ID")
219
+ if not project_id:
220
+ raise ValueError("Project id is required for DBNL")
221
+
222
+ headers = {
223
+ "Authorization": f"Bearer {api_token}",
224
+ "x-dbnl-project-id": project_id,
225
+ }
226
+
227
+ api_url = config.api_url or os.environ.get("DBNL_API_URL")
228
+ if not api_url:
229
+ raise ValueError("API url is required for DBNL")
230
+ endpoint = api_url.rstrip("/") + "/otel/v1/traces"
231
+
232
+ yield OTLPSpanAdapterExporter(
233
+ endpoint=endpoint,
234
+ headers=headers,
235
+ batch_size=config.batch_size,
236
+ flush_interval=config.flush_interval,
237
+ max_queue_size=config.max_queue_size,
238
+ drop_on_overflow=config.drop_on_overflow,
239
+ shutdown_timeout=config.shutdown_timeout,
240
+ )
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nvidia-nat-opentelemetry
3
- Version: 1.4.0a20251010
3
+ Version: 1.4.0a20251206
4
4
  Summary: Subpackage for OpenTelemetry integration in NeMo Agent toolkit
5
5
  Author: NVIDIA Corporation
6
6
  Maintainer: NVIDIA Corporation
7
- License-Expression: Apache-2.0
7
+ License: Apache-2.0
8
8
  Project-URL: documentation, https://docs.nvidia.com/nemo/agent-toolkit/latest/
9
9
  Project-URL: source, https://github.com/NVIDIA/NeMo-Agent-Toolkit
10
10
  Keywords: ai,observability,opentelemetry
@@ -14,9 +14,9 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Requires-Python: <3.14,>=3.11
16
16
  Description-Content-Type: text/markdown
17
- License-File: LICENSE.md
18
17
  License-File: LICENSE-3rd-party.txt
19
- Requires-Dist: nvidia-nat==v1.4.0a20251010
18
+ License-File: LICENSE.md
19
+ Requires-Dist: nvidia-nat==v1.4.0a20251206
20
20
  Requires-Dist: opentelemetry-api~=1.2
21
21
  Requires-Dist: opentelemetry-exporter-otlp~=1.3
22
22
  Requires-Dist: opentelemetry-sdk~=1.3
@@ -0,0 +1,17 @@
1
+ nat/meta/pypi.md,sha256=_o1o1BLPY1pvjCkklWxlm7LlIDMPCk-2Rho85NUuN8U,1109
2
+ nat/plugins/opentelemetry/__init__.py,sha256=6RYrwlYGss4SzyAwjcbgFTLKaLk9jEIHTGEAF8XiC5E,1181
3
+ nat/plugins/opentelemetry/otel_span.py,sha256=MC_ROZ8gSTu0gxRaaz77UDbn1ouZTZP3N_-0PcN140U,16564
4
+ nat/plugins/opentelemetry/otel_span_exporter.py,sha256=YO7JsQgi8Cf2OQBJ_s78HwJjrWx9SdqMvPen3Pa2_bI,6533
5
+ nat/plugins/opentelemetry/otlp_span_adapter_exporter.py,sha256=cWBfPKHET7U1oRMs1QMXvg-z1c1DaqYrLzHIyUUbfGM,4237
6
+ nat/plugins/opentelemetry/otlp_span_redaction_adapter_exporter.py,sha256=YnoQlktT6EJRM7o8bhvYQcdGrAdOXNEk8wOimK_Wy88,7509
7
+ nat/plugins/opentelemetry/register.py,sha256=EZpGOYQ5FVXfwDUea8TfFqWgZnhGP9NFFb1oGFajk5I,11186
8
+ nat/plugins/opentelemetry/span_converter.py,sha256=Gz3KvRNQeEBBlpaPO8YRAJkw4fmzV7m9bT6dGX0IV2E,8846
9
+ nat/plugins/opentelemetry/mixin/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
10
+ nat/plugins/opentelemetry/mixin/otlp_span_exporter_mixin.py,sha256=BN8fRHHEHEWZyrYoudl9lSeH--I2RY2dJVPyWIgDB0I,3454
11
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/licenses/LICENSE-3rd-party.txt,sha256=fOk5jMmCX9YoKWyYzTtfgl-SUy477audFC5hNY4oP7Q,284609
12
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/licenses/LICENSE.md,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
13
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/METADATA,sha256=dUafjNuyZdjnYKLdFsGNFHA1BBI1vyCL-FtAyFnhkVo,2039
14
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/entry_points.txt,sha256=gmEKhCafyibUJLGxbn8luTK0UTgIvV2vAtr4uZ8M85I,72
16
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/top_level.txt,sha256=8-CJ2cP6-f0ZReXe5Hzqp-5pvzzHz-5Ds5H2bGqh1-U,4
17
+ nvidia_nat_opentelemetry-1.4.0a20251206.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- nat/meta/pypi.md,sha256=_o1o1BLPY1pvjCkklWxlm7LlIDMPCk-2Rho85NUuN8U,1109
2
- nat/plugins/opentelemetry/__init__.py,sha256=j-YKuxwSIzGziyDyunw8s_W7WiFiqKLdFjw-utwHPFk,1079
3
- nat/plugins/opentelemetry/otel_span.py,sha256=MC_ROZ8gSTu0gxRaaz77UDbn1ouZTZP3N_-0PcN140U,16564
4
- nat/plugins/opentelemetry/otel_span_exporter.py,sha256=YO7JsQgi8Cf2OQBJ_s78HwJjrWx9SdqMvPen3Pa2_bI,6533
5
- nat/plugins/opentelemetry/otlp_span_adapter_exporter.py,sha256=6xQHkKDhQk3-kObqj6kRv8ZlJtIV2Qqox6YkY0PCOYs,3945
6
- nat/plugins/opentelemetry/otlp_span_redaction_adapter_exporter.py,sha256=qRrUIxYRlCDaAkEGlFTaEkCJCsb68GBo11EGEiE6S8E,7217
7
- nat/plugins/opentelemetry/register.py,sha256=KnhV-axY0kJzZ3RReG4e_mTFR1dMr7d3a6ysYiCLTUI,9063
8
- nat/plugins/opentelemetry/span_converter.py,sha256=Gz3KvRNQeEBBlpaPO8YRAJkw4fmzV7m9bT6dGX0IV2E,8846
9
- nat/plugins/opentelemetry/mixin/__init__.py,sha256=Xs1JQ16L9btwreh4pdGKwskffAw1YFO48jKrU4ib_7c,685
10
- nat/plugins/opentelemetry/mixin/otlp_span_exporter_mixin.py,sha256=3vK6DkTJXp6ZFH3AgNYUuuMOzjyskh_nVUWK-qMYKzM,2809
11
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/licenses/LICENSE-3rd-party.txt,sha256=fOk5jMmCX9YoKWyYzTtfgl-SUy477audFC5hNY4oP7Q,284609
12
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/licenses/LICENSE.md,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
13
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/METADATA,sha256=Vtm8fsJe3kfgnFZsVRii0RB6GQZYkMSHrznui2xw4Z4,2050
14
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/entry_points.txt,sha256=gmEKhCafyibUJLGxbn8luTK0UTgIvV2vAtr4uZ8M85I,72
16
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/top_level.txt,sha256=8-CJ2cP6-f0ZReXe5Hzqp-5pvzzHz-5Ds5H2bGqh1-U,4
17
- nvidia_nat_opentelemetry-1.4.0a20251010.dist-info/RECORD,,