edsl 0.1.14__py3-none-any.whl → 0.1.40__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 (407) hide show
  1. edsl/Base.py +348 -38
  2. edsl/BaseDiff.py +260 -0
  3. edsl/TemplateLoader.py +24 -0
  4. edsl/__init__.py +46 -10
  5. edsl/__version__.py +1 -0
  6. edsl/agents/Agent.py +842 -144
  7. edsl/agents/AgentList.py +521 -25
  8. edsl/agents/Invigilator.py +250 -374
  9. edsl/agents/InvigilatorBase.py +257 -0
  10. edsl/agents/PromptConstructor.py +272 -0
  11. edsl/agents/QuestionInstructionPromptBuilder.py +128 -0
  12. edsl/agents/QuestionTemplateReplacementsBuilder.py +137 -0
  13. edsl/agents/descriptors.py +43 -13
  14. edsl/agents/prompt_helpers.py +129 -0
  15. edsl/agents/question_option_processor.py +172 -0
  16. edsl/auto/AutoStudy.py +130 -0
  17. edsl/auto/StageBase.py +243 -0
  18. edsl/auto/StageGenerateSurvey.py +178 -0
  19. edsl/auto/StageLabelQuestions.py +125 -0
  20. edsl/auto/StagePersona.py +61 -0
  21. edsl/auto/StagePersonaDimensionValueRanges.py +88 -0
  22. edsl/auto/StagePersonaDimensionValues.py +74 -0
  23. edsl/auto/StagePersonaDimensions.py +69 -0
  24. edsl/auto/StageQuestions.py +74 -0
  25. edsl/auto/SurveyCreatorPipeline.py +21 -0
  26. edsl/auto/utilities.py +218 -0
  27. edsl/base/Base.py +279 -0
  28. edsl/config.py +121 -104
  29. edsl/conversation/Conversation.py +290 -0
  30. edsl/conversation/car_buying.py +59 -0
  31. edsl/conversation/chips.py +95 -0
  32. edsl/conversation/mug_negotiation.py +81 -0
  33. edsl/conversation/next_speaker_utilities.py +93 -0
  34. edsl/coop/CoopFunctionsMixin.py +15 -0
  35. edsl/coop/ExpectedParrotKeyHandler.py +125 -0
  36. edsl/coop/PriceFetcher.py +54 -0
  37. edsl/coop/__init__.py +1 -0
  38. edsl/coop/coop.py +1029 -134
  39. edsl/coop/utils.py +131 -0
  40. edsl/data/Cache.py +560 -89
  41. edsl/data/CacheEntry.py +230 -0
  42. edsl/data/CacheHandler.py +168 -0
  43. edsl/data/RemoteCacheSync.py +186 -0
  44. edsl/data/SQLiteDict.py +292 -0
  45. edsl/data/__init__.py +5 -3
  46. edsl/data/orm.py +6 -33
  47. edsl/data_transfer_models.py +74 -27
  48. edsl/enums.py +165 -8
  49. edsl/exceptions/BaseException.py +21 -0
  50. edsl/exceptions/__init__.py +52 -46
  51. edsl/exceptions/agents.py +33 -15
  52. edsl/exceptions/cache.py +5 -0
  53. edsl/exceptions/coop.py +8 -0
  54. edsl/exceptions/general.py +34 -0
  55. edsl/exceptions/inference_services.py +5 -0
  56. edsl/exceptions/jobs.py +15 -0
  57. edsl/exceptions/language_models.py +46 -1
  58. edsl/exceptions/questions.py +80 -5
  59. edsl/exceptions/results.py +16 -5
  60. edsl/exceptions/scenarios.py +29 -0
  61. edsl/exceptions/surveys.py +13 -10
  62. edsl/inference_services/AnthropicService.py +106 -0
  63. edsl/inference_services/AvailableModelCacheHandler.py +184 -0
  64. edsl/inference_services/AvailableModelFetcher.py +215 -0
  65. edsl/inference_services/AwsBedrock.py +118 -0
  66. edsl/inference_services/AzureAI.py +215 -0
  67. edsl/inference_services/DeepInfraService.py +18 -0
  68. edsl/inference_services/GoogleService.py +143 -0
  69. edsl/inference_services/GroqService.py +20 -0
  70. edsl/inference_services/InferenceServiceABC.py +80 -0
  71. edsl/inference_services/InferenceServicesCollection.py +138 -0
  72. edsl/inference_services/MistralAIService.py +120 -0
  73. edsl/inference_services/OllamaService.py +18 -0
  74. edsl/inference_services/OpenAIService.py +236 -0
  75. edsl/inference_services/PerplexityService.py +160 -0
  76. edsl/inference_services/ServiceAvailability.py +135 -0
  77. edsl/inference_services/TestService.py +90 -0
  78. edsl/inference_services/TogetherAIService.py +172 -0
  79. edsl/inference_services/data_structures.py +134 -0
  80. edsl/inference_services/models_available_cache.py +118 -0
  81. edsl/inference_services/rate_limits_cache.py +25 -0
  82. edsl/inference_services/registry.py +41 -0
  83. edsl/inference_services/write_available.py +10 -0
  84. edsl/jobs/AnswerQuestionFunctionConstructor.py +223 -0
  85. edsl/jobs/Answers.py +21 -20
  86. edsl/jobs/FetchInvigilator.py +47 -0
  87. edsl/jobs/InterviewTaskManager.py +98 -0
  88. edsl/jobs/InterviewsConstructor.py +50 -0
  89. edsl/jobs/Jobs.py +684 -204
  90. edsl/jobs/JobsChecks.py +172 -0
  91. edsl/jobs/JobsComponentConstructor.py +189 -0
  92. edsl/jobs/JobsPrompts.py +270 -0
  93. edsl/jobs/JobsRemoteInferenceHandler.py +311 -0
  94. edsl/jobs/JobsRemoteInferenceLogger.py +239 -0
  95. edsl/jobs/RequestTokenEstimator.py +30 -0
  96. edsl/jobs/async_interview_runner.py +138 -0
  97. edsl/jobs/buckets/BucketCollection.py +104 -0
  98. edsl/jobs/buckets/ModelBuckets.py +65 -0
  99. edsl/jobs/buckets/TokenBucket.py +283 -0
  100. edsl/jobs/buckets/TokenBucketAPI.py +211 -0
  101. edsl/jobs/buckets/TokenBucketClient.py +191 -0
  102. edsl/jobs/check_survey_scenario_compatibility.py +85 -0
  103. edsl/jobs/data_structures.py +120 -0
  104. edsl/jobs/decorators.py +35 -0
  105. edsl/jobs/interviews/Interview.py +392 -0
  106. edsl/jobs/interviews/InterviewExceptionCollection.py +99 -0
  107. edsl/jobs/interviews/InterviewExceptionEntry.py +186 -0
  108. edsl/jobs/interviews/InterviewStatistic.py +63 -0
  109. edsl/jobs/interviews/InterviewStatisticsCollection.py +25 -0
  110. edsl/jobs/interviews/InterviewStatusDictionary.py +78 -0
  111. edsl/jobs/interviews/InterviewStatusLog.py +92 -0
  112. edsl/jobs/interviews/ReportErrors.py +66 -0
  113. edsl/jobs/interviews/interview_status_enum.py +9 -0
  114. edsl/jobs/jobs_status_enums.py +9 -0
  115. edsl/jobs/loggers/HTMLTableJobLogger.py +304 -0
  116. edsl/jobs/results_exceptions_handler.py +98 -0
  117. edsl/jobs/runners/JobsRunnerAsyncio.py +151 -110
  118. edsl/jobs/runners/JobsRunnerStatus.py +298 -0
  119. edsl/jobs/tasks/QuestionTaskCreator.py +244 -0
  120. edsl/jobs/tasks/TaskCreators.py +64 -0
  121. edsl/jobs/tasks/TaskHistory.py +470 -0
  122. edsl/jobs/tasks/TaskStatusLog.py +23 -0
  123. edsl/jobs/tasks/task_status_enum.py +161 -0
  124. edsl/jobs/tokens/InterviewTokenUsage.py +27 -0
  125. edsl/jobs/tokens/TokenUsage.py +34 -0
  126. edsl/language_models/ComputeCost.py +63 -0
  127. edsl/language_models/LanguageModel.py +507 -386
  128. edsl/language_models/ModelList.py +164 -0
  129. edsl/language_models/PriceManager.py +127 -0
  130. edsl/language_models/RawResponseHandler.py +106 -0
  131. edsl/language_models/RegisterLanguageModelsMeta.py +184 -0
  132. edsl/language_models/__init__.py +1 -8
  133. edsl/language_models/fake_openai_call.py +15 -0
  134. edsl/language_models/fake_openai_service.py +61 -0
  135. edsl/language_models/key_management/KeyLookup.py +63 -0
  136. edsl/language_models/key_management/KeyLookupBuilder.py +273 -0
  137. edsl/language_models/key_management/KeyLookupCollection.py +38 -0
  138. edsl/language_models/key_management/__init__.py +0 -0
  139. edsl/language_models/key_management/models.py +131 -0
  140. edsl/language_models/model.py +256 -0
  141. edsl/language_models/repair.py +109 -41
  142. edsl/language_models/utilities.py +65 -0
  143. edsl/notebooks/Notebook.py +263 -0
  144. edsl/notebooks/NotebookToLaTeX.py +142 -0
  145. edsl/notebooks/__init__.py +1 -0
  146. edsl/prompts/Prompt.py +222 -93
  147. edsl/prompts/__init__.py +1 -1
  148. edsl/questions/ExceptionExplainer.py +77 -0
  149. edsl/questions/HTMLQuestion.py +103 -0
  150. edsl/questions/QuestionBase.py +518 -0
  151. edsl/questions/QuestionBasePromptsMixin.py +221 -0
  152. edsl/questions/QuestionBudget.py +164 -67
  153. edsl/questions/QuestionCheckBox.py +281 -62
  154. edsl/questions/QuestionDict.py +343 -0
  155. edsl/questions/QuestionExtract.py +136 -50
  156. edsl/questions/QuestionFreeText.py +79 -55
  157. edsl/questions/QuestionFunctional.py +138 -41
  158. edsl/questions/QuestionList.py +184 -57
  159. edsl/questions/QuestionMatrix.py +265 -0
  160. edsl/questions/QuestionMultipleChoice.py +293 -69
  161. edsl/questions/QuestionNumerical.py +109 -56
  162. edsl/questions/QuestionRank.py +244 -49
  163. edsl/questions/Quick.py +41 -0
  164. edsl/questions/SimpleAskMixin.py +74 -0
  165. edsl/questions/__init__.py +9 -6
  166. edsl/questions/{AnswerValidatorMixin.py → answer_validator_mixin.py} +153 -38
  167. edsl/questions/compose_questions.py +13 -7
  168. edsl/questions/data_structures.py +20 -0
  169. edsl/questions/decorators.py +21 -0
  170. edsl/questions/derived/QuestionLikertFive.py +28 -26
  171. edsl/questions/derived/QuestionLinearScale.py +41 -28
  172. edsl/questions/derived/QuestionTopK.py +34 -26
  173. edsl/questions/derived/QuestionYesNo.py +40 -27
  174. edsl/questions/descriptors.py +228 -74
  175. edsl/questions/loop_processor.py +149 -0
  176. edsl/questions/prompt_templates/question_budget.jinja +13 -0
  177. edsl/questions/prompt_templates/question_checkbox.jinja +32 -0
  178. edsl/questions/prompt_templates/question_extract.jinja +11 -0
  179. edsl/questions/prompt_templates/question_free_text.jinja +3 -0
  180. edsl/questions/prompt_templates/question_linear_scale.jinja +11 -0
  181. edsl/questions/prompt_templates/question_list.jinja +17 -0
  182. edsl/questions/prompt_templates/question_multiple_choice.jinja +33 -0
  183. edsl/questions/prompt_templates/question_numerical.jinja +37 -0
  184. edsl/questions/question_base_gen_mixin.py +168 -0
  185. edsl/questions/question_registry.py +130 -46
  186. edsl/questions/register_questions_meta.py +71 -0
  187. edsl/questions/response_validator_abc.py +188 -0
  188. edsl/questions/response_validator_factory.py +34 -0
  189. edsl/questions/settings.py +5 -2
  190. edsl/questions/templates/__init__.py +0 -0
  191. edsl/questions/templates/budget/__init__.py +0 -0
  192. edsl/questions/templates/budget/answering_instructions.jinja +7 -0
  193. edsl/questions/templates/budget/question_presentation.jinja +7 -0
  194. edsl/questions/templates/checkbox/__init__.py +0 -0
  195. edsl/questions/templates/checkbox/answering_instructions.jinja +10 -0
  196. edsl/questions/templates/checkbox/question_presentation.jinja +22 -0
  197. edsl/questions/templates/dict/__init__.py +0 -0
  198. edsl/questions/templates/dict/answering_instructions.jinja +21 -0
  199. edsl/questions/templates/dict/question_presentation.jinja +1 -0
  200. edsl/questions/templates/extract/__init__.py +0 -0
  201. edsl/questions/templates/extract/answering_instructions.jinja +7 -0
  202. edsl/questions/templates/extract/question_presentation.jinja +1 -0
  203. edsl/questions/templates/free_text/__init__.py +0 -0
  204. edsl/questions/templates/free_text/answering_instructions.jinja +0 -0
  205. edsl/questions/templates/free_text/question_presentation.jinja +1 -0
  206. edsl/questions/templates/likert_five/__init__.py +0 -0
  207. edsl/questions/templates/likert_five/answering_instructions.jinja +10 -0
  208. edsl/questions/templates/likert_five/question_presentation.jinja +12 -0
  209. edsl/questions/templates/linear_scale/__init__.py +0 -0
  210. edsl/questions/templates/linear_scale/answering_instructions.jinja +5 -0
  211. edsl/questions/templates/linear_scale/question_presentation.jinja +5 -0
  212. edsl/questions/templates/list/__init__.py +0 -0
  213. edsl/questions/templates/list/answering_instructions.jinja +4 -0
  214. edsl/questions/templates/list/question_presentation.jinja +5 -0
  215. edsl/questions/templates/matrix/__init__.py +1 -0
  216. edsl/questions/templates/matrix/answering_instructions.jinja +5 -0
  217. edsl/questions/templates/matrix/question_presentation.jinja +20 -0
  218. edsl/questions/templates/multiple_choice/__init__.py +0 -0
  219. edsl/questions/templates/multiple_choice/answering_instructions.jinja +9 -0
  220. edsl/questions/templates/multiple_choice/html.jinja +0 -0
  221. edsl/questions/templates/multiple_choice/question_presentation.jinja +12 -0
  222. edsl/questions/templates/numerical/__init__.py +0 -0
  223. edsl/questions/templates/numerical/answering_instructions.jinja +7 -0
  224. edsl/questions/templates/numerical/question_presentation.jinja +7 -0
  225. edsl/questions/templates/rank/__init__.py +0 -0
  226. edsl/questions/templates/rank/answering_instructions.jinja +11 -0
  227. edsl/questions/templates/rank/question_presentation.jinja +15 -0
  228. edsl/questions/templates/top_k/__init__.py +0 -0
  229. edsl/questions/templates/top_k/answering_instructions.jinja +8 -0
  230. edsl/questions/templates/top_k/question_presentation.jinja +22 -0
  231. edsl/questions/templates/yes_no/__init__.py +0 -0
  232. edsl/questions/templates/yes_no/answering_instructions.jinja +6 -0
  233. edsl/questions/templates/yes_no/question_presentation.jinja +12 -0
  234. edsl/results/CSSParameterizer.py +108 -0
  235. edsl/results/Dataset.py +550 -19
  236. edsl/results/DatasetExportMixin.py +594 -0
  237. edsl/results/DatasetTree.py +295 -0
  238. edsl/results/MarkdownToDocx.py +122 -0
  239. edsl/results/MarkdownToPDF.py +111 -0
  240. edsl/results/Result.py +477 -173
  241. edsl/results/Results.py +987 -269
  242. edsl/results/ResultsExportMixin.py +28 -125
  243. edsl/results/ResultsGGMixin.py +83 -15
  244. edsl/results/TableDisplay.py +125 -0
  245. edsl/results/TextEditor.py +50 -0
  246. edsl/results/__init__.py +1 -1
  247. edsl/results/file_exports.py +252 -0
  248. edsl/results/results_fetch_mixin.py +33 -0
  249. edsl/results/results_selector.py +145 -0
  250. edsl/results/results_tools_mixin.py +98 -0
  251. edsl/results/smart_objects.py +96 -0
  252. edsl/results/table_data_class.py +12 -0
  253. edsl/results/table_display.css +78 -0
  254. edsl/results/table_renderers.py +118 -0
  255. edsl/results/tree_explore.py +115 -0
  256. edsl/scenarios/ConstructDownloadLink.py +109 -0
  257. edsl/scenarios/DocumentChunker.py +102 -0
  258. edsl/scenarios/DocxScenario.py +16 -0
  259. edsl/scenarios/FileStore.py +543 -0
  260. edsl/scenarios/PdfExtractor.py +40 -0
  261. edsl/scenarios/Scenario.py +431 -62
  262. edsl/scenarios/ScenarioHtmlMixin.py +65 -0
  263. edsl/scenarios/ScenarioList.py +1415 -45
  264. edsl/scenarios/ScenarioListExportMixin.py +45 -0
  265. edsl/scenarios/ScenarioListPdfMixin.py +239 -0
  266. edsl/scenarios/__init__.py +2 -0
  267. edsl/scenarios/directory_scanner.py +96 -0
  268. edsl/scenarios/file_methods.py +85 -0
  269. edsl/scenarios/handlers/__init__.py +13 -0
  270. edsl/scenarios/handlers/csv.py +49 -0
  271. edsl/scenarios/handlers/docx.py +76 -0
  272. edsl/scenarios/handlers/html.py +37 -0
  273. edsl/scenarios/handlers/json.py +111 -0
  274. edsl/scenarios/handlers/latex.py +5 -0
  275. edsl/scenarios/handlers/md.py +51 -0
  276. edsl/scenarios/handlers/pdf.py +68 -0
  277. edsl/scenarios/handlers/png.py +39 -0
  278. edsl/scenarios/handlers/pptx.py +105 -0
  279. edsl/scenarios/handlers/py.py +294 -0
  280. edsl/scenarios/handlers/sql.py +313 -0
  281. edsl/scenarios/handlers/sqlite.py +149 -0
  282. edsl/scenarios/handlers/txt.py +33 -0
  283. edsl/scenarios/scenario_join.py +131 -0
  284. edsl/scenarios/scenario_selector.py +156 -0
  285. edsl/shared.py +1 -0
  286. edsl/study/ObjectEntry.py +173 -0
  287. edsl/study/ProofOfWork.py +113 -0
  288. edsl/study/SnapShot.py +80 -0
  289. edsl/study/Study.py +521 -0
  290. edsl/study/__init__.py +4 -0
  291. edsl/surveys/ConstructDAG.py +92 -0
  292. edsl/surveys/DAG.py +92 -11
  293. edsl/surveys/EditSurvey.py +221 -0
  294. edsl/surveys/InstructionHandler.py +100 -0
  295. edsl/surveys/Memory.py +9 -4
  296. edsl/surveys/MemoryManagement.py +72 -0
  297. edsl/surveys/MemoryPlan.py +156 -35
  298. edsl/surveys/Rule.py +221 -74
  299. edsl/surveys/RuleCollection.py +241 -61
  300. edsl/surveys/RuleManager.py +172 -0
  301. edsl/surveys/Simulator.py +75 -0
  302. edsl/surveys/Survey.py +1079 -339
  303. edsl/surveys/SurveyCSS.py +273 -0
  304. edsl/surveys/SurveyExportMixin.py +235 -40
  305. edsl/surveys/SurveyFlowVisualization.py +181 -0
  306. edsl/surveys/SurveyQualtricsImport.py +284 -0
  307. edsl/surveys/SurveyToApp.py +141 -0
  308. edsl/surveys/__init__.py +4 -2
  309. edsl/surveys/base.py +19 -3
  310. edsl/surveys/descriptors.py +17 -6
  311. edsl/surveys/instructions/ChangeInstruction.py +48 -0
  312. edsl/surveys/instructions/Instruction.py +56 -0
  313. edsl/surveys/instructions/InstructionCollection.py +82 -0
  314. edsl/surveys/instructions/__init__.py +0 -0
  315. edsl/templates/error_reporting/base.html +24 -0
  316. edsl/templates/error_reporting/exceptions_by_model.html +35 -0
  317. edsl/templates/error_reporting/exceptions_by_question_name.html +17 -0
  318. edsl/templates/error_reporting/exceptions_by_type.html +17 -0
  319. edsl/templates/error_reporting/interview_details.html +116 -0
  320. edsl/templates/error_reporting/interviews.html +19 -0
  321. edsl/templates/error_reporting/overview.html +5 -0
  322. edsl/templates/error_reporting/performance_plot.html +2 -0
  323. edsl/templates/error_reporting/report.css +74 -0
  324. edsl/templates/error_reporting/report.html +118 -0
  325. edsl/templates/error_reporting/report.js +25 -0
  326. edsl/tools/__init__.py +1 -0
  327. edsl/tools/clusters.py +192 -0
  328. edsl/tools/embeddings.py +27 -0
  329. edsl/tools/embeddings_plotting.py +118 -0
  330. edsl/tools/plotting.py +112 -0
  331. edsl/tools/summarize.py +18 -0
  332. edsl/utilities/PrettyList.py +56 -0
  333. edsl/utilities/SystemInfo.py +5 -0
  334. edsl/utilities/__init__.py +21 -20
  335. edsl/utilities/ast_utilities.py +3 -0
  336. edsl/utilities/data/Registry.py +2 -0
  337. edsl/utilities/decorators.py +41 -0
  338. edsl/utilities/gcp_bucket/__init__.py +0 -0
  339. edsl/utilities/gcp_bucket/cloud_storage.py +96 -0
  340. edsl/utilities/interface.py +310 -60
  341. edsl/utilities/is_notebook.py +18 -0
  342. edsl/utilities/is_valid_variable_name.py +11 -0
  343. edsl/utilities/naming_utilities.py +263 -0
  344. edsl/utilities/remove_edsl_version.py +24 -0
  345. edsl/utilities/repair_functions.py +28 -0
  346. edsl/utilities/restricted_python.py +70 -0
  347. edsl/utilities/utilities.py +203 -13
  348. edsl-0.1.40.dist-info/METADATA +111 -0
  349. edsl-0.1.40.dist-info/RECORD +362 -0
  350. {edsl-0.1.14.dist-info → edsl-0.1.40.dist-info}/WHEEL +1 -1
  351. edsl/agents/AgentListExportMixin.py +0 -24
  352. edsl/coop/old.py +0 -31
  353. edsl/data/Database.py +0 -141
  354. edsl/data/crud.py +0 -121
  355. edsl/jobs/Interview.py +0 -417
  356. edsl/jobs/JobsRunner.py +0 -63
  357. edsl/jobs/JobsRunnerStatusMixin.py +0 -115
  358. edsl/jobs/base.py +0 -47
  359. edsl/jobs/buckets.py +0 -166
  360. edsl/jobs/runners/JobsRunnerDryRun.py +0 -19
  361. edsl/jobs/runners/JobsRunnerStreaming.py +0 -54
  362. edsl/jobs/task_management.py +0 -218
  363. edsl/jobs/token_tracking.py +0 -78
  364. edsl/language_models/DeepInfra.py +0 -69
  365. edsl/language_models/OpenAI.py +0 -98
  366. edsl/language_models/model_interfaces/GeminiPro.py +0 -66
  367. edsl/language_models/model_interfaces/LanguageModelOpenAIFour.py +0 -8
  368. edsl/language_models/model_interfaces/LanguageModelOpenAIThreeFiveTurbo.py +0 -8
  369. edsl/language_models/model_interfaces/LlamaTwo13B.py +0 -21
  370. edsl/language_models/model_interfaces/LlamaTwo70B.py +0 -21
  371. edsl/language_models/model_interfaces/Mixtral8x7B.py +0 -24
  372. edsl/language_models/registry.py +0 -81
  373. edsl/language_models/schemas.py +0 -15
  374. edsl/language_models/unused/ReplicateBase.py +0 -83
  375. edsl/prompts/QuestionInstructionsBase.py +0 -6
  376. edsl/prompts/library/agent_instructions.py +0 -29
  377. edsl/prompts/library/agent_persona.py +0 -17
  378. edsl/prompts/library/question_budget.py +0 -26
  379. edsl/prompts/library/question_checkbox.py +0 -32
  380. edsl/prompts/library/question_extract.py +0 -19
  381. edsl/prompts/library/question_freetext.py +0 -14
  382. edsl/prompts/library/question_linear_scale.py +0 -20
  383. edsl/prompts/library/question_list.py +0 -22
  384. edsl/prompts/library/question_multiple_choice.py +0 -44
  385. edsl/prompts/library/question_numerical.py +0 -31
  386. edsl/prompts/library/question_rank.py +0 -21
  387. edsl/prompts/prompt_config.py +0 -33
  388. edsl/prompts/registry.py +0 -185
  389. edsl/questions/Question.py +0 -240
  390. edsl/report/InputOutputDataTypes.py +0 -134
  391. edsl/report/RegressionMixin.py +0 -28
  392. edsl/report/ReportOutputs.py +0 -1228
  393. edsl/report/ResultsFetchMixin.py +0 -106
  394. edsl/report/ResultsOutputMixin.py +0 -14
  395. edsl/report/demo.ipynb +0 -645
  396. edsl/results/ResultsDBMixin.py +0 -184
  397. edsl/surveys/SurveyFlowVisualizationMixin.py +0 -92
  398. edsl/trackers/Tracker.py +0 -91
  399. edsl/trackers/TrackerAPI.py +0 -196
  400. edsl/trackers/TrackerTasks.py +0 -70
  401. edsl/utilities/pastebin.py +0 -141
  402. edsl-0.1.14.dist-info/METADATA +0 -69
  403. edsl-0.1.14.dist-info/RECORD +0 -141
  404. /edsl/{language_models/model_interfaces → inference_services}/__init__.py +0 -0
  405. /edsl/{report/__init__.py → jobs/runners/JobsRunnerStatusData.py} +0 -0
  406. /edsl/{trackers/__init__.py → language_models/ServiceDataSources.py} +0 -0
  407. {edsl-0.1.14.dist-info → edsl-0.1.40.dist-info}/LICENSE +0 -0
