edsl 0.1.47__py3-none-any.whl → 0.1.49__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 (314) hide show
  1. edsl/__init__.py +44 -39
  2. edsl/__version__.py +1 -1
  3. edsl/agents/__init__.py +4 -2
  4. edsl/agents/{Agent.py → agent.py} +442 -152
  5. edsl/agents/{AgentList.py → agent_list.py} +220 -162
  6. edsl/agents/descriptors.py +46 -7
  7. edsl/{exceptions/agents.py → agents/exceptions.py} +3 -12
  8. edsl/base/__init__.py +75 -0
  9. edsl/base/base_class.py +1303 -0
  10. edsl/base/data_transfer_models.py +114 -0
  11. edsl/base/enums.py +215 -0
  12. edsl/base.py +8 -0
  13. edsl/buckets/__init__.py +25 -0
  14. edsl/buckets/bucket_collection.py +324 -0
  15. edsl/buckets/model_buckets.py +206 -0
  16. edsl/buckets/token_bucket.py +502 -0
  17. edsl/{jobs/buckets/TokenBucketAPI.py → buckets/token_bucket_api.py} +1 -1
  18. edsl/buckets/token_bucket_client.py +509 -0
  19. edsl/caching/__init__.py +20 -0
  20. edsl/caching/cache.py +814 -0
  21. edsl/caching/cache_entry.py +427 -0
  22. edsl/{data/CacheHandler.py → caching/cache_handler.py} +14 -15
  23. edsl/caching/exceptions.py +24 -0
  24. edsl/caching/orm.py +30 -0
  25. edsl/{data/RemoteCacheSync.py → caching/remote_cache_sync.py} +3 -3
  26. edsl/caching/sql_dict.py +441 -0
  27. edsl/config/__init__.py +8 -0
  28. edsl/config/config_class.py +177 -0
  29. edsl/config.py +4 -176
  30. edsl/conversation/Conversation.py +7 -7
  31. edsl/conversation/car_buying.py +4 -4
  32. edsl/conversation/chips.py +6 -6
  33. edsl/coop/__init__.py +25 -2
  34. edsl/coop/coop.py +311 -75
  35. edsl/coop/{ExpectedParrotKeyHandler.py → ep_key_handling.py} +86 -10
  36. edsl/coop/exceptions.py +62 -0
  37. edsl/coop/price_fetcher.py +126 -0
  38. edsl/coop/utils.py +89 -24
  39. edsl/data_transfer_models.py +5 -72
  40. edsl/dataset/__init__.py +10 -0
  41. edsl/{results/Dataset.py → dataset/dataset.py} +116 -36
  42. edsl/{results/DatasetExportMixin.py → dataset/dataset_operations_mixin.py} +606 -122
  43. edsl/{results/DatasetTree.py → dataset/dataset_tree.py} +156 -75
  44. edsl/{results/TableDisplay.py → dataset/display/table_display.py} +18 -7
  45. edsl/{results → dataset/display}/table_renderers.py +58 -2
  46. edsl/{results → dataset}/file_exports.py +4 -5
  47. edsl/{results → dataset}/smart_objects.py +2 -2
  48. edsl/enums.py +5 -205
  49. edsl/inference_services/__init__.py +5 -0
  50. edsl/inference_services/{AvailableModelCacheHandler.py → available_model_cache_handler.py} +2 -3
  51. edsl/inference_services/{AvailableModelFetcher.py → available_model_fetcher.py} +8 -14
  52. edsl/inference_services/data_structures.py +3 -2
  53. edsl/{exceptions/inference_services.py → inference_services/exceptions.py} +1 -1
  54. edsl/inference_services/{InferenceServiceABC.py → inference_service_abc.py} +1 -1
  55. edsl/inference_services/{InferenceServicesCollection.py → inference_services_collection.py} +8 -7
  56. edsl/inference_services/registry.py +4 -41
  57. edsl/inference_services/{ServiceAvailability.py → service_availability.py} +5 -25
  58. edsl/inference_services/services/__init__.py +31 -0
  59. edsl/inference_services/{AnthropicService.py → services/anthropic_service.py} +3 -3
  60. edsl/inference_services/{AwsBedrock.py → services/aws_bedrock.py} +2 -2
  61. edsl/inference_services/{AzureAI.py → services/azure_ai.py} +2 -2
  62. edsl/inference_services/{DeepInfraService.py → services/deep_infra_service.py} +1 -3
  63. edsl/inference_services/{DeepSeekService.py → services/deep_seek_service.py} +2 -4
  64. edsl/inference_services/{GoogleService.py → services/google_service.py} +5 -4
  65. edsl/inference_services/{GroqService.py → services/groq_service.py} +1 -1
  66. edsl/inference_services/{MistralAIService.py → services/mistral_ai_service.py} +3 -3
  67. edsl/inference_services/{OllamaService.py → services/ollama_service.py} +1 -7
  68. edsl/inference_services/{OpenAIService.py → services/open_ai_service.py} +5 -6
  69. edsl/inference_services/{PerplexityService.py → services/perplexity_service.py} +3 -7
  70. edsl/inference_services/{TestService.py → services/test_service.py} +7 -6
  71. edsl/inference_services/{TogetherAIService.py → services/together_ai_service.py} +2 -6
  72. edsl/inference_services/{XAIService.py → services/xai_service.py} +1 -1
  73. edsl/inference_services/write_available.py +1 -2
  74. edsl/instructions/__init__.py +6 -0
  75. edsl/{surveys/instructions/Instruction.py → instructions/instruction.py} +11 -6
  76. edsl/{surveys/instructions/InstructionCollection.py → instructions/instruction_collection.py} +10 -5
  77. edsl/{surveys/InstructionHandler.py → instructions/instruction_handler.py} +3 -3
  78. edsl/{jobs/interviews → interviews}/ReportErrors.py +2 -2
  79. edsl/interviews/__init__.py +4 -0
  80. edsl/{jobs/AnswerQuestionFunctionConstructor.py → interviews/answering_function.py} +45 -18
  81. edsl/{jobs/interviews/InterviewExceptionEntry.py → interviews/exception_tracking.py} +107 -22
  82. edsl/interviews/interview.py +638 -0
  83. edsl/{jobs/interviews/InterviewStatusDictionary.py → interviews/interview_status_dictionary.py} +21 -12
  84. edsl/{jobs/interviews/InterviewStatusLog.py → interviews/interview_status_log.py} +16 -7
  85. edsl/{jobs/InterviewTaskManager.py → interviews/interview_task_manager.py} +12 -7
  86. edsl/{jobs/RequestTokenEstimator.py → interviews/request_token_estimator.py} +8 -3
  87. edsl/{jobs/interviews/InterviewStatistic.py → interviews/statistics.py} +36 -10
  88. edsl/invigilators/__init__.py +38 -0
  89. edsl/invigilators/invigilator_base.py +477 -0
  90. edsl/{agents/Invigilator.py → invigilators/invigilators.py} +263 -10
  91. edsl/invigilators/prompt_constructor.py +476 -0
  92. edsl/{agents → invigilators}/prompt_helpers.py +2 -1
  93. edsl/{agents/QuestionInstructionPromptBuilder.py → invigilators/question_instructions_prompt_builder.py} +18 -13
  94. edsl/{agents → invigilators}/question_option_processor.py +96 -21
  95. edsl/{agents/QuestionTemplateReplacementsBuilder.py → invigilators/question_template_replacements_builder.py} +64 -12
  96. edsl/jobs/__init__.py +7 -1
  97. edsl/jobs/async_interview_runner.py +99 -35
  98. edsl/jobs/check_survey_scenario_compatibility.py +7 -5
  99. edsl/jobs/data_structures.py +153 -22
  100. edsl/{exceptions/jobs.py → jobs/exceptions.py} +2 -1
  101. edsl/jobs/{FetchInvigilator.py → fetch_invigilator.py} +4 -4
  102. edsl/jobs/{loggers/HTMLTableJobLogger.py → html_table_job_logger.py} +6 -2
  103. edsl/jobs/{Jobs.py → jobs.py} +313 -167
  104. edsl/jobs/{JobsChecks.py → jobs_checks.py} +15 -7
  105. edsl/jobs/{JobsComponentConstructor.py → jobs_component_constructor.py} +19 -17
  106. edsl/jobs/{InterviewsConstructor.py → jobs_interview_constructor.py} +10 -5
  107. edsl/jobs/jobs_pricing_estimation.py +347 -0
  108. edsl/jobs/{JobsRemoteInferenceLogger.py → jobs_remote_inference_logger.py} +4 -3
  109. edsl/jobs/jobs_runner_asyncio.py +282 -0
  110. edsl/jobs/{JobsRemoteInferenceHandler.py → remote_inference.py} +19 -22
  111. edsl/jobs/results_exceptions_handler.py +2 -2
  112. edsl/key_management/__init__.py +28 -0
  113. edsl/key_management/key_lookup.py +161 -0
  114. edsl/{language_models/key_management/KeyLookupBuilder.py → key_management/key_lookup_builder.py} +118 -47
  115. edsl/key_management/key_lookup_collection.py +82 -0
  116. edsl/key_management/models.py +218 -0
  117. edsl/language_models/__init__.py +7 -2
  118. edsl/language_models/{ComputeCost.py → compute_cost.py} +18 -3
  119. edsl/{exceptions/language_models.py → language_models/exceptions.py} +2 -1
  120. edsl/language_models/language_model.py +1080 -0
  121. edsl/language_models/model.py +10 -25
  122. edsl/language_models/{ModelList.py → model_list.py} +9 -14
  123. edsl/language_models/{RawResponseHandler.py → raw_response_handler.py} +1 -1
  124. edsl/language_models/{RegisterLanguageModelsMeta.py → registry.py} +1 -1
  125. edsl/language_models/repair.py +4 -4
  126. edsl/language_models/utilities.py +4 -4
  127. edsl/notebooks/__init__.py +3 -1
  128. edsl/notebooks/{Notebook.py → notebook.py} +7 -8
  129. edsl/prompts/__init__.py +1 -1
  130. edsl/{exceptions/prompts.py → prompts/exceptions.py} +3 -1
  131. edsl/prompts/{Prompt.py → prompt.py} +101 -95
  132. edsl/questions/HTMLQuestion.py +1 -1
  133. edsl/questions/__init__.py +154 -25
  134. edsl/questions/answer_validator_mixin.py +1 -1
  135. edsl/questions/compose_questions.py +4 -3
  136. edsl/questions/derived/question_likert_five.py +166 -0
  137. edsl/questions/derived/{QuestionLinearScale.py → question_linear_scale.py} +4 -4
  138. edsl/questions/derived/{QuestionTopK.py → question_top_k.py} +4 -4
  139. edsl/questions/derived/{QuestionYesNo.py → question_yes_no.py} +4 -5
  140. edsl/questions/descriptors.py +24 -30
  141. edsl/questions/loop_processor.py +65 -19
  142. edsl/questions/question_base.py +881 -0
  143. edsl/questions/question_base_gen_mixin.py +15 -16
  144. edsl/questions/{QuestionBasePromptsMixin.py → question_base_prompts_mixin.py} +2 -2
  145. edsl/questions/{QuestionBudget.py → question_budget.py} +3 -4
  146. edsl/questions/{QuestionCheckBox.py → question_check_box.py} +16 -16
  147. edsl/questions/{QuestionDict.py → question_dict.py} +39 -5
  148. edsl/questions/{QuestionExtract.py → question_extract.py} +9 -9
  149. edsl/questions/question_free_text.py +282 -0
  150. edsl/questions/{QuestionFunctional.py → question_functional.py} +6 -5
  151. edsl/questions/{QuestionList.py → question_list.py} +6 -7
  152. edsl/questions/{QuestionMatrix.py → question_matrix.py} +6 -5
  153. edsl/questions/{QuestionMultipleChoice.py → question_multiple_choice.py} +126 -21
  154. edsl/questions/{QuestionNumerical.py → question_numerical.py} +5 -5
  155. edsl/questions/{QuestionRank.py → question_rank.py} +6 -6
  156. edsl/questions/question_registry.py +4 -9
  157. edsl/questions/register_questions_meta.py +8 -4
  158. edsl/questions/response_validator_abc.py +17 -16
  159. edsl/results/__init__.py +4 -1
  160. edsl/{exceptions/results.py → results/exceptions.py} +1 -1
  161. edsl/results/report.py +197 -0
  162. edsl/results/{Result.py → result.py} +131 -45
  163. edsl/results/{Results.py → results.py} +365 -220
  164. edsl/results/results_selector.py +344 -25
  165. edsl/scenarios/__init__.py +30 -3
  166. edsl/scenarios/{ConstructDownloadLink.py → construct_download_link.py} +7 -0
  167. edsl/scenarios/directory_scanner.py +156 -13
  168. edsl/scenarios/document_chunker.py +186 -0
  169. edsl/scenarios/exceptions.py +101 -0
  170. edsl/scenarios/file_methods.py +2 -3
  171. edsl/scenarios/{FileStore.py → file_store.py} +275 -189
  172. edsl/scenarios/handlers/__init__.py +14 -14
  173. edsl/scenarios/handlers/{csv.py → csv_file_store.py} +1 -2
  174. edsl/scenarios/handlers/{docx.py → docx_file_store.py} +8 -7
  175. edsl/scenarios/handlers/{html.py → html_file_store.py} +1 -2
  176. edsl/scenarios/handlers/{jpeg.py → jpeg_file_store.py} +1 -1
  177. edsl/scenarios/handlers/{json.py → json_file_store.py} +1 -1
  178. edsl/scenarios/handlers/latex_file_store.py +5 -0
  179. edsl/scenarios/handlers/{md.py → md_file_store.py} +1 -1
  180. edsl/scenarios/handlers/{pdf.py → pdf_file_store.py} +2 -2
  181. edsl/scenarios/handlers/{png.py → png_file_store.py} +1 -1
  182. edsl/scenarios/handlers/{pptx.py → pptx_file_store.py} +8 -7
  183. edsl/scenarios/handlers/{py.py → py_file_store.py} +1 -3
  184. edsl/scenarios/handlers/{sql.py → sql_file_store.py} +2 -1
  185. edsl/scenarios/handlers/{sqlite.py → sqlite_file_store.py} +2 -3
  186. edsl/scenarios/handlers/{txt.py → txt_file_store.py} +1 -1
  187. edsl/scenarios/scenario.py +928 -0
  188. edsl/scenarios/scenario_join.py +18 -5
  189. edsl/scenarios/{ScenarioList.py → scenario_list.py} +294 -106
  190. edsl/scenarios/{ScenarioListPdfMixin.py → scenario_list_pdf_tools.py} +16 -15
  191. edsl/scenarios/scenario_selector.py +5 -1
  192. edsl/study/ObjectEntry.py +2 -2
  193. edsl/study/SnapShot.py +5 -5
  194. edsl/study/Study.py +18 -19
  195. edsl/study/__init__.py +6 -4
  196. edsl/surveys/__init__.py +7 -4
  197. edsl/surveys/dag/__init__.py +2 -0
  198. edsl/surveys/{ConstructDAG.py → dag/construct_dag.py} +3 -3
  199. edsl/surveys/{DAG.py → dag/dag.py} +13 -10
  200. edsl/surveys/descriptors.py +1 -1
  201. edsl/surveys/{EditSurvey.py → edit_survey.py} +9 -9
  202. edsl/{exceptions/surveys.py → surveys/exceptions.py} +1 -2
  203. edsl/surveys/memory/__init__.py +3 -0
  204. edsl/surveys/{MemoryPlan.py → memory/memory_plan.py} +10 -9
  205. edsl/surveys/rules/__init__.py +3 -0
  206. edsl/surveys/{Rule.py → rules/rule.py} +103 -43
  207. edsl/surveys/{RuleCollection.py → rules/rule_collection.py} +21 -30
  208. edsl/surveys/{RuleManager.py → rules/rule_manager.py} +19 -13
  209. edsl/surveys/survey.py +1743 -0
  210. edsl/surveys/{SurveyExportMixin.py → survey_export.py} +22 -27
  211. edsl/surveys/{SurveyFlowVisualization.py → survey_flow_visualization.py} +11 -2
  212. edsl/surveys/{Simulator.py → survey_simulator.py} +10 -3
  213. edsl/tasks/__init__.py +32 -0
  214. edsl/{jobs/tasks/QuestionTaskCreator.py → tasks/question_task_creator.py} +115 -57
  215. edsl/tasks/task_creators.py +135 -0
  216. edsl/{jobs/tasks/TaskHistory.py → tasks/task_history.py} +86 -47
  217. edsl/{jobs/tasks → tasks}/task_status_enum.py +91 -7
  218. edsl/tasks/task_status_log.py +85 -0
  219. edsl/tokens/__init__.py +2 -0
  220. edsl/tokens/interview_token_usage.py +53 -0
  221. edsl/utilities/PrettyList.py +1 -1
  222. edsl/utilities/SystemInfo.py +25 -22
  223. edsl/utilities/__init__.py +29 -21
  224. edsl/utilities/gcp_bucket/__init__.py +2 -0
  225. edsl/utilities/gcp_bucket/cloud_storage.py +99 -96
  226. edsl/utilities/interface.py +44 -536
  227. edsl/{results/MarkdownToPDF.py → utilities/markdown_to_pdf.py} +13 -5
  228. edsl/utilities/repair_functions.py +1 -1
  229. {edsl-0.1.47.dist-info → edsl-0.1.49.dist-info}/METADATA +1 -1
  230. edsl-0.1.49.dist-info/RECORD +347 -0
  231. edsl/Base.py +0 -493
  232. edsl/BaseDiff.py +0 -260
  233. edsl/agents/InvigilatorBase.py +0 -260
  234. edsl/agents/PromptConstructor.py +0 -318
  235. edsl/coop/PriceFetcher.py +0 -54
  236. edsl/data/Cache.py +0 -582
  237. edsl/data/CacheEntry.py +0 -238
  238. edsl/data/SQLiteDict.py +0 -292
  239. edsl/data/__init__.py +0 -5
  240. edsl/data/orm.py +0 -10
  241. edsl/exceptions/cache.py +0 -5
  242. edsl/exceptions/coop.py +0 -14
  243. edsl/exceptions/data.py +0 -14
  244. edsl/exceptions/scenarios.py +0 -29
  245. edsl/jobs/Answers.py +0 -43
  246. edsl/jobs/JobsPrompts.py +0 -354
  247. edsl/jobs/buckets/BucketCollection.py +0 -134
  248. edsl/jobs/buckets/ModelBuckets.py +0 -65
  249. edsl/jobs/buckets/TokenBucket.py +0 -283
  250. edsl/jobs/buckets/TokenBucketClient.py +0 -191
  251. edsl/jobs/interviews/Interview.py +0 -395
  252. edsl/jobs/interviews/InterviewExceptionCollection.py +0 -99
  253. edsl/jobs/interviews/InterviewStatisticsCollection.py +0 -25
  254. edsl/jobs/runners/JobsRunnerAsyncio.py +0 -163
  255. edsl/jobs/runners/JobsRunnerStatusData.py +0 -0
  256. edsl/jobs/tasks/TaskCreators.py +0 -64
  257. edsl/jobs/tasks/TaskStatusLog.py +0 -23
  258. edsl/jobs/tokens/InterviewTokenUsage.py +0 -27
  259. edsl/language_models/LanguageModel.py +0 -635
  260. edsl/language_models/ServiceDataSources.py +0 -0
  261. edsl/language_models/key_management/KeyLookup.py +0 -63
  262. edsl/language_models/key_management/KeyLookupCollection.py +0 -38
  263. edsl/language_models/key_management/models.py +0 -137
  264. edsl/questions/QuestionBase.py +0 -544
  265. edsl/questions/QuestionFreeText.py +0 -130
  266. edsl/questions/derived/QuestionLikertFive.py +0 -76
  267. edsl/results/ResultsExportMixin.py +0 -45
  268. edsl/results/TextEditor.py +0 -50
  269. edsl/results/results_fetch_mixin.py +0 -33
  270. edsl/results/results_tools_mixin.py +0 -98
  271. edsl/scenarios/DocumentChunker.py +0 -104
  272. edsl/scenarios/Scenario.py +0 -548
  273. edsl/scenarios/ScenarioHtmlMixin.py +0 -65
  274. edsl/scenarios/ScenarioListExportMixin.py +0 -45
  275. edsl/scenarios/handlers/latex.py +0 -5
  276. edsl/shared.py +0 -1
  277. edsl/surveys/Survey.py +0 -1301
  278. edsl/surveys/SurveyQualtricsImport.py +0 -284
  279. edsl/surveys/SurveyToApp.py +0 -141
  280. edsl/surveys/instructions/__init__.py +0 -0
  281. edsl/tools/__init__.py +0 -1
  282. edsl/tools/clusters.py +0 -192
  283. edsl/tools/embeddings.py +0 -27
  284. edsl/tools/embeddings_plotting.py +0 -118
  285. edsl/tools/plotting.py +0 -112
  286. edsl/tools/summarize.py +0 -18
  287. edsl/utilities/data/Registry.py +0 -6
  288. edsl/utilities/data/__init__.py +0 -1
  289. edsl/utilities/data/scooter_results.json +0 -1
  290. edsl-0.1.47.dist-info/RECORD +0 -354
  291. /edsl/coop/{CoopFunctionsMixin.py → coop_functions.py} +0 -0
  292. /edsl/{results → dataset/display}/CSSParameterizer.py +0 -0
  293. /edsl/{language_models/key_management → dataset/display}/__init__.py +0 -0
  294. /edsl/{results → dataset/display}/table_data_class.py +0 -0
  295. /edsl/{results → dataset/display}/table_display.css +0 -0
  296. /edsl/{results/ResultsGGMixin.py → dataset/r/ggplot.py} +0 -0
  297. /edsl/{results → dataset}/tree_explore.py +0 -0
  298. /edsl/{surveys/instructions/ChangeInstruction.py → instructions/change_instruction.py} +0 -0
  299. /edsl/{jobs/interviews → interviews}/interview_status_enum.py +0 -0
  300. /edsl/jobs/{runners/JobsRunnerStatus.py → jobs_runner_status.py} +0 -0
  301. /edsl/language_models/{PriceManager.py → price_manager.py} +0 -0
  302. /edsl/language_models/{fake_openai_call.py → unused/fake_openai_call.py} +0 -0
  303. /edsl/language_models/{fake_openai_service.py → unused/fake_openai_service.py} +0 -0
  304. /edsl/notebooks/{NotebookToLaTeX.py → notebook_to_latex.py} +0 -0
  305. /edsl/{exceptions/questions.py → questions/exceptions.py} +0 -0
  306. /edsl/questions/{SimpleAskMixin.py → simple_ask_mixin.py} +0 -0
  307. /edsl/surveys/{Memory.py → memory/memory.py} +0 -0
  308. /edsl/surveys/{MemoryManagement.py → memory/memory_management.py} +0 -0
  309. /edsl/surveys/{SurveyCSS.py → survey_css.py} +0 -0
  310. /edsl/{jobs/tokens/TokenUsage.py → tokens/token_usage.py} +0 -0
  311. /edsl/{results/MarkdownToDocx.py → utilities/markdown_to_docx.py} +0 -0
  312. /edsl/{TemplateLoader.py → utilities/template_loader.py} +0 -0
  313. {edsl-0.1.47.dist-info → edsl-0.1.49.dist-info}/LICENSE +0 -0
  314. {edsl-0.1.47.dist-info → edsl-0.1.49.dist-info}/WHEEL +0 -0
