aait 2.2.7.2__tar.gz → 2.3.8__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.3.8/PKG-INFO +9 -0
- aait-2.3.8/aait.egg-info/PKG-INFO +9 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/SOURCES.txt +1 -2
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/__init__.py +7 -3
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/MetManagement.py +9 -2
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/SimpleDialogQt.py +1 -3
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/base_widget.py +1 -4
- aait-2.3.8/orangecontrib/AAIT/utils/mac_utils.py +474 -0
- aait-2.3.8/orangecontrib/AAIT/utils/tools/first_time_check.py +20 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/windows_utils.py +53 -98
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +2 -2
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -9
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileMetadata.py +2 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWInputSelector.py +18 -7
- aait-2.2.7.2/orangecontrib/AAIT/widgets/OWEdgeLLM.py → aait-2.3.8/orangecontrib/AAIT/widgets/OWLLMEngine.py +1 -1
- {aait-2.2.7.2 → aait-2.3.8}/setup.py +1 -1
- aait-2.2.7.2/PKG-INFO +0 -28
- aait-2.2.7.2/aait.egg-info/PKG-INFO +0 -28
- aait-2.2.7.2/orangecontrib/AAIT/utils/mac_utils.py +0 -102
- aait-2.2.7.2/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -14
- {aait-2.2.7.2 → aait-2.3.8}/License.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/dependency_links.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/entry_points.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/namespace_packages.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/requires.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/top_level.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/MergeBaseLora.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_kill_workflow.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_requests.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_start_workflow.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/Tutorial_Finetuning.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/Tutorial_TestFinetuning.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/answers.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/answers_llama.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/chunking.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/embeddings.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/finetuning.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/functions_DatasetGeneration.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/functions_Finetuning.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/lemmes.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/main_DatasetGeneration.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/main_Finetuning.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/process_documents.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/quickpy.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/test.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/test_functions.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/translations.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/OperationSystem.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/aait_table_viewer.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/import_uic.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/thread_management.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAccumulator.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWConverseLLM.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileWithPath.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWKeywords.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOperationSystem.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSortAndSelect.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTrigger.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_OperationSystem.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owchunkanalysis.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owedgellm.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owllm4all.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owsortandselect.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/chunking_analysis.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/edge_llm.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/operationSystem.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/__init__.py +0 -0
- {aait-2.2.7.2 → aait-2.3.8}/setup.cfg +0 -0
aait-2.3.8/PKG-INFO
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: aait
|
|
3
|
+
Version: 2.3.8
|
|
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.3.8
|
|
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
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
License.txt
|
|
2
|
-
setup.cfg
|
|
3
2
|
setup.py
|
|
4
3
|
aait.egg-info/PKG-INFO
|
|
5
4
|
aait.egg-info/SOURCES.txt
|
|
@@ -69,7 +68,6 @@ orangecontrib/AAIT/widgets/OWConcatRules.py
|
|
|
69
68
|
orangecontrib/AAIT/widgets/OWConverseLLM.py
|
|
70
69
|
orangecontrib/AAIT/widgets/OWCreateEmbeddings.py
|
|
71
70
|
orangecontrib/AAIT/widgets/OWDisplayMD.py
|
|
72
|
-
orangecontrib/AAIT/widgets/OWEdgeLLM.py
|
|
73
71
|
orangecontrib/AAIT/widgets/OWEditTable.py
|
|
74
72
|
orangecontrib/AAIT/widgets/OWEmptySwitch.py
|
|
75
73
|
orangecontrib/AAIT/widgets/OWEndLoop.py
|
|
@@ -87,6 +85,7 @@ orangecontrib/AAIT/widgets/OWGenerateWord.py
|
|
|
87
85
|
orangecontrib/AAIT/widgets/OWInputSelector.py
|
|
88
86
|
orangecontrib/AAIT/widgets/OWKeywords.py
|
|
89
87
|
orangecontrib/AAIT/widgets/OWKeywordsDetection.py
|
|
88
|
+
orangecontrib/AAIT/widgets/OWLLMEngine.py
|
|
90
89
|
orangecontrib/AAIT/widgets/OWLMStudio.py
|
|
91
90
|
orangecontrib/AAIT/widgets/OWLanguageDetection.py
|
|
92
91
|
orangecontrib/AAIT/widgets/OWLemmatizer.py
|
|
@@ -20,13 +20,17 @@ else: # Execute the file
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\","/"):
|
|
23
|
-
from Orange.widgets.orangecontrib.AAIT.utils.tools import
|
|
23
|
+
from Orange.widgets.orangecontrib.AAIT.utils.tools import change_owcorpus
|
|
24
24
|
from Orange.widgets.orangecontrib.AAIT.utils import MetManagement
|
|
25
25
|
else:
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
from orangecontrib.AAIT.utils.tools import change_owcorpus
|
|
27
|
+
from orangecontrib.AAIT.utils import MetManagement
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
|
|
31
|
+
change_owcorpus.replace_owcorpus_file()
|
|
32
|
+
# from Orange.widgets.orangecontrib.AAIT.utils.tools import first_time_check # ignore pyflakes alert
|
|
33
|
+
# from orangecontrib.AAIT.utils.tools import first_time_check # ignore pyflakes alert
|
|
30
34
|
def remove_temp_file():
|
|
31
35
|
"""
|
|
32
36
|
remove file which allows a message box to be displayed “launch of orange software”
|
|
@@ -15,14 +15,16 @@ import tempfile
|
|
|
15
15
|
import uuid
|
|
16
16
|
import base64
|
|
17
17
|
from Orange.data import Table, StringVariable, Domain
|
|
18
|
+
import platform
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
|
|
20
22
|
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
21
23
|
from Orange.widgets.orangecontrib.AAIT.utils import (SimpleDialogQt, aait_repo_file, shared_variables,
|
|
22
|
-
windows_utils)
|
|
24
|
+
windows_utils,mac_utils)
|
|
23
25
|
else:
|
|
24
26
|
from orangecontrib.AAIT.utils import (SimpleDialogQt, aait_repo_file, shared_variables,
|
|
25
|
-
windows_utils)
|
|
27
|
+
windows_utils,mac_utils)
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
def force_save(self_instance):
|
|
@@ -856,6 +858,11 @@ def download_aait_store_file_or_directory(server_path: str = "", target: str = "
|
|
|
856
858
|
if os.path.isdir(server_path):
|
|
857
859
|
output=str(Path(output).resolve().parent).replace('\\','/')+"/"
|
|
858
860
|
windows_utils.win32_shellcopy(source, output)
|
|
861
|
+
elif platform.system() == "Darwin":
|
|
862
|
+
if os.path.isdir(server_path):
|
|
863
|
+
output=str(Path(output).resolve().parent).replace('\\','/')+"/"
|
|
864
|
+
mac_utils.mac_copy_with_anyqt_progress(source, output)
|
|
865
|
+
|
|
859
866
|
else:
|
|
860
867
|
#try:
|
|
861
868
|
# windows_utils.mac_shellcopy(source, output)
|
|
@@ -229,10 +229,8 @@ def get_number_from_dialog(text, value_min, value_max):
|
|
|
229
229
|
print("result :", selected_value)
|
|
230
230
|
"""
|
|
231
231
|
## surement fausse alarme de pyflakes
|
|
232
|
-
|
|
232
|
+
_ = QApplication(sys.argv) if not QApplication.instance() else QApplication.instance()
|
|
233
233
|
dialog = NumberInputDialog(text, value_min, value_max)
|
|
234
234
|
if dialog.exec():
|
|
235
235
|
return dialog.get_value()
|
|
236
236
|
return None
|
|
237
|
-
|
|
238
|
-
|
|
@@ -44,10 +44,7 @@ class BaseListWidget(widget.OWWidget):
|
|
|
44
44
|
5. Remove any `uic.loadUi(self.gui, self)` calls from your widget, as the UI is already loaded automatically by `BaseListWidget`.
|
|
45
45
|
|
|
46
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`.
|
|
47
|
+
They are already defined in BaseListWidget.
|
|
51
48
|
|
|
52
49
|
⚠️ Optional: Only if you truly need to customize input handling, you can
|
|
53
50
|
override the `set_data()` method. In that case, make sure to update
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import platform
|
|
2
|
+
|
|
3
|
+
if platform.system() == "Darwin":
|
|
4
|
+
import os
|
|
5
|
+
if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
|
|
6
|
+
from Orange.widgets.orangecontrib.AAIT.utils import SimpleDialogQt
|
|
7
|
+
else:
|
|
8
|
+
from orangecontrib.AAIT.utils import SimpleDialogQt
|
|
9
|
+
import sys
|
|
10
|
+
import time
|
|
11
|
+
import shutil
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
import subprocess
|
|
14
|
+
|
|
15
|
+
from AnyQt.QtCore import QObject, QThread, Signal, Slot, Qt
|
|
16
|
+
from AnyQt.QtWidgets import (
|
|
17
|
+
QApplication, QDialog, QVBoxLayout, QLabel, QProgressBar, QPushButton, QMessageBox
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# ---------------------- Worker de copie (thread de fond) ----------------------
|
|
22
|
+
class _CopyWorker(QObject):
|
|
23
|
+
progress = Signal(int, float) # (pct 0..100, speed_MBps)
|
|
24
|
+
finished = Signal(bool) # True = success, False = cancelled
|
|
25
|
+
errored = Signal(str) # message d'erreur
|
|
26
|
+
|
|
27
|
+
def __init__(self, src: str, dest: str, chunk_mb: int = 8):
|
|
28
|
+
super().__init__()
|
|
29
|
+
self.src = os.path.abspath(src)
|
|
30
|
+
self.dest = os.path.abspath(dest)
|
|
31
|
+
self._cancel = False
|
|
32
|
+
self._chunk = chunk_mb * 1024 * 1024
|
|
33
|
+
|
|
34
|
+
@Slot()
|
|
35
|
+
def cancel(self):
|
|
36
|
+
self._cancel = True
|
|
37
|
+
|
|
38
|
+
def _iter_files(self, src):
|
|
39
|
+
if os.path.isfile(src):
|
|
40
|
+
yield ("", src)
|
|
41
|
+
return
|
|
42
|
+
# Conserver le répertoire top-level sous dest (comme Finder)
|
|
43
|
+
for root, _, files in os.walk(src):
|
|
44
|
+
rel = os.path.relpath(root, os.path.dirname(src))
|
|
45
|
+
for name in files:
|
|
46
|
+
yield (rel, os.path.join(root, name))
|
|
47
|
+
|
|
48
|
+
def _total_size(self, items):
|
|
49
|
+
total = 0
|
|
50
|
+
for _, p in items:
|
|
51
|
+
try:
|
|
52
|
+
total += os.path.getsize(p)
|
|
53
|
+
except OSError:
|
|
54
|
+
pass
|
|
55
|
+
return total
|
|
56
|
+
|
|
57
|
+
@Slot()
|
|
58
|
+
def run(self):
|
|
59
|
+
try:
|
|
60
|
+
if not os.path.exists(self.src):
|
|
61
|
+
raise FileNotFoundError(f"Source not found: {self.src}")
|
|
62
|
+
os.makedirs(self.dest, exist_ok=True)
|
|
63
|
+
|
|
64
|
+
# Liste matérielle pour total + parcours
|
|
65
|
+
items = list(self._iter_files(self.src))
|
|
66
|
+
if not items:
|
|
67
|
+
# Rien à copier : succès immédiat
|
|
68
|
+
self.progress.emit(100, 0.0)
|
|
69
|
+
self.finished.emit(True)
|
|
70
|
+
return
|
|
71
|
+
|
|
72
|
+
total = self._total_size(items)
|
|
73
|
+
done = 0
|
|
74
|
+
last_t = time.time()
|
|
75
|
+
last_b = 0
|
|
76
|
+
|
|
77
|
+
topname = os.path.basename(os.path.normpath(self.src))
|
|
78
|
+
is_dir = os.path.isdir(self.src)
|
|
79
|
+
|
|
80
|
+
for relroot, srcfile in items:
|
|
81
|
+
if self._cancel:
|
|
82
|
+
self.finished.emit(False)
|
|
83
|
+
return
|
|
84
|
+
|
|
85
|
+
rel = relroot if relroot != "." else (topname if is_dir else "")
|
|
86
|
+
tgt_dir = os.path.join(self.dest, rel) if rel else self.dest
|
|
87
|
+
os.makedirs(tgt_dir, exist_ok=True)
|
|
88
|
+
tgt_file = os.path.join(tgt_dir, os.path.basename(srcfile))
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
with open(srcfile, "rb") as fi, open(tgt_file, "wb") as fo:
|
|
92
|
+
while True:
|
|
93
|
+
if self._cancel:
|
|
94
|
+
self.finished.emit(False)
|
|
95
|
+
return
|
|
96
|
+
buf = fi.read(self._chunk)
|
|
97
|
+
if not buf:
|
|
98
|
+
break
|
|
99
|
+
fo.write(buf)
|
|
100
|
+
done += len(buf)
|
|
101
|
+
|
|
102
|
+
# mise à jour ~5x/s
|
|
103
|
+
now = time.time()
|
|
104
|
+
dt = now - last_t
|
|
105
|
+
if dt >= 0.2:
|
|
106
|
+
db = done - last_b
|
|
107
|
+
speed = (db / dt) / (1024 * 1024) if dt > 0 else 0.0
|
|
108
|
+
pct = 100 if total == 0 else int(done * 100 / max(1, total))
|
|
109
|
+
self.progress.emit(pct, speed)
|
|
110
|
+
last_t, last_b = now, done
|
|
111
|
+
|
|
112
|
+
# métadonnées (mtime, perms si possible)
|
|
113
|
+
try:
|
|
114
|
+
shutil.copystat(srcfile, tgt_file, follow_symlinks=True)
|
|
115
|
+
except Exception:
|
|
116
|
+
pass
|
|
117
|
+
|
|
118
|
+
# flush final sur ce fichier
|
|
119
|
+
pct = 100 if total == 0 else int(done * 100 / max(1, total))
|
|
120
|
+
self.progress.emit(pct, 0.0)
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
self.errored.emit(str(e))
|
|
124
|
+
return
|
|
125
|
+
|
|
126
|
+
self.finished.emit(True)
|
|
127
|
+
|
|
128
|
+
except Exception as e:
|
|
129
|
+
self.errored.emit(str(e))
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# ---------------------- Boîte de dialogue de progression ----------------------
|
|
133
|
+
class _CopyDialog(QDialog):
|
|
134
|
+
def __init__(self, src: str, dest: str, title: str = "Copy in progress", parent=None):
|
|
135
|
+
super().__init__(parent)
|
|
136
|
+
self.setWindowTitle(title)
|
|
137
|
+
self.setModal(True)
|
|
138
|
+
self.resize(600, 180)
|
|
139
|
+
|
|
140
|
+
# libellés
|
|
141
|
+
self._label_paths = QLabel(
|
|
142
|
+
f"<b>Source</b>: {src}<br><b>Destination</b>: {dest}"
|
|
143
|
+
)
|
|
144
|
+
self._label_paths.setTextFormat(Qt.RichText)
|
|
145
|
+
self._bar = QProgressBar()
|
|
146
|
+
self._bar.setRange(0, 100)
|
|
147
|
+
self._bar.setValue(0)
|
|
148
|
+
|
|
149
|
+
self._info = QLabel("0% — 0.0 MB/s")
|
|
150
|
+
self._info.setStyleSheet("color:#0a58ca;")
|
|
151
|
+
self._ascii = QLabel("░" * 40)
|
|
152
|
+
self._ascii.setStyleSheet("font-family: Menlo, Monaco, Consolas, monospace;")
|
|
153
|
+
|
|
154
|
+
self._btn_cancel = QPushButton("Annuler")
|
|
155
|
+
self._btn_cancel.setStyleSheet("background:#f8d7da;color:#842029;")
|
|
156
|
+
self._btn_cancel.clicked.connect(self._on_cancel)
|
|
157
|
+
|
|
158
|
+
lay = QVBoxLayout(self)
|
|
159
|
+
lay.addWidget(self._label_paths)
|
|
160
|
+
lay.addWidget(self._bar)
|
|
161
|
+
lay.addWidget(self._info)
|
|
162
|
+
lay.addWidget(self._ascii)
|
|
163
|
+
lay.addWidget(self._btn_cancel, alignment=Qt.AlignRight)
|
|
164
|
+
|
|
165
|
+
# thread & worker
|
|
166
|
+
self._thread = QThread(self)
|
|
167
|
+
self._worker = _CopyWorker(src, dest)
|
|
168
|
+
self._worker.moveToThread(self._thread)
|
|
169
|
+
self._thread.started.connect(self._worker.run)
|
|
170
|
+
|
|
171
|
+
self._worker.progress.connect(self._on_progress)
|
|
172
|
+
self._worker.finished.connect(self._on_finished)
|
|
173
|
+
self._worker.errored.connect(self._on_error)
|
|
174
|
+
|
|
175
|
+
self._result = None # True / False / None (erreur)
|
|
176
|
+
|
|
177
|
+
def start(self):
|
|
178
|
+
self._thread.start()
|
|
179
|
+
|
|
180
|
+
@Slot(int, float)
|
|
181
|
+
def _on_progress(self, pct: int, mbps: float):
|
|
182
|
+
self._bar.setValue(pct)
|
|
183
|
+
self._info.setText(f"{pct}% — {mbps:.1f} MB/s")
|
|
184
|
+
filled = min(40, int(pct * 40 / 100))
|
|
185
|
+
self._ascii.setText("█" * filled + "░" * (40 - filled))
|
|
186
|
+
|
|
187
|
+
@Slot(bool)
|
|
188
|
+
def _on_finished(self, ok: bool):
|
|
189
|
+
self._result = ok
|
|
190
|
+
self._thread.quit()
|
|
191
|
+
self._thread.wait(2000)
|
|
192
|
+
self.accept()
|
|
193
|
+
|
|
194
|
+
@Slot(str)
|
|
195
|
+
def _on_error(self, msg: str):
|
|
196
|
+
self._result = None
|
|
197
|
+
self._thread.quit()
|
|
198
|
+
self._thread.wait(2000)
|
|
199
|
+
QMessageBox.critical(self, "Erreur de copie", msg)
|
|
200
|
+
self.reject()
|
|
201
|
+
|
|
202
|
+
@Slot()
|
|
203
|
+
def _on_cancel(self):
|
|
204
|
+
self._worker.cancel()
|
|
205
|
+
self._btn_cancel.setEnabled(False)
|
|
206
|
+
self._btn_cancel.setText("Annulation…")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# ---------------------- API publique ----------------------
|
|
210
|
+
def mac_copy_with_anyqt_progress(src: str, dest: str, title: str = "Copy in progress", parent=None) -> bool:
|
|
211
|
+
"""
|
|
212
|
+
Ouvre une fenêtre AnyQt avec barre de progression, ASCII bar et débit.
|
|
213
|
+
:returns: True (succès), False (annulé), lève OSError si erreur de lancement.
|
|
214
|
+
"""
|
|
215
|
+
src = os.path.abspath(src)
|
|
216
|
+
if not os.path.exists(src):
|
|
217
|
+
SimpleDialogQt.BoxError("Error file not exist : "+src)
|
|
218
|
+
return
|
|
219
|
+
|
|
220
|
+
dest = os.path.abspath(dest)
|
|
221
|
+
if not os.path.exists(src):
|
|
222
|
+
raise FileNotFoundError(f"Source not found: {src}")
|
|
223
|
+
os.makedirs(dest, exist_ok=True)
|
|
224
|
+
|
|
225
|
+
app = QApplication.instance()
|
|
226
|
+
owns_app = False
|
|
227
|
+
if app is None:
|
|
228
|
+
app = QApplication(sys.argv)
|
|
229
|
+
owns_app = True
|
|
230
|
+
|
|
231
|
+
dlg = _CopyDialog(src, dest, title, parent)
|
|
232
|
+
dlg.start()
|
|
233
|
+
# compat exec/exec_ selon backend
|
|
234
|
+
exec_fn = getattr(dlg, "exec", None) or getattr(dlg, "exec_", None)
|
|
235
|
+
exec_fn()
|
|
236
|
+
|
|
237
|
+
result = dlg._result
|
|
238
|
+
if owns_app:
|
|
239
|
+
# On ne ferme pas l'app si l'hôte (Orange) doit continuer à l'utiliser.
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
if result is None:
|
|
243
|
+
# une erreur a déjà été affichée
|
|
244
|
+
raise OSError("Copy failed (internal error).")
|
|
245
|
+
return bool(result)
|
|
246
|
+
|
|
247
|
+
def _run_osascript(script: str) -> subprocess.CompletedProcess:
|
|
248
|
+
"""
|
|
249
|
+
Exécute un script AppleScript et renvoie le CompletedProcess.
|
|
250
|
+
Ne lève pas, pour qu'on puisse distinguer Cancel (code != 0).
|
|
251
|
+
"""
|
|
252
|
+
# On passe une seule -e avec tout le script pour éviter les soucis d'échappement multi -e
|
|
253
|
+
return subprocess.run(
|
|
254
|
+
["osascript", "-e", script],
|
|
255
|
+
text=True,
|
|
256
|
+
capture_output=True
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
def _parse_extensions_from_filter(file_filter: str):
|
|
260
|
+
"""
|
|
261
|
+
Convertit un filtre du style 'Images (*.jpg;*.png;*.jpeg)' en liste d'extensions ['jpg','png','jpeg'].
|
|
262
|
+
Si rien, retourne [] (pas de filtrage côté AppleScript).
|
|
263
|
+
"""
|
|
264
|
+
m = re.search(r"\(([^)]+)\)", file_filter or "")
|
|
265
|
+
if not m:
|
|
266
|
+
return []
|
|
267
|
+
patterns = m.group(1)
|
|
268
|
+
exts = []
|
|
269
|
+
for token in re.split(r"[;,\s]+", patterns):
|
|
270
|
+
token = token.strip()
|
|
271
|
+
if not token:
|
|
272
|
+
continue
|
|
273
|
+
# *.jpg -> jpg ; .png -> png ; * -> (ignore)
|
|
274
|
+
token = token.lstrip("*.").lstrip(".")
|
|
275
|
+
if token and token != "*":
|
|
276
|
+
exts.append(token.lower())
|
|
277
|
+
# Supprime doublons en conservant l'ordre
|
|
278
|
+
seen = set()
|
|
279
|
+
out = []
|
|
280
|
+
for e in exts:
|
|
281
|
+
if e not in seen:
|
|
282
|
+
seen.add(e)
|
|
283
|
+
out.append(e)
|
|
284
|
+
return out
|
|
285
|
+
|
|
286
|
+
def _to_applescript_list_str(values):
|
|
287
|
+
"""
|
|
288
|
+
Transforme ['jpg','png'] en AppleScript {"jpg","png"}.
|
|
289
|
+
Si values est vide -> renvoie 'missing value' (pas d'arg).
|
|
290
|
+
"""
|
|
291
|
+
if not values:
|
|
292
|
+
return "missing value"
|
|
293
|
+
quoted = ",".join(f"\"{v}\"" for v in values)
|
|
294
|
+
return "{%s}" % quoted
|
|
295
|
+
|
|
296
|
+
def _escape_as_text(s: str) -> str:
|
|
297
|
+
"""Échappe pour AppleScript (guillemets et backslashes)."""
|
|
298
|
+
return s.replace("\\", "\\\\").replace("\"", "\\\"")
|
|
299
|
+
|
|
300
|
+
# ----------------------------
|
|
301
|
+
# 1) Sélection de dossier
|
|
302
|
+
# ----------------------------
|
|
303
|
+
|
|
304
|
+
def select_folder_macos(title: str = "Select a folder") -> str:
|
|
305
|
+
"""
|
|
306
|
+
Ouvre un panneau 'choose folder' natif macOS et renvoie un chemin POSIX (str) ou '' si annulé.
|
|
307
|
+
Toujours au premier plan via activation de System Events.
|
|
308
|
+
"""
|
|
309
|
+
title_ = _escape_as_text(title or "Select a folder")
|
|
310
|
+
# 'choose folder' renvoie un alias ; 'POSIX path of' le convertit.
|
|
311
|
+
script = f'''
|
|
312
|
+
with timeout of 3600 seconds
|
|
313
|
+
tell application "System Events" to activate
|
|
314
|
+
set _dlgTitle to "{title_}"
|
|
315
|
+
try
|
|
316
|
+
set _f to choose folder with prompt _dlgTitle
|
|
317
|
+
set _p to POSIX path of _f
|
|
318
|
+
return _p
|
|
319
|
+
on error number -128
|
|
320
|
+
return ""
|
|
321
|
+
end try
|
|
322
|
+
end timeout
|
|
323
|
+
'''
|
|
324
|
+
cp = _run_osascript(script)
|
|
325
|
+
out = cp.stdout.strip()
|
|
326
|
+
return out
|
|
327
|
+
|
|
328
|
+
# ----------------------------
|
|
329
|
+
# 2) Sélection de fichier(s)
|
|
330
|
+
# ----------------------------
|
|
331
|
+
|
|
332
|
+
def select_file_macos(multi_select: bool = False,
|
|
333
|
+
file_filter: str = "All Files (*.*)",
|
|
334
|
+
dialog_title: str = "Select File(s)") -> str:
|
|
335
|
+
"""
|
|
336
|
+
Panneau natif macOS pour sélectionner un ou plusieurs fichiers.
|
|
337
|
+
- multi_select=False -> renvoie un chemin (str) ou '' si annulé
|
|
338
|
+
(pour compatibilité Windows, ici on renvoie aussi '' si annulé)
|
|
339
|
+
- multi_select=True -> renvoie des chemins séparés par ';'
|
|
340
|
+
Le filtrage par extension utilise 'of type {"jpg","png",...}' lorsqu'on peut déduire des extensions.
|
|
341
|
+
"""
|
|
342
|
+
title_ = _escape_as_text(dialog_title or "Select File(s)")
|
|
343
|
+
exts = _parse_extensions_from_filter(file_filter)
|
|
344
|
+
of_type = _to_applescript_list_str(exts)
|
|
345
|
+
|
|
346
|
+
multi_flag = "with multiple selections allowed" if multi_select else ""
|
|
347
|
+
of_type_clause = "" if of_type == "missing value" else f"of type {of_type}"
|
|
348
|
+
|
|
349
|
+
# On renvoie POSIX path(s). En cas de multi, on joint par ';' côté AppleScript pour éviter des surprises d'encodage.
|
|
350
|
+
if multi_select:
|
|
351
|
+
script = f'''
|
|
352
|
+
with timeout of 3600 seconds
|
|
353
|
+
tell application "System Events" to activate
|
|
354
|
+
set _dlgTitle to "{title_}"
|
|
355
|
+
try
|
|
356
|
+
set _fs to choose file {of_type_clause} {multi_flag} with prompt _dlgTitle
|
|
357
|
+
set _list to {{}}
|
|
358
|
+
repeat with _f in _fs
|
|
359
|
+
set end of _list to POSIX path of _f
|
|
360
|
+
end repeat
|
|
361
|
+
return _list as string -- AppleScript joint par ", " par défaut, donc faisons mieux :
|
|
362
|
+
on error number -128
|
|
363
|
+
return ""
|
|
364
|
+
end try
|
|
365
|
+
end timeout
|
|
366
|
+
'''
|
|
367
|
+
# On exécute puis on convertit la liste AppleScript (qui reviendra "p1, p2, p3") en ';' côté Python
|
|
368
|
+
cp = _run_osascript(script)
|
|
369
|
+
raw = cp.stdout.strip()
|
|
370
|
+
if not raw:
|
|
371
|
+
return ""
|
|
372
|
+
# AppleScript renvoie les listes avec ", " ; on découpe prudemment
|
|
373
|
+
parts = [p.strip() for p in raw.split(",") if p.strip()]
|
|
374
|
+
return str(";".join(parts))
|
|
375
|
+
else:
|
|
376
|
+
script = f'''
|
|
377
|
+
with timeout of 3600 seconds
|
|
378
|
+
tell application "System Events" to activate
|
|
379
|
+
set _dlgTitle to "{title_}"
|
|
380
|
+
try
|
|
381
|
+
set _f to choose file {of_type_clause} with prompt _dlgTitle
|
|
382
|
+
return POSIX path of _f
|
|
383
|
+
on error number -128
|
|
384
|
+
return ""
|
|
385
|
+
end try
|
|
386
|
+
end timeout
|
|
387
|
+
'''
|
|
388
|
+
cp = _run_osascript(script)
|
|
389
|
+
return cp.stdout.strip()
|
|
390
|
+
|
|
391
|
+
# ----------------------------
|
|
392
|
+
# 3) Enregistrer sous (nouveau fichier)
|
|
393
|
+
# ----------------------------
|
|
394
|
+
|
|
395
|
+
def select_new_file_macos(file_filter: str = "All Files (*.*)",
|
|
396
|
+
dialog_title: str = "Create New File") -> str:
|
|
397
|
+
"""
|
|
398
|
+
Panneau natif macOS 'choose file name' (NSSavePanel). Renvoie le chemin (str) ou '' si annulé.
|
|
399
|
+
On applique une extension par défaut si déductible du filtre (ex: '*.txt' -> '.txt').
|
|
400
|
+
"""
|
|
401
|
+
title_ = _escape_as_text(dialog_title or "Create New File")
|
|
402
|
+
exts = _parse_extensions_from_filter(file_filter)
|
|
403
|
+
default_ext = exts[0] if exts else "" # On prend la première extension du filtre si dispo
|
|
404
|
+
|
|
405
|
+
script = f'''
|
|
406
|
+
with timeout of 3600 seconds
|
|
407
|
+
tell application "System Events" to activate
|
|
408
|
+
set _dlgTitle to "{title_}"
|
|
409
|
+
try
|
|
410
|
+
set _f to choose file name with prompt _dlgTitle
|
|
411
|
+
set _p to POSIX path of _f
|
|
412
|
+
return _p
|
|
413
|
+
on error number -128
|
|
414
|
+
return ""
|
|
415
|
+
end try
|
|
416
|
+
end timeout
|
|
417
|
+
'''
|
|
418
|
+
cp = _run_osascript(script)
|
|
419
|
+
path = cp.stdout.strip()
|
|
420
|
+
if not path:
|
|
421
|
+
return ""
|
|
422
|
+
# Si pas d'extension et qu'on en a une par défaut, on l'ajoute.
|
|
423
|
+
base, ext = os.path.splitext(path)
|
|
424
|
+
if default_ext and not ext:
|
|
425
|
+
# normalise: 'txt' -> '.txt'
|
|
426
|
+
if not default_ext.startswith("."):
|
|
427
|
+
default_ext = "." + default_ext
|
|
428
|
+
path = path + default_ext
|
|
429
|
+
return path
|
|
430
|
+
|
|
431
|
+
# ----------------------------
|
|
432
|
+
# 4) Message box native (display dialog)
|
|
433
|
+
# ----------------------------
|
|
434
|
+
|
|
435
|
+
def BoxMessage_macos(text: str, mode: int = 0, title: str = None) -> int:
|
|
436
|
+
"""
|
|
437
|
+
Affiche une boîte AppleScript 'display dialog' :
|
|
438
|
+
mode = 0 -> stop (rouge) -> titre défaut "Error"
|
|
439
|
+
mode = 1 -> caution (jaune)-> titre défaut "Warning"
|
|
440
|
+
mode = 2 -> note (bleu) -> titre défaut "Information"
|
|
441
|
+
Renvoie 1 si 'OK' cliqué, 0 si annulé/fermé.
|
|
442
|
+
"""
|
|
443
|
+
if mode not in (0, 1, 2):
|
|
444
|
+
raise ValueError("mode doit être 0=Error, 1=Warning, 2=Info")
|
|
445
|
+
|
|
446
|
+
icon = {0: "stop", 1: "caution", 2: "note"}[mode]
|
|
447
|
+
if title is None:
|
|
448
|
+
title = {0: "Error", 1: "Warning", 2: "Information"}[mode]
|
|
449
|
+
|
|
450
|
+
title_ = _escape_as_text(title)
|
|
451
|
+
text_ = _escape_as_text(text)
|
|
452
|
+
|
|
453
|
+
script = f'''
|
|
454
|
+
with timeout of 3600 seconds
|
|
455
|
+
tell application "System Events" to activate
|
|
456
|
+
try
|
|
457
|
+
display dialog "{text_}" with title "{title_}" buttons {{"OK"}} default button "OK" with icon {icon} giving up after 0
|
|
458
|
+
return "OK"
|
|
459
|
+
on error number -128
|
|
460
|
+
return "CANCEL"
|
|
461
|
+
end try
|
|
462
|
+
end timeout
|
|
463
|
+
'''
|
|
464
|
+
cp = _run_osascript(script)
|
|
465
|
+
return 1 if cp.stdout.strip() == "OK" else 0
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
if __name__ == "__main__":
|
|
472
|
+
import sys
|
|
473
|
+
from AnyQt.QtWidgets import QApplication
|
|
474
|
+
app = QApplication(sys.argv)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# import os
|
|
2
|
+
#
|
|
3
|
+
# if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\","/"):
|
|
4
|
+
# from Orange.widgets.orangecontrib.AAIT.utils.tools import change_owcorpus
|
|
5
|
+
# else:
|
|
6
|
+
# from orangecontrib.AAIT.utils.tools import change_owcorpus
|
|
7
|
+
#
|
|
8
|
+
# # if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\","/"):
|
|
9
|
+
# # from Orange.widgets.orangecontrib.AAIT.utils import MetManagement
|
|
10
|
+
# # from Orange.widgets.orangecontrib.AAIT.utils.tools import (
|
|
11
|
+
# # change_owcorpus, concat_splitted_pypi)
|
|
12
|
+
# # else:
|
|
13
|
+
# # from orangecontrib.AAIT.utils import MetManagement
|
|
14
|
+
# # from orangecontrib.AAIT.utils.tools import (change_owcorpus,
|
|
15
|
+
# # concat_splitted_pypi)
|
|
16
|
+
#
|
|
17
|
+
# #concat_splitted_pypi.unzip_dependancy_if_needed(concat_splitted_pypi.get_path_of_OrangeDir()+"/../aait_store",concat_splitted_pypi.get_path_of_OrangeDir()+"/../aait_store/Parameters/requirements.json",concat_splitted_pypi.get_site_package_path()+"aait_store_cut-part_001/input/aait_store.zip.001",16)
|
|
18
|
+
# #concat_splitted_pypi.unzip_dependancy_if_needed(MetManagement.get_local_store_path()+"Models/NLP/all-mpnet-base-v2",MetManagement.get_local_store_path()+"Models/NLP/all-mpnet-base-v2/model.safetensors",concat_splitted_pypi.get_site_package_path()+"all-mpnet-base-v2-pypi-part_001/input/all-mpnet-base-v2.zip.001",5)
|
|
19
|
+
# #concat_splitted_pypi.unzip_dependancy_if_needed(concat_splitted_pypi.get_path_of_OrangeDir()+"/Lib/site-packages/forall/gpt4all",concat_splitted_pypi.get_path_of_OrangeDir()+"/Lib/site-packages/forall/gpt4all/bin/chat.exe",concat_splitted_pypi.get_site_package_path()+"gpt4all-pypi-part_001/input/gpt4all.zip.001",0)
|
|
20
|
+
# change_owcorpus.replace_owcorpus_file()
|