edsl 0.1.30.dev2__py3-none-any.whl → 0.1.30.dev4__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.
- edsl/__version__.py +1 -1
- edsl/agents/Agent.py +8 -6
- edsl/agents/AgentList.py +9 -19
- edsl/agents/Invigilator.py +1 -1
- edsl/conversation/car_buying.py +1 -1
- edsl/data/Cache.py +13 -14
- edsl/data/CacheEntry.py +6 -7
- edsl/data_transfer_models.py +1 -1
- edsl/jobs/Jobs.py +10 -2
- edsl/jobs/buckets/ModelBuckets.py +1 -1
- edsl/jobs/buckets/TokenBucket.py +3 -3
- edsl/jobs/interviews/Interview.py +5 -5
- edsl/jobs/runners/JobsRunnerAsyncio.py +2 -0
- edsl/jobs/tasks/QuestionTaskCreator.py +6 -7
- edsl/notebooks/Notebook.py +9 -9
- edsl/questions/QuestionFreeText.py +4 -2
- edsl/results/Results.py +4 -3
- edsl/scenarios/FileStore.py +42 -26
- edsl/scenarios/Scenario.py +12 -19
- edsl/scenarios/ScenarioList.py +8 -6
- edsl/study/Study.py +3 -5
- edsl/surveys/Survey.py +9 -11
- {edsl-0.1.30.dev2.dist-info → edsl-0.1.30.dev4.dist-info}/METADATA +1 -1
- {edsl-0.1.30.dev2.dist-info → edsl-0.1.30.dev4.dist-info}/RECORD +26 -26
- {edsl-0.1.30.dev2.dist-info → edsl-0.1.30.dev4.dist-info}/LICENSE +0 -0
- {edsl-0.1.30.dev2.dist-info → edsl-0.1.30.dev4.dist-info}/WHEEL +0 -0
edsl/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.30.
|
1
|
+
__version__ = "0.1.30.dev4"
|
edsl/agents/Agent.py
CHANGED
@@ -4,7 +4,8 @@ from __future__ import annotations
|
|
4
4
|
import copy
|
5
5
|
import inspect
|
6
6
|
import types
|
7
|
-
from typing import
|
7
|
+
from typing import Callable, Optional, Union
|
8
|
+
from uuid import uuid4
|
8
9
|
from edsl.Base import Base
|
9
10
|
|
10
11
|
from edsl.exceptions.agents import (
|
@@ -688,13 +689,14 @@ class Agent(Base):
|
|
688
689
|
return table
|
689
690
|
|
690
691
|
@classmethod
|
691
|
-
def example(cls) -> Agent:
|
692
|
-
"""
|
692
|
+
def example(cls, randomize: bool = False) -> Agent:
|
693
|
+
"""
|
694
|
+
Returns an example Agent instance.
|
693
695
|
|
694
|
-
|
695
|
-
Agent(traits = {'age': 22, 'hair': 'brown', 'height': 5.5})
|
696
|
+
:param randomize: If True, adds a random string to the value of an example key.
|
696
697
|
"""
|
697
|
-
|
698
|
+
addition = "" if not randomize else str(uuid4())
|
699
|
+
return cls(traits={"age": 22, "hair": f"brown{addition}", "height": 5.5})
|
698
700
|
|
699
701
|
def code(self) -> str:
|
700
702
|
"""Return the code for the agent.
|
edsl/agents/AgentList.py
CHANGED
@@ -11,23 +11,15 @@ Example usage:
|
|
11
11
|
"""
|
12
12
|
|
13
13
|
from __future__ import annotations
|
14
|
+
import csv
|
15
|
+
import json
|
14
16
|
from collections import UserList
|
15
|
-
from typing import
|
17
|
+
from typing import Any, List, Optional, Union
|
16
18
|
from rich import print_json
|
17
19
|
from rich.table import Table
|
18
|
-
import json
|
19
|
-
import csv
|
20
|
-
|
21
|
-
|
22
20
|
from simpleeval import EvalWithCompoundTypes
|
23
|
-
|
24
21
|
from edsl.Base import Base
|
25
|
-
|
26
|
-
# from edsl.agents import Agent
|
27
|
-
from edsl.utilities.decorators import (
|
28
|
-
add_edsl_version,
|
29
|
-
remove_edsl_version,
|
30
|
-
)
|
22
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
31
23
|
|
32
24
|
|
33
25
|
class AgentList(UserList, Base):
|
@@ -239,17 +231,15 @@ class AgentList(UserList, Base):
|
|
239
231
|
return cls(agents)
|
240
232
|
|
241
233
|
@classmethod
|
242
|
-
def example(cls) ->
|
243
|
-
"""
|
244
|
-
|
245
|
-
>>> al = AgentList.example()
|
246
|
-
>>> len(al)
|
247
|
-
2
|
234
|
+
def example(cls, randomize: bool = False) -> AgentList:
|
235
|
+
"""
|
236
|
+
Returns an example AgentList instance.
|
248
237
|
|
238
|
+
:param randomize: If True, uses Agent's randomize method.
|
249
239
|
"""
|
250
240
|
from edsl.agents.Agent import Agent
|
251
241
|
|
252
|
-
return cls([Agent.example(), Agent.example()])
|
242
|
+
return cls([Agent.example(randomize), Agent.example(randomize)])
|
253
243
|
|
254
244
|
@classmethod
|
255
245
|
def from_list(self, trait_name: str, values: List[Any]):
|
edsl/agents/Invigilator.py
CHANGED
@@ -97,7 +97,7 @@ class InvigilatorAI(PromptConstructorMixin, InvigilatorBase):
|
|
97
97
|
answer = question._translate_answer_code_to_answer(
|
98
98
|
response["answer"], combined_dict
|
99
99
|
)
|
100
|
-
#breakpoint()
|
100
|
+
# breakpoint()
|
101
101
|
data = {
|
102
102
|
"answer": answer,
|
103
103
|
"comment": response.get(
|
edsl/conversation/car_buying.py
CHANGED
@@ -30,7 +30,7 @@ c1 = Conversation(agent_list=AgentList([a1, a3, a2]), max_turns=5, verbose=True)
|
|
30
30
|
c2 = Conversation(agent_list=AgentList([a1, a2]), max_turns=5, verbose=True)
|
31
31
|
|
32
32
|
c = Cache.load("car_talk.json.gz")
|
33
|
-
breakpoint()
|
33
|
+
# breakpoint()
|
34
34
|
combo = ConversationList([c1, c2], cache=c)
|
35
35
|
combo.run()
|
36
36
|
results = combo.to_results()
|
edsl/data/Cache.py
CHANGED
@@ -7,17 +7,10 @@ import json
|
|
7
7
|
import os
|
8
8
|
import warnings
|
9
9
|
from typing import Optional, Union
|
10
|
-
import time
|
11
|
-
from edsl.config import CONFIG
|
12
|
-
from edsl.data.CacheEntry import CacheEntry
|
13
|
-
|
14
|
-
# from edsl.data.SQLiteDict import SQLiteDict
|
15
10
|
from edsl.Base import Base
|
11
|
+
from edsl.data.CacheEntry import CacheEntry
|
16
12
|
from edsl.utilities.utilities import dict_hash
|
17
|
-
from edsl.utilities.decorators import
|
18
|
-
add_edsl_version,
|
19
|
-
remove_edsl_version,
|
20
|
-
)
|
13
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
21
14
|
|
22
15
|
|
23
16
|
class Cache(Base):
|
@@ -41,7 +34,7 @@ class Cache(Base):
|
|
41
34
|
data: Optional[Union["SQLiteDict", dict]] = None,
|
42
35
|
immediate_write: bool = True,
|
43
36
|
method=None,
|
44
|
-
verbose
|
37
|
+
verbose=False,
|
45
38
|
):
|
46
39
|
"""
|
47
40
|
Create two dictionaries to store the cache data.
|
@@ -480,12 +473,18 @@ class Cache(Base):
|
|
480
473
|
webbrowser.open("file://" + filepath)
|
481
474
|
|
482
475
|
@classmethod
|
483
|
-
def example(cls) -> Cache:
|
476
|
+
def example(cls, randomize: bool = False) -> Cache:
|
484
477
|
"""
|
485
|
-
|
486
|
-
|
478
|
+
Returns an example Cache instance.
|
479
|
+
|
480
|
+
:param randomize: If True, uses CacheEntry's randomize method.
|
487
481
|
"""
|
488
|
-
return cls(
|
482
|
+
return cls(
|
483
|
+
data={
|
484
|
+
CacheEntry.example(randomize).key: CacheEntry.example(),
|
485
|
+
CacheEntry.example(randomize).key: CacheEntry.example(),
|
486
|
+
}
|
487
|
+
)
|
489
488
|
|
490
489
|
|
491
490
|
if __name__ == "__main__":
|
edsl/data/CacheEntry.py
CHANGED
@@ -2,11 +2,8 @@ from __future__ import annotations
|
|
2
2
|
import json
|
3
3
|
import datetime
|
4
4
|
import hashlib
|
5
|
-
import random
|
6
5
|
from typing import Optional
|
7
|
-
|
8
|
-
|
9
|
-
# TODO: Timestamp should probably be float?
|
6
|
+
from uuid import uuid4
|
10
7
|
|
11
8
|
|
12
9
|
class CacheEntry:
|
@@ -151,10 +148,12 @@ class CacheEntry:
|
|
151
148
|
@classmethod
|
152
149
|
def example(cls, randomize: bool = False) -> CacheEntry:
|
153
150
|
"""
|
154
|
-
Returns
|
151
|
+
Returns an example CacheEntry instance.
|
152
|
+
|
153
|
+
:param randomize: If True, adds a random string to the system prompt.
|
155
154
|
"""
|
156
|
-
# if random, create a
|
157
|
-
addition = "" if not randomize else str(
|
155
|
+
# if random, create a uuid
|
156
|
+
addition = "" if not randomize else str(uuid4())
|
158
157
|
return CacheEntry(
|
159
158
|
model="gpt-3.5-turbo",
|
160
159
|
parameters={"temperature": 0.5},
|
edsl/data_transfer_models.py
CHANGED
edsl/jobs/Jobs.py
CHANGED
@@ -687,7 +687,9 @@ class Jobs(Base):
|
|
687
687
|
# Example methods
|
688
688
|
#######################
|
689
689
|
@classmethod
|
690
|
-
def example(
|
690
|
+
def example(
|
691
|
+
cls, throw_exception_probability: int = 0, randomize: bool = False
|
692
|
+
) -> Jobs:
|
691
693
|
"""Return an example Jobs instance.
|
692
694
|
|
693
695
|
:param throw_exception_probability: the probability that an exception will be thrown when answering a question. This is useful for testing error handling.
|
@@ -697,10 +699,13 @@ class Jobs(Base):
|
|
697
699
|
|
698
700
|
"""
|
699
701
|
import random
|
702
|
+
from uuid import uuid4
|
700
703
|
from edsl.questions import QuestionMultipleChoice
|
701
704
|
from edsl.agents.Agent import Agent
|
702
705
|
from edsl.scenarios.Scenario import Scenario
|
703
706
|
|
707
|
+
addition = "" if not randomize else str(uuid4())
|
708
|
+
|
704
709
|
# (status, question, period)
|
705
710
|
agent_answers = {
|
706
711
|
("Joyful", "how_feeling", "morning"): "OK",
|
@@ -743,7 +748,10 @@ class Jobs(Base):
|
|
743
748
|
base_survey = Survey(questions=[q1, q2])
|
744
749
|
|
745
750
|
scenario_list = ScenarioList(
|
746
|
-
[
|
751
|
+
[
|
752
|
+
Scenario({"period": f"morning{addition}"}),
|
753
|
+
Scenario({"period": "afternoon"}),
|
754
|
+
]
|
747
755
|
)
|
748
756
|
job = base_survey.by(scenario_list).by(joy_agent, sad_agent)
|
749
757
|
|
@@ -24,7 +24,7 @@ class ModelBuckets:
|
|
24
24
|
requests_bucket=self.requests_bucket + other.requests_bucket,
|
25
25
|
tokens_bucket=self.tokens_bucket + other.tokens_bucket,
|
26
26
|
)
|
27
|
-
|
27
|
+
|
28
28
|
def turbo_mode_on(self):
|
29
29
|
"""Set the refill rate to infinity for both buckets."""
|
30
30
|
self.requests_bucket.turbo_mode_on()
|
edsl/jobs/buckets/TokenBucket.py
CHANGED
@@ -31,15 +31,15 @@ class TokenBucket:
|
|
31
31
|
pass
|
32
32
|
else:
|
33
33
|
self.turbo_mode = True
|
34
|
-
self.capacity=float("inf")
|
35
|
-
self.refill_rate=float("inf")
|
34
|
+
self.capacity = float("inf")
|
35
|
+
self.refill_rate = float("inf")
|
36
36
|
|
37
37
|
def turbo_mode_off(self):
|
38
38
|
"""Restore the refill rate to its original value."""
|
39
39
|
self.turbo_mode = False
|
40
40
|
self.capacity = self._old_capacity
|
41
41
|
self.refill_rate = self._old_refill_rate
|
42
|
-
|
42
|
+
|
43
43
|
def __add__(self, other) -> "TokenBucket":
|
44
44
|
"""Combine two token buckets.
|
45
45
|
|
@@ -30,14 +30,14 @@ class Interview(InterviewStatusMixin, InterviewTaskBuildingMixin):
|
|
30
30
|
|
31
31
|
def __init__(
|
32
32
|
self,
|
33
|
-
agent:
|
34
|
-
survey:
|
35
|
-
scenario:
|
36
|
-
model: Type[
|
33
|
+
agent: "Agent",
|
34
|
+
survey: "Survey",
|
35
|
+
scenario: "Scenario",
|
36
|
+
model: Type["LanguageModel"],
|
37
37
|
debug: Optional[bool] = False,
|
38
38
|
iteration: int = 0,
|
39
39
|
cache: "Cache" = None,
|
40
|
-
sidecar_model:
|
40
|
+
sidecar_model: "LanguageModel" = None,
|
41
41
|
):
|
42
42
|
"""Initialize the Interview instance.
|
43
43
|
|
@@ -89,6 +89,7 @@ class JobsRunnerAsyncio(JobsRunnerStatusMixin):
|
|
89
89
|
|
90
90
|
async def run_async(self, cache=None) -> Results:
|
91
91
|
from edsl.results.Results import Results
|
92
|
+
|
92
93
|
if cache is None:
|
93
94
|
self.cache = Cache()
|
94
95
|
else:
|
@@ -100,6 +101,7 @@ class JobsRunnerAsyncio(JobsRunnerStatusMixin):
|
|
100
101
|
|
101
102
|
def simple_run(self):
|
102
103
|
from edsl.results.Results import Results
|
104
|
+
|
103
105
|
data = asyncio.run(self.run_async())
|
104
106
|
return Results(survey=self.jobs.survey, data=data)
|
105
107
|
|
@@ -144,18 +144,18 @@ class QuestionTaskCreator(UserList):
|
|
144
144
|
self.task_status = TaskStatus.FAILED
|
145
145
|
raise e
|
146
146
|
|
147
|
-
## This isn't working
|
148
|
-
#breakpoint()
|
149
|
-
if results.get(
|
147
|
+
## This isn't working
|
148
|
+
# breakpoint()
|
149
|
+
if results.get("cache_used", False):
|
150
150
|
self.tokens_bucket.add_tokens(requested_tokens)
|
151
151
|
self.requests_bucket.add_tokens(1)
|
152
152
|
self.from_cache = True
|
153
|
-
#print("Turning on turbo!")
|
153
|
+
# print("Turning on turbo!")
|
154
154
|
self.tokens_bucket.turbo_mode_on()
|
155
155
|
self.requests_bucket.turbo_mode_on()
|
156
156
|
else:
|
157
|
-
#breakpoint()
|
158
|
-
#print("Turning off turbo!")
|
157
|
+
# breakpoint()
|
158
|
+
# print("Turning off turbo!")
|
159
159
|
self.tokens_bucket.turbo_mode_off()
|
160
160
|
self.requests_bucket.turbo_mode_off()
|
161
161
|
|
@@ -163,7 +163,6 @@ class QuestionTaskCreator(UserList):
|
|
163
163
|
|
164
164
|
tracker = self.cached_token_usage if self.from_cache else self.new_token_usage
|
165
165
|
|
166
|
-
|
167
166
|
# TODO: This is hacky. The 'func' call should return an object that definitely has a 'usage' key.
|
168
167
|
usage = results.get("usage", {"prompt_tokens": 0, "completion_tokens": 0})
|
169
168
|
prompt_tokens = usage.get("prompt_tokens", 0)
|
edsl/notebooks/Notebook.py
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
"""A Notebook is a utility class that allows you to easily share/pull ipynbs from Coop."""
|
2
2
|
|
3
|
+
from __future__ import annotations
|
3
4
|
import json
|
4
5
|
from typing import Dict, List, Optional
|
5
|
-
|
6
|
-
|
6
|
+
from uuid import uuid4
|
7
7
|
from edsl.Base import Base
|
8
|
-
from edsl.utilities.decorators import
|
9
|
-
add_edsl_version,
|
10
|
-
remove_edsl_version,
|
11
|
-
)
|
8
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
12
9
|
|
13
10
|
|
14
11
|
class Notebook(Base):
|
@@ -192,10 +189,13 @@ class Notebook(Base):
|
|
192
189
|
return table
|
193
190
|
|
194
191
|
@classmethod
|
195
|
-
def example(cls) ->
|
192
|
+
def example(cls, randomize: bool = False) -> Notebook:
|
196
193
|
"""
|
197
|
-
|
194
|
+
Returns an example Notebook instance.
|
195
|
+
|
196
|
+
:param randomize: If True, adds a random string one of the cells' output.
|
198
197
|
"""
|
198
|
+
addition = "" if not randomize else str(uuid4())
|
199
199
|
cells = [
|
200
200
|
{
|
201
201
|
"cell_type": "markdown",
|
@@ -210,7 +210,7 @@ class Notebook(Base):
|
|
210
210
|
{
|
211
211
|
"name": "stdout",
|
212
212
|
"output_type": "stream",
|
213
|
-
"text": "Hello world!\n",
|
213
|
+
"text": f"Hello world!\n{addition}",
|
214
214
|
}
|
215
215
|
],
|
216
216
|
"source": 'print("Hello world!")',
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
import textwrap
|
3
3
|
from typing import Any, Optional
|
4
|
+
from uuid import uuid4
|
4
5
|
from edsl.questions.QuestionBase import QuestionBase
|
5
6
|
|
6
7
|
|
@@ -65,9 +66,10 @@ class QuestionFreeText(QuestionBase):
|
|
65
66
|
return question_html_content
|
66
67
|
|
67
68
|
@classmethod
|
68
|
-
def example(cls) -> QuestionFreeText:
|
69
|
+
def example(cls, randomize: bool = False) -> QuestionFreeText:
|
69
70
|
"""Return an example instance of a free text question."""
|
70
|
-
|
71
|
+
addition = "" if not randomize else str(uuid4())
|
72
|
+
return cls(question_name="how_are_you", question_text=f"How are you?{addition}")
|
71
73
|
|
72
74
|
|
73
75
|
def main():
|
edsl/results/Results.py
CHANGED
@@ -290,7 +290,8 @@ class Results(UserList, Mixins, Base):
|
|
290
290
|
),
|
291
291
|
)
|
292
292
|
except Exception as e:
|
293
|
-
|
293
|
+
print(e)
|
294
|
+
# breakpoint()
|
294
295
|
return results
|
295
296
|
|
296
297
|
######################
|
@@ -949,7 +950,7 @@ class Results(UserList, Mixins, Base):
|
|
949
950
|
return Results(survey=self.survey, data=new_data, created_columns=None)
|
950
951
|
|
951
952
|
@classmethod
|
952
|
-
def example(cls, debug: bool = False) -> Results:
|
953
|
+
def example(cls, debug: bool = False, randomize: bool = False) -> Results:
|
953
954
|
"""Return an example `Results` object.
|
954
955
|
|
955
956
|
Example usage:
|
@@ -962,7 +963,7 @@ class Results(UserList, Mixins, Base):
|
|
962
963
|
from edsl.data.Cache import Cache
|
963
964
|
|
964
965
|
c = Cache()
|
965
|
-
job = Jobs.example()
|
966
|
+
job = Jobs.example(randomize=randomize)
|
966
967
|
results = job.run(cache=c, debug=debug)
|
967
968
|
return results
|
968
969
|
|
edsl/scenarios/FileStore.py
CHANGED
@@ -31,7 +31,7 @@ class FileStore(Scenario):
|
|
31
31
|
@classmethod
|
32
32
|
def from_dict(cls, d):
|
33
33
|
return cls(d["filename"], d["binary"], d["suffix"], d["base64_string"])
|
34
|
-
|
34
|
+
|
35
35
|
def __repr__(self):
|
36
36
|
return f"FileStore(filename='{self.filename}', binary='{self.binary}', 'suffix'={self.suffix})"
|
37
37
|
|
@@ -89,7 +89,6 @@ class FileStore(Scenario):
|
|
89
89
|
# Create a StringIO object for text data
|
90
90
|
return io.StringIO(text_data)
|
91
91
|
|
92
|
-
|
93
92
|
def to_tempfile(self, suffix=None):
|
94
93
|
if suffix is None:
|
95
94
|
suffix = self.suffix
|
@@ -101,14 +100,14 @@ class FileStore(Scenario):
|
|
101
100
|
file_like_object = self.base64_to_text_file(self["base64_string"])
|
102
101
|
|
103
102
|
# Create a named temporary file
|
104
|
-
mode =
|
103
|
+
mode = "wb" if self.binary else "w"
|
105
104
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=suffix, mode=mode)
|
106
|
-
|
105
|
+
|
107
106
|
if self.binary:
|
108
107
|
temp_file.write(file_like_object.read())
|
109
108
|
else:
|
110
109
|
temp_file.write(file_like_object.read())
|
111
|
-
|
110
|
+
|
112
111
|
temp_file.close()
|
113
112
|
|
114
113
|
return temp_file.name
|
@@ -133,16 +132,19 @@ class CSVFileStore(FileStore):
|
|
133
132
|
@classmethod
|
134
133
|
def example(cls):
|
135
134
|
from edsl.results.Results import Results
|
135
|
+
|
136
136
|
r = Results.example()
|
137
137
|
import tempfile
|
138
|
+
|
138
139
|
with tempfile.NamedTemporaryFile(suffix=".csv", delete=False) as f:
|
139
140
|
r.to_csv(filename=f.name)
|
140
141
|
return cls(f.name)
|
141
|
-
|
142
|
+
|
142
143
|
def view(self):
|
143
144
|
import pandas as pd
|
145
|
+
|
144
146
|
return pd.read_csv(self.to_tempfile())
|
145
|
-
|
147
|
+
|
146
148
|
|
147
149
|
class PDFFileStore(FileStore):
|
148
150
|
def __init__(self, filename):
|
@@ -153,24 +155,27 @@ class PDFFileStore(FileStore):
|
|
153
155
|
print(f"PDF path: {pdf_path}") # Print the path to ensure it exists
|
154
156
|
import os
|
155
157
|
import subprocess
|
158
|
+
|
156
159
|
if os.path.exists(pdf_path):
|
157
160
|
try:
|
158
|
-
if os.name ==
|
161
|
+
if os.name == "posix":
|
159
162
|
# for cool kids
|
160
|
-
subprocess.run([
|
161
|
-
elif os.name ==
|
163
|
+
subprocess.run(["open", pdf_path], check=True) # macOS
|
164
|
+
elif os.name == "nt":
|
162
165
|
os.startfile(pdf_path) # Windows
|
163
166
|
else:
|
164
|
-
subprocess.run([
|
167
|
+
subprocess.run(["xdg-open", pdf_path], check=True) # Linux
|
165
168
|
except Exception as e:
|
166
169
|
print(f"Error opening PDF: {e}")
|
167
170
|
else:
|
168
171
|
print("PDF file was not created successfully.")
|
169
172
|
|
170
173
|
@classmethod
|
171
|
-
def example(cls):
|
174
|
+
def example(cls):
|
172
175
|
import textwrap
|
173
|
-
|
176
|
+
|
177
|
+
pdf_string = textwrap.dedent(
|
178
|
+
"""\
|
174
179
|
%PDF-1.4
|
175
180
|
1 0 obj
|
176
181
|
<< /Type /Catalog /Pages 2 0 R >>
|
@@ -210,12 +215,15 @@ class PDFFileStore(FileStore):
|
|
210
215
|
<< /Size 7 /Root 1 0 R >>
|
211
216
|
startxref
|
212
217
|
318
|
213
|
-
%%EOF"""
|
218
|
+
%%EOF"""
|
219
|
+
)
|
214
220
|
import tempfile
|
221
|
+
|
215
222
|
with tempfile.NamedTemporaryFile(suffix=".pdf", delete=False) as f:
|
216
223
|
f.write(pdf_string.encode())
|
217
224
|
return cls(f.name)
|
218
225
|
|
226
|
+
|
219
227
|
class PNGFileStore(FileStore):
|
220
228
|
def __init__(self, filename):
|
221
229
|
super().__init__(filename, suffix=".png")
|
@@ -223,19 +231,25 @@ class PNGFileStore(FileStore):
|
|
223
231
|
@classmethod
|
224
232
|
def example(cls):
|
225
233
|
import textwrap
|
226
|
-
|
234
|
+
|
235
|
+
png_string = textwrap.dedent(
|
236
|
+
"""\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\x0cIDAT\x08\xd7c\x00\x01"""
|
237
|
+
)
|
227
238
|
import tempfile
|
239
|
+
|
228
240
|
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as f:
|
229
241
|
f.write(png_string.encode())
|
230
242
|
return cls(f.name)
|
231
|
-
|
243
|
+
|
232
244
|
def view(self):
|
233
245
|
import matplotlib.pyplot as plt
|
234
246
|
import matplotlib.image as mpimg
|
247
|
+
|
235
248
|
img = mpimg.imread(self.to_tempfile())
|
236
249
|
plt.imshow(img)
|
237
250
|
plt.show()
|
238
251
|
|
252
|
+
|
239
253
|
class SQLiteFileStore(FileStore):
|
240
254
|
def __init__(self, filename):
|
241
255
|
super().__init__(filename, suffix=".sqlite")
|
@@ -244,18 +258,20 @@ class SQLiteFileStore(FileStore):
|
|
244
258
|
def example(cls):
|
245
259
|
import sqlite3
|
246
260
|
import tempfile
|
261
|
+
|
247
262
|
with tempfile.NamedTemporaryFile(suffix=".sqlite", delete=False) as f:
|
248
263
|
conn = sqlite3.connect(f.name)
|
249
264
|
c = conn.cursor()
|
250
|
-
c.execute(
|
265
|
+
c.execute("""CREATE TABLE stocks (date text)""")
|
251
266
|
conn.commit()
|
252
267
|
|
253
268
|
def view(self):
|
254
269
|
import subprocess
|
255
270
|
import os
|
271
|
+
|
256
272
|
sqlite_path = self.to_tempfile()
|
257
273
|
os.system(f"sqlite3 {sqlite_path}")
|
258
|
-
|
274
|
+
|
259
275
|
|
260
276
|
if __name__ == "__main__":
|
261
277
|
# file_path = "../conjure/examples/Ex11-2.sav"
|
@@ -263,21 +279,21 @@ if __name__ == "__main__":
|
|
263
279
|
# info = fs.push()
|
264
280
|
# print(info)
|
265
281
|
|
266
|
-
#fs = CSVFileStore.example()
|
267
|
-
#fs.to_tempfile()
|
282
|
+
# fs = CSVFileStore.example()
|
283
|
+
# fs.to_tempfile()
|
268
284
|
# print(fs.view())
|
269
285
|
|
270
|
-
#fs = PDFFileStore.example()
|
271
|
-
#fs.view()
|
286
|
+
# fs = PDFFileStore.example()
|
287
|
+
# fs.view()
|
272
288
|
|
273
|
-
#fs = PDFFileStore("paper.pdf")
|
274
|
-
#fs.view()
|
289
|
+
# fs = PDFFileStore("paper.pdf")
|
290
|
+
# fs.view()
|
275
291
|
# from edsl import Conjure
|
276
292
|
|
277
293
|
fs = PNGFileStore("robot.png")
|
278
294
|
fs.view()
|
279
295
|
|
280
296
|
# c = Conjure(datafile_name=fs.to_tempfile())
|
281
|
-
#f = PDFFileStore("paper.pdf")
|
297
|
+
# f = PDFFileStore("paper.pdf")
|
282
298
|
# print(f.to_tempfile())
|
283
|
-
#f.push()
|
299
|
+
# f.push()
|
edsl/scenarios/Scenario.py
CHANGED
@@ -1,21 +1,17 @@
|
|
1
1
|
"""A Scenario is a dictionary with a key/value to parameterize a question."""
|
2
2
|
|
3
|
-
import
|
3
|
+
from __future__ import annotations
|
4
4
|
import copy
|
5
|
-
from collections import UserDict
|
6
|
-
from typing import Union, List, Optional, Generator
|
7
5
|
import base64
|
8
6
|
import hashlib
|
9
7
|
import os
|
10
|
-
|
8
|
+
from collections import UserDict
|
9
|
+
from typing import Union, List, Optional, Generator
|
10
|
+
from uuid import uuid4
|
11
11
|
from edsl.Base import Base
|
12
12
|
from edsl.scenarios.ScenarioImageMixin import ScenarioImageMixin
|
13
13
|
from edsl.scenarios.ScenarioHtmlMixin import ScenarioHtmlMixin
|
14
|
-
|
15
|
-
from edsl.utilities.decorators import (
|
16
|
-
add_edsl_version,
|
17
|
-
remove_edsl_version,
|
18
|
-
)
|
14
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
19
15
|
|
20
16
|
|
21
17
|
class Scenario(Base, UserDict, ScenarioImageMixin, ScenarioHtmlMixin):
|
@@ -28,9 +24,7 @@ class Scenario(Base, UserDict, ScenarioImageMixin, ScenarioHtmlMixin):
|
|
28
24
|
|
29
25
|
:param data: A dictionary of keys/values for parameterizing questions.
|
30
26
|
"""
|
31
|
-
if data is None
|
32
|
-
data = {}
|
33
|
-
self.data = data
|
27
|
+
self.data = data if data is not None else {}
|
34
28
|
self.name = name
|
35
29
|
|
36
30
|
def replicate(self, n: int) -> "ScenarioList":
|
@@ -415,17 +409,16 @@ class Scenario(Base, UserDict, ScenarioImageMixin, ScenarioHtmlMixin):
|
|
415
409
|
return table
|
416
410
|
|
417
411
|
@classmethod
|
418
|
-
def example(cls) ->
|
419
|
-
"""
|
420
|
-
|
421
|
-
Example:
|
412
|
+
def example(cls, randomize: bool = False) -> Scenario:
|
413
|
+
"""
|
414
|
+
Returns an example Scenario instance.
|
422
415
|
|
423
|
-
|
424
|
-
Scenario({'persona': 'A reseacher studying whether LLMs can be used to generate surveys.'})
|
416
|
+
:param randomize: If True, adds a random string to the value of the example key.
|
425
417
|
"""
|
418
|
+
addition = "" if not randomize else str(uuid4())
|
426
419
|
return cls(
|
427
420
|
{
|
428
|
-
"persona": "A reseacher studying whether LLMs can be used to generate surveys."
|
421
|
+
"persona": f"A reseacher studying whether LLMs can be used to generate surveys.{addition}",
|
429
422
|
}
|
430
423
|
)
|
431
424
|
|
edsl/scenarios/ScenarioList.py
CHANGED
@@ -5,10 +5,8 @@ import csv
|
|
5
5
|
import random
|
6
6
|
from collections import UserList, Counter
|
7
7
|
from collections.abc import Iterable
|
8
|
-
from typing import Any, Optional, Union, List
|
9
|
-
|
10
8
|
from simpleeval import EvalWithCompoundTypes
|
11
|
-
|
9
|
+
from typing import Any, Optional, Union, List
|
12
10
|
from edsl.Base import Base
|
13
11
|
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
14
12
|
from edsl.scenarios.Scenario import Scenario
|
@@ -442,9 +440,13 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
|
|
442
440
|
return lines
|
443
441
|
|
444
442
|
@classmethod
|
445
|
-
def example(cls) -> ScenarioList:
|
446
|
-
"""
|
447
|
-
|
443
|
+
def example(cls, randomize: bool = False) -> ScenarioList:
|
444
|
+
"""
|
445
|
+
Return an example ScenarioList instance.
|
446
|
+
|
447
|
+
:params randomize: If True, use Scenario's randomize method to randomize the values.
|
448
|
+
"""
|
449
|
+
return cls([Scenario.example(randomize), Scenario.example(randomize)])
|
448
450
|
|
449
451
|
def rich_print(self) -> None:
|
450
452
|
"""Display an object as a table."""
|
edsl/study/Study.py
CHANGED
@@ -6,14 +6,12 @@ import platform
|
|
6
6
|
import socket
|
7
7
|
from datetime import datetime
|
8
8
|
from typing import Dict, Optional, Union
|
9
|
+
from uuid import UUID, uuid4
|
9
10
|
from edsl import Cache, set_session_cache, unset_session_cache
|
10
11
|
from edsl.utilities.utilities import dict_hash
|
11
12
|
from edsl.study.ObjectEntry import ObjectEntry
|
12
13
|
from edsl.study.ProofOfWork import ProofOfWork
|
13
14
|
from edsl.study.SnapShot import SnapShot
|
14
|
-
from uuid import UUID
|
15
|
-
|
16
|
-
# from edsl.Base import Base
|
17
15
|
|
18
16
|
|
19
17
|
class Study:
|
@@ -402,14 +400,14 @@ class Study:
|
|
402
400
|
return diff
|
403
401
|
|
404
402
|
@classmethod
|
405
|
-
def example(cls, verbose=False):
|
403
|
+
def example(cls, verbose=False, randomize=False):
|
406
404
|
import tempfile
|
407
405
|
|
408
406
|
study_file = tempfile.NamedTemporaryFile()
|
409
407
|
with cls(filename=study_file.name, verbose=verbose) as study:
|
410
408
|
from edsl import QuestionFreeText
|
411
409
|
|
412
|
-
q = QuestionFreeText.example()
|
410
|
+
q = QuestionFreeText.example(randomize=randomize)
|
413
411
|
return study
|
414
412
|
|
415
413
|
@classmethod
|
edsl/surveys/Survey.py
CHANGED
@@ -2,23 +2,20 @@
|
|
2
2
|
|
3
3
|
from __future__ import annotations
|
4
4
|
import re
|
5
|
-
|
6
5
|
from typing import Any, Generator, Optional, Union, List, Literal, Callable
|
7
|
-
|
6
|
+
from uuid import uuid4
|
7
|
+
from edsl.Base import Base
|
8
8
|
from edsl.exceptions import SurveyCreationError, SurveyHasNoRulesError
|
9
9
|
from edsl.questions.QuestionBase import QuestionBase
|
10
10
|
from edsl.surveys.base import RulePriority, EndOfSurvey
|
11
|
+
from edsl.surveys.DAG import DAG
|
12
|
+
from edsl.surveys.descriptors import QuestionsDescriptor
|
13
|
+
from edsl.surveys.MemoryPlan import MemoryPlan
|
11
14
|
from edsl.surveys.Rule import Rule
|
12
15
|
from edsl.surveys.RuleCollection import RuleCollection
|
13
|
-
|
14
|
-
from edsl.Base import Base
|
15
16
|
from edsl.surveys.SurveyExportMixin import SurveyExportMixin
|
16
|
-
from edsl.surveys.descriptors import QuestionsDescriptor
|
17
|
-
from edsl.surveys.MemoryPlan import MemoryPlan
|
18
|
-
|
19
|
-
from edsl.surveys.DAG import DAG
|
20
|
-
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
21
17
|
from edsl.surveys.SurveyFlowVisualizationMixin import SurveyFlowVisualizationMixin
|
18
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
22
19
|
|
23
20
|
|
24
21
|
class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
|
@@ -1025,7 +1022,7 @@ class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
|
|
1025
1022
|
return res
|
1026
1023
|
|
1027
1024
|
@classmethod
|
1028
|
-
def example(cls, params=False) -> Survey:
|
1025
|
+
def example(cls, params: bool = False, randomize: bool = False) -> Survey:
|
1029
1026
|
"""Return an example survey.
|
1030
1027
|
|
1031
1028
|
>>> s = Survey.example()
|
@@ -1034,8 +1031,9 @@ class Survey(SurveyExportMixin, SurveyFlowVisualizationMixin, Base):
|
|
1034
1031
|
"""
|
1035
1032
|
from edsl.questions.QuestionMultipleChoice import QuestionMultipleChoice
|
1036
1033
|
|
1034
|
+
addition = "" if not randomize else str(uuid4())
|
1037
1035
|
q0 = QuestionMultipleChoice(
|
1038
|
-
question_text="Do you like school?",
|
1036
|
+
question_text=f"Do you like school?{addition}",
|
1039
1037
|
question_options=["yes", "no"],
|
1040
1038
|
question_name="q0",
|
1041
1039
|
)
|
@@ -1,10 +1,10 @@
|
|
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
|
5
|
-
edsl/agents/Agent.py,sha256=
|
6
|
-
edsl/agents/AgentList.py,sha256=
|
7
|
-
edsl/agents/Invigilator.py,sha256=
|
4
|
+
edsl/__version__.py,sha256=XqB4ByNbNvd6vFzVKO_2YpxRUrkpXNUQUKNU_uIIOng,28
|
5
|
+
edsl/agents/Agent.py,sha256=qNJsQkN6HuTKqJrQbuUEgRX3Wo7Dwukle0oNWPi0UIE,27191
|
6
|
+
edsl/agents/AgentList.py,sha256=_MsdeOEgaANAceLIXwuLC22mwlBn0ruGX4GEqz8_SSY,9467
|
7
|
+
edsl/agents/Invigilator.py,sha256=WNgGT9VRKpHbk__h-vd4LASgjnlJnzepf-2FxQ3K98I,10798
|
8
8
|
edsl/agents/InvigilatorBase.py,sha256=ncha1HF2V1Dz4f50Gekg6AzUXCD2Af82ztfSJZbgOHY,7469
|
9
9
|
edsl/agents/PromptConstructionMixin.py,sha256=MP2Frmm9iP3J50ijXKrr6YYIjB_38UuA2J7Mysfs0ZQ,15913
|
10
10
|
edsl/agents/__init__.py,sha256=a3H1lxDwu9HR8fwh79C5DgxPSFv_bE2rzQ6y1D8Ba5c,80
|
@@ -28,19 +28,19 @@ edsl/conjure/examples/placeholder.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
28
28
|
edsl/conjure/naming_utilities.py,sha256=8uoGaCPZQKLwz2HudtsFSovivTGumQrFYxXxck5WUZQ,4964
|
29
29
|
edsl/conjure/utilities.py,sha256=yRdOJx9KIpWXMx41Bbfysx7Zd4v2ROwca5L4T1rmtQM,5539
|
30
30
|
edsl/conversation/Conversation.py,sha256=NdWH62XpcF6hoaG0ScMho_c3TO7PfBnbdlppUN-j07k,7627
|
31
|
-
edsl/conversation/car_buying.py,sha256=
|
31
|
+
edsl/conversation/car_buying.py,sha256=Quh2Q8O9YoCyTKJUy3li376QFIOcL1gX0y89w3wlSl4,1950
|
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
35
|
edsl/coop/coop.py,sha256=Kv6oUOZ9uuxxR59Rn6IG-tB3JaN2z8AnHVW8G-RSLQE,26928
|
36
36
|
edsl/coop/utils.py,sha256=BeBcMWWl9Kxjll_WfDQNHbp-6ct9QjVn4ph2V4ph6XE,3347
|
37
|
-
edsl/data/Cache.py,sha256=
|
38
|
-
edsl/data/CacheEntry.py,sha256=
|
37
|
+
edsl/data/Cache.py,sha256=aR9ydTFvUWiRJZd2G7SLFFtZaS2At8ArbQ1SAhYZBDs,15629
|
38
|
+
edsl/data/CacheEntry.py,sha256=_5UiFaJQu_U-Z1_lEPt-h6Gaidp2Eunk02wOd3Ni3MQ,7252
|
39
39
|
edsl/data/CacheHandler.py,sha256=DTr8nJnbl_SidhsDetqbshu1DV-njPFiPPosUWTIBok,4789
|
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
|
-
edsl/data_transfer_models.py,sha256=
|
43
|
+
edsl/data_transfer_models.py,sha256=ORcI-g_oUE8EofLvHQKnWC5ar-IgZiXGY2bIpTGAZyQ,1157
|
44
44
|
edsl/enums.py,sha256=lW4rMKJJ-AsBdtDw_u6TitlNbHkTznorVPjqqmUKPE0,4876
|
45
45
|
edsl/exceptions/__init__.py,sha256=HVg-U-rJ0fRoG9Rws6gnK5S9B68SkPWDPsoD6KpMZ-A,1370
|
46
46
|
edsl/exceptions/agents.py,sha256=3SORFwFbMGrF6-vAL2GrKEVdPcXo7md_k2oYufnVXHA,673
|
@@ -66,12 +66,12 @@ edsl/inference_services/rate_limits_cache.py,sha256=HYslviz7mxF9U4CUTPAkoyBsiXjS
|
|
66
66
|
edsl/inference_services/registry.py,sha256=-Yz86do-KZraunIrziVs9b95EbY-__JUnQb5Ulni7KI,483
|
67
67
|
edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
|
68
68
|
edsl/jobs/Answers.py,sha256=z4TADN-iHIrbMtI1jVyiaetv0OkTv768dFBpREIQC6c,1799
|
69
|
-
edsl/jobs/Jobs.py,sha256=
|
69
|
+
edsl/jobs/Jobs.py,sha256=JrJcpTjR3wejMVvuFXZr7PHqCyj6zaRwqNu9eatvy9Y,29339
|
70
70
|
edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
|
71
71
|
edsl/jobs/buckets/BucketCollection.py,sha256=LA8DBVwMdeTFCbSDI0S2cDzfi_Qo6kRizwrG64tE8S4,1844
|
72
|
-
edsl/jobs/buckets/ModelBuckets.py,sha256=
|
73
|
-
edsl/jobs/buckets/TokenBucket.py,sha256=
|
74
|
-
edsl/jobs/interviews/Interview.py,sha256
|
72
|
+
edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
|
73
|
+
edsl/jobs/buckets/TokenBucket.py,sha256=jeWOzJBr70FJKpa_pOhLFwTBz6RB39tg9-ki5x4PmtM,5774
|
74
|
+
edsl/jobs/interviews/Interview.py,sha256=mnup2JIDlFrwE23pLBXzPDZpX9tJFp5hw2DqBoFoN0U,9750
|
75
75
|
edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
|
76
76
|
edsl/jobs/interviews/InterviewStatisticsCollection.py,sha256=_ZZ0fnZBQiIywP9Q_wWjpWhlfcPe2cn32GKut10t5RI,788
|
77
77
|
edsl/jobs/interviews/InterviewStatusDictionary.py,sha256=MSyys4hOWe1d8gfsUvAPbcKrs8YiPnz8jpufBSJL7SU,2485
|
@@ -82,10 +82,10 @@ edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AE
|
|
82
82
|
edsl/jobs/interviews/interview_exception_tracking.py,sha256=tIcX92udnkE5fcM5_WXjRF9xgTq2P0uaDXxZf3NQGG0,3271
|
83
83
|
edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
|
84
84
|
edsl/jobs/interviews/retry_management.py,sha256=9Efn4B3aV45vbocnF6J5WQt88i2FgFjoi5ALzGUukEE,1375
|
85
|
-
edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=
|
85
|
+
edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=L48NdyDiKrgUMQVwvd1wr2uOzT99oYfwXnlStDLHU9I,11934
|
86
86
|
edsl/jobs/runners/JobsRunnerStatusData.py,sha256=-mxcmX0a38GGO9DQ-ItTmj6mvCUk5uC-UudT77lXTG4,10327
|
87
87
|
edsl/jobs/runners/JobsRunnerStatusMixin.py,sha256=yxnXuOovwHgfDokNuluH_qulBcM0gCcbpCQibqVKXFI,3137
|
88
|
-
edsl/jobs/tasks/QuestionTaskCreator.py,sha256=
|
88
|
+
edsl/jobs/tasks/QuestionTaskCreator.py,sha256=myiRwTJ48HERazdZRdqb7lRGlSSGYcXEVpTHcKho2I0,10483
|
89
89
|
edsl/jobs/tasks/TaskCreators.py,sha256=DbCt5BzJ0CsMSquqLyLdk8el031Wst7vCszVW5EltX8,2418
|
90
90
|
edsl/jobs/tasks/TaskHistory.py,sha256=ZVellGW1cvwqdHt98dYPl0FYhk3VqRGHAZETDOxEkqg,10939
|
91
91
|
edsl/jobs/tasks/TaskStatusLog.py,sha256=bqH36a32F12fjX-M-4lNOhHaK2-WLFzKE-r0PxZPRjI,546
|
@@ -100,7 +100,7 @@ edsl/language_models/__init__.py,sha256=bvY7Gy6VkX1gSbNkRbGPS-M1kUnb0EohL0FSagaE
|
|
100
100
|
edsl/language_models/registry.py,sha256=J7blAbRFHxr2nWSoe61G4p-6kOgzUlKclJ55xVldKWc,3191
|
101
101
|
edsl/language_models/repair.py,sha256=xaNunBRpMWgceSPOzk-ugp5WXtgLuuhj23TgXUeOobw,5963
|
102
102
|
edsl/language_models/unused/ReplicateBase.py,sha256=J1oqf7mEyyKhRwNUomnptVqAsVFYCbS3iTW0EXpKtXo,3331
|
103
|
-
edsl/notebooks/Notebook.py,sha256=
|
103
|
+
edsl/notebooks/Notebook.py,sha256=qwDqUN2Gujr7WUneRrshzRBjHvcPpOIBRyqcrAOc90Q,7341
|
104
104
|
edsl/notebooks/__init__.py,sha256=VNUA3nNq04slWNbYaNrzOhQJu3AZANpvBniyCJSzJ7U,45
|
105
105
|
edsl/prompts/Prompt.py,sha256=12cbeQTKqfVQGpd1urqKZeXiDtKz2RAJqftoXS3q-DE,10070
|
106
106
|
edsl/prompts/QuestionInstructionsBase.py,sha256=xico6ob4cqWsHl-txj2RbY_4Ny5u9UqvIjmoTVgjUhk,348
|
@@ -123,7 +123,7 @@ edsl/questions/QuestionBase.py,sha256=L0-IMnSGiUh5Uw7kFDsPV057mR9tL9aMwHUtxjLlKs
|
|
123
123
|
edsl/questions/QuestionBudget.py,sha256=K8cc1YOfoLWRoZBAkWO7WsMDZne0a5oAJMSxv2Jzd1E,6143
|
124
124
|
edsl/questions/QuestionCheckBox.py,sha256=YHS-LEvR_1CWyg4usOlWfj9Gb_cCQlfIWIWhYRWn7Wo,6129
|
125
125
|
edsl/questions/QuestionExtract.py,sha256=fjnsNLS2fNW6dfFuRyc2EgKEHx8ujjONmg2nSRynje4,3988
|
126
|
-
edsl/questions/QuestionFreeText.py,sha256=
|
126
|
+
edsl/questions/QuestionFreeText.py,sha256=ASj1s0EQYcZerJp476fscu_xEME8mKzVK3sPL6egiuU,3289
|
127
127
|
edsl/questions/QuestionFunctional.py,sha256=s49mQBVGc7B4-3sX49_a_mgVZsR9bdPra2VYe4m8XoY,3961
|
128
128
|
edsl/questions/QuestionList.py,sha256=Wf7xDXJsQBsAD_yOrzZ_GstKGT7aZjimTkU6qyqOhhM,4051
|
129
129
|
edsl/questions/QuestionMultipleChoice.py,sha256=Oin_qOJz5wfZdcFopI6dyvlUn2LGocAvbNwSTmxWcQA,4491
|
@@ -144,18 +144,18 @@ edsl/questions/settings.py,sha256=er_z0ZW_dgmC5CHLWkaqBJiuWgAYzIund85M5YZFQAI,29
|
|
144
144
|
edsl/results/Dataset.py,sha256=DZgb3vIj69ON7APQ6DimjBwAS1xZvZiXOg68CjW9E3I,8662
|
145
145
|
edsl/results/DatasetExportMixin.py,sha256=QZEuSxJPisgJ5GvFkKbuqayCSgJzblclea1CFwsBZ2w,17959
|
146
146
|
edsl/results/Result.py,sha256=X1qAACs9E6XhRmlIsb3CguDs6_laKkVyxE0JJpOJDZQ,12729
|
147
|
-
edsl/results/Results.py,sha256=
|
147
|
+
edsl/results/Results.py,sha256=BgJHfOKDhvxMR8_ej6v-Lpjm0XkRL-UTTQBzFzvKuZc,36393
|
148
148
|
edsl/results/ResultsDBMixin.py,sha256=Vs95zbSB4G7ENY4lU7OBdekg9evwTrtPH0IIL2NAFTk,7936
|
149
149
|
edsl/results/ResultsExportMixin.py,sha256=XizBsPNxziyffirMA4kS7UHpYM1WIE4s1K-B7TqTfDw,1266
|
150
150
|
edsl/results/ResultsFetchMixin.py,sha256=VEa0TKDcXbnTinSKs9YaE4WjOSLmlp9Po1_9kklFvSo,848
|
151
151
|
edsl/results/ResultsGGMixin.py,sha256=SAYz8p4wb1g8x6KhBVz9NHOGib2c2XsqtTclpADrFeM,4344
|
152
152
|
edsl/results/ResultsToolsMixin.py,sha256=I19kAO-BKszgjxzMljE1W8ZsOnpozmO2nc43-XBbrZk,2976
|
153
153
|
edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
|
154
|
-
edsl/scenarios/FileStore.py,sha256=
|
155
|
-
edsl/scenarios/Scenario.py,sha256=
|
154
|
+
edsl/scenarios/FileStore.py,sha256=AevvU1qdLSmL4Q7cb1PhUiaJk1i5T0sgkTKBYf0KDN4,8722
|
155
|
+
edsl/scenarios/Scenario.py,sha256=eQRMV6JD6mrlIMXc7-NK0I-LK5px2oC6rAR_w-qJPnE,14829
|
156
156
|
edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
|
157
157
|
edsl/scenarios/ScenarioImageMixin.py,sha256=VJ5FqyPrL5-ieORlWMpnjmOAFIau8QFZCIZyEBKgb6I,3530
|
158
|
-
edsl/scenarios/ScenarioList.py,sha256=
|
158
|
+
edsl/scenarios/ScenarioList.py,sha256=0Hx1JiXeHLfgKqSRQo2CO-HONgABHEC0lJVsaxZGm8o,18782
|
159
159
|
edsl/scenarios/ScenarioListExportMixin.py,sha256=h5_yc__e6XolY6yP6T8cka5zU1mko8T5xbIQtYijNWQ,1003
|
160
160
|
edsl/scenarios/ScenarioListPdfMixin.py,sha256=sRCHVG7z4u4ST4ce-I_Y4md8ZzC9-tj4an9PMouaHVg,3765
|
161
161
|
edsl/scenarios/__init__.py,sha256=KRwZCLf2R0qyJvv1NGbd8M51Bt6Ia6Iylg-Xq_2Fa6M,98
|
@@ -163,14 +163,14 @@ edsl/shared.py,sha256=lgLa-mCk2flIhxXarXLtfXZjXG_6XHhC2A3O8yRTjXc,20
|
|
163
163
|
edsl/study/ObjectEntry.py,sha256=e3xRPH8wCN8Pum5HZsQRYgnSoauSvjXunIEH79wu5A8,5788
|
164
164
|
edsl/study/ProofOfWork.py,sha256=FaqYtLgeiTEQXWKukPgPUTWMcIN5t1FR7h7Re8QEtgc,3433
|
165
165
|
edsl/study/SnapShot.py,sha256=-5zoP4uTvnqtu3zRNMD-fKsNAVYX9psoKRADfotsF9E,2439
|
166
|
-
edsl/study/Study.py,sha256=
|
166
|
+
edsl/study/Study.py,sha256=5yv5jT1uFxQD0oi_eODcKv_K6qTDbyAdMrAqBNNwOtE,16947
|
167
167
|
edsl/study/__init__.py,sha256=YAvPLTPG3hK_eN9Ar3d1_d-E3laXpSya879A25-JAxU,170
|
168
168
|
edsl/surveys/DAG.py,sha256=ozQuHo9ZQ8Eet5nDXtp7rFpiSocvvfxIHtyTnztvodg,2380
|
169
169
|
edsl/surveys/Memory.py,sha256=-ikOtkkQldGB_BkPCW3o7AYwV5B_pIwlREw7aVCSHaQ,1113
|
170
170
|
edsl/surveys/MemoryPlan.py,sha256=BeLuqS5Q8G2jSluHYFCAxVmj7cNPK-rDQ3mUsuDjikQ,7979
|
171
171
|
edsl/surveys/Rule.py,sha256=ddZyZSObs4gsKtFSmcXkPigXDX8rrh1NFvAplP02TcA,11092
|
172
172
|
edsl/surveys/RuleCollection.py,sha256=sN7aYDQJG3HmE-WxohgpctcQbHewjwE6NAqEVTxvFP8,13359
|
173
|
-
edsl/surveys/Survey.py,sha256=
|
173
|
+
edsl/surveys/Survey.py,sha256=oir5fnZD2chtUH1qsVSmTdVdXLRWcB0wkkby_Lcguu8,47227
|
174
174
|
edsl/surveys/SurveyCSS.py,sha256=NjJezs2sTlgFprN6IukjGKwNYmNdXnLjzV2w5K4z4RI,8415
|
175
175
|
edsl/surveys/SurveyExportMixin.py,sha256=vj9bZReHx0wBK9sVuS0alzPIUDdg6AFFMd7bl1RKWKI,6555
|
176
176
|
edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=Z-YqeedMqWOtCFy003YJ9aneJ1n4bn70lDoILwLtTc0,3966
|
@@ -197,7 +197,7 @@ edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,1
|
|
197
197
|
edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
|
198
198
|
edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
|
199
199
|
edsl/utilities/utilities.py,sha256=oU5Gg6szTGqsJ2yBOS0aC3XooezLE8By3SdrQLLpqvA,10107
|
200
|
-
edsl-0.1.30.
|
201
|
-
edsl-0.1.30.
|
202
|
-
edsl-0.1.30.
|
203
|
-
edsl-0.1.30.
|
200
|
+
edsl-0.1.30.dev4.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
|
201
|
+
edsl-0.1.30.dev4.dist-info/METADATA,sha256=StzD_Wua0pqicToraGkUrdMlwlCtVqmxHVUQa1VhhvM,4103
|
202
|
+
edsl-0.1.30.dev4.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
203
|
+
edsl-0.1.30.dev4.dist-info/RECORD,,
|
File without changes
|
File without changes
|