palimpzest 0.8.1__py3-none-any.whl → 0.8.3__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 (61) hide show
  1. palimpzest/constants.py +38 -62
  2. palimpzest/core/data/dataset.py +1 -1
  3. palimpzest/core/data/iter_dataset.py +5 -5
  4. palimpzest/core/elements/groupbysig.py +1 -1
  5. palimpzest/core/elements/records.py +91 -109
  6. palimpzest/core/lib/schemas.py +23 -0
  7. palimpzest/core/models.py +3 -3
  8. palimpzest/prompts/__init__.py +2 -6
  9. palimpzest/prompts/convert_prompts.py +10 -66
  10. palimpzest/prompts/critique_and_refine_prompts.py +66 -0
  11. palimpzest/prompts/filter_prompts.py +8 -46
  12. palimpzest/prompts/join_prompts.py +12 -75
  13. palimpzest/prompts/{moa_aggregator_convert_prompts.py → moa_aggregator_prompts.py} +51 -2
  14. palimpzest/prompts/moa_proposer_prompts.py +87 -0
  15. palimpzest/prompts/prompt_factory.py +351 -479
  16. palimpzest/prompts/split_merge_prompts.py +51 -2
  17. palimpzest/prompts/split_proposer_prompts.py +48 -16
  18. palimpzest/prompts/utils.py +109 -0
  19. palimpzest/query/execution/all_sample_execution_strategy.py +1 -1
  20. palimpzest/query/execution/execution_strategy.py +4 -4
  21. palimpzest/query/execution/mab_execution_strategy.py +47 -23
  22. palimpzest/query/execution/parallel_execution_strategy.py +3 -3
  23. palimpzest/query/execution/single_threaded_execution_strategy.py +8 -8
  24. palimpzest/query/generators/generators.py +31 -17
  25. palimpzest/query/operators/__init__.py +15 -2
  26. palimpzest/query/operators/aggregate.py +21 -19
  27. palimpzest/query/operators/compute.py +6 -8
  28. palimpzest/query/operators/convert.py +12 -37
  29. palimpzest/query/operators/critique_and_refine.py +194 -0
  30. palimpzest/query/operators/distinct.py +7 -7
  31. palimpzest/query/operators/filter.py +13 -25
  32. palimpzest/query/operators/join.py +321 -192
  33. palimpzest/query/operators/limit.py +4 -4
  34. palimpzest/query/operators/mixture_of_agents.py +246 -0
  35. palimpzest/query/operators/physical.py +25 -2
  36. palimpzest/query/operators/project.py +4 -4
  37. palimpzest/query/operators/{rag_convert.py → rag.py} +202 -5
  38. palimpzest/query/operators/retrieve.py +10 -9
  39. palimpzest/query/operators/scan.py +9 -10
  40. palimpzest/query/operators/search.py +18 -24
  41. palimpzest/query/operators/split.py +321 -0
  42. palimpzest/query/optimizer/__init__.py +12 -8
  43. palimpzest/query/optimizer/optimizer.py +12 -10
  44. palimpzest/query/optimizer/rules.py +201 -108
  45. palimpzest/query/optimizer/tasks.py +18 -6
  46. palimpzest/query/processor/config.py +2 -2
  47. palimpzest/query/processor/query_processor.py +2 -2
  48. palimpzest/query/processor/query_processor_factory.py +9 -5
  49. palimpzest/validator/validator.py +7 -9
  50. {palimpzest-0.8.1.dist-info → palimpzest-0.8.3.dist-info}/METADATA +3 -8
  51. palimpzest-0.8.3.dist-info/RECORD +95 -0
  52. palimpzest/prompts/critique_and_refine_convert_prompts.py +0 -216
  53. palimpzest/prompts/moa_proposer_convert_prompts.py +0 -75
  54. palimpzest/prompts/util_phrases.py +0 -19
  55. palimpzest/query/operators/critique_and_refine_convert.py +0 -113
  56. palimpzest/query/operators/mixture_of_agents_convert.py +0 -140
  57. palimpzest/query/operators/split_convert.py +0 -170
  58. palimpzest-0.8.1.dist-info/RECORD +0 -95
  59. {palimpzest-0.8.1.dist-info → palimpzest-0.8.3.dist-info}/WHEEL +0 -0
  60. {palimpzest-0.8.1.dist-info → palimpzest-0.8.3.dist-info}/licenses/LICENSE +0 -0
  61. {palimpzest-0.8.1.dist-info → palimpzest-0.8.3.dist-info}/top_level.txt +0 -0
