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
@@ -1,118 +0,0 @@
|
|
1
|
-
import json
|
2
|
-
import numpy as np
|
3
|
-
from sklearn.manifold import TSNE
|
4
|
-
from IPython.display import display_html
|
5
|
-
|
6
|
-
|
7
|
-
def compute_tsne(embeddings, labels):
|
8
|
-
embeddings_np = np.array(embeddings)
|
9
|
-
tsne = TSNE(n_components=2, random_state=42)
|
10
|
-
tsne_results = tsne.fit_transform(embeddings_np)
|
11
|
-
data = [
|
12
|
-
{
|
13
|
-
"x": float(tsne_results[i, 0]),
|
14
|
-
"y": float(tsne_results[i, 1]),
|
15
|
-
"label": labels[i],
|
16
|
-
}
|
17
|
-
for i in range(len(labels))
|
18
|
-
]
|
19
|
-
return data
|
20
|
-
|
21
|
-
|
22
|
-
def plot_tsne_in_notebook(embeddings, labels):
|
23
|
-
# Compute t-SNE
|
24
|
-
data = compute_tsne(embeddings, labels)
|
25
|
-
|
26
|
-
# Convert data to JSON
|
27
|
-
data_json = json.dumps(data)
|
28
|
-
|
29
|
-
# HTML content with embedded data
|
30
|
-
html_content = f"""
|
31
|
-
<!DOCTYPE html>
|
32
|
-
<html lang="en">
|
33
|
-
<head>
|
34
|
-
<meta charset="UTF-8">
|
35
|
-
<title>t-SNE Plot with D3.js</title>
|
36
|
-
<script src="https://d3js.org/d3.v6.min.js"></script>
|
37
|
-
<style>
|
38
|
-
.tooltip {{
|
39
|
-
position: absolute;
|
40
|
-
text-align: center;
|
41
|
-
width: 80px;
|
42
|
-
height: 28px;
|
43
|
-
padding: 2px;
|
44
|
-
font: 12px sans-serif;
|
45
|
-
background: lightsteelblue;
|
46
|
-
border: 0px;
|
47
|
-
border-radius: 8px;
|
48
|
-
pointer-events: none;
|
49
|
-
}}
|
50
|
-
</style>
|
51
|
-
</head>
|
52
|
-
<body>
|
53
|
-
<svg width="600" height="600"></svg>
|
54
|
-
|
55
|
-
<script>
|
56
|
-
// Embedded data
|
57
|
-
const data = {data_json};
|
58
|
-
|
59
|
-
const svg = d3.select("svg"),
|
60
|
-
width = +svg.attr("width"),
|
61
|
-
height = +svg.attr("height");
|
62
|
-
|
63
|
-
// Set up scales
|
64
|
-
const x = d3.scaleLinear()
|
65
|
-
.domain(d3.extent(data, d => d.x))
|
66
|
-
.range([0, width]);
|
67
|
-
|
68
|
-
const y = d3.scaleLinear()
|
69
|
-
.domain(d3.extent(data, d => d.y))
|
70
|
-
.range([height, 0]);
|
71
|
-
|
72
|
-
// Create tooltip
|
73
|
-
const tooltip = d3.select("body").append("div")
|
74
|
-
.attr("class", "tooltip")
|
75
|
-
.style("opacity", 0);
|
76
|
-
|
77
|
-
// Create circles for each point
|
78
|
-
svg.selectAll("circle")
|
79
|
-
.data(data)
|
80
|
-
.enter().append("circle")
|
81
|
-
.attr("cx", d => x(d.x))
|
82
|
-
.attr("cy", d => y(d.y))
|
83
|
-
.attr("r", 5)
|
84
|
-
.style("fill", "steelblue")
|
85
|
-
.on("mouseover", function(event, d) {{
|
86
|
-
tooltip.transition()
|
87
|
-
.duration(200)
|
88
|
-
.style("opacity", .9);
|
89
|
-
tooltip.html(d.label)
|
90
|
-
.style("left", (event.pageX + 5) + "px")
|
91
|
-
.style("top", (event.pageY - 28) + "px");
|
92
|
-
}})
|
93
|
-
.on("mouseout", function(d) {{
|
94
|
-
tooltip.transition()
|
95
|
-
.duration(500)
|
96
|
-
.style("opacity", 0);
|
97
|
-
}});
|
98
|
-
</script>
|
99
|
-
</body>
|
100
|
-
</html>
|
101
|
-
"""
|
102
|
-
|
103
|
-
# Write HTML content to a temporary file
|
104
|
-
html_file = "tsne_plot.html"
|
105
|
-
with open(html_file, "w") as file:
|
106
|
-
file.write(html_content)
|
107
|
-
|
108
|
-
# Display the HTML content in an iframe within a Jupyter notebook
|
109
|
-
display_html(
|
110
|
-
f'<iframe src="{html_file}" width="600" height="600"></iframe>', raw=True
|
111
|
-
)
|
112
|
-
|
113
|
-
|
114
|
-
# Example usage
|
115
|
-
if __name__ == "__main__":
|
116
|
-
embeddings = [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]
|
117
|
-
labels = ["String 1", "String 2", "String 3"]
|
118
|
-
plot_tsne_in_notebook(embeddings, labels)
|
edsl/tools/plotting.py
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
|
4
|
-
def count_query(field):
|
5
|
-
return f"""SELECT
|
6
|
-
{field},
|
7
|
-
COUNT(*) as number
|
8
|
-
FROM self
|
9
|
-
GROUP BY {field}
|
10
|
-
"""
|
11
|
-
|
12
|
-
|
13
|
-
def get_options(results, field):
|
14
|
-
question_type = results.survey._get_question_by_name(field).question_type
|
15
|
-
if question_type in ["multiple_choice", "checkbox"]:
|
16
|
-
return results.select(f"{field}_question_options").first()
|
17
|
-
else:
|
18
|
-
return None
|
19
|
-
|
20
|
-
|
21
|
-
def interpret_image(path, analysis):
|
22
|
-
from edsl import QuestionFreeText
|
23
|
-
from edsl import Model
|
24
|
-
from edsl import Scenario
|
25
|
-
|
26
|
-
s = Scenario.from_image(path)
|
27
|
-
if isinstance(analysis, str):
|
28
|
-
plot_question_texts = [analysis]
|
29
|
-
elif isinstance(analysis, list):
|
30
|
-
plot_question_texts = analysis
|
31
|
-
|
32
|
-
scenario_list = s.replicate(len(plot_question_texts))
|
33
|
-
scenario_list.add_list("plot_question_text", plot_question_texts)
|
34
|
-
|
35
|
-
m = Model("gpt-4o")
|
36
|
-
q = QuestionFreeText(
|
37
|
-
question_text="{{ plot_question_text }}", question_name="interpretation"
|
38
|
-
)
|
39
|
-
results = q.by(m).by(scenario_list).run()
|
40
|
-
return results.select("plot_question_text", "interpretation").print(
|
41
|
-
format="rich",
|
42
|
-
pretty_labels={
|
43
|
-
"scenario.plot_question_text": "Question to the model",
|
44
|
-
"answer.interpretation": "Model answer",
|
45
|
-
},
|
46
|
-
)
|
47
|
-
|
48
|
-
|
49
|
-
def barchart(
|
50
|
-
results,
|
51
|
-
field: str,
|
52
|
-
fetch_options=True,
|
53
|
-
xlab: Optional[str] = None,
|
54
|
-
ylab: Optional[str] = None,
|
55
|
-
analysis: Optional[str] = None,
|
56
|
-
format: str = "png",
|
57
|
-
):
|
58
|
-
labels = ""
|
59
|
-
if xlab:
|
60
|
-
labels += f"+ xlab('{xlab}')"
|
61
|
-
if ylab:
|
62
|
-
labels += f"+ ylab('{ylab}')"
|
63
|
-
|
64
|
-
if fetch_options:
|
65
|
-
factor_orders = {field: get_options(results, field)}
|
66
|
-
else:
|
67
|
-
factor_orders = None
|
68
|
-
|
69
|
-
plot = results.ggplot2(
|
70
|
-
f"""ggplot(data = self, aes(x = {field}, y = number)) +
|
71
|
-
geom_bar(stat = "identity") +
|
72
|
-
theme_bw() +
|
73
|
-
theme(axis.text.x = element_text(angle = 45, hjust = 1)) {labels}""",
|
74
|
-
sql=count_query(field),
|
75
|
-
factor_orders=factor_orders,
|
76
|
-
format=format,
|
77
|
-
filename=f"barchart_{field}.{format}",
|
78
|
-
)
|
79
|
-
if analysis:
|
80
|
-
interpret_image(f"barchart_{field}.{format}", analysis)
|
81
|
-
|
82
|
-
return plot
|
83
|
-
|
84
|
-
|
85
|
-
def theme_plot(results, field, context, themes=None, progress_bar=False):
|
86
|
-
_, themes = results.auto_theme(
|
87
|
-
field=field, context=context, themes=themes, progress_bar=progress_bar
|
88
|
-
)
|
89
|
-
|
90
|
-
themes_query = f"""
|
91
|
-
SELECT theme, COUNT(*) AS mentions
|
92
|
-
FROM (
|
93
|
-
SELECT json_each.value AS theme
|
94
|
-
FROM self,
|
95
|
-
json_each({ field }_themes)
|
96
|
-
)
|
97
|
-
GROUP BY theme
|
98
|
-
HAVING theme <> 'Other'
|
99
|
-
ORDER BY mentions DESC
|
100
|
-
"""
|
101
|
-
themes = results.sql(themes_query, to_list=True)
|
102
|
-
|
103
|
-
(
|
104
|
-
results.filter(f"{field} != ''").ggplot2(
|
105
|
-
"""ggplot(data = self, aes(x = theme, y = mentions)) +
|
106
|
-
geom_bar(stat = "identity") +
|
107
|
-
coord_flip() +
|
108
|
-
theme_bw()""",
|
109
|
-
sql=themes_query,
|
110
|
-
factor_orders={"theme": [t[0] for t in themes]},
|
111
|
-
)
|
112
|
-
)
|
edsl/tools/summarize.py
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
from edsl import QuestionList, Scenario, Model
|
2
|
-
|
3
|
-
|
4
|
-
def summarize(texts, seed_phrase, n_bullets, n_words, models=None):
|
5
|
-
if models is None:
|
6
|
-
models = Model()
|
7
|
-
s = Scenario(
|
8
|
-
text=texts, seed_phrase=seed_phrase, n_bullets=n_bullets, n_words=n_words
|
9
|
-
).expand("text")
|
10
|
-
QuestionList(
|
11
|
-
question_text="""
|
12
|
-
I have the following TEXT EXAMPLE :
|
13
|
-
{{ text_example_json }}
|
14
|
-
Please summarize the main point of this EXAMPLE {{seed_phrase }} into {{ n_bullets }} bullet points, where
|
15
|
-
each bullet point is a {{ n_words }} word phrase.
|
16
|
-
""",
|
17
|
-
question_name="summarize",
|
18
|
-
).by(s).by(models).run()
|
edsl/utilities/data/Registry.py
DELETED
edsl/utilities/data/__init__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
from edsl.utilities.data.Registry import SCOOTER_RESULTS_PATH
|