aait 2.3.14.2__tar.gz → 2.3.15__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}/PKG-INFO +1 -1
  2. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/PKG-INFO +1 -1
  3. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/SOURCES.txt +0 -1
  4. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/answers_llama.py +78 -7
  5. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/MetManagement.py +1 -1
  6. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/windows_utils.py +41 -69
  7. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWConverseLLM.py +87 -16
  8. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileWithPath.py +10 -9
  9. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLLMEngine.py +4 -2
  10. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTrigger.py +1 -1
  11. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +105 -29
  12. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owedgellm.ui +12 -0
  13. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgetpages.ui +3 -3
  14. {aait-2.3.14.2 → aait-2.3.15}/setup.py +1 -1
  15. aait-2.3.14.2/orangecontrib/AAIT/widgets/OWSplitExcelSheets.py +0 -216
  16. {aait-2.3.14.2 → aait-2.3.15}/License.txt +0 -0
  17. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/dependency_links.txt +0 -0
  18. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/entry_points.txt +0 -0
  19. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/namespace_packages.txt +0 -0
  20. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/requires.txt +0 -0
  21. {aait-2.3.14.2 → aait-2.3.15}/aait.egg-info/top_level.txt +0 -0
  22. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/__init__.py +0 -0
  23. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
  24. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
  25. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/__init__.py +0 -0
  26. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/answers.py +0 -0
  27. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/chunking.py +0 -0
  28. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/embeddings.py +0 -0
  29. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/lemmes.py +0 -0
  30. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
  31. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/process_documents.py +0 -0
  32. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
  33. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/llm/translations.py +0 -0
  34. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
  35. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
  36. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/OperationSystem.py +0 -0
  37. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/SimpleDialogQt.py +0 -0
  38. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/__init__.py +0 -0
  39. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
  40. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/aait_table_viewer.py +0 -0
  41. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/base_widget.py +0 -0
  42. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
  43. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/import_uic.py +0 -0
  44. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
  45. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/mac_utils.py +0 -0
  46. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
  47. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
  48. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
  49. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/thread_management.py +0 -0
  50. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
  51. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
  52. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
  53. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -0
  54. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
  55. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/unlink_table_domain.py +0 -0
  56. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/utils/widget_positioning.py +0 -0
  57. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
  58. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAccumulator.py +0 -0
  59. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
  60. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
  61. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAutoShowCreateInstance.py +0 -0
  62. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAutoShowTable.py +0 -0
  63. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +0 -0
  64. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
  65. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
  66. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
  67. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
  68. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
  69. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
  70. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
  71. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -0
  72. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
  73. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
  74. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileMetadata.py +0 -0
  75. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
  76. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
  77. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
  78. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
  79. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
  80. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
  81. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGetPages.py +0 -0
  82. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWInputSelector.py +0 -0
  83. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWKeywords.py +0 -0
  84. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
  85. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
  86. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
  87. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLargeLanguageModel.py +0 -0
  88. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
  89. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
  90. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
  91. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Embeddings.py +0 -0
  92. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
  93. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
  94. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
  95. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
  96. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
  97. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
  98. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
  99. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
  100. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
  101. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
  102. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
  103. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
  104. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
  105. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
  106. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
  107. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOperationSystem.py +0 -0
  108. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
  109. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
  110. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
  111. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
  112. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWQuadrantclicker.py +0 -0
  113. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
  114. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
  115. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
  116. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
  117. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
  118. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
  119. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSortAndSelect.py +0 -0
  120. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
  121. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
  122. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
  123. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
  124. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
  125. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/__init__.py +0 -0
  126. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
  127. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_OperationSystem.ui +0 -0
  128. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
  129. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
  130. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +0 -0
  131. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
  132. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
  133. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
  134. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
  135. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
  136. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
  137. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
  138. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
  139. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +0 -0
  140. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
  141. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
  142. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
  143. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
  144. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
  145. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
  146. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
  147. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
  148. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
  149. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
  150. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
  151. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
  152. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
  153. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlargelanguagemodel.ui +0 -0
  154. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
  155. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owllm4all.ui +0 -0
  156. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
  157. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
  158. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
  159. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_embeddings.ui +0 -0
  160. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
  161. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
  162. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
  163. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
  164. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
  165. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
  166. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
  167. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
  168. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
  169. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
  170. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
  171. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
  172. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
  173. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
  174. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
  175. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
  176. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
  177. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
  178. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owquadrant_clicker.ui +0 -0
  179. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
  180. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
  181. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
  182. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
  183. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
  184. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsortandselect.ui +0 -0
  185. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsplitexcelsheets.ui +0 -0
  186. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
  187. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
  188. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
  189. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
  190. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
  191. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
  192. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/CreateInstance.svg +0 -0
  193. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
  194. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
  195. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/Table.svg +0 -0
  196. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
  197. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/blue_down_arrow.svg +0 -0
  198. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/book.png +0 -0
  199. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
  200. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
  201. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
  202. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
  203. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
  204. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/edge_llm.svg +0 -0
  205. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
  206. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
  207. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/green_check.svg +0 -0
  208. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
  209. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
  210. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
  211. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
  212. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
  213. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
  214. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
  215. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
  216. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
  217. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
  218. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
  219. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
  220. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
  221. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/operationSystem.png +0 -0
  222. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
  223. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
  224. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
  225. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
  226. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
  227. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
  228. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
  229. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
  230. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
  231. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
  232. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
  233. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
  234. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
  235. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
  236. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
  237. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
  238. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
  239. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
  240. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
  241. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
  242. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
  243. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
  244. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owlargelanguagemodel.svg +0 -0
  245. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
  246. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
  247. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
  248. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_embeddings.svg +0 -0
  249. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
  250. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
  251. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
  252. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
  253. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
  254. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
  255. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
  256. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
  257. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
  258. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
  259. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
  260. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
  261. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +0 -0
  262. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
  263. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
  264. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
  265. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
  266. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/quadrantclicker.svg +0 -0
  267. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
  268. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
  269. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
  270. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
  271. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
  272. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
  273. {aait-2.3.14.2 → aait-2.3.15}/orangecontrib/__init__.py +0 -0
  274. {aait-2.3.14.2 → aait-2.3.15}/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
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
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
 
