unique_toolkit 2026.42.0__tar.gz → 2026.42.0.dev0__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-2026.42.0 → unique_toolkit-2026.42.0.dev0}/PKG-INFO +2 -2
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/pyproject.toml +2 -2
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +20 -45
- unique_toolkit-2026.42.0.dev0/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +50 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +2 -29
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +3 -10
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic_table/service.py +1 -142
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/schemas.py +0 -11
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/schemas.py +0 -29
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/service.py +0 -8
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/infos.py +17 -267
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/schemas.py +4 -5
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/settings.py +0 -1
- unique_toolkit-2026.42.0/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -121
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/invocation_stats.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/model_costs.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/memory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/monitoring/tracing.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/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: 2026.42.0
|
|
3
|
+
Version: 2026.42.0.dev0
|
|
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>
|
|
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
|
|
|
16
16
|
Requires-Dist: openai>=1.105.0,<3
|
|
17
17
|
Requires-Dist: platformdirs>=4.0.0,<5
|
|
18
18
|
Requires-Dist: pillow>=12.1.1
|
|
19
|
-
Requires-Dist: unique-sdk>=2026.42.0
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.42.0.dev0,<2026.42.0rc0
|
|
20
20
|
Requires-Dist: jambo>=0.1.2,<0.2
|
|
21
21
|
Requires-Dist: jinja2>=3.1.6,<4
|
|
22
22
|
Requires-Dist: docxtpl>=0.20.1,<0.21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.42.0"
|
|
3
|
+
version = "2026.42.0.dev0"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"openai>=1.105.0,<3",
|
|
29
29
|
"platformdirs>=4.0.0,<5",
|
|
30
30
|
"pillow>=12.1.1",
|
|
31
|
-
"unique-sdk>=2026.42.0",
|
|
31
|
+
"unique-sdk>=2026.42.0.dev0,<2026.42.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import base64
|
|
4
4
|
import logging
|
|
5
5
|
import mimetypes
|
|
6
|
-
from dataclasses import dataclass
|
|
7
6
|
from datetime import datetime
|
|
8
7
|
from enum import StrEnum
|
|
9
8
|
from itertools import groupby
|
|
@@ -105,15 +104,12 @@ def get_chat_history_with_contents(
|
|
|
105
104
|
else:
|
|
106
105
|
chat_history.append(last_user_message)
|
|
107
106
|
|
|
108
|
-
# Failed uploads are included on purpose so the model is told about every
|
|
109
|
-
# file the user attached, including those that could not be ingested.
|
|
110
107
|
chat_contents = content_service.search_contents(
|
|
111
108
|
where={
|
|
112
109
|
"ownerId": {
|
|
113
110
|
"equals": chat_id,
|
|
114
111
|
},
|
|
115
112
|
},
|
|
116
|
-
include_failed_content=True,
|
|
117
113
|
)
|
|
118
114
|
|
|
119
115
|
return ChatHistoryWithContent.from_chat_history_and_contents(
|
|
@@ -143,15 +139,12 @@ async def get_chat_history_with_contents_async(
|
|
|
143
139
|
else:
|
|
144
140
|
chat_history.append(last_user_message)
|
|
145
141
|
|
|
146
|
-
# Failed uploads are included on purpose so the model is told about every
|
|
147
|
-
# file the user attached, including those that could not be ingested.
|
|
148
142
|
chat_contents = await content_service.search_contents_async(
|
|
149
143
|
where={
|
|
150
144
|
"ownerId": {
|
|
151
145
|
"equals": chat_id,
|
|
152
146
|
},
|
|
153
147
|
},
|
|
154
|
-
include_failed_content=True,
|
|
155
148
|
)
|
|
156
149
|
|
|
157
150
|
return ChatHistoryWithContent.from_chat_history_and_contents(
|
|
@@ -230,38 +223,6 @@ def _serialize_file_contents(
|
|
|
230
223
|
return (text + "\n\n" + "\n".join(serialized_files)).strip()
|
|
231
224
|
|
|
232
225
|
|
|
233
|
-
@dataclass(frozen=True)
|
|
234
|
-
class _SplitContents:
|
|
235
|
-
"""Uploads of one chat message, grouped by how they reach the model.
|
|
236
|
-
|
|
237
|
-
``serializable`` holds documents *and* images in upload order so the
|
|
238
|
-
``FileContentSerializer`` can describe every upload as text, while
|
|
239
|
-
``images`` only holds the images that will be attached as base64.
|
|
240
|
-
"""
|
|
241
|
-
|
|
242
|
-
serializable: list[Content]
|
|
243
|
-
images: list[Content]
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
def _split_contents(
|
|
247
|
-
contents: list[Content],
|
|
248
|
-
selected_content_ids: set[str] | None,
|
|
249
|
-
) -> _SplitContents:
|
|
250
|
-
serializable: list[Content] = []
|
|
251
|
-
images: list[Content] = []
|
|
252
|
-
for content in contents:
|
|
253
|
-
if selected_content_ids is not None and content.id not in selected_content_ids:
|
|
254
|
-
continue
|
|
255
|
-
is_image = FileUtils.is_image_content(content.key)
|
|
256
|
-
if is_image or FileUtils.is_file_content(content.key):
|
|
257
|
-
serializable.append(content)
|
|
258
|
-
# Failed or expired uploads cannot be downloaded; they are still listed
|
|
259
|
-
# via the serializer but never attached as an image.
|
|
260
|
-
if is_image and not content.has_ingestion_failed() and not content.is_expired():
|
|
261
|
-
images.append(content)
|
|
262
|
-
return _SplitContents(serializable=serializable, images=images)
|
|
263
|
-
|
|
264
|
-
|
|
265
226
|
def _append_element_to_builder(
|
|
266
227
|
builder: MessagesBuilder,
|
|
267
228
|
c: ChatMessageWithContents,
|
|
@@ -273,11 +234,18 @@ def _append_element_to_builder(
|
|
|
273
234
|
selected_content_ids: set[str] | None = None,
|
|
274
235
|
) -> None:
|
|
275
236
|
if len(c.contents) > 0:
|
|
276
|
-
|
|
277
|
-
image_contents =
|
|
237
|
+
file_contents = [co for co in c.contents if FileUtils.is_file_content(co.key)]
|
|
238
|
+
image_contents = [co for co in c.contents if FileUtils.is_image_content(co.key)]
|
|
239
|
+
if selected_content_ids is not None:
|
|
240
|
+
file_contents = [
|
|
241
|
+
co for co in file_contents if co.id in selected_content_ids
|
|
242
|
+
]
|
|
243
|
+
image_contents = [
|
|
244
|
+
co for co in image_contents if co.id in selected_content_ids
|
|
245
|
+
]
|
|
278
246
|
content = _serialize_file_contents(
|
|
279
247
|
text,
|
|
280
|
-
|
|
248
|
+
file_contents,
|
|
281
249
|
file_content_serializer,
|
|
282
250
|
)
|
|
283
251
|
if include_images and image_contents:
|
|
@@ -314,11 +282,18 @@ async def _append_element_to_builder_async(
|
|
|
314
282
|
selected_content_ids: set[str] | None = None,
|
|
315
283
|
) -> None:
|
|
316
284
|
if len(c.contents) > 0:
|
|
317
|
-
|
|
318
|
-
image_contents =
|
|
285
|
+
file_contents = [co for co in c.contents if FileUtils.is_file_content(co.key)]
|
|
286
|
+
image_contents = [co for co in c.contents if FileUtils.is_image_content(co.key)]
|
|
287
|
+
if selected_content_ids is not None:
|
|
288
|
+
file_contents = [
|
|
289
|
+
co for co in file_contents if co.id in selected_content_ids
|
|
290
|
+
]
|
|
291
|
+
image_contents = [
|
|
292
|
+
co for co in image_contents if co.id in selected_content_ids
|
|
293
|
+
]
|
|
319
294
|
content = _serialize_file_contents(
|
|
320
295
|
text,
|
|
321
|
-
|
|
296
|
+
file_contents,
|
|
322
297
|
file_content_serializer,
|
|
323
298
|
)
|
|
324
299
|
if include_images and image_contents:
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from openai import AsyncOpenAI
|
|
4
|
+
|
|
5
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
|
|
6
|
+
CodeExecutionShortTermMemorySchema,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def check_container_exists(
|
|
13
|
+
client: AsyncOpenAI,
|
|
14
|
+
memory: CodeExecutionShortTermMemorySchema,
|
|
15
|
+
) -> bool:
|
|
16
|
+
try:
|
|
17
|
+
container = await client.containers.retrieve(memory.container_id)
|
|
18
|
+
# The error here is sometimes InternalServerError, and sometimes a NotFoundError. We catch everything and re-create on exception
|
|
19
|
+
except Exception:
|
|
20
|
+
logger.exception("Container %s not found", memory.container_id)
|
|
21
|
+
return False
|
|
22
|
+
|
|
23
|
+
if container.status not in ["active", "running"]:
|
|
24
|
+
logger.info(
|
|
25
|
+
"Container %s has status `%s`, recreating a new one",
|
|
26
|
+
memory.container_id,
|
|
27
|
+
container.status,
|
|
28
|
+
)
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
logger.info("Container %s found in short term memory", memory.container_id)
|
|
32
|
+
return True
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def create_container(
|
|
36
|
+
client: AsyncOpenAI,
|
|
37
|
+
chat_id: str,
|
|
38
|
+
user_id: str,
|
|
39
|
+
company_id: str,
|
|
40
|
+
expires_after_minutes: int,
|
|
41
|
+
) -> str:
|
|
42
|
+
container = await client.containers.create(
|
|
43
|
+
name=f"code_execution_{company_id}_{user_id}_{chat_id}",
|
|
44
|
+
expires_after={
|
|
45
|
+
"anchor": "last_active_at",
|
|
46
|
+
"minutes": expires_after_minutes,
|
|
47
|
+
},
|
|
48
|
+
)
|
|
49
|
+
logger.info("Created new container %s", container.id)
|
|
50
|
+
return container.id
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
|
-
import time
|
|
4
3
|
from dataclasses import dataclass
|
|
5
4
|
|
|
6
|
-
import httpx
|
|
7
5
|
from openai import APIStatusError, AsyncOpenAI
|
|
8
6
|
from tenacity import (
|
|
9
7
|
AsyncRetrying,
|
|
@@ -28,11 +26,6 @@ logger = logging.getLogger(__name__)
|
|
|
28
26
|
UPLOAD_MAX_RETRIES = 2
|
|
29
27
|
UPLOAD_RETRY_BASE_DELAY = 0.5
|
|
30
28
|
|
|
31
|
-
# Read timeout must stay above node-chat's own upload retry window (~95s) so we
|
|
32
|
-
# never abandon a request the proxy is still retrying, which would double-upload.
|
|
33
|
-
UPLOAD_CONNECT_TIMEOUT_SECONDS = 5.0
|
|
34
|
-
UPLOAD_READ_TIMEOUT_SECONDS = 120.0
|
|
35
|
-
|
|
36
29
|
# The `/public/openai-proxy/containers/*/files` route enforces a request-body
|
|
37
30
|
# size cap (see UN-23109); Azure OpenAI/node-chat surfaces this as an
|
|
38
31
|
# `APIStatusError` with this status code. Anything else is treated as a
|
|
@@ -88,24 +81,6 @@ def build_upload_retry() -> AsyncRetrying:
|
|
|
88
81
|
)
|
|
89
82
|
|
|
90
83
|
|
|
91
|
-
def build_upload_client(client: AsyncOpenAI) -> AsyncOpenAI:
|
|
92
|
-
"""Return a client variant tuned for container-file uploads.
|
|
93
|
-
|
|
94
|
-
SDK-level retries are disabled (``max_retries=0``) so that
|
|
95
|
-
``build_upload_retry`` is the single retry owner with full visibility in
|
|
96
|
-
logs, and the read timeout is capped so a hung upstream costs
|
|
97
|
-
``UPLOAD_READ_TIMEOUT_SECONDS`` instead of the SDK's 600s default.
|
|
98
|
-
"""
|
|
99
|
-
return client.with_options(
|
|
100
|
-
max_retries=0,
|
|
101
|
-
timeout=httpx.Timeout(
|
|
102
|
-
UPLOAD_CONNECT_TIMEOUT_SECONDS,
|
|
103
|
-
read=UPLOAD_READ_TIMEOUT_SECONDS,
|
|
104
|
-
write=UPLOAD_READ_TIMEOUT_SECONDS,
|
|
105
|
-
),
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
|
|
109
84
|
def check_file_already_uploaded(
|
|
110
85
|
content_id: str,
|
|
111
86
|
memory: CodeExecutionShortTermMemorySchema,
|
|
@@ -142,18 +117,16 @@ async def upload_file_to_container(
|
|
|
142
117
|
container_id,
|
|
143
118
|
)
|
|
144
119
|
|
|
145
|
-
upload_started = time.monotonic()
|
|
146
120
|
openai_file = await build_upload_retry()(
|
|
147
|
-
|
|
121
|
+
client.containers.files.create,
|
|
148
122
|
container_id=container_id,
|
|
149
123
|
file=(filename, file_content),
|
|
150
124
|
)
|
|
151
125
|
logger.info(
|
|
152
|
-
"File %s successfully uploaded as OpenAI file %s in container %s
|
|
126
|
+
"File %s successfully uploaded as OpenAI file %s in container %s",
|
|
153
127
|
content_id,
|
|
154
128
|
openai_file.id,
|
|
155
129
|
container_id,
|
|
156
|
-
time.monotonic() - upload_started,
|
|
157
130
|
)
|
|
158
131
|
|
|
159
132
|
return openai_file.path
|
|
@@ -115,7 +115,7 @@ Instructions:
|
|
|
115
115
|
Uploaded and generated files:
|
|
116
116
|
- All files uploaded to the chat are available at the path `/mnt/data/<filename>`.
|
|
117
117
|
- All files generated through code MUST be saved in the `/mnt/data` folder.
|
|
118
|
-
- CRITICAL: When generating any plot
|
|
118
|
+
- CRITICAL: When generating any plot or visualization as a PNG, use **matplotlib** and call `plt.savefig('/mnt/data/<filename>.png', bbox_inches='tight')` and `plt.close()` to save the file. Never rely on `plt.show()` alone — a file that is not saved to `/mnt/data/` cannot be displayed.
|
|
119
119
|
|
|
120
120
|
CRUCIAL Instructions for displaying images and files in the chat:
|
|
121
121
|
- Once files are generated in the `/mnt/data` folder you MUST reference them in the chat using markdown syntax in order to display them in the chat.
|
|
@@ -134,17 +134,10 @@ IMPORTANT: ALWAYS place a blank line before AND after each file reference link s
|
|
|
134
134
|
- You MUST always use this syntax, otherwise the files will not be displayed in the chat.
|
|
135
135
|
|
|
136
136
|
Visualization library choice — CRITICAL:
|
|
137
|
-
- For static
|
|
138
|
-
- For static page, poster, card or mockup images made of text blocks and boxes (not data charts): use **PIL** (`ImageDraw`) or **matplotlib** and follow "Page and layout images" below.
|
|
137
|
+
- For static image outputs (PNG): ALWAYS use **matplotlib**. NEVER use plotly to produce a PNG — `fig.write_image()` requires the `kaleido` package which is NOT installed in this environment and will always raise an error.
|
|
139
138
|
- For interactive visualizations (HTML): ALWAYS use **plotly**. Save with `fig.write_html(path, full_html=True, include_plotlyjs="cdn", default_height="600px")`. Do NOT use matplotlib for HTML artifacts.
|
|
140
139
|
- If a user explicitly asks for a plotly chart as an image, produce an equivalent **matplotlib** PNG and briefly explain that static plotly export is not supported here.
|
|
141
140
|
|
|
142
|
-
Page and layout images — CRITICAL (text MUST NOT overlap or overflow):
|
|
143
|
-
- Applies to images built from text blocks, boxes and cards (pages, posters, slides, mockups), not data charts.
|
|
144
|
-
- NEVER hardcode positions or sizes by eye. Place elements top to bottom with a running `y` cursor and advance it by each element's MEASURED height plus padding. Size boxes and cards from their measured content.
|
|
145
|
-
- Measure text before placing it (PIL: `draw.textbbox((0, 0), text, font=font)`; matplotlib: `text.get_window_extent(fig.canvas.get_renderer())`) and wrap it to its container's width with `textwrap.wrap`. In a row of cards, give each card `(available_width - gaps) / n` width.
|
|
146
|
-
- Before saving, assert in code that no two text bounding boxes intersect and that each lies inside its container.
|
|
147
|
-
|
|
148
141
|
HTML files — CRITICAL rules:
|
|
149
142
|
- NEVER write raw HTML markup directly in your text response. HTML content MUST only ever appear as a saved `.html` file in `/mnt/data/`.
|
|
150
143
|
- Whenever you create HTML (dashboards, charts, tables, reports, interactive widgets), you MUST save it as a `.html` file and reference it using the sandbox link format above.
|
|
@@ -169,7 +162,7 @@ HTML files — CRITICAL rules:
|
|
|
169
162
|
|
|
170
163
|
Handling User Queries:
|
|
171
164
|
- Whenever the user query requires using the python tool, you must always think first about the steps required.
|
|
172
|
-
- CRITICAL: If any step generates a plot
|
|
165
|
+
- CRITICAL: If any step generates a plot or visualization as a PNG, use **matplotlib** — that code block MUST include `plt.savefig('/mnt/data/<filename>.png', bbox_inches='tight')` and `plt.close()` as the final lines. Code that only calls `plt.show()` without saving will NOT display the image to the user.
|
|
173
166
|
- CRITICAL: NEVER reference a `sandbox:/mnt/data/<filename>` link unless you have already executed code in this response that saved that exact file. Referencing a file that was not created by executed code will result in a broken link.
|
|
174
167
|
- Self-check before writing any sandbox link: look back at the code blocks you executed in this response. Is there a block that explicitly saves this exact filename to `/mnt/data/`? If not, execute the code first — then reference the file.
|
|
175
168
|
- CRITICAL: The sandbox has NO internet access. NEVER use `requests`, `httpx`, `urllib`, or any other HTTP library to fetch data from the web — these calls will always fail. If the user's query requires live web data (e.g. market prices, news, APIs), you MUST retrieve it using the web search tool first and then pass the result into the code interpreter.
|
{unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/agentic_table/service.py
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
3
|
import time
|
|
4
|
-
from collections.abc import Collection
|
|
5
4
|
from datetime import datetime
|
|
6
5
|
from typing import Any, NamedTuple, cast
|
|
7
6
|
|
|
@@ -253,11 +252,7 @@ class AgenticTableService:
|
|
|
253
252
|
return MagicTableCell.model_validate(cell_data)
|
|
254
253
|
|
|
255
254
|
async def set_multiple_cells(
|
|
256
|
-
self,
|
|
257
|
-
cells: list[MagicTableCell],
|
|
258
|
-
batch_size: int = 4000,
|
|
259
|
-
*,
|
|
260
|
-
overwrite_library_rows: bool | None = None,
|
|
255
|
+
self, cells: list[MagicTableCell], batch_size: int = 4000
|
|
261
256
|
):
|
|
262
257
|
"""
|
|
263
258
|
Sets the values of multiple cells in the Agentic Table.
|
|
@@ -265,14 +260,6 @@ class AgenticTableService:
|
|
|
265
260
|
Args:
|
|
266
261
|
cells (list[MagicTableCell]): The cells to set sorted by row and column.
|
|
267
262
|
batch_size (int): Number of cells to set in a single request.
|
|
268
|
-
overwrite_library_rows (bool | None): When set, forwarded as
|
|
269
|
-
``overwriteLibraryRows``. ``True`` lets updates to existing cells on
|
|
270
|
-
library-sheet rows go through instead of being dropped; the server
|
|
271
|
-
only honors it on library sheets, for rows where the caller can read
|
|
272
|
-
every sheet named in the row's ``sourceSheetId`` metadata. Locked rows still
|
|
273
|
-
need unlocking first (``update_row_verification_status`` with
|
|
274
|
-
``locked=False``). ``None`` omits the field; servers that predate
|
|
275
|
-
it reject it with a 400.
|
|
276
263
|
"""
|
|
277
264
|
for i in range(0, len(cells), batch_size):
|
|
278
265
|
batch = cells[i : i + batch_size]
|
|
@@ -288,7 +275,6 @@ class AgenticTableService:
|
|
|
288
275
|
)
|
|
289
276
|
for cell in batch
|
|
290
277
|
],
|
|
291
|
-
overwriteLibraryRows=overwrite_library_rows,
|
|
292
278
|
)
|
|
293
279
|
|
|
294
280
|
async def set_activity(
|
|
@@ -889,133 +875,6 @@ class AgenticTableService:
|
|
|
889
875
|
if not result.get("status"):
|
|
890
876
|
raise Exception(result.get("message") or "Failed to create row metadata")
|
|
891
877
|
|
|
892
|
-
async def update_row_metadata(
|
|
893
|
-
self,
|
|
894
|
-
metadata_id: str,
|
|
895
|
-
entry: RowMetadataEntryInput,
|
|
896
|
-
) -> None:
|
|
897
|
-
"""Update a single row metadata entry, addressed by its id.
|
|
898
|
-
|
|
899
|
-
Args:
|
|
900
|
-
metadata_id (str): The ``id`` of the row metadata entry to update.
|
|
901
|
-
entry (RowMetadataEntryInput): The new key, value and filter flag.
|
|
902
|
-
|
|
903
|
-
Raises:
|
|
904
|
-
Exception: If the API reports a non-success status.
|
|
905
|
-
"""
|
|
906
|
-
result = await AgenticTable.update_row_metadata(
|
|
907
|
-
user_id=self._user_id,
|
|
908
|
-
company_id=self._company_id,
|
|
909
|
-
tableId=self.table_id,
|
|
910
|
-
metadataId=metadata_id,
|
|
911
|
-
key=entry.key,
|
|
912
|
-
value=entry.value,
|
|
913
|
-
exactFilter=entry.exact_filter,
|
|
914
|
-
)
|
|
915
|
-
if not result.get("status"):
|
|
916
|
-
raise Exception(result.get("message") or "Failed to update row metadata")
|
|
917
|
-
|
|
918
|
-
async def delete_row_metadata(self, metadata_id: str) -> None:
|
|
919
|
-
"""Delete a single row metadata entry, addressed by its id.
|
|
920
|
-
|
|
921
|
-
Raises:
|
|
922
|
-
Exception: If the API reports a non-success status.
|
|
923
|
-
"""
|
|
924
|
-
result = await AgenticTable.delete_row_metadata(
|
|
925
|
-
user_id=self._user_id,
|
|
926
|
-
company_id=self._company_id,
|
|
927
|
-
tableId=self.table_id,
|
|
928
|
-
metadataId=metadata_id,
|
|
929
|
-
)
|
|
930
|
-
if not result.get("status"):
|
|
931
|
-
raise Exception(result.get("message") or "Failed to delete row metadata")
|
|
932
|
-
|
|
933
|
-
async def set_row_metadata_by_key(
|
|
934
|
-
self,
|
|
935
|
-
row: int,
|
|
936
|
-
entries: list[RowMetadataEntryInput],
|
|
937
|
-
row_id: str | None = None,
|
|
938
|
-
existing: list[RowMetadataEntry] | None = None,
|
|
939
|
-
managed_keys: Collection[str] | None = None,
|
|
940
|
-
) -> None:
|
|
941
|
-
"""Merge row metadata by key, and optionally remove keys the caller owns.
|
|
942
|
-
|
|
943
|
-
For each entry: a key the row lacks is created; a key the row holds with
|
|
944
|
-
a different value or filter flag is updated in place; a key that already
|
|
945
|
-
matches is left alone. If the row holds the key more than once, one entry
|
|
946
|
-
is kept and the others are deleted, so the key ends up with exactly the
|
|
947
|
-
given value.
|
|
948
|
-
|
|
949
|
-
Keys not in ``entries`` are only removed when listed in ``managed_keys``.
|
|
950
|
-
This is not a full replace: rows also carry metadata the caller does not
|
|
951
|
-
own (e.g. the ``sourceSheetId`` stamp that library overwrites are checked
|
|
952
|
-
against), which must survive.
|
|
953
|
-
|
|
954
|
-
Args:
|
|
955
|
-
row (int): The row index (row order).
|
|
956
|
-
entries (list[RowMetadataEntryInput]): Key/value entries to set. Keys
|
|
957
|
-
must be unique.
|
|
958
|
-
row_id (str | None): The backend row id, used when creating keys.
|
|
959
|
-
existing (list[RowMetadataEntry] | None): The row's current metadata,
|
|
960
|
-
when the caller already read it (e.g. ``get_sheet`` with
|
|
961
|
-
``include_row_metadata=True``). When ``None``, the row's metadata
|
|
962
|
-
and id are read with ``get_cell``.
|
|
963
|
-
managed_keys (Collection[str] | None): Keys the caller owns. Every
|
|
964
|
-
entry key must be in it. Any of these keys missing from
|
|
965
|
-
``entries`` is deleted from the row, duplicates included. ``None``
|
|
966
|
-
deletes nothing beyond duplicates of keys in ``entries``.
|
|
967
|
-
|
|
968
|
-
Raises:
|
|
969
|
-
ValueError: If ``entries`` repeats a key, an entry key is not in
|
|
970
|
-
``managed_keys``, or a key must be created and the row id cannot
|
|
971
|
-
be resolved.
|
|
972
|
-
Exception: If the API reports a non-success status.
|
|
973
|
-
"""
|
|
974
|
-
keys = [entry.key for entry in entries]
|
|
975
|
-
if len(set(keys)) != len(keys):
|
|
976
|
-
raise ValueError(f"Duplicate row metadata keys in {keys}")
|
|
977
|
-
if managed_keys is not None:
|
|
978
|
-
unmanaged = sorted(set(keys) - set(managed_keys))
|
|
979
|
-
if unmanaged:
|
|
980
|
-
raise ValueError(f"Row metadata keys {unmanaged} not in managed_keys")
|
|
981
|
-
if not entries and not managed_keys:
|
|
982
|
-
return
|
|
983
|
-
if existing is None:
|
|
984
|
-
cell = await self.get_cell(row, 0, include_row_metadata=True)
|
|
985
|
-
existing = cell.row_metadata
|
|
986
|
-
row_id = row_id or cell.row_id
|
|
987
|
-
|
|
988
|
-
existing_by_key: dict[str, list[RowMetadataEntry]] = {}
|
|
989
|
-
for current in existing:
|
|
990
|
-
existing_by_key.setdefault(current.key, []).append(current)
|
|
991
|
-
|
|
992
|
-
to_create: list[RowMetadataEntryInput] = []
|
|
993
|
-
for entry in entries:
|
|
994
|
-
matches = existing_by_key.get(entry.key)
|
|
995
|
-
if not matches:
|
|
996
|
-
to_create.append(entry)
|
|
997
|
-
continue
|
|
998
|
-
keep = next(
|
|
999
|
-
(
|
|
1000
|
-
m
|
|
1001
|
-
for m in matches
|
|
1002
|
-
if m.value == entry.value and m.exact_filter == entry.exact_filter
|
|
1003
|
-
),
|
|
1004
|
-
None,
|
|
1005
|
-
)
|
|
1006
|
-
if keep is None:
|
|
1007
|
-
keep = matches[0]
|
|
1008
|
-
await self.update_row_metadata(keep.id, entry)
|
|
1009
|
-
for duplicate in matches:
|
|
1010
|
-
if duplicate.id != keep.id:
|
|
1011
|
-
await self.delete_row_metadata(duplicate.id)
|
|
1012
|
-
|
|
1013
|
-
for key in set(managed_keys or ()) - set(keys):
|
|
1014
|
-
for stale in existing_by_key.get(key, []):
|
|
1015
|
-
await self.delete_row_metadata(stale.id)
|
|
1016
|
-
|
|
1017
|
-
await self.create_row_metadata(row, to_create, row_id=row_id)
|
|
1018
|
-
|
|
1019
878
|
async def delete_sheet_metadata(self, metadata_id: str) -> None:
|
|
1020
879
|
"""Delete a sheet metadata entry by its id.
|
|
1021
880
|
|
|
@@ -334,13 +334,6 @@ class ChatEventPayload(BaseEventPayload):
|
|
|
334
334
|
default_factory=lambda: LanguageModelInfo.from_name(DEFAULT_LANGUAGE_MODEL),
|
|
335
335
|
description="The model choice the user has chosen to be used.",
|
|
336
336
|
)
|
|
337
|
-
thinking_level: str = Field(
|
|
338
|
-
default="",
|
|
339
|
-
description=(
|
|
340
|
-
"Thinking or reasoning level chosen for this turn. "
|
|
341
|
-
"Empty when the client did not send one."
|
|
342
|
-
),
|
|
343
|
-
)
|
|
344
337
|
tool_choices: list[str] = Field(
|
|
345
338
|
default_factory=list,
|
|
346
339
|
description="A list containing the tool names the user has chosen to be activated.",
|
|
@@ -394,10 +387,6 @@ class ChatEventPayload(BaseEventPayload):
|
|
|
394
387
|
def has_model_choice_override(self) -> bool:
|
|
395
388
|
return "model_choice" in self.model_fields_set
|
|
396
389
|
|
|
397
|
-
@property
|
|
398
|
-
def has_thinking_level_override(self) -> bool:
|
|
399
|
-
return "thinking_level" in self.model_fields_set and bool(self.thinking_level)
|
|
400
|
-
|
|
401
390
|
|
|
402
391
|
@deprecated("""Use `ChatEventPayload` instead.
|
|
403
392
|
This class will be removed in the next major version.""")
|
{unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/schemas.py
RENAMED
|
@@ -200,35 +200,6 @@ class Content(BaseModel):
|
|
|
200
200
|
timezone.utc
|
|
201
201
|
)
|
|
202
202
|
|
|
203
|
-
def has_ingestion_failed(self) -> bool:
|
|
204
|
-
"""Whether the platform reported a failed ingestion for this content.
|
|
205
|
-
|
|
206
|
-
All failure states of the platform's ``IngestionState`` enum share the
|
|
207
|
-
``FAILED`` prefix (e.g. ``FAILED_PARSING``, ``FAILED_MALWARE_FOUND``).
|
|
208
|
-
"""
|
|
209
|
-
return self.ingestion_state is not None and self.ingestion_state.startswith(
|
|
210
|
-
"FAILED"
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
def is_ingestion_in_progress(self) -> bool:
|
|
214
|
-
"""Whether the content is still being ingested and is not yet searchable."""
|
|
215
|
-
return self.ingestion_state in _INGESTION_IN_PROGRESS_STATES
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
_INGESTION_IN_PROGRESS_STATES: frozenset[str] = frozenset(
|
|
219
|
-
{
|
|
220
|
-
"QUEUED",
|
|
221
|
-
"MALWARE_SCANNING",
|
|
222
|
-
"METADATA_VALIDATION",
|
|
223
|
-
"EXTRACTING_METADATA",
|
|
224
|
-
"INGESTION_READING",
|
|
225
|
-
"INGESTION_CHUNKING",
|
|
226
|
-
"INGESTION_EMBEDDING",
|
|
227
|
-
"RE_INGESTING",
|
|
228
|
-
"RETRYING",
|
|
229
|
-
}
|
|
230
|
-
)
|
|
231
|
-
|
|
232
203
|
|
|
233
204
|
class ContentReference(BaseModel):
|
|
234
205
|
model_config = model_config
|
{unique_toolkit-2026.42.0 → unique_toolkit-2026.42.0.dev0}/unique_toolkit/content/service.py
RENAMED
|
@@ -480,7 +480,6 @@ class ContentService:
|
|
|
480
480
|
self,
|
|
481
481
|
where: dict[str, Any],
|
|
482
482
|
chat_id: str | None = None,
|
|
483
|
-
include_failed_content: bool = False,
|
|
484
483
|
) -> list[Content]:
|
|
485
484
|
"""
|
|
486
485
|
Performs a search in the knowledge base by filter (and not a smilarity search)
|
|
@@ -488,8 +487,6 @@ class ContentService:
|
|
|
488
487
|
|
|
489
488
|
Args:
|
|
490
489
|
where (dict): The search criteria.
|
|
491
|
-
chat_id (str | None): Chat to scope the search to; defaults to the service's chat.
|
|
492
|
-
include_failed_content (bool): Also return content whose ingestion failed.
|
|
493
490
|
|
|
494
491
|
Returns:
|
|
495
492
|
list[Content]: The search results.
|
|
@@ -501,22 +498,18 @@ class ContentService:
|
|
|
501
498
|
company_id=self._company_id,
|
|
502
499
|
chat_id=chat_id,
|
|
503
500
|
where=where,
|
|
504
|
-
include_failed_content=include_failed_content,
|
|
505
501
|
)
|
|
506
502
|
|
|
507
503
|
async def search_contents_async(
|
|
508
504
|
self,
|
|
509
505
|
where: dict[str, Any],
|
|
510
506
|
chat_id: str | None = None,
|
|
511
|
-
include_failed_content: bool = False,
|
|
512
507
|
) -> list[Content]:
|
|
513
508
|
"""
|
|
514
509
|
Performs an asynchronous search for content files in the knowledge base by filter.
|
|
515
510
|
|
|
516
511
|
Args:
|
|
517
512
|
where (dict): The search criteria.
|
|
518
|
-
chat_id (str | None): Chat to scope the search to; defaults to the service's chat.
|
|
519
|
-
include_failed_content (bool): Also return content whose ingestion failed.
|
|
520
513
|
|
|
521
514
|
Returns:
|
|
522
515
|
list[Content]: The search results.
|
|
@@ -528,7 +521,6 @@ class ContentService:
|
|
|
528
521
|
company_id=self._company_id,
|
|
529
522
|
chat_id=chat_id,
|
|
530
523
|
where=where,
|
|
531
|
-
include_failed_content=include_failed_content,
|
|
532
524
|
)
|
|
533
525
|
|
|
534
526
|
def search_content_on_chat(self, chat_id: str) -> list[Content]:
|