edsl 0.1.36__py3-none-any.whl → 0.1.36.dev2__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.
@@ -1,12 +1,18 @@
1
1
  from __future__ import annotations
2
2
  import time
3
+ import math
3
4
  import asyncio
5
+ import functools
4
6
  import threading
5
7
  from typing import Coroutine, List, AsyncGenerator, Optional, Union, Generator
6
8
  from contextlib import contextmanager
7
9
  from collections import UserList
8
10
 
11
+ from rich.live import Live
12
+ from rich.console import Console
13
+
9
14
  from edsl.results.Results import Results
15
+ from edsl import shared_globals
10
16
  from edsl.jobs.interviews.Interview import Interview
11
17
  from edsl.jobs.runners.JobsRunnerStatus import JobsRunnerStatus
12
18
 
@@ -42,6 +48,8 @@ class JobsRunnerAsyncio:
42
48
  self.bucket_collection: "BucketCollection" = jobs.bucket_collection
43
49
  self.total_interviews: List["Interview"] = []
44
50
 
51
+ # self.jobs_runner_status = JobsRunnerStatus(self, n=1)
52
+
45
53
  async def run_async_generator(
46
54
  self,
47
55
  cache: Cache,
@@ -173,7 +181,6 @@ class JobsRunnerAsyncio:
173
181
  ] = question_name_to_prompts[answer_key_name]["system_prompt"]
174
182
 
175
183
  raw_model_results_dictionary = {}
176
- cache_used_dictionary = {}
177
184
  for result in valid_results:
178
185
  question_name = result.question_name
179
186
  raw_model_results_dictionary[
@@ -188,7 +195,6 @@ class JobsRunnerAsyncio:
188
195
  else 1.0 / result.cost
189
196
  )
190
197
  raw_model_results_dictionary[question_name + "_one_usd_buys"] = one_use_buys
191
- cache_used_dictionary[question_name] = result.cache_used
192
198
 
193
199
  result = Result(
194
200
  agent=interview.agent,
@@ -201,7 +207,6 @@ class JobsRunnerAsyncio:
201
207
  survey=interview.survey,
202
208
  generated_tokens=generated_tokens_dict,
203
209
  comments_dict=comments_dict,
204
- cache_used_dict=cache_used_dictionary,
205
210
  )
206
211
  result.interview_hash = hash(interview)
207
212
 
@@ -220,16 +225,17 @@ class JobsRunnerAsyncio:
220
225
  }
221
226
  interview_hashes = list(interview_lookup.keys())
222
227
 
223
- task_history = TaskHistory(self.total_interviews, include_traceback=False)
224
-
225
228
  results = Results(
226
229
  survey=self.jobs.survey,
227
230
  data=sorted(
228
231
  raw_results, key=lambda x: interview_hashes.index(x.interview_hash)
229
232
  ),
230
- task_history=task_history,
231
- cache=cache,
232
233
  )
234
+ results.cache = cache
235
+ results.task_history = TaskHistory(
236
+ self.total_interviews, include_traceback=False
237
+ )
238
+ results.has_unfixed_exceptions = results.task_history.has_unfixed_exceptions
233
239
  results.bucket_collection = self.bucket_collection
234
240
 
235
241
  if results.has_unfixed_exceptions and print_exceptions:
@@ -257,7 +263,6 @@ class JobsRunnerAsyncio:
257
263
  except Exception as e:
258
264
  print(e)
259
265
  remote_logging = False
260
-
261
266
  if remote_logging:
262
267
  filestore = HTMLFileStore(filepath)
263
268
  coop_details = filestore.push(description="Error report")
@@ -8,7 +8,7 @@ from edsl.jobs.tasks.task_status_enum import TaskStatus
8
8
 
9
9
 
10
10
  class TaskHistory:
11
- def __init__(self, interviews: List["Interview"], include_traceback: bool = False):
11
+ def __init__(self, interviews: List["Interview"], include_traceback=False):
12
12
  """
13
13
  The structure of a TaskHistory exception
14
14
 
@@ -25,7 +25,6 @@ class TaskHistory:
25
25
 
26
26
  @classmethod
27
27
  def example(cls):
28
- """ """
29
28
  from edsl.jobs.interviews.Interview import Interview
30
29
 
31
30
  from edsl.jobs.Jobs import Jobs
@@ -39,7 +38,6 @@ class TaskHistory:
39
38
  skip_retry=True,
40
39
  cache=False,
41
40
  raise_validation_errors=True,
42
- disable_remote_inference=True,
43
41
  )
44
42
 
45
43
  return cls(results.task_history.total_interviews)
@@ -74,29 +72,14 @@ class TaskHistory:
74
72
 
75
73
  def to_dict(self):
76
74
  """Return the TaskHistory as a dictionary."""
77
- # return {
78
- # "exceptions": [
79
- # e.to_dict(include_traceback=self.include_traceback)
80
- # for e in self.exceptions
81
- # ],
82
- # "indices": self.indices,
83
- # }
84
75
  return {
85
- "interviews": [i._to_dict() for i in self.total_interviews],
86
- "include_traceback": self.include_traceback,
76
+ "exceptions": [
77
+ e.to_dict(include_traceback=self.include_traceback)
78
+ for e in self.exceptions
79
+ ],
80
+ "indices": self.indices,
87
81
  }
88
82
 
89
- @classmethod
90
- def from_dict(cls, data: dict):
91
- """Create a TaskHistory from a dictionary."""
92
- if data is None:
93
- return cls([], include_traceback=False)
94
-
95
- from edsl.jobs.interviews.Interview import Interview
96
-
97
- interviews = [Interview.from_dict(i) for i in data["interviews"]]
98
- return cls(interviews, include_traceback=data["include_traceback"])
99
-
100
83
  @property
101
84
  def has_exceptions(self) -> bool:
102
85
  """Return True if there are any exceptions.
