unique_toolkit 1.52.0__tar.gz → 1.53.1__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.52.0 → unique_toolkit-1.53.1}/PKG-INFO +2 -1
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/pyproject.toml +2 -1
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/pydantic/rjsf_tags.py +5 -2
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/responses_api.py +127 -3
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/services/chat_service.py +30 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/README.md +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-toolkit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.53.1
|
|
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>
|
|
@@ -29,6 +29,7 @@ Requires-Dist: pandas>=2.3.0,<3
|
|
|
29
29
|
Requires-Dist: click>=8.1.0,<9
|
|
30
30
|
Requires-Dist: deepdiff>=8.6.1,<9
|
|
31
31
|
Requires-Dist: pypandoc>=1.16.2,<2
|
|
32
|
+
Requires-Dist: tenacity>=9.1.4
|
|
32
33
|
Requires-Dist: fastapi>=0.121.0,<0.122 ; extra == 'fastapi'
|
|
33
34
|
Requires-Dist: starlette>=0.49.1 ; extra == 'fastapi'
|
|
34
35
|
Requires-Dist: uvicorn>=0.37.0,<0.38 ; extra == 'fastapi'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.53.1"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -41,6 +41,7 @@ dependencies = [
|
|
|
41
41
|
"click>=8.1.0,<9",
|
|
42
42
|
"deepdiff>=8.6.1,<9",
|
|
43
43
|
"pypandoc>=1.16.2,<2",
|
|
44
|
+
"tenacity>=9.1.4",
|
|
44
45
|
]
|
|
45
46
|
|
|
46
47
|
[project.optional-dependencies]
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
@@ -13,6 +13,7 @@ Key components:
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
import types
|
|
16
17
|
from collections.abc import Callable
|
|
17
18
|
from enum import StrEnum
|
|
18
19
|
from typing import Annotated, Any, Union, get_args, get_origin
|
|
@@ -20,6 +21,8 @@ from typing import Annotated, Any, Union, get_args, get_origin
|
|
|
20
21
|
from pydantic import BaseModel
|
|
21
22
|
from typing_extensions import get_type_hints
|
|
22
23
|
|
|
24
|
+
_UNION_ORIGINS = {Union, types.UnionType}
|
|
25
|
+
|
|
23
26
|
|
|
24
27
|
class CustomWidgetName(StrEnum):
|
|
25
28
|
"""Mirrors TypeScript CustomWidgetName. Keep in sync when extending."""
|
|
@@ -774,7 +777,7 @@ def _unwrap_optional(ann: Any) -> Any:
|
|
|
774
777
|
The unwrapped type if it was Optional/Union with None, otherwise
|
|
775
778
|
the original type unchanged
|
|
776
779
|
"""
|
|
777
|
-
if get_origin(ann)
|
|
780
|
+
if get_origin(ann) in _UNION_ORIGINS:
|
|
778
781
|
args = [a for a in get_args(ann) if a not in _NONE_TYPES]
|
|
779
782
|
if len(args) == 1:
|
|
780
783
|
return args[0]
|
|
@@ -921,7 +924,7 @@ def ui_schema_for_model(
|
|
|
921
924
|
node["additionalProperties"] = val_node
|
|
922
925
|
|
|
923
926
|
# Union -> anyOf branches
|
|
924
|
-
elif origin
|
|
927
|
+
elif origin in _UNION_ORIGINS:
|
|
925
928
|
branches = []
|
|
926
929
|
for alt in get_args(base):
|
|
927
930
|
if alt in _NONE_TYPES:
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
+
import random
|
|
4
|
+
from collections.abc import Awaitable, Callable
|
|
3
5
|
from typing import Any, NamedTuple, Sequence
|
|
4
6
|
|
|
5
7
|
import unique_sdk
|
|
@@ -13,7 +15,14 @@ from openai.types.responses import (
|
|
|
13
15
|
response_create_params,
|
|
14
16
|
)
|
|
15
17
|
from openai.types.shared_params import Metadata, Reasoning
|
|
16
|
-
from pydantic import BaseModel, TypeAdapter, ValidationError
|
|
18
|
+
from pydantic import BaseModel, Field, TypeAdapter, ValidationError
|
|
19
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
20
|
+
from tenacity import (
|
|
21
|
+
AsyncRetrying,
|
|
22
|
+
RetryCallState,
|
|
23
|
+
retry_if_exception,
|
|
24
|
+
stop_after_attempt,
|
|
25
|
+
)
|
|
17
26
|
|
|
18
27
|
from unique_toolkit._common.execution import (
|
|
19
28
|
failsafe,
|
|
@@ -329,6 +338,114 @@ def _prepare_responses_args(
|
|
|
329
338
|
return options
|
|
330
339
|
|
|
331
340
|
|
|
341
|
+
_RATE_LIMIT_KEYWORDS = ("too_many_requests", "too many requests", "ratelimitreached")
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
class RateLimitRetryConfig(BaseSettings):
|
|
345
|
+
"""Config for Responses API rate-limit retry. Set via env vars with prefix RATE_LIMIT_RETRY_."""
|
|
346
|
+
|
|
347
|
+
initial_delay_seconds: float = Field(
|
|
348
|
+
default=30.0,
|
|
349
|
+
description="First wait after SDK retries exhausted. Backoff then 2x (30→60→120s).",
|
|
350
|
+
)
|
|
351
|
+
max_attempts: int = Field(
|
|
352
|
+
default=2,
|
|
353
|
+
ge=1,
|
|
354
|
+
le=10,
|
|
355
|
+
description="Total attempts (1 initial + retries). Default 2 = 1 retry (~30s wait). Set to 1 to disable.",
|
|
356
|
+
)
|
|
357
|
+
log_message_on_retry: bool = Field(
|
|
358
|
+
default=True,
|
|
359
|
+
description="Write a message-log entry when a retry is about to sleep (e.g. 'Retrying in 30s').",
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
model_config = SettingsConfigDict(
|
|
363
|
+
env_prefix="RATE_LIMIT_RETRY_",
|
|
364
|
+
env_file=".env",
|
|
365
|
+
env_file_encoding="utf-8",
|
|
366
|
+
case_sensitive=False,
|
|
367
|
+
extra="ignore",
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
rate_limit_retry_config = RateLimitRetryConfig()
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def _rate_limit_wait(retry_state: RetryCallState) -> float:
|
|
375
|
+
"""Exponential backoff with up to 10% jitter: initial_delay → 2x → 4x."""
|
|
376
|
+
n = retry_state.attempt_number - 1 # 0-indexed
|
|
377
|
+
base = rate_limit_retry_config.initial_delay_seconds * (2.0**n)
|
|
378
|
+
return base + random.uniform(0.0, base * 0.1)
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
async def _responses_stream_with_rate_limit_retry(
|
|
382
|
+
responses_args: dict[str, Any],
|
|
383
|
+
model_name: str,
|
|
384
|
+
on_rate_limit_retry: Callable[[int, float], Awaitable[None]] | None = None,
|
|
385
|
+
) -> "unique_sdk.Integrated.ResponsesStreamResult":
|
|
386
|
+
"""Wrap responses_stream_async with exponential backoff for rate-limit errors.
|
|
387
|
+
|
|
388
|
+
The SDK already retries 3× (1s/2s/4s) before raising. This layer adds further
|
|
389
|
+
retries with longer delays, which are needed for models with tighter RPM limits
|
|
390
|
+
(e.g. GPT-4o) when large-token requests (web search, code execution) are in the loop.
|
|
391
|
+
|
|
392
|
+
Args:
|
|
393
|
+
responses_args: Keyword arguments forwarded to responses_stream_async.
|
|
394
|
+
model_name: Model name used in log messages.
|
|
395
|
+
on_rate_limit_retry: Optional async callback invoked before each retry sleep.
|
|
396
|
+
Receives (attempt_1based, wait_seconds). Useful for writing a message-log
|
|
397
|
+
entry so the user sees progress during long waits.
|
|
398
|
+
"""
|
|
399
|
+
|
|
400
|
+
def _is_rate_limit(exc: BaseException) -> bool:
|
|
401
|
+
return isinstance(exc, unique_sdk.APIError) and any(
|
|
402
|
+
kw in str(exc).lower() for kw in _RATE_LIMIT_KEYWORDS
|
|
403
|
+
)
|
|
404
|
+
|
|
405
|
+
max_attempts = rate_limit_retry_config.max_attempts
|
|
406
|
+
max_retries = max_attempts - 1
|
|
407
|
+
|
|
408
|
+
def _log_attempt(retry_state: RetryCallState) -> None:
|
|
409
|
+
exc = retry_state.outcome.exception() if retry_state.outcome else None
|
|
410
|
+
if exc is None:
|
|
411
|
+
return
|
|
412
|
+
logger.error(
|
|
413
|
+
"responses_stream_async error on toolkit attempt %d/%d "
|
|
414
|
+
"model=%s code=%s http_status=%s is_rate_limit=%s original_error=%r",
|
|
415
|
+
retry_state.attempt_number,
|
|
416
|
+
max_attempts,
|
|
417
|
+
model_name,
|
|
418
|
+
getattr(exc, "code", None),
|
|
419
|
+
getattr(exc, "http_status", None),
|
|
420
|
+
_is_rate_limit(exc),
|
|
421
|
+
getattr(exc, "original_error", None),
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
async def _before_sleep(retry_state: RetryCallState) -> None:
|
|
425
|
+
wait_secs = retry_state.upcoming_sleep
|
|
426
|
+
logger.warning(
|
|
427
|
+
"Rate limit hit for model=%s. Toolkit-level retry %d/%d in %.1fs",
|
|
428
|
+
model_name,
|
|
429
|
+
retry_state.attempt_number,
|
|
430
|
+
max_retries,
|
|
431
|
+
wait_secs,
|
|
432
|
+
)
|
|
433
|
+
if on_rate_limit_retry is not None:
|
|
434
|
+
await on_rate_limit_retry(retry_state.attempt_number, wait_secs)
|
|
435
|
+
|
|
436
|
+
async def _call() -> "unique_sdk.Integrated.ResponsesStreamResult":
|
|
437
|
+
return await unique_sdk.Integrated.responses_stream_async(**responses_args)
|
|
438
|
+
|
|
439
|
+
return await AsyncRetrying(
|
|
440
|
+
retry=retry_if_exception(_is_rate_limit),
|
|
441
|
+
stop=stop_after_attempt(max_attempts),
|
|
442
|
+
wait=_rate_limit_wait,
|
|
443
|
+
after=_log_attempt,
|
|
444
|
+
before_sleep=_before_sleep,
|
|
445
|
+
reraise=True,
|
|
446
|
+
)(_call)
|
|
447
|
+
|
|
448
|
+
|
|
332
449
|
def stream_responses_with_references(
|
|
333
450
|
*,
|
|
334
451
|
company_id: str,
|
|
@@ -426,6 +543,7 @@ async def stream_responses_with_references_async(
|
|
|
426
543
|
top_p: float | None = None,
|
|
427
544
|
reasoning: Reasoning | None = None,
|
|
428
545
|
other_options: dict | None = None,
|
|
546
|
+
on_rate_limit_retry: Callable[[int, float], Awaitable[None]] | None = None,
|
|
429
547
|
) -> ResponsesLanguageModelStreamResponse:
|
|
430
548
|
responses_params = _prepare_responses_params_util(
|
|
431
549
|
model_name=model_name,
|
|
@@ -458,8 +576,14 @@ async def stream_responses_with_references_async(
|
|
|
458
576
|
other_options=other_options,
|
|
459
577
|
)
|
|
460
578
|
|
|
579
|
+
logger.info(
|
|
580
|
+
"Calling responses_stream_async model=%s",
|
|
581
|
+
responses_params.model_name,
|
|
582
|
+
)
|
|
461
583
|
return ResponsesLanguageModelStreamResponse.model_validate(
|
|
462
|
-
await
|
|
463
|
-
|
|
584
|
+
await _responses_stream_with_rate_limit_retry(
|
|
585
|
+
responses_args=responses_args,
|
|
586
|
+
model_name=responses_params.model_name,
|
|
587
|
+
on_rate_limit_retry=on_rate_limit_retry,
|
|
464
588
|
)
|
|
465
589
|
)
|
|
@@ -17,6 +17,7 @@ from pydantic import BaseModel
|
|
|
17
17
|
from typing_extensions import deprecated
|
|
18
18
|
|
|
19
19
|
from unique_toolkit._common.utils.files import is_file_content, is_image_content
|
|
20
|
+
from unique_toolkit.agentic.feature_flags import feature_flags
|
|
20
21
|
from unique_toolkit.chat.cancellation import CancellationWatcher
|
|
21
22
|
from unique_toolkit.chat.constants import (
|
|
22
23
|
DEFAULT_MAX_MESSAGES,
|
|
@@ -50,6 +51,7 @@ from unique_toolkit.chat.functions import (
|
|
|
50
51
|
update_message_log_async,
|
|
51
52
|
)
|
|
52
53
|
from unique_toolkit.chat.responses_api import (
|
|
54
|
+
rate_limit_retry_config,
|
|
53
55
|
stream_responses_with_references,
|
|
54
56
|
stream_responses_with_references_async,
|
|
55
57
|
)
|
|
@@ -1637,6 +1639,33 @@ class ChatService(ChatServiceDeprecated):
|
|
|
1637
1639
|
reasoning: Reasoning | None = None,
|
|
1638
1640
|
other_options: dict | None = None,
|
|
1639
1641
|
) -> ResponsesLanguageModelStreamResponse:
|
|
1642
|
+
async def _on_rate_limit_retry(attempt: int, wait_secs: float) -> None:
|
|
1643
|
+
if not rate_limit_retry_config.log_message_on_retry:
|
|
1644
|
+
return
|
|
1645
|
+
if not feature_flags.enable_new_answers_ui_un_14411.is_enabled(
|
|
1646
|
+
self._company_id
|
|
1647
|
+
):
|
|
1648
|
+
return
|
|
1649
|
+
from unique_toolkit.agentic.message_log_manager.service import (
|
|
1650
|
+
_request_counters,
|
|
1651
|
+
)
|
|
1652
|
+
|
|
1653
|
+
msg_id = self._assistant_message_id
|
|
1654
|
+
_request_counters[msg_id] += 1
|
|
1655
|
+
order = _request_counters[msg_id]
|
|
1656
|
+
try:
|
|
1657
|
+
await self.create_message_log_async(
|
|
1658
|
+
message_id=msg_id,
|
|
1659
|
+
text=f"Rate limit reached; retrying in {wait_secs:.0f}s (attempt {attempt})",
|
|
1660
|
+
status=MessageLogStatus.RUNNING,
|
|
1661
|
+
order=order,
|
|
1662
|
+
)
|
|
1663
|
+
except Exception:
|
|
1664
|
+
logger.warning(
|
|
1665
|
+
"Failed to write rate-limit retry message log",
|
|
1666
|
+
exc_info=True,
|
|
1667
|
+
)
|
|
1668
|
+
|
|
1640
1669
|
return await stream_responses_with_references_async(
|
|
1641
1670
|
company_id=self._company_id,
|
|
1642
1671
|
user_id=self._user_id,
|
|
@@ -1661,6 +1690,7 @@ class ChatService(ChatServiceDeprecated):
|
|
|
1661
1690
|
top_p=top_p,
|
|
1662
1691
|
reasoning=reasoning,
|
|
1663
1692
|
other_options=other_options,
|
|
1693
|
+
on_rate_limit_retry=_on_rate_limit_retry,
|
|
1664
1694
|
)
|
|
1665
1695
|
|
|
1666
1696
|
# Chat Content Methods
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/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.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/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
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/image_token_counting.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/token/token_counting.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/image/encode.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/helpers.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/render.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/jinja/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/utils/write_configuration.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/_common/validate_required_values.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
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/exception.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
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/output_parser.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/evaluation/tests/fixtures.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
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/feature_flags/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/history_manager/utils.py
RENAMED
|
File without changes
|
{unique_toolkit-1.52.0 → unique_toolkit-1.53.1}/unique_toolkit/agentic/loop_runner/__init__.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
|