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/jobs/data_structures.py
CHANGED
@@ -2,17 +2,30 @@ from typing import Optional, Literal
|
|
2
2
|
from dataclasses import dataclass, asdict
|
3
3
|
|
4
4
|
# from edsl.data_transfer_models import VisibilityType
|
5
|
-
from
|
6
|
-
from
|
7
|
-
from
|
8
|
-
from
|
5
|
+
from ..caching import Cache
|
6
|
+
from ..buckets import BucketCollection
|
7
|
+
from ..key_management import KeyLookup
|
8
|
+
from ..base import Base
|
9
9
|
|
10
|
-
|
11
|
-
from edsl.Base import Base
|
10
|
+
from .jobs_runner_status import JobsRunnerStatus
|
12
11
|
|
12
|
+
VisibilityType = Literal["private", "public", "unlisted"]
|
13
13
|
|
14
14
|
@dataclass
|
15
15
|
class RunEnvironment:
|
16
|
+
"""
|
17
|
+
Contains environment-related resources for job execution.
|
18
|
+
|
19
|
+
This dataclass holds references to shared resources and infrastructure components
|
20
|
+
needed for job execution. These components are typically long-lived and may be
|
21
|
+
shared across multiple job runs.
|
22
|
+
|
23
|
+
Attributes:
|
24
|
+
cache (Cache, optional): Cache for storing and retrieving interview results
|
25
|
+
bucket_collection (BucketCollection, optional): Collection of token rate limit buckets
|
26
|
+
key_lookup (KeyLookup, optional): Manager for API keys across models
|
27
|
+
jobs_runner_status (JobsRunnerStatus, optional): Tracker for job execution progress
|
28
|
+
"""
|
16
29
|
cache: Optional[Cache] = None
|
17
30
|
bucket_collection: Optional[BucketCollection] = None
|
18
31
|
key_lookup: Optional[KeyLookup] = None
|
@@ -21,6 +34,32 @@ class RunEnvironment:
|
|
21
34
|
|
22
35
|
@dataclass
|
23
36
|
class RunParameters(Base):
|
37
|
+
"""
|
38
|
+
Contains execution-specific parameters for job runs.
|
39
|
+
|
40
|
+
This dataclass holds parameters that control the behavior of a specific job run,
|
41
|
+
such as iteration count, error handling preferences, and remote execution options.
|
42
|
+
Unlike RunEnvironment, these parameters are specific to a single job execution.
|
43
|
+
|
44
|
+
Attributes:
|
45
|
+
n (int): Number of iterations to run each interview, default is 1
|
46
|
+
progress_bar (bool): Whether to show a progress bar, default is False
|
47
|
+
stop_on_exception (bool): Whether to stop if an exception occurs, default is False
|
48
|
+
check_api_keys (bool): Whether to validate API keys before running, default is False
|
49
|
+
verbose (bool): Whether to print detailed execution information, default is True
|
50
|
+
print_exceptions (bool): Whether to print exceptions as they occur, default is True
|
51
|
+
remote_cache_description (str, optional): Description for entries in the remote cache
|
52
|
+
remote_inference_description (str, optional): Description for the remote inference job
|
53
|
+
remote_inference_results_visibility (VisibilityType): Visibility setting for results
|
54
|
+
on Coop: "private", "public", or "unlisted" (default is "unlisted")
|
55
|
+
skip_retry (bool): Whether to skip retry attempts for failed interviews, default is False
|
56
|
+
raise_validation_errors (bool): Whether to raise validation errors, default is False
|
57
|
+
background (bool): Whether to run in background mode, default is False
|
58
|
+
disable_remote_cache (bool): Whether to disable remote cache usage, default is False
|
59
|
+
disable_remote_inference (bool): Whether to disable remote inference, default is False
|
60
|
+
job_uuid (str, optional): UUID for the job, used for tracking
|
61
|
+
fresh (bool): If True, ignore cache and generate new results, default is False
|
62
|
+
"""
|
24
63
|
n: int = 1
|
25
64
|
progress_bar: bool = False
|
26
65
|
stop_on_exception: bool = False
|
@@ -36,9 +75,7 @@ class RunParameters(Base):
|
|
36
75
|
disable_remote_cache: bool = False
|
37
76
|
disable_remote_inference: bool = False
|
38
77
|
job_uuid: Optional[str] = None
|
39
|
-
fresh:
|
40
|
-
bool
|
41
|
-
] = False # if True, will not use cache and will save new results to cache
|
78
|
+
fresh: bool = False # if True, will not use cache and will save new results to cache
|
42
79
|
|
43
80
|
def to_dict(self, add_edsl_version=False) -> dict:
|
44
81
|
d = asdict(self)
|
@@ -63,58 +100,152 @@ class RunParameters(Base):
|
|
63
100
|
|
64
101
|
@dataclass
|
65
102
|
class RunConfig:
|
103
|
+
"""
|
104
|
+
Combines environment resources and execution parameters for a job run.
|
105
|
+
|
106
|
+
This class brings together the two aspects of job configuration:
|
107
|
+
1. Environment resources (caches, API keys, etc.) via RunEnvironment
|
108
|
+
2. Execution parameters (iterations, error handling, etc.) via RunParameters
|
109
|
+
|
110
|
+
It provides helper methods for modifying environment components after construction.
|
111
|
+
|
112
|
+
Attributes:
|
113
|
+
environment (RunEnvironment): The environment resources for the job
|
114
|
+
parameters (RunParameters): The execution parameters for the job
|
115
|
+
"""
|
66
116
|
environment: RunEnvironment
|
67
117
|
parameters: RunParameters
|
68
118
|
|
69
|
-
def add_environment(self, environment: RunEnvironment):
|
119
|
+
def add_environment(self, environment: RunEnvironment) -> None:
|
120
|
+
"""
|
121
|
+
Replace the entire environment configuration.
|
122
|
+
|
123
|
+
Parameters:
|
124
|
+
environment (RunEnvironment): The new environment configuration
|
125
|
+
"""
|
70
126
|
self.environment = environment
|
71
127
|
|
72
|
-
def add_bucket_collection(self, bucket_collection: BucketCollection):
|
128
|
+
def add_bucket_collection(self, bucket_collection: BucketCollection) -> None:
|
129
|
+
"""
|
130
|
+
Set or replace the bucket collection in the environment.
|
131
|
+
|
132
|
+
Parameters:
|
133
|
+
bucket_collection (BucketCollection): The bucket collection to use
|
134
|
+
"""
|
73
135
|
self.environment.bucket_collection = bucket_collection
|
74
136
|
|
75
|
-
def add_cache(self, cache: Cache):
|
137
|
+
def add_cache(self, cache: Cache) -> None:
|
138
|
+
"""
|
139
|
+
Set or replace the cache in the environment.
|
140
|
+
|
141
|
+
Parameters:
|
142
|
+
cache (Cache): The cache to use
|
143
|
+
"""
|
76
144
|
self.environment.cache = cache
|
77
145
|
|
78
|
-
def add_key_lookup(self, key_lookup: KeyLookup):
|
146
|
+
def add_key_lookup(self, key_lookup: KeyLookup) -> None:
|
147
|
+
"""
|
148
|
+
Set or replace the key lookup in the environment.
|
149
|
+
|
150
|
+
Parameters:
|
151
|
+
key_lookup (KeyLookup): The key lookup to use
|
152
|
+
"""
|
79
153
|
self.environment.key_lookup = key_lookup
|
80
154
|
|
81
155
|
|
82
|
-
"""
|
156
|
+
"""
|
157
|
+
Additional data structures for working with job results and answers.
|
158
|
+
"""
|
83
159
|
|
84
160
|
from collections import UserDict
|
85
161
|
from edsl.data_transfer_models import EDSLResultObjectInput
|
86
162
|
|
87
163
|
|
88
164
|
class Answers(UserDict):
|
89
|
-
"""
|
165
|
+
"""
|
166
|
+
A specialized dictionary for holding interview response data.
|
167
|
+
|
168
|
+
This class extends UserDict to provide a flexible container for survey answers,
|
169
|
+
with special handling for response metadata like comments and token usage.
|
170
|
+
|
171
|
+
Key features:
|
172
|
+
- Stores answers by question name
|
173
|
+
- Associates comments with their respective questions
|
174
|
+
- Tracks token usage for generation
|
175
|
+
- Handles missing answers automatically
|
176
|
+
"""
|
90
177
|
|
91
178
|
def add_answer(
|
92
179
|
self, response: EDSLResultObjectInput, question: "QuestionBase"
|
93
180
|
) -> None:
|
94
|
-
"""
|
181
|
+
"""
|
182
|
+
Add a response to the answers dictionary.
|
183
|
+
|
184
|
+
This method processes a response and stores it in the dictionary with appropriate
|
185
|
+
naming conventions for the answer itself, comments, and token usage tracking.
|
186
|
+
|
187
|
+
Parameters:
|
188
|
+
response (EDSLResultObjectInput): The response object containing answer data
|
189
|
+
question (QuestionBase): The question that was answered
|
190
|
+
|
191
|
+
Notes:
|
192
|
+
- The main answer is stored with the question's name as the key
|
193
|
+
- Comments are stored with "_comment" appended to the question name
|
194
|
+
- Token usage is stored with "_generated_tokens" appended
|
195
|
+
"""
|
95
196
|
answer = response.answer
|
96
197
|
comment = response.comment
|
97
198
|
generated_tokens = response.generated_tokens
|
98
|
-
|
199
|
+
|
200
|
+
# Record token usage if available
|
99
201
|
if generated_tokens:
|
100
202
|
self[question.question_name + "_generated_tokens"] = generated_tokens
|
203
|
+
|
204
|
+
# Record the primary answer
|
101
205
|
self[question.question_name] = answer
|
206
|
+
|
207
|
+
# Record comment if present
|
102
208
|
if comment:
|
103
209
|
self[question.question_name + "_comment"] = comment
|
104
210
|
|
105
211
|
def replace_missing_answers_with_none(self, survey: "Survey") -> None:
|
106
|
-
"""
|
212
|
+
"""
|
213
|
+
Replace missing answers with None for all questions in the survey.
|
214
|
+
|
215
|
+
This method ensures that all questions in the survey have an entry in the
|
216
|
+
answers dictionary, even if they were skipped during the interview.
|
217
|
+
|
218
|
+
Parameters:
|
219
|
+
survey (Survey): The survey containing the questions to check
|
220
|
+
|
221
|
+
Notes:
|
222
|
+
- Answers can be missing if the agent skips a question due to skip logic
|
223
|
+
- This ensures consistent data structure even with partial responses
|
224
|
+
"""
|
107
225
|
for question_name in survey.question_names:
|
108
226
|
if question_name not in self:
|
109
227
|
self[question_name] = None
|
110
228
|
|
111
|
-
def to_dict(self):
|
112
|
-
"""
|
229
|
+
def to_dict(self) -> dict:
|
230
|
+
"""
|
231
|
+
Convert the answers to a standard dictionary.
|
232
|
+
|
233
|
+
Returns:
|
234
|
+
dict: A plain dictionary containing all the answers data
|
235
|
+
"""
|
113
236
|
return self.data
|
114
237
|
|
115
238
|
@classmethod
|
116
|
-
def from_dict(cls, d):
|
117
|
-
"""
|
239
|
+
def from_dict(cls, d: dict) -> "Answers":
|
240
|
+
"""
|
241
|
+
Create an Answers object from a dictionary.
|
242
|
+
|
243
|
+
Parameters:
|
244
|
+
d (dict): The dictionary containing answer data
|
245
|
+
|
246
|
+
Returns:
|
247
|
+
Answers: A new Answers instance with the provided data
|
248
|
+
"""
|
118
249
|
return cls(d)
|
119
250
|
|
120
251
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
from typing import List, Dict, Any, Optional, TYPE_CHECKING
|
2
2
|
|
3
3
|
if TYPE_CHECKING:
|
4
|
-
from
|
5
|
-
from
|
6
|
-
from
|
7
|
-
from
|
4
|
+
from ..questions import QuestionBase
|
5
|
+
from ..agents import InvigilatorBase
|
6
|
+
from ..language_models.key_management import KeyLookup
|
7
|
+
from .interviews import Interview
|
8
8
|
|
9
9
|
|
10
10
|
class FetchInvigilator:
|
@@ -1,14 +1,17 @@
|
|
1
1
|
import re
|
2
2
|
import uuid
|
3
3
|
from datetime import datetime
|
4
|
+
|
4
5
|
from IPython.display import display, HTML
|
5
|
-
from edsl.jobs.JobsRemoteInferenceLogger import JobLogger
|
6
|
-
from edsl.jobs.jobs_status_enums import JobsStatus
|
7
6
|
|
7
|
+
from .jobs_remote_inference_logger import JobLogger
|
8
|
+
from .jobs_status_enums import JobsStatus
|
8
9
|
|
10
|
+
|
9
11
|
class HTMLTableJobLogger(JobLogger):
|
10
12
|
def __init__(self, verbose=True, theme="auto", **kwargs):
|
11
13
|
super().__init__(verbose=verbose)
|
14
|
+
|
12
15
|
self.display_handle = display(HTML(""), display_id=True) if verbose else None
|
13
16
|
#self.display_handle = display(HTML(""), display_id=True)
|
14
17
|
self.current_message = None
|
@@ -22,6 +25,7 @@ class HTMLTableJobLogger(JobLogger):
|
|
22
25
|
self._init_css()
|
23
26
|
|
24
27
|
def _init_css(self):
|
28
|
+
|
25
29
|
"""Initialize the CSS styles with enhanced theme support"""
|
26
30
|
if not self.verbose:
|
27
31
|
return None
|