unique_toolkit 1.78.0__tar.gz → 1.79.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.78.0 → unique_toolkit-1.79.0}/PKG-INFO +1 -1
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/pyproject.toml +1 -1
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +11 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/unique_settings.py +16 -0
- unique_toolkit-1.79.0/unique_toolkit/experimental/content_folder/__init__.py +67 -0
- unique_toolkit-1.79.0/unique_toolkit/experimental/content_folder/functions.py +519 -0
- unique_toolkit-1.79.0/unique_toolkit/experimental/content_folder/schemas.py +161 -0
- unique_toolkit-1.79.0/unique_toolkit/experimental/content_folder/service.py +646 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/services/factory.py +4 -1
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/README.md +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/identity/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/identity/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/identity/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/scheduled_task/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/scheduled_task/cron.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/scheduled_task/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/scheduled_task/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/experimental/scheduled_task/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.78.0 → unique_toolkit-1.79.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.79.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>
|
|
@@ -91,6 +91,17 @@ class FeatureFlags(BaseSettings):
|
|
|
91
91
|
description="Use selected_uploaded_files from event payload instead of querying uploaded files from the backend. Can be 'true' or comma-separated company IDs.",
|
|
92
92
|
)
|
|
93
93
|
|
|
94
|
+
enable_mcp_metadata_fallback_un_19145: FeatureFlag = Field(
|
|
95
|
+
default=FeatureFlag(True),
|
|
96
|
+
description=(
|
|
97
|
+
"When namespaced MCP `_meta` keys (`unique.app/auth/user-id`, "
|
|
98
|
+
"`unique.app/chat/chat-id`, ...) are absent, fall back to the flat camelCase "
|
|
99
|
+
"keys (`userId`, `companyId`, `chatId`, `messageId`) still emitted "
|
|
100
|
+
"by pre-#22513 monorepo builds. Flip to `False` once the monorepo "
|
|
101
|
+
"rollout of namespaced keys is complete."
|
|
102
|
+
),
|
|
103
|
+
)
|
|
104
|
+
|
|
94
105
|
model_config = SettingsConfigDict(
|
|
95
106
|
extra="ignore",
|
|
96
107
|
env_prefix="FEATURE_FLAG_",
|
|
@@ -623,6 +623,22 @@ class UniqueSettings:
|
|
|
623
623
|
env_file=self._env_file,
|
|
624
624
|
)
|
|
625
625
|
|
|
626
|
+
def with_chat(self, chat: ChatContextProtocol | None) -> Self:
|
|
627
|
+
"""Return a copy of the settings with the new chat context.
|
|
628
|
+
|
|
629
|
+
Passing ``None`` clears any existing chat context; this mirrors the
|
|
630
|
+
semantics of :meth:`with_auth` and is how MCP request handlers opt out
|
|
631
|
+
of chat scoping when the request does not carry chat identifiers.
|
|
632
|
+
"""
|
|
633
|
+
return self.__class__(
|
|
634
|
+
auth=self._context.auth,
|
|
635
|
+
app=self.app,
|
|
636
|
+
api=self.api,
|
|
637
|
+
chat_event_filter_options=self.chat_event_filter_options,
|
|
638
|
+
chat=chat,
|
|
639
|
+
env_file=self._env_file,
|
|
640
|
+
)
|
|
641
|
+
|
|
626
642
|
@property
|
|
627
643
|
def api(self) -> UniqueApi:
|
|
628
644
|
return self._env.api
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Folder (content-scope) management: :class:`ContentFolder`, schemas, and pure helpers.
|
|
2
|
+
|
|
3
|
+
A knowledge-base folder is a *content scope*; its primary key is ``scopeId`` in the HTTP
|
|
4
|
+
API. The toolkit uses **scope_id** for that value everywhere (same string as in responses).
|
|
5
|
+
|
|
6
|
+
**Creating folders** mirrors the backend in two ways:
|
|
7
|
+
|
|
8
|
+
- **Absolute paths** — full paths from the root, e.g. ``"/Legal/Contracts"`` (pass ``paths=`` as
|
|
9
|
+
``str`` or ``list[str]``).
|
|
10
|
+
- **Under a parent** — ``parent_scope_id`` plus path **segments** (e.g. ``["2024", "Q1"]``),
|
|
11
|
+
not a second full path string.
|
|
12
|
+
|
|
13
|
+
By default, :class:`ContentFolder` grants the acting user READ+WRITE on each new folder
|
|
14
|
+
(``private_to_creator=True``) unless you inherit parent ACL or opt out—see service docs.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from unique_toolkit.experimental.content_folder.functions import (
|
|
20
|
+
create,
|
|
21
|
+
create_access,
|
|
22
|
+
create_access_async,
|
|
23
|
+
create_async,
|
|
24
|
+
creator_scope_access_grants,
|
|
25
|
+
delete,
|
|
26
|
+
delete_access,
|
|
27
|
+
delete_access_async,
|
|
28
|
+
delete_async,
|
|
29
|
+
read,
|
|
30
|
+
read_async,
|
|
31
|
+
)
|
|
32
|
+
from unique_toolkit.experimental.content_folder.schemas import (
|
|
33
|
+
AccessEntityType,
|
|
34
|
+
AccessType,
|
|
35
|
+
CreatedFolder,
|
|
36
|
+
DeleteFolderItem,
|
|
37
|
+
DeleteResult,
|
|
38
|
+
FolderChild,
|
|
39
|
+
FolderDetail,
|
|
40
|
+
FolderInfo,
|
|
41
|
+
ScopeAccess,
|
|
42
|
+
)
|
|
43
|
+
from unique_toolkit.experimental.content_folder.service import ContentFolder
|
|
44
|
+
|
|
45
|
+
__all__ = [
|
|
46
|
+
"AccessEntityType",
|
|
47
|
+
"AccessType",
|
|
48
|
+
"ContentFolder",
|
|
49
|
+
"CreatedFolder",
|
|
50
|
+
"DeleteFolderItem",
|
|
51
|
+
"DeleteResult",
|
|
52
|
+
"FolderChild",
|
|
53
|
+
"FolderDetail",
|
|
54
|
+
"FolderInfo",
|
|
55
|
+
"ScopeAccess",
|
|
56
|
+
"create",
|
|
57
|
+
"create_access",
|
|
58
|
+
"create_access_async",
|
|
59
|
+
"create_async",
|
|
60
|
+
"creator_scope_access_grants",
|
|
61
|
+
"delete",
|
|
62
|
+
"delete_access",
|
|
63
|
+
"delete_access_async",
|
|
64
|
+
"delete_async",
|
|
65
|
+
"read",
|
|
66
|
+
"read_async",
|
|
67
|
+
]
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
"""Low-level calls to ``unique_sdk.Folder``.
|
|
2
|
+
|
|
3
|
+
In the Unique API, a knowledge-base folder is a **content scope**; its primary key is
|
|
4
|
+
``scopeId``. This module uses ``scope_id`` in Python signatures and passes it through
|
|
5
|
+
as ``scopeId`` to the SDK. ``parent_scope_id`` maps to ``parentScopeId`` when creating
|
|
6
|
+
under an existing folder.
|
|
7
|
+
|
|
8
|
+
Folder **creation** supports two shapes that match :class:`unique_sdk.Folder.CreateParams`:
|
|
9
|
+
|
|
10
|
+
1. **Absolute paths** — full paths from the knowledge-base root, e.g. ``"/Reports/Q1"``.
|
|
11
|
+
Sent as ``paths`` in the API.
|
|
12
|
+
2. **Under an existing parent** — the parent folder’s **scope id** plus path *segments*
|
|
13
|
+
to create under it, e.g. parent ``scope_abc`` and segments ``["2024", "Q1"]``. Sent as
|
|
14
|
+
``parentScopeId`` + ``relativePaths`` in the API.
|
|
15
|
+
|
|
16
|
+
**Private to creator (toolkit default):** When ``private_to_creator`` is true (the default) and
|
|
17
|
+
``inherit_access`` is false, after ``create_paths`` the toolkit grants the acting ``user_id``
|
|
18
|
+
READ and WRITE on **each** folder returned in ``createdFolders``. This makes the new chain
|
|
19
|
+
usable by the creator; it does **not** remove ACL entries the API may add for other principals—
|
|
20
|
+
for strict “only this user” guarantees, the backend would need to expose replace/clear ACL or
|
|
21
|
+
you must call :func:`delete_access` for unwanted grants when you know them.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import asyncio
|
|
27
|
+
from typing import cast
|
|
28
|
+
|
|
29
|
+
import unique_sdk
|
|
30
|
+
|
|
31
|
+
from unique_toolkit.experimental.content_folder.schemas import (
|
|
32
|
+
AccessEntityType,
|
|
33
|
+
AccessType,
|
|
34
|
+
CreatedFolder,
|
|
35
|
+
DeleteResult,
|
|
36
|
+
FolderDetail,
|
|
37
|
+
FolderInfo,
|
|
38
|
+
ScopeAccess,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def create(
|
|
43
|
+
user_id: str,
|
|
44
|
+
company_id: str,
|
|
45
|
+
*,
|
|
46
|
+
absolute_paths: list[str] | None = None,
|
|
47
|
+
parent_scope_id: str | None = None,
|
|
48
|
+
relative_path_segments: list[str] | None = None,
|
|
49
|
+
inherit_access: bool = False,
|
|
50
|
+
private_to_creator: bool = True,
|
|
51
|
+
) -> list[CreatedFolder]:
|
|
52
|
+
"""Create folders using exactly one of the two API modes (see module docstring).
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
user_id: Acting user (SDK requirement).
|
|
56
|
+
company_id: Owning company (SDK requirement).
|
|
57
|
+
absolute_paths: Full paths from root; mutually exclusive with parent mode.
|
|
58
|
+
parent_scope_id: Scope id of the parent folder; use with ``relative_path_segments``.
|
|
59
|
+
relative_path_segments: Path segments under that parent (not full paths).
|
|
60
|
+
inherit_access: When true, new folders copy access rules from the parent.
|
|
61
|
+
private_to_creator: When true (default) and ``inherit_access`` is false, grant the
|
|
62
|
+
acting user READ+WRITE on every created folder. Ignored when ``inherit_access`` is true.
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
ValueError: If neither mode is specified correctly or both modes are mixed.
|
|
66
|
+
"""
|
|
67
|
+
params = _build_create_params(
|
|
68
|
+
absolute_paths=absolute_paths,
|
|
69
|
+
parent_scope_id=parent_scope_id,
|
|
70
|
+
relative_path_segments=relative_path_segments,
|
|
71
|
+
inherit_access=inherit_access,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
result = unique_sdk.Folder.create_paths(
|
|
75
|
+
user_id=user_id,
|
|
76
|
+
company_id=company_id,
|
|
77
|
+
**params,
|
|
78
|
+
)
|
|
79
|
+
created = [
|
|
80
|
+
CreatedFolder.model_validate(f, by_alias=True, by_name=True)
|
|
81
|
+
for f in result["createdFolders"]
|
|
82
|
+
]
|
|
83
|
+
if private_to_creator and not inherit_access and created:
|
|
84
|
+
_grant_creator_access_on_created_folders(
|
|
85
|
+
user_id=user_id,
|
|
86
|
+
company_id=company_id,
|
|
87
|
+
created=created,
|
|
88
|
+
)
|
|
89
|
+
return created
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
async def create_async(
|
|
93
|
+
user_id: str,
|
|
94
|
+
company_id: str,
|
|
95
|
+
*,
|
|
96
|
+
absolute_paths: list[str] | None = None,
|
|
97
|
+
parent_scope_id: str | None = None,
|
|
98
|
+
relative_path_segments: list[str] | None = None,
|
|
99
|
+
inherit_access: bool = False,
|
|
100
|
+
private_to_creator: bool = True,
|
|
101
|
+
) -> list[CreatedFolder]:
|
|
102
|
+
"""Async variant of :func:`create`."""
|
|
103
|
+
params = _build_create_params(
|
|
104
|
+
absolute_paths=absolute_paths,
|
|
105
|
+
parent_scope_id=parent_scope_id,
|
|
106
|
+
relative_path_segments=relative_path_segments,
|
|
107
|
+
inherit_access=inherit_access,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
result = await unique_sdk.Folder.create_paths_async(
|
|
111
|
+
user_id=user_id,
|
|
112
|
+
company_id=company_id,
|
|
113
|
+
**params,
|
|
114
|
+
)
|
|
115
|
+
created = [
|
|
116
|
+
CreatedFolder.model_validate(f, by_alias=True, by_name=True)
|
|
117
|
+
for f in result["createdFolders"]
|
|
118
|
+
]
|
|
119
|
+
if private_to_creator and not inherit_access and created:
|
|
120
|
+
await _grant_creator_access_on_created_folders_async(
|
|
121
|
+
user_id=user_id,
|
|
122
|
+
company_id=company_id,
|
|
123
|
+
created=created,
|
|
124
|
+
)
|
|
125
|
+
return created
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _build_create_params(
|
|
129
|
+
*,
|
|
130
|
+
absolute_paths: list[str] | None,
|
|
131
|
+
parent_scope_id: str | None,
|
|
132
|
+
relative_path_segments: list[str] | None,
|
|
133
|
+
inherit_access: bool,
|
|
134
|
+
) -> unique_sdk.Folder.CreateParams:
|
|
135
|
+
has_absolute = absolute_paths is not None
|
|
136
|
+
has_parent = parent_scope_id is not None or relative_path_segments is not None
|
|
137
|
+
|
|
138
|
+
if has_absolute and has_parent:
|
|
139
|
+
raise ValueError(
|
|
140
|
+
"Choose one creation style: either absolute_paths=[...] "
|
|
141
|
+
"or parent_scope_id=... with relative_path_segments=[...], not both."
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
if has_absolute:
|
|
145
|
+
if not absolute_paths:
|
|
146
|
+
raise ValueError("absolute_paths must be a non-empty list when provided.")
|
|
147
|
+
params: unique_sdk.Folder.CreateParams = unique_sdk.Folder.CreateParams(
|
|
148
|
+
paths=absolute_paths
|
|
149
|
+
)
|
|
150
|
+
elif parent_scope_id is not None and relative_path_segments is not None:
|
|
151
|
+
if not relative_path_segments:
|
|
152
|
+
raise ValueError(
|
|
153
|
+
"relative_path_segments must be a non-empty list when creating under a parent."
|
|
154
|
+
)
|
|
155
|
+
params = unique_sdk.Folder.CreateParams(
|
|
156
|
+
parentScopeId=parent_scope_id,
|
|
157
|
+
relativePaths=relative_path_segments,
|
|
158
|
+
)
|
|
159
|
+
else:
|
|
160
|
+
raise ValueError(
|
|
161
|
+
"Provide absolute_paths=[...] for full paths from the root, "
|
|
162
|
+
"or parent_scope_id=... together with relative_path_segments=[...] "
|
|
163
|
+
"to create nested folders under an existing folder."
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
if inherit_access:
|
|
167
|
+
params["inheritAccess"] = True
|
|
168
|
+
return params
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def creator_scope_access_grants(user_id: str) -> list[ScopeAccess]:
|
|
172
|
+
"""READ and WRITE for the acting user (used for creator-private folders)."""
|
|
173
|
+
return [
|
|
174
|
+
ScopeAccess(
|
|
175
|
+
entity_id=user_id,
|
|
176
|
+
type=AccessType.READ,
|
|
177
|
+
entity_type=AccessEntityType.USER,
|
|
178
|
+
),
|
|
179
|
+
ScopeAccess(
|
|
180
|
+
entity_id=user_id,
|
|
181
|
+
type=AccessType.WRITE,
|
|
182
|
+
entity_type=AccessEntityType.USER,
|
|
183
|
+
),
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def _grant_creator_access_on_created_folders(
|
|
188
|
+
*,
|
|
189
|
+
user_id: str,
|
|
190
|
+
company_id: str,
|
|
191
|
+
created: list[CreatedFolder],
|
|
192
|
+
) -> None:
|
|
193
|
+
grants = creator_scope_access_grants(user_id)
|
|
194
|
+
for folder in created:
|
|
195
|
+
create_access(
|
|
196
|
+
user_id=user_id,
|
|
197
|
+
company_id=company_id,
|
|
198
|
+
scope_id=folder.id,
|
|
199
|
+
scope_accesses=grants,
|
|
200
|
+
apply_to_sub_scopes=False,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
async def _grant_creator_access_on_created_folders_async(
|
|
205
|
+
*,
|
|
206
|
+
user_id: str,
|
|
207
|
+
company_id: str,
|
|
208
|
+
created: list[CreatedFolder],
|
|
209
|
+
) -> None:
|
|
210
|
+
grants = creator_scope_access_grants(user_id)
|
|
211
|
+
await asyncio.gather(
|
|
212
|
+
*[
|
|
213
|
+
create_access_async(
|
|
214
|
+
user_id=user_id,
|
|
215
|
+
company_id=company_id,
|
|
216
|
+
scope_id=folder.id,
|
|
217
|
+
scope_accesses=grants,
|
|
218
|
+
apply_to_sub_scopes=False,
|
|
219
|
+
)
|
|
220
|
+
for folder in created
|
|
221
|
+
]
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# ── Read ──────────────────────────────────────────────────────────────────────
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def read(
|
|
229
|
+
user_id: str,
|
|
230
|
+
company_id: str,
|
|
231
|
+
*,
|
|
232
|
+
scope_id: str | None = None,
|
|
233
|
+
folder_path: str | None = None,
|
|
234
|
+
) -> FolderInfo:
|
|
235
|
+
"""Load folder metadata by ``scope_id`` or ``folder_path`` (exactly one required)."""
|
|
236
|
+
params = _build_get_params(scope_id=scope_id, folder_path=folder_path)
|
|
237
|
+
info = unique_sdk.Folder.get_info(
|
|
238
|
+
user_id=user_id,
|
|
239
|
+
company_id=company_id,
|
|
240
|
+
**params,
|
|
241
|
+
)
|
|
242
|
+
return FolderInfo.model_validate(info, by_alias=True, by_name=True)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
async def read_async(
|
|
246
|
+
user_id: str,
|
|
247
|
+
company_id: str,
|
|
248
|
+
*,
|
|
249
|
+
scope_id: str | None = None,
|
|
250
|
+
folder_path: str | None = None,
|
|
251
|
+
) -> FolderInfo:
|
|
252
|
+
"""Async variant of :func:`read`."""
|
|
253
|
+
params = _build_get_params(scope_id=scope_id, folder_path=folder_path)
|
|
254
|
+
info = await unique_sdk.Folder.get_info_async(
|
|
255
|
+
user_id=user_id,
|
|
256
|
+
company_id=company_id,
|
|
257
|
+
**params,
|
|
258
|
+
)
|
|
259
|
+
return FolderInfo.model_validate(info, by_alias=True, by_name=True)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# ── Access management ─────────────────────────────────────────────────────────
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def _build_add_access_params(
|
|
266
|
+
*,
|
|
267
|
+
scope_id: str | None,
|
|
268
|
+
folder_path: str | None,
|
|
269
|
+
scope_accesses: list[ScopeAccess],
|
|
270
|
+
apply_to_sub_scopes: bool,
|
|
271
|
+
) -> unique_sdk.Folder.AddAccessParams:
|
|
272
|
+
scope_id, folder_path = _validate_scope_address(
|
|
273
|
+
scope_id=scope_id, folder_path=folder_path
|
|
274
|
+
)
|
|
275
|
+
params = unique_sdk.Folder.AddAccessParams(
|
|
276
|
+
scopeAccesses=_to_sdk_scope_accesses(scope_accesses),
|
|
277
|
+
applyToSubScopes=apply_to_sub_scopes,
|
|
278
|
+
)
|
|
279
|
+
if scope_id is not None:
|
|
280
|
+
params["scopeId"] = scope_id
|
|
281
|
+
if folder_path is not None:
|
|
282
|
+
params["folderPath"] = folder_path
|
|
283
|
+
return params
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def _build_remove_access_params(
|
|
287
|
+
*,
|
|
288
|
+
scope_id: str | None,
|
|
289
|
+
folder_path: str | None,
|
|
290
|
+
scope_accesses: list[ScopeAccess],
|
|
291
|
+
apply_to_sub_scopes: bool,
|
|
292
|
+
) -> unique_sdk.Folder.RemoveAccessParams:
|
|
293
|
+
scope_id, folder_path = _validate_scope_address(
|
|
294
|
+
scope_id=scope_id, folder_path=folder_path
|
|
295
|
+
)
|
|
296
|
+
params = unique_sdk.Folder.RemoveAccessParams(
|
|
297
|
+
scopeAccesses=_to_sdk_scope_accesses(scope_accesses),
|
|
298
|
+
applyToSubScopes=apply_to_sub_scopes,
|
|
299
|
+
)
|
|
300
|
+
if scope_id is not None:
|
|
301
|
+
params["scopeId"] = scope_id
|
|
302
|
+
if folder_path is not None:
|
|
303
|
+
params["folderPath"] = folder_path
|
|
304
|
+
return params
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def create_access(
|
|
308
|
+
user_id: str,
|
|
309
|
+
company_id: str,
|
|
310
|
+
*,
|
|
311
|
+
scope_id: str | None = None,
|
|
312
|
+
folder_path: str | None = None,
|
|
313
|
+
scope_accesses: list[ScopeAccess],
|
|
314
|
+
apply_to_sub_scopes: bool = False,
|
|
315
|
+
) -> FolderDetail:
|
|
316
|
+
"""Grant READ/WRITE to users or groups (address folder by ``scope_id`` or ``folder_path``)."""
|
|
317
|
+
params = _build_add_access_params(
|
|
318
|
+
scope_id=scope_id,
|
|
319
|
+
folder_path=folder_path,
|
|
320
|
+
scope_accesses=scope_accesses,
|
|
321
|
+
apply_to_sub_scopes=apply_to_sub_scopes,
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
result = unique_sdk.Folder.add_access(
|
|
325
|
+
user_id=user_id,
|
|
326
|
+
company_id=company_id,
|
|
327
|
+
**params,
|
|
328
|
+
)
|
|
329
|
+
return FolderDetail.model_validate(result, by_alias=True, by_name=True)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
async def create_access_async(
|
|
333
|
+
user_id: str,
|
|
334
|
+
company_id: str,
|
|
335
|
+
*,
|
|
336
|
+
scope_id: str | None = None,
|
|
337
|
+
folder_path: str | None = None,
|
|
338
|
+
scope_accesses: list[ScopeAccess],
|
|
339
|
+
apply_to_sub_scopes: bool = False,
|
|
340
|
+
) -> FolderDetail:
|
|
341
|
+
"""Async variant of :func:`create_access`."""
|
|
342
|
+
params = _build_add_access_params(
|
|
343
|
+
scope_id=scope_id,
|
|
344
|
+
folder_path=folder_path,
|
|
345
|
+
scope_accesses=scope_accesses,
|
|
346
|
+
apply_to_sub_scopes=apply_to_sub_scopes,
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
result = await unique_sdk.Folder.add_access_async(
|
|
350
|
+
user_id=user_id,
|
|
351
|
+
company_id=company_id,
|
|
352
|
+
**params,
|
|
353
|
+
)
|
|
354
|
+
return FolderDetail.model_validate(result, by_alias=True, by_name=True)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def delete_access(
|
|
358
|
+
user_id: str,
|
|
359
|
+
company_id: str,
|
|
360
|
+
*,
|
|
361
|
+
scope_id: str | None = None,
|
|
362
|
+
folder_path: str | None = None,
|
|
363
|
+
scope_accesses: list[ScopeAccess],
|
|
364
|
+
apply_to_sub_scopes: bool = False,
|
|
365
|
+
) -> FolderDetail:
|
|
366
|
+
"""Revoke access entries (address folder by ``scope_id`` or ``folder_path``)."""
|
|
367
|
+
params = _build_remove_access_params(
|
|
368
|
+
scope_id=scope_id,
|
|
369
|
+
folder_path=folder_path,
|
|
370
|
+
scope_accesses=scope_accesses,
|
|
371
|
+
apply_to_sub_scopes=apply_to_sub_scopes,
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
result = unique_sdk.Folder.remove_access(
|
|
375
|
+
user_id=user_id,
|
|
376
|
+
company_id=company_id,
|
|
377
|
+
**params,
|
|
378
|
+
)
|
|
379
|
+
return FolderDetail.model_validate(result, by_alias=True, by_name=True)
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
async def delete_access_async(
|
|
383
|
+
user_id: str,
|
|
384
|
+
company_id: str,
|
|
385
|
+
*,
|
|
386
|
+
scope_id: str | None = None,
|
|
387
|
+
folder_path: str | None = None,
|
|
388
|
+
scope_accesses: list[ScopeAccess],
|
|
389
|
+
apply_to_sub_scopes: bool = False,
|
|
390
|
+
) -> FolderDetail:
|
|
391
|
+
"""Async variant of :func:`delete_access`."""
|
|
392
|
+
params = _build_remove_access_params(
|
|
393
|
+
scope_id=scope_id,
|
|
394
|
+
folder_path=folder_path,
|
|
395
|
+
scope_accesses=scope_accesses,
|
|
396
|
+
apply_to_sub_scopes=apply_to_sub_scopes,
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
result = await unique_sdk.Folder.remove_access_async(
|
|
400
|
+
user_id=user_id,
|
|
401
|
+
company_id=company_id,
|
|
402
|
+
**params,
|
|
403
|
+
)
|
|
404
|
+
return FolderDetail.model_validate(result, by_alias=True, by_name=True)
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
# ── Delete ────────────────────────────────────────────────────────────────────
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def delete(
|
|
411
|
+
user_id: str,
|
|
412
|
+
company_id: str,
|
|
413
|
+
*,
|
|
414
|
+
scope_id: str | None = None,
|
|
415
|
+
folder_path: str | None = None,
|
|
416
|
+
recursive: bool = False,
|
|
417
|
+
) -> DeleteResult:
|
|
418
|
+
"""Delete a folder by ``scope_id`` or ``folder_path`` (exactly one required).
|
|
419
|
+
|
|
420
|
+
Args:
|
|
421
|
+
user_id: Acting user (SDK requirement).
|
|
422
|
+
company_id: Owning company (SDK requirement).
|
|
423
|
+
scope_id: Scope id of the folder to delete.
|
|
424
|
+
folder_path: Absolute path from the knowledge-base root.
|
|
425
|
+
recursive: When true, request recursive deletion per API semantics.
|
|
426
|
+
"""
|
|
427
|
+
params = _build_delete_params(
|
|
428
|
+
scope_id=scope_id,
|
|
429
|
+
folder_path=folder_path,
|
|
430
|
+
recursive=recursive,
|
|
431
|
+
)
|
|
432
|
+
raw = unique_sdk.Folder.delete(
|
|
433
|
+
user_id=user_id,
|
|
434
|
+
company_id=company_id,
|
|
435
|
+
**params,
|
|
436
|
+
)
|
|
437
|
+
return DeleteResult.model_validate(raw, by_alias=True, by_name=True)
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
async def delete_async(
|
|
441
|
+
user_id: str,
|
|
442
|
+
company_id: str,
|
|
443
|
+
*,
|
|
444
|
+
scope_id: str | None = None,
|
|
445
|
+
folder_path: str | None = None,
|
|
446
|
+
recursive: bool = False,
|
|
447
|
+
) -> DeleteResult:
|
|
448
|
+
"""Async variant of :func:`delete`."""
|
|
449
|
+
params = _build_delete_params(
|
|
450
|
+
scope_id=scope_id,
|
|
451
|
+
folder_path=folder_path,
|
|
452
|
+
recursive=recursive,
|
|
453
|
+
)
|
|
454
|
+
raw = await unique_sdk.Folder.delete_async(
|
|
455
|
+
user_id=user_id,
|
|
456
|
+
company_id=company_id,
|
|
457
|
+
**params,
|
|
458
|
+
)
|
|
459
|
+
return DeleteResult.model_validate(raw, by_alias=True, by_name=True)
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
# ── Helpers ───────────────────────────────────────────────────────────────────
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def _to_sdk_scope_accesses(
|
|
466
|
+
scope_accesses: list[ScopeAccess],
|
|
467
|
+
) -> list[unique_sdk.Folder.ScopeAccess]:
|
|
468
|
+
return cast(
|
|
469
|
+
list[unique_sdk.Folder.ScopeAccess],
|
|
470
|
+
[a.model_dump(by_alias=True, exclude_none=True) for a in scope_accesses],
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def _validate_scope_address(
|
|
475
|
+
*,
|
|
476
|
+
scope_id: str | None,
|
|
477
|
+
folder_path: str | None,
|
|
478
|
+
) -> tuple[str | None, str | None]:
|
|
479
|
+
"""Require exactly one of ``scope_id`` or ``folder_path``."""
|
|
480
|
+
if scope_id is None and folder_path is None:
|
|
481
|
+
raise ValueError("Pass exactly one of scope_id or folder_path.")
|
|
482
|
+
if scope_id is not None and folder_path is not None:
|
|
483
|
+
raise ValueError("Pass only one of scope_id or folder_path, not both.")
|
|
484
|
+
return scope_id, folder_path
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
def _build_get_params(
|
|
488
|
+
*,
|
|
489
|
+
scope_id: str | None,
|
|
490
|
+
folder_path: str | None,
|
|
491
|
+
) -> unique_sdk.Folder.GetParams:
|
|
492
|
+
scope_id, folder_path = _validate_scope_address(
|
|
493
|
+
scope_id=scope_id, folder_path=folder_path
|
|
494
|
+
)
|
|
495
|
+
params = unique_sdk.Folder.GetParams()
|
|
496
|
+
if scope_id is not None:
|
|
497
|
+
params["scopeId"] = scope_id
|
|
498
|
+
if folder_path is not None:
|
|
499
|
+
params["folderPath"] = folder_path
|
|
500
|
+
return params
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
def _build_delete_params(
|
|
504
|
+
*,
|
|
505
|
+
scope_id: str | None,
|
|
506
|
+
folder_path: str | None,
|
|
507
|
+
recursive: bool,
|
|
508
|
+
) -> unique_sdk.Folder.DeleteFolderParams:
|
|
509
|
+
scope_id, folder_path = _validate_scope_address(
|
|
510
|
+
scope_id=scope_id, folder_path=folder_path
|
|
511
|
+
)
|
|
512
|
+
params: unique_sdk.Folder.DeleteFolderParams = {}
|
|
513
|
+
if scope_id is not None:
|
|
514
|
+
params["scopeId"] = scope_id
|
|
515
|
+
if folder_path is not None:
|
|
516
|
+
params["folderPath"] = folder_path
|
|
517
|
+
if recursive:
|
|
518
|
+
params["recursive"] = True
|
|
519
|
+
return params
|