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.
Files changed (272) hide show
  1. aait-2.3.8/PKG-INFO +9 -0
  2. aait-2.3.8/aait.egg-info/PKG-INFO +9 -0
  3. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/SOURCES.txt +1 -2
  4. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/__init__.py +7 -3
  5. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/MetManagement.py +9 -2
  6. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/SimpleDialogQt.py +1 -3
  7. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/base_widget.py +1 -4
  8. aait-2.3.8/orangecontrib/AAIT/utils/mac_utils.py +474 -0
  9. aait-2.3.8/orangecontrib/AAIT/utils/tools/first_time_check.py +20 -0
  10. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/windows_utils.py +53 -98
  11. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +2 -2
  12. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -9
  13. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileMetadata.py +2 -0
  14. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWInputSelector.py +18 -7
  15. aait-2.2.7.2/orangecontrib/AAIT/widgets/OWEdgeLLM.py → aait-2.3.8/orangecontrib/AAIT/widgets/OWLLMEngine.py +1 -1
  16. {aait-2.2.7.2 → aait-2.3.8}/setup.py +1 -1
  17. aait-2.2.7.2/PKG-INFO +0 -28
  18. aait-2.2.7.2/aait.egg-info/PKG-INFO +0 -28
  19. aait-2.2.7.2/orangecontrib/AAIT/utils/mac_utils.py +0 -102
  20. aait-2.2.7.2/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -14
  21. {aait-2.2.7.2 → aait-2.3.8}/License.txt +0 -0
  22. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/dependency_links.txt +0 -0
  23. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/entry_points.txt +0 -0
  24. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/namespace_packages.txt +0 -0
  25. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/requires.txt +0 -0
  26. {aait-2.2.7.2 → aait-2.3.8}/aait.egg-info/top_level.txt +0 -0
  27. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
  28. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
  29. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/MergeBaseLora.py +0 -0
  30. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_kill_workflow.py +0 -0
  31. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_requests.py +0 -0
  32. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/SERV_start_workflow.py +0 -0
  33. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/Tutorial_Finetuning.py +0 -0
  34. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/Tutorial_TestFinetuning.py +0 -0
  35. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/__init__.py +0 -0
  36. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/answers.py +0 -0
  37. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/answers_llama.py +0 -0
  38. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/chunking.py +0 -0
  39. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/embeddings.py +0 -0
  40. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/finetuning.py +0 -0
  41. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/functions_DatasetGeneration.py +0 -0
  42. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/functions_Finetuning.py +0 -0
  43. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/lemmes.py +0 -0
  44. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
  45. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/main_DatasetGeneration.py +0 -0
  46. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/main_Finetuning.py +0 -0
  47. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/process_documents.py +0 -0
  48. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
  49. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/quickpy.py +0 -0
  50. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/test.py +0 -0
  51. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/test_functions.py +0 -0
  52. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/llm/translations.py +0 -0
  53. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
  54. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
  55. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/OperationSystem.py +0 -0
  56. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/__init__.py +0 -0
  57. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
  58. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/aait_table_viewer.py +0 -0
  59. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
  60. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/import_uic.py +0 -0
  61. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
  62. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
  63. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
  64. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
  65. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/thread_management.py +0 -0
  66. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
  67. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
  68. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
  69. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
  70. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
  71. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAccumulator.py +0 -0
  72. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
  73. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
  74. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
  75. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
  76. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWConverseLLM.py +0 -0
  77. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
  78. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
  79. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
  80. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
  81. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
  82. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
  83. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
  84. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
  85. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFileWithPath.py +0 -0
  86. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
  87. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
  88. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
  89. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
  90. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
  91. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWKeywords.py +0 -0
  92. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
  93. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
  94. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
  95. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
  96. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
  97. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
  98. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
  99. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
  100. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
  101. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
  102. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
  103. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
  104. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
  105. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
  106. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
  107. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
  108. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
  109. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
  110. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
  111. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
  112. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
  113. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOperationSystem.py +0 -0
  114. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
  115. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
  116. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
  117. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
  118. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
  119. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
  120. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
  121. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
  122. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
  123. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
  124. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWSortAndSelect.py +0 -0
  125. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
  126. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
  127. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
  128. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWTrigger.py +0 -0
  129. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
  130. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
  131. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/__init__.py +0 -0
  132. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
  133. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_OperationSystem.ui +0 -0
  134. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
  135. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
  136. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +0 -0
  137. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
  138. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
  139. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owchunkanalysis.ui +0 -0
  140. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
  141. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
  142. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +0 -0
  143. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owedgellm.ui +0 -0
  144. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
  145. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
  146. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
  147. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
  148. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +0 -0
  149. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
  150. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
  151. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
  152. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
  153. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
  154. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
  155. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
  156. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
  157. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
  158. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
  159. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
  160. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
  161. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
  162. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
  163. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owllm4all.ui +0 -0
  164. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
  165. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
  166. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
  167. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
  168. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
  169. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
  170. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
  171. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
  172. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
  173. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
  174. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
  175. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
  176. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
  177. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
  178. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
  179. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
  180. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
  181. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
  182. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
  183. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
  184. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
  185. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
  186. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
  187. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
  188. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
  189. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
  190. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owsortandselect.ui +0 -0
  191. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
  192. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
  193. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
  194. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
  195. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
  196. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
  197. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
  198. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
  199. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
  200. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
  201. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/chunking_analysis.png +0 -0
  202. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
  203. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
  204. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
  205. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
  206. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/edge_llm.svg +0 -0
  207. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
  208. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
  209. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
  210. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
  211. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
  212. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
  213. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
  214. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
  215. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
  216. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
  217. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
  218. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
  219. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
  220. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
  221. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
  222. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/operationSystem.png +0 -0
  223. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
  224. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
  225. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
  226. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
  227. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
  228. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
  229. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
  230. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
  231. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
  232. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
  233. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
  234. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
  235. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
  236. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
  237. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
  238. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
  239. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
  240. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
  241. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
  242. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
  243. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
  244. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
  245. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
  246. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
  247. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
  248. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
  249. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
  250. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
  251. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
  252. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
  253. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
  254. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
  255. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
  256. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
  257. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
  258. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
  259. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
  260. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +0 -0
  261. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
  262. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
  263. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
  264. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
  265. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
  266. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
  267. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
  268. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
  269. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
  270. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
  271. {aait-2.2.7.2 → aait-2.3.8}/orangecontrib/__init__.py +0 -0
  272. {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 first_time_check # ignore pyflakes alert
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
- from orangecontrib.AAIT.utils.tools import first_time_check # ignore pyflakes alert
27
- from orangecontrib.AAIT.utils import MetManagement
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
- app = QApplication(sys.argv) if not QApplication.instance() else QApplication.instance()
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()