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
@@ -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
|
6
|
-
from
|
7
|
-
from
|
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
|
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.
|
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
|
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
|
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
|
85
|
+
from ..language_models import ModelList
|
85
86
|
|
86
87
|
return ModelList.from_available_models(self)
|
87
88
|
|
@@ -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
|
6
|
-
from
|
7
|
-
from
|
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
|
11
|
-
from
|
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
|
51
|
+
from .services.test_service import TestService
|
51
52
|
|
52
53
|
return TestService()
|
53
54
|
|
@@ -1,45 +1,8 @@
|
|
1
|
-
from
|
2
|
-
InferenceServicesCollection,
|
3
|
-
)
|
1
|
+
from .inference_services_collection import InferenceServicesCollection
|
4
2
|
|
5
|
-
from
|
6
|
-
from
|
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
|
-
|
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
|
6
|
+
from .data_structures import AvailableModels, ModelNamesList
|
7
|
+
from .inference_service_abc import InferenceServiceABC
|
7
8
|
|
8
9
|
if TYPE_CHECKING:
|
9
|
-
from
|
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
|
-
|
114
|
-
|
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
|
-
|
6
|
-
from
|
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
|
7
|
-
from
|
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
|
6
|
-
from
|
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
|
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
|
-
|
7
|
-
from
|
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
|
10
|
-
from
|
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,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
|
-
|
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
|
-
|
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
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
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
|
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
|
2
|
+
from ..rate_limits_cache import rate_limits
|
6
3
|
|
7
|
-
|
8
|
-
from edsl.language_models import LanguageModel
|
4
|
+
from ...language_models import LanguageModel
|
9
5
|
|
10
|
-
from
|
6
|
+
from .open_ai_service import OpenAIService
|
11
7
|
|
12
8
|
|
13
9
|
class PerplexityService(OpenAIService):
|
@@ -29,9 +25,12 @@ class PerplexityService(OpenAIService):
|
|
29
25
|
@classmethod
|
30
26
|
def available(cls) -> List[str]:
|
31
27
|
return [
|
32
|
-
"
|
33
|
-
"
|
34
|
-
"
|
28
|
+
"sonar-deep-research",
|
29
|
+
"sonar-reasoning-pro",
|
30
|
+
"sonar-reasoning",
|
31
|
+
"sonar-pro",
|
32
|
+
"sonar",
|
33
|
+
"r1-1776",
|
35
34
|
]
|
36
35
|
|
37
36
|
@classmethod
|
@@ -65,10 +64,10 @@ class PerplexityService(OpenAIService):
|
|
65
64
|
}
|
66
65
|
|
67
66
|
def sync_client(self):
|
68
|
-
return cls.sync_client()
|
67
|
+
return cls.sync_client(api_key=self.api_token)
|
69
68
|
|
70
69
|
def async_client(self):
|
71
|
-
return cls.async_client()
|
70
|
+
return cls.async_client(api_key=self.api_token)
|
72
71
|
|
73
72
|
@classmethod
|
74
73
|
def available(cls) -> list[str]:
|
@@ -149,6 +148,7 @@ class PerplexityService(OpenAIService):
|
|
149
148
|
# "logprobs": self.logprobs,
|
150
149
|
# "top_logprobs": self.top_logprobs if self.logprobs else None,
|
151
150
|
}
|
151
|
+
print("calling the model", flush=True)
|
152
152
|
try:
|
153
153
|
response = await client.chat.completions.create(**params)
|
154
154
|
except Exception as e:
|
@@ -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
|
-
|
7
|
-
from
|
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,7 @@
|
|
1
1
|
from typing import Union, Optional, List, Generator, Dict
|
2
|
-
from
|
3
|
-
from
|
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
|
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
|
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
|
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)
|
edsl/{surveys/instructions/InstructionCollection.py → instructions/instruction_collection.py}
RENAMED
@@ -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
|
5
|
-
from
|
4
|
+
from .instruction import Instruction
|
5
|
+
from .change_instruction import ChangeInstruction
|
6
6
|
|
7
7
|
if TYPE_CHECKING:
|
8
|
-
from
|
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
|
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
|
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
|
57
|
-
from
|
58
|
-
from edsl.questions
|
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
|
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
|
-
|
44
|
+
# Use the class directly since we're already in the module
|
45
45
|
|
46
46
|
class TaskHistory:
|
47
47
|
def __init__(self, data):
|