edsl 0.1.46__py3-none-any.whl → 0.1.48__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.
- edsl/__init__.py +44 -39
- edsl/__version__.py +1 -1
- edsl/agents/__init__.py +4 -2
- edsl/agents/{Agent.py → agent.py} +442 -152
- edsl/agents/{AgentList.py → agent_list.py} +220 -162
- edsl/agents/descriptors.py +46 -7
- edsl/{exceptions/agents.py → agents/exceptions.py} +3 -12
- edsl/base/__init__.py +75 -0
- edsl/base/base_class.py +1303 -0
- edsl/base/data_transfer_models.py +114 -0
- edsl/base/enums.py +215 -0
- edsl/base.py +8 -0
- edsl/buckets/__init__.py +25 -0
- edsl/buckets/bucket_collection.py +324 -0
- edsl/buckets/model_buckets.py +206 -0
- edsl/buckets/token_bucket.py +502 -0
- edsl/{jobs/buckets/TokenBucketAPI.py → buckets/token_bucket_api.py} +1 -1
- edsl/buckets/token_bucket_client.py +509 -0
- edsl/caching/__init__.py +20 -0
- edsl/caching/cache.py +814 -0
- edsl/caching/cache_entry.py +427 -0
- edsl/{data/CacheHandler.py → caching/cache_handler.py} +14 -15
- edsl/caching/exceptions.py +24 -0
- edsl/caching/orm.py +30 -0
- edsl/{data/RemoteCacheSync.py → caching/remote_cache_sync.py} +3 -3
- edsl/caching/sql_dict.py +441 -0
- edsl/config/__init__.py +8 -0
- edsl/config/config_class.py +177 -0
- edsl/config.py +4 -176
- edsl/conversation/Conversation.py +7 -7
- edsl/conversation/car_buying.py +4 -4
- edsl/conversation/chips.py +6 -6
- edsl/coop/__init__.py +25 -2
- edsl/coop/coop.py +430 -113
- edsl/coop/{ExpectedParrotKeyHandler.py → ep_key_handling.py} +86 -10
- edsl/coop/exceptions.py +62 -0
- edsl/coop/price_fetcher.py +126 -0
- edsl/coop/utils.py +89 -24
- edsl/data_transfer_models.py +5 -72
- edsl/dataset/__init__.py +10 -0
- edsl/{results/Dataset.py → dataset/dataset.py} +116 -36
- edsl/dataset/dataset_operations_mixin.py +1492 -0
- edsl/{results/DatasetTree.py → dataset/dataset_tree.py} +156 -75
- edsl/{results/TableDisplay.py → dataset/display/table_display.py} +18 -7
- edsl/{results → dataset/display}/table_renderers.py +58 -2
- edsl/{results → dataset}/file_exports.py +4 -5
- edsl/{results → dataset}/smart_objects.py +2 -2
- edsl/enums.py +5 -205
- edsl/inference_services/__init__.py +5 -0
- edsl/inference_services/{AvailableModelCacheHandler.py → available_model_cache_handler.py} +2 -3
- edsl/inference_services/{AvailableModelFetcher.py → available_model_fetcher.py} +8 -14
- edsl/inference_services/data_structures.py +3 -2
- edsl/{exceptions/inference_services.py → inference_services/exceptions.py} +1 -1
- edsl/inference_services/{InferenceServiceABC.py → inference_service_abc.py} +1 -1
- edsl/inference_services/{InferenceServicesCollection.py → inference_services_collection.py} +8 -7
- edsl/inference_services/registry.py +4 -41
- edsl/inference_services/{ServiceAvailability.py → service_availability.py} +5 -25
- edsl/inference_services/services/__init__.py +31 -0
- edsl/inference_services/{AnthropicService.py → services/anthropic_service.py} +3 -3
- edsl/inference_services/{AwsBedrock.py → services/aws_bedrock.py} +2 -2
- edsl/inference_services/{AzureAI.py → services/azure_ai.py} +2 -2
- edsl/inference_services/{DeepInfraService.py → services/deep_infra_service.py} +1 -3
- edsl/inference_services/{DeepSeekService.py → services/deep_seek_service.py} +2 -4
- edsl/inference_services/{GoogleService.py → services/google_service.py} +5 -4
- edsl/inference_services/{GroqService.py → services/groq_service.py} +1 -1
- edsl/inference_services/{MistralAIService.py → services/mistral_ai_service.py} +3 -3
- edsl/inference_services/{OllamaService.py → services/ollama_service.py} +1 -7
- edsl/inference_services/{OpenAIService.py → services/open_ai_service.py} +5 -6
- edsl/inference_services/{PerplexityService.py → services/perplexity_service.py} +12 -12
- edsl/inference_services/{TestService.py → services/test_service.py} +7 -6
- edsl/inference_services/{TogetherAIService.py → services/together_ai_service.py} +2 -6
- edsl/inference_services/{XAIService.py → services/xai_service.py} +1 -1
- edsl/inference_services/write_available.py +1 -2
- edsl/instructions/__init__.py +6 -0
- edsl/{surveys/instructions/Instruction.py → instructions/instruction.py} +11 -6
- edsl/{surveys/instructions/InstructionCollection.py → instructions/instruction_collection.py} +10 -5
- edsl/{surveys/InstructionHandler.py → instructions/instruction_handler.py} +3 -3
- edsl/{jobs/interviews → interviews}/ReportErrors.py +2 -2
- edsl/interviews/__init__.py +4 -0
- edsl/{jobs/AnswerQuestionFunctionConstructor.py → interviews/answering_function.py} +45 -18
- edsl/{jobs/interviews/InterviewExceptionEntry.py → interviews/exception_tracking.py} +107 -22
- edsl/interviews/interview.py +638 -0
- edsl/{jobs/interviews/InterviewStatusDictionary.py → interviews/interview_status_dictionary.py} +21 -12
- edsl/{jobs/interviews/InterviewStatusLog.py → interviews/interview_status_log.py} +16 -7
- edsl/{jobs/InterviewTaskManager.py → interviews/interview_task_manager.py} +12 -7
- edsl/{jobs/RequestTokenEstimator.py → interviews/request_token_estimator.py} +8 -3
- edsl/{jobs/interviews/InterviewStatistic.py → interviews/statistics.py} +36 -10
- edsl/invigilators/__init__.py +38 -0
- edsl/invigilators/invigilator_base.py +477 -0
- edsl/{agents/Invigilator.py → invigilators/invigilators.py} +263 -10
- edsl/invigilators/prompt_constructor.py +476 -0
- edsl/{agents → invigilators}/prompt_helpers.py +2 -1
- edsl/{agents/QuestionInstructionPromptBuilder.py → invigilators/question_instructions_prompt_builder.py} +18 -13
- edsl/{agents → invigilators}/question_option_processor.py +96 -21
- edsl/{agents/QuestionTemplateReplacementsBuilder.py → invigilators/question_template_replacements_builder.py} +64 -12
- edsl/jobs/__init__.py +7 -1
- edsl/jobs/async_interview_runner.py +99 -35
- edsl/jobs/check_survey_scenario_compatibility.py +7 -5
- edsl/jobs/data_structures.py +153 -22
- edsl/{exceptions/jobs.py → jobs/exceptions.py} +2 -1
- edsl/jobs/{FetchInvigilator.py → fetch_invigilator.py} +4 -4
- edsl/jobs/{loggers/HTMLTableJobLogger.py → html_table_job_logger.py} +6 -2
- edsl/jobs/{Jobs.py → jobs.py} +321 -155
- edsl/jobs/{JobsChecks.py → jobs_checks.py} +15 -7
- edsl/jobs/{JobsComponentConstructor.py → jobs_component_constructor.py} +20 -17
- edsl/jobs/{InterviewsConstructor.py → jobs_interview_constructor.py} +10 -5
- edsl/jobs/jobs_pricing_estimation.py +347 -0
- edsl/jobs/{JobsRemoteInferenceLogger.py → jobs_remote_inference_logger.py} +4 -3
- edsl/jobs/jobs_runner_asyncio.py +282 -0
- edsl/jobs/{JobsRemoteInferenceHandler.py → remote_inference.py} +19 -22
- edsl/jobs/results_exceptions_handler.py +2 -2
- edsl/key_management/__init__.py +28 -0
- edsl/key_management/key_lookup.py +161 -0
- edsl/{language_models/key_management/KeyLookupBuilder.py → key_management/key_lookup_builder.py} +118 -47
- edsl/key_management/key_lookup_collection.py +82 -0
- edsl/key_management/models.py +218 -0
- edsl/language_models/__init__.py +7 -2
- edsl/language_models/{ComputeCost.py → compute_cost.py} +18 -3
- edsl/{exceptions/language_models.py → language_models/exceptions.py} +2 -1
- edsl/language_models/language_model.py +1080 -0
- edsl/language_models/model.py +10 -25
- edsl/language_models/{ModelList.py → model_list.py} +9 -14
- edsl/language_models/{RawResponseHandler.py → raw_response_handler.py} +1 -1
- edsl/language_models/{RegisterLanguageModelsMeta.py → registry.py} +1 -1
- edsl/language_models/repair.py +4 -4
- edsl/language_models/utilities.py +4 -4
- edsl/notebooks/__init__.py +3 -1
- edsl/notebooks/{Notebook.py → notebook.py} +7 -8
- edsl/prompts/__init__.py +1 -1
- edsl/{exceptions/prompts.py → prompts/exceptions.py} +3 -1
- edsl/prompts/{Prompt.py → prompt.py} +101 -95
- edsl/questions/HTMLQuestion.py +1 -1
- edsl/questions/__init__.py +154 -25
- edsl/questions/answer_validator_mixin.py +1 -1
- edsl/questions/compose_questions.py +4 -3
- edsl/questions/derived/question_likert_five.py +166 -0
- edsl/questions/derived/{QuestionLinearScale.py → question_linear_scale.py} +4 -4
- edsl/questions/derived/{QuestionTopK.py → question_top_k.py} +4 -4
- edsl/questions/derived/{QuestionYesNo.py → question_yes_no.py} +4 -5
- edsl/questions/descriptors.py +24 -30
- edsl/questions/loop_processor.py +65 -19
- edsl/questions/question_base.py +881 -0
- edsl/questions/question_base_gen_mixin.py +15 -16
- edsl/questions/{QuestionBasePromptsMixin.py → question_base_prompts_mixin.py} +2 -2
- edsl/questions/{QuestionBudget.py → question_budget.py} +3 -4
- edsl/questions/{QuestionCheckBox.py → question_check_box.py} +16 -16
- edsl/questions/{QuestionDict.py → question_dict.py} +39 -5
- edsl/questions/{QuestionExtract.py → question_extract.py} +9 -9
- edsl/questions/question_free_text.py +282 -0
- edsl/questions/{QuestionFunctional.py → question_functional.py} +6 -5
- edsl/questions/{QuestionList.py → question_list.py} +6 -7
- edsl/questions/{QuestionMatrix.py → question_matrix.py} +6 -5
- edsl/questions/{QuestionMultipleChoice.py → question_multiple_choice.py} +126 -21
- edsl/questions/{QuestionNumerical.py → question_numerical.py} +5 -5
- edsl/questions/{QuestionRank.py → question_rank.py} +6 -6
- edsl/questions/question_registry.py +10 -16
- edsl/questions/register_questions_meta.py +8 -4
- edsl/questions/response_validator_abc.py +17 -16
- edsl/results/__init__.py +4 -1
- edsl/{exceptions/results.py → results/exceptions.py} +1 -1
- edsl/results/report.py +197 -0
- edsl/results/{Result.py → result.py} +131 -45
- edsl/results/{Results.py → results.py} +420 -216
- edsl/results/results_selector.py +344 -25
- edsl/scenarios/__init__.py +30 -3
- edsl/scenarios/{ConstructDownloadLink.py → construct_download_link.py} +7 -0
- edsl/scenarios/directory_scanner.py +156 -13
- edsl/scenarios/document_chunker.py +186 -0
- edsl/scenarios/exceptions.py +101 -0
- edsl/scenarios/file_methods.py +2 -3
- edsl/scenarios/file_store.py +755 -0
- edsl/scenarios/handlers/__init__.py +14 -14
- edsl/scenarios/handlers/{csv.py → csv_file_store.py} +1 -2
- edsl/scenarios/handlers/{docx.py → docx_file_store.py} +8 -7
- edsl/scenarios/handlers/{html.py → html_file_store.py} +1 -2
- edsl/scenarios/handlers/{jpeg.py → jpeg_file_store.py} +1 -1
- edsl/scenarios/handlers/{json.py → json_file_store.py} +1 -1
- edsl/scenarios/handlers/latex_file_store.py +5 -0
- edsl/scenarios/handlers/{md.py → md_file_store.py} +1 -1
- edsl/scenarios/handlers/{pdf.py → pdf_file_store.py} +2 -2
- edsl/scenarios/handlers/{png.py → png_file_store.py} +1 -1
- edsl/scenarios/handlers/{pptx.py → pptx_file_store.py} +8 -7
- edsl/scenarios/handlers/{py.py → py_file_store.py} +1 -3
- edsl/scenarios/handlers/{sql.py → sql_file_store.py} +2 -1
- edsl/scenarios/handlers/{sqlite.py → sqlite_file_store.py} +2 -3
- edsl/scenarios/handlers/{txt.py → txt_file_store.py} +1 -1
- edsl/scenarios/scenario.py +928 -0
- edsl/scenarios/scenario_join.py +18 -5
- edsl/scenarios/{ScenarioList.py → scenario_list.py} +424 -106
- edsl/scenarios/{ScenarioListPdfMixin.py → scenario_list_pdf_tools.py} +16 -15
- edsl/scenarios/scenario_selector.py +5 -1
- edsl/study/ObjectEntry.py +2 -2
- edsl/study/SnapShot.py +5 -5
- edsl/study/Study.py +20 -21
- edsl/study/__init__.py +6 -4
- edsl/surveys/__init__.py +7 -4
- edsl/surveys/dag/__init__.py +2 -0
- edsl/surveys/{ConstructDAG.py → dag/construct_dag.py} +3 -3
- edsl/surveys/{DAG.py → dag/dag.py} +13 -10
- edsl/surveys/descriptors.py +1 -1
- edsl/surveys/{EditSurvey.py → edit_survey.py} +9 -9
- edsl/{exceptions/surveys.py → surveys/exceptions.py} +1 -2
- edsl/surveys/memory/__init__.py +3 -0
- edsl/surveys/{MemoryPlan.py → memory/memory_plan.py} +10 -9
- edsl/surveys/rules/__init__.py +3 -0
- edsl/surveys/{Rule.py → rules/rule.py} +103 -43
- edsl/surveys/{RuleCollection.py → rules/rule_collection.py} +21 -30
- edsl/surveys/{RuleManager.py → rules/rule_manager.py} +19 -13
- edsl/surveys/survey.py +1743 -0
- edsl/surveys/{SurveyExportMixin.py → survey_export.py} +22 -27
- edsl/surveys/{SurveyFlowVisualization.py → survey_flow_visualization.py} +11 -2
- edsl/surveys/{Simulator.py → survey_simulator.py} +10 -3
- edsl/tasks/__init__.py +32 -0
- edsl/{jobs/tasks/QuestionTaskCreator.py → tasks/question_task_creator.py} +115 -57
- edsl/tasks/task_creators.py +135 -0
- edsl/{jobs/tasks/TaskHistory.py → tasks/task_history.py} +86 -47
- edsl/{jobs/tasks → tasks}/task_status_enum.py +91 -7
- edsl/tasks/task_status_log.py +85 -0
- edsl/tokens/__init__.py +2 -0
- edsl/tokens/interview_token_usage.py +53 -0
- edsl/utilities/PrettyList.py +1 -1
- edsl/utilities/SystemInfo.py +25 -22
- edsl/utilities/__init__.py +29 -21
- edsl/utilities/gcp_bucket/__init__.py +2 -0
- edsl/utilities/gcp_bucket/cloud_storage.py +99 -96
- edsl/utilities/interface.py +44 -536
- edsl/{results/MarkdownToPDF.py → utilities/markdown_to_pdf.py} +13 -5
- edsl/utilities/repair_functions.py +1 -1
- {edsl-0.1.46.dist-info → edsl-0.1.48.dist-info}/METADATA +3 -2
- edsl-0.1.48.dist-info/RECORD +347 -0
- edsl/Base.py +0 -426
- edsl/BaseDiff.py +0 -260
- edsl/agents/InvigilatorBase.py +0 -260
- edsl/agents/PromptConstructor.py +0 -318
- edsl/auto/AutoStudy.py +0 -130
- edsl/auto/StageBase.py +0 -243
- edsl/auto/StageGenerateSurvey.py +0 -178
- edsl/auto/StageLabelQuestions.py +0 -125
- edsl/auto/StagePersona.py +0 -61
- edsl/auto/StagePersonaDimensionValueRanges.py +0 -88
- edsl/auto/StagePersonaDimensionValues.py +0 -74
- edsl/auto/StagePersonaDimensions.py +0 -69
- edsl/auto/StageQuestions.py +0 -74
- edsl/auto/SurveyCreatorPipeline.py +0 -21
- edsl/auto/utilities.py +0 -218
- edsl/base/Base.py +0 -279
- edsl/coop/PriceFetcher.py +0 -54
- edsl/data/Cache.py +0 -580
- edsl/data/CacheEntry.py +0 -230
- edsl/data/SQLiteDict.py +0 -292
- edsl/data/__init__.py +0 -5
- edsl/data/orm.py +0 -10
- edsl/exceptions/cache.py +0 -5
- edsl/exceptions/coop.py +0 -14
- edsl/exceptions/data.py +0 -14
- edsl/exceptions/scenarios.py +0 -29
- edsl/jobs/Answers.py +0 -43
- edsl/jobs/JobsPrompts.py +0 -354
- edsl/jobs/buckets/BucketCollection.py +0 -134
- edsl/jobs/buckets/ModelBuckets.py +0 -65
- edsl/jobs/buckets/TokenBucket.py +0 -283
- edsl/jobs/buckets/TokenBucketClient.py +0 -191
- edsl/jobs/interviews/Interview.py +0 -395
- edsl/jobs/interviews/InterviewExceptionCollection.py +0 -99
- edsl/jobs/interviews/InterviewStatisticsCollection.py +0 -25
- edsl/jobs/runners/JobsRunnerAsyncio.py +0 -163
- edsl/jobs/runners/JobsRunnerStatusData.py +0 -0
- edsl/jobs/tasks/TaskCreators.py +0 -64
- edsl/jobs/tasks/TaskStatusLog.py +0 -23
- edsl/jobs/tokens/InterviewTokenUsage.py +0 -27
- edsl/language_models/LanguageModel.py +0 -635
- edsl/language_models/ServiceDataSources.py +0 -0
- edsl/language_models/key_management/KeyLookup.py +0 -63
- edsl/language_models/key_management/KeyLookupCollection.py +0 -38
- edsl/language_models/key_management/models.py +0 -137
- edsl/questions/QuestionBase.py +0 -539
- edsl/questions/QuestionFreeText.py +0 -130
- edsl/questions/derived/QuestionLikertFive.py +0 -76
- edsl/results/DatasetExportMixin.py +0 -911
- edsl/results/ResultsExportMixin.py +0 -45
- edsl/results/TextEditor.py +0 -50
- edsl/results/results_fetch_mixin.py +0 -33
- edsl/results/results_tools_mixin.py +0 -98
- edsl/scenarios/DocumentChunker.py +0 -104
- edsl/scenarios/FileStore.py +0 -564
- edsl/scenarios/Scenario.py +0 -548
- edsl/scenarios/ScenarioHtmlMixin.py +0 -65
- edsl/scenarios/ScenarioListExportMixin.py +0 -45
- edsl/scenarios/handlers/latex.py +0 -5
- edsl/shared.py +0 -1
- edsl/surveys/Survey.py +0 -1306
- edsl/surveys/SurveyQualtricsImport.py +0 -284
- edsl/surveys/SurveyToApp.py +0 -141
- edsl/surveys/instructions/__init__.py +0 -0
- edsl/tools/__init__.py +0 -1
- edsl/tools/clusters.py +0 -192
- edsl/tools/embeddings.py +0 -27
- edsl/tools/embeddings_plotting.py +0 -118
- edsl/tools/plotting.py +0 -112
- edsl/tools/summarize.py +0 -18
- edsl/utilities/data/Registry.py +0 -6
- edsl/utilities/data/__init__.py +0 -1
- edsl/utilities/data/scooter_results.json +0 -1
- edsl-0.1.46.dist-info/RECORD +0 -366
- /edsl/coop/{CoopFunctionsMixin.py → coop_functions.py} +0 -0
- /edsl/{results → dataset/display}/CSSParameterizer.py +0 -0
- /edsl/{language_models/key_management → dataset/display}/__init__.py +0 -0
- /edsl/{results → dataset/display}/table_data_class.py +0 -0
- /edsl/{results → dataset/display}/table_display.css +0 -0
- /edsl/{results/ResultsGGMixin.py → dataset/r/ggplot.py} +0 -0
- /edsl/{results → dataset}/tree_explore.py +0 -0
- /edsl/{surveys/instructions/ChangeInstruction.py → instructions/change_instruction.py} +0 -0
- /edsl/{jobs/interviews → interviews}/interview_status_enum.py +0 -0
- /edsl/jobs/{runners/JobsRunnerStatus.py → jobs_runner_status.py} +0 -0
- /edsl/language_models/{PriceManager.py → price_manager.py} +0 -0
- /edsl/language_models/{fake_openai_call.py → unused/fake_openai_call.py} +0 -0
- /edsl/language_models/{fake_openai_service.py → unused/fake_openai_service.py} +0 -0
- /edsl/notebooks/{NotebookToLaTeX.py → notebook_to_latex.py} +0 -0
- /edsl/{exceptions/questions.py → questions/exceptions.py} +0 -0
- /edsl/questions/{SimpleAskMixin.py → simple_ask_mixin.py} +0 -0
- /edsl/surveys/{Memory.py → memory/memory.py} +0 -0
- /edsl/surveys/{MemoryManagement.py → memory/memory_management.py} +0 -0
- /edsl/surveys/{SurveyCSS.py → survey_css.py} +0 -0
- /edsl/{jobs/tokens/TokenUsage.py → tokens/token_usage.py} +0 -0
- /edsl/{results/MarkdownToDocx.py → utilities/markdown_to_docx.py} +0 -0
- /edsl/{TemplateLoader.py → utilities/template_loader.py} +0 -0
- {edsl-0.1.46.dist-info → edsl-0.1.48.dist-info}/LICENSE +0 -0
- {edsl-0.1.46.dist-info → edsl-0.1.48.dist-info}/WHEEL +0 -0
edsl/config.py
CHANGED
@@ -1,177 +1,5 @@
|
|
1
|
-
"""
|
1
|
+
"""Config module wrapper for backward compatibility.
|
2
2
|
|
3
|
-
|
4
|
-
import
|
5
|
-
from
|
6
|
-
from edsl.exceptions.configuration import (
|
7
|
-
InvalidEnvironmentVariableError,
|
8
|
-
MissingEnvironmentVariableError,
|
9
|
-
)
|
10
|
-
|
11
|
-
cache_dir = platformdirs.user_cache_dir("edsl")
|
12
|
-
os.makedirs(cache_dir, exist_ok=True)
|
13
|
-
|
14
|
-
# valid values for EDSL_RUN_MODE
|
15
|
-
EDSL_RUN_MODES = [
|
16
|
-
"development",
|
17
|
-
"development-testrun",
|
18
|
-
"production",
|
19
|
-
]
|
20
|
-
|
21
|
-
# `default` is used to impute values only in "production" mode
|
22
|
-
# `info` gives a brief description of the env var
|
23
|
-
CONFIG_MAP = {
|
24
|
-
"EDSL_RUN_MODE": {
|
25
|
-
"default": "production",
|
26
|
-
"info": "This config var determines the run mode of the application.",
|
27
|
-
},
|
28
|
-
"EDSL_API_TIMEOUT": {
|
29
|
-
"default": "60",
|
30
|
-
"info": "This config var determines the maximum number of seconds to wait for an API call to return.",
|
31
|
-
},
|
32
|
-
"EDSL_BACKOFF_START_SEC": {
|
33
|
-
"default": "1",
|
34
|
-
"info": "This config var determines the number of seconds to wait before retrying a failed API call.",
|
35
|
-
},
|
36
|
-
"EDSL_BACKOFF_MAX_SEC": {
|
37
|
-
"default": "60",
|
38
|
-
"info": "This config var determines the maximum number of seconds to wait before retrying a failed API call.",
|
39
|
-
},
|
40
|
-
"EDSL_DATABASE_PATH": {
|
41
|
-
# "default": f"sqlite:///{os.path.join(os.getcwd(), '.edsl_cache/data.db')}",
|
42
|
-
"default": f"sqlite:///{os.path.join(platformdirs.user_cache_dir('edsl'), 'lm_model_calls.db')}",
|
43
|
-
"info": "This config var determines the path to the cache file.",
|
44
|
-
},
|
45
|
-
"EDSL_DEFAULT_MODEL": {
|
46
|
-
"default": "gpt-4o",
|
47
|
-
"info": "This config var holds the default model that will be used if a model is not explicitly passed.",
|
48
|
-
},
|
49
|
-
"EDSL_FETCH_TOKEN_PRICES": {
|
50
|
-
"default": "True",
|
51
|
-
"info": "This config var determines whether to fetch prices for tokens used in remote inference",
|
52
|
-
},
|
53
|
-
"EDSL_MAX_ATTEMPTS": {
|
54
|
-
"default": "5",
|
55
|
-
"info": "This config var determines the maximum number of times to retry a failed API call.",
|
56
|
-
},
|
57
|
-
"EDSL_SERVICE_RPM_BASELINE": {
|
58
|
-
"default": "100",
|
59
|
-
"info": "This config var holds the maximum number of requests per minute. Model-specific values provided in env vars such as EDSL_SERVICE_RPM_OPENAI will override this. value for the corresponding model",
|
60
|
-
},
|
61
|
-
"EDSL_SERVICE_TPM_BASELINE": {
|
62
|
-
"default": "2000000",
|
63
|
-
"info": "This config var holds the maximum number of tokens per minute for all models. Model-specific values provided in env vars such as EDSL_SERVICE_TPM_OPENAI will override this value for the corresponding model.",
|
64
|
-
},
|
65
|
-
"EXPECTED_PARROT_URL": {
|
66
|
-
"default": "https://www.expectedparrot.com",
|
67
|
-
"info": "This config var holds the URL of the Expected Parrot API.",
|
68
|
-
},
|
69
|
-
"EDSL_MAX_CONCURRENT_TASKS": {
|
70
|
-
"default": "500",
|
71
|
-
"info": "This config var determines the maximum number of concurrent tasks that can be run by the async job-runner",
|
72
|
-
},
|
73
|
-
"EDSL_OPEN_EXCEPTION_REPORT_URL": {
|
74
|
-
"default": "False",
|
75
|
-
"info": "This config var determines whether to open the exception report URL in the browser",
|
76
|
-
},
|
77
|
-
"EDSL_REMOTE_TOKEN_BUCKET_URL": {
|
78
|
-
"default": "None",
|
79
|
-
"info": "This config var holds the URL of the remote token bucket server.",
|
80
|
-
},
|
81
|
-
}
|
82
|
-
|
83
|
-
|
84
|
-
class Config:
|
85
|
-
"""A class that loads environment variables from a .env file and sets them as class attributes."""
|
86
|
-
|
87
|
-
def __init__(self):
|
88
|
-
"""Initialize the Config class."""
|
89
|
-
self._set_run_mode()
|
90
|
-
self._load_dotenv()
|
91
|
-
self._set_env_vars()
|
92
|
-
|
93
|
-
def show_path_to_dot_env(self):
|
94
|
-
print(find_dotenv(usecwd=True))
|
95
|
-
|
96
|
-
def _set_run_mode(self) -> None:
|
97
|
-
"""
|
98
|
-
Sets EDSL_RUN_MODE as a class attribute.
|
99
|
-
"""
|
100
|
-
run_mode = os.getenv("EDSL_RUN_MODE")
|
101
|
-
default = CONFIG_MAP.get("EDSL_RUN_MODE").get("default")
|
102
|
-
if run_mode is None:
|
103
|
-
run_mode = default
|
104
|
-
if run_mode not in EDSL_RUN_MODES:
|
105
|
-
raise InvalidEnvironmentVariableError(
|
106
|
-
f"Value `{run_mode}` is not allowed for EDSL_RUN_MODE."
|
107
|
-
)
|
108
|
-
self.EDSL_RUN_MODE = run_mode
|
109
|
-
|
110
|
-
def _load_dotenv(self) -> None:
|
111
|
-
"""
|
112
|
-
Loads the .env
|
113
|
-
- The .env will override existing env vars **unless** EDSL_RUN_MODE=="development-testrun"
|
114
|
-
"""
|
115
|
-
|
116
|
-
if self.EDSL_RUN_MODE == "development-testrun":
|
117
|
-
override = False
|
118
|
-
else:
|
119
|
-
override = True
|
120
|
-
_ = load_dotenv(dotenv_path=find_dotenv(usecwd=True), override=override)
|
121
|
-
|
122
|
-
def __contains__(self, env_var: str) -> bool:
|
123
|
-
"""
|
124
|
-
Checks if an env var is set as a class attribute.
|
125
|
-
"""
|
126
|
-
return env_var in self.__dict__
|
127
|
-
|
128
|
-
def _set_env_vars(self) -> None:
|
129
|
-
"""
|
130
|
-
Sets env vars as class attributes.
|
131
|
-
- EDSL_RUN_MODE is not set my this method, but by _set_run_mode
|
132
|
-
- If an env var is not set and has a default value in the CONFIG_MAP, sets it to the default value.
|
133
|
-
"""
|
134
|
-
# for each env var in the CONFIG_MAP
|
135
|
-
for env_var, config in CONFIG_MAP.items():
|
136
|
-
# EDSL_RUN_MODE is already set by _set_run_mode
|
137
|
-
if env_var == "EDSL_RUN_MODE":
|
138
|
-
continue
|
139
|
-
value = os.getenv(env_var)
|
140
|
-
default_value = config.get("default")
|
141
|
-
# if an env var exists, set it as a class attribute
|
142
|
-
if value:
|
143
|
-
setattr(self, env_var, value)
|
144
|
-
# otherwise, if EDSL_RUN_MODE == "production" set it to its default value
|
145
|
-
elif self.EDSL_RUN_MODE == "production":
|
146
|
-
setattr(self, env_var, default_value)
|
147
|
-
|
148
|
-
def get(self, env_var: str) -> str:
|
149
|
-
"""
|
150
|
-
Returns the value of an environment variable.
|
151
|
-
"""
|
152
|
-
if env_var not in CONFIG_MAP:
|
153
|
-
raise InvalidEnvironmentVariableError(f"{env_var} is not a valid env var. ")
|
154
|
-
elif env_var not in self.__dict__:
|
155
|
-
info = CONFIG_MAP[env_var].get("info")
|
156
|
-
raise MissingEnvironmentVariableError(f"{env_var} is not set. {info}")
|
157
|
-
return self.__dict__.get(env_var)
|
158
|
-
|
159
|
-
def __iter__(self):
|
160
|
-
"""Iterate over the environment variables."""
|
161
|
-
return iter(self.__dict__)
|
162
|
-
|
163
|
-
def items(self):
|
164
|
-
"""Iterate over the environment variables and their values."""
|
165
|
-
return self.__dict__.items()
|
166
|
-
|
167
|
-
def show(self) -> str:
|
168
|
-
"""Print the currently set environment vars."""
|
169
|
-
max_env_var_length = max(len(env_var) for env_var in self.__dict__)
|
170
|
-
print("Here are the current configuration settings:")
|
171
|
-
for env_var, value in self.__dict__.items():
|
172
|
-
print(f"{env_var:<{max_env_var_length}} : {value}")
|
173
|
-
|
174
|
-
|
175
|
-
# Note: Python modules are singletons. As such, once this module is imported
|
176
|
-
# the same instance of it is reused across the application.
|
177
|
-
CONFIG = Config()
|
3
|
+
# Re-export everything from edsl.config module
|
4
|
+
from edsl.config import *
|
5
|
+
from edsl.config.config_class import *
|
@@ -2,13 +2,13 @@ from collections import UserList
|
|
2
2
|
import asyncio
|
3
3
|
import inspect
|
4
4
|
from typing import Optional, Callable
|
5
|
-
from
|
6
|
-
from
|
7
|
-
from
|
5
|
+
from .. import Agent, QuestionFreeText, Results, AgentList, ScenarioList, Scenario
|
6
|
+
from ..questions import QuestionBase
|
7
|
+
from ..results.Result import Result
|
8
8
|
from jinja2 import Template
|
9
|
-
from
|
9
|
+
from ..caching import Cache
|
10
10
|
|
11
|
-
from
|
11
|
+
from .next_speaker_utilities import (
|
12
12
|
default_turn_taking_generator,
|
13
13
|
speaker_closure,
|
14
14
|
)
|
@@ -83,7 +83,7 @@ class Conversation:
|
|
83
83
|
|
84
84
|
self.agent_list = agent_list
|
85
85
|
|
86
|
-
from
|
86
|
+
from .. import Model
|
87
87
|
|
88
88
|
for agent in self.agent_list:
|
89
89
|
if not hasattr(agent, "model"):
|
@@ -200,7 +200,7 @@ What do you say next?"""
|
|
200
200
|
"""Get the next statement from the speaker."""
|
201
201
|
q = self.next_statement_question
|
202
202
|
# assert q.parameters == {"agent_name", "conversation"}, q.parameters
|
203
|
-
from
|
203
|
+
from .. import Scenario
|
204
204
|
|
205
205
|
if self.per_round_message_template is None:
|
206
206
|
round_message = None
|
edsl/conversation/car_buying.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
from
|
2
|
-
from
|
3
|
-
from
|
1
|
+
from .. import Agent, AgentList, QuestionFreeText
|
2
|
+
from .. import Cache
|
3
|
+
from .Conversation import Conversation, ConversationList
|
4
4
|
|
5
5
|
a1 = Agent(
|
6
6
|
name="Alice",
|
@@ -46,7 +46,7 @@ q = QuestionFreeText(
|
|
46
46
|
question_name="car_brand",
|
47
47
|
)
|
48
48
|
|
49
|
-
from
|
49
|
+
from .. import QuestionList
|
50
50
|
|
51
51
|
q_actors = QuestionList(
|
52
52
|
question_text="""This was a conversation about buying a car: {{ transcript }}.
|
edsl/conversation/chips.py
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
from typing import Optional
|
2
2
|
|
3
|
-
from
|
4
|
-
from
|
5
|
-
from
|
6
|
-
from
|
3
|
+
from .. import Agent, AgentList, QuestionFreeText
|
4
|
+
from .. import Cache
|
5
|
+
from .. import QuestionList
|
6
|
+
from .. import Model
|
7
7
|
|
8
|
-
from
|
8
|
+
from .Conversation import Conversation, ConversationList
|
9
9
|
|
10
10
|
m = Model("gemini-1.5-flash")
|
11
11
|
|
@@ -79,7 +79,7 @@ with Cache() as c:
|
|
79
79
|
question_name="actors",
|
80
80
|
)
|
81
81
|
|
82
|
-
from
|
82
|
+
from .. import QuestionList
|
83
83
|
|
84
84
|
q_transfers = QuestionList(
|
85
85
|
question_text="""This was a conversation/negotiation: {{ transcript }}.
|
edsl/coop/__init__.py
CHANGED
@@ -1,2 +1,25 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
|
2
|
+
"""
|
3
|
+
The coop module provides connectivity with Expected Parrot's cloud services.
|
4
|
+
|
5
|
+
This module enables EDSL to interact with cloud-based resources for enhanced functionality:
|
6
|
+
1. Remote storage and sharing of EDSL objects (surveys, agents, models, results, etc.)
|
7
|
+
2. Remote inference execution for running jobs in the cloud
|
8
|
+
3. Caching of interview results for improved performance and cost savings
|
9
|
+
4. API key management and authentication
|
10
|
+
5. Price and model availability information
|
11
|
+
|
12
|
+
The primary interface is the Coop class, which serves as a client for the
|
13
|
+
Expected Parrot API. Most users will only need to interact with the Coop class directly.
|
14
|
+
|
15
|
+
Example:
|
16
|
+
>>> from edsl.coop import Coop
|
17
|
+
>>> coop = Coop() # Uses API key from environment or stored location
|
18
|
+
>>> survey = my_survey.push() # Uploads survey to Expected Parrot
|
19
|
+
>>> job_info = coop.remote_inference_create(my_job) # Creates remote job
|
20
|
+
"""
|
21
|
+
|
22
|
+
from .utils import EDSLObject, ObjectType, VisibilityType, ObjectRegistry
|
23
|
+
from .coop import Coop
|
24
|
+
from .exceptions import CoopServerResponseError
|
25
|
+
__all__ = ["Coop"]
|