edsl 0.1.34__tar.gz → 0.1.34.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 (296) hide show
  1. {edsl-0.1.34 → edsl-0.1.34.dev1}/PKG-INFO +1 -1
  2. edsl-0.1.34.dev1/edsl/__version__.py +1 -0
  3. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/PromptConstructor.py +10 -10
  4. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/Jobs.py +10 -91
  5. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/Interview.py +9 -12
  6. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/runners/JobsRunnerAsyncio.py +9 -9
  7. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/LanguageModel.py +2 -2
  8. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/utilities.py +2 -4
  9. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionBase.py +1 -2
  10. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionMultipleChoice.py +3 -3
  11. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/numerical/answering_instructions.jinja +1 -0
  12. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/FileStore.py +5 -0
  13. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/base.py +0 -4
  14. {edsl-0.1.34 → edsl-0.1.34.dev1}/pyproject.toml +19 -20
  15. edsl-0.1.34/edsl/__version__.py +0 -1
  16. {edsl-0.1.34 → edsl-0.1.34.dev1}/LICENSE +0 -0
  17. {edsl-0.1.34 → edsl-0.1.34.dev1}/README.md +0 -0
  18. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/Base.py +0 -0
  19. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/BaseDiff.py +0 -0
  20. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/TemplateLoader.py +0 -0
  21. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/__init__.py +0 -0
  22. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/Agent.py +0 -0
  23. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/AgentList.py +0 -0
  24. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/Invigilator.py +0 -0
  25. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/InvigilatorBase.py +0 -0
  26. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/__init__.py +0 -0
  27. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/descriptors.py +0 -0
  28. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/agents/prompt_helpers.py +0 -0
  29. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/AutoStudy.py +0 -0
  30. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StageBase.py +0 -0
  31. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StageGenerateSurvey.py +0 -0
  32. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StageLabelQuestions.py +0 -0
  33. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StagePersona.py +0 -0
  34. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StagePersonaDimensionValueRanges.py +0 -0
  35. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StagePersonaDimensionValues.py +0 -0
  36. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StagePersonaDimensions.py +0 -0
  37. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/StageQuestions.py +0 -0
  38. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/SurveyCreatorPipeline.py +0 -0
  39. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/auto/utilities.py +0 -0
  40. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/base/Base.py +0 -0
  41. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/config.py +0 -0
  42. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/AgentConstructionMixin.py +0 -0
  43. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/Conjure.py +0 -0
  44. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputData.py +0 -0
  45. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputDataCSV.py +0 -0
  46. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputDataMixinQuestionStats.py +0 -0
  47. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputDataPyRead.py +0 -0
  48. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputDataSPSS.py +0 -0
  49. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/InputDataStata.py +0 -0
  50. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/QuestionOptionMixin.py +0 -0
  51. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/QuestionTypeMixin.py +0 -0
  52. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/RawQuestion.py +0 -0
  53. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/SurveyResponses.py +0 -0
  54. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/__init__.py +0 -0
  55. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/examples/placeholder.txt +0 -0
  56. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/naming_utilities.py +0 -0
  57. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conjure/utilities.py +0 -0
  58. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conversation/Conversation.py +0 -0
  59. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conversation/car_buying.py +0 -0
  60. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conversation/mug_negotiation.py +0 -0
  61. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/conversation/next_speaker_utilities.py +0 -0
  62. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/coop/PriceFetcher.py +0 -0
  63. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/coop/__init__.py +0 -0
  64. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/coop/coop.py +0 -0
  65. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/coop/utils.py +0 -0
  66. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/Cache.py +0 -0
  67. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/CacheEntry.py +0 -0
  68. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/CacheHandler.py +0 -0
  69. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/SQLiteDict.py +0 -0
  70. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/__init__.py +0 -0
  71. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data/orm.py +0 -0
  72. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/data_transfer_models.py +0 -0
  73. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/enums.py +0 -0
  74. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/__init__.py +0 -0
  75. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/agents.py +0 -0
  76. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/configuration.py +0 -0
  77. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/coop.py +0 -0
  78. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/data.py +0 -0
  79. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/general.py +0 -0
  80. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/jobs.py +0 -0
  81. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/language_models.py +0 -0
  82. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/prompts.py +0 -0
  83. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/questions.py +0 -0
  84. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/results.py +0 -0
  85. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/exceptions/surveys.py +0 -0
  86. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/AnthropicService.py +0 -0
  87. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/AwsBedrock.py +0 -0
  88. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/AzureAI.py +0 -0
  89. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/DeepInfraService.py +0 -0
  90. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/GoogleService.py +0 -0
  91. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/GroqService.py +0 -0
  92. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/InferenceServiceABC.py +0 -0
  93. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/InferenceServicesCollection.py +0 -0
  94. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/MistralAIService.py +0 -0
  95. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/OllamaService.py +0 -0
  96. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/OpenAIService.py +0 -0
  97. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/TestService.py +0 -0
  98. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/TogetherAIService.py +0 -0
  99. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/__init__.py +0 -0
  100. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/models_available_cache.py +0 -0
  101. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/rate_limits_cache.py +0 -0
  102. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/registry.py +0 -0
  103. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/inference_services/write_available.py +0 -0
  104. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/Answers.py +0 -0
  105. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/FailedQuestion.py +0 -0
  106. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/__init__.py +0 -0
  107. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/buckets/BucketCollection.py +0 -0
  108. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/buckets/ModelBuckets.py +0 -0
  109. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/buckets/TokenBucket.py +0 -0
  110. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewExceptionCollection.py +0 -0
  111. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewExceptionEntry.py +0 -0
  112. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewStatistic.py +0 -0
  113. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewStatisticsCollection.py +0 -0
  114. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewStatusDictionary.py +0 -0
  115. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewStatusLog.py +0 -0
  116. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/InterviewStatusMixin.py +0 -0
  117. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/ReportErrors.py +0 -0
  118. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/interviews/interview_status_enum.py +0 -0
  119. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/runners/JobsRunnerStatus.py +0 -0
  120. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/runners/JobsRunnerStatusData.py +0 -0
  121. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/QuestionTaskCreator.py +0 -0
  122. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/TaskCreators.py +0 -0
  123. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/TaskHistory.py +0 -0
  124. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/TaskStatusLog.py +0 -0
  125. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/task_management.py +0 -0
  126. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tasks/task_status_enum.py +0 -0
  127. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tokens/InterviewTokenUsage.py +0 -0
  128. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/jobs/tokens/TokenUsage.py +0 -0
  129. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/ModelList.py +0 -0
  130. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/RegisterLanguageModelsMeta.py +0 -0
  131. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/__init__.py +0 -0
  132. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/fake_openai_call.py +0 -0
  133. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/fake_openai_service.py +0 -0
  134. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/registry.py +0 -0
  135. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/repair.py +0 -0
  136. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/language_models/unused/ReplicateBase.py +0 -0
  137. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/notebooks/Notebook.py +0 -0
  138. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/notebooks/__init__.py +0 -0
  139. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/Prompt.py +0 -0
  140. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/QuestionInstructionsBase.py +0 -0
  141. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/__init__.py +0 -0
  142. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/agent_instructions.py +0 -0
  143. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/agent_persona.py +0 -0
  144. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_budget.py +0 -0
  145. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_checkbox.py +0 -0
  146. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_extract.py +0 -0
  147. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_freetext.py +0 -0
  148. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_linear_scale.py +0 -0
  149. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_list.py +0 -0
  150. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_multiple_choice.py +0 -0
  151. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_numerical.py +0 -0
  152. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/library/question_rank.py +0 -0
  153. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/prompt_config.py +0 -0
  154. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/prompts/registry.py +0 -0
  155. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/AnswerValidatorMixin.py +0 -0
  156. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionBaseGenMixin.py +0 -0
  157. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionBasePromptsMixin.py +0 -0
  158. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionBudget.py +0 -0
  159. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionCheckBox.py +0 -0
  160. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionExtract.py +0 -0
  161. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionFreeText.py +0 -0
  162. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionFunctional.py +0 -0
  163. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionList.py +0 -0
  164. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionNumerical.py +0 -0
  165. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/QuestionRank.py +0 -0
  166. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/Quick.py +0 -0
  167. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/RegisterQuestionsMeta.py +0 -0
  168. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/ResponseValidatorABC.py +0 -0
  169. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/SimpleAskMixin.py +0 -0
  170. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/__init__.py +0 -0
  171. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/compose_questions.py +0 -0
  172. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/decorators.py +0 -0
  173. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/derived/QuestionLikertFive.py +0 -0
  174. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/derived/QuestionLinearScale.py +0 -0
  175. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/derived/QuestionTopK.py +0 -0
  176. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/derived/QuestionYesNo.py +0 -0
  177. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/derived/__init__.py +0 -0
  178. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/descriptors.py +0 -0
  179. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_budget.jinja +0 -0
  180. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_checkbox.jinja +0 -0
  181. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_extract.jinja +0 -0
  182. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_free_text.jinja +0 -0
  183. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_linear_scale.jinja +0 -0
  184. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_list.jinja +0 -0
  185. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_multiple_choice.jinja +0 -0
  186. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/prompt_templates/question_numerical.jinja +0 -0
  187. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/question_registry.py +0 -0
  188. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/settings.py +0 -0
  189. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/__init__.py +0 -0
  190. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/budget/__init__.py +0 -0
  191. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/budget/answering_instructions.jinja +0 -0
  192. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/budget/question_presentation.jinja +0 -0
  193. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/checkbox/__init__.py +0 -0
  194. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/checkbox/answering_instructions.jinja +0 -0
  195. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/checkbox/question_presentation.jinja +0 -0
  196. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/extract/__init__.py +0 -0
  197. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/extract/answering_instructions.jinja +0 -0
  198. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/extract/question_presentation.jinja +0 -0
  199. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/free_text/__init__.py +0 -0
  200. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/free_text/answering_instructions.jinja +0 -0
  201. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/free_text/question_presentation.jinja +0 -0
  202. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/likert_five/__init__.py +0 -0
  203. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/likert_five/answering_instructions.jinja +0 -0
  204. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/likert_five/question_presentation.jinja +0 -0
  205. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/linear_scale/__init__.py +0 -0
  206. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/linear_scale/answering_instructions.jinja +0 -0
  207. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/linear_scale/question_presentation.jinja +0 -0
  208. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/list/__init__.py +0 -0
  209. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/list/answering_instructions.jinja +0 -0
  210. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/list/question_presentation.jinja +0 -0
  211. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/multiple_choice/__init__.py +0 -0
  212. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/multiple_choice/answering_instructions.jinja +0 -0
  213. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/multiple_choice/html.jinja +0 -0
  214. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/multiple_choice/question_presentation.jinja +0 -0
  215. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/numerical/__init__.py +0 -0
  216. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/numerical/question_presentation.jinja +0 -0
  217. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/rank/__init__.py +0 -0
  218. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/rank/answering_instructions.jinja +0 -0
  219. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/rank/question_presentation.jinja +0 -0
  220. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/top_k/__init__.py +0 -0
  221. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/top_k/answering_instructions.jinja +0 -0
  222. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/top_k/question_presentation.jinja +0 -0
  223. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/yes_no/__init__.py +0 -0
  224. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/yes_no/answering_instructions.jinja +0 -0
  225. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/questions/templates/yes_no/question_presentation.jinja +0 -0
  226. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/Dataset.py +0 -0
  227. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/DatasetExportMixin.py +0 -0
  228. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/DatasetTree.py +0 -0
  229. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/Result.py +0 -0
  230. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/Results.py +0 -0
  231. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/ResultsDBMixin.py +0 -0
  232. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/ResultsExportMixin.py +0 -0
  233. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/ResultsFetchMixin.py +0 -0
  234. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/ResultsGGMixin.py +0 -0
  235. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/ResultsToolsMixin.py +0 -0
  236. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/Selector.py +0 -0
  237. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/__init__.py +0 -0
  238. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/results/tree_explore.py +0 -0
  239. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/Scenario.py +0 -0
  240. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/ScenarioHtmlMixin.py +0 -0
  241. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/ScenarioList.py +0 -0
  242. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/ScenarioListExportMixin.py +0 -0
  243. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/ScenarioListPdfMixin.py +0 -0
  244. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/scenarios/__init__.py +0 -0
  245. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/shared.py +0 -0
  246. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/study/ObjectEntry.py +0 -0
  247. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/study/ProofOfWork.py +0 -0
  248. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/study/SnapShot.py +0 -0
  249. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/study/Study.py +0 -0
  250. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/study/__init__.py +0 -0
  251. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/DAG.py +0 -0
  252. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/Memory.py +0 -0
  253. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/MemoryPlan.py +0 -0
  254. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/Rule.py +0 -0
  255. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/RuleCollection.py +0 -0
  256. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/Survey.py +0 -0
  257. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/SurveyCSS.py +0 -0
  258. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/SurveyExportMixin.py +0 -0
  259. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/SurveyFlowVisualizationMixin.py +0 -0
  260. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/SurveyQualtricsImport.py +0 -0
  261. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/__init__.py +0 -0
  262. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/descriptors.py +0 -0
  263. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/instructions/ChangeInstruction.py +0 -0
  264. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/instructions/Instruction.py +0 -0
  265. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/instructions/InstructionCollection.py +0 -0
  266. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/surveys/instructions/__init__.py +0 -0
  267. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/base.html +0 -0
  268. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/exceptions_by_model.html +0 -0
  269. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/exceptions_by_question_name.html +0 -0
  270. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/exceptions_by_type.html +0 -0
  271. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/interview_details.html +0 -0
  272. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/interviews.html +0 -0
  273. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/overview.html +0 -0
  274. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/performance_plot.html +0 -0
  275. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/report.css +0 -0
  276. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/report.html +0 -0
  277. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/templates/error_reporting/report.js +0 -0
  278. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/__init__.py +0 -0
  279. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/clusters.py +0 -0
  280. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/embeddings.py +0 -0
  281. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/embeddings_plotting.py +0 -0
  282. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/plotting.py +0 -0
  283. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/tools/summarize.py +0 -0
  284. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/SystemInfo.py +0 -0
  285. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/__init__.py +0 -0
  286. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/ast_utilities.py +0 -0
  287. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/data/Registry.py +0 -0
  288. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/data/__init__.py +0 -0
  289. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/data/scooter_results.json +0 -0
  290. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/decorators.py +0 -0
  291. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/gcp_bucket/__init__.py +0 -0
  292. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/gcp_bucket/cloud_storage.py +0 -0
  293. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/interface.py +0 -0
  294. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/repair_functions.py +0 -0
  295. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/restricted_python.py +0 -0
  296. {edsl-0.1.34 → edsl-0.1.34.dev1}/edsl/utilities/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edsl
