unique_toolkit 1.19.2__tar.gz → 1.20.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/CHANGELOG.md +11 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/PKG-INFO +12 -1
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/pyproject.toml +1 -1
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +71 -19
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +1 -1
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display.py +19 -10
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +12 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/postprocessor.py +28 -12
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +71 -10
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/execution/execution.py +8 -4
- unique_toolkit-1.20.0/unique_toolkit/chat/rendering.py +34 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/LICENSE +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/README.md +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/hallucination/prompts.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_consolidate_references.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_postprocessor_reference_functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/execution/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.19.2 → unique_toolkit-1.20.0}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -5,6 +5,16 @@ 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
|
+
|
|
9
|
+
## [1.20.0] - 2025-10-30
|
|
10
|
+
- Fix bug where async tasks executed with `SafeTaskExecutor` did not log exceptions.
|
|
11
|
+
- Add option to customize sub agent response display title.
|
|
12
|
+
- Add option to display sub agent responses after the main agent response.
|
|
13
|
+
- Add option to specify postprocessors to run before or after the others in the `PostprocessorManager`.
|
|
14
|
+
|
|
15
|
+
## [1.19.3] - 2025-10-29
|
|
16
|
+
- More documentation on advanced rendering
|
|
17
|
+
|
|
8
18
|
## [1.19.2] - 2025-10-29
|
|
9
19
|
- Removing unused tool specific `get_tool_call_result_for_loop_history` function
|
|
10
20
|
- Removing unused experimental config `full_sources_serialize_dump` in `history_manager`
|
|
@@ -16,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
16
26
|
## [1.19.0] - 2025-10-28
|
|
17
27
|
- Enable additional headers on openai and langchain client
|
|
18
28
|
|
|
29
|
+
|
|
19
30
|
## [1.18.1] - 2025-10-28
|
|
20
31
|
- Fix bug where sub agent references were not properly displayed in the main agent response when the sub agent response was hidden.
|
|
21
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: unique_toolkit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.20.0
|
|
4
4
|
Summary:
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Author: Cedric Klinkert
|
|
@@ -118,6 +118,16 @@ All notable changes to this project will be documented in this file.
|
|
|
118
118
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
119
119
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
120
120
|
|
|
121
|
+
|
|
122
|
+
## [1.20.0] - 2025-10-30
|
|
123
|
+
- Fix bug where async tasks executed with `SafeTaskExecutor` did not log exceptions.
|
|
124
|
+
- Add option to customize sub agent response display title.
|
|
125
|
+
- Add option to display sub agent responses after the main agent response.
|
|
126
|
+
- Add option to specify postprocessors to run before or after the others in the `PostprocessorManager`.
|
|
127
|
+
|
|
128
|
+
## [1.19.3] - 2025-10-29
|
|
129
|
+
- More documentation on advanced rendering
|
|
130
|
+
|
|
121
131
|
## [1.19.2] - 2025-10-29
|
|
122
132
|
- Removing unused tool specific `get_tool_call_result_for_loop_history` function
|
|
123
133
|
- Removing unused experimental config `full_sources_serialize_dump` in `history_manager`
|
|
@@ -129,6 +139,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
129
139
|
## [1.19.0] - 2025-10-28
|
|
130
140
|
- Enable additional headers on openai and langchain client
|
|
131
141
|
|
|
142
|
+
|
|
132
143
|
## [1.18.1] - 2025-10-28
|
|
133
144
|
- Fix bug where sub agent references were not properly displayed in the main agent response when the sub agent response was hidden.
|
|
134
145
|
|
|
@@ -85,15 +85,39 @@ class PostprocessorManager:
|
|
|
85
85
|
self._chat_service = chat_service
|
|
86
86
|
self._postprocessors: list[Postprocessor | ResponsesApiPostprocessor] = []
|
|
87
87
|
|
|
88
|
+
# Allow to add postprocessors that should be run before or after the others.
|
|
89
|
+
self._first_postprocessor: Postprocessor | ResponsesApiPostprocessor | None = (
|
|
90
|
+
None
|
|
91
|
+
)
|
|
92
|
+
self._last_postprocessor: Postprocessor | ResponsesApiPostprocessor | None = (
|
|
93
|
+
None
|
|
94
|
+
)
|
|
95
|
+
|
|
88
96
|
def add_postprocessor(
|
|
89
97
|
self, postprocessor: Postprocessor | ResponsesApiPostprocessor
|
|
90
98
|
):
|
|
91
99
|
self._postprocessors.append(postprocessor)
|
|
92
100
|
|
|
101
|
+
def set_first_postprocessor(
|
|
102
|
+
self, postprocessor: Postprocessor | ResponsesApiPostprocessor
|
|
103
|
+
) -> None:
|
|
104
|
+
if self._first_postprocessor is not None:
|
|
105
|
+
raise ValueError("Cannot set first postprocessor if already set.")
|
|
106
|
+
|
|
107
|
+
self._first_postprocessor = postprocessor
|
|
108
|
+
|
|
109
|
+
def set_last_postprocessor(
|
|
110
|
+
self, postprocessor: Postprocessor | ResponsesApiPostprocessor
|
|
111
|
+
) -> None:
|
|
112
|
+
if self._last_postprocessor is not None:
|
|
113
|
+
raise ValueError("Cannot set last postprocessor if already set.")
|
|
114
|
+
|
|
115
|
+
self._last_postprocessor = postprocessor
|
|
116
|
+
|
|
93
117
|
def get_postprocessors(
|
|
94
118
|
self, name: str
|
|
95
119
|
) -> list[Postprocessor | ResponsesApiPostprocessor]:
|
|
96
|
-
return self.
|
|
120
|
+
return self._get_all_postprocessors()
|
|
97
121
|
|
|
98
122
|
async def run_postprocessors(
|
|
99
123
|
self,
|
|
@@ -103,14 +127,7 @@ class PostprocessorManager:
|
|
|
103
127
|
logger=self._logger,
|
|
104
128
|
)
|
|
105
129
|
|
|
106
|
-
|
|
107
|
-
postprocessors = self._postprocessors
|
|
108
|
-
else:
|
|
109
|
-
postprocessors = [
|
|
110
|
-
postprocessor
|
|
111
|
-
for postprocessor in self._postprocessors
|
|
112
|
-
if isinstance(postprocessor, Postprocessor)
|
|
113
|
-
]
|
|
130
|
+
postprocessors = self._get_valid_postprocessors_for_loop_response(loop_response)
|
|
114
131
|
|
|
115
132
|
tasks = [
|
|
116
133
|
task_executor.execute_async(
|
|
@@ -122,17 +139,14 @@ class PostprocessorManager:
|
|
|
122
139
|
]
|
|
123
140
|
postprocessor_results = await asyncio.gather(*tasks)
|
|
124
141
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
postprocessor.get_name(),
|
|
130
|
-
exc_info=result.exception,
|
|
131
|
-
)
|
|
142
|
+
successful_postprocessors: list[Postprocessor | ResponsesApiPostprocessor] = []
|
|
143
|
+
for i in range(len(postprocessors)):
|
|
144
|
+
if postprocessor_results[i].success:
|
|
145
|
+
successful_postprocessors.append(postprocessors[i])
|
|
132
146
|
|
|
133
147
|
modification_results = [
|
|
134
|
-
postprocessor.apply_postprocessing_to_response(loop_response) # type: ignore
|
|
135
|
-
for postprocessor in
|
|
148
|
+
postprocessor.apply_postprocessing_to_response(loop_response) # type: ignore (checked in `get_valid_postprocessors_for_loop_response`)
|
|
149
|
+
for postprocessor in successful_postprocessors
|
|
136
150
|
]
|
|
137
151
|
|
|
138
152
|
has_been_modified = any(modification_results)
|
|
@@ -155,6 +169,44 @@ class PostprocessorManager:
|
|
|
155
169
|
self,
|
|
156
170
|
text: str,
|
|
157
171
|
) -> str:
|
|
158
|
-
for postprocessor in self.
|
|
172
|
+
for postprocessor in self._get_all_postprocessors():
|
|
159
173
|
text = await postprocessor.remove_from_text(text)
|
|
160
174
|
return text
|
|
175
|
+
|
|
176
|
+
def _get_all_postprocessors(
|
|
177
|
+
self,
|
|
178
|
+
) -> list[Postprocessor | ResponsesApiPostprocessor]:
|
|
179
|
+
return [
|
|
180
|
+
postprocessor
|
|
181
|
+
for postprocessor in [
|
|
182
|
+
self._first_postprocessor,
|
|
183
|
+
*self._postprocessors,
|
|
184
|
+
self._last_postprocessor,
|
|
185
|
+
]
|
|
186
|
+
if postprocessor is not None
|
|
187
|
+
]
|
|
188
|
+
|
|
189
|
+
def _get_valid_postprocessors_for_loop_response(
|
|
190
|
+
self, loop_response: LanguageModelStreamResponse
|
|
191
|
+
) -> list[Postprocessor | ResponsesApiPostprocessor]:
|
|
192
|
+
all_postprocessors = self._get_all_postprocessors()
|
|
193
|
+
|
|
194
|
+
postprocessors: list[Postprocessor | ResponsesApiPostprocessor] = []
|
|
195
|
+
|
|
196
|
+
if isinstance(loop_response, ResponsesLanguageModelStreamResponse):
|
|
197
|
+
"""
|
|
198
|
+
All processore can be executed, since `ResponsesLanguageModelStreamResponse`
|
|
199
|
+
is a subclass of `LanguageModelStreamResponse`
|
|
200
|
+
"""
|
|
201
|
+
postprocessors = all_postprocessors
|
|
202
|
+
else:
|
|
203
|
+
"""
|
|
204
|
+
Cannot execute Responses API-specific postprocessors
|
|
205
|
+
"""
|
|
206
|
+
postprocessors = [
|
|
207
|
+
postprocessor
|
|
208
|
+
for postprocessor in all_postprocessors
|
|
209
|
+
if isinstance(postprocessor, Postprocessor)
|
|
210
|
+
]
|
|
211
|
+
|
|
212
|
+
return postprocessors
|
|
@@ -52,7 +52,7 @@ def _format_single_assessment_found(name: str, explanation: str) -> str:
|
|
|
52
52
|
return _SingleAssessmentData(name=name, explanation=explanation).model_dump_json()
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
@failsafe(failure_return_value=False)
|
|
55
|
+
@failsafe(failure_return_value=False, log_exceptions=False)
|
|
56
56
|
def _is_single_assessment_found(value: str) -> bool:
|
|
57
57
|
_ = _SingleAssessmentData.model_validate_json(value)
|
|
58
58
|
return True
|
|
@@ -77,10 +77,17 @@ def _add_line_break(text: str, before: bool = True, after: bool = True) -> str:
|
|
|
77
77
|
return _wrap_text(text, start_tag, end_tag)
|
|
78
78
|
|
|
79
79
|
|
|
80
|
+
def _prepare_title_template(
|
|
81
|
+
display_title_template: str, display_name_placeholder: str
|
|
82
|
+
) -> str:
|
|
83
|
+
return display_title_template.replace("{}", "{%s}" % display_name_placeholder)
|
|
84
|
+
|
|
85
|
+
|
|
80
86
|
def _get_display_template(
|
|
81
87
|
mode: SubAgentResponseDisplayMode,
|
|
82
88
|
add_quote_border: bool,
|
|
83
89
|
add_block_border: bool,
|
|
90
|
+
display_title_template: str,
|
|
84
91
|
answer_placeholder: str = "answer",
|
|
85
92
|
assistant_id_placeholder: str = "assistant_id",
|
|
86
93
|
display_name_placeholder: str = "display_name",
|
|
@@ -89,7 +96,9 @@ def _get_display_template(
|
|
|
89
96
|
return ""
|
|
90
97
|
|
|
91
98
|
assistant_id_placeholder = _wrap_hidden_div("{%s}" % assistant_id_placeholder)
|
|
92
|
-
|
|
99
|
+
title_template = _prepare_title_template(
|
|
100
|
+
display_title_template, display_name_placeholder
|
|
101
|
+
)
|
|
93
102
|
template = _join_text_blocks(
|
|
94
103
|
assistant_id_placeholder, "{%s}" % answer_placeholder, sep="\n\n"
|
|
95
104
|
) # Double line break is needed for markdown formatting
|
|
@@ -104,20 +113,14 @@ def _get_display_template(
|
|
|
104
113
|
template = _wrap_with_details_tag(
|
|
105
114
|
template,
|
|
106
115
|
"open",
|
|
107
|
-
|
|
116
|
+
title_template,
|
|
108
117
|
)
|
|
109
118
|
case SubAgentResponseDisplayMode.DETAILS_CLOSED:
|
|
110
|
-
template = _wrap_with_details_tag(
|
|
111
|
-
template, "closed", display_name_placeholder
|
|
112
|
-
)
|
|
119
|
+
template = _wrap_with_details_tag(template, "closed", title_template)
|
|
113
120
|
case SubAgentResponseDisplayMode.PLAIN:
|
|
114
|
-
display_name_placeholder = _add_line_break(
|
|
115
|
-
display_name_placeholder, before=False, after=True
|
|
116
|
-
)
|
|
117
|
-
template = _join_text_blocks(display_name_placeholder, template)
|
|
118
121
|
# Add a hidden block border to seperate sub agent answers from the rest of the text.
|
|
119
122
|
hidden_block_border = _wrap_hidden_div("sub_agent_answer_block")
|
|
120
|
-
template = _join_text_blocks(template, hidden_block_border)
|
|
123
|
+
template = _join_text_blocks(title_template, template, hidden_block_border)
|
|
121
124
|
|
|
122
125
|
if add_block_border:
|
|
123
126
|
template = _wrap_with_block_border(template)
|
|
@@ -130,11 +133,13 @@ def _get_display_removal_re(
|
|
|
130
133
|
mode: SubAgentResponseDisplayMode,
|
|
131
134
|
add_quote_border: bool,
|
|
132
135
|
add_block_border: bool,
|
|
136
|
+
display_title_template: str,
|
|
133
137
|
) -> re.Pattern[str]:
|
|
134
138
|
template = _get_display_template(
|
|
135
139
|
mode=mode,
|
|
136
140
|
add_quote_border=add_quote_border,
|
|
137
141
|
add_block_border=add_block_border,
|
|
142
|
+
display_title_template=display_title_template,
|
|
138
143
|
)
|
|
139
144
|
|
|
140
145
|
pattern = template.format(
|
|
@@ -147,6 +152,7 @@ def _get_display_removal_re(
|
|
|
147
152
|
def _build_sub_agent_answer_display(
|
|
148
153
|
display_name: str,
|
|
149
154
|
display_mode: SubAgentResponseDisplayMode,
|
|
155
|
+
display_title_template: str,
|
|
150
156
|
add_quote_border: bool,
|
|
151
157
|
add_block_border: bool,
|
|
152
158
|
answer: str,
|
|
@@ -156,6 +162,7 @@ def _build_sub_agent_answer_display(
|
|
|
156
162
|
mode=display_mode,
|
|
157
163
|
add_quote_border=add_quote_border,
|
|
158
164
|
add_block_border=add_block_border,
|
|
165
|
+
display_title_template=display_title_template,
|
|
159
166
|
)
|
|
160
167
|
return template.format(
|
|
161
168
|
display_name=display_name, answer=answer, assistant_id=assistant_id
|
|
@@ -168,11 +175,13 @@ def _remove_sub_agent_answer_from_text(
|
|
|
168
175
|
add_block_border: bool,
|
|
169
176
|
text: str,
|
|
170
177
|
assistant_id: str,
|
|
178
|
+
display_title_template: str,
|
|
171
179
|
) -> str:
|
|
172
180
|
pattern = _get_display_removal_re(
|
|
173
181
|
assistant_id=assistant_id,
|
|
174
182
|
mode=display_mode,
|
|
175
183
|
add_quote_border=add_quote_border,
|
|
176
184
|
add_block_border=add_block_border,
|
|
185
|
+
display_title_template=display_title_template,
|
|
177
186
|
)
|
|
178
187
|
return re.sub(pattern, "", text)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from enum import StrEnum
|
|
2
|
+
from typing import Literal
|
|
2
3
|
|
|
3
4
|
from pydantic import BaseModel, Field
|
|
4
5
|
|
|
@@ -31,3 +32,14 @@ class SubAgentDisplayConfig(BaseModel):
|
|
|
31
32
|
default=False,
|
|
32
33
|
description="If set, a block border is added around the sub agent response.",
|
|
33
34
|
)
|
|
35
|
+
display_title_template: str = Field(
|
|
36
|
+
default="Answer from <strong>{}</strong>",
|
|
37
|
+
description=(
|
|
38
|
+
"The template to use for the display title of the sub agent response."
|
|
39
|
+
"If a placeholder '{}' is present, it will be replaced with the display name of the sub agent."
|
|
40
|
+
),
|
|
41
|
+
)
|
|
42
|
+
position: Literal["before", "after"] = Field(
|
|
43
|
+
default="before",
|
|
44
|
+
description="The position of the sub agent response in the main agent response.",
|
|
45
|
+
)
|
|
@@ -116,7 +116,9 @@ class SubAgentResponsesPostprocessor(Postprocessor):
|
|
|
116
116
|
list(displayed_sub_agent_infos.values()), existing_refs
|
|
117
117
|
)
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
answers_displayed_before = []
|
|
120
|
+
answers_displayed_after = []
|
|
121
|
+
|
|
120
122
|
for assistant_id in displayed_sub_agent_infos.keys():
|
|
121
123
|
messages = self._assistant_id_to_tool_info[assistant_id]["responses"]
|
|
122
124
|
|
|
@@ -129,17 +131,23 @@ class SubAgentResponsesPostprocessor(Postprocessor):
|
|
|
129
131
|
if len(messages) > 1:
|
|
130
132
|
display_name += f" {sequence_number}"
|
|
131
133
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
answer = _build_sub_agent_answer_display(
|
|
135
|
+
display_name=display_name,
|
|
136
|
+
display_mode=display_mode,
|
|
137
|
+
add_quote_border=tool_info["display_config"].add_quote_border,
|
|
138
|
+
add_block_border=tool_info["display_config"].add_block_border,
|
|
139
|
+
answer=message["text"],
|
|
140
|
+
assistant_id=assistant_id,
|
|
141
|
+
display_title_template=tool_info[
|
|
142
|
+
"display_config"
|
|
143
|
+
].display_title_template,
|
|
141
144
|
)
|
|
142
145
|
|
|
146
|
+
if tool_info["display_config"].position == "before":
|
|
147
|
+
answers_displayed_before.append(answer)
|
|
148
|
+
else:
|
|
149
|
+
answers_displayed_after.append(answer)
|
|
150
|
+
|
|
143
151
|
loop_response.message.references.extend(
|
|
144
152
|
ContentReference(
|
|
145
153
|
message_id=self._main_agent_message["id"],
|
|
@@ -152,13 +160,20 @@ class SubAgentResponsesPostprocessor(Postprocessor):
|
|
|
152
160
|
for ref in message["references"]
|
|
153
161
|
)
|
|
154
162
|
|
|
155
|
-
if len(
|
|
163
|
+
if len(answers_displayed_before) > 0:
|
|
156
164
|
loop_response.message.text = (
|
|
157
|
-
"<br>\n\n".join(
|
|
165
|
+
"<br>\n\n".join(answers_displayed_before)
|
|
158
166
|
+ "<br>\n\n"
|
|
159
167
|
+ loop_response.message.text.strip()
|
|
160
168
|
)
|
|
161
169
|
|
|
170
|
+
if len(answers_displayed_after) > 0:
|
|
171
|
+
loop_response.message.text = (
|
|
172
|
+
loop_response.message.text.strip()
|
|
173
|
+
+ "<br>\n\n"
|
|
174
|
+
+ "<br>\n\n".join(answers_displayed_after)
|
|
175
|
+
)
|
|
176
|
+
|
|
162
177
|
return True
|
|
163
178
|
|
|
164
179
|
@override
|
|
@@ -172,6 +187,7 @@ class SubAgentResponsesPostprocessor(Postprocessor):
|
|
|
172
187
|
assistant_id=assistant_id,
|
|
173
188
|
add_quote_border=display_config.add_quote_border,
|
|
174
189
|
add_block_border=display_config.add_block_border,
|
|
190
|
+
display_title_template=display_config.display_title_template,
|
|
175
191
|
)
|
|
176
192
|
return text
|
|
177
193
|
|