genai-otel-instrument 0.1.1.dev0__py3-none-any.whl → 0.1.2.dev0__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.
Potentially problematic release.
This version of genai-otel-instrument might be problematic. Click here for more details.
- genai_otel/__version__.py +2 -2
- genai_otel/gpu_metrics.py +34 -0
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/METADATA +187 -4
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/RECORD +8 -8
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/WHEEL +0 -0
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/entry_points.txt +0 -0
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/licenses/LICENSE +0 -0
- {genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/top_level.txt +0 -0
genai_otel/__version__.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
31
|
+
__version__ = version = '0.1.2.dev0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 2, 'dev0')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
genai_otel/gpu_metrics.py
CHANGED
|
@@ -43,6 +43,7 @@ class GPUMetricsCollector:
|
|
|
43
43
|
self.gpu_utilization_counter: Optional[ObservableCounter] = None
|
|
44
44
|
self.gpu_memory_used_gauge: Optional[ObservableGauge] = None
|
|
45
45
|
self.gpu_temperature_gauge: Optional[ObservableGauge] = None
|
|
46
|
+
self.gpu_power_gauge: Optional[ObservableGauge] = None
|
|
46
47
|
self.config = config
|
|
47
48
|
self.interval = interval # seconds
|
|
48
49
|
self.gpu_available = False
|
|
@@ -93,6 +94,12 @@ class GPUMetricsCollector:
|
|
|
93
94
|
description="GPU temperature in Celsius",
|
|
94
95
|
unit="Cel",
|
|
95
96
|
)
|
|
97
|
+
self.gpu_power_gauge = self.meter.create_observable_gauge(
|
|
98
|
+
"gen_ai.gpu.power", # Fixed metric name
|
|
99
|
+
callbacks=[self._observe_gpu_power],
|
|
100
|
+
description="GPU power consumption in Watts",
|
|
101
|
+
unit="W",
|
|
102
|
+
)
|
|
96
103
|
except Exception as e:
|
|
97
104
|
logger.error("Failed to create GPU metrics instruments: %s", e, exc_info=True)
|
|
98
105
|
|
|
@@ -185,6 +192,33 @@ class GPUMetricsCollector:
|
|
|
185
192
|
except Exception as e:
|
|
186
193
|
logger.error("Error observing GPU temperature: %s", e)
|
|
187
194
|
|
|
195
|
+
def _observe_gpu_power(self, options):
|
|
196
|
+
"""Observable callback for GPU power consumption."""
|
|
197
|
+
if not NVML_AVAILABLE or not self.gpu_available:
|
|
198
|
+
return
|
|
199
|
+
|
|
200
|
+
try:
|
|
201
|
+
pynvml.nvmlInit()
|
|
202
|
+
device_count = pynvml.nvmlDeviceGetCount()
|
|
203
|
+
|
|
204
|
+
for i in range(device_count):
|
|
205
|
+
handle = pynvml.nvmlDeviceGetHandleByIndex(i)
|
|
206
|
+
device_name = self._get_device_name(handle, i)
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
# Power usage is returned in milliwatts, convert to watts
|
|
210
|
+
power_mw = pynvml.nvmlDeviceGetPowerUsage(handle)
|
|
211
|
+
power_w = power_mw / 1000.0
|
|
212
|
+
yield Observation(
|
|
213
|
+
value=power_w, attributes={"gpu_id": str(i), "gpu_name": device_name}
|
|
214
|
+
)
|
|
215
|
+
except Exception as e:
|
|
216
|
+
logger.debug("Failed to get GPU power for GPU %d: %s", i, e)
|
|
217
|
+
|
|
218
|
+
pynvml.nvmlShutdown()
|
|
219
|
+
except Exception as e:
|
|
220
|
+
logger.error("Error observing GPU power: %s", e)
|
|
221
|
+
|
|
188
222
|
def start(self):
|
|
189
223
|
"""Starts the GPU metrics collection.
|
|
190
224
|
|
{genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: genai-otel-instrument
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2.dev0
|
|
4
4
|
Summary: Comprehensive OpenTelemetry auto-instrumentation for LLM/GenAI applications
|
|
5
5
|
Author-email: Kshitij Thakkar <kshitijthakkar@rocketmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -180,6 +180,26 @@ Dynamic: license-file
|
|
|
180
180
|
|
|
181
181
|
# GenAI OpenTelemetry Auto-Instrumentation
|
|
182
182
|
|
|
183
|
+
[](https://badge.fury.io/py/genai-otel-instrument)
|
|
184
|
+
[](https://pypi.org/project/genai-otel-instrument/)
|
|
185
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
186
|
+
[](https://pepy.tech/project/genai-otel-instrument)
|
|
187
|
+
[](https://pepy.tech/project/genai-otel-instrument)
|
|
188
|
+
|
|
189
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument)
|
|
190
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument)
|
|
191
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument/issues)
|
|
192
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument/pulls)
|
|
193
|
+
|
|
194
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument)
|
|
195
|
+
[](https://github.com/psf/black)
|
|
196
|
+
[](https://pycqa.github.io/isort/)
|
|
197
|
+
[](http://mypy-lang.org/)
|
|
198
|
+
|
|
199
|
+
[](https://opentelemetry.io/)
|
|
200
|
+
[](https://opentelemetry.io/docs/specs/semconv/gen-ai/)
|
|
201
|
+
[](https://github.com/Mandark-droid/genai_otel_instrument/actions)
|
|
202
|
+
|
|
183
203
|
Production-ready OpenTelemetry instrumentation for GenAI/LLM applications with zero-code setup.
|
|
184
204
|
|
|
185
205
|
## Features
|
|
@@ -188,7 +208,7 @@ Production-ready OpenTelemetry instrumentation for GenAI/LLM applications with z
|
|
|
188
208
|
🤖 **15+ LLM Providers** - OpenAI, Anthropic, Google, AWS, Azure, and more
|
|
189
209
|
🔧 **MCP Tool Support** - Auto-instrument databases, APIs, caches, vector DBs
|
|
190
210
|
💰 **Cost Tracking** - Automatic cost calculation per request
|
|
191
|
-
🎮 **GPU Metrics** - Real-time GPU utilization, memory, temperature
|
|
211
|
+
🎮 **GPU Metrics** - Real-time GPU utilization, memory, temperature, power
|
|
192
212
|
📊 **Complete Observability** - Traces, metrics, and rich span attributes
|
|
193
213
|
➕ **Service Instance ID & Environment** - Identify your services and environments
|
|
194
214
|
⏱️ **Configurable Exporter Timeout** - Set timeout for OTLP exporter
|
|
@@ -268,7 +288,7 @@ Every LLM call, database query, API request, and vector search is traced with fu
|
|
|
268
288
|
### Metrics
|
|
269
289
|
|
|
270
290
|
**GenAI Metrics:**
|
|
271
|
-
- `gen_ai.requests` - Request counts by provider
|
|
291
|
+
- `gen_ai.requests` - Request counts by provider and model
|
|
272
292
|
- `gen_ai.client.token.usage` - Token usage (prompt/completion)
|
|
273
293
|
- `gen_ai.client.operation.duration` - Request latency histogram (optimized buckets for LLM workloads)
|
|
274
294
|
- `gen_ai.usage.cost` - Total estimated costs in USD
|
|
@@ -278,7 +298,7 @@ Every LLM call, database query, API request, and vector search is traced with fu
|
|
|
278
298
|
- `gen_ai.usage.cost.cache_read` - Cache read cost (Anthropic)
|
|
279
299
|
- `gen_ai.usage.cost.cache_write` - Cache write cost (Anthropic)
|
|
280
300
|
- `gen_ai.client.errors` - Error counts by operation and type
|
|
281
|
-
- `gen_ai.gpu.*` - GPU utilization, memory, temperature (ObservableGauges)
|
|
301
|
+
- `gen_ai.gpu.*` - GPU utilization, memory, temperature, power (ObservableGauges)
|
|
282
302
|
- `gen_ai.co2.emissions` - CO2 emissions tracking (opt-in)
|
|
283
303
|
- `gen_ai.server.ttft` - Time to First Token for streaming responses (histogram, 1ms-10s buckets)
|
|
284
304
|
- `gen_ai.server.tbt` - Time Between Tokens for streaming responses (histogram, 10ms-2.5s buckets)
|
|
@@ -459,5 +479,168 @@ genai-otel-instrument/
|
|
|
459
479
|
└── (other mcp files)
|
|
460
480
|
```
|
|
461
481
|
|
|
482
|
+
## Roadmap
|
|
483
|
+
|
|
484
|
+
### Next Release (v0.2.0) - Q1 2026
|
|
485
|
+
|
|
486
|
+
We're planning significant enhancements for the next major release, focusing on evaluation metrics and safety guardrails alongside completing OpenTelemetry semantic convention compliance.
|
|
487
|
+
|
|
488
|
+
#### 🎯 Evaluation & Monitoring
|
|
489
|
+
|
|
490
|
+
**LLM Output Quality Metrics**
|
|
491
|
+
- **Bias Detection** - Automatically detect and measure bias in LLM responses
|
|
492
|
+
- Gender, racial, political, and cultural bias detection
|
|
493
|
+
- Bias score metrics with configurable thresholds
|
|
494
|
+
- Integration with fairness libraries (e.g., Fairlearn, AIF360)
|
|
495
|
+
|
|
496
|
+
- **Toxicity Detection** - Monitor and alert on toxic or harmful content
|
|
497
|
+
- Perspective API integration for toxicity scoring
|
|
498
|
+
- Custom toxicity models support
|
|
499
|
+
- Real-time toxicity metrics and alerts
|
|
500
|
+
- Configurable severity levels
|
|
501
|
+
|
|
502
|
+
- **Hallucination Detection** - Track factual accuracy and groundedness
|
|
503
|
+
- Fact-checking against provided context
|
|
504
|
+
- Citation validation for RAG applications
|
|
505
|
+
- Confidence scoring for generated claims
|
|
506
|
+
- Hallucination rate metrics by model and use case
|
|
507
|
+
|
|
508
|
+
**Implementation:**
|
|
509
|
+
```python
|
|
510
|
+
import genai_otel
|
|
511
|
+
|
|
512
|
+
# Enable evaluation metrics
|
|
513
|
+
genai_otel.instrument(
|
|
514
|
+
enable_bias_detection=True,
|
|
515
|
+
enable_toxicity_detection=True,
|
|
516
|
+
enable_hallucination_detection=True,
|
|
517
|
+
|
|
518
|
+
# Configure thresholds
|
|
519
|
+
bias_threshold=0.7,
|
|
520
|
+
toxicity_threshold=0.5,
|
|
521
|
+
hallucination_threshold=0.8
|
|
522
|
+
)
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
**Metrics Added:**
|
|
526
|
+
- `gen_ai.eval.bias_score` - Bias detection scores (histogram)
|
|
527
|
+
- `gen_ai.eval.toxicity_score` - Toxicity scores (histogram)
|
|
528
|
+
- `gen_ai.eval.hallucination_score` - Hallucination probability (histogram)
|
|
529
|
+
- `gen_ai.eval.violations` - Count of threshold violations by type
|
|
530
|
+
|
|
531
|
+
#### 🛡️ Safety Guardrails
|
|
532
|
+
|
|
533
|
+
**Input/Output Filtering**
|
|
534
|
+
- **Prompt Injection Detection** - Protect against prompt injection attacks
|
|
535
|
+
- Pattern-based detection (jailbreaking attempts)
|
|
536
|
+
- ML-based classifier for sophisticated attacks
|
|
537
|
+
- Real-time blocking with configurable policies
|
|
538
|
+
- Attack attempt metrics and logging
|
|
539
|
+
|
|
540
|
+
- **Restricted Topics** - Block sensitive or inappropriate topics
|
|
541
|
+
- Configurable topic blacklists (legal, medical, financial advice)
|
|
542
|
+
- Industry-specific content filters
|
|
543
|
+
- Topic detection with confidence scoring
|
|
544
|
+
- Custom topic definition support
|
|
545
|
+
|
|
546
|
+
- **Sensitive Information Protection** - Prevent PII leakage
|
|
547
|
+
- PII detection (emails, phone numbers, SSN, credit cards)
|
|
548
|
+
- Automatic redaction or blocking
|
|
549
|
+
- Compliance mode (GDPR, HIPAA, PCI-DSS)
|
|
550
|
+
- Data leak prevention metrics
|
|
551
|
+
|
|
552
|
+
**Implementation:**
|
|
553
|
+
```python
|
|
554
|
+
import genai_otel
|
|
555
|
+
|
|
556
|
+
# Configure guardrails
|
|
557
|
+
genai_otel.instrument(
|
|
558
|
+
enable_prompt_injection_detection=True,
|
|
559
|
+
enable_restricted_topics=True,
|
|
560
|
+
enable_sensitive_info_detection=True,
|
|
561
|
+
|
|
562
|
+
# Custom configuration
|
|
563
|
+
restricted_topics=["medical_advice", "legal_advice", "financial_advice"],
|
|
564
|
+
pii_detection_mode="block", # or "redact", "warn"
|
|
565
|
+
|
|
566
|
+
# Callbacks for custom handling
|
|
567
|
+
on_guardrail_violation=my_violation_handler
|
|
568
|
+
)
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
**Metrics Added:**
|
|
572
|
+
- `gen_ai.guardrail.prompt_injection_detected` - Injection attempts blocked
|
|
573
|
+
- `gen_ai.guardrail.restricted_topic_blocked` - Restricted topic violations
|
|
574
|
+
- `gen_ai.guardrail.pii_detected` - PII detection events
|
|
575
|
+
- `gen_ai.guardrail.violations` - Total guardrail violations by type
|
|
576
|
+
|
|
577
|
+
**Span Attributes:**
|
|
578
|
+
- `gen_ai.guardrail.violation_type` - Type of violation detected
|
|
579
|
+
- `gen_ai.guardrail.violation_severity` - Severity level (low, medium, high, critical)
|
|
580
|
+
- `gen_ai.guardrail.blocked` - Whether request was blocked (boolean)
|
|
581
|
+
- `gen_ai.eval.bias_categories` - Detected bias types (array)
|
|
582
|
+
- `gen_ai.eval.toxicity_categories` - Toxicity categories (array)
|
|
583
|
+
|
|
584
|
+
#### 📊 Enhanced OpenTelemetry Compliance
|
|
585
|
+
|
|
586
|
+
Completing remaining items from [OTEL_SEMANTIC_GAP_ANALYSIS_AND_IMPLEMENTATION_PLAN.md](OTEL_SEMANTIC_GAP_ANALYSIS_AND_IMPLEMENTATION_PLAN.md):
|
|
587
|
+
|
|
588
|
+
**Phase 4: Optional Enhancements**
|
|
589
|
+
- ✅ Session & User Tracking - Track sessions and users across requests
|
|
590
|
+
```python
|
|
591
|
+
genai_otel.instrument(
|
|
592
|
+
session_id_extractor=lambda ctx: ctx.get("session_id"),
|
|
593
|
+
user_id_extractor=lambda ctx: ctx.get("user_id")
|
|
594
|
+
)
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
- ✅ RAG/Embedding Attributes - Enhanced observability for retrieval-augmented generation
|
|
598
|
+
- `embedding.model_name` - Embedding model used
|
|
599
|
+
- `embedding.vector_dimensions` - Vector dimensions
|
|
600
|
+
- `retrieval.documents.{i}.document.id` - Retrieved document IDs
|
|
601
|
+
- `retrieval.documents.{i}.document.score` - Relevance scores
|
|
602
|
+
- `retrieval.documents.{i}.document.content` - Document content (truncated)
|
|
603
|
+
|
|
604
|
+
- ✅ Agent Workflow Tracking - Better support for agentic workflows
|
|
605
|
+
- `agent.name` - Agent identifier
|
|
606
|
+
- `agent.iteration` - Current iteration number
|
|
607
|
+
- `agent.action` - Action taken
|
|
608
|
+
- `agent.observation` - Observation received
|
|
609
|
+
|
|
610
|
+
#### 🔄 Migration Support
|
|
611
|
+
|
|
612
|
+
**Backward Compatibility:**
|
|
613
|
+
- All new features are opt-in via configuration
|
|
614
|
+
- Existing instrumentation continues to work unchanged
|
|
615
|
+
- Gradual migration path for new semantic conventions
|
|
616
|
+
|
|
617
|
+
**Version Support:**
|
|
618
|
+
- Python 3.9+ (evaluation features require 3.10+)
|
|
619
|
+
- OpenTelemetry SDK 1.20.0+
|
|
620
|
+
- Backward compatible with existing dashboards
|
|
621
|
+
|
|
622
|
+
### Future Releases
|
|
623
|
+
|
|
624
|
+
**v0.3.0 - Advanced Analytics**
|
|
625
|
+
- Custom metric aggregations
|
|
626
|
+
- Cost optimization recommendations
|
|
627
|
+
- Automated performance regression detection
|
|
628
|
+
- A/B testing support for prompts
|
|
629
|
+
|
|
630
|
+
**v0.4.0 - Enterprise Features**
|
|
631
|
+
- Multi-tenancy support
|
|
632
|
+
- Role-based access control for telemetry
|
|
633
|
+
- Advanced compliance reporting
|
|
634
|
+
- SLA monitoring and alerting
|
|
635
|
+
|
|
636
|
+
**Community Feedback**
|
|
637
|
+
|
|
638
|
+
We welcome feedback on our roadmap! Please:
|
|
639
|
+
- Open issues for feature requests
|
|
640
|
+
- Join discussions on prioritization
|
|
641
|
+
- Share your use cases and requirements
|
|
642
|
+
|
|
643
|
+
See [Contributing.md](Contributing.md) for how to get involved.
|
|
644
|
+
|
|
462
645
|
## License
|
|
463
646
|
Apache-2.0 license
|
{genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/RECORD
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
genai_otel/__init__.py,sha256=OWgm1dihRkwBQU8fUPnVhE5XCZeF5f15UyH4w6LqGZU,4469
|
|
2
|
-
genai_otel/__version__.py,sha256=
|
|
2
|
+
genai_otel/__version__.py,sha256=eqjW0HD_fPOqOyADJFBWSMmbfbnb7cqTc_62GX2lDJU,751
|
|
3
3
|
genai_otel/auto_instrument.py,sha256=bLOR_9y2gSB4VfwRrYI7YX_et-NwrpIzbOnmkNqbDHE,15343
|
|
4
4
|
genai_otel/cli.py,sha256=mbhaTU0WIAkvPKdIing-guIxPDjEKQftChWQUtPFzkY,3170
|
|
5
5
|
genai_otel/config.py,sha256=GSJZApBNKKXm5rp5jQsDk91qcHYzCrhmf06DHbpZMBE,6685
|
|
6
6
|
genai_otel/cost_calculator.py,sha256=Jlp-UPO8vcfWy5u46ib1I_6w0bvVrMsz1kWi1Vn6QX4,10588
|
|
7
7
|
genai_otel/exceptions.py,sha256=gIRvbI7c4V-M-PG9jS0o4ESRwHUWCm6DVihjfyJI1yg,429
|
|
8
|
-
genai_otel/gpu_metrics.py,sha256=
|
|
8
|
+
genai_otel/gpu_metrics.py,sha256=gHqV17mJ59VscilR_Bcd1ccBDdDiUs5w0bE1hNk7NqI,11168
|
|
9
9
|
genai_otel/llm_pricing.json,sha256=fFajtjXvcNfuz_JOblz4BXpiliZvtL1Fybpa9hJv-v4,17733
|
|
10
10
|
genai_otel/logging_config.py,sha256=XSBeslTqeHUBBadKJV2W8JFIOXorEVZ6W0xqNKjiPlA,1463
|
|
11
11
|
genai_otel/metrics.py,sha256=Vngwtc1MAMAE7JVpbT_KfiCQ5TdIAKIs_0oztjJdDTg,2671
|
|
@@ -36,9 +36,9 @@ genai_otel/mcp_instrumentors/kafka_instrumentor.py,sha256=QJYJC1rvo_zZAIaw-cp_Ic
|
|
|
36
36
|
genai_otel/mcp_instrumentors/manager.py,sha256=1Pj5lkEOL8Yq1Oeud4ZExN6k6NLIVtTzKnFLNiFdJvw,5895
|
|
37
37
|
genai_otel/mcp_instrumentors/redis_instrumentor.py,sha256=KUbs0dMyfMzU4T0SS8u43I5fvr09lcBBM92I3KCsYUw,943
|
|
38
38
|
genai_otel/mcp_instrumentors/vector_db_instrumentor.py,sha256=2vhnk4PGpfYKr-XlRbnCIOap4BPKHOn--fh-ai2YXlM,9994
|
|
39
|
-
genai_otel_instrument-0.1.
|
|
40
|
-
genai_otel_instrument-0.1.
|
|
41
|
-
genai_otel_instrument-0.1.
|
|
42
|
-
genai_otel_instrument-0.1.
|
|
43
|
-
genai_otel_instrument-0.1.
|
|
44
|
-
genai_otel_instrument-0.1.
|
|
39
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
40
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/METADATA,sha256=xx-j-EJnh9GTQe-LUtTanUregUyEQrBY3ZgY2SCGWZg,27296
|
|
41
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
42
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/entry_points.txt,sha256=E9UqoHA_fq69yNGAY3SRYf5HH94sZT5DiDueiU1v0KM,57
|
|
43
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/top_level.txt,sha256=cvCm8PUwvYUSQKruk-x6S-_YuDyhOBk8gD910XICcbg,11
|
|
44
|
+
genai_otel_instrument-0.1.2.dev0.dist-info/RECORD,,
|
{genai_otel_instrument-0.1.1.dev0.dist-info → genai_otel_instrument-0.1.2.dev0.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|