3
- Version: 0.1.34
3
+ Version: 0.1.34.dev1
4
4
  Summary: Create and analyze LLM-based surveys
5
5
  Home-page: https://www.expectedparrot.com/
6
6
  License: MIT
@@ -0,0 +1 @@
1
+ __version__ = "0.1.34.dev1"
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
  from typing import Dict, Any, Optional, Set
3
3
  from collections import UserList
4
- import pdb
4
+ import enum
5
5
 
6
6
  from jinja2 import Environment, meta
7
7
 
@@ -172,6 +172,7 @@ class PromptConstructor:
172
172
  """
173
173
  # The user might have passed a custom prompt, which would be stored in _question_instructions_prompt
174
174
  if not hasattr(self, "_question_instructions_prompt"):
175
+
175
176
  # Gets the instructions for the question - this is how the question should be answered
176
177
  question_prompt = self.question.get_instructions(model=self.model.model)
177
178
 
@@ -197,15 +198,14 @@ class PromptConstructor:
197
198
  self.question.question_options = question_options
198
199
 
199
200
  # might be getting it from the prior answers
200
- if self.prior_answers_dict().get(question_option_key) is not None:
201
- if isinstance(
202
- question_options := self.prior_answers_dict()
203
- .get(question_option_key)
204
- .answer,
205
- list,
206
- ):
207
- question_data["question_options"] = question_options
208
- self.question.question_options = question_options
201
+ if isinstance(
202
+ question_options := self.prior_answers_dict()
203
+ .get(question_option_key)
204
+ .answer,
205
+ list,
206
+ ):
207
+ question_data["question_options"] = question_options
208
+ self.question.question_options = question_options
209
209
 
210
210
  replacement_dict = (
211
211
  {key: f"<see file {key}>" for key in self.scenario_file_keys}
@@ -145,21 +145,14 @@ class Jobs(Base):
145
145
  >>> Jobs.example().prompts()
146
146
  Dataset(...)
147
147
  """
