aait 2.2.2.3__tar.gz → 2.2.4__tar.gz
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.
- aait-2.2.4/PKG-INFO +9 -0
- aait-2.2.4/aait.egg-info/PKG-INFO +9 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/SOURCES.txt +9 -1
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/answers.py +51 -42
- aait-2.2.4/orangecontrib/AAIT/utils/base_widget.py +173 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWAccumulator.py +8 -23
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWDisplayMD.py +8 -13
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWExecuteScript.py +61 -29
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWKeywords.py +5 -1
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +4 -1
- aait-2.2.4/orangecontrib/AAIT/widgets/OWSortAndSelect.py +194 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +20 -20
- aait-2.2.4/orangecontrib/AAIT/widgets/designer/owchunkanalysis.ui +64 -0
- aait-2.2.4/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +210 -0
- aait-2.2.4/orangecontrib/AAIT/widgets/designer/owllm4all.ui +54 -0
- aait-2.2.4/orangecontrib/AAIT/widgets/icons/chunking_analysis.png +0 -0
- aait-2.2.4/orangecontrib/AAIT/widgets/icons/edge_llm.svg +6 -0
- aait-2.2.4/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +6 -0
- {aait-2.2.2.3 → aait-2.2.4}/setup.py +1 -1
- aait-2.2.2.3/PKG-INFO +0 -33
- aait-2.2.2.3/aait.egg-info/PKG-INFO +0 -33
- {aait-2.2.2.3 → aait-2.2.4}/License.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/dependency_links.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/entry_points.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/namespace_packages.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/requires.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/aait.egg-info/top_level.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/SignalReceiver.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/audit_widget.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (2).TIF +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (3).TIF +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (4).TIF +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0001.csv +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0002.csv +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0003.csv +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/dynamic_results.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/test_all_widgets.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/test_server.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_4all.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_chunking.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_edit_table.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_mpnet_create_embeddings.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_optimisation.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_optimisationselection.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_powfactory.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_queryllm.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_spacy_md_fr_lemmatizer.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widget_traduction.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/audit_widget/widgets_model.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/encapsulation/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/MergeBaseLora.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/SERV_kill_workflow.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/SERV_requests.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/SERV_start_workflow.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/Tutorial_Finetuning.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/Tutorial_TestFinetuning.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/chunking.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/embeddings.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/finetuning.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/functions_DatasetGeneration.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/functions_Finetuning.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/lemmes.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/main_DatasetGeneration.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/main_Finetuning.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/process_documents.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/quickpy.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/test.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/test_functions.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/llm/translations.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/CheckMetaData.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/MetManagement.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/SimpleDialogQt.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/check_data_in.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/import_uic.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/mac_utils.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/thread_management.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/utils/windows_utils.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWConverseLLM.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWFileMetadata.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWFileWithPath.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWInputSelector.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWTrigger.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
- /aait-2.2.2.3/orangecontrib/AAIT/widgets/icons/owaccumulatator.png → /aait-2.2.4/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/orangecontrib/__init__.py +0 -0
- {aait-2.2.2.3 → aait-2.2.4}/setup.cfg +0 -0
aait-2.2.4/PKG-INFO
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: aait
|
|
3
|
+
Version: 2.2.4
|
|
4
|
+
Summary: Advanced Artificial Intelligence Tools is a package meant to develop and enable advanced AI functionalities in Orange
|
|
5
|
+
Home-page:
|
|
6
|
+
Author: Orange community
|
|
7
|
+
Author-email:
|
|
8
|
+
Keywords: orange3 add-on
|
|
9
|
+
License-File: License.txt
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: aait
|
|
3
|
+
Version: 2.2.4
|
|
4
|
+
Summary: Advanced Artificial Intelligence Tools is a package meant to develop and enable advanced AI functionalities in Orange
|
|
5
|
+
Home-page:
|
|
6
|
+
Author: Orange community
|
|
7
|
+
Author-email:
|
|
8
|
+
Keywords: orange3 add-on
|
|
9
|
+
License-File: License.txt
|
|
@@ -65,6 +65,7 @@ orangecontrib/AAIT/utils/MetManagement.py
|
|
|
65
65
|
orangecontrib/AAIT/utils/SimpleDialogQt.py
|
|
66
66
|
orangecontrib/AAIT/utils/__init__.py
|
|
67
67
|
orangecontrib/AAIT/utils/aait_repo_file.py
|
|
68
|
+
orangecontrib/AAIT/utils/base_widget.py
|
|
68
69
|
orangecontrib/AAIT/utils/check_data_in.py
|
|
69
70
|
orangecontrib/AAIT/utils/delta_local_shared_fodler.py
|
|
70
71
|
orangecontrib/AAIT/utils/import_uic.py
|
|
@@ -137,6 +138,7 @@ orangecontrib/AAIT/widgets/OWReranking.py
|
|
|
137
138
|
orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py
|
|
138
139
|
orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py
|
|
139
140
|
orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py
|
|
141
|
+
orangecontrib/AAIT/widgets/OWSortAndSelect.py
|
|
140
142
|
orangecontrib/AAIT/widgets/OWStartLoop.py
|
|
141
143
|
orangecontrib/AAIT/widgets/OWTable2Corpus.py
|
|
142
144
|
orangecontrib/AAIT/widgets/OWTranslation.py
|
|
@@ -150,6 +152,7 @@ orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui
|
|
|
150
152
|
orangecontrib/AAIT/widgets/designer/owaccumulator.ui
|
|
151
153
|
orangecontrib/AAIT/widgets/designer/owaddcolumns.ui
|
|
152
154
|
orangecontrib/AAIT/widgets/designer/owapplyrules.ui
|
|
155
|
+
orangecontrib/AAIT/widgets/designer/owchunkanalysis.ui
|
|
153
156
|
orangecontrib/AAIT/widgets/designer/owchunking.ui
|
|
154
157
|
orangecontrib/AAIT/widgets/designer/owconcatrules.ui
|
|
155
158
|
orangecontrib/AAIT/widgets/designer/owconversellm.ui
|
|
@@ -157,6 +160,7 @@ orangecontrib/AAIT/widgets/designer/owembeddings.ui
|
|
|
157
160
|
orangecontrib/AAIT/widgets/designer/owemptyswitch.ui
|
|
158
161
|
orangecontrib/AAIT/widgets/designer/owendloop.ui
|
|
159
162
|
orangecontrib/AAIT/widgets/designer/owexecutescript.ui
|
|
163
|
+
orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui
|
|
160
164
|
orangecontrib/AAIT/widgets/designer/owextrachunks.ui
|
|
161
165
|
orangecontrib/AAIT/widgets/designer/owextracttokens.ui
|
|
162
166
|
orangecontrib/AAIT/widgets/designer/owfilemetadata.ui
|
|
@@ -171,6 +175,7 @@ orangecontrib/AAIT/widgets/designer/owkeyword.ui
|
|
|
171
175
|
orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui
|
|
172
176
|
orangecontrib/AAIT/widgets/designer/owlangdetect.ui
|
|
173
177
|
orangecontrib/AAIT/widgets/designer/owlemmatizer.ui
|
|
178
|
+
orangecontrib/AAIT/widgets/designer/owllm4all.ui
|
|
174
179
|
orangecontrib/AAIT/widgets/designer/owloaddocuments.ui
|
|
175
180
|
orangecontrib/AAIT/widgets/designer/owloadworkflow.ui
|
|
176
181
|
orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui
|
|
@@ -207,10 +212,12 @@ orangecontrib/AAIT/widgets/icons/MDViewer.png
|
|
|
207
212
|
orangecontrib/AAIT/widgets/icons/Mistral.png
|
|
208
213
|
orangecontrib/AAIT/widgets/icons/apply_rules.svg
|
|
209
214
|
orangecontrib/AAIT/widgets/icons/category.svg
|
|
215
|
+
orangecontrib/AAIT/widgets/icons/chunking_analysis.png
|
|
210
216
|
orangecontrib/AAIT/widgets/icons/dark_green.txt
|
|
211
217
|
orangecontrib/AAIT/widgets/icons/de.png
|
|
212
218
|
orangecontrib/AAIT/widgets/icons/document_generator.png
|
|
213
219
|
orangecontrib/AAIT/widgets/icons/documents.png
|
|
220
|
+
orangecontrib/AAIT/widgets/icons/edge_llm.svg
|
|
214
221
|
orangecontrib/AAIT/widgets/icons/endloop.png
|
|
215
222
|
orangecontrib/AAIT/widgets/icons/extra_chunks.png
|
|
216
223
|
orangecontrib/AAIT/widgets/icons/in_or_out.png
|
|
@@ -230,7 +237,7 @@ orangecontrib/AAIT/widgets/icons/optimisation.png
|
|
|
230
237
|
orangecontrib/AAIT/widgets/icons/optimizer.png
|
|
231
238
|
orangecontrib/AAIT/widgets/icons/output.png
|
|
232
239
|
orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg
|
|
233
|
-
orangecontrib/AAIT/widgets/icons/
|
|
240
|
+
orangecontrib/AAIT/widgets/icons/owaccumulator.png
|
|
234
241
|
orangecontrib/AAIT/widgets/icons/owchunking.png
|
|
235
242
|
orangecontrib/AAIT/widgets/icons/owconversellm.svg
|
|
236
243
|
orangecontrib/AAIT/widgets/icons/owedittable.svg
|
|
@@ -263,6 +270,7 @@ orangecontrib/AAIT/widgets/icons/owqueryllm.svg
|
|
|
263
270
|
orangecontrib/AAIT/widgets/icons/owreranking.svg
|
|
264
271
|
orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg
|
|
265
272
|
orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png
|
|
273
|
+
orangecontrib/AAIT/widgets/icons/owsortandselect.svg
|
|
266
274
|
orangecontrib/AAIT/widgets/icons/owtable2corpus.svg
|
|
267
275
|
orangecontrib/AAIT/widgets/icons/owtranslation.svg
|
|
268
276
|
orangecontrib/AAIT/widgets/icons/owtrigger.svg
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
import os
|
|
3
|
-
|
|
3
|
+
try:
|
|
4
|
+
import GPUtil #sometimes errors occurs on gpu testing
|
|
5
|
+
except:
|
|
6
|
+
pass
|
|
4
7
|
import psutil
|
|
5
8
|
import ntpath
|
|
6
9
|
import platform
|
|
@@ -44,50 +47,56 @@ def check_gpu(model_path, argself):
|
|
|
44
47
|
argself.can_run = False
|
|
45
48
|
argself.error("Model is not compatible. It must be a .gguf format.")
|
|
46
49
|
return
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
else:
|
|
58
|
-
# Get the available VRAM on the first GPU
|
|
59
|
-
gpu = GPUtil.getGPUs()[0]
|
|
60
|
-
free_vram = gpu.memoryFree
|
|
61
|
-
# If there is not enough VRAM on GPU
|
|
62
|
-
if free_vram < model_size:
|
|
63
|
-
# Set use_gpu to False
|
|
64
|
-
argself.use_gpu = False
|
|
65
|
-
# Check for available RAM
|
|
66
|
-
available_ram = psutil.virtual_memory().available / 1024 / 1024
|
|
67
|
-
if available_ram < model_size:
|
|
68
|
-
argself.can_run = False
|
|
69
|
-
argself.error(f"Cannot run. Both GPU and CPU are too small for this model (required: {model_size/1000:.2f}GB).")
|
|
50
|
+
# sometimes errors occurs on gpu testing
|
|
51
|
+
try:
|
|
52
|
+
# Calculate the model size in MB with a 1500 MB buffer
|
|
53
|
+
model_size = os.path.getsize(model_path) / (1024 ** 3) * 1000
|
|
54
|
+
model_size += token_weight * int(argself.n_ctx)
|
|
55
|
+
print(f"Required memory: {model_size/1000:.2f}GB")
|
|
56
|
+
# If there is no GPU, set use_gpu to False
|
|
57
|
+
if len(GPUtil.getGPUs()) == 0:
|
|
58
|
+
argself.use_gpu = False
|
|
59
|
+
argself.information("Running on CPU. No GPU detected.")
|
|
70
60
|
return
|
|
61
|
+
# Else
|
|
71
62
|
else:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
# Load the model and test it
|
|
78
|
-
# model = GPT4All(model_name=model_path, model_path=model_path, n_ctx=int(argself.n_ctx),
|
|
79
|
-
# allow_download=False, device="cuda")
|
|
80
|
-
# answer = model.generate("What if ?", max_tokens=3)
|
|
81
|
-
# # If it works, set use_gpu to True
|
|
82
|
-
argself.use_gpu = True
|
|
83
|
-
argself.information("Running on GPU.")
|
|
84
|
-
return
|
|
85
|
-
# If importing Llama and reading the model doesn't work
|
|
86
|
-
except Exception as e:
|
|
63
|
+
# Get the available VRAM on the first GPU
|
|
64
|
+
gpu = GPUtil.getGPUs()[0]
|
|
65
|
+
free_vram = gpu.memoryFree
|
|
66
|
+
# If there is not enough VRAM on GPU
|
|
67
|
+
if free_vram < model_size:
|
|
87
68
|
# Set use_gpu to False
|
|
88
69
|
argself.use_gpu = False
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
# Check for available RAM
|
|
71
|
+
available_ram = psutil.virtual_memory().available / 1024 / 1024
|
|
72
|
+
if available_ram < model_size:
|
|
73
|
+
argself.can_run = False
|
|
74
|
+
argself.error(f"Cannot run. Both GPU and CPU are too small for this model (required: {model_size/1000:.2f}GB).")
|
|
75
|
+
return
|
|
76
|
+
else:
|
|
77
|
+
argself.warning(f"Running on CPU. GPU seems to be too small for this model (available: {free_vram/1000:.2f}GB || required: {model_size/1000:.2f}GB).")
|
|
78
|
+
return
|
|
79
|
+
# If there is enough space on GPU
|
|
80
|
+
else:
|
|
81
|
+
try:
|
|
82
|
+
# Load the model and test it
|
|
83
|
+
# model = GPT4All(model_name=model_path, model_path=model_path, n_ctx=int(argself.n_ctx),
|
|
84
|
+
# allow_download=False, device="cuda")
|
|
85
|
+
# answer = model.generate("What if ?", max_tokens=3)
|
|
86
|
+
# # If it works, set use_gpu to True
|
|
87
|
+
argself.use_gpu = True
|
|
88
|
+
argself.information("Running on GPU.")
|
|
89
|
+
return
|
|
90
|
+
# If importing Llama and reading the model doesn't work
|
|
91
|
+
except Exception as e:
|
|
92
|
+
# Set use_gpu to False
|
|
93
|
+
argself.use_gpu = False
|
|
94
|
+
argself.warning(f"GPU cannot be used. (detail: {e})")
|
|
95
|
+
return
|
|
96
|
+
except:
|
|
97
|
+
argself.use_gpu = False
|
|
98
|
+
argself.warning(f"GPU cannot be used.")
|
|
99
|
+
return
|
|
91
100
|
|
|
92
101
|
|
|
93
102
|
def load_model(model_path, use_gpu, n_ctx=10000):
|
|
@@ -224,7 +233,7 @@ def write_tokens_to_file(token: str, workflow_id=""):
|
|
|
224
233
|
f.flush()
|
|
225
234
|
|
|
226
235
|
|
|
227
|
-
def run_query(prompt, model, max_tokens=4096, temperature=0, top_p=0, top_k=40, repeat_penalty=1.15,
|
|
236
|
+
def run_query(prompt, model, max_tokens=4096, temperature=0.4, top_p=0.4, top_k=40, repeat_penalty=1.15,
|
|
228
237
|
workflow_id="", argself=None, progress_callback=None):
|
|
229
238
|
"""
|
|
230
239
|
Generates a response from a local LLM model using the given prompt, with support for streaming output
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from AnyQt.QtWidgets import QWidget, QVBoxLayout, QLineEdit, QListWidget, QListWidgetItem
|
|
3
|
+
from AnyQt.QtCore import pyqtSignal
|
|
4
|
+
import Orange
|
|
5
|
+
from Orange.widgets import gui, widget
|
|
6
|
+
from Orange.widgets.settings import Setting
|
|
7
|
+
from Orange.widgets.utils.signals import Input, Output
|
|
8
|
+
|
|
9
|
+
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
10
|
+
from Orange.widgets.orangecontrib.AAIT.utils.import_uic import uic
|
|
11
|
+
else:
|
|
12
|
+
from orangecontrib.AAIT.utils.import_uic import uic
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class BaseListWidget(widget.OWWidget):
|
|
16
|
+
"""
|
|
17
|
+
Base Orange widget providing a filterable list of variables from the input data domain.
|
|
18
|
+
|
|
19
|
+
This class automatically:
|
|
20
|
+
- Adds a `FilterableVariableList` UI component.
|
|
21
|
+
- Handles input data and populates the list with variables.
|
|
22
|
+
- Restores the last selected variable (`selected_column_name`).
|
|
23
|
+
|
|
24
|
+
______________________________________________________________________________________
|
|
25
|
+
How to use:
|
|
26
|
+
⚠️ The linked .ui file **must include a `QWidget` named "placeholder"`**, where the
|
|
27
|
+
variable list will be inserted (see owexecutescript_TEST.ui).
|
|
28
|
+
|
|
29
|
+
1. Inherit from `BaseListWidget` instead of `Orange.widgets.OWWidget`.
|
|
30
|
+
Your widget will automatically have the attribute `selected_column_name`.
|
|
31
|
+
|
|
32
|
+
2. Use `selected_column_name` in your `run()` function to determine
|
|
33
|
+
which column should be processed. For example, check if it's in
|
|
34
|
+
`data.domain` or verify its type (e.g., `StringVariable`).
|
|
35
|
+
|
|
36
|
+
3. Pass `selected_column_name` to any threaded function you use:
|
|
37
|
+
```python
|
|
38
|
+
thread_management.Thread(self.my_function, self.data, self.selected_column_name)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
4. Update your processing functions (e.g., `generate_answers`, `create_embeddings`,
|
|
42
|
+
`execute_scripts_in_table`) to accept the column name as an argument.
|
|
43
|
+
|
|
44
|
+
5. Remove any `uic.loadUi(self.gui, self)` calls from your widget, as the UI is already loaded automatically by `BaseListWidget`.
|
|
45
|
+
|
|
46
|
+
6. If you only need "Data" as input and "Data" as output, remove the Inputs, Outputs and set() methods from your widget.
|
|
47
|
+
|
|
48
|
+
6. By default, your widget already handles "Data" as input and output.
|
|
49
|
+
You **must NOT** define the `Inputs`, `Outputs`, or `set_data()` methods
|
|
50
|
+
in your subclass, because they are already implemented in `BaseListWidget`.
|
|
51
|
+
|
|
52
|
+
⚠️ Optional: Only if you truly need to customize input handling, you can
|
|
53
|
+
override the `set_data()` method. In that case, make sure to update
|
|
54
|
+
the `var_selector` (a `FilterableVariableList`) like this:
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
self.var_selector.add_variables(self.data.domain)
|
|
58
|
+
self.var_selector.select_variable_by_name(self.selected_column_name)
|
|
59
|
+
"""
|
|
60
|
+
# Settings
|
|
61
|
+
selected_column_name = Setting("Default") # set the targeted column by default as "Default"
|
|
62
|
+
|
|
63
|
+
class Inputs:
|
|
64
|
+
data = Input("Data", Orange.data.Table)
|
|
65
|
+
|
|
66
|
+
class Outputs:
|
|
67
|
+
data = Output("Data", Orange.data.Table)
|
|
68
|
+
|
|
69
|
+
@Inputs.data
|
|
70
|
+
def set_data(self, in_data):
|
|
71
|
+
self.data = in_data
|
|
72
|
+
if self.data:
|
|
73
|
+
self.var_selector.add_variables(self.data.domain)
|
|
74
|
+
self.var_selector.select_variable_by_name(self.selected_column_name)
|
|
75
|
+
if self.autorun:
|
|
76
|
+
self.run()
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def __init__(self):
|
|
80
|
+
super().__init__()
|
|
81
|
+
# Load the .ui file if defined
|
|
82
|
+
if self.gui and os.path.exists(self.gui):
|
|
83
|
+
uic.loadUi(self.gui, self)
|
|
84
|
+
|
|
85
|
+
# --- Insert filterable variable list ---
|
|
86
|
+
self.var_selector = FilterableVariableList(self)
|
|
87
|
+
placeholder = self.findChild(QWidget, "placeholder") # add a QWidget in your .ui
|
|
88
|
+
if placeholder:
|
|
89
|
+
self.var_selector.setParent(placeholder)
|
|
90
|
+
self.var_selector.setGeometry(0, 0, placeholder.width(), placeholder.height())
|
|
91
|
+
self.var_selector.show()
|
|
92
|
+
self.var_selector.selected_variable.connect(self.on_variable_selected)
|
|
93
|
+
|
|
94
|
+
# Data management
|
|
95
|
+
self.data = None
|
|
96
|
+
self.autorun = True
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def on_variable_selected(self, var_name):
|
|
100
|
+
"""Update the selected column when the user clicks an item."""
|
|
101
|
+
self.selected_column_name = var_name
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# Widget Qt pour sélectionner des variables dans un widget Orange
|
|
107
|
+
class FilterableVariableList(QWidget):
|
|
108
|
+
"""
|
|
109
|
+
A scrollable list of Orange variables with:
|
|
110
|
+
- Single selection
|
|
111
|
+
- Colored icons based on type
|
|
112
|
+
- Filter field at the top
|
|
113
|
+
"""
|
|
114
|
+
selected_variable = pyqtSignal(str)
|
|
115
|
+
|
|
116
|
+
def __init__(self, parent=None):
|
|
117
|
+
super().__init__(parent)
|
|
118
|
+
self.all_vars = []
|
|
119
|
+
|
|
120
|
+
# Layout
|
|
121
|
+
self.layout = QVBoxLayout(self)
|
|
122
|
+
self.filter_edit = QLineEdit()
|
|
123
|
+
self.filter_edit.setPlaceholderText("Filter variables...")
|
|
124
|
+
self.layout.addWidget(self.filter_edit)
|
|
125
|
+
|
|
126
|
+
self.list_widget = QListWidget()
|
|
127
|
+
self.list_widget.setSelectionMode(QListWidget.SingleSelection)
|
|
128
|
+
self.layout.addWidget(self.list_widget)
|
|
129
|
+
|
|
130
|
+
# Connect filter
|
|
131
|
+
self.filter_edit.textChanged.connect(self.apply_filter)
|
|
132
|
+
# Connect variable selection
|
|
133
|
+
self.list_widget.itemSelectionChanged.connect(self.on_selection_changed)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def add_variables(self, variables):
|
|
137
|
+
"""Store all variables and populate the list"""
|
|
138
|
+
self.all_vars = variables
|
|
139
|
+
self.populate_list(self.all_vars)
|
|
140
|
+
|
|
141
|
+
def populate_list(self, variables):
|
|
142
|
+
"""Populate the QListWidget with items and icons using Orange standard icons"""
|
|
143
|
+
self.list_widget.clear()
|
|
144
|
+
if variables is not None:
|
|
145
|
+
for var in variables:
|
|
146
|
+
item = QListWidgetItem(var.name)
|
|
147
|
+
item.setIcon(gui.attributeIconDict[var]) # <-- standard Orange icon
|
|
148
|
+
self.list_widget.addItem(item)
|
|
149
|
+
|
|
150
|
+
def apply_filter(self, text):
|
|
151
|
+
"""Filter the list based on input"""
|
|
152
|
+
text = text.lower()
|
|
153
|
+
filtered = [v for v in self.all_vars if text in v.name.lower()]
|
|
154
|
+
self.populate_list(filtered)
|
|
155
|
+
|
|
156
|
+
def on_selection_changed(self):
|
|
157
|
+
selected = self.get_selected_name()
|
|
158
|
+
if selected:
|
|
159
|
+
self.selected_variable.emit(selected)
|
|
160
|
+
|
|
161
|
+
def get_selected_name(self):
|
|
162
|
+
"""Get the selected variable's name"""
|
|
163
|
+
selected_items = self.list_widget.selectedItems()
|
|
164
|
+
return selected_items[0].text() if selected_items else None
|
|
165
|
+
|
|
166
|
+
def select_variable_by_name(self, name):
|
|
167
|
+
"""Select an item in the list by its variable name."""
|
|
168
|
+
for i in range(self.list_widget.count()):
|
|
169
|
+
item = self.list_widget.item(i)
|
|
170
|
+
if item.text() == name:
|
|
171
|
+
self.list_widget.setCurrentItem(item)
|
|
172
|
+
self.list_widget.scrollToItem(item) # optional: ensure it's visible
|
|
173
|
+
return
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
from Orange.data import Table, Domain, Variable
|
|
3
|
-
from orangewidget.widget import OWBaseWidget, Input, Output
|
|
4
|
-
from orangewidget.utils.widgetpreview import WidgetPreview
|
|
5
|
-
from orangewidget import gui
|
|
1
|
+
from orangewidget.widget import OWBaseWidget
|
|
6
2
|
import sys
|
|
7
|
-
# Les imports suivants ne sont pas utilisés dans le corps du widget Orange,
|
|
8
|
-
# mais je les laisse car ils étaient dans votre base de code.
|
|
9
3
|
import os
|
|
10
|
-
import docx
|
|
11
|
-
import pandas as pd
|
|
12
|
-
import re
|
|
13
|
-
import json
|
|
14
4
|
|
|
15
5
|
from AnyQt.QtWidgets import QApplication
|
|
16
|
-
from Orange.widgets import widget
|
|
17
6
|
from Orange.widgets.utils.signals import Input, Output
|
|
18
|
-
from Orange.data import Domain,
|
|
7
|
+
from Orange.data import Domain, Table
|
|
19
8
|
|
|
20
9
|
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
21
10
|
from Orange.widgets.orangecontrib.AAIT.utils.import_uic import uic
|
|
@@ -57,14 +46,7 @@ class OWAccumulator(OWBaseWidget):
|
|
|
57
46
|
uic.loadUi(self.gui, self)
|
|
58
47
|
|
|
59
48
|
# Connexion du bouton 'pushButton_send' défini dans le .ui
|
|
60
|
-
|
|
61
|
-
# Assurez-vous que votre bouton dans Qt Designer s'appelle 'pushButton_send'
|
|
62
|
-
self.pushButton_send.clicked.connect(self.push)
|
|
63
|
-
except AttributeError:
|
|
64
|
-
# Fallback en cas d'échec de la connexion du bouton UI
|
|
65
|
-
print("Error: Could not connect 'pushButton_send'. Using fallback GUI button.")
|
|
66
|
-
box = gui.widgetBox(self.mainArea, orientation="vertical")
|
|
67
|
-
gui.button(box, self, label="Send Accumulated Data and Purge (Fallback)", callback=self.push)
|
|
49
|
+
self.pushButton_send.clicked.connect(self.push)
|
|
68
50
|
|
|
69
51
|
# --- Variables d'état ---
|
|
70
52
|
self.data = None
|
|
@@ -157,6 +139,9 @@ class OWAccumulator(OWBaseWidget):
|
|
|
157
139
|
|
|
158
140
|
if __name__ == "__main__":
|
|
159
141
|
app = QApplication(sys.argv)
|
|
160
|
-
my_widget =
|
|
142
|
+
my_widget = OWAccumulator()
|
|
161
143
|
my_widget.show()
|
|
162
|
-
app
|
|
144
|
+
if hasattr(app, "exec"):
|
|
145
|
+
app.exec()
|
|
146
|
+
else:
|
|
147
|
+
app.exec_()
|
|
@@ -3,7 +3,7 @@ import re
|
|
|
3
3
|
from typing import Any, Iterable, List, Set
|
|
4
4
|
from pygments.formatters import HtmlFormatter
|
|
5
5
|
import markdown
|
|
6
|
-
|
|
6
|
+
import sys
|
|
7
7
|
# Dans la classe OWCorpusViewer, ajoutez les méthodes suivantes :
|
|
8
8
|
import numpy as np
|
|
9
9
|
from AnyQt.QtCore import (
|
|
@@ -829,15 +829,10 @@ class OWCorpusViewer(OWWidget, ConcurrentWidgetMixin):
|
|
|
829
829
|
)
|
|
830
830
|
|
|
831
831
|
if __name__ == "__main__":
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
# #corpus_ = corpus_[:3]
|
|
840
|
-
# corpus_ = BASE_TOKENIZER(corpus_)
|
|
841
|
-
# WidgetPreview(OWCorpusViewer).run(corpus_)
|
|
842
|
-
|
|
843
|
-
# TODO: Implement a test that works on all platform.
|
|
832
|
+
app = QApplication(sys.argv)
|
|
833
|
+
obj = OWCorpusViewer()
|
|
834
|
+
obj.show()
|
|
835
|
+
if hasattr(app, "exec"):
|
|
836
|
+
app.exec()
|
|
837
|
+
else:
|
|
838
|
+
app.exec_()
|
|
@@ -9,16 +9,17 @@ import traceback
|
|
|
9
9
|
|
|
10
10
|
import Orange.data
|
|
11
11
|
from Orange.data import Table, Domain, StringVariable
|
|
12
|
-
from AnyQt.QtWidgets import QApplication, QCheckBox, QPushButton
|
|
12
|
+
from AnyQt.QtWidgets import QApplication, QCheckBox, QPushButton, QWidget
|
|
13
13
|
from AnyQt import QtWidgets, QtGui
|
|
14
14
|
from Orange.widgets import widget
|
|
15
15
|
from Orange.widgets.settings import Setting
|
|
16
16
|
from Orange.widgets.utils.signals import Input, Output
|
|
17
17
|
|
|
18
|
+
|
|
18
19
|
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
19
20
|
from Orange.widgets.orangecontrib.AAIT.utils.import_uic import uic
|
|
20
21
|
from Orange.widgets.orangecontrib.AAIT.utils.initialize_from_ini import apply_modification_from_python_file
|
|
21
|
-
from Orange.widgets.orangecontrib.AAIT.utils import thread_management
|
|
22
|
+
from Orange.widgets.orangecontrib.AAIT.utils import thread_management, base_widget
|
|
22
23
|
else:
|
|
23
24
|
from orangecontrib.AAIT.utils.import_uic import uic
|
|
24
25
|
from orangecontrib.AAIT.utils.initialize_from_ini import apply_modification_from_python_file
|
|
@@ -26,38 +27,41 @@ else:
|
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
@apply_modification_from_python_file(filepath_original_widget=__file__)
|
|
29
|
-
class OWExecuteScript(
|
|
30
|
+
class OWExecuteScript(base_widget.BaseListWidget):
|
|
30
31
|
name = "Execute Script"
|
|
31
32
|
description = "Locally execute the scripts contained in the column 'Script'."
|
|
32
33
|
category = "AAIT - TOOLBOX"
|
|
33
34
|
icon = "icons/owexecutescript.svg"
|
|
34
35
|
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
35
36
|
icon = "icons_dev/owexecutescript.svg"
|
|
36
|
-
gui = os.path.join(os.path.dirname(os.path.abspath(__file__)), "designer/
|
|
37
|
+
gui = os.path.join(os.path.dirname(os.path.abspath(__file__)), "designer/owexecutescript_TEST.ui")
|
|
37
38
|
want_control_area = False
|
|
38
39
|
priority = 1060
|
|
39
40
|
|
|
40
41
|
# Settings
|
|
41
42
|
interactive = Setting(False)
|
|
42
43
|
|
|
43
|
-
class Inputs:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class Outputs:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
@Inputs.data
|
|
50
|
-
def set_data(self, in_data):
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
# class Inputs:
|
|
45
|
+
# data = Input("Data", Orange.data.Table)
|
|
46
|
+
#
|
|
47
|
+
# class Outputs:
|
|
48
|
+
# data = Output("Data", Orange.data.Table)
|
|
49
|
+
#
|
|
50
|
+
# @Inputs.data
|
|
51
|
+
# def set_data(self, in_data):
|
|
52
|
+
# self.data = in_data
|
|
53
|
+
# if self.data:
|
|
54
|
+
# self.var_selector.add_variables(self.data.domain)
|
|
55
|
+
# self.var_selector.select_variable_by_name(self.selected_column_name)
|
|
56
|
+
# if self.autorun:
|
|
57
|
+
# self.run()
|
|
54
58
|
|
|
55
59
|
def __init__(self):
|
|
56
60
|
super().__init__()
|
|
57
61
|
# Qt Management
|
|
58
62
|
self.setFixedWidth(470)
|
|
59
|
-
self.setFixedHeight(
|
|
60
|
-
uic.loadUi(self.gui, self)
|
|
63
|
+
self.setFixedHeight(500)
|
|
64
|
+
# uic.loadUi(self.gui, self)
|
|
61
65
|
# Checkbox
|
|
62
66
|
self.checkbox_mode = self.findChild(QCheckBox, 'checkBox')
|
|
63
67
|
self.checkbox_mode.setChecked(self.interactive)
|
|
@@ -69,6 +73,16 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
69
73
|
self.button_reset = self.findChild(QPushButton, "pushButton_2")
|
|
70
74
|
self.button_reset.clicked.connect(self.reset_state)
|
|
71
75
|
|
|
76
|
+
# --- Insert filterable variable list ---
|
|
77
|
+
# self.var_selector = FilterableVariableList(self)
|
|
78
|
+
# placeholder = self.findChild(QWidget, "placeholder") # add a QWidget in your .ui
|
|
79
|
+
# if placeholder:
|
|
80
|
+
# self.var_selector.setParent(placeholder)
|
|
81
|
+
# self.var_selector.setGeometry(0, 0, placeholder.width(), placeholder.height())
|
|
82
|
+
# self.var_selector.show()
|
|
83
|
+
# self.var_selector.select_variable_by_name(self.selected_column_name)
|
|
84
|
+
# self.var_selector.selected_variable.connect(self.on_variable_selected)
|
|
85
|
+
|
|
72
86
|
# Data Management
|
|
73
87
|
self.data = None
|
|
74
88
|
self.code = None
|
|
@@ -96,6 +110,10 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
96
110
|
popup = ScriptPopup(self.script_text, self)
|
|
97
111
|
popup.exec_() # modal popup
|
|
98
112
|
|
|
113
|
+
# def on_variable_selected(self, var_name):
|
|
114
|
+
# """Update the selected column when the user clicks an item."""
|
|
115
|
+
# self.selected_column_name = var_name
|
|
116
|
+
|
|
99
117
|
|
|
100
118
|
def run(self):
|
|
101
119
|
self.warning("")
|
|
@@ -109,19 +127,29 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
109
127
|
if self.data is None:
|
|
110
128
|
return
|
|
111
129
|
|
|
112
|
-
if not
|
|
113
|
-
self.
|
|
130
|
+
if not self.selected_column_name in self.data.domain:
|
|
131
|
+
self.warning(f'Previously selected column "{self.selected_column_name}" does not exist in your data.')
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
if not isinstance(self.data.domain[self.selected_column_name], StringVariable):
|
|
135
|
+
self.error(f'You must select a text variable.')
|
|
114
136
|
return
|
|
115
137
|
|
|
116
138
|
# Start progress bar
|
|
117
139
|
self.progressBarInit()
|
|
118
140
|
|
|
119
141
|
# Thread management
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
142
|
+
if self.interactive:
|
|
143
|
+
# Interactive mode: Run in main thread for GUI compatibility
|
|
144
|
+
self.result = self.execute_scripts_in_table(self.data, self.selected_column_name)
|
|
145
|
+
self.handle_result(self.result)
|
|
146
|
+
self.handle_finish()
|
|
147
|
+
else:
|
|
148
|
+
self.thread = thread_management.Thread(self.execute_scripts_in_table, self.data, self.selected_column_name)
|
|
149
|
+
self.thread.progress.connect(self.handle_progress)
|
|
150
|
+
self.thread.result.connect(self.handle_result)
|
|
151
|
+
self.thread.finish.connect(self.handle_finish)
|
|
152
|
+
self.thread.start()
|
|
125
153
|
|
|
126
154
|
|
|
127
155
|
def handle_progress(self, value: float) -> None:
|
|
@@ -145,7 +173,7 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
145
173
|
pass
|
|
146
174
|
|
|
147
175
|
|
|
148
|
-
def execute_scripts_in_table(self, table, progress_callback=None, argself=None):
|
|
176
|
+
def execute_scripts_in_table(self, table, selected_var, progress_callback=None, argself=None):
|
|
149
177
|
# Copy of input data
|
|
150
178
|
data = table.copy()
|
|
151
179
|
attr_dom = list(data.domain.attributes)
|
|
@@ -160,7 +188,7 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
160
188
|
targets = [row[y] for y in class_dom]
|
|
161
189
|
metas = list(data.metas[i])
|
|
162
190
|
# Execute the script for the given row
|
|
163
|
-
output, error = self.execute_script(row[
|
|
191
|
+
output, error = self.execute_script(row[selected_var].value)
|
|
164
192
|
# Store the output / error
|
|
165
193
|
new_row = features + targets + metas + [output, error]
|
|
166
194
|
rows.append(new_row)
|
|
@@ -184,13 +212,15 @@ class OWExecuteScript(widget.OWWidget):
|
|
|
184
212
|
if self.console is None:
|
|
185
213
|
self.console = SmartConsole()
|
|
186
214
|
|
|
187
|
-
|
|
215
|
+
executable_code = f"exec({script!r})"
|
|
216
|
+
self.script_text += f"\n\n{script}" if self.script_text else script
|
|
217
|
+
|
|
188
218
|
|
|
189
219
|
stdout, stderr = io.StringIO(), io.StringIO()
|
|
190
220
|
with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr):
|
|
191
221
|
self.console.last_error = ""
|
|
192
222
|
try:
|
|
193
|
-
self.console.push(
|
|
223
|
+
self.console.push(executable_code)
|
|
194
224
|
except Exception:
|
|
195
225
|
pass # all errors are captured in showtraceback
|
|
196
226
|
|
|
@@ -216,6 +246,7 @@ class SmartConsole(code.InteractiveConsole):
|
|
|
216
246
|
def __init__(self, *args, **kwargs):
|
|
217
247
|
super().__init__(*args, **kwargs)
|
|
218
248
|
self.last_error = ""
|
|
249
|
+
self.push("import matplotlib; matplotlib.use('QtAgg')")
|
|
219
250
|
|
|
220
251
|
def push(self, line):
|
|
221
252
|
if line.startswith("!pip "):
|
|
@@ -229,6 +260,8 @@ class SmartConsole(code.InteractiveConsole):
|
|
|
229
260
|
self.last_error = traceback.format_exc()
|
|
230
261
|
|
|
231
262
|
|
|
263
|
+
|
|
264
|
+
|
|
232
265
|
class PythonHighlighter(QtGui.QSyntaxHighlighter):
|
|
233
266
|
def __init__(self, document):
|
|
234
267
|
super().__init__(document)
|
|
@@ -301,7 +334,6 @@ class ScriptPopup(QtWidgets.QDialog):
|
|
|
301
334
|
|
|
302
335
|
|
|
303
336
|
|
|
304
|
-
|
|
305
337
|
if __name__ == "__main__":
|
|
306
338
|
app = QApplication(sys.argv)
|
|
307
339
|
my_widget = OWExecuteScript()
|