unique_toolkit 1.59.0__tar.gz → 1.59.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.59.0 → unique_toolkit-1.59.1}/PKG-INFO +1 -1
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/pyproject.toml +1 -1
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +5 -2
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/tool.py +11 -5
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/unique_settings.py +176 -19
- unique_toolkit-1.59.1/unique_toolkit/services/__init__.py +23 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/services/chat_service.py +70 -8
- unique_toolkit-1.59.1/unique_toolkit/services/factory.py +210 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/services/knowledge_base.py +36 -4
- unique_toolkit-1.59.0/unique_toolkit/services/__init__.py +0 -7
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/README.md +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.1}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.59.0 → unique_toolkit-1.59.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.59.
|
|
3
|
+
Version: 1.59.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>
|
|
@@ -14,7 +14,7 @@ from unique_toolkit.agentic.history_manager.history_construction_with_contents i
|
|
|
14
14
|
)
|
|
15
15
|
from unique_toolkit.agentic.reference_manager.reference_manager import ReferenceManager
|
|
16
16
|
from unique_toolkit.app.schemas import ChatEvent
|
|
17
|
-
from unique_toolkit.
|
|
17
|
+
from unique_toolkit.app.unique_settings import UniqueSettings
|
|
18
18
|
from unique_toolkit.content.schemas import ContentChunk
|
|
19
19
|
from unique_toolkit.content.service import ContentService
|
|
20
20
|
from unique_toolkit.language_model.schemas import (
|
|
@@ -26,6 +26,7 @@ from unique_toolkit.language_model.schemas import (
|
|
|
26
26
|
LanguageModelToolMessage,
|
|
27
27
|
LanguageModelUserMessage,
|
|
28
28
|
)
|
|
29
|
+
from unique_toolkit.services.factory import UniqueServiceFactory
|
|
29
30
|
|
|
30
31
|
MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = (
|
|
31
32
|
0.1 # 10% safety margin for input tokens we need 10% less does not work.
|
|
@@ -59,7 +60,9 @@ class LoopTokenReducer:
|
|
|
59
60
|
self._reference_manager = reference_manager
|
|
60
61
|
self._language_model = language_model
|
|
61
62
|
self._encoder = self._get_encoder(language_model)
|
|
62
|
-
self._chat_service =
|
|
63
|
+
self._chat_service = UniqueServiceFactory(
|
|
64
|
+
settings=UniqueSettings.from_chat_event(event)
|
|
65
|
+
).chat_service()
|
|
63
66
|
self._content_service = ContentService.from_event(event)
|
|
64
67
|
self._user_message = event.payload.user_message
|
|
65
68
|
self._chat_id = event.payload.chat_id
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from abc import ABC, abstractmethod
|
|
2
4
|
from logging import getLogger
|
|
3
|
-
from typing import Any, Generic, TypeVar, cast
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Generic, TypeVar, cast
|
|
4
6
|
|
|
5
7
|
from typing_extensions import deprecated
|
|
6
8
|
|
|
@@ -14,10 +16,12 @@ from unique_toolkit.agentic.tools.schemas import (
|
|
|
14
16
|
)
|
|
15
17
|
from unique_toolkit.agentic.tools.tool_progress_reporter import ToolProgressReporter
|
|
16
18
|
from unique_toolkit.app.schemas import ChatEvent
|
|
17
|
-
from unique_toolkit.
|
|
18
|
-
ChatService,
|
|
19
|
-
)
|
|
19
|
+
from unique_toolkit.app.unique_settings import UniqueSettings
|
|
20
20
|
from unique_toolkit.language_model import LanguageModelToolDescription
|
|
21
|
+
from unique_toolkit.services.factory import UniqueServiceFactory
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from unique_toolkit.services.chat_service import ChatService
|
|
21
25
|
from unique_toolkit.language_model.schemas import (
|
|
22
26
|
LanguageModelFunction,
|
|
23
27
|
)
|
|
@@ -180,7 +184,9 @@ class Tool(ABC, Generic[ConfigType]):
|
|
|
180
184
|
tool_progress_reporter
|
|
181
185
|
)
|
|
182
186
|
|
|
183
|
-
self._chat_service =
|
|
187
|
+
self._chat_service = UniqueServiceFactory(
|
|
188
|
+
settings=UniqueSettings.from_chat_event(event)
|
|
189
|
+
).chat_service()
|
|
184
190
|
self._language_model_service = LanguageModelService(event)
|
|
185
191
|
self._message_step_logger = MessageStepLogger(
|
|
186
192
|
chat_service=self._chat_service,
|
|
@@ -3,19 +3,26 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
from logging import getLogger
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import TYPE_CHECKING, Self, TypeVar
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Self, TypeVar
|
|
7
7
|
from urllib.parse import ParseResult, urlparse, urlunparse
|
|
8
8
|
|
|
9
9
|
import unique_sdk
|
|
10
10
|
from platformdirs import user_config_dir
|
|
11
|
-
from pydantic import
|
|
11
|
+
from pydantic import (
|
|
12
|
+
AliasChoices,
|
|
13
|
+
BaseModel,
|
|
14
|
+
Field,
|
|
15
|
+
PrivateAttr,
|
|
16
|
+
SecretStr,
|
|
17
|
+
model_validator,
|
|
18
|
+
)
|
|
12
19
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
13
20
|
from typing_extensions import Protocol, deprecated
|
|
14
21
|
|
|
15
22
|
from unique_toolkit._common.config_checker import register_config
|
|
16
23
|
|
|
17
24
|
if TYPE_CHECKING:
|
|
18
|
-
from unique_toolkit.app.schemas import BaseEvent
|
|
25
|
+
from unique_toolkit.app.schemas import BaseEvent, ChatEvent
|
|
19
26
|
|
|
20
27
|
|
|
21
28
|
logger = getLogger(__name__)
|
|
@@ -63,6 +70,13 @@ class AuthContext(BaseModel):
|
|
|
63
70
|
def get_confidential_user_id(self) -> str:
|
|
64
71
|
return self.user_id.get_secret_value()
|
|
65
72
|
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_event(cls, event: BaseEvent) -> Self:
|
|
75
|
+
return cls(
|
|
76
|
+
company_id=SecretStr(event.company_id),
|
|
77
|
+
user_id=SecretStr(event.user_id),
|
|
78
|
+
)
|
|
79
|
+
|
|
66
80
|
|
|
67
81
|
@register_config()
|
|
68
82
|
class UniqueAuth(BaseSettings):
|
|
@@ -100,7 +114,7 @@ class UniqueAuth(BaseSettings):
|
|
|
100
114
|
return warn_about_defaults(self)
|
|
101
115
|
|
|
102
116
|
@classmethod
|
|
103
|
-
def from_event(cls, event:
|
|
117
|
+
def from_event(cls, event: BaseEvent) -> Self:
|
|
104
118
|
return cls(
|
|
105
119
|
company_id=SecretStr(event.company_id),
|
|
106
120
|
user_id=SecretStr(event.user_id),
|
|
@@ -114,19 +128,110 @@ class UniqueAuth(BaseSettings):
|
|
|
114
128
|
|
|
115
129
|
|
|
116
130
|
# Chat
|
|
117
|
-
# BaseModel only as only obtained from a request.
|
|
118
131
|
class ChatContextProtocol(Protocol):
|
|
119
132
|
chat_id: str
|
|
120
133
|
assistant_id: str
|
|
121
|
-
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def last_assistant_message_id(self) -> str: ...
|
|
137
|
+
@property
|
|
138
|
+
def last_user_message_id(self) -> str: ...
|
|
139
|
+
@property
|
|
140
|
+
def last_user_message_text(self) -> str: ...
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def metadata_filter(self) -> dict[str, Any] | None: ...
|
|
144
|
+
@property
|
|
145
|
+
def parent_chat_id(self) -> str | None: ...
|
|
122
146
|
|
|
123
147
|
|
|
124
148
|
class ChatContext(BaseModel):
|
|
125
149
|
chat_id: str = Field(..., description="The chat ID.")
|
|
126
150
|
assistant_id: str = Field(..., description="The assistant ID.")
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
)
|
|
151
|
+
|
|
152
|
+
_last_assistant_message_id: str | None = PrivateAttr(default=None)
|
|
153
|
+
_last_user_message_id: str | None = PrivateAttr(default=None)
|
|
154
|
+
_last_user_message_text: str | None = PrivateAttr(default=None)
|
|
155
|
+
_metadata_filter: dict[str, Any] | None = PrivateAttr(default=None)
|
|
156
|
+
_parent_chat_id: str | None = PrivateAttr(default=None)
|
|
157
|
+
|
|
158
|
+
def __init__(
|
|
159
|
+
self,
|
|
160
|
+
*,
|
|
161
|
+
chat_id: str,
|
|
162
|
+
assistant_id: str,
|
|
163
|
+
last_assistant_message_id: str | None = None,
|
|
164
|
+
last_user_message_id: str | None = None,
|
|
165
|
+
last_user_message_text: str | None = None,
|
|
166
|
+
metadata_filter: dict[str, Any] | None = None,
|
|
167
|
+
parent_chat_id: str | None = None,
|
|
168
|
+
**data: Any,
|
|
169
|
+
) -> None:
|
|
170
|
+
super().__init__(chat_id=chat_id, assistant_id=assistant_id, **data)
|
|
171
|
+
if last_assistant_message_id is not None:
|
|
172
|
+
self._last_assistant_message_id = last_assistant_message_id
|
|
173
|
+
if last_user_message_id is not None:
|
|
174
|
+
self._last_user_message_id = last_user_message_id
|
|
175
|
+
if last_user_message_text is not None:
|
|
176
|
+
self._last_user_message_text = last_user_message_text
|
|
177
|
+
if metadata_filter is not None:
|
|
178
|
+
self._metadata_filter = metadata_filter
|
|
179
|
+
if parent_chat_id is not None:
|
|
180
|
+
self._parent_chat_id = parent_chat_id
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def last_assistant_message_id(self) -> str:
|
|
184
|
+
if self._last_assistant_message_id is None:
|
|
185
|
+
raise ValueError("Last assistant message id is not set")
|
|
186
|
+
return self._last_assistant_message_id
|
|
187
|
+
|
|
188
|
+
@property
|
|
189
|
+
def last_user_message_id(self) -> str:
|
|
190
|
+
if self._last_user_message_id is None:
|
|
191
|
+
raise ValueError("User message id is not set")
|
|
192
|
+
return self._last_user_message_id
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def last_user_message_text(self) -> str:
|
|
196
|
+
if self._last_user_message_text is None:
|
|
197
|
+
raise ValueError("User message text is not set")
|
|
198
|
+
return self._last_user_message_text
|
|
199
|
+
|
|
200
|
+
@property
|
|
201
|
+
def metadata_filter(self) -> dict[str, Any] | None:
|
|
202
|
+
return self._metadata_filter
|
|
203
|
+
|
|
204
|
+
@metadata_filter.setter
|
|
205
|
+
def metadata_filter(self, value: dict[str, Any]) -> None:
|
|
206
|
+
self._metadata_filter = value
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def parent_chat_id(self) -> str | None:
|
|
210
|
+
return self._parent_chat_id
|
|
211
|
+
|
|
212
|
+
@parent_chat_id.setter
|
|
213
|
+
def parent_chat_id(self, value: str) -> None:
|
|
214
|
+
self._parent_chat_id = value
|
|
215
|
+
|
|
216
|
+
@classmethod
|
|
217
|
+
def from_chat_event(cls, event: ChatEvent) -> Self:
|
|
218
|
+
return cls(
|
|
219
|
+
chat_id=event.payload.chat_id,
|
|
220
|
+
assistant_id=event.payload.assistant_id,
|
|
221
|
+
last_assistant_message_id=event.payload.assistant_message.id,
|
|
222
|
+
last_user_message_id=event.payload.user_message.id
|
|
223
|
+
if event.payload.user_message
|
|
224
|
+
else None,
|
|
225
|
+
last_user_message_text=event.payload.user_message.text
|
|
226
|
+
if event.payload.user_message
|
|
227
|
+
else None,
|
|
228
|
+
metadata_filter=event.payload.metadata_filter
|
|
229
|
+
if event.payload.metadata_filter
|
|
230
|
+
else None,
|
|
231
|
+
parent_chat_id=event.payload.correlation.parent_chat_id
|
|
232
|
+
if event.payload.correlation
|
|
233
|
+
else None,
|
|
234
|
+
)
|
|
130
235
|
|
|
131
236
|
|
|
132
237
|
# App
|
|
@@ -293,7 +398,7 @@ class UniqueEnvironment:
|
|
|
293
398
|
return self._api
|
|
294
399
|
|
|
295
400
|
|
|
296
|
-
class
|
|
401
|
+
class UniqueContext:
|
|
297
402
|
"""
|
|
298
403
|
Contains all settings/configuration that come from a request or an environment.
|
|
299
404
|
"""
|
|
@@ -320,11 +425,32 @@ class UniqueRequestContext:
|
|
|
320
425
|
self._auth = value
|
|
321
426
|
|
|
322
427
|
@property
|
|
323
|
-
def chat(self) -> ChatContextProtocol:
|
|
324
|
-
if self._chat is None:
|
|
325
|
-
raise ValueError("Chat context not set")
|
|
428
|
+
def chat(self) -> ChatContextProtocol | None:
|
|
326
429
|
return self._chat
|
|
327
430
|
|
|
431
|
+
@classmethod
|
|
432
|
+
def from_chat_event(cls, event: ChatEvent) -> UniqueContext:
|
|
433
|
+
"""Build a full (auth + chat) context from a ChatEvent."""
|
|
434
|
+
|
|
435
|
+
return cls(
|
|
436
|
+
auth=AuthContext.from_event(event),
|
|
437
|
+
chat=ChatContext.from_chat_event(event),
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
@classmethod
|
|
441
|
+
def from_event(cls, event: BaseEvent) -> Self:
|
|
442
|
+
"""Build an auth-only context from any BaseEvent."""
|
|
443
|
+
return cls(
|
|
444
|
+
auth=AuthContext.from_event(event),
|
|
445
|
+
)
|
|
446
|
+
|
|
447
|
+
@classmethod
|
|
448
|
+
def from_settings(cls, settings: UniqueSettings | None = None) -> UniqueContext:
|
|
449
|
+
"""Build an auth-only context from UniqueSettings (auto-loads from env if None)."""
|
|
450
|
+
if settings is None:
|
|
451
|
+
settings = UniqueSettings.from_env_auto_with_sdk_init()
|
|
452
|
+
return cls(auth=settings.authcontext)
|
|
453
|
+
|
|
328
454
|
|
|
329
455
|
# Bundling: Build this object for every request.
|
|
330
456
|
class UniqueSettings:
|
|
@@ -335,10 +461,11 @@ class UniqueSettings:
|
|
|
335
461
|
api: UniqueApi,
|
|
336
462
|
*,
|
|
337
463
|
chat_event_filter_options: UniqueChatEventFilterOptions | None = None,
|
|
464
|
+
chat: ChatContextProtocol | None = None,
|
|
338
465
|
env_file: Path | None = None,
|
|
339
466
|
):
|
|
340
467
|
self._env = UniqueEnvironment(app=app, api=api)
|
|
341
|
-
self.
|
|
468
|
+
self._context = UniqueContext(auth=auth, chat=chat)
|
|
342
469
|
self._chat_event_filter_options = chat_event_filter_options
|
|
343
470
|
self._env_file: Path | None = (
|
|
344
471
|
env_file if (env_file and env_file.exists()) else None
|
|
@@ -471,8 +598,38 @@ class UniqueSettings:
|
|
|
471
598
|
settings.init_sdk()
|
|
472
599
|
return settings
|
|
473
600
|
|
|
601
|
+
@classmethod
|
|
602
|
+
def from_chat_event(cls, event: ChatEvent) -> UniqueSettings:
|
|
603
|
+
"""Build a :class:`UniqueSettings` from a :class:`ChatEvent`.
|
|
604
|
+
|
|
605
|
+
Auth and chat context are extracted from the event. App and API
|
|
606
|
+
settings are left at their default values; override them via the
|
|
607
|
+
returned instance's properties if needed.
|
|
608
|
+
|
|
609
|
+
Args:
|
|
610
|
+
event: The incoming chat event.
|
|
611
|
+
|
|
612
|
+
Returns:
|
|
613
|
+
UniqueSettings with auth + chat context populated from the event.
|
|
614
|
+
"""
|
|
615
|
+
return cls(
|
|
616
|
+
auth=AuthContext.from_event(event),
|
|
617
|
+
app=UniqueApp(),
|
|
618
|
+
api=UniqueApi(),
|
|
619
|
+
chat=ChatContext.from_chat_event(event),
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
@property
|
|
623
|
+
def context(self) -> UniqueContext:
|
|
624
|
+
"""The request-level context (auth + optional chat) for this settings object."""
|
|
625
|
+
return self._context
|
|
626
|
+
|
|
474
627
|
def update_from_event(self, event: BaseEvent) -> None:
|
|
475
|
-
|
|
628
|
+
# Use UniqueAuth.from_event so the deprecated settings.auth property
|
|
629
|
+
# keeps working for callers that haven't migrated yet.
|
|
630
|
+
self._context = UniqueContext(
|
|
631
|
+
auth=UniqueAuth.from_event(event), chat=self._context.chat
|
|
632
|
+
)
|
|
476
633
|
|
|
477
634
|
@property
|
|
478
635
|
def api(self) -> UniqueApi:
|
|
@@ -485,18 +642,18 @@ class UniqueSettings:
|
|
|
485
642
|
@property
|
|
486
643
|
@deprecated("Use authcontext instead")
|
|
487
644
|
def auth(self) -> UniqueAuth:
|
|
488
|
-
if not isinstance(self.
|
|
645
|
+
if not isinstance(self._context.auth, UniqueAuth):
|
|
489
646
|
raise ValueError("Auth context is not a UniqueAuth instance")
|
|
490
|
-
return self.
|
|
647
|
+
return self._context.auth
|
|
491
648
|
|
|
492
649
|
@auth.setter
|
|
493
650
|
@deprecated("Use authcontext instead")
|
|
494
651
|
def auth(self, value: UniqueAuth) -> None:
|
|
495
|
-
self.
|
|
652
|
+
self._context.auth = value
|
|
496
653
|
|
|
497
654
|
@property
|
|
498
655
|
def authcontext(self) -> AuthContextProtocol:
|
|
499
|
-
return self.
|
|
656
|
+
return self._context.auth
|
|
500
657
|
|
|
501
658
|
@property
|
|
502
659
|
def chat_event_filter_options(self) -> UniqueChatEventFilterOptions | None:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from unique_toolkit.app.unique_settings import (
|
|
2
|
+
AuthContext,
|
|
3
|
+
ChatContext,
|
|
4
|
+
UniqueContext,
|
|
5
|
+
)
|
|
6
|
+
from unique_toolkit.services.chat_service import ChatService
|
|
7
|
+
from unique_toolkit.services.factory import (
|
|
8
|
+
ServiceNotRegisteredError,
|
|
9
|
+
UniqueServiceFactory,
|
|
10
|
+
)
|
|
11
|
+
from unique_toolkit.services.knowledge_base import KnowledgeBaseService
|
|
12
|
+
|
|
13
|
+
UniqueServiceFactory.register_known_services()
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"AuthContext",
|
|
17
|
+
"ChatContext",
|
|
18
|
+
"ChatService",
|
|
19
|
+
"KnowledgeBaseService",
|
|
20
|
+
"UniqueContext",
|
|
21
|
+
"UniqueServiceFactory",
|
|
22
|
+
"ServiceNotRegisteredError",
|
|
23
|
+
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any, Sequence, overload
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Sequence, overload
|
|
3
3
|
|
|
4
4
|
import unique_sdk
|
|
5
5
|
from openai.types.chat import ChatCompletionToolChoiceOptionParam
|
|
@@ -14,10 +14,11 @@ from openai.types.responses import (
|
|
|
14
14
|
)
|
|
15
15
|
from openai.types.shared_params import Metadata, Reasoning
|
|
16
16
|
from pydantic import BaseModel
|
|
17
|
-
from typing_extensions import deprecated
|
|
17
|
+
from typing_extensions import Self, deprecated
|
|
18
18
|
|
|
19
19
|
from unique_toolkit._common.utils.files import is_file_content, is_image_content
|
|
20
20
|
from unique_toolkit.agentic.feature_flags import feature_flags
|
|
21
|
+
from unique_toolkit.app.unique_settings import UniqueContext, UniqueSettings
|
|
21
22
|
from unique_toolkit.chat.cancellation import CancellationWatcher
|
|
22
23
|
from unique_toolkit.chat.constants import (
|
|
23
24
|
DEFAULT_MAX_MESSAGES,
|
|
@@ -107,24 +108,77 @@ from unique_toolkit.short_term_memory.functions import (
|
|
|
107
108
|
)
|
|
108
109
|
from unique_toolkit.short_term_memory.schemas import ShortTermMemory
|
|
109
110
|
|
|
111
|
+
if TYPE_CHECKING:
|
|
112
|
+
from unique_toolkit.app.schemas import ChatEvent
|
|
113
|
+
|
|
110
114
|
logger = logging.getLogger(f"toolkit.{DOMAIN_NAME}.{__name__}")
|
|
111
115
|
|
|
112
116
|
|
|
113
117
|
class ChatService(ChatServiceDeprecated):
|
|
114
118
|
"""Provides all functionalities to manage the chat session."""
|
|
115
119
|
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
|
|
120
|
+
@deprecated(
|
|
121
|
+
"Use UniqueContext.from_chat_event(event) with UniqueServiceFactory instead."
|
|
122
|
+
)
|
|
123
|
+
def __init__(
|
|
124
|
+
self,
|
|
125
|
+
event: "ChatEvent",
|
|
126
|
+
content_scope_chat_id: str | None = None,
|
|
127
|
+
) -> None:
|
|
128
|
+
"""Initialize ChatService from an event (deprecated). Use :meth:`from_context` instead."""
|
|
129
|
+
super().__init__(event, content_scope_chat_id)
|
|
119
130
|
self._elicitation_service: ElicitationService | None = None
|
|
120
|
-
|
|
121
|
-
self._cancellation_watcher = CancellationWatcher(
|
|
131
|
+
self._elicitation_message_id: str | None = None
|
|
132
|
+
self._cancellation_watcher: CancellationWatcher = CancellationWatcher(
|
|
122
133
|
user_id=self._user_id,
|
|
123
134
|
company_id=self._company_id,
|
|
124
135
|
chat_id=self._chat_id,
|
|
125
136
|
assistant_message_id=self._assistant_message_id,
|
|
126
137
|
)
|
|
127
138
|
|
|
139
|
+
@classmethod
|
|
140
|
+
def from_settings(cls, settings: UniqueSettings, **kwargs: Any) -> Self:
|
|
141
|
+
"""Create a ChatService from a :class:`UniqueSettings` or :class:`UniqueContext`.
|
|
142
|
+
|
|
143
|
+
This is the preferred constructor when using the service factory pattern.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
settings: Either a :class:`UniqueSettings` (whose ``context`` is used)
|
|
147
|
+
or a :class:`UniqueContext` carrying auth and chat information directly.
|
|
148
|
+
|
|
149
|
+
Raises:
|
|
150
|
+
ValueError: If the resolved context has no chat or ``last_user_message_id`` is missing.
|
|
151
|
+
"""
|
|
152
|
+
return cls.from_context(context=settings.context)
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def from_context(cls, context: UniqueContext) -> Self:
|
|
156
|
+
if context.chat is None:
|
|
157
|
+
raise ValueError(
|
|
158
|
+
"ChatService requires a chat context (context.chat is None)"
|
|
159
|
+
)
|
|
160
|
+
chat = context.chat
|
|
161
|
+
user_message_id = chat.last_user_message_id
|
|
162
|
+
instance: ChatService = cls.__new__(cls)
|
|
163
|
+
instance._event = None
|
|
164
|
+
instance._company_id = context.auth.get_confidential_company_id()
|
|
165
|
+
instance._user_id = context.auth.get_confidential_user_id()
|
|
166
|
+
instance._chat_id = chat.chat_id
|
|
167
|
+
instance._assistant_id = chat.assistant_id
|
|
168
|
+
instance._assistant_message_id = chat.last_assistant_message_id
|
|
169
|
+
instance._user_message_id = user_message_id
|
|
170
|
+
instance._user_message_text = chat.last_user_message_text
|
|
171
|
+
instance._content_scope_chat_id = chat.parent_chat_id or chat.chat_id
|
|
172
|
+
instance._elicitation_service = None
|
|
173
|
+
instance._elicitation_message_id = chat.last_assistant_message_id
|
|
174
|
+
instance._cancellation_watcher = CancellationWatcher(
|
|
175
|
+
user_id=instance._user_id,
|
|
176
|
+
company_id=instance._company_id,
|
|
177
|
+
chat_id=instance._chat_id,
|
|
178
|
+
assistant_message_id=instance._assistant_message_id,
|
|
179
|
+
)
|
|
180
|
+
return instance
|
|
181
|
+
|
|
128
182
|
@property
|
|
129
183
|
def cancellation(self) -> CancellationWatcher:
|
|
130
184
|
"""Cancellation watcher for this chat session."""
|
|
@@ -136,7 +190,15 @@ class ChatService(ChatServiceDeprecated):
|
|
|
136
190
|
if self._elicitation_service is not None:
|
|
137
191
|
return self._elicitation_service
|
|
138
192
|
|
|
139
|
-
self.
|
|
193
|
+
if self._event is not None:
|
|
194
|
+
self._elicitation_service = ElicitationService.from_chat_event(self._event)
|
|
195
|
+
else:
|
|
196
|
+
self._elicitation_service = ElicitationService(
|
|
197
|
+
user_id=self._user_id,
|
|
198
|
+
company_id=self._company_id,
|
|
199
|
+
chat_id=self._content_scope_chat_id,
|
|
200
|
+
message_id=self._elicitation_message_id,
|
|
201
|
+
)
|
|
140
202
|
|
|
141
203
|
return self._elicitation_service
|
|
142
204
|
|