edsl 0.1.37.dev6__tar.gz → 0.1.38.dev1__tar.gz

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 (311) hide show
  1. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/LICENSE +21 -21
  2. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/PKG-INFO +1 -1
  3. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/README.md +55 -55
  4. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/Base.py +303 -303
  5. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/BaseDiff.py +260 -260
  6. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/TemplateLoader.py +24 -24
  7. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/__init__.py +48 -48
  8. edsl-0.1.38.dev1/edsl/__version__.py +1 -0
  9. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/Agent.py +855 -855
  10. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/AgentList.py +350 -350
  11. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/Invigilator.py +222 -222
  12. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/InvigilatorBase.py +284 -284
  13. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/PromptConstructor.py +353 -353
  14. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/__init__.py +3 -3
  15. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/descriptors.py +99 -99
  16. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/agents/prompt_helpers.py +129 -129
  17. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/AutoStudy.py +117 -117
  18. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StageBase.py +230 -230
  19. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StageGenerateSurvey.py +178 -178
  20. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StageLabelQuestions.py +125 -125
  21. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StagePersona.py +61 -61
  22. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StagePersonaDimensionValueRanges.py +88 -88
  23. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StagePersonaDimensionValues.py +74 -74
  24. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StagePersonaDimensions.py +69 -69
  25. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/StageQuestions.py +73 -73
  26. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/SurveyCreatorPipeline.py +21 -21
  27. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/auto/utilities.py +224 -224
  28. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/base/Base.py +289 -289
  29. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/config.py +149 -149
  30. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/AgentConstructionMixin.py +160 -160
  31. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/Conjure.py +62 -62
  32. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputData.py +659 -659
  33. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputDataCSV.py +48 -48
  34. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputDataMixinQuestionStats.py +182 -182
  35. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputDataPyRead.py +91 -91
  36. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputDataSPSS.py +8 -8
  37. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/InputDataStata.py +8 -8
  38. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/QuestionOptionMixin.py +76 -76
  39. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/QuestionTypeMixin.py +23 -23
  40. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/RawQuestion.py +65 -65
  41. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/SurveyResponses.py +7 -7
  42. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/__init__.py +9 -9
  43. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/naming_utilities.py +263 -263
  44. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/utilities.py +201 -201
  45. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conversation/Conversation.py +290 -290
  46. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conversation/car_buying.py +58 -58
  47. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conversation/chips.py +95 -95
  48. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conversation/mug_negotiation.py +81 -81
  49. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conversation/next_speaker_utilities.py +93 -93
  50. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/coop/PriceFetcher.py +54 -54
  51. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/coop/__init__.py +2 -2
  52. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/coop/coop.py +958 -958
  53. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/coop/utils.py +131 -131
  54. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/Cache.py +527 -527
  55. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/CacheEntry.py +228 -228
  56. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/CacheHandler.py +149 -149
  57. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/RemoteCacheSync.py +97 -97
  58. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/SQLiteDict.py +292 -292
  59. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/__init__.py +4 -4
  60. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data/orm.py +10 -10
  61. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/data_transfer_models.py +73 -73
  62. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/enums.py +173 -173
  63. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/BaseException.py +21 -21
  64. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/__init__.py +54 -54
  65. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/agents.py +38 -38
  66. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/configuration.py +16 -16
  67. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/coop.py +10 -10
  68. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/data.py +14 -14
  69. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/general.py +34 -34
  70. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/jobs.py +33 -33
  71. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/language_models.py +63 -63
  72. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/prompts.py +15 -15
  73. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/questions.py +91 -91
  74. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/results.py +29 -29
  75. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/scenarios.py +22 -22
  76. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/exceptions/surveys.py +37 -37
  77. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/AnthropicService.py +87 -87
  78. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/AwsBedrock.py +120 -120
  79. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/AzureAI.py +217 -217
  80. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/DeepInfraService.py +18 -18
  81. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/GoogleService.py +156 -156
  82. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/GroqService.py +20 -20
  83. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/InferenceServiceABC.py +147 -147
  84. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/InferenceServicesCollection.py +97 -97
  85. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/MistralAIService.py +123 -123
  86. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/OllamaService.py +18 -18
  87. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/OpenAIService.py +224 -224
  88. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/TestService.py +89 -89
  89. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/TogetherAIService.py +170 -170
  90. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/models_available_cache.py +118 -118
  91. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/rate_limits_cache.py +25 -25
  92. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/registry.py +39 -39
  93. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/write_available.py +10 -10
  94. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/Answers.py +56 -56
  95. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/Jobs.py +1347 -1347
  96. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/__init__.py +1 -1
  97. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/buckets/BucketCollection.py +63 -63
  98. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/buckets/ModelBuckets.py +65 -65
  99. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/buckets/TokenBucket.py +248 -248
  100. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/Interview.py +661 -661
  101. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewExceptionCollection.py +99 -99
  102. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewExceptionEntry.py +186 -186
  103. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewStatistic.py +63 -63
  104. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewStatisticsCollection.py +25 -25
  105. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewStatusDictionary.py +78 -78
  106. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/InterviewStatusLog.py +92 -92
  107. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/ReportErrors.py +66 -66
  108. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/interviews/interview_status_enum.py +9 -9
  109. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/runners/JobsRunnerAsyncio.py +338 -338
  110. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/runners/JobsRunnerStatus.py +332 -332
  111. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tasks/QuestionTaskCreator.py +242 -242
  112. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tasks/TaskCreators.py +64 -64
  113. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tasks/TaskHistory.py +442 -442
  114. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tasks/TaskStatusLog.py +23 -23
  115. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tasks/task_status_enum.py +163 -163
  116. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tokens/InterviewTokenUsage.py +27 -27
  117. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/tokens/TokenUsage.py +34 -34
  118. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/KeyLookup.py +30 -30
  119. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/LanguageModel.py +706 -706
  120. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/ModelList.py +102 -102
  121. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/RegisterLanguageModelsMeta.py +184 -184
  122. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/__init__.py +3 -3
  123. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/fake_openai_call.py +15 -15
  124. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/fake_openai_service.py +61 -61
  125. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/registry.py +137 -137
  126. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/repair.py +156 -156
  127. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/unused/ReplicateBase.py +83 -83
  128. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/language_models/utilities.py +64 -64
  129. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/notebooks/Notebook.py +259 -259
  130. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/notebooks/__init__.py +1 -1
  131. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/prompts/Prompt.py +357 -357
  132. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/prompts/__init__.py +2 -2
  133. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/AnswerValidatorMixin.py +289 -289
  134. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionBase.py +656 -656
  135. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionBaseGenMixin.py +161 -161
  136. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionBasePromptsMixin.py +234 -234
  137. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionBudget.py +227 -227
  138. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionCheckBox.py +359 -359
  139. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionExtract.py +183 -183
  140. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionFreeText.py +114 -114
  141. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionFunctional.py +159 -159
  142. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionList.py +231 -231
  143. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionMultipleChoice.py +286 -286
  144. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionNumerical.py +153 -153
  145. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/QuestionRank.py +324 -324
  146. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/Quick.py +41 -41
  147. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/RegisterQuestionsMeta.py +71 -71
  148. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/ResponseValidatorABC.py +174 -174
  149. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/SimpleAskMixin.py +73 -73
  150. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/__init__.py +26 -26
  151. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/compose_questions.py +98 -98
  152. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/decorators.py +21 -21
  153. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/derived/QuestionLikertFive.py +76 -76
  154. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/derived/QuestionLinearScale.py +87 -87
  155. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/derived/QuestionTopK.py +91 -91
  156. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/derived/QuestionYesNo.py +82 -82
  157. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/descriptors.py +413 -413
  158. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_budget.jinja +13 -13
  159. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_checkbox.jinja +32 -32
  160. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_extract.jinja +11 -11
  161. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_free_text.jinja +3 -3
  162. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_linear_scale.jinja +11 -11
  163. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_list.jinja +17 -17
  164. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_multiple_choice.jinja +33 -33
  165. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/prompt_templates/question_numerical.jinja +36 -36
  166. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/question_registry.py +147 -147
  167. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/settings.py +12 -12
  168. edsl-0.1.38.dev1/edsl/questions/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  169. edsl-0.1.38.dev1/edsl/questions/templates/budget/__pycache__/__init__.cpython-311.pyc +0 -0
  170. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/budget/answering_instructions.jinja +7 -7
  171. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/budget/question_presentation.jinja +7 -7
  172. edsl-0.1.38.dev1/edsl/questions/templates/checkbox/__pycache__/__init__.cpython-311.pyc +0 -0
  173. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/checkbox/answering_instructions.jinja +10 -10
  174. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/checkbox/question_presentation.jinja +22 -22
  175. edsl-0.1.38.dev1/edsl/questions/templates/extract/__pycache__/__init__.cpython-311.pyc +0 -0
  176. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/extract/answering_instructions.jinja +7 -7
  177. edsl-0.1.38.dev1/edsl/questions/templates/free_text/__pycache__/__init__.cpython-311.pyc +0 -0
  178. edsl-0.1.38.dev1/edsl/questions/templates/likert_five/__pycache__/__init__.cpython-311.pyc +0 -0
  179. {edsl-0.1.37.dev6/edsl/questions/templates/multiple_choice → edsl-0.1.38.dev1/edsl/questions/templates/likert_five}/answering_instructions.jinja +10 -9
  180. {edsl-0.1.37.dev6/edsl/questions/templates/multiple_choice → edsl-0.1.38.dev1/edsl/questions/templates/likert_five}/question_presentation.jinja +11 -11
  181. edsl-0.1.38.dev1/edsl/questions/templates/linear_scale/__pycache__/__init__.cpython-311.pyc +0 -0
  182. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/linear_scale/answering_instructions.jinja +5 -5
  183. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/linear_scale/question_presentation.jinja +5 -5
  184. edsl-0.1.38.dev1/edsl/questions/templates/list/__pycache__/__init__.cpython-311.pyc +0 -0
  185. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/list/answering_instructions.jinja +3 -3
  186. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/list/question_presentation.jinja +5 -5
  187. edsl-0.1.38.dev1/edsl/questions/templates/multiple_choice/__pycache__/__init__.cpython-311.pyc +0 -0
  188. {edsl-0.1.37.dev6/edsl/questions/templates/likert_five → edsl-0.1.38.dev1/edsl/questions/templates/multiple_choice}/answering_instructions.jinja +9 -10
  189. {edsl-0.1.37.dev6/edsl/questions/templates/likert_five → edsl-0.1.38.dev1/edsl/questions/templates/multiple_choice}/question_presentation.jinja +11 -11
  190. edsl-0.1.38.dev1/edsl/questions/templates/numerical/__pycache__/__init__.cpython-311.pyc +0 -0
  191. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/numerical/answering_instructions.jinja +6 -6
  192. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/numerical/question_presentation.jinja +6 -6
  193. edsl-0.1.38.dev1/edsl/questions/templates/rank/__pycache__/__init__.cpython-311.pyc +0 -0
  194. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/rank/answering_instructions.jinja +11 -11
  195. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/rank/question_presentation.jinja +15 -15
  196. edsl-0.1.38.dev1/edsl/questions/templates/top_k/__pycache__/__init__.cpython-311.pyc +0 -0
  197. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/top_k/answering_instructions.jinja +8 -8
  198. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/top_k/question_presentation.jinja +22 -22
  199. edsl-0.1.38.dev1/edsl/questions/templates/yes_no/__pycache__/__init__.cpython-311.pyc +0 -0
  200. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/yes_no/answering_instructions.jinja +6 -6
  201. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/yes_no/question_presentation.jinja +11 -11
  202. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/Dataset.py +293 -293
  203. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/DatasetExportMixin.py +717 -717
  204. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/DatasetTree.py +145 -145
  205. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/Result.py +450 -450
  206. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/Results.py +1071 -1071
  207. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/ResultsDBMixin.py +238 -238
  208. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/ResultsExportMixin.py +43 -43
  209. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/ResultsFetchMixin.py +33 -33
  210. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/ResultsGGMixin.py +121 -121
  211. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/ResultsToolsMixin.py +98 -98
  212. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/Selector.py +135 -135
  213. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/__init__.py +2 -2
  214. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/results/tree_explore.py +115 -115
  215. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/FileStore.py +458 -458
  216. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/Scenario.py +546 -546
  217. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/ScenarioHtmlMixin.py +64 -64
  218. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/ScenarioList.py +1112 -1112
  219. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/ScenarioListExportMixin.py +52 -52
  220. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/ScenarioListPdfMixin.py +261 -261
  221. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/scenarios/__init__.py +4 -4
  222. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/shared.py +1 -1
  223. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/study/ObjectEntry.py +173 -173
  224. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/study/ProofOfWork.py +113 -113
  225. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/study/SnapShot.py +80 -80
  226. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/study/Study.py +528 -528
  227. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/study/__init__.py +4 -4
  228. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/DAG.py +148 -148
  229. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/Memory.py +31 -31
  230. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/MemoryPlan.py +244 -244
  231. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/Rule.py +330 -330
  232. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/RuleCollection.py +387 -387
  233. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/Survey.py +1795 -1795
  234. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/SurveyCSS.py +261 -261
  235. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/SurveyExportMixin.py +259 -259
  236. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/SurveyFlowVisualizationMixin.py +121 -121
  237. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/SurveyQualtricsImport.py +284 -284
  238. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/__init__.py +3 -3
  239. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/base.py +53 -53
  240. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/descriptors.py +56 -56
  241. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/instructions/ChangeInstruction.py +47 -47
  242. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/instructions/Instruction.py +51 -51
  243. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/instructions/InstructionCollection.py +77 -77
  244. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/base.html +23 -23
  245. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/exceptions_by_model.html +34 -34
  246. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/exceptions_by_question_name.html +16 -16
  247. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/exceptions_by_type.html +16 -16
  248. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/interview_details.html +115 -115
  249. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/interviews.html +9 -9
  250. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/overview.html +4 -4
  251. edsl-0.1.38.dev1/edsl/templates/error_reporting/performance_plot.html +2 -0
  252. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/report.css +73 -73
  253. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/report.html +117 -117
  254. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/templates/error_reporting/report.js +25 -25
  255. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/__init__.py +1 -1
  256. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/clusters.py +192 -192
  257. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/embeddings.py +27 -27
  258. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/embeddings_plotting.py +118 -118
  259. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/plotting.py +112 -112
  260. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/tools/summarize.py +18 -18
  261. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/SystemInfo.py +28 -28
  262. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/__init__.py +22 -22
  263. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/ast_utilities.py +25 -25
  264. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/data/Registry.py +6 -6
  265. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/data/__init__.py +1 -1
  266. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/data/scooter_results.json +1 -1
  267. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/decorators.py +77 -77
  268. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/gcp_bucket/cloud_storage.py +96 -96
  269. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/interface.py +627 -627
  270. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/repair_functions.py +28 -28
  271. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/restricted_python.py +70 -70
  272. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/utilities.py +409 -409
  273. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/pyproject.toml +82 -91
  274. edsl-0.1.37.dev6/edsl/__version__.py +0 -1
  275. edsl-0.1.37.dev6/edsl/questions/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  276. edsl-0.1.37.dev6/edsl/questions/templates/budget/__pycache__/__init__.cpython-312.pyc +0 -0
  277. edsl-0.1.37.dev6/edsl/questions/templates/checkbox/__pycache__/__init__.cpython-312.pyc +0 -0
  278. edsl-0.1.37.dev6/edsl/questions/templates/extract/__pycache__/__init__.cpython-312.pyc +0 -0
  279. edsl-0.1.37.dev6/edsl/questions/templates/free_text/__pycache__/__init__.cpython-312.pyc +0 -0
  280. edsl-0.1.37.dev6/edsl/questions/templates/likert_five/__pycache__/__init__.cpython-312.pyc +0 -0
  281. edsl-0.1.37.dev6/edsl/questions/templates/linear_scale/__pycache__/__init__.cpython-312.pyc +0 -0
  282. edsl-0.1.37.dev6/edsl/questions/templates/list/__pycache__/__init__.cpython-312.pyc +0 -0
  283. edsl-0.1.37.dev6/edsl/questions/templates/multiple_choice/__pycache__/__init__.cpython-312.pyc +0 -0
  284. edsl-0.1.37.dev6/edsl/questions/templates/numerical/__pycache__/__init__.cpython-312.pyc +0 -0
  285. edsl-0.1.37.dev6/edsl/questions/templates/rank/__pycache__/__init__.cpython-312.pyc +0 -0
  286. edsl-0.1.37.dev6/edsl/questions/templates/top_k/__pycache__/__init__.cpython-312.pyc +0 -0
  287. edsl-0.1.37.dev6/edsl/questions/templates/yes_no/__pycache__/__init__.cpython-312.pyc +0 -0
  288. edsl-0.1.37.dev6/edsl/templates/error_reporting/performance_plot.html +0 -2
  289. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/conjure/examples/placeholder.txt +0 -0
  290. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/inference_services/__init__.py +0 -0
  291. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/jobs/runners/JobsRunnerStatusData.py +0 -0
  292. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/derived/__init__.py +0 -0
  293. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/__init__.py +0 -0
  294. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/budget/__init__.py +0 -0
  295. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/checkbox/__init__.py +0 -0
  296. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/extract/__init__.py +0 -0
  297. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/extract/question_presentation.jinja +0 -0
  298. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/free_text/__init__.py +0 -0
  299. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/free_text/answering_instructions.jinja +0 -0
  300. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/free_text/question_presentation.jinja +0 -0
  301. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/likert_five/__init__.py +0 -0
  302. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/linear_scale/__init__.py +0 -0
  303. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/list/__init__.py +0 -0
  304. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/multiple_choice/__init__.py +0 -0
  305. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/multiple_choice/html.jinja +0 -0
  306. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/numerical/__init__.py +0 -0
  307. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/rank/__init__.py +0 -0
  308. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/top_k/__init__.py +0 -0
  309. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/questions/templates/yes_no/__init__.py +0 -0
  310. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/surveys/instructions/__init__.py +0 -0
  311. {edsl-0.1.37.dev6 → edsl-0.1.38.dev1}/edsl/utilities/gcp_bucket/__init__.py +0 -0