@@ -276,6 +259,7 @@ class TaskHistory:
276
259
  question_type = interview.survey.get_question(
277
260
  question_name
278
261
  ).question_type
262
+ # breakpoint()
279
263
  if (question_name, question_type) not in exceptions_by_question_name:
280
264
  exceptions_by_question_name[(question_name, question_type)] = 0
281
265
  exceptions_by_question_name[(question_name, question_type)] += len(
@@ -50,7 +50,6 @@ class QuestionFunctional(QuestionBase):
50
50
  requires_loop: Optional[bool] = False,
51
51
  function_source_code: Optional[str] = None,
52
52
  function_name: Optional[str] = None,
53
- unsafe: Optional[bool] = False,
54
53
  ):
55
54
  super().__init__()
56
55
  if func:
@@ -62,12 +61,9 @@ class QuestionFunctional(QuestionBase):
62
61
 
63
62
  self.requires_loop = requires_loop
64
63
 
65
- if unsafe:
66
- self.func = func
67
- else:
68
- self.func = create_restricted_function(
69
- self.function_name, self.function_source_code
70
- )
64
+ self.func = create_restricted_function(
65
+ self.function_name, self.function_source_code
66
+ )
71
67
 
72
68
  self.question_name = question_name
73
69
  self.question_text = question_text
edsl/results/Dataset.py CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  import random
5
- import json
6
5
  from collections import UserList
7
6
  from typing import Any, Union, Optional
8
7
 
@@ -111,17 +110,6 @@ class Dataset(UserList, ResultsExportMixin):
111
110
  new_data.append(observation)
112
111
  return Dataset(new_data)
113
112
 
114
- def to_json(self):
115
- """Return a JSON representation of the dataset.
116
-
117
- >>> d = Dataset([{'a.b':[1,2,3,4]}])
118
- >>> d.to_json()
119
- [{'a.b': [1, 2, 3, 4]}]
120
- """
121
- return json.loads(
122
- json.dumps(self.data)
123
- ) # janky but I want to make sure it's serializable & deserializable
124
-
125
113
  def _repr_html_(self) -> str:
126
114
  """Return an HTML representation of the dataset."""
127
115
  from edsl.utilities.utilities import data_to_html
edsl/results/Result.py CHANGED
@@ -75,7 +75,6 @@ class Result(Base, UserDict):
75
75
  question_to_attributes: Optional[dict] = None,
76
76
  generated_tokens: Optional[dict] = None,
77
77
  comments_dict: Optional[dict] = None,
78
- cache_used_dict: Optional[dict] = None,
79
78
  ):
80
79
  """Initialize a Result object.
81
80
 
@@ -131,7 +130,6 @@ class Result(Base, UserDict):
131
130
  self.question_to_attributes = question_to_attributes
132
131
  self.generated_tokens = generated_tokens
133
132
  self.comments_dict = comments_dict or {}
134
- self.cache_used_dict = cache_used_dict or {}
135
133
 
136
134
  self._combined_dict = None
137
135
  self._problem_keys = None
edsl/results/Results.py CHANGED
@@ -29,7 +29,6 @@ from edsl.results.ResultsFetchMixin import ResultsFetchMixin
29
29
  from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
30
30
  from edsl.utilities.utilities import dict_hash
31
31
 
32
-
33
32
  from edsl.Base import Base
34
33
 
35
34
 
@@ -90,7 +89,6 @@ class Results(UserList, Mixins, Base):
90
89
  cache: Optional["Cache"] = None,
91
90
  job_uuid: Optional[str] = None,
92
91
  total_results: Optional[int] = None,
93
- task_history: Optional["TaskHistory"] = None,
94
92
  ):
95
93
  """Instantiate a `Results` object with a survey and a list of `Result` objects.
96
94
 
@@ -102,7 +100,6 @@ class Results(UserList, Mixins, Base):
102
100
  """
103
101
  super().__init__(data)
104
102
  from edsl.data.Cache import Cache
105
- from edsl.jobs.tasks.TaskHistory import TaskHistory
106
103
 
107
104
  self.survey = survey
108
105
  self.created_columns = created_columns or []
@@ -110,8 +107,6 @@ class Results(UserList, Mixins, Base):
110
107
  self._total_results = total_results
111
108
  self.cache = cache or Cache()
112
109
 
113
- self.task_history = task_history or TaskHistory(interviews=[])
114
-
115
110
  if hasattr(self, "_add_output_functions"):
116
111
  self._add_output_functions()
117
112
 
@@ -281,7 +276,6 @@ class Results(UserList, Mixins, Base):
281
276
  "survey": self.survey.to_dict(),
282
277
  "created_columns": self.created_columns,
283
278
  "cache": Cache() if not hasattr(self, "cache") else self.cache.to_dict(),
284
- "task_history": self.task_history.to_dict(),
285
279
  }
286
280
 
287
281
  def compare(self, other_results):
@@ -301,10 +295,6 @@ class Results(UserList, Mixins, Base):
301
295
  "b_not_a": [other_results[i] for i in indices_other],
302
296
  }
303
297
 
304
- @property
305
- def has_unfixed_exceptions(self):
306
- return self.task_history.has_unfixed_exceptions
307
-
308
298
  @add_edsl_version
309
299
  def to_dict(self) -> dict[str, Any]:
310
300
  """Convert the Results object to a dictionary.
@@ -315,7 +305,7 @@ class Results(UserList, Mixins, Base):
315
305
 
316
306
  >>> r = Results.example()