@@ -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
 
@@ -148,6 +148,7 @@ class OWFileWithPath(base_widget.BaseListWidget):
148
148
  self.error("")
149
149
  self.warning("")
150
150
 
151
+
151
152
  if self.filepath is None:
152
153
  return
153
154
 
@@ -156,15 +157,15 @@ class OWFileWithPath(base_widget.BaseListWidget):
156
157
  self.error("error input file doesn t exist")
157
158
  self.Outputs.data.send(None)
158
159
  return
159
-
160
- # Verification of in_data
161
- if not self.selected_column_name in self.in_path_table.domain:
162
- self.warning(f'Previously selected column "{self.selected_column_name}" does not exist in your data.')
163
- return
164
-
165
- if not isinstance(self.in_path_table.domain[self.selected_column_name], StringVariable):
166
- self.error('You must select a text variable.')
167
- return
160
+ if self.in_path_table is not None:
161
+ # Verification of in_data
162
+ if not self.selected_column_name in self.in_path_table.domain:
163
+ self.warning(f'Previously selected column "{self.selected_column_name}" does not exist in your data.')
164
+ return
165
+
166
+ if not isinstance(self.in_path_table.domain[self.selected_column_name], StringVariable):
167
+ self.error('You must select a text variable.')
168
+ return
168
169
 
169
170
  if self.strloadAsString!="False":
170
171
  out_data = self.load_table_as_strings(self.filepath)
@@ -48,8 +48,8 @@ class OWQEdgeLLM(widget.OWWidget):
48
48
  top_p = Setting(0.4)
49
49
  top_k = Setting(40)
50
50
  repeat_penalty = Setting(1.15)
51
- k_cache = Setting(0)
52
- v_cache = Setting(0)
51
+ k_cache = Setting(1)
52
+ v_cache = Setting(1)
53
53
 
54
54
  @Inputs.data
55
55
  def set_data(self, in_data):
@@ -208,6 +208,8 @@ class OWQEdgeLLM(widget.OWWidget):
208
208
  self.textBrowser.insertPlainText(value)
209
209
  elif action == "warning":
210
210
  self.warning(value)
211
+ elif action == "error":
212
+ self.error(value)
211
213
 
212
214
  def handle_result(self, result):
213
215
  if result is None:
@@ -28,7 +28,7 @@ class OWTrigger(widget.OWWidget):
28
28
 
29
29
  class Inputs:
30
30
  data = Input("Data", Orange.data.Table)
31
- trigger = Input("Trigger",object)
31
+ trigger = Input("Trigger", object)
32
32
 
33
33
  class Outputs:
34
34
  data = Output("Data", Orange.data.Table)