@@ -2,19 +2,13 @@ from typing import Any, List, Tuple, Optional, Dict, TYPE_CHECKING, Union, Gener
2
2
  from concurrent.futures import ThreadPoolExecutor, as_completed
3
3
  from collections import UserList
4
4
 
5
- from edsl.inference_services.ServiceAvailability import ServiceAvailability
6
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.inference_services.data_structures import ModelNamesList
8
- from edsl.enums import InferenceServiceLiteral
5
+ from .service_availability import ServiceAvailability
6
+ from .inference_service_abc import InferenceServiceABC
7
+ from ..enums import InferenceServiceLiteral
9
8
 
10
- from edsl.inference_services.data_structures import LanguageModelInfo
11
- from edsl.inference_services.AvailableModelCacheHandler import (
12
- AvailableModelCacheHandler,
13
- )
14
-
15
-
16
- from edsl.inference_services.data_structures import AvailableModels
9
+ from .data_structures import ModelNamesList, LanguageModelInfo, AvailableModels
17
10
 
11
+ from .available_model_cache_handler import AvailableModelCacheHandler
18
12
 
19
13
  class AvailableModelFetcher:
20
14
  """Fetches available models from the various services with JSON caching."""
@@ -62,7 +56,7 @@ class AvailableModelFetcher:
62
56
 
