aait 2.3.14.1__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.
- {aait-2.3.14.1 → aait-2.3.15}/PKG-INFO +1 -1
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/PKG-INFO +1 -1
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/SOURCES.txt +1 -1
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/answers_llama.py +78 -7
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/MetManagement.py +1 -1
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/windows_utils.py +41 -69
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWConverseLLM.py +87 -16
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileWithPath.py +10 -9
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLLMEngine.py +4 -2
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTrigger.py +1 -1
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owconversellm.ui +105 -29
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owedgellm.ui +12 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgetpages.ui +3 -3
- aait-2.3.15/orangecontrib/AAIT/widgets/designer/owmodel_embeddings.ui +109 -0
- {aait-2.3.14.1 → aait-2.3.15}/setup.py +1 -1
- aait-2.3.14.1/orangecontrib/AAIT/widgets/OWSplitExcelSheets.py +0 -216
- {aait-2.3.14.1 → aait-2.3.15}/License.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/dependency_links.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/entry_points.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/namespace_packages.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/requires.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/aait.egg-info/top_level.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/fix_torch/fix_torch_dll_error.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/fix_torch/libomp140.x86_64.dll +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/answers.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/chunking.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/embeddings.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/lemmes.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/lmstudio.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/process_documents.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/prompt_management.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/llm/translations.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/optimiser/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/optimiser/optuna_multi.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/OperationSystem.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/SimpleDialogQt.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/aait_repo_file.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/aait_table_viewer.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/base_widget.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/delta_local_shared_fodler.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/import_uic.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/initialize_from_ini.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/mac_utils.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/shared_functions.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/shared_variables.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/subprocess_management.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/thread_management.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/change_owcorpus.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/concat_splitted_pypi.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/first_time_check.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/tools/owcorpus_ok.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/unlink_table_domain.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/utils/widget_positioning.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAAITResourcesManager.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAccumulator.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAddColumns.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWApplyRules.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAutoShowCreateInstance.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWAutoShowTable.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWCN2rule_view.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWChunking.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWConcatRules.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWCreateEmbeddings.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWDisplayMD.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEditTable.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEmptySwitch.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWEndLoop.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExecuteScript.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExtraChunks.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWExtractTokens.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileMetadata.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFileSyncChecker.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFindFilesFromDir.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWFusionNM.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateQuestions.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateSynthesis.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGenerateWord.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWGetPages.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWInputSelector.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWKeywords.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWKeywordsDetection.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLMStudio.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLanguageDetection.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLargeLanguageModel.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLemmatizer.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWLoadDocuments.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_CE_MiniLML6.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Embeddings.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Falcon.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_HelsinkiEnFr.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_HelsinkiFrEn.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_MPNET.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Mistral.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen1B5_Q6.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen2_5_32B.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen3B_Q4.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q4.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Qwen7B_Q6.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_Solar.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SolarUncensored.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_EN.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWModel_SpacyMD_FR.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOperationSystem.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisation.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisationSelection.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWOptimisationSendScore.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWProcessDocumentsFromPath.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWQuadrantclicker.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWQueryLLM.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWRandomData.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWReranking.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSaveFilepathEntry.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSelectColumnDynamique.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSelectRowsDynamic.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWSortAndSelect.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWStartLoop.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTable2Corpus.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWTranslation.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/OWUnzipFolder.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/POW_Wfactory.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owMarkdown.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_OperationSystem.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_in_or_out_path.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ow_widget_random_data.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owaccumulator.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owaddcolumns.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owapplyrules.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owchunking.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owconcatrules.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owembeddings.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owemptyswitch.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owendloop.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owexecutescript.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owexecutescript_TEST.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owextrachunks.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owextracttokens.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilemetadata.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilesyncchecker.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfilewithpath.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfindfilesfromdir.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owfusion_nm.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgenerate_word.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgeneratequestions.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owgeneratesynthesis.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owkeyword.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owkeywordsdetection.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlangdetect.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlargelanguagemodel.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owlemmatizer.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owllm4all.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owloaddocuments.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owloadworkflow.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_mistral.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_mpnet.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_2.5_32b.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_1.5b_q6.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_3b_q4.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q4.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwen_instruct_7b_q6.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_qwencoder_7b.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_solar.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_solar_uncensored.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_en.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owmodel_spacymd_fr.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/ownumberpointinrules.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owprocessdocuments.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owquadrant_clicker.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owqueryllm.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owreranking.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsavewithpath.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owselect_column_dynamic.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owselect_row_dynamic.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsortandselect.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owsplitexcelsheets.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owstartloop.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtable2corpus.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtranslation.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owtrigger.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/designer/owunzipfolder.ui +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/CN2RuleViewer.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/CreateInstance.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/MDViewer.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/Mistral.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/Table.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/apply_rules.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/blue_down_arrow.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/book.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/category.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/dark_green.txt +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/de.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/document_generator.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/documents.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/edge_llm.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/endloop.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/extra_chunks.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/green_check.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/in_or_out.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/input.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/languages.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/lm_studio.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_img_multi_pull.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_multi_pull.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_pull.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_push.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/local_interf_text_pull.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_solar.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_uncensoredsolar.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/logo_upload.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/models.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/operationSystem.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/optimisation.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/optimizer.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/output.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owCN2_intersect_rules.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owaccumulator.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owchunking.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owconversellm.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owedittable.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owembeddings.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owemptyswitch.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owenvinfo.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owexecutescript.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owextracttokens.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilemetadata.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilesfromdir.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilesyncchecker.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfilewithpath.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owfusion_nm.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owgeneratequestions.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owgeneratesynthesis.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owkeywords.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owkeywordsdetection.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owlargelanguagemodel.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owlemmatizer.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owloaddocuments.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_ce_minilml6.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_embeddings.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_falcon.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_en_fr.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_helsinki_fr_en.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_mpnet.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_en.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owmodel_spacymd_fr.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owoptimisation.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owoptimisationselection.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owqueryllm.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owreranking.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owsavefilepathentry.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owselectcolumndynamique.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owsortandselect.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtable2corpus.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtranslation.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/owtrigger.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/processdocuments.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/quadrantclicker.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/qwen-color.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/select_dynamic_row.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/startloop.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/tools.png +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/widgetFactory.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/AAIT/widgets/icons/zip.svg +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/orangecontrib/__init__.py +0 -0
- {aait-2.3.14.1 → aait-2.3.15}/setup.cfg +0 -0
|
@@ -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
|
|
@@ -156,6 +155,7 @@ orangecontrib/AAIT/widgets/designer/owllm4all.ui
|
|
|
156
155
|
orangecontrib/AAIT/widgets/designer/owloaddocuments.ui
|
|
157
156
|
orangecontrib/AAIT/widgets/designer/owloadworkflow.ui
|
|
158
157
|
orangecontrib/AAIT/widgets/designer/owmodel_ce_minilml6.ui
|
|
158
|
+
orangecontrib/AAIT/widgets/designer/owmodel_embeddings.ui
|
|
159
159
|
orangecontrib/AAIT/widgets/designer/owmodel_falcon.ui
|
|
160
160
|
orangecontrib/AAIT/widgets/designer/owmodel_helsinki_en_fr.ui
|
|
161
161
|
orangecontrib/AAIT/widgets/designer/owmodel_helsinki_fr_en.ui
|
|
@@ -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,
|
|
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
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
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+"
|
|
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
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
|
|
167
|
-
|
|
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
|
|
172
|
+
MAX_PATH = 65536
|
|
173
173
|
|
|
174
174
|
class OPENFILENAME(ctypes.Structure):
|
|
175
175
|
_fields_ = [
|
|
176
|
-
("lStructSize",
|
|
177
|
-
("hwndOwner",
|
|
178
|
-
("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",
|
|
182
|
-
("nFilterIndex",
|
|
181
|
+
("nMaxCustFilter", wt.DWORD),
|
|
182
|
+
("nFilterIndex", wt.DWORD),
|
|
183
183
|
("lpstrFile", ctypes.c_wchar_p),
|
|
184
|
-
("nMaxFile",
|
|
184
|
+
("nMaxFile", wt.DWORD),
|
|
185
185
|
("lpstrFileTitle", ctypes.c_wchar_p),
|
|
186
|
-
("nMaxFileTitle",
|
|
186
|
+
("nMaxFileTitle", wt.DWORD),
|
|
187
187
|
("lpstrInitialDir", ctypes.c_wchar_p),
|
|
188
188
|
("lpstrTitle", ctypes.c_wchar_p),
|
|
189
|
-
("Flags",
|
|
190
|
-
("nFileOffset",
|
|
191
|
-
("nFileExtension",
|
|
189
|
+
("Flags", wt.DWORD),
|
|
190
|
+
("nFileOffset", wt.WORD),
|
|
191
|
+
("nFileExtension", wt.WORD),
|
|
192
192
|
("lpstrDefExt", ctypes.c_wchar_p),
|
|
193
|
-
("lCustData",
|
|
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",
|
|
198
|
-
("FlagsEx",
|
|
197
|
+
("dwReserved", wt.DWORD),
|
|
198
|
+
("FlagsEx", wt.DWORD),
|
|
199
199
|
]
|
|
200
200
|
|
|
201
|
-
|
|
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
|
|
223
|
+
# --- Avant ouverture : liste des HWND ---
|
|
228
224
|
hwnd_list_before = []
|
|
229
225
|
|
|
230
|
-
def
|
|
226
|
+
def _enum_before(hwnd, lParam):
|
|
231
227
|
hwnd_list_before.append(hwnd)
|
|
232
228
|
return True
|
|
233
229
|
|
|
234
|
-
|
|
235
|
-
|
|
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
|
|
233
|
+
# --- Ouvre la boîte ---
|
|
239
234
|
if not comdlg32.GetOpenFileNameW(ctypes.byref(ofn)):
|
|
240
|
-
return ""
|
|
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
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
262
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
284
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
90
|
-
self.
|
|
91
|
-
|
|
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()
|
|
120
|
-
self.n_ctx = value if value.isdigit() else "32768"
|
|
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.
|
|
239
|
+
self.result = result[0]
|
|
185
240
|
self.conversation = result[1]
|
|
186
|
-
self.Outputs.data.send(self.
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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(
|
|
52
|
-
v_cache = Setting(
|
|
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:
|