317
307
  >>> r.to_dict().keys()
318
- dict_keys(['data', 'survey', 'created_columns', 'cache', 'task_history', 'edsl_version', 'edsl_class_name'])
308
+ dict_keys(['data', 'survey', 'created_columns', 'cache', 'edsl_version', 'edsl_class_name'])
319
309
  """
320
310
  return self._to_dict()
321
311
 
@@ -368,7 +358,6 @@ class Results(UserList, Mixins, Base):
368
358
  """
369
359
  from edsl import Survey, Cache
370
360
  from edsl.results.Result import Result
371
- from edsl.jobs.tasks.TaskHistory import TaskHistory
372
361
 
373
362
  try:
374
363
  results = cls(
@@ -378,7 +367,6 @@ class Results(UserList, Mixins, Base):
378
367
  cache=(
379
368
  Cache.from_dict(data.get("cache")) if "cache" in data else Cache()
380
369
  ),
381
- task_history=TaskHistory.from_dict(data.get("task_history")),
382
370
  )
383
371
  except Exception as e:
384
372
  raise ResultsDeserializationError(f"Error in Results.from_dict: {e}")
@@ -77,19 +77,8 @@ class FileStore(Scenario):
77
77
  def __str__(self):
78
78
  return "FileStore: self.path"
79
79
 
80
- @classmethod
81
- def example(self):
82
- import tempfile
83
-
84
- with tempfile.NamedTemporaryFile(suffix=".txt", delete=False) as f:
85
- f.write(b"Hello, World!")
86
-
87
- return self(path=f.name)
88
-
89
80
  @property
90
81
  def size(self) -> int:
91
- if self.base64_string != None:
92
- return (len(self.base64_string) / 4.0) * 3 # from base64 to char size
93
82
  return os.path.getsize(self.path)
94
83
 
95
84
  def upload_google(self, refresh: bool = False) -> None:
@@ -104,7 +93,7 @@ class FileStore(Scenario):
104
93
  return cls(**d)
105
94
 
106
95
  def __repr__(self):
107
- return f"FileStore(path='{self.path}')"
96
+ return f"FileStore({self.path})"
108
97
 
109
98
  def encode_file_to_base64_string(self, file_path: str):
110
99
  try:
@@ -283,8 +272,7 @@ class CSVFileStore(FileStore):
283
272
 
284
273
  with tempfile.NamedTemporaryFile(suffix=".csv", delete=False) as f:
285
274
  r.to_csv(filename=f.name)
286
-
287
- return cls(f.name)
275
+ return cls(f.name)
288
276
 
289
277
  def view(self):
290
278
  import pandas as pd
@@ -364,8 +352,7 @@ class PDFFileStore(FileStore):
364
352
 
365
353
  with tempfile.NamedTemporaryFile(suffix=".pdf", delete=False) as f:
366
354
  f.write(pdf_string.encode())
367
-
368
- return cls(f.name)
355
+ return cls(f.name)
369
356
 
370
357
 
371
358
  class PNGFileStore(FileStore):
@@ -380,8 +367,7 @@ class PNGFileStore(FileStore):
380
367
 
381
368
  with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as f:
382
369
  f.write(png_string.encode())
383
-
384
- return cls(f.name)
370
+ return cls(f.name)
385
371
 
386
372
  def view(self):
387
373
  import matplotlib.pyplot as plt
@@ -421,8 +407,7 @@ class HTMLFileStore(FileStore):
421
407
 
422
408
  with tempfile.NamedTemporaryFile(suffix=".html", delete=False) as f:
423
409
  f.write("<html><body><h1>Test</h1></body></html>".encode())
424
-
425
- return cls(f.name)
410
+ return cls(f.name)
426
411
 
427
412
  def view(self):
428
413
  import webbrowser
@@ -134,13 +134,7 @@ class Scenario(Base, UserDict, ScenarioHtmlMixin):
134
134
  >>> s.to_dict()
135
135
  {'food': 'wood chips', 'edsl_version': '...', 'edsl_class_name': 'Scenario'}
136
136
  """
137
- from edsl.scenarios.FileStore import FileStore
138
-
139
- d = self.data.copy()
140
- for key, value in d.items():
141
- if isinstance(value, FileStore):
142
- d[key] = value.to_dict()
143
- return d
137
+ return self.data.copy()
144
138
 
145
139
  @add_edsl_version
146
140
  def to_dict(self) -> dict:
@@ -445,14 +439,6 @@ class Scenario(Base, UserDict, ScenarioHtmlMixin):
445
439
  >>> Scenario.from_dict({"food": "wood chips"})
446
440
  Scenario({'food': 'wood chips'})
447
441
  """
448
- from edsl.scenarios.FileStore import FileStore
449
-
450
- for key, value in d.items():
451
- # TODO: we should check this better if its a FileStore + add remote security check against path traversal
452
- if (
453
- isinstance(value, dict) and "base64_string" in value and "path" in value
454
- ) or isinstance(value, FileStore):
455
- d[key] = FileStore.from_dict(value)
456
442
  return cls(d)
457
443
 
458
444
  def _table(self) -> tuple[dict, list]:
@@ -1,4 +1,2 @@
1
1
  from edsl.scenarios.Scenario import Scenario
2
2
  from edsl.scenarios.ScenarioList import ScenarioList
3
-
4
- # from edsl.scenarios.FileStore import FileStore
edsl/surveys/Survey.py CHANGED
@@ -1212,9 +1212,6 @@ class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
1212
1212
 
1213
1213
  return Jobs(survey=self)
1214
1214
 
1215
- def show_prompts(self):
1216
- return self.to_jobs().show_prompts()
1217
-
1218
1215
  # endregion