148
- from edsl import Coop
149
-
150
- c = Coop()
151
- price_lookup = c.fetch_prices()
152
148
 
153
149
  interviews = self.interviews()
154
150
  # data = []
155
151
  interview_indices = []
156
- question_names = []
152
+ question_indices = []
157
153
  user_prompts = []
158
154
  system_prompts = []
159
155
  scenario_indices = []
160
- agent_indices = []
161
- models = []
162
- costs = []
163
156
  from edsl.results.Dataset import Dataset
164
157
 
165
158
  for interview_index, interview in enumerate(interviews):
@@ -167,97 +160,23 @@ class Jobs(Base):
167
160
  interview._get_invigilator(question)
168
161
  for question in self.survey.questions
169
162
  ]
163
+ # list(interview._build_invigilators(debug=False))
170
164
  for _, invigilator in enumerate(invigilators):
171
165
  prompts = invigilator.get_prompts()
172
- user_prompt = prompts["user_prompt"]
173
- system_prompt = prompts["system_prompt"]
174
- user_prompts.append(user_prompt)
175
- system_prompts.append(system_prompt)
176
- agent_index = self.agents.index(invigilator.agent)
177
- agent_indices.append(agent_index)
166
+ user_prompts.append(prompts["user_prompt"])
167
+ system_prompts.append(prompts["system_prompt"])
178
168
  interview_indices.append(interview_index)
