nv-ingest 2025.7.8.dev20250708__py3-none-any.whl → 2025.7.10.dev20250710__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 nv-ingest might be problematic. Click here for more details.

@@ -6,9 +6,7 @@ import logging
6
6
  import math
7
7
  from dataclasses import dataclass
8
8
 
9
- import numpy as np
10
- from collections import deque
11
- from typing import Dict, Any, Deque, List, Tuple, Optional
9
+ from typing import Dict, Any, List, Tuple, Optional
12
10
 
13
11
  from nv_ingest_api.util.system.hardware_info import SystemResourceProbe
14
12
 
@@ -16,7 +14,7 @@ logging.basicConfig(level=logging.INFO)
16
14
  logger = logging.getLogger(__name__)
17
15
 
18
16
  # --- Constants ---
19
- DEFAULT_STAGE_COST_MB = 5000.0 # Fallback memory cost
17
+ DEFAULT_STAGE_COST_MB = 5_000.0 # Fallback memory cost
20
18
 
21
19
 
22
20
  @dataclass
@@ -46,9 +44,7 @@ class PIDController:
46
44
  kp: float,
47
45
  ki: float,
48
46
  kd: float, # Currently unused in delta calculation
49
- stage_cost_estimates: Dict[str, int], # Static estimates (MB)
50
47
  target_queue_depth: int = 0,
51
- window_size: int = 10,
52
48
  penalty_factor: float = 0.0005,
53
49
  error_boost_factor: float = 1.5,
54
50
  ):
@@ -64,16 +60,10 @@ class PIDController:
64
60
  kd : float
65
61
  Derivative gain. Reacts to the rate of change of the error.
66
62
  (Currently set to 0 in internal calculations).
67
- stage_cost_estimates : Dict[str, int]
68
- Static estimated memory cost (in MB) per replica for each stage.
69
- Used as a fallback and minimum for dynamic estimates.
70
63
  target_queue_depth : int, optional
71
64
  Default target queue depth for stages if not specified in metrics,
72
65
  by default 0. The PID loop tries to drive the queue depth towards
73
66
  this value.
74
- window_size : int, optional
75
- Number of recent samples used for dynamic memory cost estimation
76
- per replica, by default 10.
77
67
  penalty_factor : float, optional
78
68
  Multiplier applied to the number of consecutive idle cycles for a
79
69
  stage. The resulting penalty effectively lowers the target queue
@@ -90,16 +80,11 @@ class PIDController:
90
80
  self.error_boost_factor = error_boost_factor
91
81
 
92
82
  # Per-Stage State
93
- self.stage_cost_estimates = {
94
- name: float(max(cost, 1.0)) for name, cost in stage_cost_estimates.items() # Ensure float and min 1MB
95
- }
96
83
  self.integral_error: Dict[str, float] = {}
97
84
  self.prev_error: Dict[str, float] = {}
98
- self.memory_history: Dict[str, Deque[float]] = {} # Per-replica memory history (MB)
99
85
  self.idle_cycles: Dict[str, int] = {}
100
86
 
101
87
  # Per-Stage Config
102
- self.window_size = window_size
103
88
  self.penalty_factor = penalty_factor
104
89
 
105
90
  # --- Private Methods ---
@@ -110,48 +95,7 @@ class PIDController:
110
95
  logger.debug(f"[PID-{stage}] Initializing state.")
111
96
  self.integral_error[stage] = 0.0
112
97
  self.prev_error[stage] = 0.0
113
- self.memory_history[stage] = deque(maxlen=self.window_size)
114
98
  self.idle_cycles[stage] = 0
