unique_toolkit 2026.24.0__tar.gz → 2026.24.0.dev1__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.24.0 → unique_toolkit-2026.24.0.dev1}/PKG-INFO +2 -3
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/pyproject.toml +5 -7
- unique_toolkit-2026.24.0.dev1/unique_toolkit/__init__.py +85 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/metadata_filter_scope.py +4 -7
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/pydantic/rjsf_tags.py +1 -6
- unique_toolkit-2026.24.0.dev1/unique_toolkit/agentic/tools/a2a/config.py +17 -0
- unique_toolkit-2026.24.0.dev1/unique_toolkit/agentic/tools/a2a/tool/__init__.py +4 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/tool/config.py +2 -51
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/tool/service.py +2 -86
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -1
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +5 -22
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/tool_manager.py +3 -48
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/schemas.py +2 -28
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/__init__.py +1 -30
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/schemas.py +1 -2
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/smart_rules.py +3 -61
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/README.md +9 -11
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +4 -27
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +1 -5
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/__init__.py +1 -3
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/__init__.py +3 -15
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/monitoring/middleware.py +3 -4
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/monitoring/registry.py +4 -58
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/services/chat_service.py +20 -26
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/short_term_memory/functions.py +8 -20
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/short_term_memory/service.py +5 -5
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/smart_rules/compile.py +0 -6
- unique_toolkit-2026.24.0/unique_toolkit/__init__.py +0 -149
- unique_toolkit-2026.24.0/unique_toolkit/agentic/tools/a2a/config.py +0 -41
- unique_toolkit-2026.24.0/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -7
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/README.md +0 -183
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -50
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -57
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -65
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/client.py +0 -249
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -17
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -33
- unique_toolkit-2026.24.0/unique_toolkit/monitoring/gunicorn.py +0 -24
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/README.md +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.24.0 → unique_toolkit-2026.24.0.dev1}/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.24.0
|
|
3
|
+
Version: 2026.24.0.dev1
|
|
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.24.0
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.24.0.dev2,<2026.24.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
|
|
@@ -31,7 +31,6 @@ Requires-Dist: deepdiff>=8.6.1,<9
|
|
|
31
31
|
Requires-Dist: pypandoc>=1.16.2,<2
|
|
32
32
|
Requires-Dist: tenacity>=9.1.4
|
|
33
33
|
Requires-Dist: pydantic-core>=2.41.5
|
|
34
|
-
Requires-Dist: cachetools>=5.0,<6
|
|
35
34
|
Requires-Dist: fastapi>=0.121.0,<0.122 ; extra == 'fastapi'
|
|
36
35
|
Requires-Dist: starlette>=0.49.1 ; extra == 'fastapi'
|
|
37
36
|
Requires-Dist: uvicorn>=0.37.0,<0.38 ; extra == 'fastapi'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.24.0"
|
|
3
|
+
version = "2026.24.0.dev1"
|
|
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.24.0",
|
|
31
|
+
"unique-sdk>=2026.24.0.dev2,<2026.24.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -43,7 +43,6 @@ dependencies = [
|
|
|
43
43
|
"pypandoc>=1.16.2,<2",
|
|
44
44
|
"tenacity>=9.1.4",
|
|
45
45
|
"pydantic-core>=2.41.5",
|
|
46
|
-
"cachetools>=5.0,<6",
|
|
47
46
|
]
|
|
48
47
|
|
|
49
48
|
[project.optional-dependencies]
|
|
@@ -61,6 +60,7 @@ fastapi = [
|
|
|
61
60
|
monitoring = [
|
|
62
61
|
"prometheus_client>=0.24.1,<1",
|
|
63
62
|
]
|
|
63
|
+
|
|
64
64
|
[build-system]
|
|
65
65
|
requires = ["uv_build>=0.8.14,<0.9.0"]
|
|
66
66
|
build-backend = "uv_build"
|
|
@@ -69,15 +69,13 @@ build-backend = "uv_build"
|
|
|
69
69
|
module-root = ""
|
|
70
70
|
|
|
71
71
|
[dependency-groups]
|
|
72
|
-
dev = [
|
|
73
|
-
"types-cachetools>=5.0,<6",
|
|
74
|
-
]
|
|
72
|
+
dev = []
|
|
75
73
|
|
|
76
74
|
[tool.uv]
|
|
77
75
|
exclude-newer = "2 weeks"
|
|
78
76
|
constraint-dependencies = [
|
|
79
77
|
"starlette>=0.49.1",
|
|
80
|
-
"lxml>=
|
|
78
|
+
"lxml>=5.0.0",
|
|
81
79
|
]
|
|
82
80
|
|
|
83
81
|
[tool.uv.exclude-newer-package]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Re-export commonly used classes for easier imports
|
|
2
|
+
from unique_toolkit.chat import ChatService
|
|
3
|
+
from unique_toolkit.content import ContentService
|
|
4
|
+
from unique_toolkit.data_extraction import (
|
|
5
|
+
StructuredOutputDataExtractor,
|
|
6
|
+
StructuredOutputDataExtractorConfig,
|
|
7
|
+
)
|
|
8
|
+
from unique_toolkit.embedding import EmbeddingService
|
|
9
|
+
from unique_toolkit.framework_utilities.openai.client import (
|
|
10
|
+
get_async_openai_client,
|
|
11
|
+
get_openai_client,
|
|
12
|
+
)
|
|
13
|
+
from unique_toolkit.language_model import (
|
|
14
|
+
LanguageModelMessages,
|
|
15
|
+
LanguageModelName,
|
|
16
|
+
LanguageModelService,
|
|
17
|
+
LanguageModelToolDescription,
|
|
18
|
+
)
|
|
19
|
+
from unique_toolkit.services.knowledge_base import KnowledgeBaseService
|
|
20
|
+
from unique_toolkit.short_term_memory import ShortTermMemoryService
|
|
21
|
+
|
|
22
|
+
# Conditionally import config_checker (requires pydantic-settings)
|
|
23
|
+
_CONFIG_CHECKER_AVAILABLE: bool = False
|
|
24
|
+
try:
|
|
25
|
+
from unique_toolkit._common.config_checker import (
|
|
26
|
+
ConfigDiffer, # noqa: F401, I001
|
|
27
|
+
ConfigEntry, # noqa: F401, I001
|
|
28
|
+
ConfigExporter, # noqa: F401, I001
|
|
29
|
+
ConfigRegistry, # noqa: F401, I001
|
|
30
|
+
ConfigValidator, # noqa: F401, I001
|
|
31
|
+
DefaultChangeReport, # noqa: F401, I001
|
|
32
|
+
ExportManifest, # noqa: F401, I001
|
|
33
|
+
ValidationReport, # noqa: F401, I001
|
|
34
|
+
register_config, # noqa: F401, I001
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
_CONFIG_CHECKER_AVAILABLE = True # pyright: ignore[reportConstantRedefinition]
|
|
38
|
+
except ImportError:
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
# Conditionally import langchain utilities if langchain is installed
|
|
42
|
+
_LANGCHAIN_AVAILABLE: bool = False
|
|
43
|
+
try:
|
|
44
|
+
from unique_toolkit.framework_utilities.langchain.client import get_langchain_client # noqa: F401, I001
|
|
45
|
+
|
|
46
|
+
_LANGCHAIN_AVAILABLE = True # pyright: ignore[reportConstantRedefinition]
|
|
47
|
+
except ImportError:
|
|
48
|
+
pass
|
|
49
|
+
|
|
50
|
+
# You can add other classes you frequently use here as well
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
"ChatService",
|
|
54
|
+
"ContentService",
|
|
55
|
+
"EmbeddingService",
|
|
56
|
+
"get_openai_client",
|
|
57
|
+
"get_async_openai_client",
|
|
58
|
+
"KnowledgeBaseService",
|
|
59
|
+
"LanguageModelMessages",
|
|
60
|
+
"LanguageModelName",
|
|
61
|
+
"LanguageModelService",
|
|
62
|
+
"LanguageModelToolDescription",
|
|
63
|
+
"ShortTermMemoryService",
|
|
64
|
+
"StructuredOutputDataExtractor",
|
|
65
|
+
"StructuredOutputDataExtractorConfig",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
# Add config_checker exports if available
|
|
69
|
+
if _CONFIG_CHECKER_AVAILABLE:
|
|
70
|
+
__all__.extend(
|
|
71
|
+
[
|
|
72
|
+
"ConfigDiffer",
|
|
73
|
+
"ConfigEntry",
|
|
74
|
+
"ConfigExporter",
|
|
75
|
+
"ConfigRegistry",
|
|
76
|
+
"ConfigValidator",
|
|
77
|
+
"DefaultChangeReport",
|
|
78
|
+
"ExportManifest",
|
|
79
|
+
"ValidationReport",
|
|
80
|
+
"register_config",
|
|
81
|
+
]
|
|
82
|
+
)
|
|
83
|
+
# Add langchain-specific exports if available
|
|
84
|
+
if _LANGCHAIN_AVAILABLE:
|
|
85
|
+
__all__.append("get_langchain_client")
|
|
@@ -8,8 +8,6 @@ from typing import Any
|
|
|
8
8
|
from unique_toolkit.content.smart_rules import (
|
|
9
9
|
Operator,
|
|
10
10
|
Statement,
|
|
11
|
-
UniqueQL,
|
|
12
|
-
uniqueql_to_dict,
|
|
13
11
|
)
|
|
14
12
|
|
|
15
13
|
_UQL_AND = "and"
|
|
@@ -31,17 +29,16 @@ def build_folder_id_in_clause(scope_ids: list[str]) -> dict[str, Any]:
|
|
|
31
29
|
|
|
32
30
|
def merge_scope_clause_into_metadata_filter(
|
|
33
31
|
scope_clause: Mapping[str, Any],
|
|
34
|
-
metadata_filter:
|
|
32
|
+
metadata_filter: dict[str, Any] | None,
|
|
35
33
|
) -> dict[str, Any]:
|
|
36
34
|
"""AND-merge *scope_clause* with *metadata_filter*, flattening a top-level ``and``."""
|
|
37
35
|
scope_dict = dict(scope_clause)
|
|
38
|
-
|
|
39
|
-
if not metadata_dict:
|
|
36
|
+
if not metadata_filter:
|
|
40
37
|
return scope_dict
|
|
41
|
-
inner_and =
|
|
38
|
+
inner_and = metadata_filter.get(_UQL_AND)
|
|
42
39
|
if isinstance(inner_and, list):
|
|
43
40
|
return {_UQL_AND: [scope_dict, *inner_and]}
|
|
44
|
-
return {_UQL_AND: [scope_dict,
|
|
41
|
+
return {_UQL_AND: [scope_dict, dict(metadata_filter)]}
|
|
45
42
|
|
|
46
43
|
|
|
47
44
|
__all__ = [
|
|
@@ -974,12 +974,7 @@ def ui_schema_for_model(
|
|
|
974
974
|
node["items"] = item_node
|
|
975
975
|
|
|
976
976
|
# Dict -> additionalProperties (value side)
|
|
977
|
-
|
|
978
|
-
# widget) or an anyOf (fully-specified type branching): walking the
|
|
979
|
-
# dict value type in those cases adds a spurious "additionalProperties"
|
|
980
|
-
# node that confuses RJSF renderers. Presentation-only meta such as
|
|
981
|
-
# ui:expandable or ui:title does NOT prevent the walk.
|
|
982
|
-
elif origin is dict and "ui:widget" not in node and "anyOf" not in node:
|
|
977
|
+
elif origin is dict:
|
|
983
978
|
_key_t, val_t = get_args(base) or (Any, Any)
|
|
984
979
|
val_base, val_meta = _walk_annotated_chain(val_t)
|
|
985
980
|
val_base = _unwrap_optional(val_base)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from unique_toolkit.agentic.tools.a2a.evaluation import SubAgentEvaluationConfig
|
|
4
|
+
from unique_toolkit.agentic.tools.a2a.postprocessing import SubAgentDisplayConfig
|
|
5
|
+
from unique_toolkit.agentic.tools.a2a.tool import SubAgentToolConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# SubAgentToolConfig with display and evaluation configs
|
|
9
|
+
class ExtendedSubAgentToolConfig(SubAgentToolConfig):
|
|
10
|
+
response_display_config: SubAgentDisplayConfig = Field(
|
|
11
|
+
default_factory=SubAgentDisplayConfig,
|
|
12
|
+
description="Configuration for how to display the sub-agent response.",
|
|
13
|
+
)
|
|
14
|
+
evaluation_config: SubAgentEvaluationConfig = Field(
|
|
15
|
+
default_factory=SubAgentEvaluationConfig,
|
|
16
|
+
description="Configuration for handling assessments of the sub-agent response.",
|
|
17
|
+
)
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import re
|
|
3
2
|
from enum import StrEnum
|
|
4
|
-
from typing import Annotated, Generic, Literal,
|
|
3
|
+
from typing import Annotated, Generic, Literal, TypeVar
|
|
5
4
|
|
|
6
|
-
from pydantic import Field, field_validator
|
|
5
|
+
from pydantic import Field, field_validator
|
|
7
6
|
from pydantic.main import BaseModel
|
|
8
7
|
|
|
9
8
|
from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
|
|
@@ -27,9 +26,6 @@ class SystemReminderConfig(BaseModel, Generic[T]):
|
|
|
27
26
|
type: T
|
|
28
27
|
|
|
29
28
|
|
|
30
|
-
_LOGGER = logging.getLogger(__name__)
|
|
31
|
-
|
|
32
|
-
|
|
33
29
|
_SYSTEM_REMINDER_FIELD_DESCRIPTION = """
|
|
34
30
|
The reminder to add to the tool response. The reminder can be a Jinja template and can contain the following placeholders:
|
|
35
31
|
- {{ display_name }}: The display name of the sub agent.
|
|
@@ -107,19 +103,6 @@ This is the message that will be sent to the sub-agent.
|
|
|
107
103
|
""".strip()
|
|
108
104
|
|
|
109
105
|
|
|
110
|
-
class SubAgentPassthroughConfig(BaseModel):
|
|
111
|
-
model_config = get_configuration_dict()
|
|
112
|
-
|
|
113
|
-
enabled: bool = Field(
|
|
114
|
-
default=False,
|
|
115
|
-
description="If set, this sub agent's response will be directly displayed to the user once the agent is called, ending the orchestrator loop.",
|
|
116
|
-
)
|
|
117
|
-
include_assessments: bool = Field(
|
|
118
|
-
default=True,
|
|
119
|
-
description="If set, this sub agent's assessments will be added to the main agent response.",
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
|
|
123
106
|
class SubAgentToolConfig(BaseToolConfig):
|
|
124
107
|
model_config = get_configuration_dict()
|
|
125
108
|
|
|
@@ -188,12 +171,10 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
188
171
|
poll_interval: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
|
|
189
172
|
default=1.0,
|
|
190
173
|
description="Time interval in seconds between polling attempts when waiting for sub-agent response.",
|
|
191
|
-
gt=0,
|
|
192
174
|
)
|
|
193
175
|
max_wait: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
|
|
194
176
|
default=120.0,
|
|
195
177
|
description="Maximum time in seconds to wait for the sub-agent response before timing out.",
|
|
196
|
-
gt=0,
|
|
197
178
|
)
|
|
198
179
|
stop_condition: Literal["stoppedStreamingAt", "completedAt"] = Field(
|
|
199
180
|
default="completedAt",
|
|
@@ -216,11 +197,6 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
216
197
|
default=False,
|
|
217
198
|
description="If set, the sub-agent response will be interpreted as a list of content chunks.",
|
|
218
199
|
)
|
|
219
|
-
passthrough_config: SubAgentPassthroughConfig = Field(
|
|
220
|
-
default_factory=SubAgentPassthroughConfig,
|
|
221
|
-
description="Configuration for streaming the sub-agent response directly back to the user.",
|
|
222
|
-
title="Direct Streaming Configuration (Experimental)",
|
|
223
|
-
)
|
|
224
200
|
|
|
225
201
|
system_reminders_config: list[
|
|
226
202
|
Annotated[
|
|
@@ -231,28 +207,3 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
231
207
|
default=[],
|
|
232
208
|
description="Configuration for the system reminders to add to the tool response.",
|
|
233
209
|
)
|
|
234
|
-
|
|
235
|
-
@model_validator(mode="after")
|
|
236
|
-
def _ensure_response_passthrough_and_returns_content_chunks_mutually_exclusive(
|
|
237
|
-
self,
|
|
238
|
-
) -> Self:
|
|
239
|
-
if self.passthrough_config.enabled and self.returns_content_chunks:
|
|
240
|
-
raise ValueError(
|
|
241
|
-
f"SubAgent (assistant_id={self.assistant_id!r}): "
|
|
242
|
-
"`passthrough_config.enabled` and `returns_content_chunks` are mutually exclusive."
|
|
243
|
-
)
|
|
244
|
-
return self
|
|
245
|
-
|
|
246
|
-
@model_validator(mode="after")
|
|
247
|
-
def _ensure_use_sub_agent_references_off_when_tool_response_passthrough(
|
|
248
|
-
self,
|
|
249
|
-
) -> Self:
|
|
250
|
-
if self.passthrough_config.enabled and self.use_sub_agent_references:
|
|
251
|
-
_LOGGER.warning(
|
|
252
|
-
"SubAgent (assistant_id=%r): `passthrough_config.enabled=True` and `use_sub_agent_references=True`. "
|
|
253
|
-
"`use_sub_agent_references` will be overridden to False.",
|
|
254
|
-
self.assistant_id,
|
|
255
|
-
)
|
|
256
|
-
self.use_sub_agent_references = False
|
|
257
|
-
|
|
258
|
-
return self
|
|
@@ -11,7 +11,6 @@ from pydantic import Field, TypeAdapter, create_model
|
|
|
11
11
|
from unique_sdk.api_resources._space import Space
|
|
12
12
|
from unique_sdk.utils.chat_in_space import send_message_and_wait_for_completion
|
|
13
13
|
|
|
14
|
-
from unique_toolkit._common.execution import SafeTaskExecutor
|
|
15
14
|
from unique_toolkit._common.referencing import (
|
|
16
15
|
get_all_ref_numbers,
|
|
17
16
|
get_detection_pattern_for_ref,
|
|
@@ -42,15 +41,9 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
|
42
41
|
ToolProgressReporter,
|
|
43
42
|
)
|
|
44
43
|
from unique_toolkit.app import ChatEvent
|
|
45
|
-
from unique_toolkit.chat.schemas import
|
|
46
|
-
ChatMessageAssessmentLabel,
|
|
47
|
-
ChatMessageAssessmentStatus,
|
|
48
|
-
ChatMessageAssessmentType,
|
|
49
|
-
MessageLog,
|
|
50
|
-
MessageLogStatus,
|
|
51
|
-
)
|
|
44
|
+
from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
|
|
52
45
|
from unique_toolkit.chat.service import ChatService
|
|
53
|
-
from unique_toolkit.content import ContentChunk
|
|
46
|
+
from unique_toolkit.content import ContentChunk
|
|
54
47
|
from unique_toolkit.language_model import (
|
|
55
48
|
LanguageModelFunction,
|
|
56
49
|
LanguageModelToolDescription,
|
|
@@ -153,10 +146,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
153
146
|
def tool_format_information_for_user_prompt(self) -> str:
|
|
154
147
|
return self.config.tool_format_information_for_user_prompt
|
|
155
148
|
|
|
156
|
-
@override
|
|
157
|
-
def takes_control(self) -> bool:
|
|
158
|
-
return self.config.passthrough_config.enabled
|
|
159
|
-
|
|
160
149
|
@override
|
|
161
150
|
def evaluation_check_list(self) -> list[EvaluationMetricName]:
|
|
162
151
|
return [EvaluationMetricName.SUB_AGENT] if self._should_run_evaluation else []
|
|
@@ -226,7 +215,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
226
215
|
self._should_run_evaluation |= (
|
|
227
216
|
response["assessment"] is not None
|
|
228
217
|
and len(response["assessment"]) > 0
|
|
229
|
-
and not self.config.passthrough_config.enabled
|
|
230
218
|
) # Run evaluation if any sub agent returned an assessment
|
|
231
219
|
|
|
232
220
|
self._notify_watcher(response, sequence_number, timestamp)
|
|
@@ -285,9 +273,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
285
273
|
active_message_log=active_message_log,
|
|
286
274
|
)
|
|
287
275
|
|
|
288
|
-
if self.config.passthrough_config.enabled:
|
|
289
|
-
await self._display_sub_agent_response(response)
|
|
290
|
-
|
|
291
276
|
return ToolCallResponse(
|
|
292
277
|
id=tool_call.id,
|
|
293
278
|
name=tool_call.name,
|
|
@@ -318,68 +303,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
318
303
|
)
|
|
319
304
|
raise e
|
|
320
305
|
|
|
321
|
-
async def _display_sub_agent_response(self, response: Space.Message) -> None:
|
|
322
|
-
await self._publish_sub_agent_response(response, set_completed_at=True)
|
|
323
|
-
|
|
324
|
-
if self.config.passthrough_config.include_assessments:
|
|
325
|
-
await self._forward_sub_agent_assessments(response["assessment"] or [])
|
|
326
|
-
|
|
327
|
-
async def _publish_sub_agent_response(
|
|
328
|
-
self,
|
|
329
|
-
response: Space.Message,
|
|
330
|
-
*,
|
|
331
|
-
set_completed_at: bool,
|
|
332
|
-
) -> None:
|
|
333
|
-
await self._chat_service.modify_assistant_message_async(
|
|
334
|
-
content=response["text"],
|
|
335
|
-
original_content=response["originalText"],
|
|
336
|
-
references=[
|
|
337
|
-
ContentReference.from_sdk_reference(ref)
|
|
338
|
-
for ref in response["references"] or []
|
|
339
|
-
],
|
|
340
|
-
set_completed_at=set_completed_at,
|
|
341
|
-
)
|
|
342
|
-
|
|
343
|
-
async def _publish_sub_agent_response_update(
|
|
344
|
-
self,
|
|
345
|
-
response: Space.Message,
|
|
346
|
-
) -> None:
|
|
347
|
-
try:
|
|
348
|
-
await self._publish_sub_agent_response(response, set_completed_at=False)
|
|
349
|
-
except Exception:
|
|
350
|
-
logger.warning(
|
|
351
|
-
"Failed to publish streaming sub agent passthrough update",
|
|
352
|
-
exc_info=True,
|
|
353
|
-
)
|
|
354
|
-
|
|
355
|
-
async def _forward_sub_agent_assessments(
|
|
356
|
-
self,
|
|
357
|
-
assessments: list[unique_sdk.Space.Assessment],
|
|
358
|
-
) -> None:
|
|
359
|
-
async def _create_one_assessment(
|
|
360
|
-
assessment: unique_sdk.Space.Assessment,
|
|
361
|
-
) -> None:
|
|
362
|
-
await self._chat_service.create_message_assessment_async(
|
|
363
|
-
assistant_message_id=self._chat_service._assistant_message_id,
|
|
364
|
-
status=ChatMessageAssessmentStatus(assessment["status"]),
|
|
365
|
-
type=ChatMessageAssessmentType(assessment["type"]),
|
|
366
|
-
title=assessment["title"],
|
|
367
|
-
explanation=assessment["explanation"],
|
|
368
|
-
label=ChatMessageAssessmentLabel(assessment["label"]),
|
|
369
|
-
is_visible=assessment["isVisible"],
|
|
370
|
-
)
|
|
371
|
-
|
|
372
|
-
if not assessments:
|
|
373
|
-
return
|
|
374
|
-
|
|
375
|
-
task_executor = SafeTaskExecutor(logger=logger)
|
|
376
|
-
await asyncio.gather(
|
|
377
|
-
*(
|
|
378
|
-
task_executor.execute_async(_create_one_assessment, a)
|
|
379
|
-
for a in assessments
|
|
380
|
-
),
|
|
381
|
-
)
|
|
382
|
-
|
|
383
306
|
async def _get_chat_id(self) -> str | None:
|
|
384
307
|
if not self.config.reuse_chat:
|
|
385
308
|
return None
|
|
@@ -465,12 +388,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
465
388
|
active_message_log: MessageLog | None = None,
|
|
466
389
|
) -> unique_sdk.Space.Message:
|
|
467
390
|
try:
|
|
468
|
-
on_message_update = (
|
|
469
|
-
self._publish_sub_agent_response_update
|
|
470
|
-
if self.config.passthrough_config.enabled
|
|
471
|
-
else None
|
|
472
|
-
)
|
|
473
|
-
|
|
474
391
|
return await send_message_and_wait_for_completion(
|
|
475
392
|
user_id=self._user_id,
|
|
476
393
|
assistant_id=self.config.assistant_id,
|
|
@@ -486,7 +403,6 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
486
403
|
parentChatId=self._event.payload.chat_id,
|
|
487
404
|
parentAssistantId=self.config.assistant_id,
|
|
488
405
|
),
|
|
489
|
-
on_message_update=on_message_update,
|
|
490
406
|
)
|
|
491
407
|
except TimeoutError as e:
|
|
492
408
|
await self._notify_progress(
|
|
@@ -161,7 +161,6 @@ Handling User Queries:
|
|
|
161
161
|
- Whenever the user query requires using the python tool, you must always think first about the steps required.
|
|
162
162
|
- 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.
|
|
163
163
|
- 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.
|
|
164
|
-
- 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.
|
|
165
164
|
- 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.
|
|
166
165
|
- CRITICAL: For Excel files (`.xls`, `.xlsx`) and CSV files uploaded to the chat, ALWAYS use this tool to read and process them (e.g. `pandas.read_excel`, `pandas.read_csv`, `openpyxl`). Do NOT rely on the chat's text content or prior ingestion for spreadsheet data — the raw file contents are only accessible via code execution from `/mnt/data/<filename>`.
|
|
167
166
|
- For calculation, retrieval, or exploratory-analysis answers, return the result concisely in the chat as markdown (key numbers inline, short tables where useful). Do NOT produce a separate artifact file (HTML, PDF, etc.) unless the user explicitly asked for a downloadable output or the request clearly calls for a dashboard/report.
|
|
@@ -620,16 +620,13 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
620
620
|
self._log.info("Fence injection modified the message text")
|
|
621
621
|
|
|
622
622
|
_warn_missing_content_ids(loop_response.message.text or "", self._content_map)
|
|
623
|
-
ci_ran = bool(loop_response.code_interpreter_calls)
|
|
624
623
|
loop_response.message.text, dangling_replaced = _replace_dangling_sandbox_links(
|
|
625
|
-
loop_response.message.text
|
|
624
|
+
loop_response.message.text
|
|
626
625
|
)
|
|
627
626
|
changed |= dangling_replaced
|
|
628
627
|
if dangling_replaced:
|
|
629
628
|
self._log.warning(
|
|
630
|
-
"apply_postprocessing found and replaced dangling sandbox links
|
|
631
|
-
"(ci_ran=%s)",
|
|
632
|
-
ci_ran,
|
|
629
|
+
"apply_postprocessing found and replaced dangling sandbox links"
|
|
633
630
|
)
|
|
634
631
|
|
|
635
632
|
apply_ms = (time.monotonic() - apply_t0) * 1000
|
|
@@ -1257,9 +1254,7 @@ _SANDBOX_MARKDOWN_LINK_RE = re.compile(r"!?\[.*?\]\(sandbox:/mnt/data/\S+?\)")
|
|
|
1257
1254
|
_SANDBOX_FILENAME_RE = re.compile(r"sandbox:/mnt/data/([^)\s]+)")
|
|
1258
1255
|
|
|
1259
1256
|
|
|
1260
|
-
def _replace_dangling_sandbox_links(
|
|
1261
|
-
text: str, *, ci_ran: bool = True
|
|
1262
|
-
) -> tuple[str, bool]:
|
|
1257
|
+
def _replace_dangling_sandbox_links(text: str) -> tuple[str, bool]:
|
|
1263
1258
|
"""Replace any remaining sandbox:/mnt/data/ markdown links with a per-file notice.
|
|
1264
1259
|
|
|
1265
1260
|
A dangling link means either the LLM hallucinated a file reference (the sandbox
|
|
@@ -1268,12 +1263,6 @@ def _replace_dangling_sandbox_links(
|
|
|
1268
1263
|
cases the user would see a broken link; this function replaces each such link with
|
|
1269
1264
|
an actionable message that names the specific file, and logs a warning so the
|
|
1270
1265
|
incident is visible in production logs.
|
|
1271
|
-
|
|
1272
|
-
Args:
|
|
1273
|
-
text: The message text to scan for dangling sandbox links.
|
|
1274
|
-
ci_ran: Whether the code interpreter was called at all this turn. When
|
|
1275
|
-
``False`` the LLM emitted a sandbox link without invoking the tool
|
|
1276
|
-
(hallucination); a more accurate message is shown to the user.
|
|
1277
1266
|
"""
|
|
1278
1267
|
if not _SANDBOX_MARKDOWN_LINK_RE.search(text):
|
|
1279
1268
|
return text, False
|
|
@@ -1282,17 +1271,11 @@ def _replace_dangling_sandbox_links(
|
|
|
1282
1271
|
filename_match = _SANDBOX_FILENAME_RE.search(m.group())
|
|
1283
1272
|
filename = filename_match.group(1) if filename_match else "the file"
|
|
1284
1273
|
logger.warning(
|
|
1285
|
-
"Dangling sandbox link found in final text: '%s'.
|
|
1286
|
-
"The file was either never
|
|
1274
|
+
"Dangling sandbox link found in final text: '%s'. "
|
|
1275
|
+
"The file was either never uploaded or the link format did not match "
|
|
1287
1276
|
"the expected pattern — replacing with per-file notice.",
|
|
1288
1277
|
m.group(),
|
|
1289
|
-
ci_ran,
|
|
1290
1278
|
)
|
|
1291
|
-
if not ci_ran:
|
|
1292
|
-
return (
|
|
1293
|
-
f"⚠️ The file *{filename}* was not generated. "
|
|
1294
|
-
"Please ask me to create it."
|
|
1295
|
-
)
|
|
1296
1279
|
return f"⚠️ The file *{filename}* could not be retrieved. You can ask me to regenerate it."
|
|
1297
1280
|
|
|
1298
1281
|
return _SANDBOX_MARKDOWN_LINK_RE.sub(_replacement, text), True
|
|
@@ -310,65 +310,20 @@ class _ToolManager(Generic[_ApiMode]):
|
|
|
310
310
|
if tool.name not in self._tool_choices:
|
|
311
311
|
self._tool_choices.append(tool.name)
|
|
312
312
|
|
|
313
|
-
def
|
|
314
|
-
self, tool_calls: list[LanguageModelFunction]
|
|
315
|
-
) -> list[LanguageModelFunction]:
|
|
316
|
-
tools = []
|
|
313
|
+
def does_a_tool_take_control(self, tool_calls: list[LanguageModelFunction]) -> bool:
|
|
317
314
|
for tool_call in tool_calls:
|
|
318
315
|
tool_instance = self.get_tool_by_name(tool_call.name)
|
|
319
316
|
if tool_instance and tool_instance.takes_control():
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
return tools
|
|
323
|
-
|
|
324
|
-
def does_a_tool_take_control(self, tool_calls: list[LanguageModelFunction]) -> bool:
|
|
325
|
-
return len(self._get_tool_calls_that_take_control(tool_calls)) > 0
|
|
317
|
+
return True
|
|
318
|
+
return False
|
|
326
319
|
|
|
327
320
|
def get_evaluation_check_list(self) -> list[EvaluationMetricName]:
|
|
328
321
|
return list(self._tool_evaluation_check_list)
|
|
329
322
|
|
|
330
|
-
def _take_control_conflict_response(
|
|
331
|
-
self,
|
|
332
|
-
tool_call: LanguageModelFunction,
|
|
333
|
-
take_control_names: list[str],
|
|
334
|
-
) -> ToolCallResponse:
|
|
335
|
-
if tool_call.name in take_control_names:
|
|
336
|
-
content = (
|
|
337
|
-
f"ERROR: Tool `{tool_call.name}` directly returns its response to the user and therefore must be called on its own. "
|
|
338
|
-
"None of the tools in this batch were executed. "
|
|
339
|
-
f"You may recover by first calling the other tools, then calling `{tool_call.name}` alone."
|
|
340
|
-
)
|
|
341
|
-
else:
|
|
342
|
-
names = ", ".join(f"`{n}`" for n in take_control_names)
|
|
343
|
-
content = f"ERROR: Not executed because the following tool(s) must be called on their own: {names}"
|
|
344
|
-
|
|
345
|
-
return ToolCallResponse(
|
|
346
|
-
id=tool_call.id,
|
|
347
|
-
name=tool_call.name,
|
|
348
|
-
content=content,
|
|
349
|
-
)
|
|
350
|
-
|
|
351
323
|
async def execute_selected_tools(
|
|
352
324
|
self,
|
|
353
325
|
tool_calls: list[LanguageModelFunction],
|
|
354
326
|
) -> list[ToolCallResponse]:
|
|
355
|
-
if len(tool_calls) > 1:
|
|
356
|
-
take_control_tools = [
|
|
357
|
-
t.name for t in self._get_tool_calls_that_take_control(tool_calls)
|
|
358
|
-
]
|
|
359
|
-
|
|
360
|
-
if len(take_control_tools) > 0:
|
|
361
|
-
self._logger.warning(
|
|
362
|
-
"Tool(s) %s take control and cannot be called alongside other tools. "
|
|
363
|
-
"Returning error for all %d tool calls.",
|
|
364
|
-
take_control_tools,
|
|
365
|
-
len(tool_calls),
|
|
366
|
-
)
|
|
367
|
-
return [
|
|
368
|
-
self._take_control_conflict_response(tool_call, take_control_tools)
|
|
369
|
-
for tool_call in tool_calls
|
|
370
|
-
]
|
|
371
|
-
|
|
372
327
|
tool_call_responses = await self._execute_parallelized(tool_calls)
|
|
373
328
|
return tool_call_responses
|
|
374
329
|
|
|
@@ -4,17 +4,10 @@ import json
|
|
|
4
4
|
from enum import StrEnum
|
|
5
5
|
from logging import getLogger
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Any, Generic, Optional, TypeVar, override
|
|
8
8
|
|
|
9
9
|
from humps import camelize
|
|
10
|
-
from pydantic import
|
|
11
|
-
BaseModel,
|
|
12
|
-
BeforeValidator,
|
|
13
|
-
ConfigDict,
|
|
14
|
-
Field,
|
|
15
|
-
JsonValue,
|
|
16
|
-
field_validator,
|
|
17
|
-
)
|
|
10
|
+
from pydantic import BaseModel, ConfigDict, Field, JsonValue, field_validator
|
|
18
11
|
from pydantic_settings import BaseSettings
|
|
19
12
|
from typing_extensions import deprecated
|
|
20
13
|
|
|
@@ -23,8 +16,6 @@ from unique_toolkit.app.chat_event_filter_options_settings import (
|
|
|
23
16
|
CHAT_EVENT_FILTER_OPTIONS_SETTINGS,
|
|
24
17
|
)
|
|
25
18
|
from unique_toolkit.app.unique_settings import UniqueChatEventFilterOptions
|
|
26
|
-
from unique_toolkit.language_model.default_language_model import DEFAULT_LANGUAGE_MODEL
|
|
27
|
-
from unique_toolkit.language_model.infos import LanguageModelInfo
|
|
28
19
|
from unique_toolkit.smart_rules.compile import UniqueQL, parse_uniqueql
|
|
29
20
|
|
|
30
21
|
FilterOptionsT = TypeVar("FilterOptionsT", bound=BaseSettings)
|
|
@@ -38,15 +29,6 @@ model_config = ConfigDict(
|
|
|
38
29
|
_logger = getLogger(__name__)
|
|
39
30
|
|
|
40
31
|
|
|
41
|
-
def _validate_language_model_info(v: Any) -> Any:
|
|
42
|
-
from unique_toolkit._common.validators import validate_and_init_language_model_info
|
|
43
|
-
|
|
44
|
-
return validate_and_init_language_model_info(v)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
LMI = Annotated[LanguageModelInfo, BeforeValidator(_validate_language_model_info)]
|
|
48
|
-
|
|
49
|
-
|
|
50
32
|
class EventName(StrEnum):
|
|
51
33
|
EXTERNAL_MODULE_CHOSEN = "unique.chat.external-module.chosen"
|
|
52
34
|
USER_MESSAGE_CREATED = "unique.chat.user-message.created"
|
|
@@ -265,10 +247,6 @@ class ChatEventPayload(BaseModel):
|
|
|
265
247
|
user_metadata: dict[str, Any] | None = Field(
|
|
266
248
|
default_factory=dict,
|
|
267
249
|
)
|
|
268
|
-
model_choice: LMI = Field(
|
|
269
|
-
default_factory=lambda: LanguageModelInfo.from_name(DEFAULT_LANGUAGE_MODEL),
|
|
270
|
-
description="The model choice the user has chosen to be used.",
|
|
271
|
-
)
|
|
272
250
|
tool_choices: list[str] = Field(
|
|
273
251
|
default_factory=list,
|
|
274
252
|
description="A list containing the tool names the user has chosen to be activated.",
|
|
@@ -327,10 +305,6 @@ class ChatEventPayload(BaseModel):
|
|
|
327
305
|
if value:
|
|
328
306
|
return parse_uniqueql(value)
|
|
329
307
|
|
|
330
|
-
@property
|
|
331
|
-
def has_model_choice_override(self) -> bool:
|
|
332
|
-
return "model_choice" in self.model_fields_set
|
|
333
|
-
|
|
334
308
|
|
|
335
309
|
@deprecated("""Use `ChatEventPayload` instead.
|
|
336
310
|
This class will be removed in the next major version.""")
|