@@ -1,140 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from pydantic.fields import FieldInfo
4
-
5
- from palimpzest.constants import MODEL_CARDS, Model, PromptStrategy
6
- from palimpzest.core.elements.records import DataRecord
7
- from palimpzest.core.models import GenerationStats, OperatorCostEstimates
8
- from palimpzest.query.generators.generators import Generator
9
- from palimpzest.query.operators.convert import LLMConvert
10
-
11
- # TYPE DEFINITIONS
12
- FieldName = str
13
-
14
-
15
- class MixtureOfAgentsConvert(LLMConvert):
16
-
17
- def __init__(
18
- self,
19
- proposer_models: list[Model],
20
- temperatures: list[float],
21
- aggregator_model: Model,
22
- proposer_prompt_strategy: PromptStrategy = PromptStrategy.COT_MOA_PROPOSER,
23
- aggregator_prompt_strategy: PromptStrategy = PromptStrategy.COT_MOA_AGG,
24
- *args,
25
- **kwargs,
26
- ):
27
- kwargs["model"] = None
28
- kwargs["prompt_strategy"] = None
29
- super().__init__(*args, **kwargs)
30
- sorted_proposers, sorted_temps = zip(*[(m, t) for m, t in sorted(zip(proposer_models, temperatures), key=lambda pair: pair[0])])
31
- self.proposer_models = list(sorted_proposers)
32
- self.temperatures = list(sorted_temps)
33
- self.aggregator_model = aggregator_model
34
- self.proposer_prompt_strategy = proposer_prompt_strategy
35
- self.aggregator_prompt_strategy = aggregator_prompt_strategy
36
-
37
- # create generators
38
- self.proposer_generators = [
39
- Generator(model, self.proposer_prompt_strategy, self.reasoning_effort, self.api_base, self.cardinality, self.desc, self.verbose)
40
- for model in proposer_models
41
- ]
42
- self.aggregator_generator = Generator(aggregator_model, self.aggregator_prompt_strategy, self.reasoning_effort, self.api_base, self.cardinality, self.desc, self.verbose)
43
-
44
- def __str__(self):
45
- op = super().__str__()
46
- op += f" Proposer Models: {self.proposer_models}\n"
47
- op += f" Temperatures: {self.temperatures}\n"
48
- op += f" Aggregator Model: {self.aggregator_model}\n"
49
- op += f" Proposer Prompt Strategy: {self.proposer_prompt_strategy.value}\n"
50
- op += f" Aggregator Prompt Strategy: {self.aggregator_prompt_strategy.value}\n"
51
- return op
52
-
53
- def get_id_params(self):
54
- id_params = super().get_id_params()
55
- id_params = {
56
- "proposer_models": [model.value for model in self.proposer_models],
57
- "temperatures": self.temperatures,
58
- "aggregator_model": self.aggregator_model.value,
59
- "proposer_prompt_strategy": self.proposer_prompt_strategy.value,
60
- "aggregator_prompt_strategy": self.aggregator_prompt_strategy.value,
61
- **id_params,
62
- }
63
-
64
- return id_params
65
-
66
- def get_op_params(self):
67
- op_params = super().get_op_params()
68
- op_params = {
69
- "proposer_models": self.proposer_models,
70
- "temperatures": self.temperatures,
71
- "aggregator_model": self.aggregator_model,
72
- "proposer_prompt_strategy": self.proposer_prompt_strategy,
73
- "aggregator_prompt_strategy": self.aggregator_prompt_strategy,
74
- **op_params,
75
- }
76
-
77
- return op_params
78
-
79
- def is_image_conversion(self) -> bool:
80
- return self.proposer_prompt_strategy.is_image_prompt()
81
-
82
- def naive_cost_estimates(self, source_op_cost_estimates: OperatorCostEstimates) -> OperatorCostEstimates:
83
- """
84
- Currently, we are using multiple proposer models with different temperatures to synthesize
85
- answers, which are then aggregated and summarized by a single aggregator model. Thus, we
86
- roughly expect to incur the cost and time of an LLMConvert * (len(proposer_models) + 1).
87
- In practice, this naive quality estimate will be overwritten by the CostModel's estimate
88
- once it executes a few instances of the operator.
89
- """
90
- # temporarily set self.model so that super().naive_cost_estimates(...) can compute an estimate
91
- self.model = self.proposer_models[0]
92
-
93
- # get naive cost estimates for single LLM call and scale it by number of LLMs used in MoA
94
- naive_op_cost_estimates = super().naive_cost_estimates(source_op_cost_estimates)
95
- naive_op_cost_estimates.time_per_record *= (len(self.proposer_models) + 1)
96
- naive_op_cost_estimates.time_per_record_lower_bound = naive_op_cost_estimates.time_per_record
97
- naive_op_cost_estimates.time_per_record_upper_bound = naive_op_cost_estimates.time_per_record
98
- naive_op_cost_estimates.cost_per_record *= (len(self.proposer_models) + 1)
99
- naive_op_cost_estimates.cost_per_record_lower_bound = naive_op_cost_estimates.cost_per_record
100
- naive_op_cost_estimates.cost_per_record_upper_bound = naive_op_cost_estimates.cost_per_record
101
-
102
- # for naive setting, estimate quality as mean of all model qualities
103
- model_qualities = [
104
- MODEL_CARDS[model.value]["overall"] / 100.0
105
- for model in self.proposer_models + [self.aggregator_model]
106
- ]
107
- naive_op_cost_estimates.quality = sum(model_qualities)/(len(self.proposer_models) + 1)
108
- naive_op_cost_estimates.quality_lower_bound = naive_op_cost_estimates.quality
109
- naive_op_cost_estimates.quality_upper_bound = naive_op_cost_estimates.quality
110
-
111
- # reset self.model to be None
112
- self.model = None
113
-
114
- return naive_op_cost_estimates
115
-
116
- def convert(self, candidate: DataRecord, fields: dict[str, FieldInfo]) -> tuple[dict[str, list], GenerationStats]:
117
- # get input fields
118
- input_fields = self.get_input_fields()
119
-
120
- # execute generator models in sequence
121
- proposer_model_final_answers, proposer_model_generation_stats = [], []
122
- for proposer_generator, temperature in zip(self.proposer_generators, self.temperatures):
123
- gen_kwargs = {"project_cols": input_fields, "output_schema": self.output_schema, "temperature": temperature}
124
- _, reasoning, generation_stats, _ = proposer_generator(candidate, fields, json_output=False, **gen_kwargs)
125
- proposer_text = f"REASONING:{reasoning}\n"
126
- proposer_model_final_answers.append(proposer_text)
127
- proposer_model_generation_stats.append(generation_stats)
128
-
129
- # call the aggregator
130
- gen_kwargs = {
131
- "project_cols": input_fields,
132
- "output_schema": self.output_schema,
133
- "model_responses": proposer_model_final_answers,
134
- }
135
- field_answers, _, aggregator_gen_stats, _ = self.aggregator_generator(candidate, fields, **gen_kwargs)
136
-
137
- # compute the total generation stats
138
- generation_stats = sum(proposer_model_generation_stats) + aggregator_gen_stats
139
-
140
- return field_answers, generation_stats
@@ -1,170 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import math
4
-
5
- from pydantic.fields import FieldInfo
6
-
7
- from palimpzest.constants import (
8
- MODEL_CARDS,
9
- NAIVE_EST_NUM_INPUT_TOKENS,
10
- NAIVE_EST_NUM_OUTPUT_TOKENS,
11
- PromptStrategy,
12
- )
13
- from palimpzest.core.elements.records import DataRecord
14
- from palimpzest.core.models import GenerationStats, OperatorCostEstimates
15
- from palimpzest.query.generators.generators import Generator
16
- from palimpzest.query.operators.convert import LLMConvert
17
-
18
-
19
- class SplitConvert(LLMConvert):
20
- def __init__(self, num_chunks: int = 2, min_size_to_chunk: int = 1000, *args, **kwargs):
21
- kwargs["prompt_strategy"] = None
22
- super().__init__(*args, **kwargs)
23
- self.num_chunks = num_chunks
24
- self.min_size_to_chunk = min_size_to_chunk
25
- self.split_generator = Generator(self.model, PromptStrategy.SPLIT_PROPOSER, self.reasoning_effort, self.api_base, self.cardinality, self.desc, self.verbose)
26
- self.split_merge_generator = Generator(self.model, PromptStrategy.SPLIT_MERGER, self.reasoning_effort, self.api_base, self.cardinality, self.desc, self.verbose)
27
-
28
- # crude adjustment factor for naive estimation in no-sentinel setting
29
- self.naive_quality_adjustment = 0.6
30
-
31
- def __str__(self):
32
- op = super().__str__()
33
- op += f" Chunk Size: {str(self.num_chunks)}\n"
34
- op += f" Min Size to Chunk: {str(self.min_size_to_chunk)}\n"
35
- return op
36
-
37
- def get_id_params(self):
38
- id_params = super().get_id_params()
39
- id_params = {"num_chunks": self.num_chunks, "min_size_to_chunk": self.min_size_to_chunk, **id_params}
40
-
41
- return id_params
42
-
43
- def get_op_params(self):
44
- op_params = super().get_op_params()
45
- return {"num_chunks": self.num_chunks, "min_size_to_chunk": self.min_size_to_chunk, **op_params}
46
-
47
- def naive_cost_estimates(self, source_op_cost_estimates: OperatorCostEstimates) -> OperatorCostEstimates:
48
- """
49
- Update the cost per record and quality estimates produced by LLMConvert's naive estimates.
50
- We adjust the cost per record to account for the reduced number of input tokens following
51
- the retrieval of relevant chunks, and we make a crude estimate of the quality degradation
52
- that results from using a downsized input (although this may in fact improve quality in
53
- some cases).
54
- """
55
- # get naive cost estimates from LLMConvert
56
- naive_op_cost_estimates = super().naive_cost_estimates(source_op_cost_estimates)
57
-
58
- # re-compute cost per record assuming we use fewer input tokens; naively assume a single input field
59
- est_num_input_tokens = NAIVE_EST_NUM_INPUT_TOKENS
60
- est_num_output_tokens = NAIVE_EST_NUM_OUTPUT_TOKENS
61
- model_conversion_usd_per_record = (
62
- MODEL_CARDS[self.model.value]["usd_per_input_token"] * est_num_input_tokens
63
- + MODEL_CARDS[self.model.value]["usd_per_output_token"] * est_num_output_tokens
64
- )
65
-
66
- # set refined estimate of cost per record
67
- naive_op_cost_estimates.cost_per_record = model_conversion_usd_per_record
68
- naive_op_cost_estimates.cost_per_record_lower_bound = naive_op_cost_estimates.cost_per_record
69
- naive_op_cost_estimates.cost_per_record_upper_bound = naive_op_cost_estimates.cost_per_record
70
- naive_op_cost_estimates.quality = (naive_op_cost_estimates.quality) * self.naive_quality_adjustment
71
- naive_op_cost_estimates.quality_lower_bound = naive_op_cost_estimates.quality
72
- naive_op_cost_estimates.quality_upper_bound = naive_op_cost_estimates.quality
73
-
74
- return naive_op_cost_estimates
75
-
76
- def is_image_conversion(self) -> bool:
77
- """SplitConvert is currently disallowed on image conversions, so this must be False."""
78
- return False
79
-
80
- def get_text_chunks(self, text: str, num_chunks: int) -> list[str]:
81
- """
82
- Given a text string, chunk it into num_chunks substrings of roughly equal size.
83
- """
84
- chunks = []
85
-
86
- idx, chunk_size = 0, math.ceil(len(text) / num_chunks)
87
- while idx + chunk_size < len(text):
88
- chunks.append(text[idx : idx + chunk_size])
89
- idx += chunk_size
90
-
91
- if idx < len(text):
92
- chunks.append(text[idx:])
93
-
94
- return chunks
95
-
96
- def get_chunked_candidate(self, candidate: DataRecord, input_fields: list[str]) -> list[DataRecord]:
97
- """
98
- For each text field, chunk the content. If a field is smaller than the chunk size,
99
- simply include the full field.
100
- """
101
- # compute mapping from each field to its chunked content
102
- field_name_to_chunked_content = {}
103
- for field_name in input_fields:
104
- field = candidate.get_field_type(field_name)
105
- content = candidate[field_name]
106
-
107
- # do not chunk this field if it is not a string or a list of strings
108
- is_string_field = field.annotation in [str, str | None]
109
- is_list_string_field = field.annotation in [list[str], list[str] | None]
110
- if not (is_string_field or is_list_string_field):
111
- field_name_to_chunked_content[field_name] = [content]
112
- continue
113
-
114
- # if this is a list of strings, join the strings
115
- if is_list_string_field:
116
- content = "[" + ", ".join(content) + "]"
117
-
118
- # skip this field if its length is less than the min size to chunk
119
- if len(content) < self.min_size_to_chunk:
120
- field_name_to_chunked_content[field_name] = [content]
121
- continue
122
-
123
- # chunk the content
124
- field_name_to_chunked_content[field_name] = self.get_text_chunks(content, self.num_chunks)
125
-
126
- # compute the true number of chunks (may be 1 if all fields are not chunked)
127
- num_chunks = max(len(chunks) for chunks in field_name_to_chunked_content.values())
128
-
129
- # create the chunked canidates
130
- candidates = []
131
- for chunk_idx in range(num_chunks):
132
- candidate_copy = candidate.copy()
133
- for field_name in input_fields:
134
- field_chunks = field_name_to_chunked_content[field_name]
135
- candidate_copy[field_name] = field_chunks[chunk_idx] if len(field_chunks) > 1 else field_chunks[0]
136
-
137
- candidates.append(candidate_copy)
138
-
139
- return candidates
140
-
141
- def convert(self, candidate: DataRecord, fields: dict[str, FieldInfo]) -> tuple[dict[str, list], GenerationStats]:
142
- # get the set of input fields to use for the convert operation
143
- input_fields = self.get_input_fields()
144
-
145
- # lookup most relevant chunks for each field using embedding search
146
- candidate_copy = candidate.copy()
147
- chunked_candidates = self.get_chunked_candidate(candidate_copy, input_fields)
148
-
149
- # construct kwargs for generation
150
- gen_kwargs = {"project_cols": input_fields, "output_schema": self.output_schema}
151
-
152
- # generate outputs for each chunk separately
153
- chunk_outputs, chunk_generation_stats_lst = [], []
154
- for candidate in chunked_candidates:
155
- _, reasoning, chunk_generation_stats, _ = self.split_generator(candidate, fields, json_output=False, **gen_kwargs)
156
- chunk_outputs.append(reasoning)
157
- chunk_generation_stats_lst.append(chunk_generation_stats)
158
-
159
- # call the merger
160
- gen_kwargs = {
161
- "project_cols": input_fields,
162
- "output_schema": self.output_schema,
163
- "chunk_outputs": chunk_outputs,
164
- }
165
- field_answers, _, merger_gen_stats, _ = self.split_merge_generator(candidate, fields, **gen_kwargs)
166
-
167
- # compute the total generation stats
168
- generation_stats = sum(chunk_generation_stats_lst) + merger_gen_stats
169
-
170
- return field_answers, generation_stats
@@ -1,95 +0,0 @@
1
- palimpzest/__init__.py,sha256=1PzadDDOVMQJKNEYUH0_tw8tQKUYTT31M0vuzTr2Rqk,1694
2
- palimpzest/constants.py,sha256=GagsbJl1xCAjgt6Biw27KnHSZgiramxhnerhmYe3P_k,24690
3
- palimpzest/policy.py,sha256=lIvw_C_rmwCH4LZaeNkAuixl8zw9RAW_JcSWSHPjKyc,11628
4
- palimpzest/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- palimpzest/agents/compute_agents.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- palimpzest/agents/search_agents.py,sha256=t2QMreB5Ph71aoNk5bBtV-0l8im79z-pMAR3JDAySDw,29418
7
- palimpzest/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- palimpzest/core/models.py,sha256=fLO4T7x0njNeEbUpbhJm9cdnBva0y0Zw5WGBGdzdS_I,42442
9
- palimpzest/core/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- palimpzest/core/data/context.py,sha256=x1xYyu9qW65dvtK_XayIfv_CgsCEPW6Qe0DTiSf9sjU,16207
11
- palimpzest/core/data/context_manager.py,sha256=8hAKWD2jhFZgghTu7AYgjkvKDsJUPVxq8g4nG0HWvfo,6150
12
- palimpzest/core/data/dataset.py,sha256=ShK8KTfghCfuS98oTeAh6UFuvBAllQf1XbGJv91dw1w,28178
13
- palimpzest/core/data/index_dataset.py,sha256=adO67DgzHhA4lBME0-h4SjXfdz9UcNMSDGXTpUdKbgE,1929
14
- palimpzest/core/data/iter_dataset.py,sha256=u7eZNWWT84rH_D8LNIuq0NAnm2roX81ifKTYp-hwY7g,20512
15
- palimpzest/core/elements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- palimpzest/core/elements/filters.py,sha256=fU2x0eWDwfP52_5fUmqJXTuhs4H0vvHtPZLdA3IIw8I,1642
17
- palimpzest/core/elements/groupbysig.py,sha256=Fcbt1GSAkxIILS5me0sWaNMLiptLJ6NIY6BIC0S-g3k,2318
18
- palimpzest/core/elements/records.py,sha256=Su4d8GRNp5-Q1nSWANm-jehyw53tHUl20iGluyEk8NI,19053
19
- palimpzest/core/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- palimpzest/core/lib/schemas.py,sha256=0qauaG3uW5tCJXNAo1i0G0UgbTaQLSLT6GoNDX8494Q,8376
21
- palimpzest/prompts/__init__.py,sha256=sdZbC8RWi_IGjFuzKQMdRjS2Ih4zQnkyzFoJ6Q3Ce70,1764
22
- palimpzest/prompts/agent_prompts.py,sha256=CUzBVLBiPSw8OShtKp4VTpQwtrNMtcMglo-IZHMvuDM,17459
23
- palimpzest/prompts/context_search.py,sha256=s3pti4XNRiIyiWzjVNL_NqmqEc31jzSKMF2SlN0Aaf8,357
24
- palimpzest/prompts/convert_prompts.py,sha256=quoIcdIrP4FoPBXlHKeOPjH5lVn8GH30f1tPiu3Xsyw,6037
25
- palimpzest/prompts/critique_and_refine_convert_prompts.py,sha256=WoXExBxQ7twswd9VCCST26c-2ehZtpD2iQoBi7sqDnQ,7814
26
- palimpzest/prompts/filter_prompts.py,sha256=drTivlA_WnWkAIzY9GjqO_hfwdy432nMtsV-OYa-mlE,4260
27
- palimpzest/prompts/join_prompts.py,sha256=fEGZY_zn_dvOJCeUFYrHdg5P3h_H6Fo3FMmdnXwp2l4,5957
28
- palimpzest/prompts/moa_aggregator_convert_prompts.py,sha256=BQRrtGdr53PTqvXzmFh8kfQ_w9KoKw-zTtmdo-8RFjo,2887
29
- palimpzest/prompts/moa_proposer_convert_prompts.py,sha256=8vhq0bnikbCzS4CDV5IskFPWF0TC7VZGjeGvpOyIBV8,3476
30
- palimpzest/prompts/prompt_factory.py,sha256=MpEYoyPXY3gfFGG60O9rlw5A5UejC3CTRHcO6KRhyww,51733
31
- palimpzest/prompts/split_merge_prompts.py,sha256=0mTZeJhxtvlmv-ro0KwQpxlGgSTwyUhGRHJ-uHk2Zlw,3146
32
- palimpzest/prompts/split_proposer_prompts.py,sha256=X3hufHPAiQyytZ_TFe2wJkVPgJtClZ9fVgz2zNk2Z5Q,2638
33
- palimpzest/prompts/util_phrases.py,sha256=ajxzj-B2gE56IENKVKElqw1xKWOF5IahOOqq026Pr00,876
34
- palimpzest/prompts/validator.py,sha256=pJTZjlt_OiFM3IFOgsJ0jQdayra8iRVrpqENlXI9tQQ,10532
35
- palimpzest/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- palimpzest/query/execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- palimpzest/query/execution/all_sample_execution_strategy.py,sha256=3n2hl8m-WFWIu-a8DiSVsGkz4ej3yB7mSdFR0jsiwAU,14366
38
- palimpzest/query/execution/execution_strategy.py,sha256=KwBJbWOBOOPBiWRm3ypHcAQiWbCsvtW6UnVU4tHkYz8,18905
39
- palimpzest/query/execution/execution_strategy_type.py,sha256=vRQBPCQN5_aoyD3TLIeW3VPo15mqF-5RBvEXkENz9FE,987
40
- palimpzest/query/execution/mab_execution_strategy.py,sha256=LY1JlbYMsnJHCtYjaJ6iklojBqXc2B4KS62lobPFNz0,42341
41
- palimpzest/query/execution/parallel_execution_strategy.py,sha256=Gn5hB5XddX2jCkxx6d7O-DmitK6fbuwBFnnyKhnGYEw,15706
42
- palimpzest/query/execution/single_threaded_execution_strategy.py,sha256=1eo-Z9G3u92_PjoSX8HmO3D3phYgA8f0Actbgd1-oKY,16247
43
- palimpzest/query/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- palimpzest/query/generators/generators.py,sha256=WYMcff7axgDEmYqXvy1A-C5FA4s6lI393CcCx-TKTgM,20941
45
- palimpzest/query/operators/__init__.py,sha256=j-yh0P5tzXGa0JU_g8aNn54wCJDXPCMbmtOmazXXEts,3459
46
- palimpzest/query/operators/aggregate.py,sha256=QvWr4C1arFSZWVqPSF5F5On6Ise5OF3VVWNGSq6Gfjk,11230
47
- palimpzest/query/operators/compute.py,sha256=bxMKLRU_o7v603daKeR0FayDZ_V6NLI1fGzgu6E-sac,8473
48
- palimpzest/query/operators/convert.py,sha256=mpXXYdgcH6zPqypzh3SjTqHjq7PDEbkfdZ1_XEml-nw,17334
49
- palimpzest/query/operators/critique_and_refine_convert.py,sha256=PbtKva6e3fh3yeUMGlkcpacPD003bFBzgBsw_yy-8fw,5293
50
- palimpzest/query/operators/distinct.py,sha256=MuF3NlC0QMTSGs0_fe2oly0I5Ow0hfOa7h8BFGhHiCs,2594
51
- palimpzest/query/operators/filter.py,sha256=jmSGV7xZ8uxXzH-Oko7l8ZPZxNf_qJNkYVAYgiSHl9g,10802
52
- palimpzest/query/operators/join.py,sha256=rs9_Y59082dlnSJu9rpRDEuv7jDPItKSpYsC8FCMFDM,17837
53
- palimpzest/query/operators/limit.py,sha256=upJ775cGkxjFHRJm8GpSvtJN1cspg2FVYLN_MrIfUo4,2113
54
- palimpzest/query/operators/logical.py,sha256=K_dRlNKkda35kQ7gYGsrW9PoFuDPzexpjtDq_FYdhVw,20223
55
- palimpzest/query/operators/mixture_of_agents_convert.py,sha256=4v2V612NqdVD0RmcJ5VSgTiVliObku-t-A79SXVnpk0,6753
56
- palimpzest/query/operators/physical.py,sha256=buPZjtP4HKNVfOCNWdBtDnRS217dSsIG74gqZ1jmoyo,8320
57
- palimpzest/query/operators/project.py,sha256=RX5SbHFRwHcMfiQRofIPQr-AHgIDYm68ifiFZAPu7Fo,2094
58
- palimpzest/query/operators/rag_convert.py,sha256=1QQGrE22-Ec3-MNbnaU3k4TGHdpi2qZqZR9MHUniEM4,10691
59
- palimpzest/query/operators/retrieve.py,sha256=v1FTFsSctqH4B37aWgBXYIxgOMJwRWQ2kwwXu1huwaQ,13106
60
- palimpzest/query/operators/scan.py,sha256=Da_EZUrArzlAameHYCmtqo-xbPOFvbTYSktrUcUEUSc,7398
61
- palimpzest/query/operators/search.py,sha256=xydO5Kni0RArpvLSn2ajzD4TcH442VjpP2x9NakjzaA,22842
62
- palimpzest/query/operators/split_convert.py,sha256=acCPlkrUfqHhGD7bU2AXQAhIEeAEIh0itamuCOm4KBk,7787
63
- palimpzest/query/optimizer/__init__.py,sha256=L2E1rOA-8O9oH6JL56wLI1qUVxXBLubJEG1IHMH-HU4,2384
64
- palimpzest/query/optimizer/cost_model.py,sha256=OldPy-TJdfsQbYRoKlb3yWeKbi15jcldTIUS6BTi9T8,12678
65
- palimpzest/query/optimizer/optimizer.py,sha256=mgM6c0d_voGNun2hMzqjfumJVieACtcHsNnBP4LyXAA,19626
66
- palimpzest/query/optimizer/optimizer_strategy.py,sha256=9YlNGkqwgX0WaV6y8tKOOHVN8kC8GjDI3DttvGW5SYY,10206
67
- palimpzest/query/optimizer/optimizer_strategy_type.py,sha256=V-MMHvJdnfZKoUX1xxxwh66q1RjN2FL35IsiT1C62c8,1084
68
- palimpzest/query/optimizer/plan.py,sha256=VIhN7tWT7EoRE9BKYa1qvvOhX7dEaM-aiobByX0qjzg,22900
69
- palimpzest/query/optimizer/primitives.py,sha256=jMMVq37y1tWiPU1lSSKQP9OP-mzkpSxSmUeDajRYYOQ,5445
70
- palimpzest/query/optimizer/rules.py,sha256=9AsuVjhiZUc0snQPNhIqeyKpmqFsSv7e-v6BEbp9CDw,43315
71
- palimpzest/query/optimizer/tasks.py,sha256=DJcKDNbVJox61rnTW0HgT1PtxGx2P_NiLvNroXie-Lg,29509
72
- palimpzest/query/processor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- palimpzest/query/processor/config.py,sha256=w2nkb6UXHw5HOvRZO1KBgb3y_tE2On9gmo_G7YGvnf8,2366
74
- palimpzest/query/processor/query_processor.py,sha256=W01-2FocN1Jsv58gmEo5ALTIcpLt7D0dmI8kghSCdBk,6291
75
- palimpzest/query/processor/query_processor_factory.py,sha256=WTp58KrtVzkAaO_cLgnlkr6o7BJk76cvmGcOmsTy_Ww,7896
76
- palimpzest/schemabuilder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- palimpzest/schemabuilder/schema_builder.py,sha256=QraGp66dcD-ej6Y2mER40o86G9JqlBkL7swkJzjUAIY,7968
78
- palimpzest/tools/README.md,sha256=56_6LPG80uc0CLVhTBP6I1wgIffNv9cyTr0TmVZqmrM,483
79
- palimpzest/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- palimpzest/tools/allenpdf.py,sha256=fXMOmSDdSSLXDKAPYYJ8k4egtWEBf_Me9Lq9tM3iyoA,1690
81
- palimpzest/tools/pdfparser.py,sha256=0DOVUZLxYfqjxM8WNEfYcyiXb1qW9BWVIHEB_B_YhWA,9570
82
- palimpzest/tools/skema_tools.py,sha256=HXUFpjMhbVxZwKKkATeK-FwtlTCawaCbeP-uHntI1Kg,669
83
- palimpzest/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- palimpzest/utils/env_helpers.py,sha256=n81KzoJ459pRxo7QmJA7duazwWsfoMGTHc71D2LatFk,334
85
- palimpzest/utils/hash_helpers.py,sha256=3A8dA7SbXTwnnvZvPVNqqMLlVRhCKyKF_bjNNAu3Exk,334
86
- palimpzest/utils/model_helpers.py,sha256=X6SlMgD5I5Aj_cxaFaoGaaNvOOqTNZVmjj6zbfn63Yk,2476
87
- palimpzest/utils/progress.py,sha256=7gucyZr82udMDZitrrkAOSKHZVljE3R2wv9nf5gA5TM,20807
88
- palimpzest/utils/udfs.py,sha256=LjHic54B1az-rKgNLur0wOpaz2ko_UodjLEJrazkxvY,1854
89
- palimpzest/validator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- palimpzest/validator/validator.py,sha256=J2tGvJqfg6v5lOQDYYaqAa9d37uVHBrqkNs-a8d1Ic0,16365
91
- palimpzest-0.8.1.dist-info/licenses/LICENSE,sha256=5GUlHy9lr-Py9kvV38FF1m3yy3NqM18fefuE9wkWumo,1079
92
- palimpzest-0.8.1.dist-info/METADATA,sha256=iA31ZJnmE0bVBJHjE3scrTM7xeYnhAbfu8FatcgPYzU,7286
93
- palimpzest-0.8.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
- palimpzest-0.8.1.dist-info/top_level.txt,sha256=raV06dJUgohefUn3ZyJS2uqp_Y76EOLA9Y2e_fxt8Ew,11
95
- palimpzest-0.8.1.dist-info/RECORD,,