edsl 0.1.39.dev3__py3-none-any.whl → 0.1.39.dev4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edsl/Base.py +413 -332
- edsl/BaseDiff.py +260 -260
- edsl/TemplateLoader.py +24 -24
- edsl/__init__.py +57 -49
- edsl/__version__.py +1 -1
- edsl/agents/Agent.py +1071 -867
- edsl/agents/AgentList.py +551 -413
- edsl/agents/Invigilator.py +284 -233
- edsl/agents/InvigilatorBase.py +257 -270
- edsl/agents/PromptConstructor.py +272 -354
- edsl/agents/QuestionInstructionPromptBuilder.py +128 -0
- edsl/agents/QuestionTemplateReplacementsBuilder.py +137 -0
- edsl/agents/__init__.py +2 -3
- edsl/agents/descriptors.py +99 -99
- edsl/agents/prompt_helpers.py +129 -129
- edsl/agents/question_option_processor.py +172 -0
- edsl/auto/AutoStudy.py +130 -117
- edsl/auto/StageBase.py +243 -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 +74 -73
- edsl/auto/SurveyCreatorPipeline.py +21 -21
- edsl/auto/utilities.py +218 -224
- edsl/base/Base.py +279 -279
- edsl/config.py +177 -157
- edsl/conversation/Conversation.py +290 -290
- edsl/conversation/car_buying.py +59 -58
- edsl/conversation/chips.py +95 -95
- edsl/conversation/mug_negotiation.py +81 -81
- edsl/conversation/next_speaker_utilities.py +93 -93
- edsl/coop/CoopFunctionsMixin.py +15 -0
- edsl/coop/ExpectedParrotKeyHandler.py +125 -0
- edsl/coop/PriceFetcher.py +54 -54
- edsl/coop/__init__.py +2 -2
- edsl/coop/coop.py +1106 -1028
- edsl/coop/utils.py +131 -131
- edsl/data/Cache.py +573 -555
- edsl/data/CacheEntry.py +230 -233
- edsl/data/CacheHandler.py +168 -149
- edsl/data/RemoteCacheSync.py +186 -78
- edsl/data/SQLiteDict.py +292 -292
- edsl/data/__init__.py +5 -4
- edsl/data/hack.py +10 -0
- edsl/data/orm.py +10 -10
- edsl/data_transfer_models.py +74 -73
- edsl/enums.py +202 -175
- edsl/exceptions/BaseException.py +21 -21
- edsl/exceptions/__init__.py +54 -54
- edsl/exceptions/agents.py +54 -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/inference_services.py +5 -0
- edsl/exceptions/jobs.py +33 -33
- edsl/exceptions/language_models.py +63 -63
- edsl/exceptions/prompts.py +15 -15
- edsl/exceptions/questions.py +109 -91
- edsl/exceptions/results.py +29 -29
- edsl/exceptions/scenarios.py +29 -22
- edsl/exceptions/surveys.py +37 -37
- edsl/inference_services/AnthropicService.py +106 -87
- edsl/inference_services/AvailableModelCacheHandler.py +184 -0
- edsl/inference_services/AvailableModelFetcher.py +215 -0
- edsl/inference_services/AwsBedrock.py +118 -120
- edsl/inference_services/AzureAI.py +215 -217
- edsl/inference_services/DeepInfraService.py +18 -18
- edsl/inference_services/GoogleService.py +143 -148
- edsl/inference_services/GroqService.py +20 -20
- edsl/inference_services/InferenceServiceABC.py +80 -147
- edsl/inference_services/InferenceServicesCollection.py +138 -97
- edsl/inference_services/MistralAIService.py +120 -123
- edsl/inference_services/OllamaService.py +18 -18
- edsl/inference_services/OpenAIService.py +236 -224
- edsl/inference_services/PerplexityService.py +160 -163
- edsl/inference_services/ServiceAvailability.py +135 -0
- edsl/inference_services/TestService.py +90 -89
- edsl/inference_services/TogetherAIService.py +172 -170
- edsl/inference_services/data_structures.py +134 -0
- 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/AnswerQuestionFunctionConstructor.py +223 -0
- edsl/jobs/Answers.py +43 -56
- edsl/jobs/FetchInvigilator.py +47 -0
- edsl/jobs/InterviewTaskManager.py +98 -0
- edsl/jobs/InterviewsConstructor.py +50 -0
- edsl/jobs/Jobs.py +823 -898
- edsl/jobs/JobsChecks.py +172 -147
- edsl/jobs/JobsComponentConstructor.py +189 -0
- edsl/jobs/JobsPrompts.py +270 -268
- edsl/jobs/JobsRemoteInferenceHandler.py +311 -239
- edsl/jobs/JobsRemoteInferenceLogger.py +239 -0
- edsl/jobs/RequestTokenEstimator.py +30 -0
- edsl/jobs/__init__.py +1 -1
- edsl/jobs/async_interview_runner.py +138 -0
- edsl/jobs/buckets/BucketCollection.py +104 -63
- edsl/jobs/buckets/ModelBuckets.py +65 -65
- edsl/jobs/buckets/TokenBucket.py +283 -251
- edsl/jobs/buckets/TokenBucketAPI.py +211 -0
- edsl/jobs/buckets/TokenBucketClient.py +191 -0
- edsl/jobs/check_survey_scenario_compatibility.py +85 -0
- edsl/jobs/data_structures.py +120 -0
- edsl/jobs/decorators.py +35 -0
- edsl/jobs/interviews/Interview.py +396 -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/jobs_status_enums.py +9 -0
- edsl/jobs/loggers/HTMLTableJobLogger.py +304 -0
- edsl/jobs/results_exceptions_handler.py +98 -0
- edsl/jobs/runners/JobsRunnerAsyncio.py +151 -466
- edsl/jobs/runners/JobsRunnerStatus.py +297 -330
- edsl/jobs/tasks/QuestionTaskCreator.py +244 -242
- edsl/jobs/tasks/TaskCreators.py +64 -64
- edsl/jobs/tasks/TaskHistory.py +470 -450
- edsl/jobs/tasks/TaskStatusLog.py +23 -23
- edsl/jobs/tasks/task_status_enum.py +161 -163
- edsl/jobs/tokens/InterviewTokenUsage.py +27 -27
- edsl/jobs/tokens/TokenUsage.py +34 -34
- edsl/language_models/ComputeCost.py +63 -0
- edsl/language_models/LanguageModel.py +626 -668
- edsl/language_models/ModelList.py +164 -155
- edsl/language_models/PriceManager.py +127 -0
- edsl/language_models/RawResponseHandler.py +106 -0
- edsl/language_models/RegisterLanguageModelsMeta.py +184 -184
- edsl/language_models/ServiceDataSources.py +0 -0
- edsl/language_models/__init__.py +2 -3
- edsl/language_models/fake_openai_call.py +15 -15
- edsl/language_models/fake_openai_service.py +61 -61
- edsl/language_models/key_management/KeyLookup.py +63 -0
- edsl/language_models/key_management/KeyLookupBuilder.py +273 -0
- edsl/language_models/key_management/KeyLookupCollection.py +38 -0
- edsl/language_models/key_management/__init__.py +0 -0
- edsl/language_models/key_management/models.py +131 -0
- edsl/language_models/model.py +256 -0
- edsl/language_models/repair.py +156 -156
- edsl/language_models/utilities.py +65 -64
- edsl/notebooks/Notebook.py +263 -258
- edsl/notebooks/NotebookToLaTeX.py +142 -0
- edsl/notebooks/__init__.py +1 -1
- edsl/prompts/Prompt.py +352 -362
- edsl/prompts/__init__.py +2 -2
- edsl/questions/ExceptionExplainer.py +77 -0
- edsl/questions/HTMLQuestion.py +103 -0
- edsl/questions/QuestionBase.py +518 -664
- edsl/questions/QuestionBasePromptsMixin.py +221 -217
- edsl/questions/QuestionBudget.py +227 -227
- edsl/questions/QuestionCheckBox.py +359 -359
- edsl/questions/QuestionExtract.py +180 -182
- edsl/questions/QuestionFreeText.py +113 -114
- edsl/questions/QuestionFunctional.py +166 -166
- edsl/questions/QuestionList.py +223 -231
- edsl/questions/QuestionMatrix.py +265 -0
- edsl/questions/QuestionMultipleChoice.py +330 -286
- edsl/questions/QuestionNumerical.py +151 -153
- edsl/questions/QuestionRank.py +314 -324
- edsl/questions/Quick.py +41 -41
- edsl/questions/SimpleAskMixin.py +74 -73
- edsl/questions/__init__.py +27 -26
- edsl/questions/{AnswerValidatorMixin.py → answer_validator_mixin.py} +334 -289
- edsl/questions/compose_questions.py +98 -98
- edsl/questions/data_structures.py +20 -0
- edsl/questions/decorators.py +21 -21
- edsl/questions/derived/QuestionLikertFive.py +76 -76
- edsl/questions/derived/QuestionLinearScale.py +90 -87
- edsl/questions/derived/QuestionTopK.py +93 -93
- edsl/questions/derived/QuestionYesNo.py +82 -82
- edsl/questions/descriptors.py +427 -413
- edsl/questions/loop_processor.py +149 -0
- 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/{QuestionBaseGenMixin.py → question_base_gen_mixin.py} +168 -161
- edsl/questions/question_registry.py +177 -177
- edsl/questions/{RegisterQuestionsMeta.py → register_questions_meta.py} +71 -71
- edsl/questions/{ResponseValidatorABC.py → response_validator_abc.py} +188 -174
- edsl/questions/response_validator_factory.py +34 -0
- 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/matrix/__init__.py +1 -0
- edsl/questions/templates/matrix/answering_instructions.jinja +5 -0
- edsl/questions/templates/matrix/question_presentation.jinja +20 -0
- 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 +587 -424
- edsl/results/DatasetExportMixin.py +594 -731
- edsl/results/DatasetTree.py +295 -275
- edsl/results/MarkdownToDocx.py +122 -0
- edsl/results/MarkdownToPDF.py +111 -0
- edsl/results/Result.py +557 -465
- edsl/results/Results.py +1183 -1165
- edsl/results/ResultsExportMixin.py +45 -43
- edsl/results/ResultsGGMixin.py +121 -121
- edsl/results/TableDisplay.py +125 -198
- edsl/results/TextEditor.py +50 -0
- edsl/results/__init__.py +2 -2
- edsl/results/file_exports.py +252 -0
- edsl/results/{ResultsFetchMixin.py → results_fetch_mixin.py} +33 -33
- edsl/results/{Selector.py → results_selector.py} +145 -135
- edsl/results/{ResultsToolsMixin.py → results_tools_mixin.py} +98 -98
- edsl/results/smart_objects.py +96 -0
- edsl/results/table_data_class.py +12 -0
- edsl/results/table_display.css +77 -77
- edsl/results/table_renderers.py +118 -0
- edsl/results/tree_explore.py +115 -115
- edsl/scenarios/ConstructDownloadLink.py +109 -0
- edsl/scenarios/DocumentChunker.py +102 -0
- edsl/scenarios/DocxScenario.py +16 -0
- edsl/scenarios/FileStore.py +511 -632
- edsl/scenarios/PdfExtractor.py +40 -0
- edsl/scenarios/Scenario.py +498 -601
- edsl/scenarios/ScenarioHtmlMixin.py +65 -64
- edsl/scenarios/ScenarioList.py +1458 -1287
- edsl/scenarios/ScenarioListExportMixin.py +45 -52
- edsl/scenarios/ScenarioListPdfMixin.py +239 -261
- edsl/scenarios/__init__.py +3 -4
- edsl/scenarios/directory_scanner.py +96 -0
- edsl/scenarios/file_methods.py +85 -0
- edsl/scenarios/handlers/__init__.py +13 -0
- edsl/scenarios/handlers/csv.py +38 -0
- edsl/scenarios/handlers/docx.py +76 -0
- edsl/scenarios/handlers/html.py +37 -0
- edsl/scenarios/handlers/json.py +111 -0
- edsl/scenarios/handlers/latex.py +5 -0
- edsl/scenarios/handlers/md.py +51 -0
- edsl/scenarios/handlers/pdf.py +68 -0
- edsl/scenarios/handlers/png.py +39 -0
- edsl/scenarios/handlers/pptx.py +105 -0
- edsl/scenarios/handlers/py.py +294 -0
- edsl/scenarios/handlers/sql.py +313 -0
- edsl/scenarios/handlers/sqlite.py +149 -0
- edsl/scenarios/handlers/txt.py +33 -0
- edsl/scenarios/{ScenarioJoin.py → scenario_join.py} +131 -127
- edsl/scenarios/scenario_selector.py +156 -0
- 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 +521 -528
- edsl/study/__init__.py +4 -4
- edsl/surveys/ConstructDAG.py +92 -0
- edsl/surveys/DAG.py +148 -148
- edsl/surveys/EditSurvey.py +221 -0
- edsl/surveys/InstructionHandler.py +100 -0
- edsl/surveys/Memory.py +31 -31
- edsl/surveys/MemoryManagement.py +72 -0
- edsl/surveys/MemoryPlan.py +244 -244
- edsl/surveys/Rule.py +327 -326
- edsl/surveys/RuleCollection.py +385 -387
- edsl/surveys/RuleManager.py +172 -0
- edsl/surveys/Simulator.py +75 -0
- edsl/surveys/Survey.py +1280 -1801
- edsl/surveys/SurveyCSS.py +273 -261
- edsl/surveys/SurveyExportMixin.py +259 -259
- edsl/surveys/{SurveyFlowVisualizationMixin.py → SurveyFlowVisualization.py} +181 -179
- edsl/surveys/SurveyQualtricsImport.py +284 -284
- edsl/surveys/SurveyToApp.py +141 -0
- edsl/surveys/__init__.py +5 -3
- edsl/surveys/base.py +53 -53
- edsl/surveys/descriptors.py +60 -56
- edsl/surveys/instructions/ChangeInstruction.py +48 -49
- edsl/surveys/instructions/Instruction.py +56 -65
- edsl/surveys/instructions/InstructionCollection.py +82 -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/test_h +1 -0
- 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/PrettyList.py +56 -0
- 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/gcp_bucket/example.py +50 -0
- edsl/utilities/interface.py +627 -627
- edsl/utilities/is_notebook.py +18 -0
- edsl/utilities/is_valid_variable_name.py +11 -0
- edsl/utilities/naming_utilities.py +263 -263
- edsl/utilities/remove_edsl_version.py +24 -0
- edsl/utilities/repair_functions.py +28 -28
- edsl/utilities/restricted_python.py +70 -70
- edsl/utilities/utilities.py +436 -424
- {edsl-0.1.39.dev3.dist-info → edsl-0.1.39.dev4.dist-info}/LICENSE +21 -21
- {edsl-0.1.39.dev3.dist-info → edsl-0.1.39.dev4.dist-info}/METADATA +13 -11
- edsl-0.1.39.dev4.dist-info/RECORD +361 -0
- edsl/language_models/KeyLookup.py +0 -30
- edsl/language_models/registry.py +0 -190
- edsl/language_models/unused/ReplicateBase.py +0 -83
- edsl/results/ResultsDBMixin.py +0 -238
- edsl-0.1.39.dev3.dist-info/RECORD +0 -277
- {edsl-0.1.39.dev3.dist-info → edsl-0.1.39.dev4.dist-info}/WHEEL +0 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
{{question_text}}
|
2
|
+
|
3
|
+
Rows:
|
4
|
+
{% for item in question_items %}
|
5
|
+
{{ loop.index0 }}: {{item}}
|
6
|
+
{% endfor %}
|
7
|
+
|
8
|
+
Columns:
|
9
|
+
{% for option in question_options %}
|
10
|
+
{{ loop.index0 }}: {{option}}
|
11
|
+
{%- if option in option_labels %}
|
12
|
+
({{option_labels[option]}})
|
13
|
+
{%- endif %}
|
14
|
+
{% endfor %}
|
15
|
+
|
16
|
+
|
17
|
+
Select one column option for each row.
|
18
|
+
{% if required %}
|
19
|
+
All rows require a response.
|
20
|
+
{% endif %}
|
@@ -1,9 +1,9 @@
|
|
1
|
-
{# Answering Instructions #}
|
2
|
-
{% if use_code %}
|
3
|
-
Respond only with the code corresponding to one of the options.
|
4
|
-
{% else %}
|
5
|
-
Respond only with a string corresponding to one of the options.
|
6
|
-
{% endif %}
|
7
|
-
{% if include_comment %}
|
8
|
-
After the answer, you can put a comment explaining why you chose that option on the next line.
|
9
|
-
{% endif %}
|
1
|
+
{# Answering Instructions #}
|
2
|
+
{% if use_code %}
|
3
|
+
Respond only with the code corresponding to one of the options.
|
4
|
+
{% else %}
|
5
|
+
Respond only with a string corresponding to one of the options.
|
6
|
+
{% endif %}
|
7
|
+
{% if include_comment %}
|
8
|
+
After the answer, you can put a comment explaining why you chose that option on the next line.
|
9
|
+
{% endif %}
|
@@ -1,12 +1,12 @@
|
|
1
|
-
{# Question Presention #}
|
2
|
-
{{question_text}}
|
3
|
-
{% if use_code %}
|
4
|
-
{%- for option in question_options %}
|
5
|
-
{{ loop.index0 }}: {{option}}
|
6
|
-
{% endfor %}
|
7
|
-
{% else %}
|
8
|
-
{% for option in question_options %}
|
9
|
-
{{option}}
|
10
|
-
{% endfor %}
|
11
|
-
{% endif %}
|
1
|
+
{# Question Presention #}
|
2
|
+
{{question_text}}
|
3
|
+
{% if use_code %}
|
4
|
+
{%- for option in question_options %}
|
5
|
+
{{ loop.index0 }}: {{option}}
|
6
|
+
{% endfor %}
|
7
|
+
{% else %}
|
8
|
+
{% for option in question_options %}
|
9
|
+
{{option}}
|
10
|
+
{% endfor %}
|
11
|
+
{% endif %}
|
12
12
|
Only 1 option may be selected.
|
@@ -1,7 +1,7 @@
|
|
1
|
-
This question requires a numerical response in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
|
2
|
-
Respond with just your number on a single line.
|
3
|
-
If your response is equivalent to zero, report '0'
|
4
|
-
|
5
|
-
{% if include_comment %}
|
6
|
-
After the answer, put a comment explaining your choice on the next line.
|
1
|
+
This question requires a numerical response in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
|
2
|
+
Respond with just your number on a single line.
|
3
|
+
If your response is equivalent to zero, report '0'
|
4
|
+
|
5
|
+
{% if include_comment %}
|
6
|
+
After the answer, put a comment explaining your choice on the next line.
|
7
7
|
{% endif %}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
{{question_text}}
|
2
|
-
{% if min_value is not none %}
|
3
|
-
Minimum answer value: {{min_value}}
|
4
|
-
{% endif %}
|
5
|
-
{% if max_value is not none %}
|
6
|
-
Maximum answer value: {{max_value}}
|
1
|
+
{{question_text}}
|
2
|
+
{% if min_value is not none %}
|
3
|
+
Minimum answer value: {{min_value}}
|
4
|
+
{% endif %}
|
5
|
+
{% if max_value is not none %}
|
6
|
+
Maximum answer value: {{max_value}}
|
7
7
|
{% endif %}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
{# Answering Instructions #}
|
2
|
-
{% if use_code %}
|
3
|
-
Please respond only with a comma-separated list of the code of the raked options, with square brackets. E.g., [0, 1, 3]
|
4
|
-
{% else %}
|
5
|
-
Please respond only with a comma-separated list of the ranked options, with square brackets. E.g., ['Good', 'Bad', 'Ugly']
|
6
|
-
{% endif %}
|
7
|
-
{% if include_comment %}
|
8
|
-
After the answer, you can put a comment explaining your choice on the next line.
|
9
|
-
{% endif %}
|
10
|
-
|
11
|
-
|
1
|
+
{# Answering Instructions #}
|
2
|
+
{% if use_code %}
|
3
|
+
Please respond only with a comma-separated list of the code of the raked options, with square brackets. E.g., [0, 1, 3]
|
4
|
+
{% else %}
|
5
|
+
Please respond only with a comma-separated list of the ranked options, with square brackets. E.g., ['Good', 'Bad', 'Ugly']
|
6
|
+
{% endif %}
|
7
|
+
{% if include_comment %}
|
8
|
+
After the answer, you can put a comment explaining your choice on the next line.
|
9
|
+
{% endif %}
|
10
|
+
|
11
|
+
|
@@ -1,15 +1,15 @@
|
|
1
|
-
{{question_text}}
|
2
|
-
{% if use_code %}
|
3
|
-
The options are
|
4
|
-
{% for option in question_options %}
|
5
|
-
{{ loop.index0 }}: {{option}}
|
6
|
-
{% endfor %}
|
7
|
-
{% else %}
|
8
|
-
The options are:
|
9
|
-
{% for option in question_options %}
|
10
|
-
{{option}}
|
11
|
-
{% endfor %}
|
12
|
-
{% endif %}
|
13
|
-
{% if num_selections %}
|
14
|
-
You can inlcude up to {{num_selections}} options in your answer.
|
15
|
-
{% endif %}
|
1
|
+
{{question_text}}
|
2
|
+
{% if use_code %}
|
3
|
+
The options are
|
4
|
+
{% for option in question_options %}
|
5
|
+
{{ loop.index0 }}: {{option}}
|
6
|
+
{% endfor %}
|
7
|
+
{% else %}
|
8
|
+
The options are:
|
9
|
+
{% for option in question_options %}
|
10
|
+
{{option}}
|
11
|
+
{% endfor %}
|
12
|
+
{% endif %}
|
13
|
+
{% if num_selections %}
|
14
|
+
You can inlcude up to {{num_selections}} options in your answer.
|
15
|
+
{% endif %}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
{# Answering Instructions #}
|
2
|
-
Please respond with valid JSON, formatted like so:
|
3
|
-
{% if include_comment %}
|
4
|
-
{"answer": [<put comma-separated list here>], "comment": "<put explanation here>"}
|
5
|
-
{% else %}
|
6
|
-
{"answer": [<put comma-separated list here>]}
|
7
|
-
{% endif %}
|
8
|
-
|
1
|
+
{# Answering Instructions #}
|
2
|
+
Please respond with valid JSON, formatted like so:
|
3
|
+
{% if include_comment %}
|
4
|
+
{"answer": [<put comma-separated list here>], "comment": "<put explanation here>"}
|
5
|
+
{% else %}
|
6
|
+
{"answer": [<put comma-separated list here>]}
|
7
|
+
{% endif %}
|
8
|
+
|
@@ -1,22 +1,22 @@
|
|
1
|
-
{{question_text}}
|
2
|
-
{% if use_code %}
|
3
|
-
{% for option in question_options %}
|
4
|
-
{{ loop.index0 }}: {{option}}
|
5
|
-
{% endfor %}
|
6
|
-
{% else %}
|
7
|
-
{% for option in question_options %}
|
8
|
-
{{ option }}
|
9
|
-
{% endfor %}
|
10
|
-
{% endif %}
|
11
|
-
|
12
|
-
{# Restrictions #}
|
13
|
-
{% if min_selections != None and max_selections != None and min_selections == max_selections %}
|
14
|
-
You must select exactly {{min_selections}} options.
|
15
|
-
{% elif min_selections != None and max_selections != None %}
|
16
|
-
Minimum number of options that must be selected: {{min_selections}}.
|
17
|
-
Maximum number of options that must be selected: {{max_selections}}.
|
18
|
-
{% elif min_selections != None %}
|
19
|
-
Minimum number of options that must be selected: {{min_selections}}.
|
20
|
-
{% elif max_selections != None %}
|
21
|
-
Maximum number of options that must be selected: {{max_selections}}.
|
22
|
-
{% endif %}
|
1
|
+
{{question_text}}
|
2
|
+
{% if use_code %}
|
3
|
+
{% for option in question_options %}
|
4
|
+
{{ loop.index0 }}: {{option}}
|
5
|
+
{% endfor %}
|
6
|
+
{% else %}
|
7
|
+
{% for option in question_options %}
|
8
|
+
{{ option }}
|
9
|
+
{% endfor %}
|
10
|
+
{% endif %}
|
11
|
+
|
12
|
+
{# Restrictions #}
|
13
|
+
{% if min_selections != None and max_selections != None and min_selections == max_selections %}
|
14
|
+
You must select exactly {{min_selections}} options.
|
15
|
+
{% elif min_selections != None and max_selections != None %}
|
16
|
+
Minimum number of options that must be selected: {{min_selections}}.
|
17
|
+
Maximum number of options that must be selected: {{max_selections}}.
|
18
|
+
{% elif min_selections != None %}
|
19
|
+
Minimum number of options that must be selected: {{min_selections}}.
|
20
|
+
{% elif max_selections != None %}
|
21
|
+
Maximum number of options that must be selected: {{max_selections}}.
|
22
|
+
{% endif %}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
{# Answering Instructions #}
|
2
|
-
Please respond with just your answer.
|
3
|
-
|
4
|
-
{% if include_comment %}
|
5
|
-
After the answer, you can put a comment explaining your response.
|
6
|
-
{% endif %}
|
1
|
+
{# Answering Instructions #}
|
2
|
+
Please respond with just your answer.
|
3
|
+
|
4
|
+
{% if include_comment %}
|
5
|
+
After the answer, you can put a comment explaining your response.
|
6
|
+
{% endif %}
|
@@ -1,12 +1,12 @@
|
|
1
|
-
{# Question Presention #}
|
2
|
-
{{question_text}}
|
3
|
-
{% if use_code %}
|
4
|
-
{%- for option in question_options %}
|
5
|
-
{{ loop.index0 }}: {{option}}
|
6
|
-
{% endfor %}
|
7
|
-
{% else %}
|
8
|
-
{% for option in question_options %}
|
9
|
-
{{option}}
|
10
|
-
{% endfor %}
|
11
|
-
{% endif %}
|
1
|
+
{# Question Presention #}
|
2
|
+
{{question_text}}
|
3
|
+
{% if use_code %}
|
4
|
+
{%- for option in question_options %}
|
5
|
+
{{ loop.index0 }}: {{option}}
|
6
|
+
{% endfor %}
|
7
|
+
{% else %}
|
8
|
+
{% for option in question_options %}
|
9
|
+
{{option}}
|
10
|
+
{% endfor %}
|
11
|
+
{% endif %}
|
12
12
|
Only 1 option may be selected.
|
edsl/results/CSSParameterizer.py
CHANGED
@@ -1,108 +1,108 @@
|
|
1
|
-
import re
|
2
|
-
from typing import Dict, Set, Optional
|
3
|
-
|
4
|
-
|
5
|
-
class CSSParameterizer:
|
6
|
-
"""A utility class to parameterize CSS with custom properties (variables)."""
|
7
|
-
|
8
|
-
def __init__(self, css_content: str):
|
9
|
-
"""
|
10
|
-
Initialize with CSS content to be parameterized.
|
11
|
-
|
12
|
-
Args:
|
13
|
-
css_content (str): The CSS content containing var() declarations
|
14
|
-
"""
|
15
|
-
self.css_content = css_content
|
16
|
-
self._extract_variables()
|
17
|
-
|
18
|
-
def _extract_variables(self) -> None:
|
19
|
-
"""Extract all CSS custom properties (variables) from the CSS content."""
|
20
|
-
# Find all var(...) declarations in the CSS
|
21
|
-
var_pattern = r"var\((--[a-zA-Z0-9-]+)\)"
|
22
|
-
self.variables = set(re.findall(var_pattern, self.css_content))
|
23
|
-
|
24
|
-
def _validate_parameters(self, parameters: Dict[str, str]) -> Set[str]:
|
25
|
-
"""
|
26
|
-
Validate the provided parameters against the CSS variables.
|
27
|
-
|
28
|
-
Args:
|
29
|
-
parameters (Dict[str, str]): Dictionary of variable names and their values
|
30
|
-
|
31
|
-
Returns:
|
32
|
-
Set[str]: Set of missing variables
|
33
|
-
"""
|
34
|
-
# Convert parameter keys to CSS variable format if they don't already have --
|
35
|
-
formatted_params = {
|
36
|
-
f"--{k}" if not k.startswith("--") else k for k in parameters.keys()
|
37
|
-
}
|
38
|
-
|
39
|
-
# print("Variables from CSS:", self.variables)
|
40
|
-
# print("Formatted parameters:", formatted_params)
|
41
|
-
|
42
|
-
# Find missing and extra variables
|
43
|
-
missing_vars = self.variables - formatted_params
|
44
|
-
extra_vars = formatted_params - self.variables
|
45
|
-
|
46
|
-
if extra_vars:
|
47
|
-
print(f"Warning: Found unused parameters: {extra_vars}")
|
48
|
-
|
49
|
-
return missing_vars
|
50
|
-
|
51
|
-
def generate_root(self, **parameters: str) -> Optional[str]:
|
52
|
-
"""
|
53
|
-
Generate a :root block with the provided parameters.
|
54
|
-
|
55
|
-
Args:
|
56
|
-
**parameters: Keyword arguments where keys are variable names and values are their values
|
57
|
-
|
58
|
-
Returns:
|
59
|
-
str: Generated :root block with variables, or None if validation fails
|
60
|
-
|
61
|
-
Example:
|
62
|
-
>>> css = "body { height: var(--bodyHeight); }"
|
63
|
-
>>> parameterizer = CSSParameterizer(css)
|
64
|
-
>>> parameterizer.apply_parameters({'bodyHeight':"100vh"})
|
65
|
-
':root {\\n --bodyHeight: 100vh;\\n}\\n\\nbody { height: var(--bodyHeight); }'
|
66
|
-
"""
|
67
|
-
missing_vars = self._validate_parameters(parameters)
|
68
|
-
|
69
|
-
if missing_vars:
|
70
|
-
print(f"Error: Missing required variables: {missing_vars}")
|
71
|
-
return None
|
72
|
-
|
73
|
-
# Format parameters with -- prefix if not present
|
74
|
-
formatted_params = {
|
75
|
-
f"--{k}" if not k.startswith("--") else k: v for k, v in parameters.items()
|
76
|
-
}
|
77
|
-
|
78
|
-
# Generate the :root block
|
79
|
-
root_block = [":root {"]
|
80
|
-
for var_name, value in sorted(formatted_params.items()):
|
81
|
-
if var_name in self.variables:
|
82
|
-
root_block.append(f" {var_name}: {value};")
|
83
|
-
root_block.append("}")
|
84
|
-
|
85
|
-
return "\n".join(root_block)
|
86
|
-
|
87
|
-
def apply_parameters(self, parameters: dict) -> Optional[str]:
|
88
|
-
"""
|
89
|
-
Generate the complete CSS with the :root block and original CSS content.
|
90
|
-
|
91
|
-
Args:
|
92
|
-
**parameters: Keyword arguments where keys are variable names and values are their values
|
93
|
-
|
94
|
-
Returns:
|
95
|
-
str: Complete CSS with :root block and original content, or None if validation fails
|
96
|
-
"""
|
97
|
-
root_block = self.generate_root(**parameters)
|
98
|
-
if root_block is None:
|
99
|
-
return None
|
100
|
-
|
101
|
-
return f"{root_block}\n\n{self.css_content}"
|
102
|
-
|
103
|
-
|
104
|
-
# Example usage
|
105
|
-
if __name__ == "__main__":
|
106
|
-
import doctest
|
107
|
-
|
108
|
-
doctest.testmod()
|
1
|
+
import re
|
2
|
+
from typing import Dict, Set, Optional
|
3
|
+
|
4
|
+
|
5
|
+
class CSSParameterizer:
|
6
|
+
"""A utility class to parameterize CSS with custom properties (variables)."""
|
7
|
+
|
8
|
+
def __init__(self, css_content: str):
|
9
|
+
"""
|
10
|
+
Initialize with CSS content to be parameterized.
|
11
|
+
|
12
|
+
Args:
|
13
|
+
css_content (str): The CSS content containing var() declarations
|
14
|
+
"""
|
15
|
+
self.css_content = css_content
|
16
|
+
self._extract_variables()
|
17
|
+
|
18
|
+
def _extract_variables(self) -> None:
|
19
|
+
"""Extract all CSS custom properties (variables) from the CSS content."""
|
20
|
+
# Find all var(...) declarations in the CSS
|
21
|
+
var_pattern = r"var\((--[a-zA-Z0-9-]+)\)"
|
22
|
+
self.variables = set(re.findall(var_pattern, self.css_content))
|
23
|
+
|
24
|
+
def _validate_parameters(self, parameters: Dict[str, str]) -> Set[str]:
|
25
|
+
"""
|
26
|
+
Validate the provided parameters against the CSS variables.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
parameters (Dict[str, str]): Dictionary of variable names and their values
|
30
|
+
|
31
|
+
Returns:
|
32
|
+
Set[str]: Set of missing variables
|
33
|
+
"""
|
34
|
+
# Convert parameter keys to CSS variable format if they don't already have --
|
35
|
+
formatted_params = {
|
36
|
+
f"--{k}" if not k.startswith("--") else k for k in parameters.keys()
|
37
|
+
}
|
38
|
+
|
39
|
+
# print("Variables from CSS:", self.variables)
|
40
|
+
# print("Formatted parameters:", formatted_params)
|
41
|
+
|
42
|
+
# Find missing and extra variables
|
43
|
+
missing_vars = self.variables - formatted_params
|
44
|
+
extra_vars = formatted_params - self.variables
|
45
|
+
|
46
|
+
if extra_vars:
|
47
|
+
print(f"Warning: Found unused parameters: {extra_vars}")
|
48
|
+
|
49
|
+
return missing_vars
|
50
|
+
|
51
|
+
def generate_root(self, **parameters: str) -> Optional[str]:
|
52
|
+
"""
|
53
|
+
Generate a :root block with the provided parameters.
|
54
|
+
|
55
|
+
Args:
|
56
|
+
**parameters: Keyword arguments where keys are variable names and values are their values
|
57
|
+
|
58
|
+
Returns:
|
59
|
+
str: Generated :root block with variables, or None if validation fails
|
60
|
+
|
61
|
+
Example:
|
62
|
+
>>> css = "body { height: var(--bodyHeight); }"
|
63
|
+
>>> parameterizer = CSSParameterizer(css)
|
64
|
+
>>> parameterizer.apply_parameters({'bodyHeight':"100vh"})
|
65
|
+
':root {\\n --bodyHeight: 100vh;\\n}\\n\\nbody { height: var(--bodyHeight); }'
|
66
|
+
"""
|
67
|
+
missing_vars = self._validate_parameters(parameters)
|
68
|
+
|
69
|
+
if missing_vars:
|
70
|
+
# print(f"Error: Missing required variables: {missing_vars}")
|
71
|
+
return None
|
72
|
+
|
73
|
+
# Format parameters with -- prefix if not present
|
74
|
+
formatted_params = {
|
75
|
+
f"--{k}" if not k.startswith("--") else k: v for k, v in parameters.items()
|
76
|
+
}
|
77
|
+
|
78
|
+
# Generate the :root block
|
79
|
+
root_block = [":root {"]
|
80
|
+
for var_name, value in sorted(formatted_params.items()):
|
81
|
+
if var_name in self.variables:
|
82
|
+
root_block.append(f" {var_name}: {value};")
|
83
|
+
root_block.append("}")
|
84
|
+
|
85
|
+
return "\n".join(root_block)
|
86
|
+
|
87
|
+
def apply_parameters(self, parameters: dict) -> Optional[str]:
|
88
|
+
"""
|
89
|
+
Generate the complete CSS with the :root block and original CSS content.
|
90
|
+
|
91
|
+
Args:
|
92
|
+
**parameters: Keyword arguments where keys are variable names and values are their values
|
93
|
+
|
94
|
+
Returns:
|
95
|
+
str: Complete CSS with :root block and original content, or None if validation fails
|
96
|
+
"""
|
97
|
+
root_block = self.generate_root(**parameters)
|
98
|
+
if root_block is None:
|
99
|
+
return None
|
100
|
+
|
101
|
+
return f"{root_block}\n\n{self.css_content}"
|
102
|
+
|
103
|
+
|
104
|
+
# Example usage
|
105
|
+
if __name__ == "__main__":
|
106
|
+
import doctest
|
107
|
+
|
108
|
+
doctest.testmod()
|