aait 2.3.14.2__tar.gz → 2.3.15.1__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 (274) hide show
  1. {aait-2.3.14.2 → aait-2.3.15.1}/PKG-INFO +1 -1
  2. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/PKG-INFO +1 -1
  3. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/SOURCES.txt +0 -1
  4. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/answers_llama.py +78 -7
  5. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/MetManagement.py +1 -1
  6. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/windows_utils.py +41 -69
  7. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWAutoShowCreateInstance.py +16 -16
  8. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWAutoShowTable.py +16 -16
  9. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWConverseLLM.py +87 -16
  10. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWFileWithPath.py +10 -9
  11. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLLMEngine.py +4 -2
  12. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWTrigger.py +1 -1
  13. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +105 -29
  14. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owedgellm.ui +12 -0
  15. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owgetpages.ui +3 -3
  16. {aait-2.3.14.2 → aait-2.3.15.1}/setup.py +1 -1
  17. aait-2.3.14.2/orangecontrib/AAIT/widgets/OWSplitExcelSheets.py +0 -216
  18. {aait-2.3.14.2 → aait-2.3.15.1}/License.txt +0 -0
  19. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/dependency_links.txt +0 -0
  20. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/entry_points.txt +0 -0
  21. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/namespace_packages.txt +0 -0
  22. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/requires.txt +0 -0
  23. {aait-2.3.14.2 → aait-2.3.15.1}/aait.egg-info/top_level.txt +0 -0
  24. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/__init__.py +0 -0
  25. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
  26. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
  27. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/__init__.py +0 -0
  28. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/answers.py +0 -0
  29. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/chunking.py +0 -0
  30. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/embeddings.py +0 -0
  31. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/lemmes.py +0 -0
  32. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
  33. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/process_documents.py +0 -0
  34. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
  35. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/llm/translations.py +0 -0
  36. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
  37. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
  38. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/OperationSystem.py +0 -0
  39. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/SimpleDialogQt.py +0 -0
  40. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/__init__.py +0 -0
  41. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
  42. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/aait_table_viewer.py +0 -0
  43. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/base_widget.py +0 -0
  44. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
  45. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/import_uic.py +0 -0
  46. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
  47. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/mac_utils.py +0 -0
  48. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
  49. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
  50. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
  51. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/thread_management.py +0 -0
  52. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
  53. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
  54. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
  55. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -0
  56. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
  57. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/unlink_table_domain.py +0 -0
  58. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/utils/widget_positioning.py +0 -0
  59. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
  60. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWAccumulator.py +0 -0
  61. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
  62. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
  63. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +0 -0
  64. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
  65. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
  66. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
  67. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
  68. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
  69. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
  70. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
  71. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -0
  72. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
  73. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
  74. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWFileMetadata.py +0 -0
  75. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
  76. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
  77. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
  78. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
  79. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
  80. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
  81. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWGetPages.py +0 -0
  82. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWInputSelector.py +0 -0
  83. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWKeywords.py +0 -0
  84. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
  85. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
  86. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
  87. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLargeLanguageModel.py +0 -0
  88. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
  89. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
  90. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
  91. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Embeddings.py +0 -0
  92. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
  93. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
  94. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
  95. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
  96. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
  97. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
  98. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
  99. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
  100. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
  101. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
  102. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
  103. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
  104. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
  105. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
  106. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
  107. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWOperationSystem.py +0 -0
  108. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
  109. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
  110. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
  111. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
  112. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWQuadrantclicker.py +0 -0
  113. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
  114. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
  115. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
  116. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
  117. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
  118. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
  119. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWSortAndSelect.py +0 -0
  120. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
  121. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
  122. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
  123. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
  124. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
  125. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/__init__.py +0 -0
  126. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
  127. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/ow_OperationSystem.ui +0 -0
  128. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
  129. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
  130. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +0 -0
  131. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
  132. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
  133. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
  134. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
  135. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
  136. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
  137. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
  138. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
  139. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +0 -0
  140. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
  141. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
  142. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
  143. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
  144. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
  145. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
  146. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
  147. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
  148. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
  149. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
  150. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
  151. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
  152. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
  153. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owlargelanguagemodel.ui +0 -0
  154. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
  155. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owllm4all.ui +0 -0
  156. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
  157. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
  158. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
  159. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_embeddings.ui +0 -0
  160. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
  161. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
  162. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
  163. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
  164. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
  165. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
  166. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
  167. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
  168. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
  169. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
  170. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
  171. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
  172. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
  173. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
  174. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
  175. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
  176. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
  177. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
  178. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owquadrant_clicker.ui +0 -0
  179. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
  180. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
  181. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
  182. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
  183. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
  184. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owsortandselect.ui +0 -0
  185. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owsplitexcelsheets.ui +0 -0
  186. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
  187. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
  188. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
  189. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
  190. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
  191. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
  192. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/CreateInstance.svg +0 -0
  193. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
  194. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
  195. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/Table.svg +0 -0
  196. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
  197. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/blue_down_arrow.svg +0 -0
  198. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/book.png +0 -0
  199. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
  200. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
  201. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
  202. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
  203. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
  204. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/edge_llm.svg +0 -0
  205. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
  206. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
  207. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/green_check.svg +0 -0
  208. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
  209. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
  210. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
  211. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
  212. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
  213. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
  214. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
  215. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
  216. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
  217. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
  218. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
  219. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
  220. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
  221. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/operationSystem.png +0 -0
  222. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
  223. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
  224. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
  225. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
  226. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
  227. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
  228. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
  229. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
  230. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
  231. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
  232. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
  233. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
  234. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
  235. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
  236. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
  237. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
  238. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
  239. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
  240. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
  241. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
  242. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
  243. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
  244. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owlargelanguagemodel.svg +0 -0
  245. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
  246. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
  247. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
  248. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_embeddings.svg +0 -0
  249. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
  250. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
  251. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
  252. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
  253. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
  254. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
  255. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
  256. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
  257. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
  258. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
  259. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
  260. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
  261. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +0 -0
  262. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
  263. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
  264. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
  265. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
  266. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/quadrantclicker.svg +0 -0
  267. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
  268. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
  269. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
  270. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
  271. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
  272. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
  273. {aait-2.3.14.2 → aait-2.3.15.1}/orangecontrib/__init__.py +0 -0
  274. {aait-2.3.14.2 → aait-2.3.15.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aait
3
- Version: 2.3.14.2
3
+ Version: 2.3.15.1
4
4
  Summary: Advanced Artificial Intelligence Tools is a package meant to develop and enable advanced AI functionalities in Orange
5
5
  Home-page:
6
6
  Author: Orange community
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aait
3
- Version: 2.3.14.2
3
+ Version: 2.3.15.1
4
4
  Summary: Advanced Artificial Intelligence Tools is a package meant to develop and enable advanced AI functionalities in Orange
5
5
  Home-page:
6
6
  Author: Orange community
@@ -112,7 +112,6 @@ orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py
112
112
  orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py
113
113
  orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py
114
114
  orangecontrib/AAIT/widgets/OWSortAndSelect.py
115
- orangecontrib/AAIT/widgets/OWSplitExcelSheets.py
116
115
  orangecontrib/AAIT/widgets/OWStartLoop.py
117
116
  orangecontrib/AAIT/widgets/OWTable2Corpus.py
118
117
  orangecontrib/AAIT/widgets/OWTranslation.py
@@ -413,7 +413,16 @@ def generate_conversation(table, model, conversation=None, n_ctx=32768, query_pa
413
413
  conversation.append({"role": "user", "content": user_prompt})
414
414
 
415
415
  # Generate the answer
416
- answer = run_query(prompt, model=model, argself=argself, workflow_id=workflow_id, progress_callback=progress_callback)
416
+ answer = run_query(prompt,
417
+ model=model,
418
+ max_tokens=query_parameters["max_tokens"],
419
+ temperature=query_parameters["temperature"],
420
+ top_p=query_parameters["top_p"],
421
+ top_k=query_parameters["top_k"],
422
+ repeat_penalty=query_parameters["repeat_penalty"],
423
+ workflow_id=workflow_id,
424
+ argself=argself,
425
+ progress_callback=progress_callback)
417
426
 
418
427
  # Split the thinking block and remove it from the answer
419
428
  think_text, final_answer = split_think(answer=answer)
@@ -511,6 +520,9 @@ def run_Qwen3VL_query(query, image_paths, model, system_prompt=" ", progress_cal
511
520
  image_messages = []
512
521
  for image_path in image_paths:
513
522
  data_uri = convert_to_uri(image_path)
523
+ if not data_uri.startswith("data"):
524
+ progress_callback(("error", data_uri))
525
+ return "The image could not be processed"
514
526
  image_messages.append({"type": "image_url", "image_url": {"url": data_uri}})
515
527
  image_messages.append({"type": "text", "text": query})
516
528
 
@@ -533,11 +545,70 @@ def run_Qwen3VL_query(query, image_paths, model, system_prompt=" ", progress_cal
533
545
 
534
546
 
535
547
 
536
- def convert_to_uri(image_path):
537
- with open(image_path, "rb") as f:
538
- image_bytes = f.read()
539
- b64_data = base64.b64encode(image_bytes).decode("utf-8")
540
- data_uri = f"data:image/png;base64,{b64_data}"
541
- return data_uri
548
+ _IMAGE_MIME_TYPES = {
549
+ # Most common formats
550
+ '.png': 'image/png',
551
+ '.jpg': 'image/jpeg',
552
+ '.jpeg': 'image/jpeg',
553
+ '.gif': 'image/gif',
554
+ '.webp': 'image/webp',
555
+ '.svg': 'image/svg+xml',
556
+ '.svgz': 'image/svg+xml',
557
+
558
+ # Next-generation formats
559
+ '.avif': 'image/avif',
560
+ '.heic': 'image/heic',
561
+ '.heif': 'image/heif',
562
+ '.heics': 'image/heic-sequence',
563
+ '.heifs': 'image/heif-sequence',
564
+
565
+ # Legacy / Windows formats
566
+ '.bmp': 'image/bmp',
567
+ '.dib': 'image/bmp',
568
+ '.ico': 'image/x-icon',
569
+ '.cur': 'image/x-icon',
570
+
571
+ # Professional imaging
572
+ '.tif': 'image/tiff',
573
+ '.tiff': 'image/tiff',
574
+ }
575
+
576
+ def convert_to_uri(
577
+ file_path: str,
578
+ fallback_mime: str = "image/png" #"application/octet-stream"
579
+ ) -> str:
580
+ """
581
+ Convert a local image file to a base64-encoded data URI with the correct MIME type.
582
+
583
+ Supports 20+ image formats (PNG, JPEG, WebP, AVIF, HEIC, SVG, BMP, ICO, TIFF, etc.).
584
+
585
+ Args:
586
+ file_path: Path to the image file on disk.
587
+ fallback_mime: MIME type used when the file extension is unknown.
588
+
589
+ Returns:
590
+ A valid data URI string (e.g., data:image/webp;base64,...).
591
+
592
+ Raises:
593
+ FileNotFoundError: If the file does not exist.
594
+ OSError: If reading the file fails.
595
+ """
596
+ if not os.path.isfile(file_path):
597
+ return f"Image file not found: {file_path}"
598
+
599
+ extension = os.path.splitext(file_path)[1].lower()
600
+ mime_type = _IMAGE_MIME_TYPES.get(extension, fallback_mime)
601
+
602
+ if mime_type == fallback_mime:
603
+ print(f"Warning: Unknown extension '{extension}' for '{file_path}'. "
604
+ f"Using fallback MIME type: {fallback_mime}")
605
+
606
+ try:
607
+ with open(file_path, "rb") as img_file:
608
+ encoded_data = base64.b64encode(img_file.read()).decode("utf-8")
609
+ except Exception as e:
610
+ return f"Failed to read image file '{file_path}': {e}"
611
+
612
+ return f"data:{mime_type};base64,{encoded_data}"
542
613
 
543
614
 
@@ -1366,7 +1366,7 @@ def get_path_mailFolder():
1366
1366
 
1367
1367
  def get_secret_content_dir():
1368
1368
  aait_path = get_local_store_path()
1369
- the_path=aait_path+"/keys/"
1369
+ the_path=aait_path+"keys/"
1370
1370
  if not os.path.exists(the_path):
1371
1371
  os.makedirs(the_path)
1372
1372
  return the_path
@@ -154,54 +154,51 @@ if os.name=='nt':
154
154
  import ctypes
155
155
  import ctypes.wintypes
156
156
 
157
+ # --- Déclarer UNE SEULE FOIS au niveau module (pas dans la fonction) ---
158
+ user32 = ctypes.windll.user32
159
+ comdlg32 = ctypes.windll.comdlg32
157
160
 
158
- def select_file_ctypes(multi_select=False, file_filter="All Files (*.*)", dialog_title="Select File(s)"):
159
- """
160
- Opens a native Windows file selection dialog with enforced modal-like behavior.
161
+ EnumWindowsProc = ctypes.WINFUNCTYPE(wt.BOOL, wt.HWND, wt.LPARAM)
161
162
 
162
- Args:
163
- multi_select (bool): Allow selection of multiple files if True.
164
- file_filter (str): File type filters, e.g., "Images (*.jpg;*.png;*.jpeg)" or "Documents (*.docx;*.doc)".
163
+ # Définir la signature de EnumWindows UNE SEULE FOIS
164
+ user32.EnumWindows.argtypes = (EnumWindowsProc, wt.LPARAM)
165
+ user32.EnumWindows.restype = wt.BOOL
165
166
 
166
- Returns:
167
- str: Selected file path(s) separated by ';', or an empty string if no selection was made.
168
- """
167
+
168
+ def select_file_ctypes(multi_select=False, file_filter="All Files (*.*)", dialog_title="Select File(s)"):
169
169
  OFN_ALLOWMULTISELECT = 0x00000200
170
170
  OFN_EXPLORER = 0x00080000
171
171
  OFN_FILEMUSTEXIST = 0x00001000
172
- MAX_PATH = 65536 # Large enough for multiple files
172
+ MAX_PATH = 65536
173
173
 
174
174
  class OPENFILENAME(ctypes.Structure):
175
175
  _fields_ = [
176
- ("lStructSize", ctypes.wintypes.DWORD),
177
- ("hwndOwner", ctypes.wintypes.HWND),
178
- ("hInstance", ctypes.wintypes.HINSTANCE),
176
+ ("lStructSize", wt.DWORD),
177
+ ("hwndOwner", wt.HWND),
178
+ ("hInstance", wt.HINSTANCE),
179
179
  ("lpstrFilter", ctypes.c_wchar_p),
180
180
  ("lpstrCustomFilter", ctypes.c_wchar_p),
181
- ("nMaxCustFilter", ctypes.wintypes.DWORD),
182
- ("nFilterIndex", ctypes.wintypes.DWORD),
181
+ ("nMaxCustFilter", wt.DWORD),
182
+ ("nFilterIndex", wt.DWORD),
183
183
  ("lpstrFile", ctypes.c_wchar_p),
184
- ("nMaxFile", ctypes.wintypes.DWORD),
184
+ ("nMaxFile", wt.DWORD),
185
185
  ("lpstrFileTitle", ctypes.c_wchar_p),
186
- ("nMaxFileTitle", ctypes.wintypes.DWORD),
186
+ ("nMaxFileTitle", wt.DWORD),
187
187
  ("lpstrInitialDir", ctypes.c_wchar_p),
188
188
  ("lpstrTitle", ctypes.c_wchar_p),
189
- ("Flags", ctypes.wintypes.DWORD),
190
- ("nFileOffset", ctypes.wintypes.WORD),
191
- ("nFileExtension", ctypes.wintypes.WORD),
189
+ ("Flags", wt.DWORD),
190
+ ("nFileOffset", wt.WORD),
191
+ ("nFileExtension", wt.WORD),
192
192
  ("lpstrDefExt", ctypes.c_wchar_p),
193
- ("lCustData", ctypes.wintypes.LPARAM),
193
+ ("lCustData", wt.LPARAM),
194
194
  ("lpfnHook", ctypes.c_void_p),
195
195
  ("lpTemplateName", ctypes.c_wchar_p),
196
196
  ("pvReserved", ctypes.c_void_p),
197
- ("dwReserved", ctypes.wintypes.DWORD),
198
- ("FlagsEx", ctypes.wintypes.DWORD),
197
+ ("dwReserved", wt.DWORD),
198
+ ("FlagsEx", wt.DWORD),
199
199
  ]
200
200
 
201
- user32 = ctypes.windll.user32
202
- comdlg32 = ctypes.windll.comdlg32
203
-
204
- # Create filter string (must be null-separated and end with double null)
201
+ # Filter string Windows: \0 séparateurs + double \0 final
205
202
  if "(" in file_filter and ")" in file_filter:
206
203
  description = file_filter.split("(")[0].strip()
207
204
  pattern = file_filter[file_filter.find("(") + 1:file_filter.find(")")]
@@ -210,7 +207,6 @@ if os.name=='nt':
210
207
  pattern = "*.*"
211
208
  filter_combined = f"{description}\0{pattern}\0All Files\0*.*\0\0"
212
209
 
213
- # Prepare buffer
214
210
  file_buffer = ctypes.create_unicode_buffer(MAX_PATH)
215
211
 
216
212
  ofn = OPENFILENAME()
@@ -224,68 +220,44 @@ if os.name=='nt':
224
220
  if multi_select:
225
221
  ofn.Flags |= OFN_ALLOWMULTISELECT
226
222
 
227
- # Avant ouvrir, mémoriser fenêtres existantes
223
+ # --- Avant ouverture : liste des HWND ---
228
224
  hwnd_list_before = []
229
225
 
230
- def enum_windows_proc(hwnd, lParam):
226
+ def _enum_before(hwnd, lParam):
231
227
  hwnd_list_before.append(hwnd)
232
228
  return True
233
229
 
234
- EnumWindows = user32.EnumWindows
235
- EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.wintypes.BOOL, ctypes.wintypes.HWND, ctypes.wintypes.LPARAM)
236
- EnumWindows(EnumWindowsProc(enum_windows_proc), 0)
230
+ cb_before = EnumWindowsProc(_enum_before) # garder une référence !
231
+ user32.EnumWindows(cb_before, 0)
237
232
 
238
- # Ouvre la boîte de sélection
233
+ # --- Ouvre la boîte ---
239
234
  if not comdlg32.GetOpenFileNameW(ctypes.byref(ofn)):
240
- return "" # Cancelled
235
+ return ""
241
236
 
242
237
  time.sleep(0.1)
243
238
 
244
- # Après ouverture
239
+ # --- Après ouverture : liste des HWND ---
245
240
  hwnd_list_after = []
246
- EnumWindows(EnumWindowsProc(lambda hwnd, lParam: hwnd_list_after.append(hwnd) or True), 0)
247
241
 
248
- new_hwnds = list(set(hwnd_list_after) - set(hwnd_list_before))
249
-
250
- selector_hwnd = None
251
- target_phrase = (dialog_title or "Select").lower()
252
- for hwnd in new_hwnds:
253
- length = user32.GetWindowTextLengthW(hwnd)
254
- if length > 0:
255
- window_title = ctypes.create_unicode_buffer(length + 1)
256
- user32.GetWindowTextW(hwnd, window_title, length + 1)
257
- if target_phrase in window_title.value.lower():
258
- selector_hwnd = hwnd
259
- break
242
+ def _enum_after(hwnd, lParam):
243
+ hwnd_list_after.append(hwnd)
244
+ return True
260
245
 
261
- def enforce_modal(hwnd):
262
- if not hwnd:
263
- return
264
- while user32.IsWindow(hwnd):
265
- user32.SetForegroundWindow(hwnd)
266
- user32.SetWindowPos(hwnd, -1, 0, 0, 0, 0,
267
- 0x0002 | 0x0001 | 0x0040) # SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW
268
- time.sleep(0.2)
246
+ cb_after = EnumWindowsProc(_enum_after) # garder une référence !
247
+ user32.EnumWindows(cb_after, 0)
269
248
 
270
- if selector_hwnd:
271
- threading.Thread(target=enforce_modal, args=(selector_hwnd,), daemon=True).start()
249
+ new_hwnds = list(set(hwnd_list_after) - set(hwnd_list_before))
272
250
 
273
- # Lecture du buffer brut
251
+ # ... le reste de ton code (détection de la fenêtre, thread enforce_modal, parsing buffer) ...
274
252
  buffer_content = ctypes.wstring_at(ctypes.addressof(file_buffer), file_buffer._length_)
253
+ parts = [p.replace("\\", "/") for p in buffer_content.split("\0") if p]
275
254
 
276
- # Split sur \0
277
- parts = buffer_content.split('\0')
278
- parts = [p.replace("\\", "/") for p in parts if p]
279
255
  if multi_select:
280
256
  if len(parts) >= 2:
281
257
  folder = parts[0]
282
258
  files = parts[1:]
283
- full_paths = [f"{folder}/{file}" for file in files]
284
- return '//////'.join(full_paths)
285
- elif len(parts) == 1:
286
- return parts[0]
287
- else:
288
- return ""
259
+ return "//////".join([f"{folder}/{f}" for f in files])
260
+ return parts[0] if parts else ""
289
261
  else:
290
262
  return parts[0] if parts else ""
291
263
 
@@ -479,33 +479,33 @@ class VariableItemModel(QStandardItemModel):
479
479
 
480
480
  class OWCreateInstance(OWWidget):
481
481
  name = "Auto show Create Instance"
482
- description = _tr.m[453, "Interactively create a data instance from sample dataset."]
482
+ description = "Interactively create a data instance from sample dataset."
483
483
  icon = "icons/CreateInstance.svg"
484
484
  if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
485
485
  icon = "icons_dev/CreateInstance.svg"
486
- category = _tr.m[454, "Transform"]
487
- keywords = _tr.m[455, "create instance, simulator"]
486
+ category = "Transform"
487
+ keywords = "create instance, simulator"
488
488
  priority = 2310
489
489
 
490
490
  class Inputs:
491
- data = Input(_tr.m[456, "Data"], Table)
492
- reference = Input(_tr.m[457, "Reference"], Table)
491
+ data = Input( "Data", Table)
492
+ reference = Input("Reference", Table)
493
493
  input_autoshow = Input("AutoShowConfiguration", str, auto_summary=False)
494
494
 
495
495
 
496
496
  class Outputs:
497
- data = Output(_tr.m[458, "Data"], Table)
497
+ data = Output("Data", Table)
498
498
 
499
499
  class Information(OWWidget.Information):
500
- nans_removed = Msg((_tr.m[459, "Variables with only missing values were "] + _tr.m[460, "removed from the list."]))
500
+ nans_removed = Msg(("Variables with only missing values were " +"removed from the list."))
501
501
 
502
502
  str_WidgetPositionning: str=Setting("None")
503
503
 
504
504
  want_main_area = False
505
- BUTTONS = [_tr.m[461, "Median"], _tr.m[462, "Mean"], _tr.m[463, "Random"], _tr.m[464, "Input"]]
505
+ BUTTONS = ["Median", "Mean", "Random", "Input"]
506
506
  ACTIONS = ["median", "mean", "random", "input"]
507
- HEADER = [["name", _tr.m[465, "Variable"]],
508
- ["variable", _tr.m[466, "Value"]]]
507
+ HEADER = [["name", "Variable"],
508
+ ["variable", "Value"]]
509
509
  Header = namedtuple(
510
510
  "header", [tag for tag, _ in HEADER]
511
511
  )(*range(len(HEADER)))
@@ -557,7 +557,7 @@ class OWCreateInstance(OWWidget):
557
557
  gui.rubber(box)
558
558
 
559
559
  gui.checkBox(self.buttonsArea, self, "append_to_data",
560
- _tr.m[467, "Append this instance to input data"],
560
+ "Append this instance to input data",
561
561
  callback=self.commit.deferred)
562
562
  gui.rubber(self.buttonsArea)
563
563
  gui.auto_apply(self.buttonsArea, self, "auto_commit")
@@ -674,7 +674,7 @@ class OWCreateInstance(OWWidget):
674
674
  def _create_data_from_values(self) -> Table:
675
675
  data = Table.from_domain(self.data.domain, 1)
676
676
  with data.unlocked():
677
- data.name = _tr.m[468, "created"]
677
+ data.name = "created"
678
678
  if data.X.size:
679
679
  data.X[:] = np.nan
680
680
  if data.Y.size:
@@ -703,7 +703,7 @@ class OWCreateInstance(OWWidget):
703
703
  part[-1, idx] = 1
704
704
  return data
705
705
 
706
- name = get_unique_names(self.data.domain, _tr.m[469, "Source ID"])
706
+ name = get_unique_names(self.data.domain, "Source ID")
707
707
  var = DiscreteVariable(name, values=(self.data.name, instance.name))
708
708
  var.attributes[source_label] = OWCreateInstance
709
709
  domain = Domain(domain.attributes, domain.class_vars,
@@ -725,8 +725,8 @@ class OWCreateInstance(OWWidget):
725
725
  def send_report(self):
726
726
  if not self.data:
727
727
  return
728
- self.report_domain(_tr.m[470, "Input"], self.data.domain)
729
- self.report_domain(_tr.m[471, "Output"], self.data.domain)
728
+ self.report_domain("Input", self.data.domain)
729
+ self.report_domain("Output", self.data.domain)
730
730
  items = []
731
731
  values: Dict = self._get_values()
732
732
  for var in self.data.domain.variables + self.data.domain.metas:
@@ -734,7 +734,7 @@ class OWCreateInstance(OWWidget):
734
734
  if var.is_primitive():
735
735
  val = var.repr_val(val)
736
736
  items.append([f"{var.name}:", val])
737
- self.report_table(_tr.m[472, "Values"], items)
737
+ self.report_table( "Values", items)
738
738
 
739
739
  @staticmethod
740
740
  def sizeHint():
@@ -183,29 +183,29 @@ _Sorting = List[Tuple[str, int]]
183
183
 
184
184
  class OWTable(OWWidget):
185
185
  name = "Autoshow Data Table"
186
- description = _tr.m[1657, "View the dataset in a spreadsheet."]
186
+ description = "View the dataset in a spreadsheet."
187
187
  icon = "icons/Table.svg"
188
188
  if "site-packages/Orange/widgets" in os.path.dirname(os.path.abspath(__file__)).replace("\\", "/"):
189
189
  icon = "icons_dev/Table.svg"
190
190
  category = "AAIT - TOOLBOX"
191
191
  priority = 50
192
- keywords = _tr.m[1658, "data table, view"]
192
+ keywords = "data table, view"
193
193
 
194
194
  class Inputs:
195
- data = Input(_tr.m[1659, "Data"], Table, default=True)
196
- data_subset = Input(_tr.m[1660, "Data Subset"], Table)
195
+ data = Input("Data", Table, default=True)
196
+ data_subset = Input("Data Subset", Table)
197
197
  input_autoshow = Input("AutoShowConfiguration", str, auto_summary=False)
198
198
 
199
199
  class Outputs:
200
- selected_data = Output(_tr.m[1661, "Selected Data"], Table, default=True)
200
+ selected_data = Output("Selected Data", Table, default=True)
201
201
  annotated_data = Output(ANNOTATED_DATA_SIGNAL_NAME, Table)
202
202
 
203
203
  class Warning(OWWidget.Warning):
204
204
  missing_sort_columns = Msg(
205
- (_tr.m[1662, "Cannot restore sorting.\n"] + _tr.m[1663, "Missing columns in input table: {}"])
205
+ ( "Cannot restore sorting.\n" + "Missing columns in input table: {}")
206
206
  )
207
207
  non_sortable_input = Msg(
208
- (_tr.m[1664, "Cannot restore sorting.\n"] + _tr.m[1665, "Input table cannot be sorted due to implementation constraints."])
208
+ ( "Cannot restore sorting.\n" + "Input table cannot be sorted due to implementation constraints.")
209
209
  )
210
210
 
211
211
  str_WidgetPositionning: str=Setting("None")
@@ -238,28 +238,28 @@ class OWTable(OWWidget):
238
238
  info_box = gui.vBox(self.controlArea, "Info")
239
239
  self.info_text = gui.widgetLabel(info_box)
240
240
 
241
- box = gui.vBox(self.controlArea, _tr.m[1666, "Variables"])
241
+ box = gui.vBox(self.controlArea, "Variables")
242
242
  self.c_show_attribute_labels = gui.checkBox(
243
243
  box, self, "show_attribute_labels",
244
- _tr.m[1667, "Show variable labels (if present)"],
244
+ "Show variable labels (if present)",
245
245
  callback=self._update_variable_labels)
246
246
 
247
247
  gui.checkBox(box, self, "show_distributions",
248
- _tr.m[1668, 'Visualize numeric values'],
248
+ 'Visualize numeric values',
249
249
  callback=self._on_distribution_color_changed)
250
- gui.checkBox(box, self, "color_by_class", _tr.m[1669, 'Color by instance classes'],
250
+ gui.checkBox(box, self, "color_by_class", 'Color by instance classes',
251
251
  callback=self._on_distribution_color_changed)
252
252
 
253
- box = gui.vBox(self.controlArea, _tr.m[1670, "Selection"])
253
+ box = gui.vBox(self.controlArea, "Selection")
254
254
 
255
- gui.checkBox(box, self, "select_rows", _tr.m[1671, "Select full rows"],
255
+ gui.checkBox(box, self, "select_rows", "Select full rows",
256
256
  callback=self._on_select_rows_changed)
257
257
 
258
258
  gui.rubber(self.controlArea)
259
259
 
260
- gui.button(self.buttonsArea, self, _tr.m[1672, "Restore Original Order"],
260
+ gui.button(self.buttonsArea, self, "Restore Original Order",
261
261
  callback=self.restore_order,
262
- tooltip=_tr.m[1673, "Show rows in the original order"],
262
+ tooltip="Show rows in the original order",
263
263
  autoDefault=False,
264
264
  attribute=Qt.WA_LayoutUsesWidgetRect)
265
265
  gui.auto_send(self.buttonsArea, self, "auto_commit")
@@ -417,7 +417,7 @@ class OWTable(OWWidget):
417
417
  self.info.set_input_summary(summary, details)
418
418
 
419
419
  if self.input is None:
420
- summary = [_tr.m[1674, "No data."]]
420
+ summary = [ "No data."]
421
421
  else:
422
422
  summary = tsummary.format_summary(self.input.summary)
423
423
  self.info_text.setText("\n".join(summary))
@@ -2,7 +2,7 @@ import os
2
2
  import sys
3
3
 
4
4
  import Orange.data
5
- from AnyQt.QtWidgets import QApplication, QLabel, QWidget, QScrollArea, QLineEdit, QHBoxLayout, QVBoxLayout
5
+ from AnyQt.QtWidgets import QApplication, QLabel, QWidget, QScrollArea, QLineEdit, QHBoxLayout, QVBoxLayout, QDoubleSpinBox, QSpinBox
6
6
  from AnyQt.QtCore import Qt
7
7
  from Orange.widgets import widget
8
8
  from Orange.widgets.utils.signals import Input, Output
@@ -40,6 +40,15 @@ class OWConverseLLM(widget.OWWidget):
40
40
  data = Output("Data", Orange.data.Table)
41
41
 
42
42
  n_ctx: str = Setting("32768")
43
+ workflow_id = Setting("")
44
+
45
+ max_tokens = Setting(0)
46
+ temperature = Setting(0.4)
47
+ top_p = Setting(0.4)
48
+ top_k = Setting(40)
49
+ repeat_penalty = Setting(1.15)
50
+ k_cache = Setting(0)
51
+ v_cache = Setting(0)
43
52
 
44
53
  @Inputs.data
45
54
  def set_data(self, in_data):
@@ -55,7 +64,7 @@ class OWConverseLLM(widget.OWWidget):
55
64
  self.model_path = in_model_path
56
65
  # Reset everything when changing model
57
66
  self.conversation = []
58
- # self.textBrowser.setText("") # TODO render Qt UI
67
+ self.clear_chat_area() # TODO render Qt UI
59
68
 
60
69
  # If there is already a model
61
70
  if self.model is not None:
@@ -86,10 +95,21 @@ class OWConverseLLM(widget.OWWidget):
86
95
  self.lineEdit_n_ctx = self.findChild(QLineEdit, "lineEdit")
87
96
  self.lineEdit_n_ctx.setText(str(self.n_ctx))
88
97
  self.lineEdit_n_ctx.editingFinished.connect(self.update_n_ctx)
89
- # Workflow ID TODO
90
- self.lineEdit_workflow_id = self.findChild(QLineEdit, "lineEdit_2")
91
- # parameters : TODO
92
-
98
+ # Context cache
99
+ self.comboKCache.setCurrentIndex(self.k_cache)
100
+ self.comboVCache.setCurrentIndex(self.v_cache)
101
+ self.comboKCache.currentIndexChanged.connect(self.update_cache)
102
+ self.comboVCache.currentIndexChanged.connect(self.update_cache)
103
+ # Workflow ID for streaming
104
+ self.edit_ID = self.findChild(QLineEdit, 'lineEdit_2')
105
+ self.edit_ID.setText(self.workflow_id)
106
+ self.edit_ID.editingFinished.connect(self.update_workflow_id)
107
+ # SpinBoxes
108
+ self.edit_max_tokens = self.bind_spinbox("boxMaxTokens", self.max_tokens)
109
+ self.edit_temperature = self.bind_spinbox("boxTemperature", self.temperature, is_double=True)
110
+ self.edit_top_p = self.bind_spinbox("boxTopP", self.top_p, is_double=True)
111
+ self.edit_top_k = self.bind_spinbox("boxTopK", self.top_k)
112
+ self.edit_repeat_penalty = self.bind_spinbox("boxRepeatPenalty", self.repeat_penalty, is_double=True)
93
113
  # Chat display
94
114
  self.scrollArea_display = self.findChild(QScrollArea, "scrollArea")
95
115
  self.scrollArea_display.setWidgetResizable(True)
@@ -97,9 +117,7 @@ class OWConverseLLM(widget.OWWidget):
97
117
  self.vLayout_display = QVBoxLayout(self.widget_display)
98
118
  self.vLayout_display.addStretch()
99
119
 
100
-
101
-
102
- # # Data Management
120
+ # Data Management
103
121
  self.data = None
104
122
  self.model = None
105
123
  self.model_path = None
@@ -116,9 +134,36 @@ class OWConverseLLM(widget.OWWidget):
116
134
  self.post_initialized()
117
135
 
118
136
  def update_n_ctx(self):
119
- value = self.lineEdit_n_ctx.text() # Read the current value
120
- self.n_ctx = value if value.isdigit() else "32768" # Default or parsed value
121
- # answers.check_gpu(self.model_path, self)
137
+ value = self.lineEdit_n_ctx.text()
138
+ self.n_ctx = value if value.isdigit() else "32768"
139
+ # answers.check_gpu(self.model_path, self) # TODO reload model
140
+
141
+ def update_cache(self):
142
+ self.k_cache = self.comboKCache.currentIndex()
143
+ self.v_cache = self.comboVCache.currentIndex()
144
+
145
+ def update_workflow_id(self):
146
+ self.workflow_id = self.edit_ID.text()
147
+
148
+ def bind_spinbox(self, name, value, is_double=False):
149
+ widget_type = QDoubleSpinBox if is_double else QSpinBox
150
+ box = self.findChild(widget_type, name)
151
+ box.setValue(value)
152
+ box.editingFinished.connect(self.update_parameters)
153
+ return box
154
+
155
+ def update_parameters(self):
156
+ self.max_tokens = self.edit_max_tokens.value()
157
+ self.temperature = self.edit_temperature.value()
158
+ self.top_p = self.edit_top_p.value()
159
+ self.top_k = self.edit_top_k.value()
160
+ self.repeat_penalty = self.edit_repeat_penalty.value()
161
+ print("Updated parameters:")
162
+ print(f" Max tokens : {self.max_tokens}")
163
+ print(f" Temperature : {self.temperature}")
164
+ print(f" Top P : {self.top_p}")
165
+ print(f" Top K : {self.top_k}")
166
+ print(f" Repeat penalty : {self.repeat_penalty}")
122
167
 
123
168
  def run(self):
124
169
  # Clear error & warning
@@ -143,6 +188,16 @@ class OWConverseLLM(widget.OWWidget):
143
188
  self.Outputs.data.send(None)
144
189
  return
145
190
 
191
+ query_parameters = {
192
+ "max_tokens": self.max_tokens,
193
+ "temperature": self.temperature,
194
+ "top_p": self.top_p,
195
+ "top_k": self.top_k,
196
+ "repeat_penalty": self.repeat_penalty,
197
+ "k_cache": self.k_cache,
198
+ "v_cache": self.v_cache
199
+ }
200
+
146
201
  # Start progress bar
147
202
  self.progressBarInit()
148
203
 
@@ -150,7 +205,7 @@ class OWConverseLLM(widget.OWWidget):
150
205
  # --> progress is used in the main function to track progress (with a callback)
151
206
  # --> result is used to collect the result from main function
152
207
  # --> finish is just an empty signal to indicate that the thread is finished
153
- self.thread = thread_management.Thread(answers_llama.generate_conversation, self.data, self.model, self.conversation, int(self.n_ctx))
208
+ self.thread = thread_management.Thread(answers_llama.generate_conversation, self.data, self.model, self.conversation, int(self.n_ctx), query_parameters, self.workflow_id)
154
209
  self.thread.progress.connect(self.handle_progress)
155
210
  self.thread.result.connect(self.handle_result)
156
211
  self.thread.finish.connect(self.handle_finish)
@@ -181,9 +236,9 @@ class OWConverseLLM(widget.OWWidget):
181
236
 
182
237
  def handle_result(self, result):
183
238
  try:
184
- self.data = result[0]
239
+ self.result = result[0]
185
240
  self.conversation = result[1]
186
- self.Outputs.data.send(self.data)
241
+ self.Outputs.data.send(self.result)
187
242
  except Exception as e:
188
243
  print("An error occurred when sending out_data:", e)
189
244
  self.Outputs.data.send(None)
@@ -211,7 +266,23 @@ class OWConverseLLM(widget.OWWidget):
211
266
  def scroll_to_bottom(self):
212
267
  self.scrollArea_display.verticalScrollBar().setValue(self.scrollArea_display.verticalScrollBar().maximum())
213
268
 
214
-
269
+ # UI # TODO à tester
270
+ def clear_chat_area(self):
271
+ """
272
+ Supprime uniquement les cartes de message sans casser le layout.
273
+ """
274
+ for i in reversed(range(self.vLayout_display.count())):
275
+ item = self.vLayout_display.itemAt(i)
276
+ widget = item.widget()
277
+
278
+ # On ne supprime que les widgets qui sont des cartes
279
+ if isinstance(widget, (UserMessageCard, AssistantMessageCard)):
280
+ widget.setParent(None) # Détache du layout
281
+ widget.deleteLater() # Supprime de la mémoire
282
+ elif widget is None and item.spacerItem():
283
+ # Optionnel : si tu veux garder ton "ressort" du bas,
284
+ # ne fais rien ici.
285
+ pass
215
286
 
216
287
 
217
288