@@ -1,78 +0,0 @@
1
- class TokenPricing:
2
- def __init__(
3
- self,
4
- *,
5
- model_name,
6
- prompt_token_price_per_k: float,
7
- completion_token_price_per_k: float,
8
- ):
9
- self.model_name = model_name
10
- self.prompt_token_price = prompt_token_price_per_k / 1_000.0
11
- self.completion_token_price = completion_token_price_per_k / 1_000.0
12
-
13
- def __eq__(self, other):
14
- if not isinstance(other, TokenPricing):
15
- return False
16
- return (
17
- self.model_name == other.model_name
18
- and self.prompt_token_price == other.prompt_token_price
19
- and self.completion_token_price == other.completion_token_price
20
- )
21
-
22
-
23
- class TokenUsage:
24
- def __init__(
25
- self, from_cache: bool, prompt_tokens: int = 0, completion_tokens: int = 0
26
- ):
27
- self.from_cache = from_cache
28
- self.prompt_tokens = prompt_tokens
29
- self.completion_tokens = completion_tokens
30
-
31
- def add_tokens(self, prompt_tokens, completion_tokens):
32
- self.prompt_tokens += prompt_tokens
33
- self.completion_tokens += completion_tokens
34
-
35
- def __add__(self, other):
36
- if not isinstance(other, TokenUsage):
37
- raise ValueError(f"Can't add {type(other)} to InterviewTokenUsage")
38
- if self.from_cache != other.from_cache:
39
- raise ValueError(f"Can't add token usages from different sources")
40
- return TokenUsage(
41
- from_cache=self.from_cache,
42
- prompt_tokens=self.prompt_tokens + other.prompt_tokens,
43
- completion_tokens=self.completion_tokens + other.completion_tokens,
44
- )
45
-
46
- def __repr__(self):
47
- return f"TokenUsage(from_cache={self.from_cache}, prompt_tokens={self.prompt_tokens}, completion_tokens={self.completion_tokens})"
48
-
49
- def cost(self, prices: TokenPricing):
50
- return (
51
- self.prompt_tokens * prices.prompt_token_price
52
- + self.completion_tokens * prices.completion_token_price
53
- )
54
-
55
-
56
- class InterviewTokenUsage:
57
- def __init__(
58
- self, new_token_usage: TokenUsage = None, cached_token_usage: TokenUsage = None
59
- ):
60
- self.new_token_usage = new_token_usage or TokenUsage(from_cache=False)
61
- self.cached_token_usage = cached_token_usage or TokenUsage(from_cache=True)
62
-
63
- def __add__(self, other):
64
- if not isinstance(other, InterviewTokenUsage):
65
- raise ValueError(f"Can't add {type(other)} to InterviewTokenSummary")
66
- return InterviewTokenUsage(
67
- new_token_usage=self.new_token_usage + other.new_token_usage,
68
- cached_token_usage=self.cached_token_usage + other.cached_token_usage,
69
- )
70
-
71
- def __repr__(self):
72
- return f"InterviewTokenUsage(new_token_usage={self.new_token_usage}, cached_token_usage={self.cached_token_usage})"
73
-
74
- def cost(self, prices: TokenPricing):
75
- return self.new_token_usage.cost(prices)
76
-
77
- def saved(self, prices: TokenPricing):
78
- return self.cached_token_usage.cost(prices)
@@ -1,69 +0,0 @@
1
- import aiohttp
2
- import json
3
- from typing import Any
4
- from edsl import CONFIG
5
- from edsl.enums import LanguageModelType, InferenceServiceType
6
- from edsl.language_models.LanguageModel import LanguageModel
7
-
8
-
9
- def create_deep_infra_model(model_name, url, model_class_name) -> LanguageModel:
10
- if not LanguageModelType.is_value_valid(model_name):
11
- acceptable_values = [item.value for item in LanguageModelType]
12
- raise Exception(
13
- f"""
14
- A Prompt's model must be one of {LanguageModelType} values, which are
15
- currently {acceptable_values}. You passed {model_name}."""
16
- )
17
-
18
- class LLM(LanguageModel):
19
- _inference_service_ = InferenceServiceType.DEEP_INFRA.value
20
- _model_ = model_name
21
- _parameters_ = {
22
- "temperature": 0.5,
23
- "top_p": 1,
24
- "top_k": 1,
25
- "max_new_tokens": 2048,
26
- "stopSequences": [],
27
- "use_cache": True,
28
- }
29
- api_token = CONFIG.get("DEEP_INFRA_API_KEY")
30
-
31
- async def async_execute_model_call(
32
- self, user_prompt: str, system_prompt: str = ""
33
- ) -> dict[str, Any]:
34
- self.url = url
35
- headers = {
36
- "Content-Type": "application/json",
37
- "Authorization": f"Token {self.api_token}",
38
- }
39
- data = {
40
- "input": f"""
41
- [INST]<<SYS>> {system_prompt}
42
- <<SYS>[/INST]
43
- {user_prompt} [/INST]
44
- """,
45
- "stream": False,
46
- "temperature": self.temperature,
47
- "top_p": self.top_p,
48
- "top_k": self.top_k,
49
- "max_new_tokens": self.max_new_tokens,
50
- }
51
- async with aiohttp.ClientSession() as session:
52
- async with session.post(
53
- self.url, headers=headers, data=json.dumps(data)
54
- ) as response:
55
- raw_response_text = await response.text()
56
- return json.loads(raw_response_text)
57
-
58
- def parse_response(self, raw_response: dict[str, Any]) -> str:
59
- return raw_response["results"][0]["generated_text"]
60
-
61
- LLM.__name__ = model_class_name
62
-
63
- return LLM
64
-
65
-
66
- if __name__ == "__main__":
67
- pass
68
- # results = m.execute_model_call("Why is Cape Cod a popular vacation spot?")
69
- # print(m.parse_response(results))
@@ -1,98 +0,0 @@
1
- import openai
2
- import re
3
- from typing import Any
4
- from edsl import CONFIG
5
- from openai import AsyncOpenAI
6
- from edsl.enums import LanguageModelType, InferenceServiceType
7
- from edsl.language_models import LanguageModel
8
-
9
- LanguageModelType.GPT_4.value
10
-
11
-
12
- def create_openai_model(model_name, model_class_name) -> LanguageModel:
13
- openai.api_key = CONFIG.get("OPENAI_API_KEY")
14
-
15
- class LLM(LanguageModel):
16
- """
17
- Child class of LanguageModel for interacting with OpenAI models
18
- """
19
-
20
- _inference_service_ = InferenceServiceType.OPENAI.value
21
- _model_ = model_name
22
- _parameters_ = {
23
- "temperature": 0.5,
24
- "max_tokens": 1000,
25
- "top_p": 1,
26
- "frequency_penalty": 0,
27
- "presence_penalty": 0,
28
- "use_cache": True,
29
- }
30
- client = AsyncOpenAI()
31
-
32
- def get_headers(self) -> dict[str, Any]:
33
- from openai import OpenAI
34
-
35
- client = OpenAI()
36
- response = client.chat.completions.with_raw_response.create(
37
- messages=[
38
- {
39
- "role": "user",
40
- "content": "Say this is a test",
41
- }
42
- ],
43
- model=self.model,
44
- )
45
- return dict(response.headers)
46
-
47
- def get_rate_limits(self) -> dict[str, Any]:
48
- try:
49
- headers = self.get_headers()
50
- except Exception as e:
51
- return {
52
- "rpm": 10_000,
53
- "tpm": 2_000_000,
54
- }
55
- else:
56
- return {
57
- "rpm": int(headers["x-ratelimit-limit-requests"]),
58
- "tpm": int(headers["x-ratelimit-limit-tokens"]),
59
- }
60
-
61
- async def async_execute_model_call(
62
- self, user_prompt: str, system_prompt: str = ""
63
- ) -> dict[str, Any]:
64
- """Calls the OpenAI API and returns the API response."""
65
- response = await self.client.chat.completions.create(
66
- model=self.model,
67
- messages=[
68
- {"role": "system", "content": system_prompt},
69
- {"role": "user", "content": user_prompt},
70
- ],
71
- temperature=self.temperature,
72
- max_tokens=self.max_tokens,
73
- top_p=self.top_p,
74
- frequency_penalty=self.frequency_penalty,
75
- presence_penalty=self.presence_penalty,
76
- )
77
- return response.model_dump()
78
-
79
- @staticmethod
80
- def parse_response(raw_response: dict[str, Any]) -> str:
81
- """Parses the API response and returns the response text."""
82
- response = raw_response["choices"][0]["message"]["content"]
83
- pattern = r"^```json(?:\\n|\n)(.+?)(?:\\n|\n)```$"
84
- match = re.match(pattern, response, re.DOTALL)
85
- if match:
86
- return match.group(1)
87
- else:
88
- return response
89
-
90
- LLM.__name__ = model_class_name
91
-
92
- return LLM
93
-
94
-
95
- if __name__ == "__main__":
96
- import doctest
97
-
98
- doctest.testmod()
@@ -1,66 +0,0 @@
1
- import aiohttp
2
- import json
3
- from typing import Any
4
- from edsl import CONFIG
5
- from edsl.language_models.LanguageModel import LanguageModel
6
- from edsl.enums import LanguageModelType, InferenceServiceType
7
-
8
-
9
- class GeminiPro(LanguageModel):
10
- _inference_service_ = InferenceServiceType.GOOGLE.value
11
- _model_ = LanguageModelType.GEMINI_PRO.value
12
- _parameters_ = {
13
- "temperature": 0.5,
14
- "topP": 1,
15
- "topK": 1,
16
- "maxOutputTokens": 2048,
17
- "stopSequences": [],
18
- "use_cache": True,
19
- }
20
- api_token = CONFIG.get("GOOGLE_API_KEY")
21
-
22
- async def async_execute_model_call(
23
- self, user_prompt: str, system_prompt: str = ""
24
- ) -> dict[str, Any]:
25
- combined_prompt = user_prompt + system_prompt
26
- url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={self.api_token}"
27
- headers = {"Content-Type": "application/json"}
28
- data = {
29
- "contents": [{"parts": [{"text": combined_prompt}]}],
30
- "generationConfig": {
31
- "temperature": self.temperature,
32
- "topK": self.topK,
33
- "topP": self.topP,
34
- "maxOutputTokens": self.maxOutputTokens,
35
- "stopSequences": self.stopSequences,
36
- },
37
- }
38
-
39
- async with aiohttp.ClientSession() as session:
40
- async with session.post(
41
- url, headers=headers, data=json.dumps(data)
42
- ) as response:
43
- raw_response_text = await response.text()
44
- return json.loads(raw_response_text)
45
-
46
- def parse_response(self, raw_response: dict[str, Any]) -> str:
47
- data = raw_response
48
- return data["candidates"][0]["content"]["parts"][0]["text"]
49
-
50
-
51
- if __name__ == "__main__":
52
- m = GeminiPro(use_cache=True)
53
- from edsl.questions import QuestionMultipleChoice
54
-
55
- q = QuestionMultipleChoice(
56
- question_text="Are pickled pigs feet a popular breakfast food in the US?",
57
- question_options=["Yes", "No", "Unsure"],
58
- question_name="bkfast_question",
59
- )
60
- results = q.by(m).run()
61
- from rich import print
62
-
63
- print(q)
64
- results.select("answer.*", "model.model").print()
65
- # results = m.execute_model_call("Why is Cape Cod a popular vacation spot?")
66
- # print(m.parse_response(results))
@@ -1,8 +0,0 @@
1
- from edsl.language_models.OpenAI import create_openai_model
2
- from edsl.enums import LanguageModelType
3
-
4
- model_name = LanguageModelType.GPT_4.value
5
-
6
- LanguageModelOpenAIFour = create_openai_model(
7
- model_name=model_name, model_class_name="LanguageModelOpenAIFour"
8
- )
@@ -1,8 +0,0 @@
1
- from edsl.language_models.OpenAI import create_openai_model
2
- from edsl.enums import LanguageModelType
3
-
4
- model_name = LanguageModelType.GPT_3_5_Turbo.value
5
-
6
- LanguageModelOpenAIThreeFiveTurbo = create_openai_model(
7
- model_name=model_name, model_class_name="LanguageModelOpenAIThreeFiveTurbo"
8
- )
@@ -1,21 +0,0 @@
1
- from edsl.language_models.DeepInfra import create_deep_infra_model
2
- from edsl.enums import LanguageModelType
3
-
4
- model_name = LanguageModelType.LLAMA_2_13B_CHAT_HF.value
5
- url = "https://api.deepinfra.com/v1/inference/meta-llama/Llama-2-13b-chat-hf"
6
-
7
- LlamaTwo13B = create_deep_infra_model(
8
- model_name=model_name, url=url, model_class_name="LlamaTwo13B"
9
- )
10
-
11
- if __name__ == "__main__":
12
- model = LlamaTwo13B(use_cache=False)
13
- from edsl.questions import QuestionMultipleChoice
14
-
15
- q = QuestionMultipleChoice(
16
- question_text="Are pickled pigs feet a popular breakfast food in the US?",
17
- question_options=["Yes", "No", "Unsure"],
18
- question_name="bkfast_question",
19
- )
20
- results = q.by(model).run()
21
- results.select("answer.*", "model.model").print()
@@ -1,21 +0,0 @@
1
- from edsl.language_models.DeepInfra import create_deep_infra_model
2
- from edsl.enums import LanguageModelType
3
-
4
- model_name = LanguageModelType.LLAMA_2_70B_CHAT_HF.value
5
- url = "https://api.deepinfra.com/v1/inference/meta-llama/Llama-2-70b-chat-hf"
6
-
7
- LlamaTwo70B = create_deep_infra_model(
8
- model_name=model_name, url=url, model_class_name="LlamaTwo70B"
9
- )
10
-
11
- if __name__ == "__main__":
12
- model = LlamaTwo70B(use_cache=False)
13
- from edsl.questions import QuestionMultipleChoice
14
-
15
- q = QuestionMultipleChoice(
16
- question_text="Are pickled pigs feet a popular breakfast food in the US?",
17
- question_options=["Yes", "No", "Unsure"],
18
- question_name="bkfast_question",
19
- )
20
- results = q.by(model).run()
21
- results.select("answer.*", "model.model").print()
@@ -1,24 +0,0 @@
1
- from edsl.enums import LanguageModelType
2
- from edsl.language_models.DeepInfra import create_deep_infra_model
3
-
4
- model_name = LanguageModelType.MIXTRAL_8x7B_INSTRUCT.value
5
- url = "https://api.deepinfra.com/v1/inference/mistralai/Mixtral-8x7B-Instruct-v0.1"
6
-
7
- Mixtral8x7B = create_deep_infra_model(
8
- model_name=model_name, url=url, model_class_name="Mixtral8x7B"
9
- )
10
-
11
- if __name__ == "__main__":
12
- from edsl.questions import QuestionMultipleChoice
13
-
14
- m = Mixtral8x7B()
15
- q = QuestionMultipleChoice(
16
- question_text="Are pickled pigs feet a popular breakfast food in the US?",
17
- question_options=["Yes", "No", "Unsure"],
18
- question_name="bkfast_question",
19
- )
20
- results = q.by(m).run()
21
- from rich import print
22
-
23
- print(q)
24
- results.select("answer.*", "model.model").print()
@@ -1,81 +0,0 @@
1
- import textwrap
2
-
3
- DEFAULT_MODEL_CLASS = "edsl.language_models.LanguageModelOpenAIFour"
4
-
5
- from edsl.language_models.LanguageModel import RegisterLanguageModelsMeta
6
- import pkgutil
7
- import importlib
8
- import edsl.language_models.model_interfaces as model_interfaces
9
-
10
- # Dynamically import all modules in the model_interfaces package
11
- for loader, module_name, is_pkg in pkgutil.iter_modules(model_interfaces.__path__):
12
- full_module_name = f"{model_interfaces.__name__}.{module_name}"
13
- if not is_pkg:
14
- module = importlib.import_module(full_module_name)
15
- globals().update(
16
- {
17
- name: getattr(module, name)
18
- for name in dir(module)
19
- if not name.startswith("_")
20
- }
21
- )
22
-
23
- meta_class_registry = RegisterLanguageModelsMeta.get_registered_classes()
24
-
25
- # For compatibility with older versions of EDSL
26
- get_model_class = (
27
- lambda model_name: RegisterLanguageModelsMeta.model_names_to_classes().get(
28
- model_name
29
- )
30
- )
31
-
32
-
33
- class Meta(type):
34
- def __repr__(cls):
35
- return textwrap.dedent(
36
- f"""\
37
- Available models: {cls.available()}
38
-
39
- To create an instance, you can do:
40
- >>> m = Model('gpt-4-1106-preview', temperature=0.5, ...)
41
-
42
- To get the default model, you can leave out the model name.
43
- To see the available models, you can do:
44
- >>> Model.available()
45
- """
46
- )
47
-
48
-
49
- class Model(metaclass=Meta):
50
- default_model = "gpt-4-1106-preview"
51
-
52
- def __new__(cls, model_name=None, *args, **kwargs):
53
- # Map index to the respective subclass
54
- get_model_classes = RegisterLanguageModelsMeta.model_names_to_classes()
55
-
56
- if cls.default_model not in get_model_classes:
57
- raise ValueError(f"Default model {cls.default_model} not found")
58
-
59
- if model_name is None:
60
- model_name = cls.default_model
61
- print(f"No model name provided, using default model: {model_name}")
62
-
63
- subclass = get_model_classes.get(model_name, None)
64
- if subclass is None:
65
- raise ValueError(f"No model registered with name {model_name}")
66
-
67
- # Create an instance of the selected subclass
68
- instance = object.__new__(subclass)
69
- instance.__init__(*args, **kwargs)
70
- return instance
71
-
72
- @classmethod
73
- def available(cls):
74
- return list(RegisterLanguageModelsMeta.model_names_to_classes().keys())
75
-
76
-
77
- if __name__ == "__main__":
78
- available = Model.available()
79
- m = Model("gpt-4-1106-preview")
80
- results = m.execute_model_call("Hello world")
81
- print(results)
@@ -1,15 +0,0 @@
1
- # MODEL PRICES
2
- model_prices = {
3
- "gpt-3.5-turbo": {
4
- "prompt_tokens": 0.001 / 1000,
5
- "completion_tokens": 0.002 / 1000,
6
- },
7
- "gpt-4-1106-preview": {
8
- "prompt_tokens": 0.01 / 1000,
9
- "completion_tokens": 0.03 / 1000,
10
- },
11
- "llama2-70b-chat": {
12
- "prompt_tokens": 0.03 / 1000,
13
- "completion_tokens": 0.03 / 1000,
14
- },
15
- }
@@ -1,83 +0,0 @@
1
- import asyncio
2
- import aiohttp
3
- import json
4
- from typing import Any
5
-
6
- from edsl import CONFIG
7
-
8
- from edsl.language_models.LanguageModel import LanguageModel
9
-
10
-
11
- def replicate_model_factory(model_name, base_url, api_token):
12
- class ReplicateLanguageModelBase(LanguageModel):
13
- _model_ = (
14
- model_name # Example model name, replace with actual model name if needed
15
- )
16
- _parameters_ = {
17
- "temperature": 0.1,
18
- "topK": 50,
19
- "topP": 0.9,
20
- "max_new_tokens": 500,
21
- "min_new_tokens": -1,
22
- "repetition_penalty": 1.15,
23
- # "version": "5fe0a3d7ac2852264a25279d1dfb798acbc4d49711d126646594e212cb821749",
24
- "use_cache": True,
25
- }
26
- _api_token = api_token
27
- _base_url = base_url
28
-
29
- async def async_execute_model_call(
30
- self, user_prompt: str, system_prompt: str = ""
31
- ) -> dict[str, Any]:
32
- self.api_token = self._api_token
33
- self.headers = {
34
- "Authorization": f"Token {self.api_token}",
35
- "Content-Type": "application/json",
36
- }
37
- # combined_prompt = f"{system_prompt} {user_prompt}".strip()
38
- # print(f"Prompt: {combined_prompt}")
39
- data = {
40
- # "version": self._parameters_["version"],
41
- "input": {
42
- "debug": False,
43
- "top_k": self._parameters_["topK"],
44
- "top_p": self._parameters_["topP"],
45
- "prompt": user_prompt,
46
- "system_prompt": system_prompt,
47
- "temperature": self._parameters_["temperature"],
48
- "max_new_tokens": self._parameters_["max_new_tokens"],
49
- "min_new_tokens": self._parameters_["min_new_tokens"],
50
- "prompt_template": "{prompt}",
51
- "repetition_penalty": self._parameters_["repetition_penalty"],
52
- },
53
- }
54
-
55
- async with aiohttp.ClientSession() as session:
56
- async with session.post(
57
- self._base_url, headers=self.headers, data=json.dumps(data)
58
- ) as response:
59
- raw_response_text = await response.text()
60
- data = json.loads(raw_response_text)
61
- print(f"This was the data returned by the model:{data}")
62
- prediction_url = data["urls"]["get"]
63
-
64
- while True:
65
- async with session.get(
66
- prediction_url, headers=self.headers
67
- ) as get_response:
68
- if get_response.status != 200:
69
- # Handle non-success status codes appropriately
70
- return None
71
-
72
- get_data = await get_response.text()
73
- get_data = json.loads(get_data)
74
- if get_data["status"] == "succeeded":
75
- return get_data
76
- await asyncio.sleep(1)
77
-
78
- def parse_response(self, raw_response: dict[str, Any]) -> str:
79
- data = "".join(raw_response["output"])
80
- print(f"This is what the model returned: {data}")
81
- return data
82
-
83
- return ReplicateLanguageModelBase
@@ -1,6 +0,0 @@
1
- from edsl.prompts.Prompt import PromptBase
2
- from edsl.prompts.prompt_config import ComponentTypes
3
-
4
-
5
- class QuestionInstuctionsBase(PromptBase):
6
- component_type = ComponentTypes.QUESTION_INSTRUCTIONS
@@ -1,29 +0,0 @@
1
- import textwrap
2
-
3
- from edsl.prompts.Prompt import PromptBase
4
- from edsl.prompts.prompt_config import ComponentTypes
5
-
6
- from edsl.enums import LanguageModelType
7
-
8
-
9
- class AgentInstruction(PromptBase):
10
- model = LanguageModelType.GPT_3_5_Turbo.value
11
- component_type = ComponentTypes.AGENT_INSTRUCTIONS
12
- default_instructions = textwrap.dedent(
13
- """\
14
- You are playing the role of a human answering survey questions.
15
- Do not break character.
16
- """
17
- )
18
-
19
-
20
- class AgentInstructionLlama(PromptBase):
21
- model = LanguageModelType.LLAMA_2_70B_CHAT_HF.value
22
- component_type = ComponentTypes.AGENT_INSTRUCTIONS
23
- default_instructions = textwrap.dedent(
24
- """\
25
- You are playing the role of a human answering questions.
26
- Do not break character.
27
- Only respond in JSON, with one answer formatted as specified.
28
- """
29
- )
@@ -1,17 +0,0 @@
1
- import textwrap
2
-
3
- from edsl.prompts.Prompt import PromptBase
4
- from edsl.prompts.prompt_config import ComponentTypes
5
-
6
- from edsl.enums import LanguageModelType
7
-
8
-
9
- class AgentPersona(PromptBase):
10
- model = "gpt-4-1106-preview"
11
- component_type = ComponentTypes.AGENT_PERSONA
12
- default_instructions = textwrap.dedent(
13
- """\
14
- You are an agent with the following persona:
15
- {{ traits }}
16
- """
17
- )
@@ -1,26 +0,0 @@
1
- import textwrap
2
-
3
- from edsl.prompts.QuestionInstructionsBase import QuestionInstuctionsBase
4
-
5
-
6
- class Budget(QuestionInstuctionsBase):
7
- question_type = "budget"
8
- model = "gpt-4-1106-preview"
9
- default_instructions = textwrap.dedent(
10
- """\
11
- You are being asked the following question: {{question_text}}
12
- The options are
13
- {% for option in question_options %}
14
- {{ loop.index0 }}: {{option}}
15
- {% endfor %}
16
- Return a valid JSON formatted as follows, with a dictionary for your "answer"
17
- where the keys are the option numbers and the values are the amounts you want
18
- to allocate to the options, and the sum of the values is {{budget_sum}}:
19
- {"answer": {<put dict of option numbers and allocation amounts here>},
20
- "comment": "<put explanation here>"}
21
- Example response for a budget of 100 and 4 options:
22
- {"answer": {"0": 25, "1": 25, "2": 25, "3": 25},
23
- "comment": "I allocated 25 to each option."}
24
- There must be an allocation listed for each item (including 0).
25
- """
26
- )