palimpzest 0.7.7__py3-none-any.whl → 0.7.8__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.
Files changed (39) hide show
  1. palimpzest/constants.py +113 -75
  2. palimpzest/core/data/dataclasses.py +55 -38
  3. palimpzest/core/elements/index.py +5 -15
  4. palimpzest/core/elements/records.py +1 -1
  5. palimpzest/prompts/prompt_factory.py +1 -1
  6. palimpzest/query/execution/all_sample_execution_strategy.py +216 -0
  7. palimpzest/query/execution/execution_strategy.py +4 -4
  8. palimpzest/query/execution/execution_strategy_type.py +7 -1
  9. palimpzest/query/execution/mab_execution_strategy.py +184 -72
  10. palimpzest/query/execution/parallel_execution_strategy.py +182 -15
  11. palimpzest/query/execution/single_threaded_execution_strategy.py +21 -21
  12. palimpzest/query/generators/api_client_factory.py +6 -7
  13. palimpzest/query/generators/generators.py +5 -8
  14. palimpzest/query/operators/aggregate.py +4 -3
  15. palimpzest/query/operators/convert.py +1 -1
  16. palimpzest/query/operators/filter.py +1 -1
  17. palimpzest/query/operators/limit.py +1 -1
  18. palimpzest/query/operators/map.py +1 -1
  19. palimpzest/query/operators/physical.py +8 -4
  20. palimpzest/query/operators/project.py +1 -1
  21. palimpzest/query/operators/retrieve.py +7 -23
  22. palimpzest/query/operators/scan.py +1 -1
  23. palimpzest/query/optimizer/cost_model.py +54 -62
  24. palimpzest/query/optimizer/optimizer.py +2 -6
  25. palimpzest/query/optimizer/plan.py +4 -4
  26. palimpzest/query/optimizer/primitives.py +1 -1
  27. palimpzest/query/optimizer/rules.py +8 -26
  28. palimpzest/query/optimizer/tasks.py +3 -3
  29. palimpzest/query/processor/processing_strategy_type.py +2 -2
  30. palimpzest/query/processor/sentinel_processor.py +0 -2
  31. palimpzest/sets.py +2 -3
  32. palimpzest/utils/generation_helpers.py +1 -1
  33. palimpzest/utils/model_helpers.py +27 -9
  34. palimpzest/utils/progress.py +81 -72
  35. {palimpzest-0.7.7.dist-info → palimpzest-0.7.8.dist-info}/METADATA +4 -2
  36. {palimpzest-0.7.7.dist-info → palimpzest-0.7.8.dist-info}/RECORD +39 -38
  37. {palimpzest-0.7.7.dist-info → palimpzest-0.7.8.dist-info}/WHEEL +1 -1
  38. {palimpzest-0.7.7.dist-info → palimpzest-0.7.8.dist-info}/licenses/LICENSE +0 -0
  39. {palimpzest-0.7.7.dist-info → palimpzest-0.7.8.dist-info}/top_level.txt +0 -0
@@ -81,21 +81,21 @@ class ProgressManager(ABC):
81
81
  expand=True, # Use full width
82
82
  )
83
83
 
84
- # initialize mapping from op_id --> ProgressStats
85
- self.op_id_to_stats: dict[str, ProgressStats] = {}
84
+ # initialize mapping from full_op_id --> ProgressStats
85
+ self.full_op_id_to_stats: dict[str, ProgressStats] = {}
86
86
 
87
- # initialize mapping from op_id --> task
88
- self.op_id_to_task = {}
87
+ # initialize mapping from full_op_id --> task
88
+ self.full_op_id_to_task = {}
89
89
 
90
90
  # initialize start time
91
91
  self.start_time = None
92
92
 
93
- # create mapping from op_id --> next_op
94
- self.op_id_to_next_op: dict[str, PhysicalOperator] = {}
93
+ # create mapping from full_op_id --> next_op
94
+ self.full_op_id_to_next_op: dict[str, PhysicalOperator] = {}
95
95
  for op_idx, op in enumerate(plan.operators):
96
- op_id = op.get_op_id()
96
+ full_op_id = op.get_full_op_id()
97
97
  next_op = plan.operators[op_idx + 1] if op_idx + 1 < len(plan.operators) else None
98
- self.op_id_to_next_op[op_id] = next_op
98
+ self.full_op_id_to_next_op[full_op_id] = next_op
99
99
 
100
100
  # compute the total number of inputs to be processed by the plan
101
101
  datareader_len = len(plan.operators[0].datareader)
@@ -104,8 +104,7 @@ class ProgressManager(ABC):
104
104
  # add a task to the progress manager for each operator in the plan
105
105
  for op in plan.operators:
106
106
  # get the op id and a short string representation of the op; (str(op) is too long)
107
- op_id = op.get_op_id()
108
- op_str = f"{op.op_name()} ({op_id})"
107
+ op_str = f"{op.op_name()} ({op.get_op_id()})"
109
108
 
110
109
  # update the `total` if we encounter an AggregateOp or LimitScanOp
111
110
  if isinstance(op, AggregateOp):
@@ -113,20 +112,20 @@ class ProgressManager(ABC):
113
112
  elif isinstance(op, LimitScanOp):
114
113
  total = op.limit
115
114
 
116
- self.add_task(op_id, op_str, total)
115
+ self.add_task(op.get_full_op_id(), op_str, total)
117
116
 
118
- def get_task_total(self, op_id: str) -> int:
117
+ def get_task_total(self, full_op_id: str) -> int:
119
118
  """Return the current total value for the given task."""
120
- task = self.op_id_to_task[op_id]
119
+ task = self.full_op_id_to_task[full_op_id]
121
120
  return self.progress._tasks[task].total
122
121
 
123
- def get_task_description(self, op_id: str) -> str:
122
+ def get_task_description(self, full_op_id: str) -> str:
124
123
  """Return the current description for the given task."""
125
- task = self.op_id_to_task[op_id]
124
+ task = self.full_op_id_to_task[full_op_id]
126
125
  return self.progress._tasks[task].description
127
126
 
128
127
  @abstractmethod
129
- def add_task(self, op_id: str, op_str: str, total: int):
128
+ def add_task(self, full_op_id: str, op_str: str, total: int):
130
129
  """Initialize progress tracking for operator execution with total items"""
131
130
  pass
132
131
 
@@ -136,7 +135,7 @@ class ProgressManager(ABC):
136
135
  pass
137
136
 
138
137
  @abstractmethod
139
- def incr(self, op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
138
+ def incr(self, full_op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
140
139
  """
141
140
  Advance the progress bar for the given operator by one. Modify the downstream operators'
142
141
  progress bar `total` to reflect the number of outputs produced by this operator.
@@ -156,16 +155,6 @@ class ProgressManager(ABC):
156
155
  """Clean up and finalize progress tracking"""
157
156
  pass
158
157
 
159
- def update_stats(self, op_id: str, **kwargs):
160
- """Update progress statistics"""
161
- for key, value in kwargs.items():
162
- if hasattr(self.op_id_to_stats[op_id], key):
163
- if key != "total_cost":
164
- setattr(self.op_id_to_stats[op_id], key, value)
165
- else:
166
- self.op_id_to_stats[op_id].total_cost += value
167
- self.op_id_to_stats[op_id].memory_usage_mb = get_memory_usage()
168
-
169
158
 
170
159
  class MockProgressManager(ProgressManager):
171
160
  """Mock progress manager for testing purposes"""
@@ -173,13 +162,13 @@ class MockProgressManager(ProgressManager):
173
162
  def __init__(self, plan: PhysicalPlan | SentinelPlan, num_samples: int | None = None):
174
163
  pass
175
164
 
176
- def add_task(self, op_id: str, op_str: str, total: int):
165
+ def add_task(self, full_op_id: str, op_str: str, total: int):
177
166
  pass
178
167
 
179
168
  def start(self):
180
169
  pass
181
170
 
182
- def incr(self, op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
171
+ def incr(self, full_op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
183
172
  pass
184
173
 
185
174
  def finish(self):
@@ -192,7 +181,7 @@ class PZProgressManager(ProgressManager):
192
181
  super().__init__(plan, num_samples)
193
182
  self.console = Console()
194
183
 
195
- def add_task(self, op_id: str, op_str: str, total: int):
184
+ def add_task(self, full_op_id: str, op_str: str, total: int):
196
185
  """Add a new task to the progress bar"""
197
186
  task = self.progress.add_task(
198
187
  f"[blue]{op_str}",
@@ -205,10 +194,10 @@ class PZProgressManager(ProgressManager):
205
194
  )
206
195
 
207
196
  # store the mapping of operator ID to task ID
208
- self.op_id_to_task[op_id] = task
197
+ self.full_op_id_to_task[full_op_id] = task
209
198
 
210
199
  # initialize the stats for this operation
211
- self.op_id_to_stats[op_id] = ProgressStats(start_time=time.time())
200
+ self.full_op_id_to_stats[full_op_id] = ProgressStats(start_time=time.time())
212
201
 
213
202
  def start(self):
214
203
  # print a newline before starting to separate from previous output
@@ -220,41 +209,41 @@ class PZProgressManager(ProgressManager):
220
209
  # start progress bar
221
210
  self.progress.start()
222
211
 
223
- def incr(self, op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
212
+ def incr(self, full_op_id: str, num_outputs: int = 1, display_text: str | None = None, **kwargs):
224
213
  # get the task for the given operation
225
- task = self.op_id_to_task.get(op_id)
214
+ task = self.full_op_id_to_task.get(full_op_id)
226
215
 
227
216
  # update statistics with any additional keyword arguments
228
217
  if kwargs != {}:
229
- self.update_stats(op_id, **kwargs)
218
+ self.update_stats(full_op_id, **kwargs)
230
219
 
231
220
  # update progress bar and recent text in one update
232
221
  if display_text is not None:
233
- self.op_id_to_stats[op_id].recent_text = display_text
222
+ self.full_op_id_to_stats[full_op_id].recent_text = display_text
234
223
 
235
224
  # if num_outputs is not 1, update the downstream operators' progress bar total for any
236
225
  # operator which is not an AggregateOp or LimitScanOp
237
226
  delta = num_outputs - 1
238
227
  if delta != 0:
239
- next_op = self.op_id_to_next_op[op_id]
228
+ next_op = self.full_op_id_to_next_op[full_op_id]
240
229
  while next_op is not None:
241
230
  if not isinstance(next_op, (AggregateOp, LimitScanOp)):
242
- next_op_id = next_op.get_op_id()
243
- next_task = self.op_id_to_task[next_op_id]
244
- self.progress.update(next_task, total=self.get_task_total(next_op_id) + delta)
231
+ next_full_op_id = next_op.get_full_op_id()
232
+ next_task = self.full_op_id_to_task[next_full_op_id]
233
+ self.progress.update(next_task, total=self.get_task_total(next_full_op_id) + delta)
245
234
 
246
- next_op = self.op_id_to_next_op[next_op_id]
235
+ next_op = self.full_op_id_to_next_op[next_full_op_id]
247
236
 
248
237
  # advance the progress bar for this task
249
238
  self.progress.update(
250
239
  task,
251
240
  advance=1,
252
- description=f"[bold blue]{self.get_task_description(op_id)}",
253
- cost=self.op_id_to_stats[op_id].total_cost,
254
- success=self.op_id_to_stats[op_id].success_count,
255
- failed=self.op_id_to_stats[op_id].failure_count,
241
+ description=f"[bold blue]{self.get_task_description(full_op_id)}",
242
+ cost=self.full_op_id_to_stats[full_op_id].total_cost,
243
+ success=self.full_op_id_to_stats[full_op_id].success_count,
244
+ failed=self.full_op_id_to_stats[full_op_id].failure_count,
256
245
  memory=get_memory_usage(),
257
- recent=f"{self.op_id_to_stats[op_id].recent_text}" if display_text is not None else "",
246
+ recent=f"{self.full_op_id_to_stats[full_op_id].recent_text}" if display_text is not None else "",
258
247
  refresh=True,
259
248
  )
260
249
 
@@ -262,15 +251,25 @@ class PZProgressManager(ProgressManager):
262
251
  self.progress.stop()
263
252
 
264
253
  # compute total cost, success, and failure
265
- total_cost = sum(stats.total_cost for stats in self.op_id_to_stats.values())
266
- # success_count = sum(stats.success_count for stats in self.op_id_to_stats.values())
267
- # failure_count = sum(stats.failure_count for stats in self.op_id_to_stats.values())
254
+ total_cost = sum(stats.total_cost for stats in self.full_op_id_to_stats.values())
255
+ # success_count = sum(stats.success_count for stats in self.full_op_id_to_stats.values())
256
+ # failure_count = sum(stats.failure_count for stats in self.full_op_id_to_stats.values())
268
257
 
269
258
  # Print final stats on new lines after progress display
270
259
  print(f"Total time: {time.time() - self.start_time:.2f}s")
271
260
  print(f"Total cost: ${total_cost:.4f}")
272
261
  # print(f"Success rate: {success_count}/{success_count + failure_count}")
273
262
 
263
+ def update_stats(self, full_op_id: str, **kwargs):
264
+ """Update progress statistics"""
265
+ for key, value in kwargs.items():
266
+ if hasattr(self.full_op_id_to_stats[full_op_id], key):
267
+ if key != "total_cost":
268
+ setattr(self.full_op_id_to_stats[full_op_id], key, value)
269
+ else:
270
+ self.full_op_id_to_stats[full_op_id].total_cost += value
271
+ self.full_op_id_to_stats[full_op_id].memory_usage_mb = get_memory_usage()
272
+
274
273
  class PZSentinelProgressManager(ProgressManager):
275
274
  def __init__(self, plan: SentinelPlan, sample_budget: int):
276
275
  # overall progress bar
@@ -314,11 +313,11 @@ class PZSentinelProgressManager(ProgressManager):
314
313
  )
315
314
  self.live_display = Live(self.progress_table, refresh_per_second=10)
316
315
 
317
- # initialize mapping from op_id --> ProgressStats
318
- self.op_id_to_stats: dict[str, ProgressStats] = {}
316
+ # initialize mapping from logical_op_id --> ProgressStats
317
+ self.logical_op_id_to_stats: dict[str, ProgressStats] = {}
319
318
 
320
- # initialize mapping from op_id --> task
321
- self.op_id_to_task = {}
319
+ # initialize mapping from logical_op_id --> task
320
+ self.logical_op_id_to_task = {}
322
321
 
323
322
  # initialize start time
324
323
  self.start_time = None
@@ -341,12 +340,12 @@ class PZSentinelProgressManager(ProgressManager):
341
340
  is_llm_retrieve = isinstance(physical_op, RetrieveOp) and isinstance(physical_op.index, Collection)
342
341
  return is_llm_convert or is_llm_filter or is_llm_retrieve
343
342
 
344
- def get_task_description(self, op_id: str) -> str:
343
+ def get_task_description(self, logical_op_id: str) -> str:
345
344
  """Return the current description for the given task."""
346
- task = self.op_id_to_task[op_id]
345
+ task = self.logical_op_id_to_task[logical_op_id]
347
346
  return self.op_progress._tasks[task].description
348
347
 
349
- def add_task(self, op_id: str, op_str: str, total: int):
348
+ def add_task(self, logical_op_id: str, op_str: str, total: int):
350
349
  """Add a new task to the op progress bars"""
351
350
  task = self.op_progress.add_task(
352
351
  f"[blue]{op_str}",
@@ -359,10 +358,10 @@ class PZSentinelProgressManager(ProgressManager):
359
358
  )
360
359
 
361
360
  # store the mapping of operator ID to task ID
362
- self.op_id_to_task[op_id] = task
361
+ self.logical_op_id_to_task[logical_op_id] = task
363
362
 
364
363
  # initialize the stats for this operation
365
- self.op_id_to_stats[op_id] = ProgressStats(start_time=time.time())
364
+ self.logical_op_id_to_stats[logical_op_id] = ProgressStats(start_time=time.time())
366
365
 
367
366
  def start(self):
368
367
  # print a newline before starting to separate from previous output
@@ -374,29 +373,29 @@ class PZSentinelProgressManager(ProgressManager):
374
373
  # start progress bars
375
374
  self.live_display.start()
376
375
 
377
- def incr(self, op_id: str, num_samples: int, display_text: str | None = None, **kwargs):
376
+ def incr(self, logical_op_id: str, num_samples: int, display_text: str | None = None, **kwargs):
378
377
  # TODO: (above) organize progress bars into a Live / Table / Panel or something
379
378
  # get the task for the given operation
380
- task = self.op_id_to_task.get(op_id)
379
+ task = self.logical_op_id_to_task.get(logical_op_id)
381
380
 
382
381
  # update statistics with any additional keyword arguments
383
382
  if kwargs != {}:
384
- self.update_stats(op_id, **kwargs)
383
+ self.update_stats(logical_op_id, **kwargs)
385
384
 
386
385
  # update progress bar and recent text in one update
387
386
  if display_text is not None:
388
- self.op_id_to_stats[op_id].recent_text = display_text
387
+ self.logical_op_id_to_stats[logical_op_id].recent_text = display_text
389
388
 
390
- # advance the op progress bar for this op_id
389
+ # advance the op progress bar for this logical_op_id
391
390
  self.op_progress.update(
392
391
  task,
393
392
  advance=num_samples,
394
- description=f"[bold blue]{self.get_task_description(op_id)}",
395
- cost=self.op_id_to_stats[op_id].total_cost,
396
- success=self.op_id_to_stats[op_id].success_count,
397
- failed=self.op_id_to_stats[op_id].failure_count,
393
+ description=f"[bold blue]{self.get_task_description(logical_op_id)}",
394
+ cost=self.logical_op_id_to_stats[logical_op_id].total_cost,
395
+ success=self.logical_op_id_to_stats[logical_op_id].success_count,
396
+ failed=self.logical_op_id_to_stats[logical_op_id].failure_count,
398
397
  memory=get_memory_usage(),
399
- recent=f"{self.op_id_to_stats[op_id].recent_text}" if display_text is not None else "",
398
+ recent=f"{self.logical_op_id_to_stats[logical_op_id].recent_text}" if display_text is not None else "",
400
399
  refresh=True,
401
400
  )
402
401
 
@@ -404,7 +403,7 @@ class PZSentinelProgressManager(ProgressManager):
404
403
  self.overall_progress.update(
405
404
  self.overall_task_id,
406
405
  advance=num_samples,
407
- cost=sum(stats.total_cost for _, stats in self.op_id_to_stats.items()),
406
+ cost=sum(stats.total_cost for _, stats in self.logical_op_id_to_stats.items()),
408
407
  refresh=True,
409
408
  )
410
409
 
@@ -415,15 +414,25 @@ class PZSentinelProgressManager(ProgressManager):
415
414
  self.live_display.stop()
416
415
 
417
416
  # compute total cost, success, and failure
418
- total_cost = sum(stats.total_cost for stats in self.op_id_to_stats.values())
419
- # success_count = sum(stats.success_count for stats in self.op_id_to_stats.values())
420
- # failure_count = sum(stats.failure_count for stats in self.op_id_to_stats.values())
417
+ total_cost = sum(stats.total_cost for stats in self.logical_op_id_to_stats.values())
418
+ # success_count = sum(stats.success_count for stats in self.logical_op_id_to_stats.values())
419
+ # failure_count = sum(stats.failure_count for stats in self.logical_op_id_to_stats.values())
421
420
 
422
421
  # Print final stats on new lines after progress display
423
422
  print(f"Total opt. time: {time.time() - self.start_time:.2f}s")
424
423
  print(f"Total opt. cost: ${total_cost:.4f}")
425
424
  # print(f"Success rate: {success_count}/{success_count + failure_count}")
426
425
 
426
+ def update_stats(self, logical_op_id: str, **kwargs):
427
+ """Update progress statistics"""
428
+ for key, value in kwargs.items():
429
+ if hasattr(self.logical_op_id_to_stats[logical_op_id], key):
430
+ if key != "total_cost":
431
+ setattr(self.logical_op_id_to_stats[logical_op_id], key, value)
432
+ else:
433
+ self.logical_op_id_to_stats[logical_op_id].total_cost += value
434
+ self.logical_op_id_to_stats[logical_op_id].memory_usage_mb = get_memory_usage()
435
+
427
436
  def create_progress_manager(
428
437
  plan: PhysicalPlan | SentinelPlan,
429
438
  num_samples: int | None = None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: palimpzest
3
- Version: 0.7.7
3
+ Version: 0.7.8
4
4
  Summary: Palimpzest is a system which enables anyone to process AI-powered analytical queries simply by defining them in a declarative language
5
5
  Author-email: MIT DSG Semantic Management Lab <michjc@csail.mit.edu>
6
6
  Project-URL: homepage, https://palimpzest.org
@@ -15,7 +15,9 @@ Classifier: Programming Language :: Python :: 3.8
15
15
  Requires-Python: >=3.8
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
+ Requires-Dist: beautifulsoup4>=4.13.4
18
19
  Requires-Dist: chromadb>=0.6.3
20
+ Requires-Dist: colorama>=0.4.6
19
21
  Requires-Dist: fastapi~=0.115.0
20
22
  Requires-Dist: gradio>=5.26.0
21
23
  Requires-Dist: numpy>=1.23.2
@@ -31,9 +33,9 @@ Requires-Dist: pyarrow<19.0.0,>=15.0.0; python_version >= "3.12"
31
33
  Requires-Dist: pypdf>=5.1.0
32
34
  Requires-Dist: pytest-mock>=3.14.0
33
35
  Requires-Dist: pyyaml>=6.0.1
34
- Requires-Dist: ragatouille>=0.0.9
35
36
  Requires-Dist: requests>=2.25
36
37
  Requires-Dist: ruff>=0.9.0
38
+ Requires-Dist: sentence-transformers>=4.1.0
37
39
  Requires-Dist: setuptools>=70.1.1
38
40
  Requires-Dist: tabulate>=0.9.0
39
41
  Requires-Dist: together>=1.5.5
@@ -1,16 +1,16 @@
1
1
  palimpzest/__init__.py,sha256=t-xBXOEaah4dEyHcnKJhDHpPRx7-P2QVwjBmdExVdNc,874
2
- palimpzest/constants.py,sha256=YxqIGnoUInTGSTcSV5Ug9b4i_M46UdAX0n1XONzMLi8,16243
2
+ palimpzest/constants.py,sha256=xXkq_y_fdkjHeu9G0nEoOvpu4N4TtFQgTCDAj93Uf1E,17933
3
3
  palimpzest/policy.py,sha256=2cMio_AUfZv6lksr_klfP747G4w1nsZJtfmt6zjeaMk,12656
4
- palimpzest/sets.py,sha256=0l__tPn87FVeltlG4HNSJl1twchAek-BtwwpTRElubU,15154
4
+ palimpzest/sets.py,sha256=zWpNy466-Klg18wqAd_1t46JZzu44l_CbTbAkmbK-_w,15050
5
5
  palimpzest/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  palimpzest/core/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- palimpzest/core/data/dataclasses.py,sha256=YmMK0Ob9PT10yvK39Km4ilcJrP7pr-afCJlYWni21u0,34154
7
+ palimpzest/core/data/dataclasses.py,sha256=EJ2l7OGdaIzCKFMp7vk9K4POIE1cTQVN7_zovLo1zhY,34919
8
8
  palimpzest/core/data/datareaders.py,sha256=SMX92MVy_fj1WYv_B-EksdbFdj5tOOFMGXqBfGPB9Cs,16725
9
9
  palimpzest/core/elements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  palimpzest/core/elements/filters.py,sha256=fU2x0eWDwfP52_5fUmqJXTuhs4H0vvHtPZLdA3IIw8I,1642
11
11
  palimpzest/core/elements/groupbysig.py,sha256=1qHuR2-fcW-E4rxPSieYGSXZYwvFaPwf1ld9VPWvWjw,2233
12
- palimpzest/core/elements/index.py,sha256=GgR4_RoyCY9M6KXQ4m6oW8tAsV1SrjWk6i7G1-iSr10,2477
13
- palimpzest/core/elements/records.py,sha256=sR9-w28UYNZn3rDXCTfHWlsqXem-F-3ilKbA3RYUjtw,15002
12
+ palimpzest/core/elements/index.py,sha256=adO67DgzHhA4lBME0-h4SjXfdz9UcNMSDGXTpUdKbgE,1929
13
+ palimpzest/core/elements/records.py,sha256=7CDu2yMy83kcrWXerHHVSfSICDR83fiqrYZEB1V5LnM,15007
14
14
  palimpzest/core/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  palimpzest/core/lib/fields.py,sha256=czzN7v4AgRzMSqgCWOelTEOJz3r-RCvwRTxQ3B0xG0U,4099
16
16
  palimpzest/core/lib/schemas.py,sha256=_WMPR_YcAIeUNRne7gQLJHLqDNVz7LBxFXN3osu659Q,17105
@@ -21,53 +21,54 @@ palimpzest/prompts/critique_and_refine_convert_prompts.py,sha256=WoXExBxQ7twswd9
21
21
  palimpzest/prompts/filter_prompts.py,sha256=iQjn-39h3L0E5wng_UPgAXRHrP1ok329TXpOgZ6Wn1w,2372
22
22
  palimpzest/prompts/moa_aggregator_convert_prompts.py,sha256=BQRrtGdr53PTqvXzmFh8kfQ_w9KoKw-zTtmdo-8RFjo,2887
23
23
  palimpzest/prompts/moa_proposer_convert_prompts.py,sha256=vcme_K-QA7--slFo91gKTh7x7l66x0u9rBEXI8NsN_I,3460
24
- palimpzest/prompts/prompt_factory.py,sha256=2jzNNzJbYK9ZdZmYvnchSLyLmolOvLgJn2lDMRY01QQ,34025
24
+ palimpzest/prompts/prompt_factory.py,sha256=ra2swEg46Y5J446mcqeSjomk7j2DOE6jVMiBcZCoU6I,34042
25
25
  palimpzest/prompts/split_merge_prompts.py,sha256=0mTZeJhxtvlmv-ro0KwQpxlGgSTwyUhGRHJ-uHk2Zlw,3146
26
26
  palimpzest/prompts/split_proposer_prompts.py,sha256=TBHLGaM_ycHjGHrp1JziJoJDw4S5_F4afKSAdt2McKk,2624
27
27
  palimpzest/prompts/util_phrases.py,sha256=NWrcHfjJyiOY16Jyt7R50moVnlJDyvSBZ9kBqyX2WQo,751
28
28
  palimpzest/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  palimpzest/query/execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- palimpzest/query/execution/execution_strategy.py,sha256=OZfTh7hD933ZYX8-V3rhHx8g6QF6nnmPflvvTbsyMlI,21890
31
- palimpzest/query/execution/execution_strategy_type.py,sha256=IMeb0Y6B2Cx1L5omWP0ryKQxgOv79RuS5I67exdpJ1Q,827
32
- palimpzest/query/execution/mab_execution_strategy.py,sha256=GVSdUydcqnwOme7yYJO6KPzf5ogQ8FGZFabnDLdcCtU,28560
33
- palimpzest/query/execution/parallel_execution_strategy.py,sha256=qNledqrPdnQRNTpcb_5f1TTOkQJCKftq-0Jc2RFnnIw,9174
30
+ palimpzest/query/execution/all_sample_execution_strategy.py,sha256=0-n_NxwC4eQ0d7qAfvNdV9grBFBIUgrpYGNefzl33No,10470
31
+ palimpzest/query/execution/execution_strategy.py,sha256=G5q-obhzO_odfXslR-YAQJd6vMs3TJsrfXhdmN-y-EA,21857
32
+ palimpzest/query/execution/execution_strategy_type.py,sha256=7zKpaB5j5cialRX15dx9nAUjtx8b8JjEHlSuPyeyd90,1076
33
+ palimpzest/query/execution/mab_execution_strategy.py,sha256=9c1F5d8RKjmDCS6AN8wrkbQha8kvSR24XtUW3v80R08,34756
34
+ palimpzest/query/execution/parallel_execution_strategy.py,sha256=H47MpktsOYFDcnm1lINNUfgjJhf2WxLA1iROyGFBmEc,17381
34
35
  palimpzest/query/execution/random_sampling_execution_strategy.py,sha256=jWPd-sBsTbkwxXRlKgnR3FO6jEEqViaYUvBb0RJkP5g,11585
35
- palimpzest/query/execution/single_threaded_execution_strategy.py,sha256=2EAYfO3qXf5HFmCZGGL_vtLHHA6kHOlQaaJaifRhHdE,12259
36
+ palimpzest/query/execution/single_threaded_execution_strategy.py,sha256=-31gg7ha0D97g2zipzF72f7nrJFcDuiRKmo10_q5ykE,12389
36
37
  palimpzest/query/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- palimpzest/query/generators/api_client_factory.py,sha256=IxRLUcU4YXpW2Dy4ka-R7idWZ0WOKofI2JgzA_Drv3s,1091
38
- palimpzest/query/generators/generators.py,sha256=Ty8yABC8jInBU0Z9KdMT98-BBIZJDsG0sVDMxJ-mKNI,26317
38
+ palimpzest/query/generators/api_client_factory.py,sha256=lH9p5wRehECc7m1dWOGAGivD2F5x6hGh5kQCMw2-tfs,1065
39
+ palimpzest/query/generators/generators.py,sha256=HOquErARyNTFya0GiudWyV2UCJEz5g1q2FufXPT7nHE,26032
39
40
  palimpzest/query/operators/__init__.py,sha256=fq0YvXuqxLtQyI_LuyOe02KYqYCmD-Sh1M-FcVWnr_A,3163
40
- palimpzest/query/operators/aggregate.py,sha256=nVLgJkB8oWj4Urclr8TV2w0fL9LZwU6x0Cf4dxMy19A,10212
41
+ palimpzest/query/operators/aggregate.py,sha256=G7jH2k0673t0TtzchCB0a9LLhSWwZb8X20FtuNw8xTQ,10288
41
42
  palimpzest/query/operators/code_synthesis_convert.py,sha256=Oki3ZJi6lRD3NFKylulmreFniRVYjrbuKWFe_M90HXM,20992
42
- palimpzest/query/operators/convert.py,sha256=4wxDINLTyaa1N9GU-rGkX0H9-hYvGbgtb9ysMJIzPLA,16849
43
+ palimpzest/query/operators/convert.py,sha256=wneGeUmQifsSOmBz6HZBdwvmaO-o7UbsJyrwY3_pkyE,16859
43
44
  palimpzest/query/operators/critique_and_refine_convert.py,sha256=PCAJIJV5ljADkCmKfkl5Neaf6mu91zFVY_D9m_Prr1c,5179
44
- palimpzest/query/operators/filter.py,sha256=4UK_0xyUtQQdcOy68G8v5EBBu0mOIEEASkMeUkyv4bE,10315
45
- palimpzest/query/operators/limit.py,sha256=xnGC6zmHdPm_2YCtsVRBL2iwXcUB1lP_vsEkuHV4nmY,2103
45
+ palimpzest/query/operators/filter.py,sha256=nb3cb7OekqA60SsWxbNSVxZ_Bm-ddLLZ5ql2xSC0-dg,10325
46
+ palimpzest/query/operators/limit.py,sha256=m-rob4SxdmR-JeDGGgjgss7uQkjviMxsj1bnd5wyjWY,2113
46
47
  palimpzest/query/operators/logical.py,sha256=5AqUeSyGgLV3uRXn0ZCYSYzrk1eeuSAgSPYTM9gHMdI,16163
47
- palimpzest/query/operators/map.py,sha256=SngwvygveBfN7VGVvpYIIIcGB7tjAZH3PGPJgObw1JQ,4940
48
+ palimpzest/query/operators/map.py,sha256=dLMQR2vgkCtr2SsBbgBxvgcqf9TO9B40V8ylPtxukY4,4950
48
49
  palimpzest/query/operators/mixture_of_agents_convert.py,sha256=CU6X7KG1Ivx-8OZ6HSye6auoDUaz0EgVai68_AGxEVA,6675
49
- palimpzest/query/operators/physical.py,sha256=I9mijgVMxdgYuWiqBD50AJFy75F0BrcsT2-LNE7_w4M,7884
50
- palimpzest/query/operators/project.py,sha256=djlKXCkz2b-h1phsD8tWqewcTLKBfWMgsyZ52oFN2MY,2084
50
+ palimpzest/query/operators/physical.py,sha256=HJu6eksVYILEc0Q_YKCtmBuOXNkryxXKf9LxwESOV-k,8052
51
+ palimpzest/query/operators/project.py,sha256=zm01I404wpUGjigK3ATn5ApY7yf1HVFd1ZYWfVlsZsI,2094
51
52
  palimpzest/query/operators/rag_convert.py,sha256=kg5PfukNuUs9MWu9BMqsn0CC2L6WchLeg20BWWD7V0Q,10699
52
- palimpzest/query/operators/retrieve.py,sha256=jtQVM4NNIBAzx27K8UizbEqFMRfYouQlP0hBB-UWMms,13983
53
- palimpzest/query/operators/scan.py,sha256=oYzf2KCpo1RPkN3bNY1z6rjSiNS0HIx8b3BlZhMAAfQ,5860
53
+ palimpzest/query/operators/retrieve.py,sha256=9Z52pw8E3DW1wcSUfTZKtL1ImS8FzYJOfUY4F_rJIWE,13093
54
+ palimpzest/query/operators/scan.py,sha256=pOS_9fkBEjwsabLK9Fz08c9n7L74-4mhiWWiVbdFrII,5870
54
55
  palimpzest/query/operators/split_convert.py,sha256=QSc4_WKeysl32Q8ovK25UgPwskxS9baJ-sl23fv3ykA,7719
55
56
  palimpzest/query/optimizer/__init__.py,sha256=qJtR1nwGurkazInpdwJVQ1vVmBfsA_qXGXU71RkycSE,2465
56
- palimpzest/query/optimizer/cost_model.py,sha256=VCXCiiG9gBXoUEMifz-qP42RIC0DEY3ONeg64bmoHYM,30554
57
- palimpzest/query/optimizer/optimizer.py,sha256=SyHtmC1UiquG6of7VM045S_Qsr07HG18SDOKPf5FhB0,21438
57
+ palimpzest/query/optimizer/cost_model.py,sha256=mUPpcKUMxOtg4guY9d26ExN-bFjXVu_Dvvp4eRXyw6A,30190
58
+ palimpzest/query/optimizer/optimizer.py,sha256=hZtnX7iCpsiU8T_8i7a4c91ZYUAcA0KeAX5TZiZJ65s,21229
58
59
  palimpzest/query/optimizer/optimizer_strategy.py,sha256=Aek-LsQQO9VuxI1ZLkmadxik87-tRjy4v1_edbAhLMs,9234
59
60
  palimpzest/query/optimizer/optimizer_strategy_type.py,sha256=V-MMHvJdnfZKoUX1xxxwh66q1RjN2FL35IsiT1C62c8,1084
60
- palimpzest/query/optimizer/plan.py,sha256=Ojz8krSkjV2FjhFH2b_V3qPUtx5pyoHiHXUp0eqqa1U,5662
61
- palimpzest/query/optimizer/primitives.py,sha256=DuzHEOxyIsVaBCGfWjXzoHriawhoVEzZTXjYY-Laslw,4033
62
- palimpzest/query/optimizer/rules.py,sha256=xzMGcKZF5UpgNhEG1RUk8mOVY2SzpcwJf6fuMuqOVkY,48093
63
- palimpzest/query/optimizer/tasks.py,sha256=CQIeYdjPoegk4Yj7-BzmLZISSxRQNmjK_2XY0TUeiE0,24850
61
+ palimpzest/query/optimizer/plan.py,sha256=i6lOTSNMcVNf0SruMD3lZ_-Nq3_UWq5X6QFd_lRvYA4,5682
62
+ palimpzest/query/optimizer/primitives.py,sha256=r0zjavxxVCCFABXDwdQxRJmQek6WLo1777suoy7CWEc,4038
63
+ palimpzest/query/optimizer/rules.py,sha256=lPMtOunfG-mcAXn7crYD_ULAfkBRXeeGRr8-0NzzZjU,46853
64
+ palimpzest/query/optimizer/tasks.py,sha256=pPDIV-efm_2S9WVYubu0QGuhh5-4c9SM3XtvfhpLDOY,24855
64
65
  palimpzest/query/processor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
66
  palimpzest/query/processor/config.py,sha256=dA3GB-nEAIQBllEx4rFy1W8iHYYEZOMOi4MgfZgODuQ,3851
66
67
  palimpzest/query/processor/nosentinel_processor.py,sha256=E5XvDLqTuG5aIy-g5bMbDx0UTUBwjNlAuo9W5AvpsCo,1224
67
- palimpzest/query/processor/processing_strategy_type.py,sha256=umQh1fnOYGWDj2m3dSMlAPJP3DQQwlYWGQyMkZZc5Sk,1333
68
+ palimpzest/query/processor/processing_strategy_type.py,sha256=Blq-nKwjbj-BAzCv5QLdYUbj-RhsGZrDKt1xk4H4RPI,1419
68
69
  palimpzest/query/processor/query_processor.py,sha256=13DcIeoISPbEgrTaXR-fCT2XfqYXjC-16midStaaVSg,3496
69
70
  palimpzest/query/processor/query_processor_factory.py,sha256=2qiFs6dyskreJti7uf179Bs5aJgYXBpP_pgfaIzqpzg,7492
70
- palimpzest/query/processor/sentinel_processor.py,sha256=j7GlhuAEGYX_Wg6irzBV7uiC8ZuAyBe7UdPkCrJBxhY,3976
71
+ palimpzest/query/processor/sentinel_processor.py,sha256=QOgrMBWqZAdHO9WqjrSiRGYWNRRh84UJ-S8EsDM_nUo,3870
71
72
  palimpzest/query/processor/streaming_processor.py,sha256=tR0KVW-lLLF1MEahaasuqwiTYVw7Y6P0qw2IBKbDZho,5996
72
73
  palimpzest/schemabuilder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
74
  palimpzest/schemabuilder/schema_builder.py,sha256=kGEv-Adba-FNziRrlG0zwx317IuD7rmzNl2GecvnbDw,8528
@@ -81,14 +82,14 @@ palimpzest/utils/datareader_helpers.py,sha256=-tkIf9iOF7mr-gyrrUQqnHWwRig4OGnowU
81
82
  palimpzest/utils/demo_helpers.py,sha256=80s2IxlkEOLtLfIEDw_u0cyuNzsjvh-79m12J1q5i_c,2403
82
83
  palimpzest/utils/env_helpers.py,sha256=n81KzoJ459pRxo7QmJA7duazwWsfoMGTHc71D2LatFk,334
83
84
  palimpzest/utils/field_helpers.py,sha256=Op18ThAnDlALiAkquUQbelHodZZYg378Ct1I8eIkKio,2291
84
- palimpzest/utils/generation_helpers.py,sha256=jveE9iQQtUQ94nuU6c1zuWoQMkwizr037S8si4n35jo,3230
85
+ palimpzest/utils/generation_helpers.py,sha256=KTeVQDXRwM18auR8YsLNR5AdPDjSgO0NoOBagfFdTMs,3213
85
86
  palimpzest/utils/hash_helpers.py,sha256=3A8dA7SbXTwnnvZvPVNqqMLlVRhCKyKF_bjNNAu3Exk,334
86
- palimpzest/utils/model_helpers.py,sha256=LO_Bw2P0if4BjNj6ss9X09x_jJ7013N-UBqRPuw4Tts,2404
87
- palimpzest/utils/progress.py,sha256=9k3RuUHaptZQVmg3VpUfDhLZrNbPSHXznoGw6B_Sb0U,17455
87
+ palimpzest/utils/model_helpers.py,sha256=utkjWvcKS7imF6Q39ef82pE8IRvDPoNPis1Mayp_N8w,3074
88
+ palimpzest/utils/progress.py,sha256=RiV753fKV8dFCNan4_wvdN2S3gvTvyRPq4Ksz6nSV1U,18536
88
89
  palimpzest/utils/sandbox.py,sha256=Ge96gmzqeOGlNkMCG9A95_PB8wRQbvTFua136of8FcA,6465
89
90
  palimpzest/utils/udfs.py,sha256=LjHic54B1az-rKgNLur0wOpaz2ko_UodjLEJrazkxvY,1854
90
- palimpzest-0.7.7.dist-info/licenses/LICENSE,sha256=5GUlHy9lr-Py9kvV38FF1m3yy3NqM18fefuE9wkWumo,1079
91
- palimpzest-0.7.7.dist-info/METADATA,sha256=xIJ_lL36fK_mJBGyBgn3msuaUadSnNWJd_eZa1obcJc,7151
92
- palimpzest-0.7.7.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
93
- palimpzest-0.7.7.dist-info/top_level.txt,sha256=raV06dJUgohefUn3ZyJS2uqp_Y76EOLA9Y2e_fxt8Ew,11
94
- palimpzest-0.7.7.dist-info/RECORD,,
91
+ palimpzest-0.7.8.dist-info/licenses/LICENSE,sha256=5GUlHy9lr-Py9kvV38FF1m3yy3NqM18fefuE9wkWumo,1079
92
+ palimpzest-0.7.8.dist-info/METADATA,sha256=w03zVIf1l4XAoD3tApPZEVJyP6067gm6AVkUvWdF4dQ,7230
93
+ palimpzest-0.7.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
+ palimpzest-0.7.8.dist-info/top_level.txt,sha256=raV06dJUgohefUn3ZyJS2uqp_Y76EOLA9Y2e_fxt8Ew,11
95
+ palimpzest-0.7.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.0.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5