63
57
  :param service: Optional[InferenceServiceABC] - If specified, only fetch models for this service.
64
58
 
65
- >>> from edsl.inference_services.OpenAIService import OpenAIService
59
+ >>> from edsl.inference_services.services.open_ai_service import OpenAIService
66
60
  >>> af = AvailableModelFetcher([OpenAIService()], {})
67
61
  >>> af.available(service="openai")
68
62
  [LanguageModelInfo(model_name='...', service_name='openai'), ...]
@@ -195,7 +189,7 @@ class AvailableModelFetcher:
195
189
 
196
190
 
197
191
  def main():
198
- from edsl.inference_services.OpenAIService import OpenAIService
192
+ from .services.open_ai_service import OpenAIService
199
193
 
200
194
  af = AvailableModelFetcher([OpenAIService()], {}, verbose=True)
201
195
  # print(af.available(service="openai"))
@@ -211,7 +205,7 @@ if __name__ == "__main__":
211
205
  doctest.testmod(optionflags=doctest.ELLIPSIS)
212
206
  # main()
213
207
 
214
- # from edsl.inference_services.OpenAIService import OpenAIService
208
+ # from .services.open_ai_service import OpenAIService
215
209
 
216
210
  # af = AvailableModelFetcher([OpenAIService()], {}, verbose=True)