1219
1216
 
1220
1217
  # region: Running the survey
@@ -5,12 +5,9 @@ from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
5
5
 
6
6
 
7
7
  class Instruction:
8
- def __init__(
9
- self, name, text, preamble="You were given the following instructions:"
10
- ):
8
+ def __init__(self, name, text):
11
9
  self.name = name
12
10
  self.text = text
13
- self.preamble = preamble
14
11
 
15
12
  def __str__(self):
16
13
  return self.text
@@ -19,17 +16,7 @@ class Instruction:
19
16
  return """Instruction(name="{}", text="{}")""".format(self.name, self.text)
20
17
 
21
18
  def _to_dict(self):
22
- return {
23
- "name": self.name,
24
- "text": self.text,
25
- "edsl_class_name": "Instruction",
26
- "preamble": self.preamble,
27
- }
28
-
29
- def add_question(self, question) -> "Survey":
30
- from edsl import Survey
31
-
32
- return Survey([self, question])
19
+ return {"name": self.name, "text": self.text, "edsl_class_name": "Instruction"}
33
20
 
34
21
  @add_edsl_version
35
22
  def to_dict(self):
@@ -44,8 +31,4 @@ class Instruction:
44
31
  @classmethod
45
32
  @remove_edsl_version
46
33
  def from_dict(cls, data):
