unique_toolkit 1.71.2__tar.gz → 1.72.0__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.
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/PKG-INFO +1 -1
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/pyproject.toml +1 -1
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/__init__.py +2 -0
- unique_toolkit-1.72.0/unique_toolkit/app/chat_event_filter_options_settings.py +11 -0
- unique_toolkit-1.72.0/unique_toolkit/app/feature_flags.py +100 -0
- unique_toolkit-1.72.0/unique_toolkit/app/find_env_file.py +70 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/schemas.py +39 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/unique_settings.py +38 -58
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/functions.py +43 -4
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/services/knowledge_base.py +182 -45
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/README.md +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.71.2 → unique_toolkit-1.72.0}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-toolkit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.72.0
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
|
|
6
6
|
Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from .find_env_file import EnvFileNotFoundError as EnvFileNotFoundError
|
|
2
|
+
from .find_env_file import find_env_file as find_env_file
|
|
1
3
|
from .init_logging import init_logging as init_logging
|
|
2
4
|
from .init_sdk import get_endpoint_secret as get_endpoint_secret
|
|
3
5
|
from .init_sdk import init_sdk as init_sdk
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from pydantic_settings import SettingsConfigDict
|
|
2
|
+
|
|
3
|
+
from unique_toolkit.app.find_env_file import find_env_file
|
|
4
|
+
|
|
5
|
+
CHAT_EVENT_FILTER_OPTIONS_SETTINGS = SettingsConfigDict(
|
|
6
|
+
env_prefix="unique_chat_event_filter_options_",
|
|
7
|
+
env_file_encoding="utf-8",
|
|
8
|
+
case_sensitive=False,
|
|
9
|
+
extra="ignore",
|
|
10
|
+
env_file=find_env_file("unique.env", ".env", required=False),
|
|
11
|
+
)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
from pydantic import BeforeValidator, Field
|
|
4
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class FeatureFlag:
|
|
8
|
+
"""A feature flag that can be enabled globally or for specific company IDs.
|
|
9
|
+
|
|
10
|
+
Examples:
|
|
11
|
+
>>> flag = FeatureFlag(True)
|
|
12
|
+
>>> flag.is_enabled("any_company")
|
|
13
|
+
True
|
|
14
|
+
|
|
15
|
+
>>> flag = FeatureFlag(["company1", "company2"])
|
|
16
|
+
>>> flag.is_enabled("company1")
|
|
17
|
+
True
|
|
18
|
+
>>> flag.is_enabled("company3")
|
|
19
|
+
False
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, *, value: list[str] | bool):
|
|
23
|
+
self._value = value
|
|
24
|
+
|
|
25
|
+
def is_enabled(self, *, company_id: str | None = None) -> bool:
|
|
26
|
+
"""Check if the feature is enabled for the given company.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
company_id: The company ID to check. Required if flag is a list.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
True if the feature is enabled, False otherwise.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
if isinstance(self._value, bool):
|
|
36
|
+
return self._value
|
|
37
|
+
|
|
38
|
+
if isinstance(self._value, list):
|
|
39
|
+
return company_id in self._value if company_id else False
|
|
40
|
+
|
|
41
|
+
return False
|
|
42
|
+
|
|
43
|
+
def __repr__(self) -> str:
|
|
44
|
+
return f"FeatureFlag({self._value})"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def parse_feature_flag(v: FeatureFlag | str | bool | list[str]) -> FeatureFlag:
|
|
48
|
+
"""Parse all feature flag fields from environment variables.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
v: Can be a string ("true", "false", or comma-separated IDs),
|
|
52
|
+
a boolean, a list of IDs, or already a FeatureFlag instance.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
A FeatureFlag instance.
|
|
56
|
+
"""
|
|
57
|
+
if isinstance(v, FeatureFlag):
|
|
58
|
+
return v
|
|
59
|
+
|
|
60
|
+
if isinstance(v, str):
|
|
61
|
+
v_lower = v.lower().strip()
|
|
62
|
+
if v_lower in ("true", "1", "yes"):
|
|
63
|
+
return FeatureFlag(value=True)
|
|
64
|
+
elif v_lower in ("false", "0", "no", ""):
|
|
65
|
+
return FeatureFlag(value=False)
|
|
66
|
+
else:
|
|
67
|
+
# Comma-separated company IDs
|
|
68
|
+
return FeatureFlag(value=[id.strip() for id in v.split(",") if id.strip()])
|
|
69
|
+
|
|
70
|
+
if isinstance(v, bool):
|
|
71
|
+
return FeatureFlag(value=v)
|
|
72
|
+
|
|
73
|
+
if isinstance(v, list):
|
|
74
|
+
return FeatureFlag(value=v)
|
|
75
|
+
|
|
76
|
+
# Default to disabled (this handles default factory functions too)
|
|
77
|
+
return FeatureFlag(value=False)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
ValidatedFeatureFlag = Annotated[FeatureFlag, BeforeValidator(parse_feature_flag)]
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class _UniqueToolkitFeatureFlags(BaseSettings):
|
|
84
|
+
un_18894_freeze_unique_settings: ValidatedFeatureFlag = Field(
|
|
85
|
+
default=FeatureFlag(value=False),
|
|
86
|
+
frozen=True,
|
|
87
|
+
description="Freeze unique settings (UN-18894)",
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
model_config = SettingsConfigDict(
|
|
91
|
+
extra="ignore",
|
|
92
|
+
env_prefix="FEATURE_FLAG_",
|
|
93
|
+
case_sensitive=False,
|
|
94
|
+
env_file=".env",
|
|
95
|
+
env_file_encoding="utf-8",
|
|
96
|
+
frozen=True,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
UNIQUE_TOOLKIT_FEATURE_FLAGS = _UniqueToolkitFeatureFlags()
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
from platformdirs import user_config_dir
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class EnvFileNotFoundError(FileNotFoundError):
|
|
8
|
+
"""Raised when no environment file can be found in any of the expected locations."""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def find_env_file(
|
|
12
|
+
*filenames: str,
|
|
13
|
+
app_name: str = "unique",
|
|
14
|
+
app_author: str = "unique",
|
|
15
|
+
required: bool = False,
|
|
16
|
+
) -> Path | None:
|
|
17
|
+
"""Find environment files using cross-platform fallback locations.
|
|
18
|
+
|
|
19
|
+
Search order for each filename:
|
|
20
|
+
1. ENVIRONMENT_FILE_PATH environment variable
|
|
21
|
+
2. Current working directory
|
|
22
|
+
3. User config directory (cross-platform via platformdirs)
|
|
23
|
+
|
|
24
|
+
If no filenames are given, defaults to ``".env"``.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
*filenames: Names of the environment files to search for.
|
|
28
|
+
app_name: Application name for user config directory (default: 'unique')
|
|
29
|
+
app_author: Application author for user config directory (default: 'unique')
|
|
30
|
+
required: If True, raise EnvFileNotFoundError when file is not found.
|
|
31
|
+
If False, return None when file is not found (default: True).
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Path to the environment file, or None if not found and required=False.
|
|
35
|
+
|
|
36
|
+
Raises:
|
|
37
|
+
EnvFileNotFoundError: If no environment file is found and required=True.
|
|
38
|
+
"""
|
|
39
|
+
if not filenames:
|
|
40
|
+
filenames = (".env",)
|
|
41
|
+
|
|
42
|
+
locations = []
|
|
43
|
+
if env_path := os.environ.get("ENVIRONMENT_FILE_PATH"):
|
|
44
|
+
locations.append(Path(env_path))
|
|
45
|
+
else:
|
|
46
|
+
for filename in filenames:
|
|
47
|
+
locations.append(Path.cwd() / filename)
|
|
48
|
+
locations.append(
|
|
49
|
+
Path(user_config_dir(appname=app_name, appauthor=app_author)) / filename
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
for location in locations:
|
|
53
|
+
if location and location.exists() and location.is_file():
|
|
54
|
+
return location
|
|
55
|
+
|
|
56
|
+
# If no file found, either return None or raise error
|
|
57
|
+
if not required:
|
|
58
|
+
return None
|
|
59
|
+
|
|
60
|
+
# If required, provide helpful error message
|
|
61
|
+
searched_locations = [str(loc) for loc in locations if loc is not None]
|
|
62
|
+
raise EnvFileNotFoundError(
|
|
63
|
+
"\n".join(
|
|
64
|
+
[
|
|
65
|
+
f"Environment file '{filename}' not found. Searched locations:\n"
|
|
66
|
+
+ "\n".join(f" - {loc}" for loc in searched_locations)
|
|
67
|
+
for filename in filenames
|
|
68
|
+
]
|
|
69
|
+
)
|
|
70
|
+
)
|
|
@@ -12,6 +12,9 @@ from pydantic_settings import BaseSettings
|
|
|
12
12
|
from typing_extensions import deprecated
|
|
13
13
|
|
|
14
14
|
from unique_toolkit._common.exception import ConfigurationException
|
|
15
|
+
from unique_toolkit.app.chat_event_filter_options_settings import (
|
|
16
|
+
CHAT_EVENT_FILTER_OPTIONS_SETTINGS,
|
|
17
|
+
)
|
|
15
18
|
from unique_toolkit.app.unique_settings import UniqueChatEventFilterOptions
|
|
16
19
|
from unique_toolkit.smart_rules.compile import UniqueQL, parse_uniqueql
|
|
17
20
|
|
|
@@ -55,6 +58,9 @@ class BaseEvent(BaseModel, Generic[FilterOptionsT]):
|
|
|
55
58
|
data = json.load(f)
|
|
56
59
|
return cls.model_validate(data)
|
|
57
60
|
|
|
61
|
+
def filter(self) -> bool:
|
|
62
|
+
return False
|
|
63
|
+
|
|
58
64
|
def filter_event(self, *, filter_options: FilterOptionsT | None = None) -> bool:
|
|
59
65
|
"""Determine if event should be filtered out and be neglected."""
|
|
60
66
|
return False
|
|
@@ -284,6 +290,18 @@ class ChatEvent(BaseEvent):
|
|
|
284
290
|
created_at: Optional[int] = None
|
|
285
291
|
version: Optional[str] = None
|
|
286
292
|
|
|
293
|
+
class FilterOptions(BaseSettings):
|
|
294
|
+
assistant_ids: list[str] = Field(
|
|
295
|
+
default=[],
|
|
296
|
+
description="The assistant ids (space) to filter by. Default is all assistants.",
|
|
297
|
+
)
|
|
298
|
+
references_in_code: list[str] = Field(
|
|
299
|
+
default=[],
|
|
300
|
+
description="The module (reference) names in code to filter by. Default is all modules.",
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
model_config = CHAT_EVENT_FILTER_OPTIONS_SETTINGS
|
|
304
|
+
|
|
287
305
|
@classmethod
|
|
288
306
|
def from_json_file(cls, file_path: Path) -> ChatEvent:
|
|
289
307
|
if not file_path.exists():
|
|
@@ -303,6 +321,27 @@ class ChatEvent(BaseEvent):
|
|
|
303
321
|
"assistant": {"id": self.payload.assistant_id},
|
|
304
322
|
}
|
|
305
323
|
|
|
324
|
+
@override
|
|
325
|
+
def filter(self) -> bool:
|
|
326
|
+
"""Filter the chat event based on the assistant id and reference in code."""
|
|
327
|
+
|
|
328
|
+
options = ChatEvent.FilterOptions()
|
|
329
|
+
|
|
330
|
+
# Empty lists mean "do not filter by this criterion" (same as filter_event).
|
|
331
|
+
if (
|
|
332
|
+
options.assistant_ids
|
|
333
|
+
and self.payload.assistant_id not in options.assistant_ids
|
|
334
|
+
):
|
|
335
|
+
return True
|
|
336
|
+
|
|
337
|
+
if (
|
|
338
|
+
options.references_in_code
|
|
339
|
+
and self.payload.name not in options.references_in_code
|
|
340
|
+
):
|
|
341
|
+
return True
|
|
342
|
+
|
|
343
|
+
return False
|
|
344
|
+
|
|
306
345
|
@override
|
|
307
346
|
def filter_event(
|
|
308
347
|
self, *, filter_options: UniqueChatEventFilterOptions | None = None
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import os
|
|
4
3
|
from logging import getLogger
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import TYPE_CHECKING, Any, Self, TypeVar
|
|
7
6
|
from urllib.parse import ParseResult, urlparse, urlunparse
|
|
8
7
|
|
|
9
8
|
import unique_sdk
|
|
10
|
-
from platformdirs import user_config_dir
|
|
11
9
|
from pydantic import (
|
|
12
10
|
AliasChoices,
|
|
13
11
|
BaseModel,
|
|
@@ -20,6 +18,11 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
20
18
|
from typing_extensions import Protocol, deprecated
|
|
21
19
|
|
|
22
20
|
from unique_toolkit._common.config_checker import register_config
|
|
21
|
+
from unique_toolkit.app.chat_event_filter_options_settings import (
|
|
22
|
+
CHAT_EVENT_FILTER_OPTIONS_SETTINGS,
|
|
23
|
+
)
|
|
24
|
+
from unique_toolkit.app.feature_flags import UNIQUE_TOOLKIT_FEATURE_FLAGS
|
|
25
|
+
from unique_toolkit.app.find_env_file import EnvFileNotFoundError, find_env_file
|
|
23
26
|
|
|
24
27
|
if TYPE_CHECKING:
|
|
25
28
|
from unique_toolkit.app.schemas import BaseEvent, ChatEvent
|
|
@@ -61,8 +64,16 @@ class AuthContextProtocol(Protocol):
|
|
|
61
64
|
|
|
62
65
|
|
|
63
66
|
class AuthContext(BaseModel):
|
|
64
|
-
company_id: SecretStr = Field(
|
|
65
|
-
|
|
67
|
+
company_id: SecretStr = Field(
|
|
68
|
+
...,
|
|
69
|
+
description="The company ID.",
|
|
70
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
71
|
+
)
|
|
72
|
+
user_id: SecretStr = Field(
|
|
73
|
+
...,
|
|
74
|
+
description="The user ID.",
|
|
75
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
76
|
+
)
|
|
66
77
|
|
|
67
78
|
def get_confidential_company_id(self) -> str:
|
|
68
79
|
return self.company_id.get_secret_value()
|
|
@@ -88,12 +99,14 @@ class UniqueAuth(BaseSettings):
|
|
|
88
99
|
"UNIQUE_AUTH_COMPANY_ID",
|
|
89
100
|
"COMPANY_ID",
|
|
90
101
|
),
|
|
102
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
91
103
|
)
|
|
92
104
|
user_id: SecretStr = Field(
|
|
93
105
|
default=SecretStr("dummy_user_id"),
|
|
94
106
|
validation_alias=AliasChoices(
|
|
95
107
|
"unique_auth_user_id", "user_id", "UNIQUE_AUTH_USER_ID", "USER_ID"
|
|
96
108
|
),
|
|
109
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
97
110
|
)
|
|
98
111
|
|
|
99
112
|
model_config = SettingsConfigDict(
|
|
@@ -101,6 +114,8 @@ class UniqueAuth(BaseSettings):
|
|
|
101
114
|
env_file_encoding="utf-8",
|
|
102
115
|
case_sensitive=False,
|
|
103
116
|
extra="ignore",
|
|
117
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
118
|
+
env_file=find_env_file("unique.env", ".env", required=False),
|
|
104
119
|
)
|
|
105
120
|
|
|
106
121
|
def get_confidential_company_id(self) -> str:
|
|
@@ -146,8 +161,16 @@ class ChatContextProtocol(Protocol):
|
|
|
146
161
|
|
|
147
162
|
|
|
148
163
|
class ChatContext(BaseModel):
|
|
149
|
-
chat_id: str = Field(
|
|
150
|
-
|
|
164
|
+
chat_id: str = Field(
|
|
165
|
+
...,
|
|
166
|
+
description="The chat ID.",
|
|
167
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
168
|
+
)
|
|
169
|
+
assistant_id: str = Field(
|
|
170
|
+
...,
|
|
171
|
+
description="The assistant ID.",
|
|
172
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
173
|
+
)
|
|
151
174
|
|
|
152
175
|
_last_assistant_message_id: str | None = PrivateAttr(default=None)
|
|
153
176
|
_last_user_message_id: str | None = PrivateAttr(default=None)
|
|
@@ -254,6 +277,7 @@ class UniqueApp(BaseSettings):
|
|
|
254
277
|
default="http://localhost:8092/",
|
|
255
278
|
deprecated="Use UniqueApi.base_url instead",
|
|
256
279
|
)
|
|
280
|
+
|
|
257
281
|
endpoint: str = Field(default="dummy")
|
|
258
282
|
|
|
259
283
|
endpoint_secret: SecretStr = Field(
|
|
@@ -273,8 +297,12 @@ class UniqueApp(BaseSettings):
|
|
|
273
297
|
model_config = SettingsConfigDict(
|
|
274
298
|
env_prefix="unique_app_",
|
|
275
299
|
env_file_encoding="utf-8",
|
|
300
|
+
env_file=find_env_file("unique.env", ".env", required=False),
|
|
276
301
|
case_sensitive=False,
|
|
277
302
|
extra="ignore",
|
|
303
|
+
validate_by_name=True,
|
|
304
|
+
validate_by_alias=True,
|
|
305
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
278
306
|
)
|
|
279
307
|
|
|
280
308
|
|
|
@@ -305,8 +333,10 @@ class UniqueApi(BaseSettings):
|
|
|
305
333
|
model_config = SettingsConfigDict(
|
|
306
334
|
env_prefix="unique_api_",
|
|
307
335
|
env_file_encoding="utf-8",
|
|
336
|
+
env_file=find_env_file("unique.env", ".env", required=False),
|
|
308
337
|
case_sensitive=False,
|
|
309
338
|
extra="ignore",
|
|
339
|
+
frozen=UNIQUE_TOOLKIT_FEATURE_FLAGS.un_18894_freeze_unique_settings.is_enabled(),
|
|
310
340
|
)
|
|
311
341
|
|
|
312
342
|
@model_validator(mode="after")
|
|
@@ -366,22 +396,13 @@ class UniqueChatEventFilterOptions(BaseSettings):
|
|
|
366
396
|
description="The module (reference) names in code to filter by. Default is all modules.",
|
|
367
397
|
)
|
|
368
398
|
|
|
369
|
-
model_config =
|
|
370
|
-
env_prefix="unique_chat_event_filter_options_",
|
|
371
|
-
env_file_encoding="utf-8",
|
|
372
|
-
case_sensitive=False,
|
|
373
|
-
extra="ignore",
|
|
374
|
-
)
|
|
399
|
+
model_config = CHAT_EVENT_FILTER_OPTIONS_SETTINGS
|
|
375
400
|
|
|
376
401
|
@model_validator(mode="after")
|
|
377
402
|
def _warn_about_defaults(self) -> Self:
|
|
378
403
|
return warn_about_defaults(self)
|
|
379
404
|
|
|
380
405
|
|
|
381
|
-
class EnvFileNotFoundError(FileNotFoundError):
|
|
382
|
-
"""Raised when no environment file can be found in any of the expected locations."""
|
|
383
|
-
|
|
384
|
-
|
|
385
406
|
class UniqueEnvironment:
|
|
386
407
|
"""
|
|
387
408
|
Contains all settings that come exclusively from the environment.
|
|
@@ -474,47 +495,6 @@ class UniqueSettings:
|
|
|
474
495
|
env_file if (env_file and env_file.exists()) else None
|
|
475
496
|
)
|
|
476
497
|
|
|
477
|
-
@classmethod
|
|
478
|
-
def _find_env_file(cls, filename: str = "unique.env") -> Path:
|
|
479
|
-
"""Find environment file using cross-platform fallback locations.
|
|
480
|
-
|
|
481
|
-
Search order:
|
|
482
|
-
1. UNIQUE_ENV_FILE environment variable
|
|
483
|
-
2. Current working directory
|
|
484
|
-
3. User config directory (cross-platform via platformdirs)
|
|
485
|
-
|
|
486
|
-
Args:
|
|
487
|
-
filename: Name of the environment file (default: 'unique.env')
|
|
488
|
-
|
|
489
|
-
Returns:
|
|
490
|
-
Path to the environment file.
|
|
491
|
-
|
|
492
|
-
Raises:
|
|
493
|
-
EnvFileNotFoundError: If no environment file is found in any location.
|
|
494
|
-
"""
|
|
495
|
-
locations = [
|
|
496
|
-
# 1. Explicit environment variable
|
|
497
|
-
Path(env_path) if (env_path := os.environ.get("UNIQUE_ENV_FILE")) else None,
|
|
498
|
-
# 2. Current working directory
|
|
499
|
-
Path.cwd() / filename,
|
|
500
|
-
# 3. User config directory (cross-platform)
|
|
501
|
-
Path(user_config_dir("unique", "unique-toolkit")) / filename,
|
|
502
|
-
]
|
|
503
|
-
|
|
504
|
-
for location in locations:
|
|
505
|
-
if location and location.exists() and location.is_file():
|
|
506
|
-
return location
|
|
507
|
-
|
|
508
|
-
# If no file found, provide helpful error message
|
|
509
|
-
searched_locations = [str(loc) for loc in locations if loc is not None]
|
|
510
|
-
raise EnvFileNotFoundError(
|
|
511
|
-
f"Environment file '{filename}' not found. Searched locations:\n"
|
|
512
|
-
+ "\n".join(f" - {loc}" for loc in searched_locations)
|
|
513
|
-
+ "\n\nTo fix this:\n"
|
|
514
|
-
+ f" 1. Create {filename} in one of the above locations, or\n"
|
|
515
|
-
+ f" 2. Set UNIQUE_ENV_FILE environment variable to point to your {filename} file"
|
|
516
|
-
)
|
|
517
|
-
|
|
518
498
|
@classmethod
|
|
519
499
|
def from_env(
|
|
520
500
|
cls,
|
|
@@ -563,7 +543,7 @@ class UniqueSettings:
|
|
|
563
543
|
UniqueSettings instance with values loaded from found env file or environment variables.
|
|
564
544
|
"""
|
|
565
545
|
try:
|
|
566
|
-
env_file =
|
|
546
|
+
env_file = find_env_file(filename)
|
|
567
547
|
logger.info(f"Environment file found at {env_file}")
|
|
568
548
|
return cls.from_env(env_file=env_file)
|
|
569
549
|
except EnvFileNotFoundError:
|
|
@@ -876,17 +876,17 @@ def get_content_info(
|
|
|
876
876
|
skip: int | None = None,
|
|
877
877
|
take: int | None = None,
|
|
878
878
|
file_path: str | None = None,
|
|
879
|
-
):
|
|
879
|
+
) -> PaginatedContentInfos:
|
|
880
880
|
"""Gets the info of a content."""
|
|
881
881
|
|
|
882
882
|
get_info_params = unique_sdk.Content.ContentInfoParams(
|
|
883
883
|
metadataFilter=metadata_filter or None, # Dict cannot be empty
|
|
884
884
|
)
|
|
885
|
-
if skip:
|
|
885
|
+
if skip is not None:
|
|
886
886
|
get_info_params["skip"] = skip
|
|
887
|
-
if take:
|
|
887
|
+
if take is not None:
|
|
888
888
|
get_info_params["take"] = take
|
|
889
|
-
if file_path:
|
|
889
|
+
if file_path is not None:
|
|
890
890
|
get_info_params["filePath"] = file_path
|
|
891
891
|
|
|
892
892
|
content_info = unique_sdk.Content.get_infos(
|
|
@@ -897,6 +897,35 @@ def get_content_info(
|
|
|
897
897
|
)
|
|
898
898
|
|
|
899
899
|
|
|
900
|
+
async def get_content_info_async(
|
|
901
|
+
user_id: str,
|
|
902
|
+
company_id: str,
|
|
903
|
+
*,
|
|
904
|
+
metadata_filter: dict[str, Any] | None = None,
|
|
905
|
+
skip: int | None = None,
|
|
906
|
+
take: int | None = None,
|
|
907
|
+
file_path: str | None = None,
|
|
908
|
+
) -> PaginatedContentInfos:
|
|
909
|
+
"""Gets the info of a content."""
|
|
910
|
+
|
|
911
|
+
get_info_params = unique_sdk.Content.ContentInfoParams(
|
|
912
|
+
metadataFilter=metadata_filter or None, # Dict cannot be empty
|
|
913
|
+
)
|
|
914
|
+
if skip is not None:
|
|
915
|
+
get_info_params["skip"] = skip
|
|
916
|
+
if take is not None:
|
|
917
|
+
get_info_params["take"] = take
|
|
918
|
+
if file_path is not None:
|
|
919
|
+
get_info_params["filePath"] = file_path
|
|
920
|
+
|
|
921
|
+
content_info = unique_sdk.Content.get_infos_async(
|
|
922
|
+
user_id=user_id, company_id=company_id, **get_info_params
|
|
923
|
+
)
|
|
924
|
+
return PaginatedContentInfos.model_validate(
|
|
925
|
+
await content_info, by_alias=True, by_name=True
|
|
926
|
+
)
|
|
927
|
+
|
|
928
|
+
|
|
900
929
|
def get_folder_info(user_id: str, company_id: str, *, scope_id: str) -> FolderInfo:
|
|
901
930
|
info = unique_sdk.Folder.get_info(
|
|
902
931
|
user_id=user_id, company_id=company_id, scopeId=scope_id
|
|
@@ -905,6 +934,16 @@ def get_folder_info(user_id: str, company_id: str, *, scope_id: str) -> FolderIn
|
|
|
905
934
|
return FolderInfo.model_validate(info, by_alias=True, by_name=True)
|
|
906
935
|
|
|
907
936
|
|
|
937
|
+
async def get_folder_info_async(
|
|
938
|
+
user_id: str, company_id: str, *, scope_id: str
|
|
939
|
+
) -> FolderInfo:
|
|
940
|
+
info = unique_sdk.Folder.get_info_async(
|
|
941
|
+
user_id=user_id, company_id=company_id, scopeId=scope_id
|
|
942
|
+
)
|
|
943
|
+
|
|
944
|
+
return FolderInfo.model_validate(await info, by_alias=True, by_name=True)
|
|
945
|
+
|
|
946
|
+
|
|
908
947
|
def update_content(
|
|
909
948
|
user_id: str,
|
|
910
949
|
company_id: str,
|