edsl 0.1.34.dev1__py3-none-any.whl → 0.1.35__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/PromptConstructor.py +17 -14
- edsl/inference_services/OpenAIService.py +13 -2
- edsl/jobs/Jobs.py +91 -10
- edsl/jobs/interviews/Interview.py +12 -9
- edsl/jobs/runners/JobsRunnerAsyncio.py +9 -9
- edsl/language_models/LanguageModel.py +2 -2
- edsl/language_models/utilities.py +4 -2
- edsl/questions/QuestionBase.py +2 -1
- edsl/questions/QuestionMultipleChoice.py +3 -3
- edsl/questions/templates/numerical/answering_instructions.jinja +0 -1
- edsl/scenarios/FileStore.py +0 -5
- edsl/scenarios/ScenarioList.py +9 -0
- edsl/surveys/base.py +4 -0
- {edsl-0.1.34.dev1.dist-info → edsl-0.1.35.dist-info}/METADATA +1 -1
- {edsl-0.1.34.dev1.dist-info → edsl-0.1.35.dist-info}/RECORD +18 -18
- {edsl-0.1.34.dev1.dist-info → edsl-0.1.35.dist-info}/LICENSE +0 -0
- {edsl-0.1.34.dev1.dist-info → edsl-0.1.35.dist-info}/WHEEL +0 -0
edsl/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.35"
|
edsl/agents/PromptConstructor.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
from typing import Dict, Any, Optional, Set
|
3
3
|
from collections import UserList
|
4
|
-
import
|
4
|
+
import pdb
|
5
5
|
|
6
6
|
from jinja2 import Environment, meta
|
7
7
|
|
@@ -172,7 +172,6 @@ class PromptConstructor:
|
|
172
172
|
"""
|
173
173
|
# The user might have passed a custom prompt, which would be stored in _question_instructions_prompt
|
174
174
|
if not hasattr(self, "_question_instructions_prompt"):
|
175
|
-
|
176
175
|
# Gets the instructions for the question - this is how the question should be answered
|
177
176
|
question_prompt = self.question.get_instructions(model=self.model.model)
|
178
177
|
|
@@ -198,14 +197,15 @@ class PromptConstructor:
|
|
198
197
|
self.question.question_options = question_options
|
199
198
|
|
200
199
|
# might be getting it from the prior answers
|
201
|
-
if
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
200
|
+
if self.prior_answers_dict().get(question_option_key) is not None:
|
201
|
+
if isinstance(
|
202
|
+
question_options := self.prior_answers_dict()
|
203
|
+
.get(question_option_key)
|
204
|
+
.answer,
|
205
|
+
list,
|
206
|
+
):
|
207
|
+
question_data["question_options"] = question_options
|
208
|
+
self.question.question_options = question_options
|
209
209
|
|
210
210
|
replacement_dict = (
|
211
211
|
{key: f"<see file {key}>" for key in self.scenario_file_keys}
|
@@ -241,10 +241,13 @@ class PromptConstructor:
|
|
241
241
|
)
|
242
242
|
|
243
243
|
if undefined_template_variables:
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
)
|
244
|
+
msg = f"Question instructions still has variables: {undefined_template_variables}."
|
245
|
+
import warnings
|
246
|
+
|
247
|
+
warnings.warn(msg)
|
248
|
+
# raise QuestionScenarioRenderError(
|
249
|
+
# f"Question instructions still has variables: {undefined_template_variables}."
|
250
|
+
# )
|
248
251
|
|
249
252
|
####################################
|
250
253
|
# Check if question has instructions - these are instructions in a Survey that can apply to multiple follow-on questions
|
@@ -188,12 +188,16 @@ class OpenAIService(InferenceServiceABC):
|
|
188
188
|
else:
|
189
189
|
content = user_prompt
|
190
190
|
client = self.async_client()
|
191
|
+
|
191
192
|
messages = [
|
192
193
|
{"role": "system", "content": system_prompt},
|
193
194
|
{"role": "user", "content": content},
|
194
195
|
]
|
195
|
-
if
|
196
|
+
if (
|
197
|
+
system_prompt == "" and self.omit_system_prompt_if_empty
|
198
|
+
) or "o1" in self.model:
|
196
199
|
messages = messages[1:]
|
200
|
+
|
197
201
|
params = {
|
198
202
|
"model": self.model,
|
199
203
|
"messages": messages,
|
@@ -205,7 +209,14 @@ class OpenAIService(InferenceServiceABC):
|
|
205
209
|
"logprobs": self.logprobs,
|
206
210
|
"top_logprobs": self.top_logprobs if self.logprobs else None,
|
207
211
|
}
|
208
|
-
|
212
|
+
if "o1" in self.model:
|
213
|
+
params.pop("max_tokens")
|
214
|
+
params["max_completion_tokens"] = self.max_tokens
|
215
|
+
params["temperature"] = 1
|
216
|
+
try:
|
217
|
+
response = await client.chat.completions.create(**params)
|
218
|
+
except Exception as e:
|
219
|
+
print(e)
|
209
220
|
return response.model_dump()
|
210
221
|
|
211
222
|
LLM.__name__ = "LanguageModel"
|
edsl/jobs/Jobs.py
CHANGED
@@ -145,14 +145,21 @@ class Jobs(Base):
|
|
145
145
|
>>> Jobs.example().prompts()
|
146
146
|
Dataset(...)
|
147
147
|
"""
|
148
|
+
from edsl import Coop
|
149
|
+
|
150
|
+
c = Coop()
|
151
|
+
price_lookup = c.fetch_prices()
|
148
152
|
|
149
153
|
interviews = self.interviews()
|
150
154
|
# data = []
|
151
155
|
interview_indices = []
|
152
|
-
|
156
|
+
question_names = []
|
153
157
|
user_prompts = []
|
154
158
|
system_prompts = []
|
155
159
|
scenario_indices = []
|
160
|
+
agent_indices = []
|
161
|
+
models = []
|
162
|
+
costs = []
|
156
163
|
from edsl.results.Dataset import Dataset
|
157
164
|
|
158
165
|
for interview_index, interview in enumerate(interviews):
|
@@ -160,23 +167,97 @@ class Jobs(Base):
|
|
160
167
|
interview._get_invigilator(question)
|
161
168
|
for question in self.survey.questions
|
162
169
|
]
|
163
|
-
# list(interview._build_invigilators(debug=False))
|
164
170
|
for _, invigilator in enumerate(invigilators):
|
165
171
|
prompts = invigilator.get_prompts()
|
166
|
-
|
167
|
-
|
172
|
+
user_prompt = prompts["user_prompt"]
|
173
|
+
system_prompt = prompts["system_prompt"]
|
174
|
+
user_prompts.append(user_prompt)
|
175
|
+
system_prompts.append(system_prompt)
|
176
|
+
agent_index = self.agents.index(invigilator.agent)
|
177
|
+
agent_indices.append(agent_index)
|
168
178
|
interview_indices.append(interview_index)
|
169
|
-
|
170
|
-
|
171
|
-
|
179
|
+
scenario_index = self.scenarios.index(invigilator.scenario)
|
180
|
+
scenario_indices.append(scenario_index)
|
181
|
+
models.append(invigilator.model.model)
|
182
|
+
question_names.append(invigilator.question.question_name)
|
183
|
+
# cost calculation
|
184
|
+
key = (invigilator.model._inference_service_, invigilator.model.model)
|
185
|
+
relevant_prices = price_lookup[key]
|
186
|
+
inverse_output_price = relevant_prices["output"]["one_usd_buys"]
|
187
|
+
inverse_input_price = relevant_prices["input"]["one_usd_buys"]
|
188
|
+
input_tokens = len(str(user_prompt) + str(system_prompt)) // 4
|
189
|
+
output_tokens = len(str(user_prompt) + str(system_prompt)) // 4
|
190
|
+
cost = input_tokens / float(
|
191
|
+
inverse_input_price
|
192
|
+
) + output_tokens / float(inverse_output_price)
|
193
|
+
costs.append(cost)
|
194
|
+
|
195
|
+
d = Dataset(
|
172
196
|
[
|
173
|
-
{"interview_index": interview_indices},
|
174
|
-
{"question_index": question_indices},
|
175
197
|
{"user_prompt": user_prompts},
|
176
|
-
{"scenario_index": scenario_indices},
|
177
198
|
{"system_prompt": system_prompts},
|
199
|
+
{"interview_index": interview_indices},
|
200
|
+
{"question_name": question_names},
|
201
|
+
{"scenario_index": scenario_indices},
|
202
|
+
{"agent_index": agent_indices},
|
203
|
+
{"model": models},
|
204
|
+
{"estimated_cost": costs},
|
178
205
|
]
|
179
206
|
)
|
207
|
+
return d
|
208
|
+
# if table:
|
209
|
+
# d.to_scenario_list().print(format="rich")
|
210
|
+
# else:
|
211
|
+
# return d
|
212
|
+
|
213
|
+
def show_prompts(self) -> None:
|
214
|
+
"""Print the prompts."""
|
215
|
+
self.prompts().to_scenario_list().print(format="rich")
|
216
|
+
|
217
|
+
def estimate_job_cost(self):
|
218
|
+
from edsl import Coop
|
219
|
+
|
220
|
+
c = Coop()
|
221
|
+
price_lookup = c.fetch_prices()
|
222
|
+
|
223
|
+
prompts = self.prompts()
|
224
|
+
|
225
|
+
text_len = 0
|
226
|
+
for prompt in prompts:
|
227
|
+
text_len += len(str(prompt))
|
228
|
+
|
229
|
+
input_token_aproximations = text_len // 4
|
230
|
+
|
231
|
+
aproximation_cost = {}
|
232
|
+
total_cost = 0
|
233
|
+
for model in self.models:
|
234
|
+
key = (model._inference_service_, model.model)
|
235
|
+
relevant_prices = price_lookup[key]
|
236
|
+
inverse_output_price = relevant_prices["output"]["one_usd_buys"]
|
237
|
+
inverse_input_price = relevant_prices["input"]["one_usd_buys"]
|
238
|
+
|
239
|
+
aproximation_cost[key] = {
|
240
|
+
"input": input_token_aproximations / float(inverse_input_price),
|
241
|
+
"output": input_token_aproximations / float(inverse_output_price),
|
242
|
+
}
|
243
|
+
##TODO curenlty we approximate the number of output tokens with the number
|
244
|
+
# of input tokens. A better solution will be to compute the quesiton answer options length and sum them
|
245
|
+
# to compute the output tokens
|
246
|
+
|
247
|
+
total_cost += input_token_aproximations / float(inverse_input_price)
|
248
|
+
total_cost += input_token_aproximations / float(inverse_output_price)
|
249
|
+
|
250
|
+
# multiply_factor = len(self.agents or [1]) * len(self.scenarios or [1])
|
251
|
+
multiply_factor = 1
|
252
|
+
out = {
|
253
|
+
"input_token_aproximations": input_token_aproximations,
|
254
|
+
"models_costs": aproximation_cost,
|
255
|
+
"estimated_total_cost": total_cost * multiply_factor,
|
256
|
+
"multiply_factor": multiply_factor,
|
257
|
+
"single_config_cost": total_cost,
|
258
|
+
}
|
259
|
+
|
260
|
+
return out
|
180
261
|
|
181
262
|
@staticmethod
|
182
263
|
def _get_container_class(object):
|
@@ -3,6 +3,7 @@
|
|
3
3
|
from __future__ import annotations
|
4
4
|
import asyncio
|
5
5
|
from typing import Any, Type, List, Generator, Optional, Union
|
6
|
+
import copy
|
6
7
|
|
7
8
|
from tenacity import (
|
8
9
|
retry,
|
@@ -99,15 +100,17 @@ class Interview(InterviewStatusMixin):
|
|
99
100
|
|
100
101
|
"""
|
101
102
|
self.agent = agent
|
102
|
-
|
103
|
+
# what I would like to do
|
104
|
+
self.survey = copy.deepcopy(survey) # survey copy.deepcopy(survey)
|
105
|
+
# self.survey = survey
|
103
106
|
self.scenario = scenario
|
104
107
|
self.model = model
|
105
108
|
self.debug = debug
|
106
109
|
self.iteration = iteration
|
107
110
|
self.cache = cache
|
108
|
-
self.answers: dict[
|
109
|
-
|
110
|
-
) # will get filled in as interview progresses
|
111
|
+
self.answers: dict[
|
112
|
+
str, str
|
113
|
+
] = Answers() # will get filled in as interview progresses
|
111
114
|
self.sidecar_model = sidecar_model
|
112
115
|
|
113
116
|
# self.stop_on_exception = False
|
@@ -428,11 +431,11 @@ class Interview(InterviewStatusMixin):
|
|
428
431
|
"""
|
429
432
|
current_question_index: int = self.to_index[current_question.question_name]
|
430
433
|
|
431
|
-
next_question: Union[
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
434
|
+
next_question: Union[
|
435
|
+
int, EndOfSurvey
|
436
|
+
] = self.survey.rule_collection.next_question(
|
437
|
+
q_now=current_question_index,
|
438
|
+
answers=self.answers | self.scenario | self.agent["traits"],
|
436
439
|
)
|
437
440
|
|
438
441
|
next_question_index = next_question.next_q
|
@@ -173,19 +173,19 @@ class JobsRunnerAsyncio:
|
|
173
173
|
|
174
174
|
prompt_dictionary = {}
|
175
175
|
for answer_key_name in answer_key_names:
|
176
|
-
prompt_dictionary[
|
177
|
-
|
178
|
-
|
179
|
-
prompt_dictionary[
|
180
|
-
|
181
|
-
|
176
|
+
prompt_dictionary[
|
177
|
+
answer_key_name + "_user_prompt"
|
178
|
+
] = question_name_to_prompts[answer_key_name]["user_prompt"]
|
179
|
+
prompt_dictionary[
|
180
|
+
answer_key_name + "_system_prompt"
|
181
|
+
] = question_name_to_prompts[answer_key_name]["system_prompt"]
|
182
182
|
|
183
183
|
raw_model_results_dictionary = {}
|
184
184
|
for result in valid_results:
|
185
185
|
question_name = result.question_name
|
186
|
-
raw_model_results_dictionary[
|
187
|
-
|
188
|
-
|
186
|
+
raw_model_results_dictionary[
|
187
|
+
question_name + "_raw_model_response"
|
188
|
+
] = result.raw_model_response
|
189
189
|
raw_model_results_dictionary[question_name + "_cost"] = result.cost
|
190
190
|
one_use_buys = (
|
191
191
|
"NA"
|
@@ -490,7 +490,7 @@ class LanguageModel(
|
|
490
490
|
"user_prompt": user_prompt,
|
491
491
|
"system_prompt": system_prompt,
|
492
492
|
"files_list": files_list
|
493
|
-
|
493
|
+
# **({"encoded_image": encoded_image} if encoded_image else {}),
|
494
494
|
}
|
495
495
|
# response = await f(**params)
|
496
496
|
response = await asyncio.wait_for(f(**params), timeout=TIMEOUT)
|
@@ -534,7 +534,7 @@ class LanguageModel(
|
|
534
534
|
system_prompt: str,
|
535
535
|
cache: "Cache",
|
536
536
|
iteration: int = 1,
|
537
|
-
files_list: Optional[List[
|
537
|
+
files_list: Optional[List["File"]] = None,
|
538
538
|
) -> dict:
|
539
539
|
"""Get response, parse, and return as string.
|
540
540
|
|
@@ -40,8 +40,10 @@ def create_language_model(
|
|
40
40
|
_tpm = 1000000000000
|
41
41
|
|
42
42
|
async def async_execute_model_call(
|
43
|
-
self,
|
44
|
-
|
43
|
+
self,
|
44
|
+
user_prompt: str,
|
45
|
+
system_prompt: str,
|
46
|
+
files_list: Optional[List[Any]] = None,
|
45
47
|
) -> dict[str, Any]:
|
46
48
|
question_number = int(
|
47
49
|
user_prompt.split("XX")[1]
|
edsl/questions/QuestionBase.py
CHANGED
@@ -82,7 +82,8 @@ class QuestionBase(
|
|
82
82
|
if not hasattr(self, "_fake_data_factory"):
|
83
83
|
from polyfactory.factories.pydantic_factory import ModelFactory
|
84
84
|
|
85
|
-
class FakeData(ModelFactory[self.response_model]):
|
85
|
+
class FakeData(ModelFactory[self.response_model]):
|
86
|
+
...
|
86
87
|
|
87
88
|
self._fake_data_factory = FakeData
|
88
89
|
return self._fake_data_factory
|
@@ -120,9 +120,9 @@ class QuestionMultipleChoice(QuestionBase):
|
|
120
120
|
|
121
121
|
question_type = "multiple_choice"
|
122
122
|
purpose = "When options are known and limited"
|
123
|
-
question_options: Union[
|
124
|
-
|
125
|
-
)
|
123
|
+
question_options: Union[
|
124
|
+
list[str], list[list], list[float], list[int]
|
125
|
+
] = QuestionOptionsDescriptor()
|
126
126
|
_response_model = None
|
127
127
|
response_validator_class = MultipleChoiceResponseValidator
|
128
128
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
This question requires a numerical response in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
|
2
2
|
Respond with just your number on a single line.
|
3
3
|
If your response is equivalent to zero, report '0'
|
4
|
-
If you cannot determine the answer, report 'None'
|
5
4
|
|
6
5
|
{% if include_comment %}
|
7
6
|
After the answer, put a comment explaining your choice on the next line.
|
edsl/scenarios/FileStore.py
CHANGED
@@ -263,7 +263,6 @@ class FileStore(Scenario):
|
|
263
263
|
|
264
264
|
|
265
265
|
class CSVFileStore(FileStore):
|
266
|
-
|
267
266
|
@classmethod
|
268
267
|
def example(cls):
|
269
268
|
from edsl.results.Results import Results
|
@@ -282,7 +281,6 @@ class CSVFileStore(FileStore):
|
|
282
281
|
|
283
282
|
|
284
283
|
class PDFFileStore(FileStore):
|
285
|
-
|
286
284
|
def view(self):
|
287
285
|
pdf_path = self.to_tempfile()
|
288
286
|
print(f"PDF path: {pdf_path}") # Print the path to ensure it exists
|
@@ -358,7 +356,6 @@ class PDFFileStore(FileStore):
|
|
358
356
|
|
359
357
|
|
360
358
|
class PNGFileStore(FileStore):
|
361
|
-
|
362
359
|
@classmethod
|
363
360
|
def example(cls):
|
364
361
|
import textwrap
|
@@ -382,7 +379,6 @@ class PNGFileStore(FileStore):
|
|
382
379
|
|
383
380
|
|
384
381
|
class SQLiteFileStore(FileStore):
|
385
|
-
|
386
382
|
@classmethod
|
387
383
|
def example(cls):
|
388
384
|
import sqlite3
|
@@ -405,7 +401,6 @@ class SQLiteFileStore(FileStore):
|
|
405
401
|
|
406
402
|
|
407
403
|
class HTMLFileStore(FileStore):
|
408
|
-
|
409
404
|
@classmethod
|
410
405
|
def example(cls):
|
411
406
|
import tempfile
|
edsl/scenarios/ScenarioList.py
CHANGED
@@ -39,6 +39,15 @@ class ScenarioList(Base, UserList, ScenarioListMixin):
|
|
39
39
|
super().__init__([])
|
40
40
|
self.codebook = codebook or {}
|
41
41
|
|
42
|
+
def unique(self) -> ScenarioList:
|
43
|
+
"""Return a list of unique scenarios.
|
44
|
+
|
45
|
+
>>> s = ScenarioList([Scenario({'a': 1}), Scenario({'a': 1}), Scenario({'a': 2})])
|
46
|
+
>>> s.unique()
|
47
|
+
ScenarioList([Scenario({'a': 1}), Scenario({'a': 2})])
|
48
|
+
"""
|
49
|
+
return ScenarioList(list(set(self)))
|
50
|
+
|
42
51
|
@property
|
43
52
|
def has_jinja_braces(self) -> bool:
|
44
53
|
"""Check if the ScenarioList has Jinja braces."""
|
edsl/surveys/base.py
CHANGED
@@ -2,12 +2,12 @@ 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
4
|
edsl/__init__.py,sha256=UZcx9RHSi3Dslh2lWvCOeppdMW9Xzw_YLs-kFaNW1MU,1770
|
5
|
-
edsl/__version__.py,sha256=
|
5
|
+
edsl/__version__.py,sha256=ABqgofsnbWf7823vTBbZNQ81eKQbWwrVToAU6T3z-6s,23
|
6
6
|
edsl/agents/Agent.py,sha256=ww6DK177eHQUlYkzgnt1b-MBDKXCdhVx3HezAZZ7TKk,28473
|
7
7
|
edsl/agents/AgentList.py,sha256=qo8VK3Ov0YOSbsBcHmlwLZBH81CcDfy5IEcx9AVH78M,10963
|
8
8
|
edsl/agents/Invigilator.py,sha256=6xd4sJ6Jzxld8LZDWZuSCZLL_MfaSux4LJCAm_RLEOM,9077
|
9
9
|
edsl/agents/InvigilatorBase.py,sha256=qIdAiriXAbnJH_SN9w2UAXHcDgQvk8Ar3QerKFjtPwM,10341
|
10
|
-
edsl/agents/PromptConstructor.py,sha256=
|
10
|
+
edsl/agents/PromptConstructor.py,sha256=qVCfRyYR-vKcpGJ_It2SOUvBfHtF8M6qYcf9ZCsHBl8,14855
|
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
|
@@ -78,7 +78,7 @@ edsl/inference_services/InferenceServiceABC.py,sha256=rXqorwbKqzlwui2cxum8_TRrBc
|
|
78
78
|
edsl/inference_services/InferenceServicesCollection.py,sha256=EDyxnoSjGXhWob_ost7U8WUYjn1jgL_noB0-VlXBnOo,2810
|
79
79
|
edsl/inference_services/MistralAIService.py,sha256=7mUsBEZdEWIjfh4qMNemTT2xYMq7k0yuMLGtDTdfp4Y,3878
|
80
80
|
edsl/inference_services/OllamaService.py,sha256=oro9CRl8IUE2Ro-zE69Cr4Zaf6Gdw29XW5CFU-46E0k,498
|
81
|
-
edsl/inference_services/OpenAIService.py,sha256=
|
81
|
+
edsl/inference_services/OpenAIService.py,sha256=wraTu62bZojmgAXHNG6pJMMPZiyO1pSDfY73LVaBR_I,7621
|
82
82
|
edsl/inference_services/TestService.py,sha256=-jTXkl_qLt1k8gJjRb0SMgTb9EY-XMTP-ZUL9AJcUCA,3009
|
83
83
|
edsl/inference_services/TogetherAIService.py,sha256=p_31ccrfN25kZF2xlAlUkb7w1EL4lGjmkSv-5qZ7TtY,6301
|
84
84
|
edsl/inference_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -88,12 +88,12 @@ edsl/inference_services/registry.py,sha256=CwdaQ-A5PTb5lFKMQdOfl8IqCw2SVJ8HlC-_2
|
|
88
88
|
edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
|
89
89
|
edsl/jobs/Answers.py,sha256=c4LpigQjdnMr7iJu8571C4FggGPVudfT7hbJgmgKW40,1821
|
90
90
|
edsl/jobs/FailedQuestion.py,sha256=3D5Vcmv1t2_dzBWbkUUIia3_jXHdzQDdyg-4TEIWU2Q,2701
|
91
|
-
edsl/jobs/Jobs.py,sha256=
|
91
|
+
edsl/jobs/Jobs.py,sha256=oryxhrBuXs9Ba8mt5BSIjX3gT37hdzothL5xH0ygrkU,37227
|
92
92
|
edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
|
93
93
|
edsl/jobs/buckets/BucketCollection.py,sha256=11CRisE1WAPcAlI3YJK3DVvu0AqSvv8KskXo4Q1waSk,2286
|
94
94
|
edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
|
95
95
|
edsl/jobs/buckets/TokenBucket.py,sha256=7fG4omzTcj5xC2iJLO9bfBkdAGs6Y3weXzlA3BgPr0E,9090
|
96
|
-
edsl/jobs/interviews/Interview.py,sha256=
|
96
|
+
edsl/jobs/interviews/Interview.py,sha256=iw0thEGwENOl8uzHRJ88zjYHEDSlM_X96Fyse9wZCwM,23883
|
97
97
|
edsl/jobs/interviews/InterviewExceptionCollection.py,sha256=Ez8BCZUD3odqoY9h-gzYKKM8yaHynQ-eYw2uMDh7t98,3279
|
98
98
|
edsl/jobs/interviews/InterviewExceptionEntry.py,sha256=BGGjj0sb1wJJ0QmYklt1DyEYKD8mUGygllGfN2WXKbY,4903
|
99
99
|
edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
|
@@ -103,7 +103,7 @@ edsl/jobs/interviews/InterviewStatusLog.py,sha256=6u0F8gf5tha39VQL-IK_QPkCsQAYVO
|
|
103
103
|
edsl/jobs/interviews/InterviewStatusMixin.py,sha256=VV0Pel-crUsLoGpTifeIIkXsLGj0bfuO--UtpRnH-dU,1251
|
104
104
|
edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AEOxhTim8,1745
|
105
105
|
edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
|
106
|
-
edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=
|
106
|
+
edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=SXWFTgTYQzqIaBjPQ2mRrxR3aGFMQyw2eD9wX8tZNkQ,12850
|
107
107
|
edsl/jobs/runners/JobsRunnerStatus.py,sha256=4eCh9sRpswGdKeSMW9pCGCAjJZa-OrWUPI7tsxIy_g4,12112
|
108
108
|
edsl/jobs/runners/JobsRunnerStatusData.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
109
109
|
edsl/jobs/tasks/QuestionTaskCreator.py,sha256=f26rokFVXVdyKR2M8of_jlZqP6TPcTAINk9tEvb35pw,10122
|
@@ -114,7 +114,7 @@ edsl/jobs/tasks/task_management.py,sha256=KMToZuXzMlnHRHUF_VHL0-lHMTGhklf2GHVuwE
|
|
114
114
|
edsl/jobs/tasks/task_status_enum.py,sha256=DOyrz61YlIS8R1W7izJNphcLrJ7I_ReUlfdRmk23h0Q,5333
|
115
115
|
edsl/jobs/tokens/InterviewTokenUsage.py,sha256=u_6-IHpGFwZ6qMEXr24-jyLVUSSp4dSs_4iAZsBv7O4,1100
|
116
116
|
edsl/jobs/tokens/TokenUsage.py,sha256=odj2-wDNEbHl9noyFAQ0DSKV0D9cv3aDOpmXufKZ8O4,1323
|
117
|
-
edsl/language_models/LanguageModel.py,sha256=
|
117
|
+
edsl/language_models/LanguageModel.py,sha256=lGmflHSq0vLt4zBzYSKxH5dFccfA4Mhj4NM-XhTNZxY,25194
|
118
118
|
edsl/language_models/ModelList.py,sha256=GhjRV7y1jRvP_Yjgwv6fxksTVb8sFPBiiRRfdqW-hgg,2852
|
119
119
|
edsl/language_models/RegisterLanguageModelsMeta.py,sha256=eMtBSAnlRnC4c-0_o2QkSNyzv-uAce4BEGMXq2PLj2E,7523
|
120
120
|
edsl/language_models/__init__.py,sha256=bvY7Gy6VkX1gSbNkRbGPS-M1kUnb0EohL0FSagaEaTs,109
|
@@ -123,7 +123,7 @@ edsl/language_models/fake_openai_service.py,sha256=2AAsAinELbMZRqiepwBkWhWcLuMe5
|
|
123
123
|
edsl/language_models/registry.py,sha256=hfOlKbTkXrXGpZHQQPKE9uyyUCgOxoUyyIaKL2kf53U,4369
|
124
124
|
edsl/language_models/repair.py,sha256=d0i2S3kJfX7JtuCYhlIyT0QP8hcZkRPLanC09lOW_xo,5353
|
125
125
|
edsl/language_models/unused/ReplicateBase.py,sha256=J1oqf7mEyyKhRwNUomnptVqAsVFYCbS3iTW0EXpKtXo,3331
|
126
|
-
edsl/language_models/utilities.py,sha256=
|
126
|
+
edsl/language_models/utilities.py,sha256=GWON2ahCpB-_-hhqmQ5Yi7_rKB4cd8GlucWuq6EnGZQ,2280
|
127
127
|
edsl/notebooks/Notebook.py,sha256=xi9xkxmkQ6-DwhqbjjMLpYKB0VJV20AtwEonJ6mnqjo,7739
|
128
128
|
edsl/notebooks/__init__.py,sha256=VNUA3nNq04slWNbYaNrzOhQJu3AZANpvBniyCJSzJ7U,45
|
129
129
|
edsl/prompts/Prompt.py,sha256=KsIz0tZnIqZlnbzNWO57C3MwJ0OCcUrZPmu7DBApc4s,11887
|
@@ -143,7 +143,7 @@ edsl/prompts/library/question_rank.py,sha256=WDgXyph0EKWJrSgsW2eqcx3xdU-WA1LEvB2
|
|
143
143
|
edsl/prompts/prompt_config.py,sha256=O3Y5EvBsCeKs9m9IjXiRXOcHWlWvQV0yqsNb2oSR1ow,974
|
144
144
|
edsl/prompts/registry.py,sha256=XOsqGsvNOmIG83jqoszqI72yNZkkszKR4FrEhwSzj_Q,8093
|
145
145
|
edsl/questions/AnswerValidatorMixin.py,sha256=t_ABep50KP02GSc48Y8VAEjp35drVOngfrWXU5aVhgk,11505
|
146
|
-
edsl/questions/QuestionBase.py,sha256=
|
146
|
+
edsl/questions/QuestionBase.py,sha256=QsdYFHnWYh04JpCdx3o3WGgohBfE5X_7idQRRYrx_SA,21169
|
147
147
|
edsl/questions/QuestionBaseGenMixin.py,sha256=CPxjWZjrxuSO8YWelz6dbp7fm788gN7-T8z7jXStboQ,6017
|
148
148
|
edsl/questions/QuestionBasePromptsMixin.py,sha256=Km1P6PpkVJ9O3dS8pJZHNJ6aQABhYGLwdef4Z2vSrqk,9516
|
149
149
|
edsl/questions/QuestionBudget.py,sha256=TJgPsyqafJdJw5if0zVxh7zHloourINUqUWfWIlRq9Y,8131
|
@@ -152,7 +152,7 @@ edsl/questions/QuestionExtract.py,sha256=PlXwMeZgPAFBXIHSXpFMYTToag-HwA9C7u6-Z3b
|
|
152
152
|
edsl/questions/QuestionFreeText.py,sha256=uXJxrrAGCq0-J6WpO6TBNFBNOC2ztoEVa-2UMXuwlak,3384
|
153
153
|
edsl/questions/QuestionFunctional.py,sha256=yZQFLQAxfNsAIETffFoBr-Ltb2oFPeywu-nhm9qjYRc,5133
|
154
154
|
edsl/questions/QuestionList.py,sha256=vs2AE8OnbwVsly-sorb9dfIibdF1BpOaCRYyvwXYSzY,7209
|
155
|
-
edsl/questions/QuestionMultipleChoice.py,sha256=
|
155
|
+
edsl/questions/QuestionMultipleChoice.py,sha256=Yj94-6fwFqDI9UvjwSCOfKnp4gBB86XMmCsL7lbX-t4,10292
|
156
156
|
edsl/questions/QuestionNumerical.py,sha256=_jMZ28DZHYAv_g3Y3vCnmzerMs995on0Ng6j4pDcfHo,4959
|
157
157
|
edsl/questions/QuestionRank.py,sha256=kYHTYXU88X2Uv-zeCiI9w5aEFYTxvg2p7DoGaaER4ik,11596
|
158
158
|
edsl/questions/Quick.py,sha256=h6h4fEvIkLIFJX2JiqfOUEXzku9azWxEpI5o2A4RmVs,1731
|
@@ -205,7 +205,7 @@ edsl/questions/templates/multiple_choice/answering_instructions.jinja,sha256=eSc
|
|
205
205
|
edsl/questions/templates/multiple_choice/html.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
206
206
|
edsl/questions/templates/multiple_choice/question_presentation.jinja,sha256=hoEVj4GQD3EYnR2AStXkMFOJeqISNoEVzBd8-cx2yWg,273
|
207
207
|
edsl/questions/templates/numerical/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
208
|
-
edsl/questions/templates/numerical/answering_instructions.jinja,sha256=
|
208
|
+
edsl/questions/templates/numerical/answering_instructions.jinja,sha256=70CnuIbdRKGiYJk7316-FFloRh3Oeg_RvUu4tthNKqs,323
|
209
209
|
edsl/questions/templates/numerical/question_presentation.jinja,sha256=8lMUWtEPHD4XOAyVEfCmWSwRFrdUa3lo8sxzogDyzWE,183
|
210
210
|
edsl/questions/templates/rank/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
211
211
|
edsl/questions/templates/rank/answering_instructions.jinja,sha256=-LWrhVJ0ZwQW_DXhARh5GweqlarWbhZzoqwr6tE-33s,433
|
@@ -229,10 +229,10 @@ edsl/results/ResultsToolsMixin.py,sha256=mseEFxJCf9sjXdIxpjITt_UZBwdXxw2o2VLg5jM
|
|
229
229
|
edsl/results/Selector.py,sha256=4AsFD71FKTFY1a0_AImsYWcYKx-RXPG6RgwsAvuNW3k,4403
|
230
230
|
edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
|
231
231
|
edsl/results/tree_explore.py,sha256=hQjiO4E71rIOPDgEHgK8T8ukxqoNdgX_tvyiDlG4_9U,4624
|
232
|
-
edsl/scenarios/FileStore.py,sha256=
|
232
|
+
edsl/scenarios/FileStore.py,sha256=V_zn2RmVclcBQTvqghotnTO97YHWUXqeVfN7eMfpfUM,13929
|
233
233
|
edsl/scenarios/Scenario.py,sha256=ZG1x4_MmWP9j0gakLwsxOZ7ESMy3ifwBMhgQlHvsYo8,16809
|
234
234
|
edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
|
235
|
-
edsl/scenarios/ScenarioList.py,sha256=
|
235
|
+
edsl/scenarios/ScenarioList.py,sha256=1zbwDICXbvtUGA5bDlhThNp9pfhBGIHIqhK2cX-th50,40942
|
236
236
|
edsl/scenarios/ScenarioListExportMixin.py,sha256=wfffY9xy_1QyIM-1xnisr64izSLjmyuotUYY5iDLodc,1681
|
237
237
|
edsl/scenarios/ScenarioListPdfMixin.py,sha256=z_H2sZn5SCSq6nRLSU5jefaOlh4sqJLyOY_Ld0XCR18,8332
|
238
238
|
edsl/scenarios/__init__.py,sha256=KRwZCLf2R0qyJvv1NGbd8M51Bt6Ia6Iylg-Xq_2Fa6M,98
|
@@ -253,7 +253,7 @@ edsl/surveys/SurveyExportMixin.py,sha256=Kvkd2ku2Kemsn2Nw-Yt8GTnGFcUqfEiKznmisAe
|
|
253
253
|
edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=dEG_f-L0ZAyWU5Ta584IX5GZurjVt1tbIISo5z61Jvg,4004
|
254
254
|
edsl/surveys/SurveyQualtricsImport.py,sha256=SSZv53D1zVhQSfSw-X0_cte0QnkWhE9v922wLn6RMkI,9771
|
255
255
|
edsl/surveys/__init__.py,sha256=vjMYVlP95fHVqqw2FfKXRuYbTArZkZr1nK4FnXzZWzs,129
|
256
|
-
edsl/surveys/base.py,sha256=
|
256
|
+
edsl/surveys/base.py,sha256=XJHGEbbsH6hlYYkmI4isVLD8guLz8BdhR-eQRL78mc4,1115
|
257
257
|
edsl/surveys/descriptors.py,sha256=3B-hBVvGpLlVBCyOnPuxkLjesvpr0QIuATbggp_MJ7o,2076
|
258
258
|
edsl/surveys/instructions/ChangeInstruction.py,sha256=XDLuI5nVI60iJz1w1kLaKmYryAYE0XIyRbElBtNjVVM,1265
|
259
259
|
edsl/surveys/instructions/Instruction.py,sha256=WaTGihAQ6lCtm5W4vknTamkPzDp-eIAirdtGV37fdbc,925
|
@@ -289,7 +289,7 @@ edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,1
|
|
289
289
|
edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
|
290
290
|
edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
|
291
291
|
edsl/utilities/utilities.py,sha256=gqMtWWNEZkWLiRR9vHW-VRNy2bStEPlJ-I2aK9CwFiQ,11367
|
292
|
-
edsl-0.1.
|
293
|
-
edsl-0.1.
|
294
|
-
edsl-0.1.
|
295
|
-
edsl-0.1.
|
292
|
+
edsl-0.1.35.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
|
293
|
+
edsl-0.1.35.dist-info/METADATA,sha256=eyPEBXgJt4VgO_f7yPO8rIjvRDT2_RFjbCzF3bvVftk,4471
|
294
|
+
edsl-0.1.35.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
295
|
+
edsl-0.1.35.dist-info/RECORD,,
|
File without changes
|
File without changes
|