47
- return cls(
48
- data["name"],
49
- data["text"],
50
- data.get("preamble", "You were given the following instructions:"),
51
- )
34
+ return cls(data["name"], data["text"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.36
3
+ Version: 0.1.36.dev2
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -1,13 +1,13 @@
1
- edsl/Base.py,sha256=xm_WdwWrQRO0Iy88XsOSRm00ZNHv5pX4LbFid8oilX8,9433
1
+ edsl/Base.py,sha256=wdFpHWlQlGNL4XfOmYA0AK9YupMDxK3G7mDHCQp60o4,9295
2
2
  edsl/BaseDiff.py,sha256=RoVEh52UJs22yMa7k7jv8se01G62jJNWnBzaZngo-Ug,8260
3
3
  edsl/TemplateLoader.py,sha256=sDBlSMt7EfOduM7w3h6v03gvh_Rzn9hVrlS-iLSQdZA,849
4
- edsl/__init__.py,sha256=5dKXbmvmALx-_7KRNdC66cvP_dpLpsfTDBV57SMgTzY,1817
5
- edsl/__version__.py,sha256=z6JYG2yALo9HI8zZMbgirtKP92kE14gI-nkfBP7Sf24,23
6
- edsl/agents/Agent.py,sha256=OJlBBdiHJztpvbyFwIevF2skYZdtvinkP9OccpSH0to,29454
4
+ edsl/__init__.py,sha256=UZcx9RHSi3Dslh2lWvCOeppdMW9Xzw_YLs-kFaNW1MU,1770
5
+ edsl/__version__.py,sha256=Dnc20k6lGmSidtew9MDgyZjR_O8UzfDzRib-ENbteok,28
6
+ edsl/agents/Agent.py,sha256=dG3SbCm4IpHpObcWm-OejfYHtVXa5NlxGKYKOc-dUxQ,29311
7
7
  edsl/agents/AgentList.py,sha256=qo8VK3Ov0YOSbsBcHmlwLZBH81CcDfy5IEcx9AVH78M,10963
8
8
  edsl/agents/Invigilator.py,sha256=m4T-z4aNCGd4LKjLXVNI2VszYW-pQeScfcFAxkb0pWc,9080
9
- edsl/agents/InvigilatorBase.py,sha256=tE0Te6OGp8JSGF-yMkaY6fbKhrWt6ZI2jc8P5S374dQ,10435
10
- edsl/agents/PromptConstructor.py,sha256=QRpGbTfOPCdLcehR0miDNwDBIKb1mmIyVKUHP8Kgj8s,13605
9
+ edsl/agents/InvigilatorBase.py,sha256=qIdAiriXAbnJH_SN9w2UAXHcDgQvk8Ar3QerKFjtPwM,10341
10
+ edsl/agents/PromptConstructor.py,sha256=1k_Xni5T_ZB5_3hGFLzYiD1fPK4911IIatVHz9qD1s8,13006
11
11
  edsl/agents/__init__.py,sha256=B1dWfV4QWOo8cc2KeuetdFGeNhZ8XHc0Q8YhQW9k7BE,136
12
12
  edsl/agents/descriptors.py,sha256=m8ND3-2-JbgNX1HGakBNLIeemwsgYa1mQxYO9GW33hw,2934
13
13
  edsl/agents/prompt_helpers.py,sha256=rHUxM_F0kCOkJmnhCyK-amFKViAYvpRRLD8LHFLGqQw,5023
@@ -40,18 +40,17 @@ edsl/conjure/__init__.py,sha256=1lPYFjV73GzYYSXiTyxopM4nKcXVHumEEo0fe06DbMo,535
40
40
  edsl/conjure/examples/placeholder.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  edsl/conjure/naming_utilities.py,sha256=8uoGaCPZQKLwz2HudtsFSovivTGumQrFYxXxck5WUZQ,4964
42
42
  edsl/conjure/utilities.py,sha256=yRdOJx9KIpWXMx41Bbfysx7Zd4v2ROwca5L4T1rmtQM,5539
43
- edsl/conversation/Conversation.py,sha256=h_t9JWbMlec2788ojtxi0skYicchrDsy2j6K-mDpHKM,7633
43
+ edsl/conversation/Conversation.py,sha256=NdWH62XpcF6hoaG0ScMho_c3TO7PfBnbdlppUN-j07k,7627
44
44
  edsl/conversation/car_buying.py,sha256=Quh2Q8O9YoCyTKJUy3li376QFIOcL1gX0y89w3wlSl4,1950
45
45
  edsl/conversation/mug_negotiation.py,sha256=mjvAqErD4AjN3G2za2c-X-3axOShW-zAJUeiJqTxVPA,2616
46
46
  edsl/conversation/next_speaker_utilities.py,sha256=bqr5JglCd6bdLc9IZ5zGOAsmN2F4ERiubSMYvZIG7qk,3629
47
- edsl/coop/PriceFetcher.py,sha256=pCCWBqFnSv8iYpgQKhAzVCdan1xTCNesZgmIB34N4HY,1770
47
+ edsl/coop/PriceFetcher.py,sha256=7q8r1FqE9ap1CMi6WiE_pZQhYxEqG9_tgPgGxLQYVX8,1894
48
48
  edsl/coop/__init__.py,sha256=4iZCwJSzJVyjBYk8ggGxY2kZjq9dXVT1jhyPDNyew4I,115
49
- edsl/coop/coop.py,sha256=TwtJY4uYOnSbWXPNZ-o3MFZigswBJnqmIyGFeoQSHws,29846
49
+ edsl/coop/coop.py,sha256=_wdT6Z-fFYGtAWLn1e98Vv8hgwhdJM2vH_2G-J2ugiI,28547
50
50
  edsl/coop/utils.py,sha256=UZwljKYW_Yjw7RYcjOg3SW7fn1pyHQfJ1fM48TBNoss,3601
51
51
  edsl/data/Cache.py,sha256=jDt0LoZjLpGnM8-CraQEcsQaVg--U3BiBR1zHj0nDn8,16536
52
52
  edsl/data/CacheEntry.py,sha256=_5UiFaJQu_U-Z1_lEPt-h6Gaidp2Eunk02wOd3Ni3MQ,7252
53
53
  edsl/data/CacheHandler.py,sha256=DxbfeT2nZGRu8yQkbWr2tyEnhNiClevMsd5KZMCq2f0,4793
54
- edsl/data/RemoteCacheSync.py,sha256=is3j644YAZDPCt4bMxOZpXtJkCXLs_hoKukxQosKKXM,3628
55
54
  edsl/data/SQLiteDict.py,sha256=V5Nfnxctgh4Iblqcw1KmbnkjtfmWrrombROSQ3mvg6A,8979
56
55
  edsl/data/__init__.py,sha256=KBNGGEuGHq--D-TlpAQmvv_If906dJc1Gsy028zOx78,170
57
56
  edsl/data/orm.py,sha256=Jz6rvw5SrlxwysTL0QI9r68EflKxeEBmf6j6himHDS8,238
@@ -60,7 +59,7 @@ edsl/enums.py,sha256=Z6nhaP8p3z0UJSfsCGb6VQUtGUKw3AK6yC0UDwOi05c,5247
60
59
  edsl/exceptions/__init__.py,sha256=HVg-U-rJ0fRoG9Rws6gnK5S9B68SkPWDPsoD6KpMZ-A,1370
61
60
  edsl/exceptions/agents.py,sha256=3SORFwFbMGrF6-vAL2GrKEVdPcXo7md_k2oYufnVXHA,673
62
61
  edsl/exceptions/configuration.py,sha256=qH2sInNTndKlCLAaNgaXHyRFdKQHL7-dElB_j8wz9g4,351
63
- edsl/exceptions/coop.py,sha256=xunPPrnbcNHn60wnH-Qw0rC_Ey99X_N7HnOBF8BQg7E,138
62
+ edsl/exceptions/coop.py,sha256=xDr7k_Tir6L5AxO6GMmoFyUjZ3DIenPQflpUkaTqJl0,38
64
63
  edsl/exceptions/data.py,sha256=K24CjgwFiMWxrF1Z2dF6F7Vfrge_y9kMK_wsYYSaroU,209
65
64
  edsl/exceptions/general.py,sha256=zAyJnppPjjxQAn6X3A5fetmv5FUR7kQDU58vwBKvAks,1114
66
65
  edsl/exceptions/jobs.py,sha256=sSUATmzBIN1oINWuwPExxPqIWmfCo0XYj_yR4dJzVjo,803
@@ -75,39 +74,39 @@ edsl/inference_services/AzureAI.py,sha256=Xd3r4Y5OQReW-hG67ymK3LSDLiHj5hMFuvGEz5
75
74
  edsl/inference_services/DeepInfraService.py,sha256=fWlH5sCNxf8eHPHxPPxJMEVWpCM9sDenkC8IZYqtXfA,515
76
75
  edsl/inference_services/GoogleService.py,sha256=CeyQ2Db_cCFOIVvetSwsFLqenJFrg4EGoRYwIe7-7-U,5422
77
76
  edsl/inference_services/GroqService.py,sha256=eDMq8d7YAlJ2689ywaoaPGvMgFfOiX1KYlF_vr97N6I,510
78
- edsl/inference_services/InferenceServiceABC.py,sha256=Js_XFM4678C0NrTXbmSKLyIsiNzye55gOoz2-FyiC7E,4694
79
- edsl/inference_services/InferenceServicesCollection.py,sha256=fq6hiBeJal3V_JhnMrKljvmewCL70hNV1jCzmuk5AOI,3016
77
+ edsl/inference_services/InferenceServiceABC.py,sha256=rXqorwbKqzlwui2cxum8_TRrBcfOkgB9s0xULHYGQ1Y,3709
78
+ edsl/inference_services/InferenceServicesCollection.py,sha256=EDyxnoSjGXhWob_ost7U8WUYjn1jgL_noB0-VlXBnOo,2810
80
79
  edsl/inference_services/MistralAIService.py,sha256=7mUsBEZdEWIjfh4qMNemTT2xYMq7k0yuMLGtDTdfp4Y,3878
81
80
  edsl/inference_services/OllamaService.py,sha256=oro9CRl8IUE2Ro-zE69Cr4Zaf6Gdw29XW5CFU-46E0k,498
82
81
  edsl/inference_services/OpenAIService.py,sha256=wraTu62bZojmgAXHNG6pJMMPZiyO1pSDfY73LVaBR_I,7621
83
82
  edsl/inference_services/TestService.py,sha256=-jTXkl_qLt1k8gJjRb0SMgTb9EY-XMTP-ZUL9AJcUCA,3009
84
83
  edsl/inference_services/TogetherAIService.py,sha256=p_31ccrfN25kZF2xlAlUkb7w1EL4lGjmkSv-5qZ7TtY,6301
85
84
  edsl/inference_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- edsl/inference_services/models_available_cache.py,sha256=bOvevfRn2HlmBcHalaDkjFLxiw0JJhsXVUHZo_OhgjA,4061
85
+ edsl/inference_services/models_available_cache.py,sha256=HtGNaYgrxY2oPy-QruKhjj6LUzhGNqBhLHFWMoMi1E4,3312
87
86
  edsl/inference_services/rate_limits_cache.py,sha256=HYslviz7mxF9U4CUTPAkoyBsiXjSju-YCp4HHir6e34,1398
88
87
  edsl/inference_services/registry.py,sha256=Fn6va65MqD9lnFvT603ZnU7Ok8IW64M2MzOH57kf9-A,1240
89
88
  edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
90
89
  edsl/jobs/Answers.py,sha256=c4LpigQjdnMr7iJu8571C4FggGPVudfT7hbJgmgKW40,1821
91
- edsl/jobs/Jobs.py,sha256=_MrbSg-gWWASEEpPtiZcfTX-D8rN3NMg9V0vVZXLFeg,40176
90
+ edsl/jobs/Jobs.py,sha256=t37-_8PemRGfQABTyuXPYW53-4sevPWkvF6qeq8oLxc,40183
92
91
  edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
93
92
  edsl/jobs/buckets/BucketCollection.py,sha256=11CRisE1WAPcAlI3YJK3DVvu0AqSvv8KskXo4Q1waSk,2286
94
93
  edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
95
94
  edsl/jobs/buckets/TokenBucket.py,sha256=7fG4omzTcj5xC2iJLO9bfBkdAGs6Y3weXzlA3BgPr0E,9090
96
- edsl/jobs/interviews/Interview.py,sha256=hInquPQ0msoQfcNPemXmtIo3SMrECbqICYhno_6m_n0,25987
97
- edsl/jobs/interviews/InterviewExceptionCollection.py,sha256=ZIe9nnI8pznxp1D0K2Ii9SHorc9-f0k_lQV-Giq41P8,3666
98
- edsl/jobs/interviews/InterviewExceptionEntry.py,sha256=2eXLeeGYWOhV8dhtJ-oj05yd1PLKU8j2y3ztqo3ZwHo,5727
95
+ edsl/jobs/interviews/Interview.py,sha256=epaxVw53gplPpDpj1n_ahL3Pibs8vqCasF9QjXve1do,24963
96
+ edsl/jobs/interviews/InterviewExceptionCollection.py,sha256=Ez8BCZUD3odqoY9h-gzYKKM8yaHynQ-eYw2uMDh7t98,3279
97
+ edsl/jobs/interviews/InterviewExceptionEntry.py,sha256=2ZQOrhoHvfZJx9p357BQUZCfMXGkuU4xITYLyFGK9sg,4806
99
98
  edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
100
99
  edsl/jobs/interviews/InterviewStatisticsCollection.py,sha256=_ZZ0fnZBQiIywP9Q_wWjpWhlfcPe2cn32GKut10t5RI,788
101
100
  edsl/jobs/interviews/InterviewStatusDictionary.py,sha256=MSyys4hOWe1d8gfsUvAPbcKrs8YiPnz8jpufBSJL7SU,2485
102
101
  edsl/jobs/interviews/InterviewStatusLog.py,sha256=6u0F8gf5tha39VQL-IK_QPkCsQAYVOx_IesX7TDDX_A,3252
103
102
  edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AEOxhTim8,1745
104
103
  edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
105
- edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=Uo-05NIWqDWp4fdIewirEWSTX1yBwFqBSL1TldyizS4,12739
104
+ edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=SXWFTgTYQzqIaBjPQ2mRrxR3aGFMQyw2eD9wX8tZNkQ,12850
106
105
  edsl/jobs/runners/JobsRunnerStatus.py,sha256=4eCh9sRpswGdKeSMW9pCGCAjJZa-OrWUPI7tsxIy_g4,12112
107
106
  edsl/jobs/runners/JobsRunnerStatusData.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
107
  edsl/jobs/tasks/QuestionTaskCreator.py,sha256=K-xATHIXMWPTMOnms5UDW30eTIlIfebf7oOEfwrh1ME,10072
109
108
  edsl/jobs/tasks/TaskCreators.py,sha256=XqAbNU33378Z4PQncokbfJwnKt3KHR9aqa5fKYRDpfg,2694
110
- edsl/jobs/tasks/TaskHistory.py,sha256=k2uspUTjzBiFSH5I5in-IGFR4sTsI593sLlca63uFn8,14832
109
+ edsl/jobs/tasks/TaskHistory.py,sha256=xRSo22ipyUSJ15w_k2Jc3dZ04VLwft8zfvm3smAIYrA,14227
111
110
  edsl/jobs/tasks/TaskStatusLog.py,sha256=bqH36a32F12fjX-M-4lNOhHaK2-WLFzKE-r0PxZPRjI,546
112
111
  edsl/jobs/tasks/task_status_enum.py,sha256=DOyrz61YlIS8R1W7izJNphcLrJ7I_ReUlfdRmk23h0Q,5333
113
112
  edsl/jobs/tokens/InterviewTokenUsage.py,sha256=u_6-IHpGFwZ6qMEXr24-jyLVUSSp4dSs_4iAZsBv7O4,1100
@@ -134,7 +133,7 @@ edsl/questions/QuestionBudget.py,sha256=TJgPsyqafJdJw5if0zVxh7zHloourINUqUWfWIlR
134
133
  edsl/questions/QuestionCheckBox.py,sha256=wC_doEdNZi4y8Uz-tXZyQ2GYS5wQKOWhbVUnyVLoACU,12840
135
134
  edsl/questions/QuestionExtract.py,sha256=PlXwMeZgPAFBXIHSXpFMYTToag-HwA9C7u6-Z3bQMek,6103
136
135
  edsl/questions/QuestionFreeText.py,sha256=uXJxrrAGCq0-J6WpO6TBNFBNOC2ztoEVa-2UMXuwlak,3384
137
- edsl/questions/QuestionFunctional.py,sha256=772tduB8zFs5xlssKBay__4_SilfiDkoe-IvK0s2ftU,5247
136
+ edsl/questions/QuestionFunctional.py,sha256=yZQFLQAxfNsAIETffFoBr-Ltb2oFPeywu-nhm9qjYRc,5133
138
137
  edsl/questions/QuestionList.py,sha256=vs2AE8OnbwVsly-sorb9dfIibdF1BpOaCRYyvwXYSzY,7209
139
138
  edsl/questions/QuestionMultipleChoice.py,sha256=Yj94-6fwFqDI9UvjwSCOfKnp4gBB86XMmCsL7lbX-t4,10292
140
139
  edsl/questions/QuestionNumerical.py,sha256=_jMZ28DZHYAv_g3Y3vCnmzerMs995on0Ng6j4pDcfHo,4959
@@ -200,11 +199,11 @@ edsl/questions/templates/top_k/question_presentation.jinja,sha256=2u8XIkFPWzOuhb
200
199
  edsl/questions/templates/yes_no/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
200
  edsl/questions/templates/yes_no/answering_instructions.jinja,sha256=UAcssfcYeW8zytmPOVJOVQEdwdvlRspE8WnatYvreJQ,172
202
201
  edsl/questions/templates/yes_no/question_presentation.jinja,sha256=hoEVj4GQD3EYnR2AStXkMFOJeqISNoEVzBd8-cx2yWg,273
203
- edsl/results/Dataset.py,sha256=udJvOr9ePfD5xfy5k2zaNNWr4Qg_yp5s_f1YKEcVtKc,9547
202
+ edsl/results/Dataset.py,sha256=XeCWNcni1rde9iVzmC1WTIne2cip4-f2gQL5iaJfXNw,9202
204
203
  edsl/results/DatasetExportMixin.py,sha256=-YR-UeuIW_8u0a8HnQ9R6V41DxCq22_AlsD48fXv0sw,25890
205
204
  edsl/results/DatasetTree.py,sha256=nwEgnWBqRXUxagSCEgqwikmIo8ztUxaF-QH-m-8myyQ,4985
206
- edsl/results/Result.py,sha256=ypLroL1mFiJjx_xrI8LGBh6EwZid7S3Z23r9N8k5z8o,15570
207
- edsl/results/Results.py,sha256=U5_yAru7ShvKuxLCoWVMilVnpgHUZtoEXYHuko1hQ0w,41314
205
+ edsl/results/Result.py,sha256=o3Tg07loDcwNTb6wPgV_qS7_REkwcMVouc9t_-zwkpw,15469
206
+ edsl/results/Results.py,sha256=zp4yDt-rPqgEPpv2xCGppQIzzwiKX-BbUpnJtY739L4,40807
208
207
  edsl/results/ResultsDBMixin.py,sha256=Hc08aOiArBf9jbxI5uV4VL4wT6BLOkaaEgTMb3zyTUI,7922
209
208
  edsl/results/ResultsExportMixin.py,sha256=XizBsPNxziyffirMA4kS7UHpYM1WIE4s1K-B7TqTfDw,1266
210
209
  edsl/results/ResultsFetchMixin.py,sha256=VEa0TKDcXbnTinSKs9YaE4WjOSLmlp9Po1_9kklFvSo,848
@@ -213,13 +212,13 @@ edsl/results/ResultsToolsMixin.py,sha256=mseEFxJCf9sjXdIxpjITt_UZBwdXxw2o2VLg5jM
213
212
  edsl/results/Selector.py,sha256=4AsFD71FKTFY1a0_AImsYWcYKx-RXPG6RgwsAvuNW3k,4403
214
213
  edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
215
214
  edsl/results/tree_explore.py,sha256=hQjiO4E71rIOPDgEHgK8T8ukxqoNdgX_tvyiDlG4_9U,4624
216
- edsl/scenarios/FileStore.py,sha256=6XeRxYJmxlAWDiVozlO0hINChgECyPTpMjJskAltFzg,14260
217
- edsl/scenarios/Scenario.py,sha256=k6md3dcz0iZ50hV1biD4XrN-drpUgrfmFn5i8mLOezs,17418
215
+ edsl/scenarios/FileStore.py,sha256=V_zn2RmVclcBQTvqghotnTO97YHWUXqeVfN7eMfpfUM,13929
216
+ edsl/scenarios/Scenario.py,sha256=ZG1x4_MmWP9j0gakLwsxOZ7ESMy3ifwBMhgQlHvsYo8,16809
218
217
  edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
219
218
  edsl/scenarios/ScenarioList.py,sha256=1zbwDICXbvtUGA5bDlhThNp9pfhBGIHIqhK2cX-th50,40942
220
219
  edsl/scenarios/ScenarioListExportMixin.py,sha256=wfffY9xy_1QyIM-1xnisr64izSLjmyuotUYY5iDLodc,1681
221
220
  edsl/scenarios/ScenarioListPdfMixin.py,sha256=z_H2sZn5SCSq6nRLSU5jefaOlh4sqJLyOY_Ld0XCR18,8332
222
- edsl/scenarios/__init__.py,sha256=1X03GA_ltVRzNT5KQIuATj3qBcpFCvvGWojr3wggGtk,148
221
+ edsl/scenarios/__init__.py,sha256=KRwZCLf2R0qyJvv1NGbd8M51Bt6Ia6Iylg-Xq_2Fa6M,98
223
222
  edsl/shared.py,sha256=lgLa-mCk2flIhxXarXLtfXZjXG_6XHhC2A3O8yRTjXc,20
224
223
  edsl/study/ObjectEntry.py,sha256=e3xRPH8wCN8Pum5HZsQRYgnSoauSvjXunIEH79wu5A8,5788
225
224
  edsl/study/ProofOfWork.py,sha256=FaqYtLgeiTEQXWKukPgPUTWMcIN5t1FR7h7Re8QEtgc,3433
@@ -231,7 +230,7 @@ edsl/surveys/Memory.py,sha256=-ikOtkkQldGB_BkPCW3o7AYwV5B_pIwlREw7aVCSHaQ,1113
231
230
  edsl/surveys/MemoryPlan.py,sha256=VESoPM0C_4LUngkskE51rOca_4vbXC2yjfwrBXtHfHA,9029
232
231
  edsl/surveys/Rule.py,sha256=RlERae5n5jFTnEp597UF50YGXtywECU1nulYdsSlfh0,12223
233
232
  edsl/surveys/RuleCollection.py,sha256=VBx9-OuBBFIJlRYfpbWIjMVFSA5iMwTzdx5yl8giQA8,14871
234
- edsl/surveys/Survey.py,sha256=aLdUpsVeIVMoCRoN1j4rUhg0yQOSfSGS5Zc_lLFVpoU,72199
233
+ edsl/surveys/Survey.py,sha256=EYXkA0CzgpTIlwnVG21NQgBUo-vMRZhXrkP2sbT5hq4,72125
235
234
  edsl/surveys/SurveyCSS.py,sha256=NjJezs2sTlgFprN6IukjGKwNYmNdXnLjzV2w5K4z4RI,8415
236
235
  edsl/surveys/SurveyExportMixin.py,sha256=Kvkd2ku2Kemsn2Nw-Yt8GTnGFcUqfEiKznmisAeO7ck,8339
237
236
  edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=dEG_f-L0ZAyWU5Ta584IX5GZurjVt1tbIISo5z61Jvg,4004
@@ -240,7 +239,7 @@ edsl/surveys/__init__.py,sha256=vjMYVlP95fHVqqw2FfKXRuYbTArZkZr1nK4FnXzZWzs,129
240
239
  edsl/surveys/base.py,sha256=XJHGEbbsH6hlYYkmI4isVLD8guLz8BdhR-eQRL78mc4,1115
241
240
  edsl/surveys/descriptors.py,sha256=3B-hBVvGpLlVBCyOnPuxkLjesvpr0QIuATbggp_MJ7o,2076
242
241
  edsl/surveys/instructions/ChangeInstruction.py,sha256=XDLuI5nVI60iJz1w1kLaKmYryAYE0XIyRbElBtNjVVM,1265
243
- edsl/surveys/instructions/Instruction.py,sha256=l_ET6HCMt0ZU1BBHqP4EYKjEjeAS5Eg6NBJsCLO70R8,1352
242
+ edsl/surveys/instructions/Instruction.py,sha256=WaTGihAQ6lCtm5W4vknTamkPzDp-eIAirdtGV37fdbc,925
244
243
  edsl/surveys/instructions/InstructionCollection.py,sha256=eO-i9zgbk8q0D8hnawDrioS-iqXOEE7eKm5cgYNgwrU,2931
245
244
  edsl/surveys/instructions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
245
  edsl/templates/error_reporting/base.html,sha256=IkV24ZaUCNX303ZqVTWkFsJOnu5BG_SULrKN2YejUxQ,552
@@ -273,7 +272,7 @@ edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,1
273
272
  edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
274
273
  edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
275
274
  edsl/utilities/utilities.py,sha256=gqMtWWNEZkWLiRR9vHW-VRNy2bStEPlJ-I2aK9CwFiQ,11367
276
- edsl-0.1.36.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
277
- edsl-0.1.36.dist-info/METADATA,sha256=lZJYr_IidbSFQsimcYfFyeFudkB2Brv0HVTeCi5anCY,4471
278
- edsl-0.1.36.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
279
- edsl-0.1.36.dist-info/RECORD,,
275
+ edsl-0.1.36.dev2.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
276
+ edsl-0.1.36.dev2.dist-info/METADATA,sha256=eM41iPj1uG865s1AxN3NCkcl0He6KHssjIqlfFGRrdg,4476
277
+ edsl-0.1.36.dev2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
278
+ edsl-0.1.36.dev2.dist-info/RECORD,,