217
211
  # # print(af.available(service="openai"))
@@ -1,8 +1,9 @@
1
1
  from collections import UserDict, defaultdict, UserList
2
2
  from typing import Union, Optional, List
3
- from edsl.enums import InferenceServiceLiteral
4
3
  from dataclasses import dataclass
5
4
 
5
+ from ..enums import InferenceServiceLiteral
6
+ from ..scenarios import ScenarioList
6
7
 
7
8
  @dataclass
8
9
  class LanguageModelInfo:
@@ -81,7 +82,7 @@ class AvailableModels(UserList):
81
82
  )
82
83
 
83
84
  def to_model_list(self):
84
- from edsl.language_models.ModelList import ModelList
85
+ from ..language_models import ModelList
85
86
 
86
87
  return ModelList.from_available_models(self)
87
88
 
@@ -1,4 +1,4 @@
1
- from edsl.exceptions.BaseException import BaseException
1
+ from ..base import BaseException
2
2
 
3
3
 
4
4
  class InferenceServiceError(BaseException):
@@ -1,7 +1,7 @@
1
1
  from abc import abstractmethod, ABC
2
2
  import re
3
3
  from datetime import datetime, timedelta
4
- from edsl.config import CONFIG
4
+ from ..config import CONFIG
5
5
 