179
- scenario_index = self.scenarios.index(invigilator.scenario)
180
- scenario_indices.append(scenario_index)
181
- models.append(invigilator.model.model)
182
- question_names.append(invigilator.question.question_name)
183
- # cost calculation
184
- key = (invigilator.model._inference_service_, invigilator.model.model)
185
- relevant_prices = price_lookup[key]
186
- inverse_output_price = relevant_prices["output"]["one_usd_buys"]
187
- inverse_input_price = relevant_prices["input"]["one_usd_buys"]
188
- input_tokens = len(str(user_prompt) + str(system_prompt)) // 4
189
- output_tokens = len(str(user_prompt) + str(system_prompt)) // 4
190
- cost = input_tokens / float(
191
- inverse_input_price
192
- ) + output_tokens / float(inverse_output_price)
193
- costs.append(cost)
194
-
195
- d = Dataset(
169
+ scenario_indices.append(invigilator.scenario)
170
+ question_indices.append(invigilator.question.question_name)
171
+ return Dataset(
196
172
  [
197
- {"user_prompt": user_prompts},
198
- {"system_prompt": system_prompts},
199
173
  {"interview_index": interview_indices},
200
- {"question_name": question_names},
174
+ {"question_index": question_indices},
175
+ {"user_prompt": user_prompts},
201
176
  {"scenario_index": scenario_indices},
202
- {"agent_index": agent_indices},
203
- {"model": models},
204
- {"estimated_cost": costs},
177
+ {"system_prompt": system_prompts},
205
178
  ]
206
179
  )
207
- return d
208
- # if table:
209
- # d.to_scenario_list().print(format="rich")
210
- # else:
211
- # return d
212
-
213
- def show_prompts(self) -> None:
214
- """Print the prompts."""
215
- self.prompts().to_scenario_list().print(format="rich")
216
-
217
- def estimate_job_cost(self):
218
- from edsl import Coop
219
-
220
- c = Coop()
221
- price_lookup = c.fetch_prices()
222
-
223
- prompts = self.prompts()
224
-
225
- text_len = 0
226
- for prompt in prompts:
227
- text_len += len(str(prompt))
228
-
229
- input_token_aproximations = text_len // 4
230
-
231
- aproximation_cost = {}
232
- total_cost = 0
233
- for model in self.models:
234
- key = (model._inference_service_, model.model)
235
- relevant_prices = price_lookup[key]
236
- inverse_output_price = relevant_prices["output"]["one_usd_buys"]
237
- inverse_input_price = relevant_prices["input"]["one_usd_buys"]
238
-
239
- aproximation_cost[key] = {
240
- "input": input_token_aproximations / float(inverse_input_price),
241
- "output": input_token_aproximations / float(inverse_output_price),
242
- }
243
- ##TODO curenlty we approximate the number of output tokens with the number
244
- # of input tokens. A better solution will be to compute the quesiton answer options length and sum them
245
- # to compute the output tokens
246
-
247
- total_cost += input_token_aproximations / float(inverse_input_price)
248
- total_cost += input_token_aproximations / float(inverse_output_price)
249
-
250
- # multiply_factor = len(self.agents or [1]) * len(self.scenarios or [1])
251
- multiply_factor = 1
252
- out = {
253
- "input_token_aproximations": input_token_aproximations,
254
- "models_costs": aproximation_cost,
255
- "estimated_total_cost": total_cost * multiply_factor,
256
- "multiply_factor": multiply_factor,
257
- "single_config_cost": total_cost,
258
- }
259
-
260
- return out
261
180
 
262
181
  @staticmethod
263
182
  def _get_container_class(object):
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
  import asyncio
5
5
  from typing import Any, Type, List, Generator, Optional, Union
6
- import copy
7
6
 
8
7
  from tenacity import (
9
8
  retry,
@@ -100,17 +99,15 @@ class Interview(InterviewStatusMixin):
100
99
 
101
100
  """
102
101
  self.agent = agent
103
- # what I would like to do
104
- self.survey = copy.deepcopy(survey) # survey copy.deepcopy(survey)
105
- # self.survey = survey
102
+ self.survey = survey
106
103
  self.scenario = scenario
107
104
  self.model = model
108
105
  self.debug = debug
109
106
  self.iteration = iteration
110
107
  self.cache = cache
111
- self.answers: dict[
112
- str, str
113
- ] = Answers() # will get filled in as interview progresses
108
+ self.answers: dict[str, str] = (
109
+ Answers()
110
+ ) # will get filled in as interview progresses
114
111
  self.sidecar_model = sidecar_model
115
112
 
116
113
  # self.stop_on_exception = False
@@ -431,11 +428,11 @@ class Interview(InterviewStatusMixin):
431
428
  """
432
429
  current_question_index: int = self.to_index[current_question.question_name]
433
430
 
434
- next_question: Union[
435
- int, EndOfSurvey
436
- ] = self.survey.rule_collection.next_question(
437
- q_now=current_question_index,
438
- answers=self.answers | self.scenario | self.agent["traits"],
431
+ next_question: Union[int, EndOfSurvey] = (
432
+ self.survey.rule_collection.next_question(
433
+ q_now=current_question_index,
434
+ answers=self.answers | self.scenario | self.agent["traits"],
435
+ )
439
436
  )
440
437
 
441
438
  next_question_index = next_question.next_q
@@ -173,19 +173,19 @@ class JobsRunnerAsyncio:
173
173
 
174
174
  prompt_dictionary = {}
175
175
  for answer_key_name in answer_key_names:
176
- prompt_dictionary[
177
- answer_key_name + "_user_prompt"
178
- ] = question_name_to_prompts[answer_key_name]["user_prompt"]
179
- prompt_dictionary[
180
- answer_key_name + "_system_prompt"
181
- ] = question_name_to_prompts[answer_key_name]["system_prompt"]
176
+ prompt_dictionary[answer_key_name + "_user_prompt"] = (
177
+ question_name_to_prompts[answer_key_name]["user_prompt"]
178
+ )
179
+ prompt_dictionary[answer_key_name + "_system_prompt"] = (
180
+ question_name_to_prompts[answer_key_name]["system_prompt"]
181
+ )
182
182
 
183
183
  raw_model_results_dictionary = {}
184
184
  for result in valid_results:
185
185
  question_name = result.question_name
186
- raw_model_results_dictionary[
187
- question_name + "_raw_model_response"
188
- ] = result.raw_model_response
186
+ raw_model_results_dictionary[question_name + "_raw_model_response"] = (
187
+ result.raw_model_response
188
+ )
189
189
  raw_model_results_dictionary[question_name + "_cost"] = result.cost
190
190
  one_use_buys = (
191
191
  "NA"
@@ -490,7 +490,7 @@ class LanguageModel(
490
490
  "user_prompt": user_prompt,
491
491
  "system_prompt": system_prompt,
492
492
  "files_list": files_list
493
- # **({"encoded_image": encoded_image} if encoded_image else {}),
493
+ #**({"encoded_image": encoded_image} if encoded_image else {}),
494
494
  }
495
495
  # response = await f(**params)
496
496
  response = await asyncio.wait_for(f(**params), timeout=TIMEOUT)
@@ -534,7 +534,7 @@ class LanguageModel(
534
534
  system_prompt: str,
535
535
  cache: "Cache",
536
536
  iteration: int = 1,
537
- files_list: Optional[List["File"]] = None,
537
+ files_list: Optional[List['File']] = None,
538
538
  ) -> dict:
539
539
  """Get response, parse, and return as string.
540
540
 
@@ -40,10 +40,8 @@ def create_language_model(
40
40
  _tpm = 1000000000000
41
41
 
42
42
  async def async_execute_model_call(
43
- self,
44
- user_prompt: str,
45
- system_prompt: str,
46
- files_list: Optional[List[Any]] = None,
43
+ self, user_prompt: str, system_prompt: str,
44
+ files_list: Optional[List[Any]] = None
47
45
  ) -> dict[str, Any]:
48
46
  question_number = int(
49
47
  user_prompt.split("XX")[1]
@@ -82,8 +82,7 @@ class QuestionBase(
82
82
  if not hasattr(self, "_fake_data_factory"):
83
83
  from polyfactory.factories.pydantic_factory import ModelFactory
84
84
 
85
- class FakeData(ModelFactory[self.response_model]):
86
- ...
85
+ class FakeData(ModelFactory[self.response_model]): ...
87
86
 
88
87
  self._fake_data_factory = FakeData
89
88
  return self._fake_data_factory
@@ -120,9 +120,9 @@ class QuestionMultipleChoice(QuestionBase):
120
120
 
121
121
  question_type = "multiple_choice"
122
122
  purpose = "When options are known and limited"
123
- question_options: Union[
124
- list[str], list[list], list[float], list[int]
125
- ] = QuestionOptionsDescriptor()
123
+ question_options: Union[list[str], list[list], list[float], list[int]] = (
124
+ QuestionOptionsDescriptor()
125
+ )
126
126
  _response_model = None
127
127
  response_validator_class = MultipleChoiceResponseValidator
128
128
 
@@ -1,6 +1,7 @@
1
1
  This question requires a numerical response in the form of an integer or decimal (e.g., -12, 0, 1, 2, 3.45, ...).
2
2
  Respond with just your number on a single line.
3
3
  If your response is equivalent to zero, report '0'
4
+ If you cannot determine the answer, report 'None'
4
5
 
5
6
  {% if include_comment %}
6
7
  After the answer, put a comment explaining your choice on the next line.
@@ -263,6 +263,7 @@ class FileStore(Scenario):
263
263
 
264
264
 
265
265
  class CSVFileStore(FileStore):
266
+
266
267
  @classmethod
267
268
  def example(cls):
268
269
  from edsl.results.Results import Results
@@ -281,6 +282,7 @@ class CSVFileStore(FileStore):
281
282
 
282
283
 
283
284
  class PDFFileStore(FileStore):
285
+
284
286
  def view(self):
285
287
  pdf_path = self.to_tempfile()
286
288
  print(f"PDF path: {pdf_path}") # Print the path to ensure it exists
@@ -356,6 +358,7 @@ class PDFFileStore(FileStore):
356
358
 
357
359
 
358
360
  class PNGFileStore(FileStore):
361
+
359
362
  @classmethod
360
363
  def example(cls):
361
364
  import textwrap
@@ -379,6 +382,7 @@ class PNGFileStore(FileStore):
379
382
 
380
383
 
381
384
  class SQLiteFileStore(FileStore):
385
+
382
386
  @classmethod
383
387
  def example(cls):
384
388
  import sqlite3
@@ -401,6 +405,7 @@ class SQLiteFileStore(FileStore):
401
405
 
402
406
 
403
407
  class HTMLFileStore(FileStore):
408
+
404
409
  @classmethod
405
410
  def example(cls):
406
411
  import tempfile
@@ -36,10 +36,6 @@ class EndOfSurveyParent:
36
36
  """
37
37
  return self
38
38
 
39
- def __deepcopy__(self, memo):
40
- # Return the same instance when deepcopy is called
41
- return self
42
-
43
39
  def __radd__(self, other):
44
40
  """Add the object to another object.
45
41
 
@@ -1,19 +1,28 @@
1
1
  [build-system]
2
2
  build-backend = "poetry.core.masonry.api"
3
- requires = ["poetry-core", "setuptools<72.0"]
3
+ requires = [ "poetry-core", "setuptools<72.0",]
4
4
 
5
5
  [tool.poetry]
6
- authors = ["Apostolos Filippas <apostolos@expectedparrot.com>", "John Horton <john@expectedparrot.com>", "Robin Horton <robin@expectedparrot.com>"]
7
- classifiers = ["Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules"]
6
+ authors = [ "Apostolos Filippas <apostolos@expectedparrot.com>", "John Horton <john@expectedparrot.com>", "Robin Horton <robin@expectedparrot.com>",]
7
+ classifiers = [ "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules",]
8
8
  description = "Create and analyze LLM-based surveys"
9
9
  documentation = "https://docs.expectedparrot.com"
10
10
  homepage = "https://www.expectedparrot.com/"
11
- include = ["edsl/questions/templates/**/*"]
12
- keywords = ["LLM", "social science", "surveys", "user research"]
11
+ include = [ "edsl/questions/templates/**/*",]
12
+ keywords = [ "LLM", "social science", "surveys", "user research",]
13
13
  license = "MIT"
14
14
  name = "edsl"
15
15
  readme = "README.md"
16
- version = "0.1.34"
16
+ version = "0.1.34.dev1"
17
+ [[tool.poetry.packages]]
18
+ include = "edsl"
19
+
20
+ [tool.tomlsort]
21
+ all = true
22
+ in_place = true
23
+ spaces_before_inline_comment = 2
24
+ spaces_indent_inline_array = 4
25
+ trailing_comma_inline_array = true
17
26
 
18
27
  [tool.poetry.dependencies]
19
28
  python = ">=3.9.1,<3.13"
@@ -49,9 +58,12 @@ urllib3 = ">=1.25.4,<1.27"
49
58
  google-generativeai = "^0.8.2"
50
59
 
51
60
  [tool.poetry.dependencies.black]
52
- extras = ["jupyter"]
61
+ extras = [ "jupyter",]
53
62
  version = "^24.4.2"
54
63
 
64
+ [tool.tomlsort.overrides."tool.poetry.dependencies"]
65
+ table_keys = false
66
+
55
67
  [tool.poetry.group.dev.dependencies]
56
68
  coverage = "^7.3.3"
57
69
  fastapi = "^0.112.1"
@@ -77,16 +89,3 @@ sphinx-rtd-theme = "^2.0.0"
77
89
  toml = "^0.10.2"
78
90
  toml-sort = "^0.23.1"
79
91
  uvicorn = "^0.30.6"
80
-
81
- [[tool.poetry.packages]]
82
- include = "edsl"
83
-
84
- [tool.tomlsort]
85
- all = true
86
- in_place = true
87
- spaces_before_inline_comment = 2
88
- spaces_indent_inline_array = 4
89
- trailing_comma_inline_array = true
90
-
91
- [tool.tomlsort.overrides."tool.poetry.dependencies"]
92
- table_keys = false
@@ -1 +0,0 @@
1
- __version__ = "0.1.34"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes