aait 2.2.2__tar.gz → 2.2.2.2__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 (273) hide show
  1. aait-2.2.2.2/PKG-INFO +28 -0
  2. aait-2.2.2.2/aait.egg-info/PKG-INFO +28 -0
  3. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/SOURCES.txt +3 -0
  4. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/process_documents.py +70 -99
  5. aait-2.2.2.2/orangecontrib/AAIT/widgets/OWKeywords.py +153 -0
  6. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +1 -1
  7. aait-2.2.2.2/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
  8. {aait-2.2.2 → aait-2.2.2.2}/setup.py +1 -1
  9. aait-2.2.2/PKG-INFO +0 -9
  10. aait-2.2.2/aait.egg-info/PKG-INFO +0 -9
  11. {aait-2.2.2 → aait-2.2.2.2}/License.txt +0 -0
  12. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/dependency_links.txt +0 -0
  13. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/entry_points.txt +0 -0
  14. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/namespace_packages.txt +0 -0
  15. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/requires.txt +0 -0
  16. {aait-2.2.2 → aait-2.2.2.2}/aait.egg-info/top_level.txt +0 -0
  17. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/__init__.py +0 -0
  18. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/SignalReceiver.py +0 -0
  19. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/__init__.py +0 -0
  20. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/audit_widget.py +0 -0
  21. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (2).TIF +0 -0
  22. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (3).TIF +0 -0
  23. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/00079473A - Copie (4).TIF +0 -0
  24. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0001.csv +0 -0
  25. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0002.csv +0 -0
  26. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dataTests/Tir 81mm_0003.csv +0 -0
  27. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/dynamic_results.py +0 -0
  28. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/test_all_widgets.py +0 -0
  29. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/test_server.py +0 -0
  30. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_4all.py +0 -0
  31. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_chunking.py +0 -0
  32. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_edit_table.py +0 -0
  33. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_mpnet_create_embeddings.py +0 -0
  34. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_optimisation.py +0 -0
  35. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_optimisationselection.py +0 -0
  36. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_powfactory.py +0 -0
  37. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_queryllm.py +0 -0
  38. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_spacy_md_fr_lemmatizer.py +0 -0
  39. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widget_traduction.py +0 -0
  40. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/audit_widget/widgets_model.py +0 -0
  41. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/encapsulation/__init__.py +0 -0
  42. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
  43. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
  44. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/MergeBaseLora.py +0 -0
  45. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/SERV_kill_workflow.py +0 -0
  46. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/SERV_requests.py +0 -0
  47. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/SERV_start_workflow.py +0 -0
  48. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/Tutorial_Finetuning.py +0 -0
  49. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/Tutorial_TestFinetuning.py +0 -0
  50. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/__init__.py +0 -0
  51. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/answers.py +0 -0
  52. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/chunking.py +0 -0
  53. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/embeddings.py +0 -0
  54. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/finetuning.py +0 -0
  55. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/functions_DatasetGeneration.py +0 -0
  56. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/functions_Finetuning.py +0 -0
  57. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/lemmes.py +0 -0
  58. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
  59. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/main_DatasetGeneration.py +0 -0
  60. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/main_Finetuning.py +0 -0
  61. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
  62. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/quickpy.py +0 -0
  63. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/test.py +0 -0
  64. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/test_functions.py +0 -0
  65. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/llm/translations.py +0 -0
  66. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
  67. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
  68. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/CheckMetaData.py +0 -0
  69. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/MetManagement.py +0 -0
  70. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/SimpleDialogQt.py +0 -0
  71. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/__init__.py +0 -0
  72. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
  73. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/check_data_in.py +0 -0
  74. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
  75. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/import_uic.py +0 -0
  76. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
  77. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/mac_utils.py +0 -0
  78. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
  79. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
  80. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
  81. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/thread_management.py +0 -0
  82. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
  83. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
  84. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
  85. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -0
  86. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
  87. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/utils/windows_utils.py +0 -0
  88. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
  89. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
  90. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
  91. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +0 -0
  92. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
  93. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
  94. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWConverseLLM.py +0 -0
  95. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
  96. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
  97. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
  98. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
  99. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
  100. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -0
  101. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
  102. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
  103. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWFileMetadata.py +0 -0
  104. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
  105. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWFileWithPath.py +0 -0
  106. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
  107. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
  108. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
  109. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
  110. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
  111. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWInputSelector.py +0 -0
  112. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
  113. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
  114. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
  115. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
  116. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
  117. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
  118. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
  119. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
  120. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
  121. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
  122. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
  123. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
  124. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
  125. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
  126. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
  127. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
  128. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
  129. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
  130. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
  131. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
  132. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
  133. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
  134. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
  135. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
  136. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
  137. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
  138. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
  139. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
  140. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
  141. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
  142. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
  143. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
  144. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
  145. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWTrigger.py +0 -0
  146. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
  147. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
  148. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/__init__.py +0 -0
  149. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
  150. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
  151. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
  152. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
  153. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
  154. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
  155. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
  156. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +0 -0
  157. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
  158. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
  159. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
  160. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
  161. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
  162. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
  163. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
  164. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
  165. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
  166. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
  167. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
  168. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
  169. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
  170. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
  171. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
  172. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
  173. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
  174. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
  175. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
  176. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
  177. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
  178. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
  179. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
  180. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
  181. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
  182. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
  183. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
  184. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
  185. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
  186. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
  187. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
  188. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
  189. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
  190. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
  191. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
  192. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
  193. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
  194. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
  195. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
  196. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
  197. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
  198. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
  199. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
  200. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
  201. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
  202. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
  203. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
  204. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
  205. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
  206. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
  207. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
  208. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
  209. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
  210. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
  211. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
  212. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
  213. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
  214. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
  215. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
  216. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
  217. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
  218. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
  219. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
  220. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
  221. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
  222. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
  223. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
  224. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
  225. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
  226. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
  227. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
  228. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
  229. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
  230. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
  231. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
  232. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
  233. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
  234. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
  235. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
  236. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
  237. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
  238. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
  239. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
  240. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
  241. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
  242. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
  243. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
  244. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
  245. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
  246. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
  247. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
  248. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
  249. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
  250. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
  251. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
  252. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
  253. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
  254. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
  255. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
  256. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
  257. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
  258. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
  259. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
  260. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
  261. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
  262. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
  263. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
  264. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
  265. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
  266. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
  267. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
  268. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
  269. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
  270. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
  271. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
  272. {aait-2.2.2 → aait-2.2.2.2}/orangecontrib/__init__.py +0 -0
  273. {aait-2.2.2 → aait-2.2.2.2}/setup.cfg +0 -0
aait-2.2.2.2/PKG-INFO ADDED
@@ -0,0 +1,28 @@
1
+ Metadata-Version: 2.1
2
+ Name: aait
3
+ Version: 2.2.2.2
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
10
+ Requires-Dist: torch
11
+ Requires-Dist: sentence-transformers==5.0.0
12
+ Requires-Dist: gpt4all[all]==2.8.2
13
+ Requires-Dist: sacremoses==0.1.1
14
+ Requires-Dist: transformers==4.51.3
15
+ Requires-Dist: sentencepiece==0.2.0
16
+ Requires-Dist: optuna
17
+ Requires-Dist: spacy==3.7.6
18
+ Requires-Dist: markdown
19
+ Requires-Dist: python-multipart
20
+ Requires-Dist: PyMuPDF==1.24.14
21
+ Requires-Dist: chonkie==0.4.1
22
+ Requires-Dist: GPUtil==1.4.0
23
+ Requires-Dist: unidecode==1.3.8
24
+ Requires-Dist: python-docx==1.1.2
25
+ Requires-Dist: psutil
26
+ Requires-Dist: thefuzz==0.22.1
27
+ Requires-Dist: beautifulsoup4==4.12.3
28
+ Requires-Dist: CATEGORIT
@@ -0,0 +1,28 @@
1
+ Metadata-Version: 2.1
2
+ Name: aait
3
+ Version: 2.2.2.2
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
10
+ Requires-Dist: torch
11
+ Requires-Dist: sentence-transformers==5.0.0
12
+ Requires-Dist: gpt4all[all]==2.8.2
13
+ Requires-Dist: sacremoses==0.1.1
14
+ Requires-Dist: transformers==4.51.3
15
+ Requires-Dist: sentencepiece==0.2.0
16
+ Requires-Dist: optuna
17
+ Requires-Dist: spacy==3.7.6
18
+ Requires-Dist: markdown
19
+ Requires-Dist: python-multipart
20
+ Requires-Dist: PyMuPDF==1.24.14
21
+ Requires-Dist: chonkie==0.4.1
22
+ Requires-Dist: GPUtil==1.4.0
23
+ Requires-Dist: unidecode==1.3.8
24
+ Requires-Dist: python-docx==1.1.2
25
+ Requires-Dist: psutil
26
+ Requires-Dist: thefuzz==0.22.1
27
+ Requires-Dist: beautifulsoup4==4.12.3
28
+ Requires-Dist: CATEGORIT
@@ -1,4 +1,5 @@
1
1
  License.txt
2
+ setup.cfg
2
3
  setup.py
3
4
  aait.egg-info/PKG-INFO
4
5
  aait.egg-info/SOURCES.txt
@@ -104,6 +105,7 @@ orangecontrib/AAIT/widgets/OWGenerateQuestions.py
104
105
  orangecontrib/AAIT/widgets/OWGenerateSynthesis.py
105
106
  orangecontrib/AAIT/widgets/OWGenerateWord.py
106
107
  orangecontrib/AAIT/widgets/OWInputSelector.py
108
+ orangecontrib/AAIT/widgets/OWKeywords.py
107
109
  orangecontrib/AAIT/widgets/OWKeywordsDetection.py
108
110
  orangecontrib/AAIT/widgets/OWLMStudio.py
109
111
  orangecontrib/AAIT/widgets/OWLanguageDetection.py
@@ -240,6 +242,7 @@ orangecontrib/AAIT/widgets/icons/owfilewithpath.svg
240
242
  orangecontrib/AAIT/widgets/icons/owfusion_nm.png
241
243
  orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg
242
244
  orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png
245
+ orangecontrib/AAIT/widgets/icons/owkeywords.png
243
246
  orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png
244
247
  orangecontrib/AAIT/widgets/icons/owlemmatizer.svg
245
248
  orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg
@@ -1,7 +1,6 @@
1
1
  import os
2
2
  import json
3
3
  import ntpath
4
- from pathlib import Path
5
4
 
6
5
  from Orange.data import Table, Domain, StringVariable
7
6
 
@@ -9,37 +8,31 @@ import fitz
9
8
  import docx
10
9
 
11
10
 
11
+
12
12
  def process_documents(dirpath):
13
- if dirpath is None or not Path(dirpath).exists():
13
+ if dirpath is None or not os.path.exists(dirpath):
14
14
  return None, None
15
15
 
16
- # Normalize dirpath
17
- dirpath = Path(dirpath).resolve()
18
-
19
16
  # get path from user selection
20
17
  embeddings = check_for_embeddings(dirpath)
18
+ dirpath = dirpath.replace("\\","/")
21
19
 
22
20
  # Set selected path in the saved embeddings
23
21
  if embeddings is not None:
24
- common_path = Path(find_common_root(embeddings)).resolve()
22
+ common_path = find_common_root(embeddings).replace("\\","/")
25
23
  for row in embeddings:
26
- row_path = Path(str(row["path"].value)).resolve()
27
- # Replace common root with the current dirpath
28
- try:
29
- row["path"] = str(dirpath / row_path.relative_to(common_path))
30
- except ValueError:
31
- # If relative_to fails (paths not matching), just normalize
32
- row["path"] = str(row_path)
24
+ row["path"] = row["path"].value.replace("\\","/").replace(common_path, dirpath)
33
25
 
34
26
  # Verify which files are already processed
35
27
  files_to_process = get_files_to_process(dirpath, embeddings)
36
28
 
37
29
  rows = []
38
30
  for file in files_to_process:
39
- file = Path(file).resolve()
40
- content = extract_text(str(file)) # extractor may expect string
41
- filename = file.name
42
- row = [str(file), filename, content] # store strings in Orange table
31
+ # Get the text content from the file
32
+ content = extract_text(file)
33
+ filename = ntpath.basename(file)
34
+ # Build a row containing dirpath | filename | content
35
+ row = [file, filename, content]
43
36
  rows.append(row)
44
37
 
45
38
  # Build a table with the constructed rows
@@ -51,115 +44,93 @@ def process_documents(dirpath):
51
44
  return out_data, embeddings
52
45
 
53
46
 
54
- def check_for_embeddings(folder_path):
55
- """
56
- Check for an embeddings.pkl file in a given folder. Return its content if it exists.
57
-
58
- Parameters:
59
- folder_path (str | Path): The path to the folder where embeddings.pkl may exist.
60
-
61
- Returns:
62
- Table or None: The content of embeddings.pkl, or None if not found.
63
- """
64
- folder_path = Path(folder_path).resolve()
65
-
66
- filepaths = [
67
- folder_path / "embeddings_question.pkl",
68
- folder_path / "embeddings.pkl"
69
- ]
70
-
71
- for filepath in filepaths:
72
- if filepath.exists():
73
- return Table.from_file(str(filepath)) # Table.from_file expects a str
74
- return None
75
-
76
-
77
47
  def find_common_root(data_table, column_name="path"):
78
48
  """Finds the common root path from a column of file paths in an Orange Data Table."""
79
- paths = [Path(str(row[column_name].value)).resolve()
80
- for row in data_table if row[column_name] is not None]
49
+ paths = [str(row[column_name]) for row in data_table if row[column_name] is not None]
81
50
  if not paths:
82
51
  return ""
83
- return str(Path(os.path.commonpath(paths)).resolve())
52
+ return os.path.commonpath(paths)
84
53
 
85
54
 
86
55
  def get_files_to_process(folder_path, table=None):
87
56
  """
88
- Finds all PDF/DOCX files in a folder (including subfolders) that are not already in the table
89
- or that have changed since last check (based on file size).
57
+ Finds all PDF files in a folder (including subfolders) that are not already in the table.
58
+ The comparison is based on "name" (relative path from the main folder) instead of full paths.
90
59
 
91
60
  :param folder_path: Path to the folder to scan for documents.
92
- :param table: Orange Data Table with column "path".
93
- :return: List of new/changed file paths.
61
+ :param table: Orange Data Table with columns "path", "name", and "content".
62
+ :return: List of paths to files not present in the table (by name, including subfolder structure).
94
63
  """
95
- supported_extensions = {".pdf", ".docx"}
64
+ #TODO
65
+ # Supported file extensions
66
+ supported_extensions = [".pdf", ".docx"]
96
67
 
97
- folder_path = Path(folder_path).resolve()
98
- filepath_sizes = folder_path / "sizes.json"
99
-
100
- print(filepath_sizes)
101
- print(filepath_sizes.exists())
102
-
103
- # Load previous file sizes
104
- if filepath_sizes.exists():
68
+ # Read the json containing file sizes
69
+ filepath_sizes = os.path.join(folder_path, "sizes.json")
70
+ if os.path.exists(filepath_sizes):
105
71
  with open(filepath_sizes, "r") as json_file:
106
- sizes = {Path(k): v for k, v in json.load(json_file).items()}
72
+ sizes = json.load(json_file)
107
73
  else:
108
- sizes = {}
74
+ sizes = dict()
109
75
 
110
- print(sizes)
111
-
112
- # Extract the existing paths from the Orange Data Table
76
+ # Extract the existing file names from the Orange Data Table
113
77
  if table:
114
- # Orange stores metas as strings turn them into Paths
115
- existing_paths = {Path(str(p)).resolve() for p in table[:, "path"].metas.flatten()}
78
+ existing_paths = set(table[:, "path"].metas.flatten()) # Extract names from the table
116
79
  else:
117
80
  existing_paths = set()
118
81
 
119
- new_files = []
120
-
121
- # Walk through the folder and subfolders
122
- for file in folder_path.rglob("*"):
123
- if file.suffix.lower() in supported_extensions:
124
- file = file.resolve()
125
- size = file.stat().st_size
126
-
127
- if file not in existing_paths:
128
- # New file
129
- new_files.append(str(file))
130
- sizes[Path(ntpath.basename(file))] = size
131
- else:
132
- # File already in table: check if size changed
133
- print("File: ", Path(ntpath.basename(file)))
134
- old_size = sizes.get(Path(ntpath.basename(file)))
135
- print(old_size)
136
- if old_size is None or old_size != size:
137
- new_files.append(str(file))
138
- table = remove_from_table(file, table)
139
- sizes[Path(ntpath.basename(file))] = size
140
82
 
141
-
142
- # Save updated sizes.json (keys must be strings for JSON)
83
+ # Walk through the folder and its subfolders
84
+ new_files = []
85
+ for root, _, files in os.walk(folder_path):
86
+ for file in files:
87
+ # Check if the file has a supported extension
88
+ if os.path.splitext(file)[1].lower() in supported_extensions:
89
+ # Add the file if it is not already in the table
90
+ filepath = os.path.join(root, file).replace("\\","/")
91
+ if filepath not in existing_paths:
92
+ new_files.append(filepath)
93
+ sizes[filepath] = os.path.getsize(filepath)
94
+ # If the file is in the table, verify if the file has been modified (comparing the size)
95
+ else:
96
+ new_size = os.path.getsize(filepath)
97
+ if filepath not in sizes.keys():
98
+ sizes[filepath] = new_size
99
+ else:
100
+ old_size = sizes[filepath]
101
+ if old_size != new_size:
102
+ new_files.append(filepath)
103
+ table = remove_from_table(filepath, table)
104
+ sizes[filepath] = new_size
143
105
  with open(filepath_sizes, "w") as json_file:
144
- json.dump({str(k): v for k, v in sizes.items()}, json_file, indent=4)
145
-
106
+ json.dump(sizes, json_file, indent=4)
146
107
  return new_files
147
108
 
148
109
 
149
110
  def remove_from_table(filepath, table):
111
+ filtered_table = Table.from_list(domain=table.domain,
112
+ rows=[row for row in table if row["path"].value != filepath])
113
+ return filtered_table
114
+
115
+
116
+ def check_for_embeddings(folder_path):
150
117
  """
151
- Remove rows from the Orange table where 'path' matches the given filepath.
118
+ Check for an embeddings.pkl file in a given folder. Return its content if it exists.
119
+
120
+ Parameters:
121
+ folder_path (str): The path to the folder where embeddings.pkl may exist.
122
+
123
+ Returns:
124
+ Table or None: The content of embeddings.pkl.
152
125
  """
153
- filepath = Path(filepath).resolve()
154
-
155
- filtered_table = Table.from_list(
156
- domain=table.domain,
157
- rows=[
158
- row for row in table
159
- if Path(str(row["path"].value)).resolve() != filepath
160
- ]
161
- )
162
- return filtered_table
126
+ filepaths = [os.path.join(folder_path, "embeddings_question.pkl"),
127
+ os.path.join(folder_path, "embeddings.pkl")]
128
+ for filepath in filepaths:
129
+ if os.path.exists(filepath):
130
+ data = Table.from_file(filepath)
131
+ return data
132
+ else:
133
+ return None
163
134
 
164
135
 
165
136
  def extract_text(filepath):
@@ -0,0 +1,153 @@
1
+ import os
2
+ import sys
3
+
4
+ from Orange.widgets import widget
5
+ from Orange.widgets.utils.signals import Input, Output
6
+ from Orange.data import Table, Domain, ContinuousVariable
7
+ from thefuzz import fuzz
8
+ from AnyQt.QtWidgets import QApplication
9
+ from AnyQt.QtCore import QObject, QThread, pyqtSignal
10
+
11
+ # Import intelligent selon contexte
12
+ if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
13
+ from Orange.widgets.orangecontrib.AAIT.utils.import_uic import uic
14
+ from Orange.widgets.orangecontrib.AAIT.utils.initialize_from_ini import apply_modification_from_python_file
15
+ else:
16
+ from orangecontrib.AAIT.utils.import_uic import uic
17
+ from orangecontrib.AAIT.utils.initialize_from_ini import apply_modification_from_python_file
18
+
19
+ # Worker pour exécution asynchrone
20
+ class KeywordWorker(QObject):
21
+ finished = pyqtSignal(Table)
22
+ error = pyqtSignal(str)
23
+
24
+ def __init__(self, data, keywords, threshold=80):
25
+ super().__init__()
26
+ self.data = data
27
+ self.keywords = keywords
28
+ self.threshold = threshold
29
+
30
+ def extract_matched_keywords(self, text, keywords):
31
+ words = text.split(" ")
32
+ matched_keywords = []
33
+ for keyword in keywords:
34
+ best_score = max(fuzz.ratio(word.lower(), keyword.lower()) for word in words)
35
+ if best_score >= self.threshold:
36
+ matched_keywords.append(keyword)
37
+ return matched_keywords
38
+
39
+ def run(self):
40
+ try:
41
+ if "Content" not in self.data.domain or "Keywords" not in self.keywords.domain:
42
+ self.error.emit("Missing 'Content' or 'Keywords' column")
43
+ return
44
+
45
+ keyword_list = [
46
+ str(row["Keywords"])
47
+ for row in self.keywords
48
+ if str(row["Keywords"]).strip() != ""
49
+ ]
50
+
51
+ new_metas_vars = list(self.data.domain.metas)
52
+ if not any(var.name == "Keywords" for var in new_metas_vars):
53
+ new_metas_vars.append(ContinuousVariable("Keywords"))
54
+
55
+ new_domain = Domain(
56
+ self.data.domain.attributes,
57
+ self.data.domain.class_vars,
58
+ new_metas_vars
59
+ )
60
+
61
+ new_metas = []
62
+ for row in self.data:
63
+ text = str(row["Content"])
64
+ matched_keywords = self.extract_matched_keywords(text, keyword_list)
65
+ score = (
66
+ sum(fuzz.ratio(word.lower(), kw.lower()) for kw in matched_keywords for word in text.split())
67
+ / len(keyword_list)
68
+ if matched_keywords else 0.0
69
+ )
70
+ new_metas.append(list(row.metas) + [score])
71
+
72
+ out_data = Table(new_domain, self.data.X, self.data.Y, new_metas)
73
+ self.finished.emit(out_data)
74
+
75
+ except Exception as e:
76
+ self.error.emit(str(e))
77
+
78
+ # Définition du widget principal
79
+ @apply_modification_from_python_file(filepath_original_widget=__file__)
80
+ class OWKeywords(widget.OWWidget):
81
+ name = "Keywords Detection"
82
+ description = "Give the amount of keywords from in_object in in_data"
83
+ icon = "icons/keywords.png"
84
+ category = "AAIT - LLM INTEGRATION"
85
+ if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
86
+ icon = "icons_dev/keywords.png"
87
+ gui = os.path.join(os.path.dirname(os.path.abspath(__file__)), "designer/owkeyword.ui")
88
+ want_control_area = False
89
+ priority = 1050
90
+
91
+ class Inputs:
92
+ data = Input("Content", Table)
93
+ keywords = Input("Keywords", Table)
94
+
95
+ class Outputs:
96
+ data = Output("Keywords per Content", Table)
97
+
98
+ def __init__(self):
99
+ super().__init__()
100
+ self.data = None
101
+ self.keywords = None
102
+ self.setFixedWidth(470)
103
+ self.setFixedHeight(300)
104
+ uic.loadUi(self.gui, self)
105
+ self.autorun = True
106
+ self.thread = None
107
+ self.worker = None
108
+
109
+ @Inputs.data
110
+ def set_data(self, in_data):
111
+ self.data = in_data
112
+ if self.autorun and self.keywords:
113
+ self.process()
114
+
115
+ @Inputs.keywords
116
+ def set_keywords(self, in_keywords):
117
+ self.keywords = in_keywords
118
+ if self.autorun and self.data:
119
+ self.process()
120
+
121
+ def process(self):
122
+ if self.data is None or self.keywords is None:
123
+ self.Outputs.data.send(None)
124
+ return
125
+
126
+ self.error("") # Clear errors
127
+ self.thread = QThread()
128
+ self.worker = KeywordWorker(self.data, self.keywords)
129
+ self.worker.moveToThread(self.thread)
130
+
131
+ self.thread.started.connect(self.worker.run)
132
+ self.worker.finished.connect(self.on_worker_finished)
133
+ self.worker.error.connect(self.on_worker_error)
134
+ self.worker.finished.connect(self.thread.quit)
135
+ self.worker.finished.connect(self.worker.deleteLater)
136
+ self.thread.finished.connect(self.thread.deleteLater)
137
+
138
+ self.thread.start()
139
+
140
+ def on_worker_finished(self, out_data):
141
+ print("[INFO] Thread finished. Output ready.")
142
+ self.Outputs.data.send(out_data)
143
+
144
+ def on_worker_error(self, message):
145
+ print(f"[ERROR] Worker error: {message}")
146
+ self.error(message)
147
+
148
+
149
+ if __name__ == "__main__":
150
+ app = QApplication(sys.argv)
151
+ ow = OWKeywords()
152
+ ow.show()
153
+ app.exec_()
@@ -35,7 +35,7 @@
35
35
  </rect>
36
36
  </property>
37
37
  <property name="text">
38
- <string>The input Data must contain a column &quot;content&quot;. The input Keywords must contain a column &quot;keywords&quot;. This widget will count the number of keywords that occur in the content with a fuzzy matching (percentage based on small variations).</string>
38
+ <string>The input Data must contain a column &quot;Content&quot;. The input Keywords must contain a column &quot;Keywords&quot;. This widget will count the number of keywords that occur in the content with a fuzzy matching (percentage based on small variations).</string>
39
39
  </property>
40
40
  <property name="textFormat">
41
41
  <enum>Qt::AutoText</enum>
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
4
4
  NAME = "aait"
5
5
 
6
6
  # Version du package PyPI
7
- VERSION = "2.2.2" # la version doit être supérieure à la précédente sinon la publication sera refusée
7
+ VERSION = "2.2.2.2" # la version doit être supérieure à la précédente sinon la publication sera refusée
8
8
 
9
9
  # Facultatif / Adaptable à souhait
10
10
  AUTHOR = "Orange community"
aait-2.2.2/PKG-INFO DELETED
@@ -1,9 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: aait
3
- Version: 2.2.2
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,9 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: aait
3
- Version: 2.2.2
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
File without changes
File without changes
File without changes