edsl 0.1.30.dev5__py3-none-any.whl → 0.1.31__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 (46) hide show
  1. edsl/__version__.py +1 -1
  2. edsl/agents/Invigilator.py +7 -2
  3. edsl/agents/PromptConstructionMixin.py +18 -1
  4. edsl/config.py +4 -0
  5. edsl/conjure/Conjure.py +6 -0
  6. edsl/coop/coop.py +4 -0
  7. edsl/coop/utils.py +9 -1
  8. edsl/data/CacheHandler.py +3 -4
  9. edsl/enums.py +2 -0
  10. edsl/inference_services/DeepInfraService.py +6 -91
  11. edsl/inference_services/GroqService.py +18 -0
  12. edsl/inference_services/InferenceServicesCollection.py +13 -5
  13. edsl/inference_services/OpenAIService.py +64 -21
  14. edsl/inference_services/registry.py +2 -1
  15. edsl/jobs/Jobs.py +80 -33
  16. edsl/jobs/buckets/TokenBucket.py +15 -7
  17. edsl/jobs/interviews/Interview.py +41 -19
  18. edsl/jobs/interviews/InterviewExceptionEntry.py +101 -0
  19. edsl/jobs/interviews/InterviewTaskBuildingMixin.py +58 -40
  20. edsl/jobs/interviews/interview_exception_tracking.py +68 -10
  21. edsl/jobs/runners/JobsRunnerAsyncio.py +112 -81
  22. edsl/jobs/runners/JobsRunnerStatusData.py +0 -237
  23. edsl/jobs/runners/JobsRunnerStatusMixin.py +291 -35
  24. edsl/jobs/tasks/QuestionTaskCreator.py +2 -3
  25. edsl/jobs/tasks/TaskCreators.py +8 -2
  26. edsl/jobs/tasks/TaskHistory.py +145 -1
  27. edsl/language_models/LanguageModel.py +133 -75
  28. edsl/language_models/ModelList.py +8 -2
  29. edsl/language_models/registry.py +16 -0
  30. edsl/questions/QuestionFunctional.py +8 -7
  31. edsl/questions/QuestionMultipleChoice.py +15 -12
  32. edsl/questions/QuestionNumerical.py +0 -1
  33. edsl/questions/descriptors.py +6 -4
  34. edsl/results/DatasetExportMixin.py +185 -78
  35. edsl/results/Result.py +13 -11
  36. edsl/results/Results.py +19 -16
  37. edsl/results/ResultsToolsMixin.py +1 -1
  38. edsl/scenarios/Scenario.py +14 -0
  39. edsl/scenarios/ScenarioList.py +59 -21
  40. edsl/scenarios/ScenarioListExportMixin.py +16 -5
  41. edsl/scenarios/ScenarioListPdfMixin.py +3 -0
  42. edsl/surveys/Survey.py +11 -8
  43. {edsl-0.1.30.dev5.dist-info → edsl-0.1.31.dist-info}/METADATA +4 -2
  44. {edsl-0.1.30.dev5.dist-info → edsl-0.1.31.dist-info}/RECORD +46 -44
  45. {edsl-0.1.30.dev5.dist-info → edsl-0.1.31.dist-info}/LICENSE +0 -0
  46. {edsl-0.1.30.dev5.dist-info → edsl-0.1.31.dist-info}/WHEEL +0 -0
@@ -1,12 +1,14 @@
1
1
  """A list of Scenarios to be used in a survey."""
2
2
 
3
3
  from __future__ import annotations
4
+ from typing import Any, Optional, Union, List, Callable
4
5
  import csv
5
6
  import random
6
7
  from collections import UserList, Counter
7
8
  from collections.abc import Iterable
9
+
8
10
  from simpleeval import EvalWithCompoundTypes
9
- from typing import Any, Optional, Union, List
11
+
10
12
  from edsl.Base import Base
11
13
  from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
12
14
  from edsl.scenarios.Scenario import Scenario
@@ -58,7 +60,13 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
58
60
  return f"ScenarioList({self.data})"
59
61
 
60
62
  def __mul__(self, other: ScenarioList) -> ScenarioList:
61
- """Takes the cross product of two ScenarioLists."""
63
+ """Takes the cross product of two ScenarioLists.
64
+
65
+ >>> s1 = ScenarioList.from_list("a", [1, 2])
66
+ >>> s2 = ScenarioList.from_list("b", [3, 4])
67
+ >>> s1 * s2
68
+ ScenarioList([Scenario({'a': 1, 'b': 3}), Scenario({'a': 1, 'b': 4}), Scenario({'a': 2, 'b': 3}), Scenario({'a': 2, 'b': 4})])
69
+ """
62
70
  from itertools import product
63
71
 
64
72
  new_sl = []
@@ -79,7 +87,12 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
79
87
  return self.__mul__(other)
80
88
 
81
89
  def shuffle(self, seed: Optional[str] = "edsl") -> ScenarioList:
82
- """Shuffle the ScenarioList."""
90
+ """Shuffle the ScenarioList.
91
+
92
+ >>> s = ScenarioList.from_list("a", [1,2,3,4])
93
+ >>> s.shuffle()
94
+ ScenarioList([Scenario({'a': 3}), Scenario({'a': 4}), Scenario({'a': 1}), Scenario({'a': 2})])
95
+ """
83
96
  random.seed(seed)
84
97
  random.shuffle(self.data)
85
98
  return self
@@ -107,10 +120,14 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
107
120
  return dict(Counter([scenario[field] for scenario in self]))
108
121
 
109
122
  def sample(self, n: int, seed="edsl") -> ScenarioList:
110
- """Return a random sample from the ScenarioList"""
123
+ """Return a random sample from the ScenarioList
111
124
 
112
- if seed != "edsl":
113
- random.seed(seed)
125
+ >>> s = ScenarioList.from_list("a", [1,2,3,4,5,6])
126
+ >>> s.sample(3)
127
+ ScenarioList([Scenario({'a': 2}), Scenario({'a': 1}), Scenario({'a': 3})])
128
+ """
129
+
130
+ random.seed(seed)
114
131
 
115
132
  return ScenarioList(random.sample(self.data, n))
116
133
 
@@ -136,7 +153,9 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
136
153
  new_scenarios.append(new_scenario)
137
154
  return ScenarioList(new_scenarios)
138
155
 
139
- def mutate(self, new_var_string: str, functions_dict: dict = None) -> ScenarioList:
156
+ def mutate(
157
+ self, new_var_string: str, functions_dict: Optional[dict[str, Callable]] = None
158
+ ) -> ScenarioList:
140
159
  """
141
160
  Return a new ScenarioList with a new variable added.
142
161
 
@@ -145,6 +164,7 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
145
164
  >>> s = ScenarioList([Scenario({'a': 1, 'b': 2}), Scenario({'a': 1, 'b': 1})])
146
165
  >>> s.mutate("c = a + b")
147
166
  ScenarioList([Scenario({'a': 1, 'b': 2, 'c': 3}), Scenario({'a': 1, 'b': 1, 'c': 2})])
167
+
148
168
  """
149
169
  if "=" not in new_var_string:
150
170
  raise Exception(
@@ -222,6 +242,16 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
222
242
 
223
243
  return ScenarioList(new_data)
224
244
 
245
+ def from_urls(self, urls: list[str], field_name: Optional[str] = "text") -> ScenarioList:
246
+ """Create a ScenarioList from a list of URLs.
247
+
248
+ :param urls: A list of URLs.
249
+ :param field_name: The name of the field to store the text from the URLs.
250
+
251
+
252
+ """
253
+ return ScenarioList([Scenario.from_url(url, field_name) for url in urls])
254
+
225
255
  def select(self, *fields) -> ScenarioList:
226
256
  """
227
257
  Selects scenarios with only the references fields.
@@ -264,11 +294,19 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
264
294
  return cls([Scenario({name: value}) for value in values])
265
295
 
266
296
  def to_dataset(self) -> "Dataset":
297
+ """
298
+ >>> s = ScenarioList.from_list("a", [1,2,3])
299
+ >>> s.to_dataset()
300
+ Dataset([{'a': [1, 2, 3]}])
301
+ >>> s = ScenarioList.from_list("a", [1,2,3]).add_list("b", [4,5,6])
302
+ >>> s.to_dataset()
303
+ Dataset([{'a': [1, 2, 3]}, {'b': [4, 5, 6]}])
304
+ """
267
305
  from edsl.results.Dataset import Dataset
268
306
 
269
307
  keys = self[0].keys()
270
- data = {key: [scenario[key] for scenario in self.data] for key in keys}
271
- return Dataset([data])
308
+ data = [{key: [scenario[key] for scenario in self.data]} for key in keys]
309
+ return Dataset(data)
272
310
 
273
311
  def add_list(self, name, values) -> ScenarioList:
274
312
  """Add a list of values to a ScenarioList.
@@ -286,7 +324,7 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
286
324
  self.append(Scenario({name: value}))
287
325
  return self
288
326
 
289
- def add_value(self, name, value):
327
+ def add_value(self, name: str, value: Any) -> ScenarioList:
290
328
  """Add a value to all scenarios in a ScenarioList.
291
329
 
292
330
  Example:
@@ -340,7 +378,7 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
340
378
  """
341
379
  return cls([Scenario(row) for row in df.to_dict(orient="records")])
342
380
 
343
- def to_key_value(self, field, value=None) -> Union[dict, set]:
381
+ def to_key_value(self, field: str, value=None) -> Union[dict, set]:
344
382
  """Return the set of values in the field.
345
383
 
346
384
  Example:
@@ -459,16 +497,16 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
459
497
  table.add_row(str(i), s.rich_print())
460
498
  return table
461
499
 
462
- def print(
463
- self,
464
- format: Optional[str] = None,
465
- max_rows: Optional[int] = None,
466
- pretty_labels: Optional[dict] = None,
467
- filename: str = None,
468
- ):
469
- from edsl.utilities.interface import print_scenario_list
470
-
471
- print_scenario_list(self[:max_rows])
500
+ # def print(
501
+ # self,
502
+ # format: Optional[str] = None,
503
+ # max_rows: Optional[int] = None,
504
+ # pretty_labels: Optional[dict] = None,
505
+ # filename: str = None,
506
+ # ):
507
+ # from edsl.utilities.interface import print_scenario_list
508
+
509
+ # print_scenario_list(self[:max_rows])
472
510
 
473
511
  def __getitem__(self, key: Union[int, slice]) -> Any:
474
512
  """Return the item at the given index.
@@ -5,7 +5,7 @@ from edsl.results.DatasetExportMixin import DatasetExportMixin
5
5
 
6
6
 
7
7
  def to_dataset(func):
8
- """Convert the Results object to a Dataset object before calling the function."""
8
+ """Convert the object to a Dataset object before calling the function."""
9
9
 
10
10
  @wraps(func)
11
11
  def wrapper(self, *args, **kwargs):
@@ -20,13 +20,24 @@ def to_dataset(func):
20
20
  return wrapper
21
21
 
22
22
 
23
- def decorate_all_methods(cls):
24
- for attr_name, attr_value in cls.__dict__.items():
25
- if callable(attr_value):
23
+ def decorate_methods_from_mixin(cls, mixin_cls):
24
+ for attr_name, attr_value in mixin_cls.__dict__.items():
25
+ if callable(attr_value) and not attr_name.startswith("__"):
26
26
  setattr(cls, attr_name, to_dataset(attr_value))
27
27
  return cls
28
28
 
29
29
 
30
- @decorate_all_methods
30
+ # def decorate_all_methods(cls):
31
+ # for attr_name, attr_value in cls.__dict__.items():
32
+ # if callable(attr_value):
33
+ # setattr(cls, attr_name, to_dataset(attr_value))
34
+ # return cls
35
+
36
+
37
+ # @decorate_all_methods
31
38
  class ScenarioListExportMixin(DatasetExportMixin):
32
39
  """Mixin class for exporting Results objects."""
40
+
41
+ def __init_subclass__(cls, **kwargs):
42
+ super().__init_subclass__(**kwargs)
43
+ decorate_methods_from_mixin(cls, DatasetExportMixin)
@@ -43,6 +43,9 @@ class ScenarioListPdfMixin:
43
43
 
44
44
  @staticmethod
45
45
  def extract_text_from_pdf(pdf_path):
46
+ from edsl import Scenario
47
+
48
+ # TODO: Add test case
46
49
  # Ensure the file exists
47
50
  if not os.path.exists(pdf_path):
48
51
  raise FileNotFoundError(f"The file {pdf_path} does not exist.")
edsl/surveys/Survey.py CHANGED
@@ -105,15 +105,15 @@ class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
105
105
  from edsl.utilities.utilities import dict_hash
106
106
 
107
107
  return dict_hash(self._to_dict())
108
-
108
+
109
109
  def __add__(self, other: Survey) -> Survey:
110
110
  """Combine two surveys.
111
-
111
+
112
112
  :param other: The other survey to combine with this one.
113
113
  >>> s1 = Survey.example()
114
114
  >>> from edsl import QuestionFreeText
115
115
  >>> s2 = Survey([QuestionFreeText(question_text="What is your name?", question_name="yo")])
116
- >>> s3 = s1 + s2
116
+ >>> s3 = s1 + s2
117
117
  Traceback (most recent call last):
118
118
  ...
119
119
  ValueError: ('Cannot combine two surveys with non-default rules.', "Please use the 'clear_non_default_rules' method to remove non-default rules from the survey.")
@@ -122,14 +122,17 @@ class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
122
122
  4
123
123
 
124
124
  """
125
- if len(self.rule_collection.non_default_rules) > 0 or len(other.rule_collection.non_default_rules) > 0:
125
+ if (
126
+ len(self.rule_collection.non_default_rules) > 0
127
+ or len(other.rule_collection.non_default_rules) > 0
128
+ ):
126
129
  raise ValueError(
127
- "Cannot combine two surveys with non-default rules.",
128
- "Please use the 'clear_non_default_rules' method to remove non-default rules from the survey."
130
+ "Cannot combine two surveys with non-default rules.",
131
+ "Please use the 'clear_non_default_rules' method to remove non-default rules from the survey.",
129
132
  )
130
133
 
131
134
  return Survey(questions=self.questions + other.questions)
132
-
135
+
133
136
  def clear_non_default_rules(self) -> Survey:
134
137
  s = Survey()
135
138
  for question in self.questions:
@@ -1181,5 +1184,5 @@ def main():
1181
1184
  if __name__ == "__main__":
1182
1185
  import doctest
1183
1186
 
1184
- #doctest.testmod(optionflags=doctest.ELLIPSIS | doctest.SKIP)
1187
+ # doctest.testmod(optionflags=doctest.ELLIPSIS | doctest.SKIP)
1185
1188
  doctest.testmod(optionflags=doctest.ELLIPSIS)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.30.dev5
3
+ Version: 0.1.31
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -19,10 +19,11 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Dist: aiohttp (>=3.9.1,<4.0.0)
20
20
  Requires-Dist: anthropic (>=0.23.1,<0.24.0)
21
21
  Requires-Dist: black[jupyter] (>=24.4.2,<25.0.0)
22
+ Requires-Dist: groq (>=0.9.0,<0.10.0)
22
23
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
23
24
  Requires-Dist: jupyter (>=1.0.0,<2.0.0)
24
25
  Requires-Dist: markdown2 (>=2.4.11,<3.0.0)
25
- Requires-Dist: matplotlib (>=3.8.4,<4.0.0)
26
+ Requires-Dist: matplotlib (>=3.8,<3.9)
26
27
  Requires-Dist: nest-asyncio (>=1.5.9,<2.0.0)
27
28
  Requires-Dist: numpy (>=1.22,<2.0)
28
29
  Requires-Dist: openai (>=1.4.0,<2.0.0)
@@ -35,6 +36,7 @@ Requires-Dist: python-docx (>=1.1.0,<2.0.0)
35
36
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
36
37
  Requires-Dist: restrictedpython (>=7.1,<8.0)
37
38
  Requires-Dist: rich (>=13.7.0,<14.0.0)
39
+ Requires-Dist: setuptools (<72.0)
38
40
  Requires-Dist: simpleeval (>=0.9.13,<0.10.0)
39
41
  Requires-Dist: sqlalchemy (>=2.0.23,<3.0.0)
40
42
  Requires-Dist: tenacity (>=8.2.3,<9.0.0)
@@ -1,18 +1,18 @@
1
1
  edsl/Base.py,sha256=ttNxUotSd9LSEJl2w6LdMtT78d0nMQvYDJ0q4JkqBfg,8945
2
2
  edsl/BaseDiff.py,sha256=RoVEh52UJs22yMa7k7jv8se01G62jJNWnBzaZngo-Ug,8260
3
3
  edsl/__init__.py,sha256=E6PkWI_owu8AUc4uJs2XWDVozqSbcRWzsIqf8_Kskho,1631
4
- edsl/__version__.py,sha256=36CHcnfZnyhdfT-d4JZkCR1tvVI-WobrzSNjUWpJx80,28
4
+ edsl/__version__.py,sha256=i-fDEsQ0iAiPKXFaj9eERDqcxl3BqNnavaCEqpNxmVI,23
5
5
  edsl/agents/Agent.py,sha256=qNJsQkN6HuTKqJrQbuUEgRX3Wo7Dwukle0oNWPi0UIE,27191
6
6
  edsl/agents/AgentList.py,sha256=_MsdeOEgaANAceLIXwuLC22mwlBn0ruGX4GEqz8_SSY,9467
7
- edsl/agents/Invigilator.py,sha256=WNgGT9VRKpHbk__h-vd4LASgjnlJnzepf-2FxQ3K98I,10798
7
+ edsl/agents/Invigilator.py,sha256=8nv98bjfal6Q-GVmsxj5Isqn-GLqXDXEijSai3KAbgQ,10923
8
8
  edsl/agents/InvigilatorBase.py,sha256=ncha1HF2V1Dz4f50Gekg6AzUXCD2Af82ztfSJZbgOHY,7469
9
- edsl/agents/PromptConstructionMixin.py,sha256=MP2Frmm9iP3J50ijXKrr6YYIjB_38UuA2J7Mysfs0ZQ,15913
9
+ edsl/agents/PromptConstructionMixin.py,sha256=07RtPsaNOiJR-QIZWyr4F9VmArVcsRsWTkPuwhK2tXw,16659
10
10
  edsl/agents/__init__.py,sha256=a3H1lxDwu9HR8fwh79C5DgxPSFv_bE2rzQ6y1D8Ba5c,80
11
11
  edsl/agents/descriptors.py,sha256=m8ND3-2-JbgNX1HGakBNLIeemwsgYa1mQxYO9GW33hw,2934
12
12
  edsl/base/Base.py,sha256=DShsfI6A2ojg42muPFpVtUgTX33pnqT5vtN0SRlr-9Q,8866
13
- edsl/config.py,sha256=--CQg-zL3-Jm8g5OUWsdWHxI-tEs_EDKCKFREcegYOI,5618
13
+ edsl/config.py,sha256=EE4NFLtBr5wbUdf6iOGFZQ1so26gzjVHUcu_IfDqjqw,5770
14
14
  edsl/conjure/AgentConstructionMixin.py,sha256=qLLYJH02HotVwBUYzaHs4QW0t5nsC3NX15qxQLzEwLI,5702
15
- edsl/conjure/Conjure.py,sha256=KBmF3d6EjzTI5f-j_cZBowxWQx7jZqezHgfPMkh-h8M,1884
15
+ edsl/conjure/Conjure.py,sha256=JaCuAm3rmqjh11_X8PXgvPsVHGql3yTn9JEzVlzOUVU,2019
16
16
  edsl/conjure/InputData.py,sha256=RdFgkzzayddSTd6vcwBB8LC796YBj94pciwrQx9nBtg,22003
17
17
  edsl/conjure/InputDataCSV.py,sha256=m4hHSQogxt7LNcGNxcGRkrbdGy8pIQu5KvXhIEt9i6k,1684
18
18
  edsl/conjure/InputDataMixinQuestionStats.py,sha256=Jav5pqYCLSQ1pAbGV8O9VCBu0vL8Q6pteSEhRKrONuw,6256
@@ -32,16 +32,16 @@ edsl/conversation/car_buying.py,sha256=Quh2Q8O9YoCyTKJUy3li376QFIOcL1gX0y89w3wlS
32
32
  edsl/conversation/mug_negotiation.py,sha256=mjvAqErD4AjN3G2za2c-X-3axOShW-zAJUeiJqTxVPA,2616
33
33
  edsl/conversation/next_speaker_utilities.py,sha256=bqr5JglCd6bdLc9IZ5zGOAsmN2F4ERiubSMYvZIG7qk,3629
34
34
  edsl/coop/__init__.py,sha256=4iZCwJSzJVyjBYk8ggGxY2kZjq9dXVT1jhyPDNyew4I,115
35
- edsl/coop/coop.py,sha256=Kv6oUOZ9uuxxR59Rn6IG-tB3JaN2z8AnHVW8G-RSLQE,26928
36
- edsl/coop/utils.py,sha256=BeBcMWWl9Kxjll_WfDQNHbp-6ct9QjVn4ph2V4ph6XE,3347
35
+ edsl/coop/coop.py,sha256=p2JvhzUpjXEaiFWafCpkfsPIsH2BqV9ePAJCKsKfFOo,27138
36
+ edsl/coop/utils.py,sha256=UZwljKYW_Yjw7RYcjOg3SW7fn1pyHQfJ1fM48TBNoss,3601
37
37
  edsl/data/Cache.py,sha256=aR9ydTFvUWiRJZd2G7SLFFtZaS2At8ArbQ1SAhYZBDs,15629
38
38
  edsl/data/CacheEntry.py,sha256=_5UiFaJQu_U-Z1_lEPt-h6Gaidp2Eunk02wOd3Ni3MQ,7252
39
- edsl/data/CacheHandler.py,sha256=DTr8nJnbl_SidhsDetqbshu1DV-njPFiPPosUWTIBok,4789
39
+ edsl/data/CacheHandler.py,sha256=8LCS7gsJjc3N-6cujJZepX3NkiDu30L1ajVJut5Vv_M,4795
40
40
  edsl/data/SQLiteDict.py,sha256=V5Nfnxctgh4Iblqcw1KmbnkjtfmWrrombROSQ3mvg6A,8979
41
41
  edsl/data/__init__.py,sha256=KBNGGEuGHq--D-TlpAQmvv_If906dJc1Gsy028zOx78,170
42
42
  edsl/data/orm.py,sha256=Jz6rvw5SrlxwysTL0QI9r68EflKxeEBmf6j6himHDS8,238
43
43
  edsl/data_transfer_models.py,sha256=ORcI-g_oUE8EofLvHQKnWC5ar-IgZiXGY2bIpTGAZyQ,1157
44
- edsl/enums.py,sha256=lW4rMKJJ-AsBdtDw_u6TitlNbHkTznorVPjqqmUKPE0,4876
44
+ edsl/enums.py,sha256=kEIEQUl-I1omtxasqmjqVVSxSCMy3uWxE4UjGX6gqqg,4947
45
45
  edsl/exceptions/__init__.py,sha256=HVg-U-rJ0fRoG9Rws6gnK5S9B68SkPWDPsoD6KpMZ-A,1370
46
46
  edsl/exceptions/agents.py,sha256=3SORFwFbMGrF6-vAL2GrKEVdPcXo7md_k2oYufnVXHA,673
47
47
  edsl/exceptions/configuration.py,sha256=qH2sInNTndKlCLAaNgaXHyRFdKQHL7-dElB_j8wz9g4,351
@@ -55,49 +55,51 @@ edsl/exceptions/questions.py,sha256=9z6RI7HRH-UMrnIlt28VTj9deCSbD1Frmpqi0H6YtF0,
55
55
  edsl/exceptions/results.py,sha256=cn6Zb86Y648ulN3RYXb52HGv1NT3ykBfE6g2Xu8TeIw,325
56
56
  edsl/exceptions/surveys.py,sha256=lADtr-tvPmUYSfRy3TdkTV5SzZfShlMgCzm-ZGYRlGk,557
57
57
  edsl/inference_services/AnthropicService.py,sha256=tjYRJRIvQ7Z6uCYdqxm5ZlVjZdVZCnHtQ6QGHT59PXs,2822
58
- edsl/inference_services/DeepInfraService.py,sha256=fpjLJl7gyUFWVdR6U7XwIspD_pH5x55f4LamKT01Et4,3853
58
+ edsl/inference_services/DeepInfraService.py,sha256=fWlH5sCNxf8eHPHxPPxJMEVWpCM9sDenkC8IZYqtXfA,515
59
59
  edsl/inference_services/GoogleService.py,sha256=IwSwXr7khvHjpDzgiW5PRVKMhI2wQ9D1_H1MRnHjefU,2732
60
+ edsl/inference_services/GroqService.py,sha256=vcHiMqdo4eryg2pOk2SfTNpTnvCrx8qkIwtJjVPDnZU,433
60
61
  edsl/inference_services/InferenceServiceABC.py,sha256=H6jW2gDKTLC3xgmqiSBdX4pGY1oauEO8VqGZoB3qvnQ,1790
61
- edsl/inference_services/InferenceServicesCollection.py,sha256=1ulvUYs2gaJsb7t8Mkua-6_3gff6rJmH72_BbItkaCE,2274
62
- edsl/inference_services/OpenAIService.py,sha256=OvczbY2wlEehZdaaMq69yeqzkjdrbbXlP8uC9WjgHq0,6021
62
+ edsl/inference_services/InferenceServicesCollection.py,sha256=EDyxnoSjGXhWob_ost7U8WUYjn1jgL_noB0-VlXBnOo,2810
63
+ edsl/inference_services/OpenAIService.py,sha256=OskDMmsbRITz5WWRl6GdPqVtQX53WjLZuzuW1mjVLBA,7488
63
64
  edsl/inference_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
65
  edsl/inference_services/models_available_cache.py,sha256=ZT2pBGxJqTgwynthu-SqBjv8zl7ql44q3gA6xy7kqSU,2338
65
66
  edsl/inference_services/rate_limits_cache.py,sha256=HYslviz7mxF9U4CUTPAkoyBsiXjSju-YCp4HHir6e34,1398
66
- edsl/inference_services/registry.py,sha256=-Yz86do-KZraunIrziVs9b95EbY-__JUnQb5Ulni7KI,483
67
+ edsl/inference_services/registry.py,sha256=RzmOjDjq7361v2aUCeR8MIJw8qxWqKs_697ZnQrbbmM,556
67
68
  edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
68
69
  edsl/jobs/Answers.py,sha256=z4TADN-iHIrbMtI1jVyiaetv0OkTv768dFBpREIQC6c,1799
69
- edsl/jobs/Jobs.py,sha256=JrJcpTjR3wejMVvuFXZr7PHqCyj6zaRwqNu9eatvy9Y,29339
70
+ edsl/jobs/Jobs.py,sha256=LSr_No2PqnpPUPg0hK8BhD4V1ALQfwbDToblhUxKVMM,31387
70
71
  edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
71
72
  edsl/jobs/buckets/BucketCollection.py,sha256=LA8DBVwMdeTFCbSDI0S2cDzfi_Qo6kRizwrG64tE8S4,1844
72
73
  edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
73
- edsl/jobs/buckets/TokenBucket.py,sha256=d9W464eYWoYeN1PmS6Nv2Agq3hSuU4S7cN7NnUYy7aQ,6023
74
- edsl/jobs/interviews/Interview.py,sha256=FF4jgqHVoa9cXDkgU2JkJfr5XJsozswBkHUoTxnj3TA,11434
74
+ edsl/jobs/buckets/TokenBucket.py,sha256=A4ZHDztlswRXlsdOmtAoyy9gBj3Y5rgOeKsy_U62sp4,6320
75
+ edsl/jobs/interviews/Interview.py,sha256=6CeWoHvhDqIbhBCrNubDvinBSa7K-Rks5ilGmJNFMg4,12028
76
+ edsl/jobs/interviews/InterviewExceptionEntry.py,sha256=N_-3_KwXTZLhGNwZSyTgUMS0lE-hikWRy2AzLOduTDQ,2772
75
77
  edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
76
78
  edsl/jobs/interviews/InterviewStatisticsCollection.py,sha256=_ZZ0fnZBQiIywP9Q_wWjpWhlfcPe2cn32GKut10t5RI,788
77
79
  edsl/jobs/interviews/InterviewStatusDictionary.py,sha256=MSyys4hOWe1d8gfsUvAPbcKrs8YiPnz8jpufBSJL7SU,2485
78
80
  edsl/jobs/interviews/InterviewStatusLog.py,sha256=6u0F8gf5tha39VQL-IK_QPkCsQAYVOx_IesX7TDDX_A,3252
79
81
  edsl/jobs/interviews/InterviewStatusMixin.py,sha256=VV0Pel-crUsLoGpTifeIIkXsLGj0bfuO--UtpRnH-dU,1251
80
- edsl/jobs/interviews/InterviewTaskBuildingMixin.py,sha256=sqbimDTBD5W6vOAJ_WUpyGTtOzOqmVbutKEFZ0C-bnk,11149
82
+ edsl/jobs/interviews/InterviewTaskBuildingMixin.py,sha256=O1XwX6QqhQ-M-b4fqy0XzopLna2A8BTrdjKcz3N0XHs,11505
81
83
  edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AEOxhTim8,1745
82
- edsl/jobs/interviews/interview_exception_tracking.py,sha256=tIcX92udnkE5fcM5_WXjRF9xgTq2P0uaDXxZf3NQGG0,3271
84
+ edsl/jobs/interviews/interview_exception_tracking.py,sha256=GF5PIj601rZPa5XWx1vTbFRt662S0CEoHYpG4Wulxj8,5066
83
85
  edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
84
86
  edsl/jobs/interviews/retry_management.py,sha256=9Efn4B3aV45vbocnF6J5WQt88i2FgFjoi5ALzGUukEE,1375
85
- edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=L48NdyDiKrgUMQVwvd1wr2uOzT99oYfwXnlStDLHU9I,11934
86
- edsl/jobs/runners/JobsRunnerStatusData.py,sha256=-mxcmX0a38GGO9DQ-ItTmj6mvCUk5uC-UudT77lXTG4,10327
87
- edsl/jobs/runners/JobsRunnerStatusMixin.py,sha256=yxnXuOovwHgfDokNuluH_qulBcM0gCcbpCQibqVKXFI,3137
88
- edsl/jobs/tasks/QuestionTaskCreator.py,sha256=CCEx8k6LK12uXOy_XnvXZJPLvgtN3ig552lgSJEXlsI,10411
89
- edsl/jobs/tasks/TaskCreators.py,sha256=DbCt5BzJ0CsMSquqLyLdk8el031Wst7vCszVW5EltX8,2418
90
- edsl/jobs/tasks/TaskHistory.py,sha256=ZVellGW1cvwqdHt98dYPl0FYhk3VqRGHAZETDOxEkqg,10939
87
+ edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=U6_tJyTIxZmHNtJw7Gn4cpAU8Pzvfq3n9s39fVjsGkc,12802
88
+ edsl/jobs/runners/JobsRunnerStatusData.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ edsl/jobs/runners/JobsRunnerStatusMixin.py,sha256=MmVK2udusAbQ3KCkQPiQYjWVDfKprBk9Ecelgui__0k,13424
90
+ edsl/jobs/tasks/QuestionTaskCreator.py,sha256=f-hF7TMdMMjQ5AQMpMJXrFdBUNSLrLHHl1sun774f_U,10394
91
+ edsl/jobs/tasks/TaskCreators.py,sha256=XqAbNU33378Z4PQncokbfJwnKt3KHR9aqa5fKYRDpfg,2694
92
+ edsl/jobs/tasks/TaskHistory.py,sha256=TnDSBgv84G_47iEzYyMHKMeSUnJAB43xPN-J7JSdevU,16188
91
93
  edsl/jobs/tasks/TaskStatusLog.py,sha256=bqH36a32F12fjX-M-4lNOhHaK2-WLFzKE-r0PxZPRjI,546
92
94
  edsl/jobs/tasks/task_management.py,sha256=KMToZuXzMlnHRHUF_VHL0-lHMTGhklf2GHVuwEEHtzA,301
93
95
  edsl/jobs/tasks/task_status_enum.py,sha256=DOyrz61YlIS8R1W7izJNphcLrJ7I_ReUlfdRmk23h0Q,5333
94
96
  edsl/jobs/tokens/InterviewTokenUsage.py,sha256=u_6-IHpGFwZ6qMEXr24-jyLVUSSp4dSs_4iAZsBv7O4,1100
95
97
  edsl/jobs/tokens/TokenUsage.py,sha256=odj2-wDNEbHl9noyFAQ0DSKV0D9cv3aDOpmXufKZ8O4,1323
96
- edsl/language_models/LanguageModel.py,sha256=9orpce5VxYRlB3UdN-RJxjpnzy4fsTfYah_l5-Rf3uA,19043
97
- edsl/language_models/ModelList.py,sha256=DLeAq7o8uniZkP_-z8vJDMwf4JXksqLoPqOeeLI3QBE,2687
98
+ edsl/language_models/LanguageModel.py,sha256=5vW4hbACt8cJjQE8EDJnLr2DnsUYB449pR6vIedahE8,21265
99
+ edsl/language_models/ModelList.py,sha256=G8tzHqzz4exc28BGvGgVRk1Xwu8EDCiVWxMC5l8VnvI,2862
98
100
  edsl/language_models/RegisterLanguageModelsMeta.py,sha256=2bvWrVau2BRo-Bb1aO-QATH8xxuW_tF7NmqBMGDOfSg,8191
99
101
  edsl/language_models/__init__.py,sha256=bvY7Gy6VkX1gSbNkRbGPS-M1kUnb0EohL0FSagaEaTs,109
100
- edsl/language_models/registry.py,sha256=J7blAbRFHxr2nWSoe61G4p-6kOgzUlKclJ55xVldKWc,3191
102
+ edsl/language_models/registry.py,sha256=h5eLN7lsqpK5vcEsxn3gsARb9Qyx-k3jq2MMnyuATcY,3727
101
103
  edsl/language_models/repair.py,sha256=xaNunBRpMWgceSPOzk-ugp5WXtgLuuhj23TgXUeOobw,5963
102
104
  edsl/language_models/unused/ReplicateBase.py,sha256=J1oqf7mEyyKhRwNUomnptVqAsVFYCbS3iTW0EXpKtXo,3331
103
105
  edsl/notebooks/Notebook.py,sha256=qwDqUN2Gujr7WUneRrshzRBjHvcPpOIBRyqcrAOc90Q,7341
@@ -124,10 +126,10 @@ edsl/questions/QuestionBudget.py,sha256=K8cc1YOfoLWRoZBAkWO7WsMDZne0a5oAJMSxv2Jz
124
126
  edsl/questions/QuestionCheckBox.py,sha256=YHS-LEvR_1CWyg4usOlWfj9Gb_cCQlfIWIWhYRWn7Wo,6129
125
127
  edsl/questions/QuestionExtract.py,sha256=fjnsNLS2fNW6dfFuRyc2EgKEHx8ujjONmg2nSRynje4,3988
126
128
  edsl/questions/QuestionFreeText.py,sha256=ASj1s0EQYcZerJp476fscu_xEME8mKzVK3sPL6egiuU,3289
127
- edsl/questions/QuestionFunctional.py,sha256=rThYy1x_5_6blp7okSUlbHWXNa_4nd477TdkxxWW204,4984
129
+ edsl/questions/QuestionFunctional.py,sha256=jlC1eNE-kpp9o5CXKo-c3Re4PIq1_WmdJ66u9nD-W7w,4967
128
130
  edsl/questions/QuestionList.py,sha256=Wf7xDXJsQBsAD_yOrzZ_GstKGT7aZjimTkU6qyqOhhM,4051
129
- edsl/questions/QuestionMultipleChoice.py,sha256=Rvmi4YgOU9SquH4WIv4RiccTQWpqMTvcIQYmiyIu10o,6603
130
- edsl/questions/QuestionNumerical.py,sha256=QArFDhP9Adb4l6y-udnUqPNk2Q6vT4pGsY13TkHsLGs,3631
131
+ edsl/questions/QuestionMultipleChoice.py,sha256=AT_V-J6jeSoPmAGJprh_nCmZ71IFYLCwx2K_0FVJ8iI,6632
132
+ edsl/questions/QuestionNumerical.py,sha256=dQkobQTXkmMUY4f-lSVAiTS33009cDy5qFCM1gJeCbs,3459
131
133
  edsl/questions/QuestionRank.py,sha256=NEAwDt1at0zEM2S-E7jXMjglnlB0WhUlxSVJkzH4xSs,5876
132
134
  edsl/questions/RegisterQuestionsMeta.py,sha256=unON0CKpW-mveyhg9V3_BF_GYYwytMYP9h2ZZPetVNM,1994
133
135
  edsl/questions/SimpleAskMixin.py,sha256=YRLiHA6TPMKyLWvdAi7Mfnxcqtw7Kem6tH28YNb8n4U,2227
@@ -138,26 +140,26 @@ edsl/questions/derived/QuestionLinearScale.py,sha256=7tybIaMaDTMkTFC6CymusW69so-
138
140
  edsl/questions/derived/QuestionTopK.py,sha256=TouXKZt_h6Jd-2rAjkEOCJOzzei4Wa-3hjYq9CLxWws,2744
139
141
  edsl/questions/derived/QuestionYesNo.py,sha256=KtMGuAPYWv-7-9WGa0fIS2UBxf6KKjFpuTk_h8FPZbg,2076
140
142
  edsl/questions/derived/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- edsl/questions/descriptors.py,sha256=kCy7poJc_eo2ELfvI1AhDm6a-ge-PeLEeBoaViSVjYM,14812
143
+ edsl/questions/descriptors.py,sha256=W0_mGZKKiXv2E2BKIy8-4n_QDILh9sun85Oev1YRoLs,14791
142
144
  edsl/questions/question_registry.py,sha256=ZD7Y_towDdlnnmLq12vVewgQ3fEk9Ur0tCTWK8-WqeQ,5241
143
145
  edsl/questions/settings.py,sha256=er_z0ZW_dgmC5CHLWkaqBJiuWgAYzIund85M5YZFQAI,291
144
146
  edsl/results/Dataset.py,sha256=DZgb3vIj69ON7APQ6DimjBwAS1xZvZiXOg68CjW9E3I,8662
145
- edsl/results/DatasetExportMixin.py,sha256=1n67zXiDPifahEEy34AgBimRnv8taevFfNLnUxfYK5c,21361
146
- edsl/results/Result.py,sha256=TrsYmNFydMqk5CqsZ3dbNC4Zdzk_jPvCCldN3Oym780,14436
147
- edsl/results/Results.py,sha256=wgHxPvXJEzAF7HJuy8z_IL8f_5Q9d4z1Mk6wiUfOqA0,38155
147
+ edsl/results/DatasetExportMixin.py,sha256=rqNMcyjkV_pfs2OUdz0DYiIaT_48n1KZ9KaNbESuj1k,25418
148
+ edsl/results/Result.py,sha256=53lz1mGqmnt2wHl-Ccimbla7cNlg_mLUgOBQa6Qd19k,14433
149
+ edsl/results/Results.py,sha256=IUHfmcBVtZ3me4VvVBQsdKKtuMXaZtLkzIrH5US7aUY,38155
148
150
  edsl/results/ResultsDBMixin.py,sha256=Vs95zbSB4G7ENY4lU7OBdekg9evwTrtPH0IIL2NAFTk,7936
149
151
  edsl/results/ResultsExportMixin.py,sha256=XizBsPNxziyffirMA4kS7UHpYM1WIE4s1K-B7TqTfDw,1266
150
152
  edsl/results/ResultsFetchMixin.py,sha256=VEa0TKDcXbnTinSKs9YaE4WjOSLmlp9Po1_9kklFvSo,848
151
153
  edsl/results/ResultsGGMixin.py,sha256=SAYz8p4wb1g8x6KhBVz9NHOGib2c2XsqtTclpADrFeM,4344
152
- edsl/results/ResultsToolsMixin.py,sha256=I19kAO-BKszgjxzMljE1W8ZsOnpozmO2nc43-XBbrZk,2976
154
+ edsl/results/ResultsToolsMixin.py,sha256=mseEFxJCf9sjXdIxpjITt_UZBwdXxw2o2VLg5jMrALA,3017
153
155
  edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
154
156
  edsl/scenarios/FileStore.py,sha256=AevvU1qdLSmL4Q7cb1PhUiaJk1i5T0sgkTKBYf0KDN4,8722
155
- edsl/scenarios/Scenario.py,sha256=eQRMV6JD6mrlIMXc7-NK0I-LK5px2oC6rAR_w-qJPnE,14829
157
+ edsl/scenarios/Scenario.py,sha256=VpQzY3169Z18ZoNOu_pjIf66TXngIVFZHvQXUJeRdQg,15254
156
158
  edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
157
159
  edsl/scenarios/ScenarioImageMixin.py,sha256=VJ5FqyPrL5-ieORlWMpnjmOAFIau8QFZCIZyEBKgb6I,3530
158
- edsl/scenarios/ScenarioList.py,sha256=0Hx1JiXeHLfgKqSRQo2CO-HONgABHEC0lJVsaxZGm8o,18782
159
- edsl/scenarios/ScenarioListExportMixin.py,sha256=h5_yc__e6XolY6yP6T8cka5zU1mko8T5xbIQtYijNWQ,1003
160
- edsl/scenarios/ScenarioListPdfMixin.py,sha256=sRCHVG7z4u4ST4ce-I_Y4md8ZzC9-tj4an9PMouaHVg,3765
160
+ edsl/scenarios/ScenarioList.py,sha256=6evy6fQ3Kdk-vdMFIUT9vEvVXIGaeb8U0ds4V1Kv12I,20153
161
+ edsl/scenarios/ScenarioListExportMixin.py,sha256=nuBrSlkNogfVZzIV2vJai216ebWH3iJxiLJAJ_n0xg8,1410
162
+ edsl/scenarios/ScenarioListPdfMixin.py,sha256=dt7GzC2UZZpQjjilS7_eBm0BmqU6bDWWbBP7ejkhgHM,3830
161
163
  edsl/scenarios/__init__.py,sha256=KRwZCLf2R0qyJvv1NGbd8M51Bt6Ia6Iylg-Xq_2Fa6M,98
162
164
  edsl/shared.py,sha256=lgLa-mCk2flIhxXarXLtfXZjXG_6XHhC2A3O8yRTjXc,20
163
165
  edsl/study/ObjectEntry.py,sha256=e3xRPH8wCN8Pum5HZsQRYgnSoauSvjXunIEH79wu5A8,5788
@@ -170,7 +172,7 @@ edsl/surveys/Memory.py,sha256=-ikOtkkQldGB_BkPCW3o7AYwV5B_pIwlREw7aVCSHaQ,1113
170
172
  edsl/surveys/MemoryPlan.py,sha256=BeLuqS5Q8G2jSluHYFCAxVmj7cNPK-rDQ3mUsuDjikQ,7979
171
173
  edsl/surveys/Rule.py,sha256=ddZyZSObs4gsKtFSmcXkPigXDX8rrh1NFvAplP02TcA,11092
172
174
  edsl/surveys/RuleCollection.py,sha256=sN7aYDQJG3HmE-WxohgpctcQbHewjwE6NAqEVTxvFP8,13359
173
- edsl/surveys/Survey.py,sha256=uj8i76UOuSH0kXHncipq_4hvLIrt0QmtnodlI1iP6EA,48553
175
+ edsl/surveys/Survey.py,sha256=eB8S3KQ0d7nyJ0RqhCimmOXcO-d2_GquxvHMR0g6t90,48567
174
176
  edsl/surveys/SurveyCSS.py,sha256=NjJezs2sTlgFprN6IukjGKwNYmNdXnLjzV2w5K4z4RI,8415
175
177
  edsl/surveys/SurveyExportMixin.py,sha256=vj9bZReHx0wBK9sVuS0alzPIUDdg6AFFMd7bl1RKWKI,6555
176
178
  edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=Z-YqeedMqWOtCFy003YJ9aneJ1n4bn70lDoILwLtTc0,3966
@@ -197,7 +199,7 @@ edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,1
197
199
  edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
198
200
  edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
199
201
  edsl/utilities/utilities.py,sha256=oU5Gg6szTGqsJ2yBOS0aC3XooezLE8By3SdrQLLpqvA,10107
200
- edsl-0.1.30.dev5.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
201
- edsl-0.1.30.dev5.dist-info/METADATA,sha256=ZMHio4ApnpJuGkuSFhbeWi9r4mr6dTb4HNFUuZUTLfc,4103
202
- edsl-0.1.30.dev5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
203
- edsl-0.1.30.dev5.dist-info/RECORD,,
202
+ edsl-0.1.31.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
203
+ edsl-0.1.31.dist-info/METADATA,sha256=_oRw6BokkdLeR-NvC8wUs58e2s3IgoRe-RYdI6y3X7c,4166
204
+ edsl-0.1.31.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
205
+ edsl-0.1.31.dist-info/RECORD,,