edsl 0.1.39.dev1__py3-none-any.whl → 0.1.39.dev3__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 +332 -332
- edsl/BaseDiff.py +260 -260
- edsl/TemplateLoader.py +24 -24
- edsl/__init__.py +49 -49
- edsl/__version__.py +1 -1
- edsl/agents/Agent.py +867 -867
- edsl/agents/AgentList.py +413 -413
- edsl/agents/Invigilator.py +233 -233
- edsl/agents/InvigilatorBase.py +270 -265
- edsl/agents/PromptConstructor.py +354 -354
- edsl/agents/__init__.py +3 -3
- edsl/agents/descriptors.py +99 -99
- edsl/agents/prompt_helpers.py +129 -129
- edsl/auto/AutoStudy.py +117 -117
- edsl/auto/StageBase.py +230 -230
- edsl/auto/StageGenerateSurvey.py +178 -178
- edsl/auto/StageLabelQuestions.py +125 -125
- edsl/auto/StagePersona.py +61 -61
- edsl/auto/StagePersonaDimensionValueRanges.py +88 -88
- edsl/auto/StagePersonaDimensionValues.py +74 -74
- edsl/auto/StagePersonaDimensions.py +69 -69
- edsl/auto/StageQuestions.py +73 -73
- edsl/auto/SurveyCreatorPipeline.py +21 -21
- edsl/auto/utilities.py +224 -224
- edsl/base/Base.py +279 -279
- edsl/config.py +157 -157
- edsl/conversation/Conversation.py +290 -290
- edsl/conversation/car_buying.py +58 -58
- edsl/conversation/chips.py +95 -95
- edsl/conversation/mug_negotiation.py +81 -81
- edsl/conversation/next_speaker_utilities.py +93 -93
- edsl/coop/PriceFetcher.py +54 -54
- edsl/coop/__init__.py +2 -2
- edsl/coop/coop.py +1028 -1028
- edsl/coop/utils.py +131 -131
- edsl/data/Cache.py +555 -555
- edsl/data/CacheEntry.py +233 -233
- edsl/data/CacheHandler.py +149 -149
- edsl/data/RemoteCacheSync.py +78 -78
- edsl/data/SQLiteDict.py +292 -292
- edsl/data/__init__.py +4 -4
- edsl/data/orm.py +10 -10
- edsl/data_transfer_models.py +73 -73
- edsl/enums.py +175 -175
- edsl/exceptions/BaseException.py +21 -21
- edsl/exceptions/__init__.py +54 -54
- edsl/exceptions/agents.py +42 -42
- edsl/exceptions/cache.py +5 -5
- edsl/exceptions/configuration.py +16 -16
- edsl/exceptions/coop.py +10 -10
- edsl/exceptions/data.py +14 -14
- edsl/exceptions/general.py +34 -34
- edsl/exceptions/jobs.py +33 -33
- edsl/exceptions/language_models.py +63 -63
- edsl/exceptions/prompts.py +15 -15
- edsl/exceptions/questions.py +91 -91
- edsl/exceptions/results.py +29 -29
- edsl/exceptions/scenarios.py +22 -22
- edsl/exceptions/surveys.py +37 -37
- edsl/inference_services/AnthropicService.py +87 -87
- edsl/inference_services/AwsBedrock.py +120 -120
- edsl/inference_services/AzureAI.py +217 -217
- edsl/inference_services/DeepInfraService.py +18 -18
- edsl/inference_services/GoogleService.py +148 -148
- edsl/inference_services/GroqService.py +20 -20
- edsl/inference_services/InferenceServiceABC.py +147 -147
- edsl/inference_services/InferenceServicesCollection.py +97 -97
- edsl/inference_services/MistralAIService.py +123 -123
- edsl/inference_services/OllamaService.py +18 -18
- edsl/inference_services/OpenAIService.py +224 -224
- edsl/inference_services/PerplexityService.py +163 -163
- edsl/inference_services/TestService.py +89 -89
- edsl/inference_services/TogetherAIService.py +170 -170
- edsl/inference_services/models_available_cache.py +118 -118
- edsl/inference_services/rate_limits_cache.py +25 -25
- edsl/inference_services/registry.py +41 -41
- edsl/inference_services/write_available.py +10 -10
- edsl/jobs/Answers.py +56 -56
- edsl/jobs/Jobs.py +898 -898
- edsl/jobs/JobsChecks.py +147 -147
- edsl/jobs/JobsPrompts.py +268 -268
- edsl/jobs/JobsRemoteInferenceHandler.py +239 -239
- edsl/jobs/__init__.py +1 -1
- edsl/jobs/buckets/BucketCollection.py +63 -63
- edsl/jobs/buckets/ModelBuckets.py +65 -65
- edsl/jobs/buckets/TokenBucket.py +251 -251
- edsl/jobs/interviews/Interview.py +661 -661
- edsl/jobs/interviews/InterviewExceptionCollection.py +99 -99
- edsl/jobs/interviews/InterviewExceptionEntry.py +186 -186
- edsl/jobs/interviews/InterviewStatistic.py +63 -63
- edsl/jobs/interviews/InterviewStatisticsCollection.py +25 -25
- edsl/jobs/interviews/InterviewStatusDictionary.py +78 -78
- edsl/jobs/interviews/InterviewStatusLog.py +92 -92
- edsl/jobs/interviews/ReportErrors.py +66 -66
- edsl/jobs/interviews/interview_status_enum.py +9 -9
- edsl/jobs/runners/JobsRunnerAsyncio.py +466 -466
- edsl/jobs/runners/JobsRunnerStatus.py +330 -330
- edsl/jobs/tasks/QuestionTaskCreator.py +242 -242
- edsl/jobs/tasks/TaskCreators.py +64 -64
- edsl/jobs/tasks/TaskHistory.py +450 -450
- edsl/jobs/tasks/TaskStatusLog.py +23 -23
- edsl/jobs/tasks/task_status_enum.py +163 -163
- edsl/jobs/tokens/InterviewTokenUsage.py +27 -27
- edsl/jobs/tokens/TokenUsage.py +34 -34
- edsl/language_models/KeyLookup.py +30 -30
- edsl/language_models/LanguageModel.py +668 -668
- edsl/language_models/ModelList.py +155 -155
- edsl/language_models/RegisterLanguageModelsMeta.py +184 -184
- edsl/language_models/__init__.py +3 -3
- edsl/language_models/fake_openai_call.py +15 -15
- edsl/language_models/fake_openai_service.py +61 -61
- edsl/language_models/registry.py +190 -190
- edsl/language_models/repair.py +156 -156
- edsl/language_models/unused/ReplicateBase.py +83 -83
- edsl/language_models/utilities.py +64 -64
- edsl/notebooks/Notebook.py +258 -258
- edsl/notebooks/__init__.py +1 -1
- edsl/prompts/Prompt.py +362 -362
- edsl/prompts/__init__.py +2 -2
- edsl/questions/AnswerValidatorMixin.py +289 -289
- edsl/questions/QuestionBase.py +664 -664
- edsl/questions/QuestionBaseGenMixin.py +161 -161
- edsl/questions/QuestionBasePromptsMixin.py +217 -217
- edsl/questions/QuestionBudget.py +227 -227
- edsl/questions/QuestionCheckBox.py +359 -359
- edsl/questions/QuestionExtract.py +182 -182
- edsl/questions/QuestionFreeText.py +114 -114
- edsl/questions/QuestionFunctional.py +166 -166
- edsl/questions/QuestionList.py +231 -231
- edsl/questions/QuestionMultipleChoice.py +286 -286
- edsl/questions/QuestionNumerical.py +153 -153
- edsl/questions/QuestionRank.py +324 -324
- edsl/questions/Quick.py +41 -41
- edsl/questions/RegisterQuestionsMeta.py +71 -71
- edsl/questions/ResponseValidatorABC.py +174 -174
- edsl/questions/SimpleAskMixin.py +73 -73
- edsl/questions/__init__.py +26 -26
- edsl/questions/compose_questions.py +98 -98
- edsl/questions/decorators.py +21 -21
- edsl/questions/derived/QuestionLikertFive.py +76 -76
- edsl/questions/derived/QuestionLinearScale.py +87 -87
- edsl/questions/derived/QuestionTopK.py +93 -93
- edsl/questions/derived/QuestionYesNo.py +82 -82
- edsl/questions/descriptors.py +413 -413
- edsl/questions/prompt_templates/question_budget.jinja +13 -13
- edsl/questions/prompt_templates/question_checkbox.jinja +32 -32
- edsl/questions/prompt_templates/question_extract.jinja +11 -11
- edsl/questions/prompt_templates/question_free_text.jinja +3 -3
- edsl/questions/prompt_templates/question_linear_scale.jinja +11 -11
- edsl/questions/prompt_templates/question_list.jinja +17 -17
- edsl/questions/prompt_templates/question_multiple_choice.jinja +33 -33
- edsl/questions/prompt_templates/question_numerical.jinja +36 -36
- edsl/questions/question_registry.py +177 -177
- edsl/questions/settings.py +12 -12
- edsl/questions/templates/budget/answering_instructions.jinja +7 -7
- edsl/questions/templates/budget/question_presentation.jinja +7 -7
- edsl/questions/templates/checkbox/answering_instructions.jinja +10 -10
- edsl/questions/templates/checkbox/question_presentation.jinja +22 -22
- edsl/questions/templates/extract/answering_instructions.jinja +7 -7
- edsl/questions/templates/likert_five/answering_instructions.jinja +10 -10
- edsl/questions/templates/likert_five/question_presentation.jinja +11 -11
- edsl/questions/templates/linear_scale/answering_instructions.jinja +5 -5
- edsl/questions/templates/linear_scale/question_presentation.jinja +5 -5
- edsl/questions/templates/list/answering_instructions.jinja +3 -3
- edsl/questions/templates/list/question_presentation.jinja +5 -5
- edsl/questions/templates/multiple_choice/answering_instructions.jinja +9 -9
- edsl/questions/templates/multiple_choice/question_presentation.jinja +11 -11
- edsl/questions/templates/numerical/answering_instructions.jinja +6 -6
- edsl/questions/templates/numerical/question_presentation.jinja +6 -6
- edsl/questions/templates/rank/answering_instructions.jinja +11 -11
- edsl/questions/templates/rank/question_presentation.jinja +15 -15
- edsl/questions/templates/top_k/answering_instructions.jinja +8 -8
- edsl/questions/templates/top_k/question_presentation.jinja +22 -22
- edsl/questions/templates/yes_no/answering_instructions.jinja +6 -6
- edsl/questions/templates/yes_no/question_presentation.jinja +11 -11
- edsl/results/CSSParameterizer.py +108 -108
- edsl/results/Dataset.py +424 -424
- edsl/results/DatasetExportMixin.py +731 -731
- edsl/results/DatasetTree.py +275 -275
- edsl/results/Result.py +465 -465
- edsl/results/Results.py +1165 -1165
- edsl/results/ResultsDBMixin.py +238 -238
- edsl/results/ResultsExportMixin.py +43 -43
- edsl/results/ResultsFetchMixin.py +33 -33
- edsl/results/ResultsGGMixin.py +121 -121
- edsl/results/ResultsToolsMixin.py +98 -98
- edsl/results/Selector.py +135 -135
- edsl/results/TableDisplay.py +198 -198
- edsl/results/__init__.py +2 -2
- edsl/results/table_display.css +77 -77
- edsl/results/tree_explore.py +115 -115
- edsl/scenarios/FileStore.py +632 -632
- edsl/scenarios/Scenario.py +601 -601
- edsl/scenarios/ScenarioHtmlMixin.py +64 -64
- edsl/scenarios/ScenarioJoin.py +127 -127
- edsl/scenarios/ScenarioList.py +1287 -1287
- edsl/scenarios/ScenarioListExportMixin.py +52 -52
- edsl/scenarios/ScenarioListPdfMixin.py +261 -261
- edsl/scenarios/__init__.py +4 -4
- edsl/shared.py +1 -1
- edsl/study/ObjectEntry.py +173 -173
- edsl/study/ProofOfWork.py +113 -113
- edsl/study/SnapShot.py +80 -80
- edsl/study/Study.py +528 -528
- edsl/study/__init__.py +4 -4
- edsl/surveys/DAG.py +148 -148
- edsl/surveys/Memory.py +31 -31
- edsl/surveys/MemoryPlan.py +244 -244
- edsl/surveys/Rule.py +326 -326
- edsl/surveys/RuleCollection.py +387 -387
- edsl/surveys/Survey.py +1801 -1801
- edsl/surveys/SurveyCSS.py +261 -261
- edsl/surveys/SurveyExportMixin.py +259 -259
- edsl/surveys/SurveyFlowVisualizationMixin.py +179 -179
- edsl/surveys/SurveyQualtricsImport.py +284 -284
- edsl/surveys/__init__.py +3 -3
- edsl/surveys/base.py +53 -53
- edsl/surveys/descriptors.py +56 -56
- edsl/surveys/instructions/ChangeInstruction.py +49 -49
- edsl/surveys/instructions/Instruction.py +65 -65
- edsl/surveys/instructions/InstructionCollection.py +77 -77
- edsl/templates/error_reporting/base.html +23 -23
- edsl/templates/error_reporting/exceptions_by_model.html +34 -34
- edsl/templates/error_reporting/exceptions_by_question_name.html +16 -16
- edsl/templates/error_reporting/exceptions_by_type.html +16 -16
- edsl/templates/error_reporting/interview_details.html +115 -115
- edsl/templates/error_reporting/interviews.html +19 -19
- edsl/templates/error_reporting/overview.html +4 -4
- edsl/templates/error_reporting/performance_plot.html +1 -1
- edsl/templates/error_reporting/report.css +73 -73
- edsl/templates/error_reporting/report.html +117 -117
- edsl/templates/error_reporting/report.js +25 -25
- edsl/tools/__init__.py +1 -1
- edsl/tools/clusters.py +192 -192
- edsl/tools/embeddings.py +27 -27
- edsl/tools/embeddings_plotting.py +118 -118
- edsl/tools/plotting.py +112 -112
- edsl/tools/summarize.py +18 -18
- edsl/utilities/SystemInfo.py +28 -28
- edsl/utilities/__init__.py +22 -22
- edsl/utilities/ast_utilities.py +25 -25
- edsl/utilities/data/Registry.py +6 -6
- edsl/utilities/data/__init__.py +1 -1
- edsl/utilities/data/scooter_results.json +1 -1
- edsl/utilities/decorators.py +77 -77
- edsl/utilities/gcp_bucket/cloud_storage.py +96 -96
- edsl/utilities/interface.py +627 -627
- edsl/utilities/naming_utilities.py +263 -263
- edsl/utilities/repair_functions.py +28 -28
- edsl/utilities/restricted_python.py +70 -70
- edsl/utilities/utilities.py +424 -424
- {edsl-0.1.39.dev1.dist-info → edsl-0.1.39.dev3.dist-info}/LICENSE +21 -21
- {edsl-0.1.39.dev1.dist-info → edsl-0.1.39.dev3.dist-info}/METADATA +1 -1
- edsl-0.1.39.dev3.dist-info/RECORD +277 -0
- edsl-0.1.39.dev1.dist-info/RECORD +0 -277
- {edsl-0.1.39.dev1.dist-info → edsl-0.1.39.dev3.dist-info}/WHEEL +0 -0
@@ -1,155 +1,155 @@
|
|
1
|
-
from typing import Optional, List
|
2
|
-
from collections import UserList
|
3
|
-
from edsl import Model
|
4
|
-
|
5
|
-
from edsl.language_models import LanguageModel
|
6
|
-
from edsl.Base import Base
|
7
|
-
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
8
|
-
from edsl.utilities.utilities import is_valid_variable_name
|
9
|
-
from edsl.utilities.utilities import dict_hash
|
10
|
-
|
11
|
-
|
12
|
-
class ModelList(Base, UserList):
|
13
|
-
__documentation__ = """https://docs.expectedparrot.com/en/latest/language_models.html#module-edsl.language_models.ModelList"""
|
14
|
-
|
15
|
-
def __init__(self, data: Optional[list] = None):
|
16
|
-
"""Initialize the ScenarioList class.
|
17
|
-
|
18
|
-
>>> from edsl import Model
|
19
|
-
>>> m = ModelList(Model.available())
|
20
|
-
|
21
|
-
"""
|
22
|
-
if data is not None:
|
23
|
-
super().__init__(data)
|
24
|
-
else:
|
25
|
-
super().__init__([])
|
26
|
-
|
27
|
-
@property
|
28
|
-
def names(self):
|
29
|
-
"""
|
30
|
-
|
31
|
-
>>> ModelList.example().names
|
32
|
-
{'...'}
|
33
|
-
"""
|
34
|
-
return set([model.model for model in self])
|
35
|
-
|
36
|
-
def rich_print(self):
|
37
|
-
pass
|
38
|
-
|
39
|
-
def __repr__(self):
|
40
|
-
return f"ModelList({super().__repr__()})"
|
41
|
-
|
42
|
-
def _summary(self):
|
43
|
-
return {"EDSL Class": "ModelList", "Number of Models": len(self)}
|
44
|
-
|
45
|
-
def __hash__(self):
|
46
|
-
"""Return a hash of the ModelList. This is used for comparison of ModelLists.
|
47
|
-
|
48
|
-
>>> isinstance(hash(Model()), int)
|
49
|
-
True
|
50
|
-
|
51
|
-
"""
|
52
|
-
from edsl.utilities.utilities import dict_hash
|
53
|
-
|
54
|
-
return dict_hash(self.to_dict(sort=True, add_edsl_version=False))
|
55
|
-
|
56
|
-
def to_scenario_list(self):
|
57
|
-
from edsl import ScenarioList, Scenario
|
58
|
-
|
59
|
-
sl = ScenarioList()
|
60
|
-
for model in self:
|
61
|
-
d = {"model": model.model}
|
62
|
-
d.update(model.parameters)
|
63
|
-
sl.append(Scenario(d))
|
64
|
-
return sl
|
65
|
-
|
66
|
-
def tree(self, node_list: Optional[List[str]] = None):
|
67
|
-
return self.to_scenario_list().tree(node_list)
|
68
|
-
|
69
|
-
def table(
|
70
|
-
self,
|
71
|
-
*fields,
|
72
|
-
tablefmt: Optional[str] = None,
|
73
|
-
pretty_labels: Optional[dict] = None,
|
74
|
-
):
|
75
|
-
"""
|
76
|
-
>>> ModelList.example().table("model")
|
77
|
-
model
|
78
|
-
-------
|
79
|
-
gpt-4o
|
80
|
-
gpt-4o
|
81
|
-
gpt-4o
|
82
|
-
"""
|
83
|
-
return (
|
84
|
-
self.to_scenario_list()
|
85
|
-
.to_dataset()
|
86
|
-
.table(*fields, tablefmt=tablefmt, pretty_labels=pretty_labels)
|
87
|
-
)
|
88
|
-
|
89
|
-
def to_list(self):
|
90
|
-
return self.to_scenario_list().to_list()
|
91
|
-
|
92
|
-
def to_dict(self, sort=False, add_edsl_version=True):
|
93
|
-
if sort:
|
94
|
-
model_list = sorted([model for model in self], key=lambda x: hash(x))
|
95
|
-
d = {
|
96
|
-
"models": [
|
97
|
-
model.to_dict(add_edsl_version=add_edsl_version)
|
98
|
-
for model in model_list
|
99
|
-
]
|
100
|
-
}
|
101
|
-
else:
|
102
|
-
d = {
|
103
|
-
"models": [
|
104
|
-
model.to_dict(add_edsl_version=add_edsl_version) for model in self
|
105
|
-
]
|
106
|
-
}
|
107
|
-
if add_edsl_version:
|
108
|
-
from edsl import __version__
|
109
|
-
|
110
|
-
d["edsl_version"] = __version__
|
111
|
-
d["edsl_class_name"] = "ModelList"
|
112
|
-
|
113
|
-
return d
|
114
|
-
|
115
|
-
def _repr_html_(self):
|
116
|
-
"""Return an HTML representation of the ModelList."""
|
117
|
-
footer = f"<a href={self.__documentation__}>(docs)</a>"
|
118
|
-
return str(self.summary(format="html")) + footer
|
119
|
-
|
120
|
-
@classmethod
|
121
|
-
def from_names(self, *args, **kwargs):
|
122
|
-
"""A a model list from a list of names"""
|
123
|
-
if len(args) == 1 and isinstance(args[0], list):
|
124
|
-
args = args[0]
|
125
|
-
return ModelList([Model(model_name, **kwargs) for model_name in args])
|
126
|
-
|
127
|
-
@classmethod
|
128
|
-
@remove_edsl_version
|
129
|
-
def from_dict(cls, data):
|
130
|
-
"""
|
131
|
-
Create a ModelList from a dictionary.
|
132
|
-
|
133
|
-
>>> newm = ModelList.from_dict(ModelList.example().to_dict())
|
134
|
-
>>> assert ModelList.example() == newm
|
135
|
-
"""
|
136
|
-
return cls(data=[LanguageModel.from_dict(model) for model in data["models"]])
|
137
|
-
|
138
|
-
def code(self):
|
139
|
-
pass
|
140
|
-
|
141
|
-
@classmethod
|
142
|
-
def example(cls, randomize: bool = False) -> "ModelList":
|
143
|
-
"""
|
144
|
-
Returns an example ModelList instance.
|
145
|
-
|
146
|
-
:param randomize: If True, uses Model's randomize method.
|
147
|
-
"""
|
148
|
-
|
149
|
-
return cls([Model.example(randomize) for _ in range(3)])
|
150
|
-
|
151
|
-
|
152
|
-
if __name__ == "__main__":
|
153
|
-
import doctest
|
154
|
-
|
155
|
-
doctest.testmod(optionflags=doctest.ELLIPSIS)
|
1
|
+
from typing import Optional, List
|
2
|
+
from collections import UserList
|
3
|
+
from edsl import Model
|
4
|
+
|
5
|
+
from edsl.language_models import LanguageModel
|
6
|
+
from edsl.Base import Base
|
7
|
+
from edsl.utilities.decorators import add_edsl_version, remove_edsl_version
|
8
|
+
from edsl.utilities.utilities import is_valid_variable_name
|
9
|
+
from edsl.utilities.utilities import dict_hash
|
10
|
+
|
11
|
+
|
12
|
+
class ModelList(Base, UserList):
|
13
|
+
__documentation__ = """https://docs.expectedparrot.com/en/latest/language_models.html#module-edsl.language_models.ModelList"""
|
14
|
+
|
15
|
+
def __init__(self, data: Optional[list] = None):
|
16
|
+
"""Initialize the ScenarioList class.
|
17
|
+
|
18
|
+
>>> from edsl import Model
|
19
|
+
>>> m = ModelList(Model.available())
|
20
|
+
|
21
|
+
"""
|
22
|
+
if data is not None:
|
23
|
+
super().__init__(data)
|
24
|
+
else:
|
25
|
+
super().__init__([])
|
26
|
+
|
27
|
+
@property
|
28
|
+
def names(self):
|
29
|
+
"""
|
30
|
+
|
31
|
+
>>> ModelList.example().names
|
32
|
+
{'...'}
|
33
|
+
"""
|
34
|
+
return set([model.model for model in self])
|
35
|
+
|
36
|
+
def rich_print(self):
|
37
|
+
pass
|
38
|
+
|
39
|
+
def __repr__(self):
|
40
|
+
return f"ModelList({super().__repr__()})"
|
41
|
+
|
42
|
+
def _summary(self):
|
43
|
+
return {"EDSL Class": "ModelList", "Number of Models": len(self)}
|
44
|
+
|
45
|
+
def __hash__(self):
|
46
|
+
"""Return a hash of the ModelList. This is used for comparison of ModelLists.
|
47
|
+
|
48
|
+
>>> isinstance(hash(Model()), int)
|
49
|
+
True
|
50
|
+
|
51
|
+
"""
|
52
|
+
from edsl.utilities.utilities import dict_hash
|
53
|
+
|
54
|
+
return dict_hash(self.to_dict(sort=True, add_edsl_version=False))
|
55
|
+
|
56
|
+
def to_scenario_list(self):
|
57
|
+
from edsl import ScenarioList, Scenario
|
58
|
+
|
59
|
+
sl = ScenarioList()
|
60
|
+
for model in self:
|
61
|
+
d = {"model": model.model}
|
62
|
+
d.update(model.parameters)
|
63
|
+
sl.append(Scenario(d))
|
64
|
+
return sl
|
65
|
+
|
66
|
+
def tree(self, node_list: Optional[List[str]] = None):
|
67
|
+
return self.to_scenario_list().tree(node_list)
|
68
|
+
|
69
|
+
def table(
|
70
|
+
self,
|
71
|
+
*fields,
|
72
|
+
tablefmt: Optional[str] = None,
|
73
|
+
pretty_labels: Optional[dict] = None,
|
74
|
+
):
|
75
|
+
"""
|
76
|
+
>>> ModelList.example().table("model")
|
77
|
+
model
|
78
|
+
-------
|
79
|
+
gpt-4o
|
80
|
+
gpt-4o
|
81
|
+
gpt-4o
|
82
|
+
"""
|
83
|
+
return (
|
84
|
+
self.to_scenario_list()
|
85
|
+
.to_dataset()
|
86
|
+
.table(*fields, tablefmt=tablefmt, pretty_labels=pretty_labels)
|
87
|
+
)
|
88
|
+
|
89
|
+
def to_list(self):
|
90
|
+
return self.to_scenario_list().to_list()
|
91
|
+
|
92
|
+
def to_dict(self, sort=False, add_edsl_version=True):
|
93
|
+
if sort:
|
94
|
+
model_list = sorted([model for model in self], key=lambda x: hash(x))
|
95
|
+
d = {
|
96
|
+
"models": [
|
97
|
+
model.to_dict(add_edsl_version=add_edsl_version)
|
98
|
+
for model in model_list
|
99
|
+
]
|
100
|
+
}
|
101
|
+
else:
|
102
|
+
d = {
|
103
|
+
"models": [
|
104
|
+
model.to_dict(add_edsl_version=add_edsl_version) for model in self
|
105
|
+
]
|
106
|
+
}
|
107
|
+
if add_edsl_version:
|
108
|
+
from edsl import __version__
|
109
|
+
|
110
|
+
d["edsl_version"] = __version__
|
111
|
+
d["edsl_class_name"] = "ModelList"
|
112
|
+
|
113
|
+
return d
|
114
|
+
|
115
|
+
def _repr_html_(self):
|
116
|
+
"""Return an HTML representation of the ModelList."""
|
117
|
+
footer = f"<a href={self.__documentation__}>(docs)</a>"
|
118
|
+
return str(self.summary(format="html")) + footer
|
119
|
+
|
120
|
+
@classmethod
|
121
|
+
def from_names(self, *args, **kwargs):
|
122
|
+
"""A a model list from a list of names"""
|
123
|
+
if len(args) == 1 and isinstance(args[0], list):
|
124
|
+
args = args[0]
|
125
|
+
return ModelList([Model(model_name, **kwargs) for model_name in args])
|
126
|
+
|
127
|
+
@classmethod
|
128
|
+
@remove_edsl_version
|
129
|
+
def from_dict(cls, data):
|
130
|
+
"""
|
131
|
+
Create a ModelList from a dictionary.
|
132
|
+
|
133
|
+
>>> newm = ModelList.from_dict(ModelList.example().to_dict())
|
134
|
+
>>> assert ModelList.example() == newm
|
135
|
+
"""
|
136
|
+
return cls(data=[LanguageModel.from_dict(model) for model in data["models"]])
|
137
|
+
|
138
|
+
def code(self):
|
139
|
+
pass
|
140
|
+
|
141
|
+
@classmethod
|
142
|
+
def example(cls, randomize: bool = False) -> "ModelList":
|
143
|
+
"""
|
144
|
+
Returns an example ModelList instance.
|
145
|
+
|
146
|
+
:param randomize: If True, uses Model's randomize method.
|
147
|
+
"""
|
148
|
+
|
149
|
+
return cls([Model.example(randomize) for _ in range(3)])
|
150
|
+
|
151
|
+
|
152
|
+
if __name__ == "__main__":
|
153
|
+
import doctest
|
154
|
+
|
155
|
+
doctest.testmod(optionflags=doctest.ELLIPSIS)
|