6
6
 
7
7
  class InferenceServiceABC(ABC):
@@ -1,14 +1,15 @@
1
1
  from functools import lru_cache
2
2
  from collections import defaultdict
3
- from typing import Optional, Protocol, Dict, List, Tuple, TYPE_CHECKING, Literal
3
+ from typing import Optional, Protocol, Dict, List, Tuple, TYPE_CHECKING, Literal, Type, TypeVar, Union
4
+ import os
4
5
 
5
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
6
- from edsl.inference_services.AvailableModelFetcher import AvailableModelFetcher
7
- from edsl.exceptions.inference_services import InferenceServiceError
6
+ from .inference_service_abc import InferenceServiceABC
7
+ from .available_model_fetcher import AvailableModelFetcher
8
+ from .exceptions import InferenceServiceError
8
9
 
9
10
  if TYPE_CHECKING:
10
- from edsl.language_models.LanguageModel import LanguageModel
11
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
11
+ from ..language_models import LanguageModel
12
+ from .inference_service_abc import InferenceServiceABC
12
13
 
13
14
 
14
15
  class ModelCreator(Protocol):
@@ -47,7 +48,7 @@ class ModelResolver:
47
48
 
48
49
  """
49
50
  if model_name == "test":
50
- from edsl.inference_services.TestService import TestService
51
+ from .services.test_service import TestService
51
52
 
52
53
  return TestService()
53
54
 
@@ -1,45 +1,8 @@
1
- from edsl.inference_services.InferenceServicesCollection import (
2
- InferenceServicesCollection,
3
- )
1
+ from .inference_services_collection import InferenceServicesCollection
4
2
 
5
- from edsl.inference_services.OpenAIService import OpenAIService
6
- from edsl.inference_services.AnthropicService import AnthropicService
7
- from edsl.inference_services.DeepInfraService import DeepInfraService
8
- from edsl.inference_services.GoogleService import GoogleService
9
- from edsl.inference_services.GroqService import GroqService
10
- from edsl.inference_services.AwsBedrock import AwsBedrockService
11
- from edsl.inference_services.AzureAI import AzureAIService
12
- from edsl.inference_services.OllamaService import OllamaService
13
- from edsl.inference_services.TestService import TestService
14
- from edsl.inference_services.TogetherAIService import TogetherAIService
15
- from edsl.inference_services.PerplexityService import PerplexityService
16
- from edsl.inference_services.DeepSeekService import DeepSeekService
17
- from edsl.inference_services.XAIService import XAIService
3
+ from .services import *
4
+ from .services import __all__
18
5
 
19
- try:
20
- from edsl.inference_services.MistralAIService import MistralAIService
21
-
22
- mistral_available = True
23
- except Exception as e:
24
- mistral_available = False
25
-
26
- services = [
27
- OpenAIService,
28
- AnthropicService,
29
- DeepInfraService,
30
- GoogleService,
31
- GroqService,
32
- AwsBedrockService,
33
- AzureAIService,
34
- OllamaService,
35
- TestService,
36
- TogetherAIService,
37
- PerplexityService,
38
- DeepSeekService,
39
- XAIService,
40
- ]
41
-
42
- if mistral_available:
43
- services.append(MistralAIService)
6
+ services = [globals()[service_name] for service_name in __all__ if service_name in globals()]
44
7
 
45
8
  default = InferenceServicesCollection(services)
@@ -3,10 +3,11 @@ from typing import List, Optional, TYPE_CHECKING
3
3
  from functools import partial
4
4
  import warnings
5
5
 
6
- from edsl.inference_services.data_structures import AvailableModels, ModelNamesList
6
+ from .data_structures import AvailableModels, ModelNamesList
7
+ from .inference_service_abc import InferenceServiceABC
7
8
 
8
9
  if TYPE_CHECKING:
9
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
10
+ from .inference_service_abc import InferenceServiceABC
10
11
 
11
12
 
12
13
  class ModelSource(Enum):
@@ -110,26 +111,5 @@ class ServiceAvailability:
110
111
 
111
112
 
112
113
  if __name__ == "__main__":
113
- # sa = ServiceAvailability()
114
- # models_from_coop = sa.models_from_coop()
115
- # print(models_from_coop)
116
- from edsl.inference_services.OpenAIService import OpenAIService
117
-
118
- openai_models = ServiceAvailability._fetch_from_local_service(OpenAIService())
119
- print(openai_models)
120
-
121
- # Example usage:
122
- """
123
- # Default order (LOCAL -> COOP -> CACHE)
124
- availability = ServiceAvailability()
125
-
126
- # Custom order (COOP -> LOCAL -> CACHE)
127
- availability_coop_first = ServiceAvailability([
128
- ModelSource.COOP,
129
- ModelSource.LOCAL,
130
- ModelSource.CACHE
131
- ])
132
-
133
- # Get available models using custom order
134
- models = availability_coop_first.get_service_available(service, warn=True)
135
- """
114
+ import doctest
115
+ doctest.tesmod()
@@ -0,0 +1,31 @@
1
+ from .anthropic_service import AnthropicService
2
+ from .aws_bedrock import AwsBedrockService
3
+ from .azure_ai import AzureAIService
4
+ from .deep_infra_service import DeepInfraService
5
+ from .deep_seek_service import DeepSeekService
6
+ from .google_service import GoogleService
7
+ from .groq_service import GroqService
8
+ from .mistral_ai_service import MistralAIService
9
+ from .ollama_service import OllamaService
10
+ from .open_ai_service import OpenAIService
11
+ from .perplexity_service import PerplexityService
12
+ from .test_service import TestService
13
+ from .together_ai_service import TogetherAIService
14
+ from .xai_service import XAIService
15
+
16
+ __all__ = [
17
+ "AnthropicService",
18
+ "AwsBedrockService",
19
+ "AzureAIService",
20
+ "DeepInfraService",
21
+ "DeepSeekService",
22
+ "GoogleService",
23
+ "GroqService",
24
+ "MistralAIService",
25
+ "OllamaService",
26
+ "OpenAIService",
27
+ "PerplexityService",
28
+ "TestService",
29
+ "TogetherAIService",
30
+ "XAIService",
31
+ ]
@@ -1,9 +1,9 @@
1
1
  import os
2
2
  from typing import Any, Optional, List
3
- import re
4
3
  from anthropic import AsyncAnthropic
5
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
6
- from edsl.language_models.LanguageModel import LanguageModel
4
+
5
+ from ..inference_service_abc import InferenceServiceABC
6
+ from ...language_models import LanguageModel
7
7
 
8
8
 
9
9
  class AnthropicService(InferenceServiceABC):
@@ -3,8 +3,8 @@ from typing import Any, List, Optional
3
3
  import re
4
4
  import boto3
5
5
  from botocore.exceptions import ClientError
6
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.language_models.LanguageModel import LanguageModel
6
+ from ..inference_service_abc import InferenceServiceABC
7
+ from ...language_models import LanguageModel
8
8
  import json
9
9
  from edsl.utilities.utilities import fix_partial_correct_response
10
10
 
@@ -2,8 +2,8 @@ import os
2
2
  from typing import Any, Optional, List
3
3
  import re
4
4
  from openai import AsyncAzureOpenAI
5
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
6
- from edsl.language_models.LanguageModel import LanguageModel
5
+ from ..inference_service_abc import InferenceServiceABC
6
+ from ...language_models import LanguageModel
7
7
 
8
8
  from azure.ai.inference.aio import ChatCompletionsClient
9
9
  from azure.core.credentials import AzureKeyCredential
@@ -3,10 +3,8 @@ import json
3
3
  import requests
4
4
  from typing import Any, List
5
5
 
6
- # from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.language_models import LanguageModel
8
6
 
9
- from edsl.inference_services.OpenAIService import OpenAIService
7
+ from .open_ai_service import OpenAIService
10
8
 
11
9
 
12
10
  class DeepInfraService(OpenAIService):
@@ -3,10 +3,8 @@ import json
3
3
  import requests
4
4
  from typing import Any, List
5
5
 
6
- # from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.language_models import LanguageModel
8
-
9
- from edsl.inference_services.OpenAIService import OpenAIService
6
+ from ...language_models import LanguageModel
7
+ from .open_ai_service import OpenAIService
10
8
 
11
9
 
12
10
  class DeepSeekService(OpenAIService):
@@ -6,9 +6,8 @@ from google.generativeai.types import GenerationConfig
6
6
  from google.api_core.exceptions import InvalidArgument
7
7
 
8
8
  # from edsl.exceptions.general import MissingAPIKeyError
9
- from edsl.language_models.LanguageModel import LanguageModel
10
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
11
- from edsl.coop import Coop
9
+ from ..inference_service_abc import InferenceServiceABC
10
+ #from ...coop import Coop
12
11
 
13
12
  safety_settings = [
14
13
  {
@@ -58,10 +57,12 @@ class GoogleService(InferenceServiceABC):
58
57
  @classmethod
59
58
  def create_model(
60
59
  cls, model_name: str = "gemini-pro", model_class_name=None
61
- ) -> LanguageModel:
60
+ ) -> 'LanguageModel':
62
61
  if model_class_name is None:
63
62
  model_class_name = cls.to_class_name(model_name)
64
63
 
64
+ from ...language_models import LanguageModel
65
+
65
66
  class LLM(LanguageModel):
66
67
  _model_ = model_name
67
68
  key_sequence = cls.key_sequence
@@ -1,8 +1,8 @@
1
1
  from typing import Any, List
2
- from edsl.inference_services.OpenAIService import OpenAIService
3
2
 
4
3
  import groq
5
4
 
5
+ from .open_ai_service import OpenAIService
6
6
 
7
7
  class GroqService(OpenAIService):
8
8
  """DeepInfra service class."""
@@ -1,11 +1,11 @@
1
1
  import os
2
2
  from typing import Any, List, Optional
3
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
4
- from edsl.language_models.LanguageModel import LanguageModel
5
3
  import asyncio
6
4
  from mistralai import Mistral
7
5
 
8
- from edsl.exceptions.language_models import LanguageModelBadResponseError
6
+
7
+ from ..inference_service_abc import InferenceServiceABC
8
+ from ...language_models import LanguageModel
9
9
 
10
10
 
11
11
  class MistralAIService(InferenceServiceABC):
@@ -1,12 +1,6 @@
1
- import aiohttp
2
- import json
3
- import requests
4
1
  from typing import Any, List
5
2
 
6
- # from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.language_models import LanguageModel
8
-
9
- from edsl.inference_services.OpenAIService import OpenAIService
3
+ from .open_ai_service import OpenAIService
10
4
 
11
5
 
12
6
  class OllamaService(OpenAIService):
@@ -2,15 +2,14 @@ from __future__ import annotations
2
2
  from typing import Any, List, Optional, Dict, NewType
3
3
  import os
4
4
 
5
-
6
5
  import openai
7
6
 
8
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
9
- from edsl.language_models.LanguageModel import LanguageModel
10
- from edsl.inference_services.rate_limits_cache import rate_limits
11
- from edsl.utilities.utilities import fix_partial_correct_response
7
+ from ..inference_service_abc import InferenceServiceABC
8
+ from ...language_models import LanguageModel
9
+ from ..rate_limits_cache import rate_limits
10
+ from ...utilities.utilities import fix_partial_correct_response
12
11
 
13
- from edsl.config import CONFIG
12
+ from ...config import CONFIG
14
13
 
15
14
  APIToken = NewType("APIToken", str)
16
15
 
@@ -1,13 +1,9 @@
1
- import aiohttp
2
- import json
3
- import requests
4
1
  from typing import Any, List, Optional
5
- from edsl.inference_services.rate_limits_cache import rate_limits
2
+ from ..rate_limits_cache import rate_limits
6
3
 
7
- # from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
8
- from edsl.language_models import LanguageModel
4
+ from ...language_models import LanguageModel
9
5
 
10
- from edsl.inference_services.OpenAIService import OpenAIService
6
+ from .open_ai_service import OpenAIService
11
7
 
12
8
 
13
9
  class PerplexityService(OpenAIService):
@@ -1,14 +1,15 @@
1
1
  from typing import Any, List, Optional
2
2
  import os
3
3
  import asyncio
4
- from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
5
- from edsl.language_models.LanguageModel import LanguageModel
6
- from edsl.inference_services.rate_limits_cache import rate_limits
7
- from edsl.utilities.utilities import fix_partial_correct_response
8
-
9
- from edsl.enums import InferenceServiceType
10
4
  import random
11
5
 
6
+ from ..inference_service_abc import InferenceServiceABC
7
+ from ..rate_limits_cache import rate_limits
8
+
9
+ from ...language_models import LanguageModel
10
+ from ...utilities.utilities import fix_partial_correct_response
11
+ from ...enums import InferenceServiceType
12
+
12
13
 
13
14
  class TestService(InferenceServiceABC):
14
15
  """OpenAI service class."""
@@ -1,12 +1,8 @@
1
- import aiohttp
2
- import json
3
- import requests
4
1
  from typing import Any, List, Optional
5
2
 
6
- # from edsl.inference_services.InferenceServiceABC import InferenceServiceABC
7
- from edsl.language_models import LanguageModel
3
+ from ...language_models import LanguageModel
4
+ from .open_ai_service import OpenAIService
8
5
 
9
- from edsl.inference_services.OpenAIService import OpenAIService
10
6
  import openai
11
7
 
12
8
 
@@ -1,6 +1,6 @@
1
1
  from typing import Any, List
2
- from edsl.inference_services.OpenAIService import OpenAIService
3
2
 
3
+ from .open_ai_service import OpenAIService
4
4
 
5
5
  class XAIService(OpenAIService):
6
6
  """Openai service class."""
@@ -1,5 +1,4 @@
1
- from edsl.inference_services.registry import default
2
-
1
+ from .registry import default
3
2
 
4
3
  def write_available():
5
4
  d = {}
@@ -0,0 +1,6 @@
1
+ from .instruction import Instruction
2
+ from .instruction_collection import InstructionCollection
3
+ from .change_instruction import ChangeInstruction
4
+ from .instruction_handler import InstructionHandler
5
+
6
+ __all__ = ["Instruction", "ChangeInstruction"]
@@ -1,6 +1,7 @@
1
1
  from typing import Union, Optional, List, Generator, Dict
2
- from edsl.utilities.remove_edsl_version import remove_edsl_version
3
- from edsl.Base import RepresentationMixin
2
+ from ..utilities.remove_edsl_version import remove_edsl_version
3
+ from ..base import RepresentationMixin
4
+ #from ..surveys import Survey
4
5
 
5
6
 
6
7
  class Instruction(RepresentationMixin):
@@ -29,20 +30,19 @@ class Instruction(RepresentationMixin):
29
30
  "preamble": self.preamble,
30
31
  }
31
32
  if add_edsl_version:
32
- from edsl import __version__
33
+ from .. import __version__
33
34
 
34
35
  d["edsl_version"] = __version__
35
36
  d["edsl_class_name"] = "Instruction"
36
37
  return d
37
38
 
38
39
  def add_question(self, question) -> "Survey":
39
- from edsl.surveys.Survey import Survey
40
-
40
+ from ..surveys import Survey
41
41
  return Survey([self, question])
42
42
 
43
43
  def __hash__(self) -> int:
44
44
  """Return a hash of the question."""
45
- from edsl.utilities.utilities import dict_hash
45
+ from ..utilities.utilities import dict_hash
46
46
 
47
47
  return dict_hash(self.to_dict(add_edsl_version=False))
48
48
 
@@ -54,3 +54,8 @@ class Instruction(RepresentationMixin):
54
54
  data["text"],
55
55
  data.get("preamble", "You were given the following instructions:"),
56
56
  )
57
+
58
+
59
+ if __name__ == "__main__":
60
+ import doctest
61
+ doctest.testmod(optionflags=doctest.ELLIPSIS)
@@ -1,11 +1,11 @@
1
1
  from typing import TYPE_CHECKING, Dict, List, Generator, Union
2
2
  from collections import UserDict
3
3
 
4
- from edsl.surveys.instructions.Instruction import Instruction
5
- from edsl.surveys.instructions.ChangeInstruction import ChangeInstruction
4
+ from .instruction import Instruction
5
+ from .change_instruction import ChangeInstruction
6
6
 
7
7
  if TYPE_CHECKING:
8
- from edsl.questions.QuestionBase import QuestionBase
8
+ from ..questions import QuestionBase
9
9
 
10
10
 
11
11
  class InstructionCollection(UserDict):
@@ -25,7 +25,7 @@ class InstructionCollection(UserDict):
25
25
 
26
26
  def __getitem__(self, key):
27
27
  # in case the person uses question instead of the name
28
- from edsl.questions.QuestionBase import QuestionBase
28
+ from ..questions import QuestionBase
29
29
 
30
30
  if isinstance(key, QuestionBase):
31
31
  key = key.name
@@ -60,7 +60,7 @@ class InstructionCollection(UserDict):
60
60
  self, question: Union[str, "QuestionBase"]
61
61
  ) -> Generator[Instruction, None, None]:
62
62
  ## Find all the questions that are after a given instruction
63
- from edsl.questions.QuestionBase import QuestionBase
63
+ from ..questions import QuestionBase
64
64
 
65
65
  if isinstance(question, str):
66
66
  question_name = question
@@ -80,3 +80,8 @@ class InstructionCollection(UserDict):
80
80
 
81
81
  def __len__(self):
82
82
  return len(self.instruction_names_to_instruction)
83
+
84
+
85
+ if __name__ == "__main__":
86
+ import doctest
87
+ doctest.testmod(optionflags=doctest.ELLIPSIS)
@@ -53,9 +53,9 @@ class InstructionHandler:
53
53
  ...
54
54
  ValueError: ChangeInstruction change_instruction_0 references instruction poop which does not exist.
55
55
  """
56
- from edsl.surveys.instructions.Instruction import Instruction
57
- from edsl.surveys.instructions.ChangeInstruction import ChangeInstruction
58
- from edsl.questions.QuestionBase import QuestionBase
56
+ from .instruction import Instruction
57
+ from .change_instruction import ChangeInstruction
58
+ from edsl.questions import QuestionBase
59
59
 
60
60
  true_questions = []
61
61
  instruction_names_to_instructions = {}
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import requests
3
3
  import threading
4
- from edsl.coop import Coop
4
+ from ..coop import Coop
5
5
 
6
6
 
7
7
  class ReportErrors:
@@ -41,7 +41,7 @@ class ReportErrors:
41
41
 
42
42
 
43
43
  def main():
44
- from edsl.jobs.interviews.ReportErrors import ReportErrors
44
+ # Use the class directly since we're already in the module
45
45
 
46
46
  class TaskHistory:
47
47
  def __init__(self, data):
@@ -0,0 +1,4 @@
1
+ from .interview_task_manager import InterviewTaskManager
2
+ from .interview_status_dictionary import InterviewStatusDictionary
3
+ from .interview_status_log import InterviewStatusLog
4
+ from .interview import Interview