unique_toolkit 1.45.1__tar.gz → 1.45.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/CHANGELOG.md +6 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/PKG-INFO +7 -1
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/pyproject.toml +1 -1
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/files.py +13 -4
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/service.py +143 -81
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +48 -3
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/LICENSE +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/README.md +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.45.3] - 2026-01-26
|
|
9
|
+
- Include message log update in subagents and MCP tools
|
|
10
|
+
|
|
11
|
+
## [1.45.2] - 2026-01-26
|
|
12
|
+
- Make FileMimeType backwards compatible with legacy extensions
|
|
13
|
+
|
|
8
14
|
## [1.45.1] - 2026-01-26
|
|
9
15
|
- Add FileMimeType utility helpers
|
|
10
16
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: unique_toolkit
|
|
3
|
-
Version: 1.45.
|
|
3
|
+
Version: 1.45.3
|
|
4
4
|
Summary:
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Author: Cedric Klinkert
|
|
@@ -125,6 +125,12 @@ All notable changes to this project will be documented in this file.
|
|
|
125
125
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
126
126
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
127
127
|
|
|
128
|
+
## [1.45.3] - 2026-01-26
|
|
129
|
+
- Include message log update in subagents and MCP tools
|
|
130
|
+
|
|
131
|
+
## [1.45.2] - 2026-01-26
|
|
132
|
+
- Make FileMimeType backwards compatible with legacy extensions
|
|
133
|
+
|
|
128
134
|
## [1.45.1] - 2026-01-26
|
|
129
135
|
- Add FileMimeType utility helpers
|
|
130
136
|
|
|
@@ -9,10 +9,14 @@ class FileMimeType(StrEnum):
|
|
|
9
9
|
PDF = "application/pdf"
|
|
10
10
|
DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
11
11
|
DOC = "application/msword"
|
|
12
|
+
# TODO: clean up duplicates and make the monolith compatible with this.
|
|
12
13
|
XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
14
|
+
MSEXCEL = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
13
15
|
XLS = "application/vnd.ms-excel"
|
|
16
|
+
EXCEL = "application/vnd.ms-excel"
|
|
14
17
|
PPT = "application/vnd.ms-powerpoint"
|
|
15
18
|
PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
19
|
+
MSPPT = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
16
20
|
CSV = "text/csv"
|
|
17
21
|
HTML = "text/html"
|
|
18
22
|
MD = "text/markdown"
|
|
@@ -42,12 +46,12 @@ class FileMimeType(StrEnum):
|
|
|
42
46
|
@classmethod
|
|
43
47
|
def is_xlsx_mime(cls, filepath: Path) -> bool:
|
|
44
48
|
mime_type = cls.get_mime_from_file_path(filepath)
|
|
45
|
-
return mime_type in {cls.XLSX, cls.XLS}
|
|
49
|
+
return mime_type in {cls.XLSX, cls.XLS, cls.MSEXCEL, cls.EXCEL}
|
|
46
50
|
|
|
47
51
|
@classmethod
|
|
48
52
|
def is_pptx_mime(cls, filepath: Path) -> bool:
|
|
49
53
|
mime_type = cls.get_mime_from_file_path(filepath)
|
|
50
|
-
return mime_type in {cls.PPTX, cls.PPT}
|
|
54
|
+
return mime_type in {cls.PPTX, cls.PPT, cls.MSPPT}
|
|
51
55
|
|
|
52
56
|
@classmethod
|
|
53
57
|
def is_json_mime(cls, filepath: Path) -> bool:
|
|
@@ -64,9 +68,14 @@ def get_common_name(extension: FileMimeType) -> str:
|
|
|
64
68
|
match extension:
|
|
65
69
|
case FileMimeType.DOCX | FileMimeType.DOC:
|
|
66
70
|
return "docx"
|
|
67
|
-
case
|
|
71
|
+
case (
|
|
72
|
+
FileMimeType.XLSX
|
|
73
|
+
| FileMimeType.XLS
|
|
74
|
+
| FileMimeType.MSEXCEL
|
|
75
|
+
| FileMimeType.EXCEL
|
|
76
|
+
):
|
|
68
77
|
return "excel"
|
|
69
|
-
case FileMimeType.PPT | FileMimeType.PPTX:
|
|
78
|
+
case FileMimeType.PPT | FileMimeType.PPTX | FileMimeType.MSPPT:
|
|
70
79
|
return "powerpoint"
|
|
71
80
|
case FileMimeType.PDF:
|
|
72
81
|
return "pdf"
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/a2a/tool/service.py
RENAMED
|
@@ -17,6 +17,7 @@ from unique_toolkit._common.referencing import (
|
|
|
17
17
|
)
|
|
18
18
|
from unique_toolkit._common.utils.jinja.render import render_template
|
|
19
19
|
from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
|
|
20
|
+
from unique_toolkit.agentic.feature_flags import feature_flags
|
|
20
21
|
from unique_toolkit.agentic.tools.a2a.response_watcher import SubAgentResponseWatcher
|
|
21
22
|
from unique_toolkit.agentic.tools.a2a.tool._memory import (
|
|
22
23
|
get_sub_agent_short_term_memory_manager,
|
|
@@ -39,6 +40,7 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
|
39
40
|
ToolProgressReporter,
|
|
40
41
|
)
|
|
41
42
|
from unique_toolkit.app import ChatEvent
|
|
43
|
+
from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
|
|
42
44
|
from unique_toolkit.content import ContentChunk
|
|
43
45
|
from unique_toolkit.language_model import (
|
|
44
46
|
LanguageModelFunction,
|
|
@@ -151,107 +153,144 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
151
153
|
|
|
152
154
|
@override
|
|
153
155
|
async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
|
|
154
|
-
|
|
155
|
-
tool_input = json.dumps(tool_call.arguments)
|
|
156
|
-
else:
|
|
157
|
-
tool_input = SubAgentToolInput.model_validate(
|
|
158
|
-
tool_call.arguments
|
|
159
|
-
).user_message
|
|
156
|
+
active_message_log: MessageLog | None = None
|
|
160
157
|
|
|
161
|
-
|
|
158
|
+
try:
|
|
159
|
+
if self.config.tool_input_json_schema is not None:
|
|
160
|
+
tool_input = json.dumps(tool_call.arguments)
|
|
161
|
+
else:
|
|
162
|
+
tool_input = SubAgentToolInput.model_validate(
|
|
163
|
+
tool_call.arguments
|
|
164
|
+
).user_message
|
|
162
165
|
|
|
163
|
-
|
|
164
|
-
await self._notify_progress(
|
|
165
|
-
tool_call=tool_call,
|
|
166
|
-
message=f"Waiting for another run of `{self.display_name()}` to finish",
|
|
167
|
-
state=ProgressState.STARTED,
|
|
168
|
-
)
|
|
166
|
+
timestamp = datetime.now()
|
|
169
167
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
if self._lock.locked():
|
|
169
|
+
await self._notify_progress(
|
|
170
|
+
tool_call=tool_call,
|
|
171
|
+
message=f"Waiting for another run of `{self.display_name()}` to finish",
|
|
172
|
+
state=ProgressState.STARTED,
|
|
173
|
+
)
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
active_message_log = self._create_or_update_message_log(
|
|
176
|
+
progress_message="_Waiting for another run of this sub agent to finish_",
|
|
177
|
+
active_message_log=active_message_log,
|
|
178
|
+
)
|
|
177
179
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
state=ProgressState.RUNNING,
|
|
182
|
-
)
|
|
180
|
+
# When reusing the chat id, executing the sub agent in parrallel leads to race conditions and undefined behavior.
|
|
181
|
+
# To avoid this, we use a lock to serialize the execution of the same sub agent.
|
|
182
|
+
context = self._lock if self.config.reuse_chat else contextlib.nullcontext()
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
async with context:
|
|
185
|
+
sequence_number = self._sequence_number
|
|
186
|
+
self._sequence_number += 1
|
|
186
187
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
188
|
+
await self._notify_progress(
|
|
189
|
+
tool_call=tool_call,
|
|
190
|
+
message=tool_input,
|
|
191
|
+
state=ProgressState.RUNNING,
|
|
192
|
+
)
|
|
192
193
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
active_message_log = self._create_or_update_message_log(
|
|
195
|
+
progress_message=f"_Executing sub agent with input: {tool_input}_",
|
|
196
|
+
active_message_log=active_message_log,
|
|
197
|
+
)
|
|
196
198
|
|
|
197
|
-
|
|
199
|
+
# Check if there is a saved chat id in short term memory
|
|
200
|
+
chat_id = await self._get_chat_id()
|
|
198
201
|
|
|
199
|
-
|
|
200
|
-
|
|
202
|
+
response = await self._execute_and_handle_timeout(
|
|
203
|
+
tool_user_message=tool_input,
|
|
204
|
+
chat_id=chat_id,
|
|
205
|
+
tool_call=tool_call,
|
|
206
|
+
active_message_log=active_message_log,
|
|
207
|
+
)
|
|
201
208
|
|
|
202
|
-
|
|
203
|
-
|
|
209
|
+
self._should_run_evaluation |= (
|
|
210
|
+
response["assessment"] is not None
|
|
211
|
+
and len(response["assessment"]) > 0
|
|
212
|
+
) # Run evaluation if any sub agent returned an assessment
|
|
204
213
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
content =
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
214
|
+
self._notify_watcher(response, sequence_number, timestamp)
|
|
215
|
+
|
|
216
|
+
if chat_id is None:
|
|
217
|
+
await self._save_chat_id(response["chatId"])
|
|
218
|
+
|
|
219
|
+
if response["text"] is None:
|
|
220
|
+
raise ValueError("No response returned from sub agent")
|
|
221
|
+
|
|
222
|
+
has_refs = False
|
|
223
|
+
content = ""
|
|
224
|
+
content_chunks = None
|
|
225
|
+
if self.config.returns_content_chunks:
|
|
226
|
+
content_chunks = _ContentChunkList.validate_json(response["text"])
|
|
227
|
+
else:
|
|
228
|
+
has_refs = (
|
|
229
|
+
self.config.use_sub_agent_references
|
|
230
|
+
and _response_has_refs(response)
|
|
231
|
+
)
|
|
232
|
+
content = response["text"]
|
|
233
|
+
if has_refs:
|
|
234
|
+
refs = response["references"]
|
|
235
|
+
assert refs is not None # Checked in _response_has_refs
|
|
236
|
+
content = _prepare_sub_agent_response_refs(
|
|
237
|
+
response=content,
|
|
238
|
+
name=self.name,
|
|
239
|
+
sequence_number=sequence_number,
|
|
240
|
+
refs=refs,
|
|
241
|
+
)
|
|
242
|
+
content = _remove_extra_refs(content, refs=refs)
|
|
243
|
+
else:
|
|
244
|
+
content = _remove_extra_refs(content, refs=[])
|
|
245
|
+
|
|
246
|
+
system_reminders = []
|
|
247
|
+
if not self.config.returns_content_chunks:
|
|
248
|
+
system_reminders = _get_sub_agent_system_reminders(
|
|
249
|
+
response=response["text"],
|
|
250
|
+
configs=self.config.system_reminders_config,
|
|
220
251
|
name=self.name,
|
|
252
|
+
display_name=self.display_name(),
|
|
221
253
|
sequence_number=sequence_number,
|
|
222
|
-
|
|
254
|
+
has_refs=has_refs,
|
|
223
255
|
)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if not self.config.returns_content_chunks:
|
|
230
|
-
system_reminders = _get_sub_agent_system_reminders(
|
|
231
|
-
response=response["text"],
|
|
232
|
-
configs=self.config.system_reminders_config,
|
|
233
|
-
name=self.name,
|
|
234
|
-
display_name=self.display_name(),
|
|
235
|
-
sequence_number=sequence_number,
|
|
236
|
-
has_refs=has_refs,
|
|
256
|
+
|
|
257
|
+
await self._notify_progress(
|
|
258
|
+
tool_call=tool_call,
|
|
259
|
+
message=tool_input,
|
|
260
|
+
state=ProgressState.FINISHED,
|
|
237
261
|
)
|
|
238
262
|
|
|
263
|
+
# Update message log entry to completed
|
|
264
|
+
active_message_log = self._create_or_update_message_log(
|
|
265
|
+
progress_message=f"_Completed sub agent with input: {tool_input}_",
|
|
266
|
+
status=MessageLogStatus.COMPLETED,
|
|
267
|
+
active_message_log=active_message_log,
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
return ToolCallResponse(
|
|
271
|
+
id=tool_call.id,
|
|
272
|
+
name=tool_call.name,
|
|
273
|
+
content=_format_response(
|
|
274
|
+
tool_name=self.name,
|
|
275
|
+
text=content,
|
|
276
|
+
system_reminders=system_reminders,
|
|
277
|
+
),
|
|
278
|
+
content_chunks=content_chunks,
|
|
279
|
+
)
|
|
280
|
+
except TimeoutError as e:
|
|
281
|
+
raise e
|
|
282
|
+
except Exception as e:
|
|
239
283
|
await self._notify_progress(
|
|
240
284
|
tool_call=tool_call,
|
|
241
|
-
message=
|
|
242
|
-
state=ProgressState.
|
|
285
|
+
message="Error while running sub agent",
|
|
286
|
+
state=ProgressState.FAILED,
|
|
243
287
|
)
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
content=_format_response(
|
|
249
|
-
tool_name=self.name,
|
|
250
|
-
text=content,
|
|
251
|
-
system_reminders=system_reminders,
|
|
252
|
-
),
|
|
253
|
-
content_chunks=content_chunks,
|
|
288
|
+
active_message_log = self._create_or_update_message_log(
|
|
289
|
+
progress_message="_Error while running sub agent_",
|
|
290
|
+
status=MessageLogStatus.FAILED,
|
|
291
|
+
active_message_log=active_message_log,
|
|
254
292
|
)
|
|
293
|
+
raise e
|
|
255
294
|
|
|
256
295
|
async def _get_chat_id(self) -> str | None:
|
|
257
296
|
if not self.config.reuse_chat:
|
|
@@ -282,7 +321,10 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
282
321
|
message: str,
|
|
283
322
|
state: ProgressState,
|
|
284
323
|
) -> None:
|
|
285
|
-
if
|
|
324
|
+
if (
|
|
325
|
+
self.tool_progress_reporter is not None
|
|
326
|
+
and not feature_flags.is_new_answers_ui_enabled(self._company_id)
|
|
327
|
+
):
|
|
286
328
|
await self.tool_progress_reporter.notify_from_tool_call(
|
|
287
329
|
tool_call=tool_call,
|
|
288
330
|
name=self._display_name,
|
|
@@ -290,6 +332,20 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
290
332
|
state=state,
|
|
291
333
|
)
|
|
292
334
|
|
|
335
|
+
def _create_or_update_message_log(
|
|
336
|
+
self,
|
|
337
|
+
*,
|
|
338
|
+
progress_message: str | None = None,
|
|
339
|
+
status: MessageLogStatus = MessageLogStatus.RUNNING,
|
|
340
|
+
active_message_log: MessageLog | None = None,
|
|
341
|
+
) -> MessageLog | None:
|
|
342
|
+
return self._message_step_logger.create_or_update_message_log(
|
|
343
|
+
active_message_log=active_message_log,
|
|
344
|
+
header=self._display_name,
|
|
345
|
+
progress_message=progress_message,
|
|
346
|
+
status=status,
|
|
347
|
+
)
|
|
348
|
+
|
|
293
349
|
def _notify_watcher(
|
|
294
350
|
self,
|
|
295
351
|
response: unique_sdk.Space.Message,
|
|
@@ -316,6 +372,7 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
316
372
|
tool_user_message: str,
|
|
317
373
|
chat_id: str | None,
|
|
318
374
|
tool_call: LanguageModelFunction,
|
|
375
|
+
active_message_log: MessageLog | None = None,
|
|
319
376
|
) -> unique_sdk.Space.Message:
|
|
320
377
|
try:
|
|
321
378
|
return await send_message_and_wait_for_completion(
|
|
@@ -335,6 +392,11 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
335
392
|
message="Timeout while waiting for response from sub agent.",
|
|
336
393
|
state=ProgressState.FAILED,
|
|
337
394
|
)
|
|
395
|
+
active_message_log = self._create_or_update_message_log(
|
|
396
|
+
progress_message="_Timeout while waiting for response from sub agent_",
|
|
397
|
+
status=MessageLogStatus.FAILED,
|
|
398
|
+
active_message_log=active_message_log,
|
|
399
|
+
)
|
|
338
400
|
|
|
339
401
|
raise TimeoutError(
|
|
340
402
|
"Timeout while waiting for response from sub agent. The user should consider increasing the max wait time.",
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py
RENAMED
|
@@ -5,6 +5,7 @@ from typing import Any, Dict
|
|
|
5
5
|
import unique_sdk
|
|
6
6
|
|
|
7
7
|
from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
|
|
8
|
+
from unique_toolkit.agentic.feature_flags import feature_flags
|
|
8
9
|
from unique_toolkit.agentic.tools.mcp.models import MCPToolConfig
|
|
9
10
|
from unique_toolkit.agentic.tools.schemas import ToolCallResponse
|
|
10
11
|
from unique_toolkit.agentic.tools.tool import Tool
|
|
@@ -13,6 +14,7 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
|
13
14
|
ToolProgressReporter,
|
|
14
15
|
)
|
|
15
16
|
from unique_toolkit.app.schemas import ChatEvent, McpServer, McpTool
|
|
17
|
+
from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
|
|
16
18
|
from unique_toolkit.language_model.schemas import (
|
|
17
19
|
LanguageModelFunction,
|
|
18
20
|
LanguageModelToolDescription,
|
|
@@ -99,11 +101,21 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
99
101
|
return []
|
|
100
102
|
|
|
101
103
|
async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
|
|
104
|
+
active_message_log: MessageLog | None = None
|
|
105
|
+
|
|
102
106
|
"""Execute the MCP tool using SDK to call public API"""
|
|
103
107
|
self.logger.info(f"Running MCP tool: {self.name}")
|
|
104
108
|
|
|
109
|
+
# Create message log entry for the MCP tool run
|
|
110
|
+
active_message_log = self._create_or_update_message_log(
|
|
111
|
+
progress_message="_Executing MCP tool_",
|
|
112
|
+
active_message_log=active_message_log,
|
|
113
|
+
)
|
|
114
|
+
|
|
105
115
|
# Notify progress if reporter is available
|
|
106
|
-
if self._tool_progress_reporter
|
|
116
|
+
if self._tool_progress_reporter and not feature_flags.is_new_answers_ui_enabled(
|
|
117
|
+
self.event.company_id
|
|
118
|
+
):
|
|
107
119
|
await self._tool_progress_reporter.notify_from_tool_call(
|
|
108
120
|
tool_call=tool_call,
|
|
109
121
|
name=f"**{self.display_name()}**",
|
|
@@ -131,7 +143,10 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
131
143
|
)
|
|
132
144
|
|
|
133
145
|
# Notify completion
|
|
134
|
-
if
|
|
146
|
+
if (
|
|
147
|
+
self._tool_progress_reporter
|
|
148
|
+
and not feature_flags.is_new_answers_ui_enabled(self.event.company_id)
|
|
149
|
+
):
|
|
135
150
|
await self._tool_progress_reporter.notify_from_tool_call(
|
|
136
151
|
tool_call=tool_call,
|
|
137
152
|
name=f"**{self.display_name()}**",
|
|
@@ -139,13 +154,23 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
139
154
|
state=ProgressState.FINISHED,
|
|
140
155
|
)
|
|
141
156
|
|
|
157
|
+
# Update message log entry to completed
|
|
158
|
+
active_message_log = self._create_or_update_message_log(
|
|
159
|
+
progress_message="_Completed MCP tool_",
|
|
160
|
+
status=MessageLogStatus.COMPLETED,
|
|
161
|
+
active_message_log=active_message_log,
|
|
162
|
+
)
|
|
163
|
+
|
|
142
164
|
return tool_response
|
|
143
165
|
|
|
144
166
|
except Exception as e:
|
|
145
167
|
self.logger.error(f"Error executing MCP tool {self.name}: {e}")
|
|
146
168
|
|
|
147
169
|
# Notify failure
|
|
148
|
-
if
|
|
170
|
+
if (
|
|
171
|
+
self._tool_progress_reporter
|
|
172
|
+
and not feature_flags.is_new_answers_ui_enabled(self.event.company_id)
|
|
173
|
+
):
|
|
149
174
|
await self._tool_progress_reporter.notify_from_tool_call(
|
|
150
175
|
tool_call=tool_call,
|
|
151
176
|
name=f"**{self.display_name()}**",
|
|
@@ -153,6 +178,12 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
153
178
|
state=ProgressState.FAILED,
|
|
154
179
|
)
|
|
155
180
|
|
|
181
|
+
# Update message log entry to failed
|
|
182
|
+
active_message_log = self._create_or_update_message_log(
|
|
183
|
+
progress_message="_Failed executing MCP tool_",
|
|
184
|
+
status=MessageLogStatus.FAILED,
|
|
185
|
+
)
|
|
186
|
+
|
|
156
187
|
return ToolCallResponse(
|
|
157
188
|
id=tool_call.id or "",
|
|
158
189
|
name=self.name,
|
|
@@ -164,6 +195,20 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
164
195
|
error_message=str(e),
|
|
165
196
|
)
|
|
166
197
|
|
|
198
|
+
def _create_or_update_message_log(
|
|
199
|
+
self,
|
|
200
|
+
*,
|
|
201
|
+
progress_message: str | None = None,
|
|
202
|
+
status: MessageLogStatus = MessageLogStatus.RUNNING,
|
|
203
|
+
active_message_log: MessageLog | None = None,
|
|
204
|
+
) -> MessageLog | None:
|
|
205
|
+
return self._message_step_logger.create_or_update_message_log(
|
|
206
|
+
active_message_log=active_message_log,
|
|
207
|
+
header=self.display_name(),
|
|
208
|
+
progress_message=progress_message,
|
|
209
|
+
status=status,
|
|
210
|
+
)
|
|
211
|
+
|
|
167
212
|
def _extract_and_validate_arguments(
|
|
168
213
|
self, tool_call: LanguageModelFunction
|
|
169
214
|
) -> Dict[str, Any]:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/base_model_type_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/endpoint_requestor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/image_token_counting.py
RENAMED
|
File without changes
|
{unique_toolkit-1.45.1 → unique_toolkit-1.45.3}/unique_toolkit/_common/token/token_counting.py
RENAMED
|
File without changes
|