115
- # Ensure static cost estimate exists, provide default if missing
116
- if stage not in self.stage_cost_estimates:
117
- logger.warning(f"[PID-{stage}] Missing static cost estimate. Using default {DEFAULT_STAGE_COST_MB}MB.")
118
- self.stage_cost_estimates[stage] = DEFAULT_STAGE_COST_MB
119
-
120
- def _get_conservative_cost_estimate(self, stage: str) -> float:
121
- """
122
- Estimates dynamic memory cost, using static estimate as a floor/max.
123
-
124
- Returns the maximum of the recent average dynamic cost per replica
125
- and the static estimate provided during initialization. This provides
126
- a conservative value for resource projection.
127
-
128
- Parameters
129
- ----------
130
- stage : str
131
- The name of the stage.
132
-
133
- Returns
134
- -------
135
- float
136
- The conservative memory cost estimate in MB per replica.
137
- """
138
- static_cost = self.stage_cost_estimates.get(stage, DEFAULT_STAGE_COST_MB)
139
- memory_samples = self.memory_history.get(stage)
140
-
141
- # Use numpy.mean if samples exist, otherwise fallback to static
142
- if memory_samples and len(memory_samples) > 0:
143
- try:
144
- dynamic_avg = float(np.mean(memory_samples))
145
- # Use max(dynamic, static) for projection, enforce min 1MB
146
- cost = max(dynamic_avg, static_cost, 1.0)
147
- return cost
148
- except Exception as e:
149
- logger.error(
150
- f"[PID-{stage}] Error calculating mean of memory samples: {e}. Falling back to static cost.",
151
- exc_info=False,
152
- )
153
- return max(static_cost, 1.0) # Fallback safely
154
- return max(static_cost, 1.0) # Fallback to static estimate if no history
155
99
 
156
100
  # --- Public Method ---
157
101
 
@@ -167,8 +111,8 @@ class PIDController:
167
111
  ----------
168
112
  stage_metrics : Dict[str, Dict[str, Any]]
169
113
  Dictionary mapping stage names to their current metrics. Expected keys
170
- per stage: 'replicas', 'queue_depth'. Optional: 'memory_usage',
171
- 'target_queue_depth', 'processing', 'min_replicas', 'max_replicas'.
114
+ per stage: 'replicas', 'queue_depth', 'ema_memory_per_replica'.
115
+ Optional: 'target_queue_depth', 'processing', 'min_replicas', 'max_replicas'.
172
116
 
173
117
  Returns
174
118
  -------
@@ -185,16 +129,9 @@ class PIDController:
185
129
 
186
130
  # --- Extract data and calculate current memory state ---
187
131
  replicas = metrics.get("replicas", 0)
188
- # Start with static cost as initial guess if no memory_usage provided
189
- initial_cost_guess = self.stage_cost_estimates.get(stage, DEFAULT_STAGE_COST_MB)
190
- memory_usage = metrics.get("memory_usage", initial_cost_guess * max(replicas, 1))
191
- # Calculate memory per replica safely (avoid division by zero)
192
- current_memory_per_replica = memory_usage / max(replicas, 1.0)
193
-
194
- # Update memory history *before* calculating the conservative cost for *this* cycle's proposal
195
- self.memory_history[stage].append(current_memory_per_replica)
196
- # Recalculate conservative cost *after* updating history for the proposal
197
- conservative_cost = self._get_conservative_cost_estimate(stage)
132
+ # The conservative cost is now the EMA memory passed in from the stats collector.
133
+ # Fallback to a default if not present.
134
+ conservative_cost = metrics.get("ema_memory_per_replica", DEFAULT_STAGE_COST_MB)
198
135
 
199
136
  # --- PID Calculation ---
200
137
  queue_depth = metrics.get("queue_depth", 0)
@@ -296,7 +233,6 @@ class ResourceConstraintManager:
296
233
  self,
297
234
  max_replicas: int,
298
235
  memory_threshold: int,
299
- estimated_edge_cost_mb: int,
300
236
  memory_safety_buffer_fraction: float,
301
237
  ):