@@ -1,21 +1,21 @@
1
- The MIT License
2
-
3
- Copyright (c) Apostolos Filippas, John Joseph Horton, Roberta Horton.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
1
+ The MIT License
2
+
3
+ Copyright (c) Apostolos Filippas, John Joseph Horton, Roberta Horton.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.37.dev6
3
+ Version: 0.1.38.dev1
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -1,55 +1,55 @@
1
- # Expected Parrot Domain-Specific Language
2
- <p align="center">
3
- <img src="https://github.com/expectedparrot/edsl/blob/main/static/logo.png?raw=true" alt="edsl.png" width="100"/>
4
- </p>
5
-
6
- The Expected Parrot Domain-Specific Language (EDSL) package lets you conduct computational social science and market research with AI. Use it to design surveys and experiments, simulate responses with large language models, and perform data labeling and other research tasks. Results are formatted as specified datasets and come with built-in methods for analyzing, visualizing, and sharing.
7
-
8
- ## 🔗 Links
9
- - [PyPI](https://pypi.org/project/edsl/)
10
- - [Documentation](https://docs.expectedparrot.com)
11
- - [Getting started](https://docs.expectedparrot.com/en/latest/starter_tutorial.html)
12
- - [Discord](https://discord.com/invite/mxAYkjfy9m)
13
- - [Twitter](https://x.com/ExpectedParrot)
14
- - [LinkedIn](https://www.linkedin.com/company/expectedparrot/)
15
- - [Blog](https://blog.expectedparrot.com)
16
-
17
- ## 🌎 Hello, World!
18
- A quick example:
19
-
20
- ```python
21
- # Import a question type
22
- from edsl import QuestionMultipleChoice
23
-
24
- # Construct a question using the question type template
25
- q = QuestionMultipleChoice(
26
- question_name="example_question",
27
- question_text="How do you feel today?",
28
- question_options=["Bad", "OK", "Good"]
29
- )
30
-
31
- # Run it with the default language model
32
- results = q.run()
33
-
34
- # Inspect the results in a dataset
35
- results.select("example_question").print()
36
- ```
37
-
38
- Output:
39
- ```python
40
- ┏━━━━━━━━━━━━━━━━━━━┓
41
- ┃ answer ┃
42
- ┃ .example_question ┃
43
- ┡━━━━━━━━━━━━━━━━━━━┩
44
- │ Good │
45
- └───────────────────┘
46
- ```
47
-
48
- ## 💻 Requirements
49
- * EDSL is compatible with Python 3.9 - 3.12.
50
- * API keys for large language models that you want to use, stored in a `.env` file.
51
- See instructions on [storing API keys](https://docs.expectedparrot.com/en/latest/api_keys.html).
52
-
53
- ## 💡 Contributions, feature requests & bugs
54
- Interested in contributing? Want us to add a new feature? Found a bug for us to squash?
55
- Please send us an email at [info@expectedparrot.com](mailto:info@expectedparrot.com) or message us at our [Discord channel](https://discord.com/invite/mxAYkjfy9m).
1
+ # Expected Parrot Domain-Specific Language
2
+ <p align="center">
3
+ <img src="https://github.com/expectedparrot/edsl/blob/main/static/logo.png?raw=true" alt="edsl.png" width="100"/>
4
+ </p>
5
+
6
+ The Expected Parrot Domain-Specific Language (EDSL) package lets you conduct computational social science and market research with AI. Use it to design surveys and experiments, simulate responses with large language models, and perform data labeling and other research tasks. Results are formatted as specified datasets and come with built-in methods for analyzing, visualizing, and sharing.
7
+
8
+ ## 🔗 Links
9
+ - [PyPI](https://pypi.org/project/edsl/)
10
+ - [Documentation](https://docs.expectedparrot.com)
11
+ - [Getting started](https://docs.expectedparrot.com/en/latest/starter_tutorial.html)
12
+ - [Discord](https://discord.com/invite/mxAYkjfy9m)
13
+ - [Twitter](https://x.com/ExpectedParrot)
14
+ - [LinkedIn](https://www.linkedin.com/company/expectedparrot/)
15
+ - [Blog](https://blog.expectedparrot.com)
16
+
17
+ ## 🌎 Hello, World!
18
+ A quick example:
19
+
20
+ ```python
21
+ # Import a question type
22
+ from edsl import QuestionMultipleChoice
23
+
24
+ # Construct a question using the question type template
25
+ q = QuestionMultipleChoice(
26
+ question_name="example_question",
27
+ question_text="How do you feel today?",
28
+ question_options=["Bad", "OK", "Good"]
29
+ )
30
+
31
+ # Run it with the default language model
32
+ results = q.run()
33
+
34
+ # Inspect the results in a dataset
35
+ results.select("example_question").print()
36
+ ```
37
+
38
+ Output:
39
+ ```python
40
+ ┏━━━━━━━━━━━━━━━━━━━┓
41
+ ┃ answer ┃
42
+ ┃ .example_question ┃
43
+ ┡━━━━━━━━━━━━━━━━━━━┩
44
+ │ Good │
45
+ └───────────────────┘
46
+ ```
47
+
48
+ ## 💻 Requirements
49
+ * EDSL is compatible with Python 3.9 - 3.12.
50
+ * API keys for large language models that you want to use, stored in a `.env` file.
51
+ See instructions on [storing API keys](https://docs.expectedparrot.com/en/latest/api_keys.html).
52
+
53
+ ## 💡 Contributions, feature requests & bugs
54
+ Interested in contributing? Want us to add a new feature? Found a bug for us to squash?
55
+ Please send us an email at [info@expectedparrot.com](mailto:info@expectedparrot.com) or message us at our [Discord channel](https://discord.com/invite/mxAYkjfy9m).