edsl 0.1.33__py3-none-any.whl → 0.1.33.dev1__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.
Files changed (180) hide show
  1. edsl/Base.py +3 -9
  2. edsl/__init__.py +3 -8
  3. edsl/__version__.py +1 -1
  4. edsl/agents/Agent.py +8 -40
  5. edsl/agents/AgentList.py +0 -43
  6. edsl/agents/Invigilator.py +219 -135
  7. edsl/agents/InvigilatorBase.py +59 -148
  8. edsl/agents/{PromptConstructor.py → PromptConstructionMixin.py} +89 -138
  9. edsl/agents/__init__.py +0 -1
  10. edsl/config.py +56 -47
  11. edsl/coop/coop.py +7 -50
  12. edsl/data/Cache.py +1 -35
  13. edsl/data_transfer_models.py +38 -73
  14. edsl/enums.py +0 -4
  15. edsl/exceptions/language_models.py +1 -25
  16. edsl/exceptions/questions.py +5 -62
  17. edsl/exceptions/results.py +0 -4
  18. edsl/inference_services/AnthropicService.py +11 -13
  19. edsl/inference_services/AwsBedrock.py +17 -19
  20. edsl/inference_services/AzureAI.py +20 -37
  21. edsl/inference_services/GoogleService.py +12 -16
  22. edsl/inference_services/GroqService.py +0 -2
  23. edsl/inference_services/InferenceServiceABC.py +3 -58
  24. edsl/inference_services/OpenAIService.py +54 -48
  25. edsl/inference_services/models_available_cache.py +6 -0
  26. edsl/inference_services/registry.py +0 -6
  27. edsl/jobs/Answers.py +12 -10
  28. edsl/jobs/Jobs.py +21 -36
  29. edsl/jobs/buckets/BucketCollection.py +15 -24
  30. edsl/jobs/buckets/TokenBucket.py +14 -93
  31. edsl/jobs/interviews/Interview.py +78 -366
  32. edsl/jobs/interviews/InterviewExceptionEntry.py +19 -85
  33. edsl/jobs/interviews/InterviewTaskBuildingMixin.py +286 -0
  34. edsl/jobs/interviews/{InterviewExceptionCollection.py → interview_exception_tracking.py} +68 -14
  35. edsl/jobs/interviews/retry_management.py +37 -0
  36. edsl/jobs/runners/JobsRunnerAsyncio.py +175 -146
  37. edsl/jobs/runners/JobsRunnerStatusMixin.py +333 -0
  38. edsl/jobs/tasks/QuestionTaskCreator.py +23 -30
  39. edsl/jobs/tasks/TaskHistory.py +213 -148
  40. edsl/language_models/LanguageModel.py +156 -261
  41. edsl/language_models/ModelList.py +2 -2
  42. edsl/language_models/RegisterLanguageModelsMeta.py +29 -14
  43. edsl/language_models/registry.py +6 -23
  44. edsl/language_models/repair.py +19 -0
  45. edsl/prompts/Prompt.py +2 -52
  46. edsl/questions/AnswerValidatorMixin.py +26 -23
  47. edsl/questions/QuestionBase.py +249 -329
  48. edsl/questions/QuestionBudget.py +41 -99
  49. edsl/questions/QuestionCheckBox.py +35 -227
  50. edsl/questions/QuestionExtract.py +27 -98
  51. edsl/questions/QuestionFreeText.py +29 -52
  52. edsl/questions/QuestionFunctional.py +0 -7
  53. edsl/questions/QuestionList.py +22 -141
  54. edsl/questions/QuestionMultipleChoice.py +65 -159
  55. edsl/questions/QuestionNumerical.py +46 -88
  56. edsl/questions/QuestionRank.py +24 -182
  57. edsl/questions/RegisterQuestionsMeta.py +12 -31
  58. edsl/questions/__init__.py +4 -3
  59. edsl/questions/derived/QuestionLikertFive.py +5 -10
  60. edsl/questions/derived/QuestionLinearScale.py +2 -15
  61. edsl/questions/derived/QuestionTopK.py +1 -10
  62. edsl/questions/derived/QuestionYesNo.py +3 -24
  63. edsl/questions/descriptors.py +7 -43
  64. edsl/questions/question_registry.py +2 -6
  65. edsl/results/Dataset.py +0 -20
  66. edsl/results/DatasetExportMixin.py +48 -46
  67. edsl/results/Result.py +5 -32
  68. edsl/results/Results.py +46 -135
  69. edsl/results/ResultsDBMixin.py +3 -3
  70. edsl/scenarios/FileStore.py +10 -71
  71. edsl/scenarios/Scenario.py +25 -96
  72. edsl/scenarios/ScenarioImageMixin.py +2 -2
  73. edsl/scenarios/ScenarioList.py +39 -361
  74. edsl/scenarios/ScenarioListExportMixin.py +0 -9
  75. edsl/scenarios/ScenarioListPdfMixin.py +4 -150
  76. edsl/study/SnapShot.py +1 -8
  77. edsl/study/Study.py +0 -32
  78. edsl/surveys/Rule.py +1 -10
  79. edsl/surveys/RuleCollection.py +5 -21
  80. edsl/surveys/Survey.py +310 -636
  81. edsl/surveys/SurveyExportMixin.py +9 -71
  82. edsl/surveys/SurveyFlowVisualizationMixin.py +1 -2
  83. edsl/surveys/SurveyQualtricsImport.py +4 -75
  84. edsl/utilities/gcp_bucket/simple_example.py +9 -0
  85. edsl/utilities/utilities.py +1 -9
  86. {edsl-0.1.33.dist-info → edsl-0.1.33.dev1.dist-info}/METADATA +2 -5
  87. edsl-0.1.33.dev1.dist-info/RECORD +209 -0
  88. edsl/TemplateLoader.py +0 -24
  89. edsl/auto/AutoStudy.py +0 -117
  90. edsl/auto/StageBase.py +0 -230
  91. edsl/auto/StageGenerateSurvey.py +0 -178
  92. edsl/auto/StageLabelQuestions.py +0 -125
  93. edsl/auto/StagePersona.py +0 -61
  94. edsl/auto/StagePersonaDimensionValueRanges.py +0 -88
  95. edsl/auto/StagePersonaDimensionValues.py +0 -74
  96. edsl/auto/StagePersonaDimensions.py +0 -69
  97. edsl/auto/StageQuestions.py +0 -73
  98. edsl/auto/SurveyCreatorPipeline.py +0 -21
  99. edsl/auto/utilities.py +0 -224
  100. edsl/coop/PriceFetcher.py +0 -58
  101. edsl/inference_services/MistralAIService.py +0 -120
  102. edsl/inference_services/TestService.py +0 -80
  103. edsl/inference_services/TogetherAIService.py +0 -170
  104. edsl/jobs/FailedQuestion.py +0 -78
  105. edsl/jobs/runners/JobsRunnerStatus.py +0 -331
  106. edsl/language_models/fake_openai_call.py +0 -15
  107. edsl/language_models/fake_openai_service.py +0 -61
  108. edsl/language_models/utilities.py +0 -61
  109. edsl/questions/QuestionBaseGenMixin.py +0 -133
  110. edsl/questions/QuestionBasePromptsMixin.py +0 -266
  111. edsl/questions/Quick.py +0 -41
  112. edsl/questions/ResponseValidatorABC.py +0 -170
  113. edsl/questions/decorators.py +0 -21
  114. edsl/questions/prompt_templates/question_budget.jinja +0 -13
  115. edsl/questions/prompt_templates/question_checkbox.jinja +0 -32
  116. edsl/questions/prompt_templates/question_extract.jinja +0 -11
  117. edsl/questions/prompt_templates/question_free_text.jinja +0 -3
  118. edsl/questions/prompt_templates/question_linear_scale.jinja +0 -11
  119. edsl/questions/prompt_templates/question_list.jinja +0 -17
  120. edsl/questions/prompt_templates/question_multiple_choice.jinja +0 -33
  121. edsl/questions/prompt_templates/question_numerical.jinja +0 -37
  122. edsl/questions/templates/__init__.py +0 -0
  123. edsl/questions/templates/budget/__init__.py +0 -0
  124. edsl/questions/templates/budget/answering_instructions.jinja +0 -7
  125. edsl/questions/templates/budget/question_presentation.jinja +0 -7
  126. edsl/questions/templates/checkbox/__init__.py +0 -0
  127. edsl/questions/templates/checkbox/answering_instructions.jinja +0 -10
  128. edsl/questions/templates/checkbox/question_presentation.jinja +0 -22
  129. edsl/questions/templates/extract/__init__.py +0 -0
  130. edsl/questions/templates/extract/answering_instructions.jinja +0 -7
  131. edsl/questions/templates/extract/question_presentation.jinja +0 -1
  132. edsl/questions/templates/free_text/__init__.py +0 -0
  133. edsl/questions/templates/free_text/answering_instructions.jinja +0 -0
  134. edsl/questions/templates/free_text/question_presentation.jinja +0 -1
  135. edsl/questions/templates/likert_five/__init__.py +0 -0
  136. edsl/questions/templates/likert_five/answering_instructions.jinja +0 -10
  137. edsl/questions/templates/likert_five/question_presentation.jinja +0 -12
  138. edsl/questions/templates/linear_scale/__init__.py +0 -0
  139. edsl/questions/templates/linear_scale/answering_instructions.jinja +0 -5
  140. edsl/questions/templates/linear_scale/question_presentation.jinja +0 -5
  141. edsl/questions/templates/list/__init__.py +0 -0
  142. edsl/questions/templates/list/answering_instructions.jinja +0 -4
  143. edsl/questions/templates/list/question_presentation.jinja +0 -5
  144. edsl/questions/templates/multiple_choice/__init__.py +0 -0
  145. edsl/questions/templates/multiple_choice/answering_instructions.jinja +0 -9
  146. edsl/questions/templates/multiple_choice/html.jinja +0 -0
  147. edsl/questions/templates/multiple_choice/question_presentation.jinja +0 -12
  148. edsl/questions/templates/numerical/__init__.py +0 -0
  149. edsl/questions/templates/numerical/answering_instructions.jinja +0 -8
  150. edsl/questions/templates/numerical/question_presentation.jinja +0 -7
  151. edsl/questions/templates/rank/__init__.py +0 -0
  152. edsl/questions/templates/rank/answering_instructions.jinja +0 -11
  153. edsl/questions/templates/rank/question_presentation.jinja +0 -15
  154. edsl/questions/templates/top_k/__init__.py +0 -0
  155. edsl/questions/templates/top_k/answering_instructions.jinja +0 -8
  156. edsl/questions/templates/top_k/question_presentation.jinja +0 -22
  157. edsl/questions/templates/yes_no/__init__.py +0 -0
  158. edsl/questions/templates/yes_no/answering_instructions.jinja +0 -6
  159. edsl/questions/templates/yes_no/question_presentation.jinja +0 -12
  160. edsl/results/DatasetTree.py +0 -145
  161. edsl/results/Selector.py +0 -118
  162. edsl/results/tree_explore.py +0 -115
  163. edsl/surveys/instructions/ChangeInstruction.py +0 -47
  164. edsl/surveys/instructions/Instruction.py +0 -34
  165. edsl/surveys/instructions/InstructionCollection.py +0 -77
  166. edsl/surveys/instructions/__init__.py +0 -0
  167. edsl/templates/error_reporting/base.html +0 -24
  168. edsl/templates/error_reporting/exceptions_by_model.html +0 -35
  169. edsl/templates/error_reporting/exceptions_by_question_name.html +0 -17
  170. edsl/templates/error_reporting/exceptions_by_type.html +0 -17
  171. edsl/templates/error_reporting/interview_details.html +0 -116
  172. edsl/templates/error_reporting/interviews.html +0 -10
  173. edsl/templates/error_reporting/overview.html +0 -5
  174. edsl/templates/error_reporting/performance_plot.html +0 -2
  175. edsl/templates/error_reporting/report.css +0 -74
  176. edsl/templates/error_reporting/report.html +0 -118
  177. edsl/templates/error_reporting/report.js +0 -25
  178. edsl-0.1.33.dist-info/RECORD +0 -295
  179. {edsl-0.1.33.dist-info → edsl-0.1.33.dev1.dist-info}/LICENSE +0 -0
  180. {edsl-0.1.33.dist-info → edsl-0.1.33.dev1.dist-info}/WHEEL +0 -0
@@ -1,170 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from pydantic import BaseModel, Field, field_validator
3
-
4
- # from decimal import Decimal
5
- from typing import Optional, Any, List, TypedDict
6
-
7
- from edsl.exceptions import QuestionAnswerValidationError
8
- from pydantic import ValidationError
9
-
10
-
11
- class BaseResponse(BaseModel):
12
- answer: Any
13
- comment: Optional[str] = None
14
- generated_tokens: Optional[str] = None
15
-
16
-
17
- class ResponseValidatorABC(ABC):
18
- required_params: List[str] = []
19
-
20
- def __init_subclass__(cls, **kwargs):
21
- super().__init_subclass__(**kwargs)
22
- required_class_vars = ["required_params", "valid_examples", "invalid_examples"]
23
- for var in required_class_vars:
24
- if not hasattr(cls, var):
25
- raise ValueError(f"Class {cls.__name__} must have a '{var}' attribute.")
26
-
27
- def __init__(
28
- self,
29
- response_model: type[BaseModel],
30
- exception_to_throw: Optional[Exception] = None,
31
- override_answer: Optional[dict] = None,
32
- **kwargs,
33
- ):
34
- self.response_model = response_model
35
- self.exception_to_throw = exception_to_throw # for testing
36
- self.override_answer = override_answer # for testing
37
- self.original_exception = None
38
-
39
- # Validate required parameters
40
- missing_params = [
41
- param for param in self.required_params if param not in kwargs
42
- ]
43
- if missing_params:
44
- raise ValueError(
45
- f"Missing required parameters: {', '.join(missing_params)}"
46
- )
47
-
48
- # Set attributes
49
- for key, value in kwargs.items():
50
- setattr(self, key, value)
51
-
52
- if not hasattr(self, "permissive"):
53
- self.permissive = False
54
-
55
- self.fixes_tried = 0
56
-
57
- class RawEdslAnswerDict(TypedDict):
58
- answer: Any
59
- comment: Optional[str]
60
- generated_tokens: Optional[str]
61
-
62
- def _preprocess(self, data: RawEdslAnswerDict) -> RawEdslAnswerDict:
63
- """This is for testing purposes. A question can be given an exception to throw or an answer to always return.
64
-
65
- >>> rv = ResponseValidatorABC.example()
66
- >>> rv.override_answer = {"answer": 42}
67
- >>> rv.validate({"answer": 23})
68
- {'answer': 42, 'comment': None, 'generated_tokens': None}
69
- """
70
- if self.exception_to_throw:
71
- raise self.exception_to_throw
72
- return self.override_answer if self.override_answer else data
73
-
74
- def _base_validate(self, data: RawEdslAnswerDict) -> BaseModel:
75
- """This is the main validation function. It takes the response_model and checks the data against it, returning the instantiated model.
76
-
77
- >>> rv = ResponseValidatorABC.example("numerical")
78
- >>> rv._base_validate({"answer": 42})
79
- ConstrainedNumericResponse(answer=42, comment=None, generated_tokens=None)
80
- """
81
- try:
82
- return self.response_model(**data)
83
- except ValidationError as e:
84
- raise QuestionAnswerValidationError(e, data=data, model=self.response_model)
85
-
86
- def post_validation_answer_convert(self, data):
87
- return data
88
-
89
- class EdslAnswerDict(TypedDict):
90
- answer: Any
91
- comment: Optional[str]
92
- generated_tokens: Optional[str]
93
-
94
- def validate(
95
- self, raw_edsl_answer_dict: RawEdslAnswerDict, fix=False, verbose=False
96
- ) -> EdslAnswerDict:
97
- """This is the main validation function.
98
-
99
- >>> rv = ResponseValidatorABC.example("numerical")
100
- >>> rv.validate({"answer": 42})
101
- {'answer': 42, 'comment': None, 'generated_tokens': None}
102
- >>> rv.max_value
103
- 86.7
104
- >>> rv.validate({"answer": "120"})
105
- Traceback (most recent call last):
106
- ...
107
- edsl.exceptions.questions.QuestionAnswerValidationError:...
108
- >>> from edsl import QuestionNumerical
109
- >>> q = QuestionNumerical.example()
110
- >>> q.permissive = True
111
- >>> rv = q.response_validator
112
- >>> rv.validate({"answer": "120"})
113
- {'answer': 120, 'comment': None, 'generated_tokens': None}
114
- >>> rv.validate({"answer": "poo"})
115
- Traceback (most recent call last):
116
- ...
117
- edsl.exceptions.questions.QuestionAnswerValidationError:...
118
- """
119
- proposed_edsl_answer_dict = self._preprocess(raw_edsl_answer_dict)
120
- try:
121
- pydantic_edsl_answer: BaseModel = self._base_validate(
122
- proposed_edsl_answer_dict
123
- )
124
- edsl_answer_dict = self._extract_answer(pydantic_edsl_answer)
125
- return self._post_process(edsl_answer_dict)
126
- except QuestionAnswerValidationError as e:
127
- if verbose:
128
- print(f"Failed to validate {raw_edsl_answer_dict}; {str(e)}")
129
- return self._handle_exception(e, raw_edsl_answer_dict)
130
-
131
- def _handle_exception(self, e: Exception, raw_edsl_answer_dict) -> EdslAnswerDict:
132
- if self.fixes_tried == 0:
133
- self.original_exception = e
134
-
135
- if self.fixes_tried == 0 and hasattr(self, "fix"):
136
- self.fixes_tried += 1
137
- fixed_data = self.fix(raw_edsl_answer_dict)
138
- try:
139
- return self.validate(fixed_data, fix=True)
140
- except Exception as e:
141
- pass # we don't log failed fixes
142
-
143
- raise QuestionAnswerValidationError(
144
- self.original_exception,
145
- data=raw_edsl_answer_dict,
146
- model=self.response_model,
147
- )
148
-
149
- def _check_constraints(self, pydantic_edsl_answer: BaseModel) -> dict:
150
- pass
151
-
152
- def _extract_answer(self, response: BaseModel) -> EdslAnswerDict:
153
- return response.model_dump()
154
-
155
- def _post_process(self, edsl_answer_dict: EdslAnswerDict) -> EdslAnswerDict:
156
- return edsl_answer_dict
157
-
158
- @classmethod
159
- def example(cls, question_type="numerical"):
160
- from edsl import Question
161
-
162
- q = Question.example(question_type)
163
- return q.response_validator
164
-
165
-
166
- # Example usage
167
- if __name__ == "__main__":
168
- import doctest
169
-
170
- doctest.testmod(optionflags=doctest.ELLIPSIS)
@@ -1,21 +0,0 @@
1
- from typing import Optional, Callable, TypeVar
2
-
3
- T = TypeVar("T")
4
-
5
-
6
- def inject_exception(func: Callable[..., T]) -> Callable[..., T]:
7
- def wrapper(
8
- cls,
9
- exception_to_throw: Optional[Exception] = None,
10
- override_answer: Optional[dict] = None,
11
- *args,
12
- **kwargs
13
- ) -> T:
14
- base_instance = func(cls, *args, **kwargs)
15
- if exception_to_throw:
16
- base_instance.exception_to_throw = exception_to_throw
17
- if override_answer:
18
- base_instance.override_answer = override_answer
19
- return base_instance
20
-
21
- return wrapper
@@ -1,13 +0,0 @@
1
- You are being asked the following question: {{question_text}}
2
- The options are:
3
- {% for option in question_options %}
4
- {{ loop.index0 }}: {{option}}
5
- {% endfor %}
6
- Return a valid JSON formatted as follows, with a dictionary for your "answer"
7
- where the keys are the option numbers and the values are the amounts you want
8
- to allocate to the options, and the sum of the values is {{budget_sum}}:
9
-
10
- {"answer": {<put dict of option numbers and allocation amounts here>}, "comment": "<put explanation here>"}
11
- Example response for a budget of 100 and 4 options:
12
- {"answer": {"0": 25, "1": 25, "2": 25, "3": 25}, "comment": "I allocated 25 to each option."}
13
- There must be an allocation listed for each item (including 0).
@@ -1,32 +0,0 @@
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
-
13
- {# Restrictions #}
14
- {% if min_selections != None and max_selections != None and min_selections == max_selections %}
15
- You must select exactly {{min_selections}} options.
16
- {% elif min_selections != None and max_selections != None %}
17
- Minimum number of options that must be selected: {{min_selections}}.
18
- Maximum number of options that must be selected: {{max_selections}}.
19
- {% elif min_selections != None %}
20
- Minimum number of options that must be selected: {{min_selections}}.
21
- {% elif max_selections != None %}
22
- Maximum number of options that must be selected: {{max_selections}}.
23
- {% endif %}
24
-
25
- {# Answering Instructions #}
26
- Please respond with valid JSON, formatted like so:
27
- {% if include_comment %}
28
- {"answer": [<put comma-separated list here>], "comment": "<put explanation here>"}
29
- {% else %}
30
- {"answer": [<put comma-separated list here>]}
31
- {% endif %}
32
-
@@ -1,11 +0,0 @@
1
- {{question_text}}
2
-
3
- Create an ANSWER should be formatted like this:
4
- {{ answer_template }}
5
-
6
- It should have the same keys but values extracted from the input.
7
- If the value of a key is not present in the input, fill with "null".
8
-
9
- Return a valid JSON formatted like this:
10
- {"answer": <put your ANSWER here>}
11
- ONLY RETURN THE JSON, AND NOTHING ELSE.
@@ -1,3 +0,0 @@
1
- {{question_text}}
2
- Return a valid JSON formatted like this:
3
- {"answer": "<put free text answer here>"}
@@ -1,11 +0,0 @@
1
- {{question_text}}
2
- {% for option in question_options %}
3
- {{option}} : {{ option_labels.get(option, "") }}
4
- {% endfor %}
5
- Return a valid JSON formatted like this, selecting only the code of the option (codes start at 0):
6
- {% if include_comment %}
7
- {"answer": <put answer code here>, "comment": <comment>}
8
- {% else %}
9
- {"answer": <put answer here>}
10
- {% endif %}
11
- Only 1 option may be selected.
@@ -1,17 +0,0 @@
1
- {{question_text}}
2
-
3
- Your response should be only a valid JSON in the following format:
4
- {% if include_comment %}
5
- {
6
- "answer": [<comma-separated list of responsive words or phrases as independent strings>],
7
- "comment": "<put comment here>"
8
- }
9
- {% else %}
10
- {
11
- "answer": [<comma-separated list of responsive words or phrases as independent strings>],
12
- }
13
- {% endif %}
14
-
15
- {% if max_list_items is not none %}
16
- The list must not contain more than {{ max_list_items }} items.
17
- {% endif %}
@@ -1,33 +0,0 @@
1
- {# Question Presention #}
2
- {{question_text}}
3
-
4
- {% if use_code %}
5
- {% for option in question_options %}
6
- {{ loop.index0 }}: {{option}}
7
- {% endfor %}
8
- {% else %}
9
- {% for option in question_options %}
10
- {{option}}
11
- {% endfor %}
12
- {% endif %}
13
-
14
- Only 1 option may be selected.
15
-
16
- {# Answering Instructions #}
17
- Return a valid JSON formatted like this:
18
-
19
- {% if use_code %}
20
- {% if include_comment %}
21
- {"answer": <put answer code here>, "comment": "<put explanation here>"}
22
- {% else %}
23
- {"answer": <put answer code here>}
24
- {% endif %}
25
- {% else %}
26
-
27
- {% if include_comment %}
28
- {"answer": <text of option>, "comment": "<put explanation here>"}
29
- {% else %}
30
- {"answer": <put option here>}
31
- {% endif %}
32
-
33
- {% endif %}
@@ -1,37 +0,0 @@
1
- You are being asked a question that requires a numerical response
2
- in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
3
-
4
- Your response must be in the following format:
5
-
6
- {% if include_comment %}
7
- {"answer": "<your numerical answer here>", "comment": "<your explanation here>"}
8
- {% else %}
9
- {"answer": "<your numerical answer here>"}
10
- {% endif %}
11
-
12
- You must only include an integer or decimal in the quoted "answer" part of your response.
13
-
14
- Here is an example of a valid response:
15
- {% if include_comment %}
16
- {"answer": "100", "comment": "This is my explanation..."}
17
- {% else %}
18
- {"answer": "100"}
19
- {% endif %}
20
-
21
- Here is an example of a response that is invalid because the "answer" includes words:
22
- {"answer": "I don't know.", ...}
23
-
24
- If your response is equivalent to zero, your formatted response should look like this:
25
- {% if include_comment %}
26
- {"answer": "0", "comment": "This is my explanation..."}
27
- {% else %}
28
- {"answer": "0"}
29
- {% endif %}
30
-
31
- You are being asked the following question: {{question_text}}
32
- {% if min_value is not none %}
33
- Minimum answer value: {{min_value}}
34
- {% endif %}
35
- {% if max_value is not none %}
36
- Maximum answer value: {{max_value}}
37
- {% endif %}
File without changes
File without changes
@@ -1,7 +0,0 @@
1
- Return only a comma-separated list the values in the same order as the options, with 0s included, on one line, in square braces.
2
-
3
- Example: if there are 4 options, the response should be "[25,25,25,25]" to allocate 25 to each option.
4
-
5
- {% if include_comment %}
6
- After the answer, you can put a comment explaining your choice on the next line.
7
- {% endif %}
@@ -1,7 +0,0 @@
1
- {{question_text}}
2
- The options are
3
- {% for option in question_options %}
4
- {{ loop.index0 }}: {{option}}
5
- {% endfor %}
6
- Allocate your budget of {{budget_sum}} among the options.
7
-
File without changes
@@ -1,10 +0,0 @@
1
- {# Answering Instructions #}
2
- {% if use_code %}
3
- Please respond only with a comma-separated list of the code of the options that apply, with square brackets. E.g., [0, 1, 3]
4
- {% else %}
5
- Please respond only with a comma-separated list of the options that apply, 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
-
@@ -1,22 +0,0 @@
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 %}
File without changes
@@ -1,7 +0,0 @@
1
- An ANSWER should be formatted like this:
2
-
3
- {{ answer_template }}
4
-
5
- It should have the same keys but values extracted from the input.
6
- If the value of a key is not present in the input, fill with "null".
7
- Put any comments in the next line after the answer.
@@ -1 +0,0 @@
1
- {{question_text}}
File without changes
@@ -1 +0,0 @@
1
- {{question_text}}
File without changes
@@ -1,10 +0,0 @@
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 %}
10
-
@@ -1,12 +0,0 @@
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
- Only 1 option may be selected.
File without changes
@@ -1,5 +0,0 @@
1
- {# Answering Instructions #}
2
- Respond only with the code corresponding to one of the options. E.g., "1" or "5" by itself.
3
- {% if include_comment %}
4
- After the answer, you can put a comment explaining why you chose that option on the next line.
5
- {% endif %}
@@ -1,5 +0,0 @@
1
- {{question_text}}
2
- {% for option in question_options %}
3
- {{option}} : {{ option_labels.get(option, "") }}
4
- {% endfor %}
5
- Only 1 option may be selected.
File without changes
@@ -1,4 +0,0 @@
1
- Return your answers on one line, in a comma-separated list of your responses, with square brackets and each answer in quotes E.g., ["A", "B", "C"]
2
- {% if include_comment %}
3
- After the answers, you can put a comment explaining your choice on the next line.
4
- {% endif %}
@@ -1,5 +0,0 @@
1
- {{question_text}}
2
-
3
- {% if max_list_items is not none %}
4
- The list must not contain more than {{ max_list_items }} items.
5
- {% endif %}
File without changes
@@ -1,9 +0,0 @@
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 %}
File without changes
@@ -1,12 +0,0 @@
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
- Only 1 option may be selected.
File without changes
@@ -1,8 +0,0 @@
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
- If you cannot determine the answer, report 'None'
5
-
6
- {% if include_comment %}
7
- After the answer, put a comment explaining your choice on the next line.
8
- {% endif %}
@@ -1,7 +0,0 @@
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
- {% endif %}
File without changes
@@ -1,11 +0,0 @@
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 +0,0 @@
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 %}
File without changes
@@ -1,8 +0,0 @@
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 +0,0 @@
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 %}
File without changes
@@ -1,6 +0,0 @@
1
- {# Answering Instructions #}
2
- Please reponse with just your answer.
3
-
4
- {% if include_comment %}
5
- After the answer, you can put a comment explaining your reponse.
6
- {% endif %}
@@ -1,12 +0,0 @@
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
- Only 1 option may be selected.