edsl 0.1.31.dev4__py3-none-any.whl → 0.1.33__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/Base.py +9 -3
- edsl/TemplateLoader.py +24 -0
- edsl/__init__.py +8 -3
- edsl/__version__.py +1 -1
- edsl/agents/Agent.py +40 -8
- edsl/agents/AgentList.py +43 -0
- edsl/agents/Invigilator.py +136 -221
- edsl/agents/InvigilatorBase.py +148 -59
- edsl/agents/{PromptConstructionMixin.py → PromptConstructor.py} +154 -85
- edsl/agents/__init__.py +1 -0
- edsl/auto/AutoStudy.py +117 -0
- edsl/auto/StageBase.py +230 -0
- edsl/auto/StageGenerateSurvey.py +178 -0
- edsl/auto/StageLabelQuestions.py +125 -0
- edsl/auto/StagePersona.py +61 -0
- edsl/auto/StagePersonaDimensionValueRanges.py +88 -0
- edsl/auto/StagePersonaDimensionValues.py +74 -0
- edsl/auto/StagePersonaDimensions.py +69 -0
- edsl/auto/StageQuestions.py +73 -0
- edsl/auto/SurveyCreatorPipeline.py +21 -0
- edsl/auto/utilities.py +224 -0
- edsl/config.py +48 -47
- edsl/conjure/Conjure.py +6 -0
- edsl/coop/PriceFetcher.py +58 -0
- edsl/coop/coop.py +50 -7
- edsl/data/Cache.py +35 -1
- edsl/data/CacheHandler.py +3 -4
- edsl/data_transfer_models.py +73 -38
- edsl/enums.py +8 -0
- edsl/exceptions/general.py +10 -8
- edsl/exceptions/language_models.py +25 -1
- edsl/exceptions/questions.py +62 -5
- edsl/exceptions/results.py +4 -0
- edsl/inference_services/AnthropicService.py +13 -11
- edsl/inference_services/AwsBedrock.py +112 -0
- edsl/inference_services/AzureAI.py +214 -0
- edsl/inference_services/DeepInfraService.py +4 -3
- edsl/inference_services/GoogleService.py +16 -12
- edsl/inference_services/GroqService.py +5 -4
- edsl/inference_services/InferenceServiceABC.py +58 -3
- edsl/inference_services/InferenceServicesCollection.py +13 -8
- edsl/inference_services/MistralAIService.py +120 -0
- edsl/inference_services/OllamaService.py +18 -0
- edsl/inference_services/OpenAIService.py +55 -56
- edsl/inference_services/TestService.py +80 -0
- edsl/inference_services/TogetherAIService.py +170 -0
- edsl/inference_services/models_available_cache.py +25 -0
- edsl/inference_services/registry.py +19 -1
- edsl/jobs/Answers.py +10 -12
- edsl/jobs/FailedQuestion.py +78 -0
- edsl/jobs/Jobs.py +137 -41
- edsl/jobs/buckets/BucketCollection.py +24 -15
- edsl/jobs/buckets/TokenBucket.py +105 -18
- edsl/jobs/interviews/Interview.py +393 -83
- edsl/jobs/interviews/{interview_exception_tracking.py → InterviewExceptionCollection.py} +22 -18
- edsl/jobs/interviews/InterviewExceptionEntry.py +167 -0
- edsl/jobs/runners/JobsRunnerAsyncio.py +152 -160
- edsl/jobs/runners/JobsRunnerStatus.py +331 -0
- edsl/jobs/tasks/QuestionTaskCreator.py +30 -23
- edsl/jobs/tasks/TaskCreators.py +1 -1
- edsl/jobs/tasks/TaskHistory.py +205 -126
- edsl/language_models/LanguageModel.py +297 -177
- edsl/language_models/ModelList.py +2 -2
- edsl/language_models/RegisterLanguageModelsMeta.py +14 -29
- edsl/language_models/fake_openai_call.py +15 -0
- edsl/language_models/fake_openai_service.py +61 -0
- edsl/language_models/registry.py +25 -8
- edsl/language_models/repair.py +0 -19
- edsl/language_models/utilities.py +61 -0
- edsl/notebooks/Notebook.py +20 -2
- edsl/prompts/Prompt.py +52 -2
- edsl/questions/AnswerValidatorMixin.py +23 -26
- edsl/questions/QuestionBase.py +330 -249
- edsl/questions/QuestionBaseGenMixin.py +133 -0
- edsl/questions/QuestionBasePromptsMixin.py +266 -0
- edsl/questions/QuestionBudget.py +99 -42
- edsl/questions/QuestionCheckBox.py +227 -36
- edsl/questions/QuestionExtract.py +98 -28
- edsl/questions/QuestionFreeText.py +47 -31
- edsl/questions/QuestionFunctional.py +7 -0
- edsl/questions/QuestionList.py +141 -23
- edsl/questions/QuestionMultipleChoice.py +159 -66
- edsl/questions/QuestionNumerical.py +88 -47
- edsl/questions/QuestionRank.py +182 -25
- edsl/questions/Quick.py +41 -0
- edsl/questions/RegisterQuestionsMeta.py +31 -12
- edsl/questions/ResponseValidatorABC.py +170 -0
- edsl/questions/__init__.py +3 -4
- edsl/questions/decorators.py +21 -0
- edsl/questions/derived/QuestionLikertFive.py +10 -5
- edsl/questions/derived/QuestionLinearScale.py +15 -2
- edsl/questions/derived/QuestionTopK.py +10 -1
- edsl/questions/derived/QuestionYesNo.py +24 -3
- edsl/questions/descriptors.py +43 -7
- edsl/questions/prompt_templates/question_budget.jinja +13 -0
- edsl/questions/prompt_templates/question_checkbox.jinja +32 -0
- edsl/questions/prompt_templates/question_extract.jinja +11 -0
- edsl/questions/prompt_templates/question_free_text.jinja +3 -0
- edsl/questions/prompt_templates/question_linear_scale.jinja +11 -0
- edsl/questions/prompt_templates/question_list.jinja +17 -0
- edsl/questions/prompt_templates/question_multiple_choice.jinja +33 -0
- edsl/questions/prompt_templates/question_numerical.jinja +37 -0
- edsl/questions/question_registry.py +6 -2
- edsl/questions/templates/__init__.py +0 -0
- edsl/questions/templates/budget/__init__.py +0 -0
- edsl/questions/templates/budget/answering_instructions.jinja +7 -0
- edsl/questions/templates/budget/question_presentation.jinja +7 -0
- edsl/questions/templates/checkbox/__init__.py +0 -0
- edsl/questions/templates/checkbox/answering_instructions.jinja +10 -0
- edsl/questions/templates/checkbox/question_presentation.jinja +22 -0
- edsl/questions/templates/extract/__init__.py +0 -0
- edsl/questions/templates/extract/answering_instructions.jinja +7 -0
- edsl/questions/templates/extract/question_presentation.jinja +1 -0
- edsl/questions/templates/free_text/__init__.py +0 -0
- edsl/questions/templates/free_text/answering_instructions.jinja +0 -0
- edsl/questions/templates/free_text/question_presentation.jinja +1 -0
- edsl/questions/templates/likert_five/__init__.py +0 -0
- edsl/questions/templates/likert_five/answering_instructions.jinja +10 -0
- edsl/questions/templates/likert_five/question_presentation.jinja +12 -0
- edsl/questions/templates/linear_scale/__init__.py +0 -0
- edsl/questions/templates/linear_scale/answering_instructions.jinja +5 -0
- edsl/questions/templates/linear_scale/question_presentation.jinja +5 -0
- edsl/questions/templates/list/__init__.py +0 -0
- edsl/questions/templates/list/answering_instructions.jinja +4 -0
- edsl/questions/templates/list/question_presentation.jinja +5 -0
- edsl/questions/templates/multiple_choice/__init__.py +0 -0
- edsl/questions/templates/multiple_choice/answering_instructions.jinja +9 -0
- edsl/questions/templates/multiple_choice/html.jinja +0 -0
- edsl/questions/templates/multiple_choice/question_presentation.jinja +12 -0
- edsl/questions/templates/numerical/__init__.py +0 -0
- edsl/questions/templates/numerical/answering_instructions.jinja +8 -0
- edsl/questions/templates/numerical/question_presentation.jinja +7 -0
- edsl/questions/templates/rank/__init__.py +0 -0
- edsl/questions/templates/rank/answering_instructions.jinja +11 -0
- edsl/questions/templates/rank/question_presentation.jinja +15 -0
- edsl/questions/templates/top_k/__init__.py +0 -0
- edsl/questions/templates/top_k/answering_instructions.jinja +8 -0
- edsl/questions/templates/top_k/question_presentation.jinja +22 -0
- edsl/questions/templates/yes_no/__init__.py +0 -0
- edsl/questions/templates/yes_no/answering_instructions.jinja +6 -0
- edsl/questions/templates/yes_no/question_presentation.jinja +12 -0
- edsl/results/Dataset.py +20 -0
- edsl/results/DatasetExportMixin.py +58 -30
- edsl/results/DatasetTree.py +145 -0
- edsl/results/Result.py +32 -5
- edsl/results/Results.py +135 -46
- edsl/results/ResultsDBMixin.py +3 -3
- edsl/results/Selector.py +118 -0
- edsl/results/tree_explore.py +115 -0
- edsl/scenarios/FileStore.py +71 -10
- edsl/scenarios/Scenario.py +109 -24
- edsl/scenarios/ScenarioImageMixin.py +2 -2
- edsl/scenarios/ScenarioList.py +546 -21
- edsl/scenarios/ScenarioListExportMixin.py +24 -4
- edsl/scenarios/ScenarioListPdfMixin.py +153 -4
- edsl/study/SnapShot.py +8 -1
- edsl/study/Study.py +32 -0
- edsl/surveys/Rule.py +15 -3
- edsl/surveys/RuleCollection.py +21 -5
- edsl/surveys/Survey.py +707 -298
- edsl/surveys/SurveyExportMixin.py +71 -9
- edsl/surveys/SurveyFlowVisualizationMixin.py +2 -1
- edsl/surveys/SurveyQualtricsImport.py +284 -0
- edsl/surveys/instructions/ChangeInstruction.py +47 -0
- edsl/surveys/instructions/Instruction.py +34 -0
- edsl/surveys/instructions/InstructionCollection.py +77 -0
- edsl/surveys/instructions/__init__.py +0 -0
- edsl/templates/error_reporting/base.html +24 -0
- edsl/templates/error_reporting/exceptions_by_model.html +35 -0
- edsl/templates/error_reporting/exceptions_by_question_name.html +17 -0
- edsl/templates/error_reporting/exceptions_by_type.html +17 -0
- edsl/templates/error_reporting/interview_details.html +116 -0
- edsl/templates/error_reporting/interviews.html +10 -0
- edsl/templates/error_reporting/overview.html +5 -0
- edsl/templates/error_reporting/performance_plot.html +2 -0
- edsl/templates/error_reporting/report.css +74 -0
- edsl/templates/error_reporting/report.html +118 -0
- edsl/templates/error_reporting/report.js +25 -0
- edsl/utilities/utilities.py +40 -1
- {edsl-0.1.31.dev4.dist-info → edsl-0.1.33.dist-info}/METADATA +8 -2
- edsl-0.1.33.dist-info/RECORD +295 -0
- edsl/jobs/interviews/InterviewTaskBuildingMixin.py +0 -271
- edsl/jobs/interviews/retry_management.py +0 -37
- edsl/jobs/runners/JobsRunnerStatusMixin.py +0 -303
- edsl/utilities/gcp_bucket/simple_example.py +0 -9
- edsl-0.1.31.dev4.dist-info/RECORD +0 -204
- {edsl-0.1.31.dev4.dist-info → edsl-0.1.33.dist-info}/LICENSE +0 -0
- {edsl-0.1.31.dev4.dist-info → edsl-0.1.33.dist-info}/WHEEL +0 -0
@@ -1,303 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
from typing import List, DefaultDict
|
3
|
-
import asyncio
|
4
|
-
from typing import Type
|
5
|
-
from collections import defaultdict
|
6
|
-
|
7
|
-
from typing import Literal, List, Type, DefaultDict
|
8
|
-
from collections import UserDict, defaultdict
|
9
|
-
|
10
|
-
from edsl.jobs.interviews.InterviewStatusDictionary import InterviewStatusDictionary
|
11
|
-
from edsl.jobs.tokens.InterviewTokenUsage import InterviewTokenUsage
|
12
|
-
from edsl.jobs.tokens.TokenUsage import TokenUsage
|
13
|
-
from edsl.enums import get_token_pricing
|
14
|
-
from edsl.jobs.tasks.task_status_enum import TaskStatus
|
15
|
-
|
16
|
-
InterviewTokenUsageMapping = DefaultDict[str, InterviewTokenUsage]
|
17
|
-
|
18
|
-
from edsl.jobs.interviews.InterviewStatistic import InterviewStatistic
|
19
|
-
from edsl.jobs.interviews.InterviewStatisticsCollection import (
|
20
|
-
InterviewStatisticsCollection,
|
21
|
-
)
|
22
|
-
from edsl.jobs.tokens.InterviewTokenUsage import InterviewTokenUsage
|
23
|
-
|
24
|
-
|
25
|
-
#return {"cache_status": token_usage_type, "details": details, "cost": f"${token_usage.cost(prices):.5f}"}
|
26
|
-
|
27
|
-
from dataclasses import dataclass, asdict
|
28
|
-
|
29
|
-
from rich.text import Text
|
30
|
-
from rich.box import SIMPLE
|
31
|
-
from rich.table import Table
|
32
|
-
|
33
|
-
@dataclass
|
34
|
-
class ModelInfo:
|
35
|
-
model_name: str
|
36
|
-
TPM_limit_k: float
|
37
|
-
RPM_limit_k: float
|
38
|
-
num_tasks_waiting: int
|
39
|
-
token_usage_info: dict
|
40
|
-
|
41
|
-
|
42
|
-
@dataclass
|
43
|
-
class ModelTokenUsageStats:
|
44
|
-
token_usage_type: str
|
45
|
-
details: List[dict]
|
46
|
-
cost: str
|
47
|
-
|
48
|
-
class Stats:
|
49
|
-
|
50
|
-
def elapsed_time(self):
|
51
|
-
InterviewStatistic(
|
52
|
-
"elapsed_time", value=elapsed_time, digits=1, units="sec."
|
53
|
-
)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
class JobsRunnerStatusMixin:
|
59
|
-
|
60
|
-
# @staticmethod
|
61
|
-
# def status_dict(interviews: List[Type["Interview"]]) -> List[Type[InterviewStatusDictionary]]:
|
62
|
-
# """
|
63
|
-
# >>> from edsl.jobs.interviews.Interview import Interview
|
64
|
-
# >>> interviews = [Interview.example()]
|
65
|
-
# >>> JobsRunnerStatusMixin().status_dict(interviews)
|
66
|
-
# [InterviewStatusDictionary({<TaskStatus.NOT_STARTED: 1>: 0, <TaskStatus.WAITING_FOR_DEPENDENCIES: 2>: 0, <TaskStatus.CANCELLED: 3>: 0, <TaskStatus.PARENT_FAILED: 4>: 0, <TaskStatus.WAITING_FOR_REQUEST_CAPACITY: 5>: 0, <TaskStatus.WAITING_FOR_TOKEN_CAPACITY: 6>: 0, <TaskStatus.API_CALL_IN_PROGRESS: 7>: 0, <TaskStatus.SUCCESS: 8>: 0, <TaskStatus.FAILED: 9>: 0, 'number_from_cache': 0})]
|
67
|
-
# """
|
68
|
-
# return [interview.interview_status for interview in interviews]
|
69
|
-
|
70
|
-
def _compute_statistic(stat_name: str, completed_tasks, elapsed_time, interviews):
|
71
|
-
|
72
|
-
stat_definitions = {
|
73
|
-
"elapsed_time": lambda: InterviewStatistic(
|
74
|
-
"elapsed_time", value=elapsed_time, digits=1, units="sec."
|
75
|
-
),
|
76
|
-
"total_interviews_requested": lambda: InterviewStatistic(
|
77
|
-
"total_interviews_requested", value=len(interviews), units=""
|
78
|
-
),
|
79
|
-
"completed_interviews": lambda: InterviewStatistic(
|
80
|
-
"completed_interviews", value=len(completed_tasks), units=""
|
81
|
-
),
|
82
|
-
"percent_complete": lambda: InterviewStatistic(
|
83
|
-
"percent_complete",
|
84
|
-
value=(
|
85
|
-
len(completed_tasks) / len(interviews) * 100
|
86
|
-
if len(interviews) > 0
|
87
|
-
else "NA"
|
88
|
-
),
|
89
|
-
digits=0,
|
90
|
-
units="%",
|
91
|
-
),
|
92
|
-
"average_time_per_interview": lambda: InterviewStatistic(
|
93
|
-
"average_time_per_interview",
|
94
|
-
value=elapsed_time / len(completed_tasks) if completed_tasks else "NA",
|
95
|
-
digits=1,
|
96
|
-
units="sec.",
|
97
|
-
),
|
98
|
-
"task_remaining": lambda: InterviewStatistic(
|
99
|
-
"task_remaining", value=len(interviews) - len(completed_tasks), units=""
|
100
|
-
),
|
101
|
-
"estimated_time_remaining": lambda: InterviewStatistic(
|
102
|
-
"estimated_time_remaining",
|
103
|
-
value=(
|
104
|
-
(len(interviews) - len(completed_tasks)) * (elapsed_time / len(completed_tasks))
|
105
|
-
if len(completed_tasks) > 0
|
106
|
-
else "NA"
|
107
|
-
),
|
108
|
-
digits=1,
|
109
|
-
units="sec.",
|
110
|
-
)
|
111
|
-
}
|
112
|
-
if stat_name not in stat_definitions:
|
113
|
-
raise ValueError(f"Invalid stat_name: {stat_name}. The valid stat_names are: {list(stat_definitions.keys())}")
|
114
|
-
return stat_definitions[stat_name]()
|
115
|
-
|
116
|
-
|
117
|
-
@staticmethod
|
118
|
-
def _job_level_info(completed_tasks: List[Type[asyncio.Task]],
|
119
|
-
elapsed_time: float,
|
120
|
-
interviews: List[Type["Interview"]]
|
121
|
-
) -> InterviewStatisticsCollection:
|
122
|
-
|
123
|
-
interview_statistics = InterviewStatisticsCollection()
|
124
|
-
|
125
|
-
default_statistics = ["elapsed_time", "total_interviews_requested", "completed_interviews", "percent_complete", "average_time_per_interview", "task_remaining", "estimated_time_remaining"]
|
126
|
-
for stat_name in default_statistics:
|
127
|
-
interview_statistics.add_stat(JobsRunnerStatusMixin._compute_statistic(stat_name, completed_tasks, elapsed_time, interviews))
|
128
|
-
|
129
|
-
return interview_statistics
|
130
|
-
|
131
|
-
@staticmethod
|
132
|
-
def _get_model_queues_info(interviews):
|
133
|
-
|
134
|
-
models_to_tokens = defaultdict(InterviewTokenUsage)
|
135
|
-
model_to_status = defaultdict(InterviewStatusDictionary)
|
136
|
-
waiting_dict = defaultdict(int)
|
137
|
-
|
138
|
-
for interview in interviews:
|
139
|
-
models_to_tokens[interview.model] += interview.token_usage
|
140
|
-
model_to_status[interview.model] += interview.interview_status
|
141
|
-
waiting_dict[interview.model] += interview.interview_status.waiting
|
142
|
-
|
143
|
-
for model, num_waiting in waiting_dict.items():
|
144
|
-
yield JobsRunnerStatusMixin._get_model_info(model, num_waiting, models_to_tokens)
|
145
|
-
|
146
|
-
@staticmethod
|
147
|
-
def generate_status_summary(
|
148
|
-
completed_tasks: List[Type[asyncio.Task]],
|
149
|
-
elapsed_time: float,
|
150
|
-
interviews: List[Type["Interview"]],
|
151
|
-
include_model_queues = False
|
152
|
-
) -> InterviewStatisticsCollection:
|
153
|
-
"""Generate a summary of the status of the job runner.
|
154
|
-
|
155
|
-
:param completed_tasks: list of completed tasks
|
156
|
-
:param elapsed_time: time elapsed since the start of the job
|
157
|
-
:param interviews: list of interviews to be conducted
|
158
|
-
|
159
|
-
>>> from edsl.jobs.interviews.Interview import Interview
|
160
|
-
>>> interviews = [Interview.example()]
|
161
|
-
>>> completed_tasks = []
|
162
|
-
>>> elapsed_time = 0
|
163
|
-
>>> JobsRunnerStatusMixin().generate_status_summary(completed_tasks, elapsed_time, interviews)
|
164
|
-
{'Elapsed time': '0.0 sec.', 'Total interviews requested': '1 ', 'Completed interviews': '0 ', 'Percent complete': '0 %', 'Average time per interview': 'NA', 'Task remaining': '1 ', 'Estimated time remaining': 'NA'}
|
165
|
-
"""
|
166
|
-
|
167
|
-
interview_status_summary: InterviewStatisticsCollection = JobsRunnerStatusMixin._job_level_info(
|
168
|
-
completed_tasks=completed_tasks,
|
169
|
-
elapsed_time=elapsed_time,
|
170
|
-
interviews=interviews
|
171
|
-
)
|
172
|
-
if include_model_queues:
|
173
|
-
interview_status_summary.model_queues = list(JobsRunnerStatusMixin._get_model_queues_info(interviews))
|
174
|
-
else:
|
175
|
-
interview_status_summary.model_queues = None
|
176
|
-
|
177
|
-
return interview_status_summary
|
178
|
-
|
179
|
-
@staticmethod
|
180
|
-
def _get_model_info(
|
181
|
-
model: str,
|
182
|
-
num_waiting: int,
|
183
|
-
models_to_tokens: InterviewTokenUsageMapping,
|
184
|
-
) -> dict:
|
185
|
-
"""Get the status of a model.
|
186
|
-
|
187
|
-
:param model: the model name
|
188
|
-
:param num_waiting: the number of tasks waiting for capacity
|
189
|
-
:param models_to_tokens: a mapping of models to token usage
|
190
|
-
|
191
|
-
>>> from edsl.jobs.interviews.Interview import Interview
|
192
|
-
>>> interviews = [Interview.example()]
|
193
|
-
>>> models_to_tokens = defaultdict(InterviewTokenUsage)
|
194
|
-
>>> model = interviews[0].model
|
195
|
-
>>> num_waiting = 0
|
196
|
-
>>> JobsRunnerStatusMixin()._get_model_info(model, num_waiting, models_to_tokens)
|
197
|
-
ModelInfo(model_name='gpt-4-1106-preview', TPM_limit_k=480.0, RPM_limit_k=4.0, num_tasks_waiting=0, token_usage_info=[ModelTokenUsageStats(token_usage_type='new_token_usage', details=[{'type': 'prompt_tokens', 'tokens': 0}, {'type': 'completion_tokens', 'tokens': 0}], cost='$0.00000'), ModelTokenUsageStats(token_usage_type='cached_token_usage', details=[{'type': 'prompt_tokens', 'tokens': 0}, {'type': 'completion_tokens', 'tokens': 0}], cost='$0.00000')])
|
198
|
-
"""
|
199
|
-
|
200
|
-
## TODO: This should probably be a coop method
|
201
|
-
prices = get_token_pricing(model.model)
|
202
|
-
|
203
|
-
token_usage_info = []
|
204
|
-
for token_usage_type in ["new_token_usage", "cached_token_usage"]:
|
205
|
-
token_usage_info.append(JobsRunnerStatusMixin._get_token_usage_info(token_usage_type, models_to_tokens, model, prices))
|
206
|
-
|
207
|
-
return ModelInfo(**{
|
208
|
-
"model_name": model.model,
|
209
|
-
"TPM_limit_k": model.TPM / 1000,
|
210
|
-
"RPM_limit_k": model.RPM / 1000,
|
211
|
-
"num_tasks_waiting": num_waiting,
|
212
|
-
"token_usage_info": token_usage_info,
|
213
|
-
})
|
214
|
-
|
215
|
-
@staticmethod
|
216
|
-
def _get_token_usage_info(
|
217
|
-
token_usage_type: Literal["new_token_usage", "cached_token_usage"],
|
218
|
-
models_to_tokens: InterviewTokenUsageMapping,
|
219
|
-
model: str,
|
220
|
-
prices: "TokenPricing",
|
221
|
-
) -> ModelTokenUsageStats:
|
222
|
-
"""Get the token usage info for a model.
|
223
|
-
|
224
|
-
>>> from edsl.jobs.interviews.Interview import Interview
|
225
|
-
>>> interviews = [Interview.example()]
|
226
|
-
>>> models_to_tokens = defaultdict(InterviewTokenUsage)
|
227
|
-
>>> model = interviews[0].model
|
228
|
-
>>> prices = get_token_pricing(model.model)
|
229
|
-
>>> cache_status = "new_token_usage"
|
230
|
-
>>> JobsRunnerStatusMixin()._get_token_usage_info(cache_status, models_to_tokens, model, prices)
|
231
|
-
ModelTokenUsageStats(token_usage_type='new_token_usage', details=[{'type': 'prompt_tokens', 'tokens': 0}, {'type': 'completion_tokens', 'tokens': 0}], cost='$0.00000')
|
232
|
-
|
233
|
-
"""
|
234
|
-
all_token_usage: InterviewTokenUsage = models_to_tokens[model]
|
235
|
-
token_usage: TokenUsage = getattr(all_token_usage, token_usage_type)
|
236
|
-
|
237
|
-
details = [{"type": token_type, "tokens": getattr(token_usage, token_type)}
|
238
|
-
for token_type in ["prompt_tokens", "completion_tokens"]]
|
239
|
-
|
240
|
-
return ModelTokenUsageStats(token_usage_type = token_usage_type, details = details, cost = f"${token_usage.cost(prices):.5f}")
|
241
|
-
|
242
|
-
@staticmethod
|
243
|
-
def _add_statistics_to_table(table, status_summary):
|
244
|
-
table.add_column("Statistic", style="dim", no_wrap=True, width=50)
|
245
|
-
table.add_column("Value", width=10)
|
246
|
-
|
247
|
-
for key, value in status_summary.items():
|
248
|
-
if key != "model_queues":
|
249
|
-
table.add_row(key, value)
|
250
|
-
|
251
|
-
@staticmethod
|
252
|
-
def display_status_table(status_summary: InterviewStatisticsCollection) -> 'Table':
|
253
|
-
|
254
|
-
|
255
|
-
table = Table(
|
256
|
-
title="Job Status",
|
257
|
-
show_header=True,
|
258
|
-
header_style="bold magenta",
|
259
|
-
box=SIMPLE,
|
260
|
-
)
|
261
|
-
|
262
|
-
### Job-level statistics
|
263
|
-
JobsRunnerStatusMixin._add_statistics_to_table(table, status_summary)
|
264
|
-
|
265
|
-
## Model-level statistics
|
266
|
-
spacing = " "
|
267
|
-
|
268
|
-
if status_summary.model_queues is not None:
|
269
|
-
table.add_row(Text("Model Queues", style="bold red"), "")
|
270
|
-
for model_info in status_summary.model_queues:
|
271
|
-
|
272
|
-
model_name = model_info.model_name
|
273
|
-
tpm = f"TPM (k)={model_info.TPM_limit_k}"
|
274
|
-
rpm = f"RPM (k)= {model_info.RPM_limit_k}"
|
275
|
-
pretty_model_name = model_name + ";" + tpm + ";" + rpm
|
276
|
-
table.add_row(Text(pretty_model_name, style="blue"), "")
|
277
|
-
table.add_row("Number question tasks waiting for capacity", str(model_info.num_tasks_waiting))
|
278
|
-
# Token usage and cost info
|
279
|
-
for token_usage_info in model_info.token_usage_info:
|
280
|
-
token_usage_type = token_usage_info.token_usage_type
|
281
|
-
table.add_row(
|
282
|
-
Text(spacing + token_usage_type.replace("_", " "), style="bold"), ""
|
283
|
-
)
|
284
|
-
for detail in token_usage_info.details:
|
285
|
-
token_type = detail["type"]
|
286
|
-
tokens = detail["tokens"]
|
287
|
-
table.add_row(spacing + f"{token_type}", f"{tokens:,}")
|
288
|
-
#table.add_row(spacing + "cost", cache_info["cost"])
|
289
|
-
|
290
|
-
return table
|
291
|
-
|
292
|
-
def status_table(self, completed_tasks: List[asyncio.Task], elapsed_time: float):
|
293
|
-
summary_data = JobsRunnerStatusMixin.generate_status_summary(
|
294
|
-
completed_tasks=completed_tasks,
|
295
|
-
elapsed_time=elapsed_time,
|
296
|
-
interviews=self.total_interviews,
|
297
|
-
)
|
298
|
-
return self.display_status_table(summary_data)
|
299
|
-
|
300
|
-
if __name__ == "__main__":
|
301
|
-
import doctest
|
302
|
-
|
303
|
-
doctest.testmod(optionflags=doctest.ELLIPSIS)
|
@@ -1,204 +0,0 @@
|
|
1
|
-
edsl/Base.py,sha256=ttNxUotSd9LSEJl2w6LdMtT78d0nMQvYDJ0q4JkqBfg,8945
|
2
|
-
edsl/BaseDiff.py,sha256=RoVEh52UJs22yMa7k7jv8se01G62jJNWnBzaZngo-Ug,8260
|
3
|
-
edsl/__init__.py,sha256=E6PkWI_owu8AUc4uJs2XWDVozqSbcRWzsIqf8_Kskho,1631
|
4
|
-
edsl/__version__.py,sha256=Fv7dR2lKexgIV_9qy1nx0-jCMCGoz6ycHt2PDdog7iY,28
|
5
|
-
edsl/agents/Agent.py,sha256=qNJsQkN6HuTKqJrQbuUEgRX3Wo7Dwukle0oNWPi0UIE,27191
|
6
|
-
edsl/agents/AgentList.py,sha256=_MsdeOEgaANAceLIXwuLC22mwlBn0ruGX4GEqz8_SSY,9467
|
7
|
-
edsl/agents/Invigilator.py,sha256=1LPfSV61pK2TpNsN72nyLz7BmLBu87Nl1cYNRdgXpP0,10947
|
8
|
-
edsl/agents/InvigilatorBase.py,sha256=ncha1HF2V1Dz4f50Gekg6AzUXCD2Af82ztfSJZbgOHY,7469
|
9
|
-
edsl/agents/PromptConstructionMixin.py,sha256=uqk5SfGbvI191eda44bUtYHL7N0xEAxx64ga59SB610,16576
|
10
|
-
edsl/agents/__init__.py,sha256=a3H1lxDwu9HR8fwh79C5DgxPSFv_bE2rzQ6y1D8Ba5c,80
|
11
|
-
edsl/agents/descriptors.py,sha256=m8ND3-2-JbgNX1HGakBNLIeemwsgYa1mQxYO9GW33hw,2934
|
12
|
-
edsl/base/Base.py,sha256=DShsfI6A2ojg42muPFpVtUgTX33pnqT5vtN0SRlr-9Q,8866
|
13
|
-
edsl/config.py,sha256=EE4NFLtBr5wbUdf6iOGFZQ1so26gzjVHUcu_IfDqjqw,5770
|
14
|
-
edsl/conjure/AgentConstructionMixin.py,sha256=qLLYJH02HotVwBUYzaHs4QW0t5nsC3NX15qxQLzEwLI,5702
|
15
|
-
edsl/conjure/Conjure.py,sha256=KBmF3d6EjzTI5f-j_cZBowxWQx7jZqezHgfPMkh-h8M,1884
|
16
|
-
edsl/conjure/InputData.py,sha256=RdFgkzzayddSTd6vcwBB8LC796YBj94pciwrQx9nBtg,22003
|
17
|
-
edsl/conjure/InputDataCSV.py,sha256=m4hHSQogxt7LNcGNxcGRkrbdGy8pIQu5KvXhIEt9i6k,1684
|
18
|
-
edsl/conjure/InputDataMixinQuestionStats.py,sha256=Jav5pqYCLSQ1pAbGV8O9VCBu0vL8Q6pteSEhRKrONuw,6256
|
19
|
-
edsl/conjure/InputDataPyRead.py,sha256=phGmzVi06jdbcxgngAp_lEawGkJr5dAC2B4ho5IrAy4,3064
|
20
|
-
edsl/conjure/InputDataSPSS.py,sha256=lv7NK8lpUfjsWh8h9MpqQrCjJX6Oyg3tIOrXcQYcS_4,223
|
21
|
-
edsl/conjure/InputDataStata.py,sha256=WbA7oUGHgHJgugKjakXzpFfzWxTI4bXGGSZLxM1-tEM,224
|
22
|
-
edsl/conjure/QuestionOptionMixin.py,sha256=RSLZ7AmA65MfwyxKKjqprR9FdkLP6MsCcmTbJoqu-MM,2870
|
23
|
-
edsl/conjure/QuestionTypeMixin.py,sha256=L2vU207aeezlI1OuJ4I4SdtFCWBZzE-mBk7VwnTghO8,892
|
24
|
-
edsl/conjure/RawQuestion.py,sha256=lo8k1aln4RfnfeS6OukzwC7P_cRe2LVZxcL6uwmim6A,2116
|
25
|
-
edsl/conjure/SurveyResponses.py,sha256=fdJNFasSXVf7S5KCsYE9WB6w17q7VRylzw0aD5zGO_M,191
|
26
|
-
edsl/conjure/__init__.py,sha256=1lPYFjV73GzYYSXiTyxopM4nKcXVHumEEo0fe06DbMo,535
|
27
|
-
edsl/conjure/examples/placeholder.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
edsl/conjure/naming_utilities.py,sha256=8uoGaCPZQKLwz2HudtsFSovivTGumQrFYxXxck5WUZQ,4964
|
29
|
-
edsl/conjure/utilities.py,sha256=yRdOJx9KIpWXMx41Bbfysx7Zd4v2ROwca5L4T1rmtQM,5539
|
30
|
-
edsl/conversation/Conversation.py,sha256=NdWH62XpcF6hoaG0ScMho_c3TO7PfBnbdlppUN-j07k,7627
|
31
|
-
edsl/conversation/car_buying.py,sha256=Quh2Q8O9YoCyTKJUy3li376QFIOcL1gX0y89w3wlSl4,1950
|
32
|
-
edsl/conversation/mug_negotiation.py,sha256=mjvAqErD4AjN3G2za2c-X-3axOShW-zAJUeiJqTxVPA,2616
|
33
|
-
edsl/conversation/next_speaker_utilities.py,sha256=bqr5JglCd6bdLc9IZ5zGOAsmN2F4ERiubSMYvZIG7qk,3629
|
34
|
-
edsl/coop/__init__.py,sha256=4iZCwJSzJVyjBYk8ggGxY2kZjq9dXVT1jhyPDNyew4I,115
|
35
|
-
edsl/coop/coop.py,sha256=p2JvhzUpjXEaiFWafCpkfsPIsH2BqV9ePAJCKsKfFOo,27138
|
36
|
-
edsl/coop/utils.py,sha256=UZwljKYW_Yjw7RYcjOg3SW7fn1pyHQfJ1fM48TBNoss,3601
|
37
|
-
edsl/data/Cache.py,sha256=aR9ydTFvUWiRJZd2G7SLFFtZaS2At8ArbQ1SAhYZBDs,15629
|
38
|
-
edsl/data/CacheEntry.py,sha256=_5UiFaJQu_U-Z1_lEPt-h6Gaidp2Eunk02wOd3Ni3MQ,7252
|
39
|
-
edsl/data/CacheHandler.py,sha256=DTr8nJnbl_SidhsDetqbshu1DV-njPFiPPosUWTIBok,4789
|
40
|
-
edsl/data/SQLiteDict.py,sha256=V5Nfnxctgh4Iblqcw1KmbnkjtfmWrrombROSQ3mvg6A,8979
|
41
|
-
edsl/data/__init__.py,sha256=KBNGGEuGHq--D-TlpAQmvv_If906dJc1Gsy028zOx78,170
|
42
|
-
edsl/data/orm.py,sha256=Jz6rvw5SrlxwysTL0QI9r68EflKxeEBmf6j6himHDS8,238
|
43
|
-
edsl/data_transfer_models.py,sha256=ORcI-g_oUE8EofLvHQKnWC5ar-IgZiXGY2bIpTGAZyQ,1157
|
44
|
-
edsl/enums.py,sha256=fxb0obXB-71alkx7IPosXLMAv32Ln0-ljL30dhwtK9M,4946
|
45
|
-
edsl/exceptions/__init__.py,sha256=HVg-U-rJ0fRoG9Rws6gnK5S9B68SkPWDPsoD6KpMZ-A,1370
|
46
|
-
edsl/exceptions/agents.py,sha256=3SORFwFbMGrF6-vAL2GrKEVdPcXo7md_k2oYufnVXHA,673
|
47
|
-
edsl/exceptions/configuration.py,sha256=qH2sInNTndKlCLAaNgaXHyRFdKQHL7-dElB_j8wz9g4,351
|
48
|
-
edsl/exceptions/coop.py,sha256=xDr7k_Tir6L5AxO6GMmoFyUjZ3DIenPQflpUkaTqJl0,38
|
49
|
-
edsl/exceptions/data.py,sha256=K24CjgwFiMWxrF1Z2dF6F7Vfrge_y9kMK_wsYYSaroU,209
|
50
|
-
edsl/exceptions/general.py,sha256=ksuqTmy-7kP9H34Cu5fSKC3Q2cZIY4qJ7J9JZGdJLCE,1011
|
51
|
-
edsl/exceptions/jobs.py,sha256=sSUATmzBIN1oINWuwPExxPqIWmfCo0XYj_yR4dJzVjo,803
|
52
|
-
edsl/exceptions/language_models.py,sha256=KDChmr2rVGa1lj57i9-QGSLYTOeguRYyF2z8FyXEplA,1017
|
53
|
-
edsl/exceptions/prompts.py,sha256=vD_reI-RVKWYHYozenEmhmB7Rb1sIiXghgNUtbVGBUo,247
|
54
|
-
edsl/exceptions/questions.py,sha256=9z6RI7HRH-UMrnIlt28VTj9deCSbD1Frmpqi0H6YtF0,534
|
55
|
-
edsl/exceptions/results.py,sha256=cn6Zb86Y648ulN3RYXb52HGv1NT3ykBfE6g2Xu8TeIw,325
|
56
|
-
edsl/exceptions/surveys.py,sha256=lADtr-tvPmUYSfRy3TdkTV5SzZfShlMgCzm-ZGYRlGk,557
|
57
|
-
edsl/inference_services/AnthropicService.py,sha256=tjYRJRIvQ7Z6uCYdqxm5ZlVjZdVZCnHtQ6QGHT59PXs,2822
|
58
|
-
edsl/inference_services/DeepInfraService.py,sha256=swZYN1mSjhu-raXTp3PdkeajcAov01b4W0XIYf27rDk,514
|
59
|
-
edsl/inference_services/GoogleService.py,sha256=IwSwXr7khvHjpDzgiW5PRVKMhI2wQ9D1_H1MRnHjefU,2732
|
60
|
-
edsl/inference_services/GroqService.py,sha256=Bs3f5VyTiDl6ujBZqYMQIM6LMwyYLppuphIGl-1KT6w,436
|
61
|
-
edsl/inference_services/InferenceServiceABC.py,sha256=H6jW2gDKTLC3xgmqiSBdX4pGY1oauEO8VqGZoB3qvnQ,1790
|
62
|
-
edsl/inference_services/InferenceServicesCollection.py,sha256=7Q04aiJUWJx3zzjSY1uH7MkhrJi41RshU3Zy-6rM6kI,2596
|
63
|
-
edsl/inference_services/OpenAIService.py,sha256=h8m_GKZxrNdHA0B4x0dcOu15ZoOc6Vp-N2gmzWMIY9s,7529
|
64
|
-
edsl/inference_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
-
edsl/inference_services/models_available_cache.py,sha256=ZT2pBGxJqTgwynthu-SqBjv8zl7ql44q3gA6xy7kqSU,2338
|
66
|
-
edsl/inference_services/rate_limits_cache.py,sha256=HYslviz7mxF9U4CUTPAkoyBsiXjSju-YCp4HHir6e34,1398
|
67
|
-
edsl/inference_services/registry.py,sha256=RzmOjDjq7361v2aUCeR8MIJw8qxWqKs_697ZnQrbbmM,556
|
68
|
-
edsl/inference_services/write_available.py,sha256=NNwhATlaMp8IYY635MSx-oYxt5X15acjAfaqYCo_I1Y,285
|
69
|
-
edsl/jobs/Answers.py,sha256=z4TADN-iHIrbMtI1jVyiaetv0OkTv768dFBpREIQC6c,1799
|
70
|
-
edsl/jobs/Jobs.py,sha256=jSi4lbSDlJGaCHCPcbkwxepFlz008vynPTZVRABdBWM,30777
|
71
|
-
edsl/jobs/__init__.py,sha256=aKuAyd_GoalGj-k7djOoVwEbFUE2XLPlikXaA1_8yAg,32
|
72
|
-
edsl/jobs/buckets/BucketCollection.py,sha256=LA8DBVwMdeTFCbSDI0S2cDzfi_Qo6kRizwrG64tE8S4,1844
|
73
|
-
edsl/jobs/buckets/ModelBuckets.py,sha256=hxw_tzc0V42CiB7mh5jIxlgwDVJ-zFZhlLtKrHEg8ho,2419
|
74
|
-
edsl/jobs/buckets/TokenBucket.py,sha256=2K9MV-8QRODK83jFNuD55kfEKhWGqk9ipC4IkMCh2gg,6008
|
75
|
-
edsl/jobs/interviews/Interview.py,sha256=gmSYBXQbFpE8X6dNaAYkLaWu0Zb_gJZsab5ydRD2JBg,11388
|
76
|
-
edsl/jobs/interviews/InterviewStatistic.py,sha256=hY5d2EkIJ96NilPpZAvZZzZoxLXM7ss3xx5MIcKtTPs,1856
|
77
|
-
edsl/jobs/interviews/InterviewStatisticsCollection.py,sha256=_ZZ0fnZBQiIywP9Q_wWjpWhlfcPe2cn32GKut10t5RI,788
|
78
|
-
edsl/jobs/interviews/InterviewStatusDictionary.py,sha256=MSyys4hOWe1d8gfsUvAPbcKrs8YiPnz8jpufBSJL7SU,2485
|
79
|
-
edsl/jobs/interviews/InterviewStatusLog.py,sha256=6u0F8gf5tha39VQL-IK_QPkCsQAYVOx_IesX7TDDX_A,3252
|
80
|
-
edsl/jobs/interviews/InterviewStatusMixin.py,sha256=VV0Pel-crUsLoGpTifeIIkXsLGj0bfuO--UtpRnH-dU,1251
|
81
|
-
edsl/jobs/interviews/InterviewTaskBuildingMixin.py,sha256=qa3WzogBOSf7HmB-o9dzUrG4GSETcPTM0e4JHHtUkTM,11168
|
82
|
-
edsl/jobs/interviews/ReportErrors.py,sha256=RSzDU2rWwtjfztj7sqaMab0quCiY-X2bG3AEOxhTim8,1745
|
83
|
-
edsl/jobs/interviews/interview_exception_tracking.py,sha256=tIcX92udnkE5fcM5_WXjRF9xgTq2P0uaDXxZf3NQGG0,3271
|
84
|
-
edsl/jobs/interviews/interview_status_enum.py,sha256=KJ-1yLAHdX-p8TiFnM0M3v1tnBwkq4aMCuBX6-ytrI8,229
|
85
|
-
edsl/jobs/interviews/retry_management.py,sha256=9Efn4B3aV45vbocnF6J5WQt88i2FgFjoi5ALzGUukEE,1375
|
86
|
-
edsl/jobs/runners/JobsRunnerAsyncio.py,sha256=P2fx187rP9WeA3m9FovKS1VGOtvlai1AYPJaSC6-Un4,12185
|
87
|
-
edsl/jobs/runners/JobsRunnerStatusData.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
-
edsl/jobs/runners/JobsRunnerStatusMixin.py,sha256=YWHdn_01RuHzCUCl5nvWgIOMtljiLfX4nUB8kPvOlgQ,12913
|
89
|
-
edsl/jobs/tasks/QuestionTaskCreator.py,sha256=f-hF7TMdMMjQ5AQMpMJXrFdBUNSLrLHHl1sun774f_U,10394
|
90
|
-
edsl/jobs/tasks/TaskCreators.py,sha256=WUSs-KFpwbm_MB3jlDQm1SJLNWTxP-jKjisealIm36U,2702
|
91
|
-
edsl/jobs/tasks/TaskHistory.py,sha256=ZVellGW1cvwqdHt98dYPl0FYhk3VqRGHAZETDOxEkqg,10939
|
92
|
-
edsl/jobs/tasks/TaskStatusLog.py,sha256=bqH36a32F12fjX-M-4lNOhHaK2-WLFzKE-r0PxZPRjI,546
|
93
|
-
edsl/jobs/tasks/task_management.py,sha256=KMToZuXzMlnHRHUF_VHL0-lHMTGhklf2GHVuwEEHtzA,301
|
94
|
-
edsl/jobs/tasks/task_status_enum.py,sha256=DOyrz61YlIS8R1W7izJNphcLrJ7I_ReUlfdRmk23h0Q,5333
|
95
|
-
edsl/jobs/tokens/InterviewTokenUsage.py,sha256=u_6-IHpGFwZ6qMEXr24-jyLVUSSp4dSs_4iAZsBv7O4,1100
|
96
|
-
edsl/jobs/tokens/TokenUsage.py,sha256=odj2-wDNEbHl9noyFAQ0DSKV0D9cv3aDOpmXufKZ8O4,1323
|
97
|
-
edsl/language_models/LanguageModel.py,sha256=SYIEaHwQgHquREzIRsy4--F0T2yp3sA2hxW5AnVX2qo,21212
|
98
|
-
edsl/language_models/ModelList.py,sha256=G8tzHqzz4exc28BGvGgVRk1Xwu8EDCiVWxMC5l8VnvI,2862
|
99
|
-
edsl/language_models/RegisterLanguageModelsMeta.py,sha256=2bvWrVau2BRo-Bb1aO-QATH8xxuW_tF7NmqBMGDOfSg,8191
|
100
|
-
edsl/language_models/__init__.py,sha256=bvY7Gy6VkX1gSbNkRbGPS-M1kUnb0EohL0FSagaEaTs,109
|
101
|
-
edsl/language_models/registry.py,sha256=T7KmAZoNAWHRmvH5yRBlMOKJ2XVUIdZ7Wu0EZVPxgxg,3743
|
102
|
-
edsl/language_models/repair.py,sha256=xaNunBRpMWgceSPOzk-ugp5WXtgLuuhj23TgXUeOobw,5963
|
103
|
-
edsl/language_models/unused/ReplicateBase.py,sha256=J1oqf7mEyyKhRwNUomnptVqAsVFYCbS3iTW0EXpKtXo,3331
|
104
|
-
edsl/notebooks/Notebook.py,sha256=qwDqUN2Gujr7WUneRrshzRBjHvcPpOIBRyqcrAOc90Q,7341
|
105
|
-
edsl/notebooks/__init__.py,sha256=VNUA3nNq04slWNbYaNrzOhQJu3AZANpvBniyCJSzJ7U,45
|
106
|
-
edsl/prompts/Prompt.py,sha256=12cbeQTKqfVQGpd1urqKZeXiDtKz2RAJqftoXS3q-DE,10070
|
107
|
-
edsl/prompts/QuestionInstructionsBase.py,sha256=xico6ob4cqWsHl-txj2RbY_4Ny5u9UqvIjmoTVgjUhk,348
|
108
|
-
edsl/prompts/__init__.py,sha256=Z0ywyJfnV0i-sR1SCdK4mHhgECT5cXpHVA-pKuBTifc,85
|
109
|
-
edsl/prompts/library/agent_instructions.py,sha256=_2kCDYvh3ZOF72VvcIH5jhmHjM6AAgQdkWrHvR52Yhg,1100
|
110
|
-
edsl/prompts/library/agent_persona.py,sha256=jEl1LjlOP67vOPiRW0S_-TRMz3n6Tp3mPRvltM2r2_k,516
|
111
|
-
edsl/prompts/library/question_budget.py,sha256=RAc7pmQRbs_-xksU52yYl8iqJ7HejPY4sQOlCSQLGWs,1190
|
112
|
-
edsl/prompts/library/question_checkbox.py,sha256=NIGcdnfkJ8_XbGsdq9toeWA_phQVx5FIBOAe0mReXJw,1462
|
113
|
-
edsl/prompts/library/question_extract.py,sha256=QxNiNBjUk25Ss_Pax0iDgmgTYXEycpWJk2z0evmqsP0,775
|
114
|
-
edsl/prompts/library/question_freetext.py,sha256=_I7hcniRfVwmZr2wXAasfbZ0GTu41ZIKfcoixGhzZUI,510
|
115
|
-
edsl/prompts/library/question_linear_scale.py,sha256=sQpgjSvqJU-uQti-DCxOzLzj05ENkpyxmH-qTFq39x0,778
|
116
|
-
edsl/prompts/library/question_list.py,sha256=KYi3gtcWyDzRLyAb2-k7C-QJ9TAfbLGPkWVvVmdT6xg,731
|
117
|
-
edsl/prompts/library/question_multiple_choice.py,sha256=_2LUM9bOInODoFyaTrKfMkcb5Z7RDj_odq5iAnD7KVQ,1617
|
118
|
-
edsl/prompts/library/question_numerical.py,sha256=ZdWnDbTU0gQdMMqcWHw_eIHEZkJ_kuE-XWrnCYFR07w,1456
|
119
|
-
edsl/prompts/library/question_rank.py,sha256=WDgXyph0EKWJrSgsW2eqcx3xdU-WA1LEvB2jvQFOQ8s,882
|
120
|
-
edsl/prompts/prompt_config.py,sha256=O3Y5EvBsCeKs9m9IjXiRXOcHWlWvQV0yqsNb2oSR1ow,974
|
121
|
-
edsl/prompts/registry.py,sha256=XOsqGsvNOmIG83jqoszqI72yNZkkszKR4FrEhwSzj_Q,8093
|
122
|
-
edsl/questions/AnswerValidatorMixin.py,sha256=U5i79HoEHpSoevgtx68TSg8a9tELq3R8xMtYyK1L7DQ,12106
|
123
|
-
edsl/questions/QuestionBase.py,sha256=L0-IMnSGiUh5Uw7kFDsPV057mR9tL9aMwHUtxjLlKsg,19017
|
124
|
-
edsl/questions/QuestionBudget.py,sha256=K8cc1YOfoLWRoZBAkWO7WsMDZne0a5oAJMSxv2Jzd1E,6143
|
125
|
-
edsl/questions/QuestionCheckBox.py,sha256=YHS-LEvR_1CWyg4usOlWfj9Gb_cCQlfIWIWhYRWn7Wo,6129
|
126
|
-
edsl/questions/QuestionExtract.py,sha256=fjnsNLS2fNW6dfFuRyc2EgKEHx8ujjONmg2nSRynje4,3988
|
127
|
-
edsl/questions/QuestionFreeText.py,sha256=ASj1s0EQYcZerJp476fscu_xEME8mKzVK3sPL6egiuU,3289
|
128
|
-
edsl/questions/QuestionFunctional.py,sha256=jlC1eNE-kpp9o5CXKo-c3Re4PIq1_WmdJ66u9nD-W7w,4967
|
129
|
-
edsl/questions/QuestionList.py,sha256=Wf7xDXJsQBsAD_yOrzZ_GstKGT7aZjimTkU6qyqOhhM,4051
|
130
|
-
edsl/questions/QuestionMultipleChoice.py,sha256=P1GR5Ml7ppk-xeJnlS7ZWctj5poR9NHZ3MPKrlKSync,6631
|
131
|
-
edsl/questions/QuestionNumerical.py,sha256=QArFDhP9Adb4l6y-udnUqPNk2Q6vT4pGsY13TkHsLGs,3631
|
132
|
-
edsl/questions/QuestionRank.py,sha256=NEAwDt1at0zEM2S-E7jXMjglnlB0WhUlxSVJkzH4xSs,5876
|
133
|
-
edsl/questions/RegisterQuestionsMeta.py,sha256=unON0CKpW-mveyhg9V3_BF_GYYwytMYP9h2ZZPetVNM,1994
|
134
|
-
edsl/questions/SimpleAskMixin.py,sha256=YRLiHA6TPMKyLWvdAi7Mfnxcqtw7Kem6tH28YNb8n4U,2227
|
135
|
-
edsl/questions/__init__.py,sha256=U7t2dk_dHSaFRciHETXaGaJRnCobaik3mIKCpGRUuJo,1160
|
136
|
-
edsl/questions/compose_questions.py,sha256=ZcLkwNaofk-o0-skGXEDGZAj6DumOhVhyIUjqEnKrbg,3380
|
137
|
-
edsl/questions/derived/QuestionLikertFive.py,sha256=zKkjKI3HSt9ZGyBBNgXNsfXZ7gOoOknidLDPgMN_PcI,2475
|
138
|
-
edsl/questions/derived/QuestionLinearScale.py,sha256=7tybIaMaDTMkTFC6CymusW69so-zf5jUn8Aqf5pw__Y,2673
|
139
|
-
edsl/questions/derived/QuestionTopK.py,sha256=TouXKZt_h6Jd-2rAjkEOCJOzzei4Wa-3hjYq9CLxWws,2744
|
140
|
-
edsl/questions/derived/QuestionYesNo.py,sha256=KtMGuAPYWv-7-9WGa0fIS2UBxf6KKjFpuTk_h8FPZbg,2076
|
141
|
-
edsl/questions/derived/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
142
|
-
edsl/questions/descriptors.py,sha256=W0_mGZKKiXv2E2BKIy8-4n_QDILh9sun85Oev1YRoLs,14791
|
143
|
-
edsl/questions/question_registry.py,sha256=ZD7Y_towDdlnnmLq12vVewgQ3fEk9Ur0tCTWK8-WqeQ,5241
|
144
|
-
edsl/questions/settings.py,sha256=er_z0ZW_dgmC5CHLWkaqBJiuWgAYzIund85M5YZFQAI,291
|
145
|
-
edsl/results/Dataset.py,sha256=DZgb3vIj69ON7APQ6DimjBwAS1xZvZiXOg68CjW9E3I,8662
|
146
|
-
edsl/results/DatasetExportMixin.py,sha256=Iq3Kzdoc6HmjihdsFzj_mhmRpoeBwF8AREVK8FZmlaI,25047
|
147
|
-
edsl/results/Result.py,sha256=53lz1mGqmnt2wHl-Ccimbla7cNlg_mLUgOBQa6Qd19k,14433
|
148
|
-
edsl/results/Results.py,sha256=IUHfmcBVtZ3me4VvVBQsdKKtuMXaZtLkzIrH5US7aUY,38155
|
149
|
-
edsl/results/ResultsDBMixin.py,sha256=Vs95zbSB4G7ENY4lU7OBdekg9evwTrtPH0IIL2NAFTk,7936
|
150
|
-
edsl/results/ResultsExportMixin.py,sha256=XizBsPNxziyffirMA4kS7UHpYM1WIE4s1K-B7TqTfDw,1266
|
151
|
-
edsl/results/ResultsFetchMixin.py,sha256=VEa0TKDcXbnTinSKs9YaE4WjOSLmlp9Po1_9kklFvSo,848
|
152
|
-
edsl/results/ResultsGGMixin.py,sha256=SAYz8p4wb1g8x6KhBVz9NHOGib2c2XsqtTclpADrFeM,4344
|
153
|
-
edsl/results/ResultsToolsMixin.py,sha256=mseEFxJCf9sjXdIxpjITt_UZBwdXxw2o2VLg5jMrALA,3017
|
154
|
-
edsl/results/__init__.py,sha256=2YcyiVtXi-3vIV0ZzOy1PqBLm2gaziufJVi4fdNrAt8,80
|
155
|
-
edsl/scenarios/FileStore.py,sha256=AevvU1qdLSmL4Q7cb1PhUiaJk1i5T0sgkTKBYf0KDN4,8722
|
156
|
-
edsl/scenarios/Scenario.py,sha256=eQRMV6JD6mrlIMXc7-NK0I-LK5px2oC6rAR_w-qJPnE,14829
|
157
|
-
edsl/scenarios/ScenarioHtmlMixin.py,sha256=EmugmbPJYW5eZS30rM6pDMDQD9yrrvHjmgZWB1qBfq4,1882
|
158
|
-
edsl/scenarios/ScenarioImageMixin.py,sha256=VJ5FqyPrL5-ieORlWMpnjmOAFIau8QFZCIZyEBKgb6I,3530
|
159
|
-
edsl/scenarios/ScenarioList.py,sha256=lFdhlVG9NMAuZ4MBzz7VoIMT3NVWaNUjEHhGOQm1Hn8,19631
|
160
|
-
edsl/scenarios/ScenarioListExportMixin.py,sha256=4fAcz_nfGrGZbzH_ZCWyf6CZoWxFvMM6xRJDWnYlevY,995
|
161
|
-
edsl/scenarios/ScenarioListPdfMixin.py,sha256=sRCHVG7z4u4ST4ce-I_Y4md8ZzC9-tj4an9PMouaHVg,3765
|
162
|
-
edsl/scenarios/__init__.py,sha256=KRwZCLf2R0qyJvv1NGbd8M51Bt6Ia6Iylg-Xq_2Fa6M,98
|
163
|
-
edsl/shared.py,sha256=lgLa-mCk2flIhxXarXLtfXZjXG_6XHhC2A3O8yRTjXc,20
|
164
|
-
edsl/study/ObjectEntry.py,sha256=e3xRPH8wCN8Pum5HZsQRYgnSoauSvjXunIEH79wu5A8,5788
|
165
|
-
edsl/study/ProofOfWork.py,sha256=FaqYtLgeiTEQXWKukPgPUTWMcIN5t1FR7h7Re8QEtgc,3433
|
166
|
-
edsl/study/SnapShot.py,sha256=-5zoP4uTvnqtu3zRNMD-fKsNAVYX9psoKRADfotsF9E,2439
|
167
|
-
edsl/study/Study.py,sha256=zLy2mMvsX_QgZ6D4dcgYJoEacyajkRnARYjIFvyCO1o,16939
|
168
|
-
edsl/study/__init__.py,sha256=YAvPLTPG3hK_eN9Ar3d1_d-E3laXpSya879A25-JAxU,170
|
169
|
-
edsl/surveys/DAG.py,sha256=ozQuHo9ZQ8Eet5nDXtp7rFpiSocvvfxIHtyTnztvodg,2380
|
170
|
-
edsl/surveys/Memory.py,sha256=-ikOtkkQldGB_BkPCW3o7AYwV5B_pIwlREw7aVCSHaQ,1113
|
171
|
-
edsl/surveys/MemoryPlan.py,sha256=BeLuqS5Q8G2jSluHYFCAxVmj7cNPK-rDQ3mUsuDjikQ,7979
|
172
|
-
edsl/surveys/Rule.py,sha256=ddZyZSObs4gsKtFSmcXkPigXDX8rrh1NFvAplP02TcA,11092
|
173
|
-
edsl/surveys/RuleCollection.py,sha256=sN7aYDQJG3HmE-WxohgpctcQbHewjwE6NAqEVTxvFP8,13359
|
174
|
-
edsl/surveys/Survey.py,sha256=eB8S3KQ0d7nyJ0RqhCimmOXcO-d2_GquxvHMR0g6t90,48567
|
175
|
-
edsl/surveys/SurveyCSS.py,sha256=NjJezs2sTlgFprN6IukjGKwNYmNdXnLjzV2w5K4z4RI,8415
|
176
|
-
edsl/surveys/SurveyExportMixin.py,sha256=vj9bZReHx0wBK9sVuS0alzPIUDdg6AFFMd7bl1RKWKI,6555
|
177
|
-
edsl/surveys/SurveyFlowVisualizationMixin.py,sha256=Z-YqeedMqWOtCFy003YJ9aneJ1n4bn70lDoILwLtTc0,3966
|
178
|
-
edsl/surveys/__init__.py,sha256=vjMYVlP95fHVqqw2FfKXRuYbTArZkZr1nK4FnXzZWzs,129
|
179
|
-
edsl/surveys/base.py,sha256=n5PBx0BF0powzBXCsufpUekfNK_9huf3rohtU1mMCq0,1001
|
180
|
-
edsl/surveys/descriptors.py,sha256=3B-hBVvGpLlVBCyOnPuxkLjesvpr0QIuATbggp_MJ7o,2076
|
181
|
-
edsl/tools/__init__.py,sha256=4iRiX1K0Yh8RGwlUBuzipvFfRrofKqCRQ0SzNK_2oiQ,41
|
182
|
-
edsl/tools/clusters.py,sha256=uvDN76bfHIHS-ykB2iioXu0gKeP_UyD7Q9ee67w_fV4,6132
|
183
|
-
edsl/tools/embeddings.py,sha256=-mHqApiFbGzj_2Cr_VVl_7XiBBDyPB5-6ZO7IsXvaig,677
|
184
|
-
edsl/tools/embeddings_plotting.py,sha256=fznAqLnjF_K8PkJy1C4hBRObm3f8ebDIxQzrqRXlEJM,3564
|
185
|
-
edsl/tools/plotting.py,sha256=DbVNlm8rNCnWHXi5wDPnOviZ1Qxz-rHvtQM1zHWw1f8,3120
|
186
|
-
edsl/tools/summarize.py,sha256=YcdB0IjZn92qv2zVJuxsHfXou810APWYKeaHknsATqM,656
|
187
|
-
edsl/utilities/SystemInfo.py,sha256=qTP_aKwECPxtTnbEjJ7F1QqKU9U3rcEEbppg2ilQGuY,792
|
188
|
-
edsl/utilities/__init__.py,sha256=oUWx_h-8OFb1Of2SgIQZuIu7hX_bhDuwCSwksKGWZ6k,544
|
189
|
-
edsl/utilities/ast_utilities.py,sha256=49KDDu-PHYpzDN5cCaDf-ReQH-1dzjT5EG3WVSa8THk,868
|
190
|
-
edsl/utilities/data/Registry.py,sha256=q2DKc7CpG_7l47MxxsSi6DJOs4p1Z3qNx7PV-v8CUOE,176
|
191
|
-
edsl/utilities/data/__init__.py,sha256=pDjGnzC11q4Za8qX5zcg6plcQ_8Qjpb-sAKPwOlKmCY,62
|
192
|
-
edsl/utilities/data/scooter_results.json,sha256=tRtVAI5haLMh_-wjz9it_uk_I1bGe5qdFHsIRQMi_ks,250944
|
193
|
-
edsl/utilities/decorators.py,sha256=rlTSMItwmWUxHQBIEUDxX3lFzgtiT8PnfNavakuf-2M,2319
|
194
|
-
edsl/utilities/gcp_bucket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
195
|
-
edsl/utilities/gcp_bucket/cloud_storage.py,sha256=dStHsG181YP9ALW-bkyO-sgMWuLV5aaLsnsCOVD8jJw,3472
|
196
|
-
edsl/utilities/gcp_bucket/simple_example.py,sha256=pR_IH_Y640_-YnEyNpE7V_1MtBFC9nD3dg2NdSVcuXY,251
|
197
|
-
edsl/utilities/interface.py,sha256=AaKpWiwWBwP2swNXmnFlIf3ZFsjfsR5bjXQAW47tD-8,19656
|
198
|
-
edsl/utilities/repair_functions.py,sha256=tftmklAqam6LOQQu_-9U44N-llycffhW8LfO63vBmNw,929
|
199
|
-
edsl/utilities/restricted_python.py,sha256=5-_zUhrNbos7pLhDl9nr8d24auRlquR6w-vKkmNjPiA,2060
|
200
|
-
edsl/utilities/utilities.py,sha256=oU5Gg6szTGqsJ2yBOS0aC3XooezLE8By3SdrQLLpqvA,10107
|
201
|
-
edsl-0.1.31.dev4.dist-info/LICENSE,sha256=_qszBDs8KHShVYcYzdMz3HNMtH-fKN_p5zjoVAVumFc,1111
|
202
|
-
edsl-0.1.31.dev4.dist-info/METADATA,sha256=d5d3UglIezwp0eb3EhsGPw1VnJFyr_G_m8-AuArA124,4171
|
203
|
-
edsl-0.1.31.dev4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
204
|
-
edsl-0.1.31.dev4.dist-info/RECORD,,
|
File without changes
|
File without changes
|