302
238
  """
@@ -309,7 +245,6 @@ class ResourceConstraintManager:
309
245
 
310
246
  self.max_replicas = max_replicas
311
247
  self.memory_threshold_mb = memory_threshold
312
- self.estimated_edge_cost_mb = estimated_edge_cost_mb # Keep track, though unused
313
248
  self.memory_safety_buffer_fraction = memory_safety_buffer_fraction # Unused
314
249
  self.effective_memory_limit_mb = self.memory_threshold_mb
315
250
 
@@ -86,7 +86,8 @@ class PipelineCreationSchema(BaseModel):
86
86
 
87
87
  # Vision language model settings
88
88
  vlm_caption_endpoint: str = os.getenv(
89
- "VLM_CAPTION_ENDPOINT", "https://ai.api.nvidia.com/v1/gr/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/chat/completions"
89
+ "VLM_CAPTION_ENDPOINT",
90
+ "https://ai.api.nvidia.com/v1/gr/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/chat/completions",
90
91
  )
91
92
  vlm_caption_model_name: str = os.getenv("VLM_CAPTION_MODEL_NAME", "nvidia/llama-3.1-nemotron-nano-vl-8b-v1")
92
93
 
@@ -3,7 +3,7 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
  import os
6
-
6
+ import psutil
7
7
  import click
8
8
  import logging
9
9
 
@@ -174,6 +174,16 @@ def add_metadata_injector_stage(pipeline, default_cpu_count, stage_name="metadat
174
174
 
175
175
 
176
176
  def add_pdf_extractor_stage(pipeline, default_cpu_count, stage_name="pdf_extractor"):
177
+ # Heuristic: Determine max_replicas based on system memory, capped by CPU cores.
178
+ total_memory_mb = psutil.virtual_memory().total / (1024**2)
179
+
180
+ # Allocate up to 75% of memory to this stage, using a 10GB high watermark per worker.
181
+ allocatable_memory_for_stage_mb = total_memory_mb * 0.75
182
+ memory_based_replicas = int(allocatable_memory_for_stage_mb / 10_000.0)
183
+
184
+ # Cap the number of replicas by the number of available CPU cores.
185
+ max_replicas = max(1, min(memory_based_replicas, default_cpu_count))
186
+
177
187
  yolox_grpc, yolox_http, yolox_auth, yolox_protocol = get_nim_service("yolox")
178
188
  nemoretriever_parse_grpc, nemoretriever_parse_http, nemoretriever_parse_auth, nemoretriever_parse_protocol = (
179
189
  get_nim_service("nemoretriever_parse")
@@ -203,7 +213,7 @@ def add_pdf_extractor_stage(pipeline, default_cpu_count, stage_name="pdf_extract
203
213
  stage_actor=PDFExtractorStage,
204
214
  config=extractor_config,
205
215
  min_replicas=0,
206
- max_replicas=int(max(1, (default_cpu_count // 3))), # 33% of available CPU cores
216
+ max_replicas=max_replicas,
207
217
  )
208
218
 
209
219
  return stage_name
@@ -232,7 +242,7 @@ def add_table_extractor_stage(pipeline, default_cpu_count, stage_name="table_ext
232
242
  stage_actor=TableExtractorStage,
233
243
  config=table_extractor_config,
234
244
  min_replicas=0,
235
- max_replicas=int(max(1, (default_cpu_count // 7))), # 14% of available CPU cores
245
+ max_replicas=2,
236
246
  )
237
247
 
238
248
  return stage_name
@@ -261,7 +271,7 @@ def add_chart_extractor_stage(pipeline, default_cpu_count, stage_name="chart_ext
261
271
  stage_actor=ChartExtractorStage,
262
272
  config=chart_extractor_config,
263
273
  min_replicas=0,
264
- max_replicas=int(max(1, (default_cpu_count // 7))), # 14% of available CPU cores
274
+ max_replicas=2,
265
275
  )
266
276
 
267
277
  return stage_name
@@ -285,7 +295,7 @@ def add_infographic_extractor_stage(pipeline, default_cpu_count, stage_name="inf
285
295
  stage_actor=InfographicExtractorStage,
286
296
  config=infographic_content_extractor_config,
287
297
  min_replicas=0,
288
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
298
+ max_replicas=1,
289
299
  )
290
300
 
291
301
  return stage_name
@@ -307,7 +317,7 @@ def add_image_extractor_stage(pipeline, default_cpu_count, stage_name="image_ext
307
317
  stage_actor=ImageExtractorStage,
308
318
  config=image_extractor_config,
309
319
  min_replicas=0,
310
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
320
+ max_replicas=1,
311
321
  )
312
322
 
313
323
  return stage_name
@@ -329,7 +339,7 @@ def add_docx_extractor_stage(pipeline, default_cpu_count, stage_name="docx_extra
329
339
  stage_actor=DocxExtractorStage,
330
340
  config=DocxExtractorSchema(**docx_extractor_config),
331
341
  min_replicas=0,
332
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
342
+ max_replicas=2,
333
343
  )
334
344
 
335
345
  return stage_name
@@ -351,7 +361,7 @@ def add_pptx_extractor_stage(pipeline, default_cpu_count, stage_name="pptx_extra
351
361
  stage_actor=PPTXExtractorStage,
352
362
  config=PPTXExtractorSchema(**pptx_extractor_config),
353
363
  min_replicas=0,
354
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
364
+ max_replicas=2,
355
365
  )
356
366
 
357
367
  return stage_name
@@ -377,7 +387,7 @@ def add_audio_extractor_stage(pipeline, default_cpu_count, stage_name="audio_ext
377
387
  stage_actor=AudioExtractorStage,
378
388
  config=audio_extractor_config,
379
389
  min_replicas=0,
380
- max_replicas=1, # Audio extraction is a heavy IO bound operation with minimal CPU usage
390
+ max_replicas=1,
381
391
  )
382
392
 
383
393
  return stage_name
@@ -390,7 +400,7 @@ def add_html_extractor_stage(pipeline, default_cpu_count, stage_name="html_extra
390
400
  stage_actor=HtmlExtractorStage,
391
401
  config=HtmlExtractorSchema(),
392
402
  min_replicas=0,
393
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
403
+ max_replicas=1,
394
404
  )
395
405
 
396
406
  return stage_name
@@ -455,7 +465,7 @@ def add_text_splitter_stage(pipeline, default_cpu_count, stage_name="text_splitt
455
465
  stage_actor=TextSplitterStage,
456
466
  config=config,
457
467
  min_replicas=0,
458
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
468
+ max_replicas=2,
459
469
  )
460
470
 
461
471
  return stage_name
@@ -517,7 +527,7 @@ def add_text_embedding_stage(pipeline, default_cpu_count, stage_name="text_embed
517
527
  stage_actor=TextEmbeddingTransformStage,
518
528
  config=config,
519
529
  min_replicas=0,
520
- max_replicas=int(max(1, (default_cpu_count // 14))), # 7% of available CPU cores
530
+ max_replicas=2,
521
531
  )
522
532
 
523
533
  return stage_name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nv-ingest
3
- Version: 2025.7.8.dev20250708
3
+ Version: 2025.7.10.dev20250710
4
4
  Summary: Python module for multimodal document ingestion
5
5
  Author-email: Jeremy Dyer <jdyer@nvidia.com>
6
6
  License: Apache License
@@ -20,9 +20,9 @@ nv_ingest/framework/orchestration/ray/examples/task_source_sink_harness.py,sha25
20
20
  nv_ingest/framework/orchestration/ray/primitives/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
21
21
  nv_ingest/framework/orchestration/ray/primitives/dataclasses.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  nv_ingest/framework/orchestration/ray/primitives/pipeline_monitor.py,sha256=L8ENPiF-lxqhIXVEQwQD5CCqQMb710ynj5D_Y4ixGhs,11077
23
- nv_ingest/framework/orchestration/ray/primitives/pipeline_topology.py,sha256=2Xg7QoKKPPFUWkLck7NtEtb1xLnK3b5uUw8LRxPhLyw,29106
24
- nv_ingest/framework/orchestration/ray/primitives/ray_pipeline.py,sha256=6i0EGWZ9WXpPVkfLwP5a2Y45gwAhQjWjobTp_kuFPsE,60478
25
- nv_ingest/framework/orchestration/ray/primitives/ray_stat_collector.py,sha256=AJ79OTh_NxxoTcyBNiopq3K_nLumsB9UU_axqQS3Gus,15810
23
+ nv_ingest/framework/orchestration/ray/primitives/pipeline_topology.py,sha256=IxLQYHYc9BnMOi73TSJzuhl8KOJAwlwwp8SPdUkV3nE,15737
24
+ nv_ingest/framework/orchestration/ray/primitives/ray_pipeline.py,sha256=HGJ_TyLTKKRl10HWfyx3D-n-zrFY0Fg9TN74UbOeCm8,66584
25
+ nv_ingest/framework/orchestration/ray/primitives/ray_stat_collector.py,sha256=8SpZzulHatqah7U3YHJMTLaYyPlWdCoaer_oNjhmHZo,17221
26
26
  nv_ingest/framework/orchestration/ray/stages/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
27
27
  nv_ingest/framework/orchestration/ray/stages/extractors/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
28
28
  nv_ingest/framework/orchestration/ray/stages/extractors/audio_extractor.py,sha256=KV4hvY0NTGG8CjZviTgcFLQzaH8WJJGkkb9PFYbROww,3417
@@ -40,7 +40,7 @@ nv_ingest/framework/orchestration/ray/stages/meta/__init__.py,sha256=wQSlVx3T14Z
40
40
  nv_ingest/framework/orchestration/ray/stages/meta/ray_actor_edge_base.py,sha256=LnVqBJmpfCmcI-eJLbkwK-7SS-hpEp98P4iCRv_Zhb0,1726
41
41
  nv_ingest/framework/orchestration/ray/stages/meta/ray_actor_sink_stage_base.py,sha256=AhlZUbDK2Jckqnu8hVbJrckW8MsSixfmWc1bst9gRYk,3447
42
42
  nv_ingest/framework/orchestration/ray/stages/meta/ray_actor_source_stage_base.py,sha256=1Pae2xRPK0_QLh53yHECVFm2guwgvZaiRRr3tp4OpYI,1744
43
- nv_ingest/framework/orchestration/ray/stages/meta/ray_actor_stage_base.py,sha256=rAuEH8uq8-j4Ipkb1zMB8z_x_PMvxwO9LFN4iY7UXjE,28957
43
+ nv_ingest/framework/orchestration/ray/stages/meta/ray_actor_stage_base.py,sha256=pvBFsURWoDiAmDWNTLv2pdm5slv-1OnuXxwYvgaKumU,25703
44
44
  nv_ingest/framework/orchestration/ray/stages/mutate/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
45
45
  nv_ingest/framework/orchestration/ray/stages/mutate/image_dedup.py,sha256=UepeDvH6Cfgm5rIylRx6uOxihS0OZ4Q1DGUrjUybNaY,3493
46
46
  nv_ingest/framework/orchestration/ray/stages/mutate/image_filter.py,sha256=9ek5rVa4_GVdmVHGMJvbxacRSpIqVoUxgv28lzJwrTQ,3319
@@ -48,7 +48,7 @@ nv_ingest/framework/orchestration/ray/stages/sinks/__init__.py,sha256=wQSlVx3T14
48
48
  nv_ingest/framework/orchestration/ray/stages/sinks/default_drain.py,sha256=0SQHJlFuXlP16YRWduX1fMKgjhUd7UhDAWQ8XZh4_0I,1471
49
49
  nv_ingest/framework/orchestration/ray/stages/sinks/message_broker_task_sink.py,sha256=enylryvcPmzirpOjCahqYJbNSLsNvv1KpMnOzGqNZQQ,11509
50
50
  nv_ingest/framework/orchestration/ray/stages/sources/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
51
- nv_ingest/framework/orchestration/ray/stages/sources/message_broker_task_source.py,sha256=9YoVytbFFt-RpIR_MN2m3T93zVTjts8tjhi0qzLJkTw,19922
51
+ nv_ingest/framework/orchestration/ray/stages/sources/message_broker_task_source.py,sha256=KzRil999sHGK4jV-EBU8LUuPp_e3W-Vc_feFEAvG2-E,20995
52
52
  nv_ingest/framework/orchestration/ray/stages/storage/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
53
53
  nv_ingest/framework/orchestration/ray/stages/storage/image_storage.py,sha256=6NkwQzseAnaj0Ptpr3oKvab2EnJdMwTjI2p4dS_HzsI,3901
54
54
  nv_ingest/framework/orchestration/ray/stages/storage/store_embeddings.py,sha256=SMLHQElZkKldnjy0_VHIKS65DBAAtOhwhdoaFe1yb9I,3337
@@ -64,10 +64,10 @@ nv_ingest/framework/orchestration/ray/stages/utility/__init__.py,sha256=wQSlVx3T
64
64
  nv_ingest/framework/orchestration/ray/stages/utility/throughput_monitor.py,sha256=MB27CkoNeuirN6CUHgjsC5Wh958NF7m_N7HE4VKfx3k,2264
65
65
  nv_ingest/framework/orchestration/ray/util/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
66
66
  nv_ingest/framework/orchestration/ray/util/pipeline/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
67
- nv_ingest/framework/orchestration/ray/util/pipeline/pid_controller.py,sha256=AWyCFPP41vp1NOkO2urqm7vh-sTGKypJxwhdq8HxK6Q,50681
67
+ nv_ingest/framework/orchestration/ray/util/pipeline/pid_controller.py,sha256=flRLS7yc5n6gheykayuL3prC7O-ZhcVY2s9Wc14SGWE,47377
68
68
  nv_ingest/framework/orchestration/ray/util/pipeline/pipeline_builders.py,sha256=d2-GS2tqk6JOFdw65CL1AwfjdUbkC_XxUuJH8Dy-aQ0,10456
69
- nv_ingest/framework/orchestration/ray/util/pipeline/pipeline_runners.py,sha256=C7wf0AdsOpfYUTMKWLhi8hkoUnnCAD8v3OMwOkpYgKw,14331
70
- nv_ingest/framework/orchestration/ray/util/pipeline/stage_builders.py,sha256=sEpfVgZrnnM_kZ5KoSBMufO6iU4Z8v8XskMbOGumg2g,21415
69
+ nv_ingest/framework/orchestration/ray/util/pipeline/pipeline_runners.py,sha256=5I7N-nmGXaYqyPEtPZbFhgvog2b2c3eagWc69naMc9s,14340
70
+ nv_ingest/framework/orchestration/ray/util/pipeline/stage_builders.py,sha256=-IoaRYO7tDA9JXJ7J_j-8pVcU4dYWXrKDM3vo392XZA,21229
71
71
  nv_ingest/framework/orchestration/ray/util/pipeline/tools.py,sha256=LQVb8k9jURaxh2Ga44Js_XuYFCbeN4_nLgDmtExovQg,8026
72
72
  nv_ingest/framework/orchestration/ray/util/system_tools/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
73
73
  nv_ingest/framework/orchestration/ray/util/system_tools/memory.py,sha256=ICqY0LLB3hFTZk03iX5yffMSKFH2q_aQomtDVzS_mKw,2228
@@ -96,8 +96,8 @@ nv_ingest/framework/util/service/meta/ingest/__init__.py,sha256=wQSlVx3T14ZgQAt-
96
96
  nv_ingest/framework/util/service/meta/ingest/ingest_service_meta.py,sha256=QS3uNxWBl5dIcmIpJKNe8_TLcTUuN2vcKyHeAwa-eSo,1589
97
97
  nv_ingest/framework/util/telemetry/__init__.py,sha256=wQSlVx3T14ZgQAt-EPzEczQusXVW0W8yynnUaFFGE3s,143
98
98
  nv_ingest/framework/util/telemetry/global_stats.py,sha256=nq65pEEdiwjAfGiqsxG1CeQMC96O3CfQxsZuGFCY-ds,4554
99
- nv_ingest-2025.7.8.dev20250708.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
100
- nv_ingest-2025.7.8.dev20250708.dist-info/METADATA,sha256=K0LEr0F0I2RJuvnAoDkuMn1f5t2P8ifLaQ8Z7d13VYU,15141
101
- nv_ingest-2025.7.8.dev20250708.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
- nv_ingest-2025.7.8.dev20250708.dist-info/top_level.txt,sha256=sjb0ajIsgn3YgftSjZHlYO0HjYAIIhNuXG_AmywCvaU,10
103
- nv_ingest-2025.7.8.dev20250708.dist-info/RECORD,,
99
+ nv_ingest-2025.7.10.dev20250710.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
100
+ nv_ingest-2025.7.10.dev20250710.dist-info/METADATA,sha256=8PbHZxwRhte7as7gL-U5y3sbviPepCUTwfaZxaIUeyk,15142
101
+ nv_ingest-2025.7.10.dev20250710.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
+ nv_ingest-2025.7.10.dev20250710.dist-info/top_level.txt,sha256=sjb0ajIsgn3YgftSjZHlYO0HjYAIIhNuXG_AmywCvaU,10
103
+ nv_ingest-2025.7.10.dev20250710.dist-info/RECORD,,