language-model-common 2.0.76__tar.gz → 2.0.77__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.
- {language_model_common-2.0.76/language_model_common.egg-info → language_model_common-2.0.77}/PKG-INFO +1 -1
- language_model_common-2.0.77/VERSION +1 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77/language_model_common.egg-info}/PKG-INFO +1 -1
- {language_model_common-2.0.76 → language_model_common-2.0.77}/language_model_common.egg-info/SOURCES.txt +9 -0
- language_model_common-2.0.77/languagemodelcommon/pipeline/context.py +40 -0
- language_model_common-2.0.77/languagemodelcommon/pipeline/pipeline.py +100 -0
- language_model_common-2.0.77/languagemodelcommon/pipeline/step.py +11 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/security/normalize.py +100 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/security/off_topic_detector.py +96 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/security/prompt_extraction_detector.py +69 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/slash_command/__init__.py +0 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/slash_command/handlers/__init__.py +0 -0
- language_model_common-2.0.77/languagemodelcommon/utilities/token_reducer/__init__.py +0 -0
- language_model_common-2.0.76/VERSION +0 -1
- {language_model_common-2.0.76 → language_model_common-2.0.77}/LICENSE +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/MANIFEST.in +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/README.md +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/language_model_common.egg-info/dependency_links.txt +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/language_model_common.egg-info/requires.txt +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/language_model_common.egg-info/top_level.txt +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/authenticator/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/exceptions/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/exceptions/authorization_mcp_tool_token_invalid_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/exceptions/authorization_token_cache_item_expired_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/exceptions/authorization_token_cache_item_not_found_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/models/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/models/token_cache_item.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/oauth_provider_registrar.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/pass_through_token_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/token_exchange/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/token_exchange/token_exchange_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/token_storage_auth_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/tools/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/tools/tool_auth_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/aws/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/aws/aws_client_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/config_reader.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/file_config_reader.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/github_directory_downloader.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/github_directory_helper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/mcp_json_fetcher.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/mcp_json_reader.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/config_reader/s3_config_reader.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/prompt_library/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/prompt_library/prompt_library_environment_variables.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/prompt_library/prompt_library_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/prompt_library/prompt_store.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/schemas/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/schemas/config_schema.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/configs/schemas/mcp_json_schema.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/container/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/container/container_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/context/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/context/request_context.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/langgraph_to_openai_converter.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/stream_buffer.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/stream_context_mixin.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/stream_debug_output_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/streaming_formatters.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/streaming_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/streaming_tool_node.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/converters/tool_event_handlers.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/exceptions/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/exceptions/bailey_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/aws_s3_file_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/file_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/file_manager_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/file_writer.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/file_managers/local_file_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/graph/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/graph/graph_builder.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/history/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/history/context_compactor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/history/conversation_history_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/history/smart_history_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/http/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/http/http_client_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/aws_image_generator.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/image_generator.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/image_generator_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/managers/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/managers/image_generation_manager.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/openai_image_generator.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/providers/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/providers/base_image_generation_provider.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/image_generation/providers/image_generation_provider.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/markdown/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/markdown/html_to_markdown_converter.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/auth/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/auth/auth_server_metadata_discovery.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/auth/mcp_authorization_helper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/callbacks.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/exceptions/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/exceptions/mcp_tool_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/exceptions/mcp_tool_not_found_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/exceptions/mcp_tool_unauthorized_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/exceptions/mcp_tool_unknown_exception.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/interceptors/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/interceptors/auth.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/interceptors/tracing.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/interceptors/truncation.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/interceptors/types.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/content_conversion.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/langchain_adapter.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/mcp_app_proxy.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/mcp_tool_list_store.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/server_card_discovery.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/session.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/session_pool.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/tool_invocation.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/tool_list_cache.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_client/ui_resource.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/mcp_tool_provider.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/tool_catalog.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mcp/tool_discovery_middleware.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mocks/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mocks/mock_aws_client_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mocks/mock_http_client_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mocks/mock_image_generator.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/mocks/mock_image_generator_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/models/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/models/bedrock_models.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/models/model_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/models/sanitizing_bedrock_converse.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/ocr/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/ocr/aws_ocr_extractor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/ocr/ocr_extractor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/ocr/ocr_extractor_factory.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/persistence/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/persistence/persistence_factory.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/schema → language_model_common-2.0.77/languagemodelcommon/pipeline}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/schema/openai → language_model_common-2.0.77/languagemodelcommon/pipeline/output}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/state → language_model_common-2.0.77/languagemodelcommon/pipeline/steps}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/py.typed +0 -0
- {language_model_common-2.0.76/languagemodelcommon/structures → language_model_common-2.0.77/languagemodelcommon/schema}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/structures → language_model_common-2.0.77/languagemodelcommon/schema}/openai/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/schema/openai/completions.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/schema/openai/image_generation.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/schema/openai/responses.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/structures/openai/message → language_model_common-2.0.77/languagemodelcommon/state}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/state/messages_state.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/structures/openai/request → language_model_common-2.0.77/languagemodelcommon/structures}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/tools → language_model_common-2.0.77/languagemodelcommon/structures/openai}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/tools/mcp → language_model_common-2.0.77/languagemodelcommon/structures/openai/message}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/message/chat_completion_api_message_wrapper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/message/chat_message_wrapper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/message/responses_api_message_wrapper.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities → language_model_common-2.0.77/languagemodelcommon/structures/openai/request}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/request/chat_completion_api_request_wrapper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/request/chat_request_wrapper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/structures/openai/request/responses_api_request_wrapper.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/cache → language_model_common-2.0.77/languagemodelcommon/tools}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/environment → language_model_common-2.0.77/languagemodelcommon/tools/mcp}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/tools/mcp/call_tool_tool.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/tools/mcp/search_tools_tool.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/header_reader → language_model_common-2.0.77/languagemodelcommon/utilities}/__init__.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/logger → language_model_common-2.0.77/languagemodelcommon/utilities/cache}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/cache/advisory_lock.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/cache/model_config_cache_store.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/chat_message_helpers.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/config_substitution.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/message_preprocessing → language_model_common-2.0.77/languagemodelcommon/utilities/environment}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/environment/language_model_common_environment_variables.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/openai → language_model_common-2.0.77/languagemodelcommon/utilities/header_reader}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/header_reader/header_reader.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/security → language_model_common-2.0.77/languagemodelcommon/utilities/logger}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/debug_configuration.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/exception_formatter.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/exception_logger.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/log_levels.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/logging_response.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/logger/logging_transport.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/slash_command → language_model_common-2.0.77/languagemodelcommon/utilities/message_preprocessing}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/message_preprocessing/composite_message_preprocessor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/message_preprocessing/message_preprocessor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/mongo_url_utils.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/slash_command/handlers → language_model_common-2.0.77/languagemodelcommon/utilities/openai}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/openai/responses_api_converter.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/request_information.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/s3_url.py +0 -0
- {language_model_common-2.0.76/languagemodelcommon/utilities/token_reducer → language_model_common-2.0.77/languagemodelcommon/utilities/security}/__init__.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/security/prompt_sanitizer.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/slash_command/handlers/debug_command_handler.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/slash_command/handlers/skill_command_handler.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/slash_command/slash_command_handler.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/slash_command/slash_command_parser.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/slash_command/slash_command_processor.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/text_humanizer.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/token_reducer/token_reducer.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/tool_display_name_mapper.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/utilities/url_parser.py +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/pyproject.toml +0 -0
- {language_model_common-2.0.76 → language_model_common-2.0.77}/setup.cfg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.0.77
|
|
@@ -128,6 +128,12 @@ languagemodelcommon/ocr/ocr_extractor.py
|
|
|
128
128
|
languagemodelcommon/ocr/ocr_extractor_factory.py
|
|
129
129
|
languagemodelcommon/persistence/__init__.py
|
|
130
130
|
languagemodelcommon/persistence/persistence_factory.py
|
|
131
|
+
languagemodelcommon/pipeline/__init__.py
|
|
132
|
+
languagemodelcommon/pipeline/context.py
|
|
133
|
+
languagemodelcommon/pipeline/pipeline.py
|
|
134
|
+
languagemodelcommon/pipeline/step.py
|
|
135
|
+
languagemodelcommon/pipeline/output/__init__.py
|
|
136
|
+
languagemodelcommon/pipeline/steps/__init__.py
|
|
131
137
|
languagemodelcommon/schema/__init__.py
|
|
132
138
|
languagemodelcommon/schema/openai/__init__.py
|
|
133
139
|
languagemodelcommon/schema/openai/completions.py
|
|
@@ -178,6 +184,9 @@ languagemodelcommon/utilities/message_preprocessing/message_preprocessor.py
|
|
|
178
184
|
languagemodelcommon/utilities/openai/__init__.py
|
|
179
185
|
languagemodelcommon/utilities/openai/responses_api_converter.py
|
|
180
186
|
languagemodelcommon/utilities/security/__init__.py
|
|
187
|
+
languagemodelcommon/utilities/security/normalize.py
|
|
188
|
+
languagemodelcommon/utilities/security/off_topic_detector.py
|
|
189
|
+
languagemodelcommon/utilities/security/prompt_extraction_detector.py
|
|
181
190
|
languagemodelcommon/utilities/security/prompt_sanitizer.py
|
|
182
191
|
languagemodelcommon/utilities/slash_command/__init__.py
|
|
183
192
|
languagemodelcommon/utilities/slash_command/slash_command_handler.py
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any, AsyncGenerator
|
|
5
|
+
|
|
6
|
+
from langchain_core.messages import AnyMessage
|
|
7
|
+
from langchain_core.runnables import RunnableConfig
|
|
8
|
+
from langgraph.graph.state import CompiledStateGraph
|
|
9
|
+
|
|
10
|
+
from languagemodelcommon.state.messages_state import MyMessagesState
|
|
11
|
+
from languagemodelcommon.structures.openai.request.chat_request_wrapper import (
|
|
12
|
+
ChatRequestWrapper,
|
|
13
|
+
)
|
|
14
|
+
from languagemodelcommon.utilities.request_information import RequestInformation
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class PipelineContext:
|
|
19
|
+
"""Shared mutable state that flows through all pipeline steps."""
|
|
20
|
+
|
|
21
|
+
chat_request_wrapper: ChatRequestWrapper
|
|
22
|
+
request: Any = None
|
|
23
|
+
|
|
24
|
+
request_information: RequestInformation | None = None
|
|
25
|
+
|
|
26
|
+
messages: list[AnyMessage] = field(default_factory=list)
|
|
27
|
+
prior_messages: list[AnyMessage] = field(default_factory=list)
|
|
28
|
+
previous_context: dict[str, Any] | None = None
|
|
29
|
+
|
|
30
|
+
state: MyMessagesState | None = None
|
|
31
|
+
config: RunnableConfig | None = None
|
|
32
|
+
graph: CompiledStateGraph[MyMessagesState] | None = None
|
|
33
|
+
|
|
34
|
+
content_stream: AsyncGenerator[str, None] | None = None
|
|
35
|
+
|
|
36
|
+
accumulated_content: str = ""
|
|
37
|
+
response_messages: list[AnyMessage] = field(default_factory=list)
|
|
38
|
+
|
|
39
|
+
conversation_id: str = ""
|
|
40
|
+
user_id: str = ""
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Any, AsyncGenerator, Protocol
|
|
5
|
+
|
|
6
|
+
from languagemodelcommon.pipeline.context import PipelineContext
|
|
7
|
+
from languagemodelcommon.pipeline.step import PipelineStep
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class OutputStep(Protocol):
|
|
13
|
+
def format_response(self, *, context: PipelineContext) -> Any: ...
|
|
14
|
+
def stream_response(
|
|
15
|
+
self, *, context: PipelineContext
|
|
16
|
+
) -> AsyncGenerator[str, None]: ...
|
|
17
|
+
def format_error(self, *, context: PipelineContext, error: Exception) -> Any: ...
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Pipeline:
|
|
21
|
+
"""Runs an ordered list of steps against a shared PipelineContext."""
|
|
22
|
+
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
pre_execution_steps: list[PipelineStep],
|
|
27
|
+
execution_step: PipelineStep,
|
|
28
|
+
post_execution_steps: list[PipelineStep],
|
|
29
|
+
output_step: OutputStep,
|
|
30
|
+
) -> None:
|
|
31
|
+
self._pre_execution_steps = pre_execution_steps
|
|
32
|
+
self._execution_step = execution_step
|
|
33
|
+
self._post_execution_steps = post_execution_steps
|
|
34
|
+
self._output_step = output_step
|
|
35
|
+
|
|
36
|
+
async def run_non_streaming(self, *, context: PipelineContext) -> Any:
|
|
37
|
+
try:
|
|
38
|
+
for step in self._pre_execution_steps:
|
|
39
|
+
await step.run(context=context)
|
|
40
|
+
await self._execution_step.run(context=context)
|
|
41
|
+
await self._drain_stream(context=context)
|
|
42
|
+
for step in self._post_execution_steps:
|
|
43
|
+
await step.run(context=context)
|
|
44
|
+
return self._output_step.format_response(context=context)
|
|
45
|
+
except Exception as e:
|
|
46
|
+
return self._output_step.format_error(context=context, error=e)
|
|
47
|
+
|
|
48
|
+
@staticmethod
|
|
49
|
+
async def _drain_stream(*, context: PipelineContext) -> None:
|
|
50
|
+
"""Consume content_stream fully, populating accumulated_content and response_messages."""
|
|
51
|
+
if context.content_stream is None:
|
|
52
|
+
return
|
|
53
|
+
import json as _json
|
|
54
|
+
|
|
55
|
+
from langchain_core.messages import AIMessage
|
|
56
|
+
|
|
57
|
+
async for chunk in context.content_stream:
|
|
58
|
+
for line in chunk.strip().splitlines():
|
|
59
|
+
if not line.startswith("data: "):
|
|
60
|
+
continue
|
|
61
|
+
payload = line[6:]
|
|
62
|
+
if payload == "[DONE]":
|
|
63
|
+
continue
|
|
64
|
+
try:
|
|
65
|
+
event = _json.loads(payload)
|
|
66
|
+
if "delta" in event and isinstance(event["delta"], str):
|
|
67
|
+
context.accumulated_content += event["delta"]
|
|
68
|
+
elif (
|
|
69
|
+
"choices" in event
|
|
70
|
+
and event["choices"]
|
|
71
|
+
and "delta" in event["choices"][0]
|
|
72
|
+
):
|
|
73
|
+
delta_content = event["choices"][0]["delta"].get("content", "")
|
|
74
|
+
if delta_content:
|
|
75
|
+
context.accumulated_content += delta_content
|
|
76
|
+
except (ValueError, KeyError, IndexError):
|
|
77
|
+
# Non-content SSE events (tool calls, metadata) don't match
|
|
78
|
+
# either delta format — safe to skip during stream draining.
|
|
79
|
+
logger.debug(
|
|
80
|
+
"Skipping non-content SSE event during drain: %s", payload[:100]
|
|
81
|
+
)
|
|
82
|
+
if context.accumulated_content:
|
|
83
|
+
context.response_messages = [AIMessage(content=context.accumulated_content)]
|
|
84
|
+
|
|
85
|
+
async def run_streaming(
|
|
86
|
+
self, *, context: PipelineContext
|
|
87
|
+
) -> AsyncGenerator[Any, None]:
|
|
88
|
+
try:
|
|
89
|
+
for step in self._pre_execution_steps:
|
|
90
|
+
await step.run(context=context)
|
|
91
|
+
await self._execution_step.run(context=context)
|
|
92
|
+
except Exception as e:
|
|
93
|
+
yield self._output_step.format_error(context=context, error=e)
|
|
94
|
+
return
|
|
95
|
+
|
|
96
|
+
async for chunk in self._output_step.stream_response(context=context):
|
|
97
|
+
yield chunk
|
|
98
|
+
|
|
99
|
+
for step in self._post_execution_steps:
|
|
100
|
+
await step.run(context=context)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Protocol
|
|
4
|
+
|
|
5
|
+
from languagemodelcommon.pipeline.context import PipelineContext
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class PipelineStep(Protocol):
|
|
9
|
+
"""Protocol for a single step in the request processing pipeline."""
|
|
10
|
+
|
|
11
|
+
async def run(self, *, context: PipelineContext) -> None: ...
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Input normalization for security detection.
|
|
2
|
+
|
|
3
|
+
Centralizes Unicode normalization, zero-width stripping, and homoglyph
|
|
4
|
+
mapping so both prompt_extraction_detector and off_topic_detector apply
|
|
5
|
+
consistent pre-processing before regex matching.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import re
|
|
9
|
+
import unicodedata
|
|
10
|
+
|
|
11
|
+
REFUSAL_MESSAGE = (
|
|
12
|
+
"I'm here to help you with your medical records. What can I help you with?"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
_ZERO_WIDTH_RE = re.compile(
|
|
17
|
+
"[]" # nosec B613
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
# Cyrillic/Greek characters that visually resemble Latin letters.
|
|
21
|
+
# Covers the practical attack surface for trigger words in our patterns.
|
|
22
|
+
_HOMOGLYPH_MAP: dict[str, str] = {
|
|
23
|
+
# Cyrillic -> Latin
|
|
24
|
+
"А": "A", # А
|
|
25
|
+
"В": "B", # В
|
|
26
|
+
"С": "C", # С
|
|
27
|
+
"Е": "E", # Е
|
|
28
|
+
"Н": "H", # Н
|
|
29
|
+
"К": "K", # К
|
|
30
|
+
"М": "M", # М
|
|
31
|
+
"О": "O", # О
|
|
32
|
+
"Р": "P", # Р
|
|
33
|
+
"Т": "T", # Т
|
|
34
|
+
"Х": "X", # Х
|
|
35
|
+
"а": "a", # а
|
|
36
|
+
"е": "e", # е
|
|
37
|
+
"о": "o", # о
|
|
38
|
+
"р": "p", # р
|
|
39
|
+
"с": "c", # с
|
|
40
|
+
"у": "y", # у
|
|
41
|
+
"х": "x", # х
|
|
42
|
+
"ѕ": "s", # ѕ
|
|
43
|
+
"і": "i", # і
|
|
44
|
+
"ј": "j", # ј
|
|
45
|
+
"һ": "h", # һ
|
|
46
|
+
"ӏ": "l", # ӏ
|
|
47
|
+
# Greek -> Latin
|
|
48
|
+
"Α": "A", # Α
|
|
49
|
+
"Β": "B", # Β
|
|
50
|
+
"Ε": "E", # Ε
|
|
51
|
+
"Η": "H", # Η
|
|
52
|
+
"Ι": "I", # Ι
|
|
53
|
+
"Κ": "K", # Κ
|
|
54
|
+
"Μ": "M", # Μ
|
|
55
|
+
"Ν": "N", # Ν
|
|
56
|
+
"Ο": "O", # Ο
|
|
57
|
+
"Ρ": "P", # Ρ
|
|
58
|
+
"Τ": "T", # Τ
|
|
59
|
+
"Υ": "Y", # Υ
|
|
60
|
+
"Χ": "X", # Χ
|
|
61
|
+
"α": "a", # α (borderline but used in attacks)
|
|
62
|
+
"ο": "o", # ο
|
|
63
|
+
"ρ": "p", # ρ (lowercase rho)
|
|
64
|
+
# Fullwidth Latin -> ASCII Latin
|
|
65
|
+
# NFKC handles most of these, but belt-and-suspenders for the critical ones
|
|
66
|
+
"a": "a",
|
|
67
|
+
"b": "b",
|
|
68
|
+
"c": "c",
|
|
69
|
+
"d": "d",
|
|
70
|
+
"e": "e",
|
|
71
|
+
"i": "i",
|
|
72
|
+
"l": "l",
|
|
73
|
+
"m": "m",
|
|
74
|
+
"n": "n",
|
|
75
|
+
"o": "o",
|
|
76
|
+
"p": "p",
|
|
77
|
+
"r": "r",
|
|
78
|
+
"s": "s",
|
|
79
|
+
"t": "t",
|
|
80
|
+
"u": "u",
|
|
81
|
+
"y": "y",
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
_HOMOGLYPH_TRANS = str.maketrans(_HOMOGLYPH_MAP)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def normalize_for_detection(*, text: str) -> str:
|
|
88
|
+
"""Normalize user input for security pattern matching.
|
|
89
|
+
|
|
90
|
+
Applies in order:
|
|
91
|
+
1. NFKC Unicode normalization (collapses compatibility equivalents)
|
|
92
|
+
2. Zero-width character removal
|
|
93
|
+
3. Homoglyph transliteration (Cyrillic/Greek -> Latin)
|
|
94
|
+
4. Whitespace collapse
|
|
95
|
+
"""
|
|
96
|
+
result = unicodedata.normalize("NFKC", text)
|
|
97
|
+
result = _ZERO_WIDTH_RE.sub("", result)
|
|
98
|
+
result = result.translate(_HOMOGLYPH_TRANS)
|
|
99
|
+
result = re.sub(r"\s+", " ", result)
|
|
100
|
+
return result
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""Detection of off-topic and encoding-based content manipulation attempts."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from languagemodelcommon.utilities.security.normalize import (
|
|
7
|
+
REFUSAL_MESSAGE,
|
|
8
|
+
normalize_for_detection,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
ENCODING_PATTERNS: list[re.Pattern[str]] = [
|
|
13
|
+
re.compile(
|
|
14
|
+
r"\b(decode|encode|convert|translate|interpret)\b.*\b(ascii|base64|hex|binary|unicode|rot13|utf|latin)\b",
|
|
15
|
+
re.IGNORECASE,
|
|
16
|
+
),
|
|
17
|
+
re.compile(
|
|
18
|
+
r"\b(ascii|base64|hex|binary|unicode|rot13|utf|latin)\b.*\b(decode|encode|convert|translate|interpret)\b",
|
|
19
|
+
re.IGNORECASE,
|
|
20
|
+
),
|
|
21
|
+
re.compile(
|
|
22
|
+
r"\b(what(\'s| is| does))\b.*\b(in ascii|in base64|in hex|in binary)\b",
|
|
23
|
+
re.IGNORECASE,
|
|
24
|
+
),
|
|
25
|
+
re.compile(
|
|
26
|
+
r"(\b\d{2,3}\b[\s,]+){5,}",
|
|
27
|
+
re.IGNORECASE,
|
|
28
|
+
),
|
|
29
|
+
re.compile(
|
|
30
|
+
r"\b(respond|answer|reply|output)\b.*\b(in ascii|in base64|in hex|in binary|encoded)\b",
|
|
31
|
+
re.IGNORECASE,
|
|
32
|
+
),
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
OFFENSIVE_CONTENT_PATTERNS: list[re.Pattern[str]] = [
|
|
36
|
+
re.compile(
|
|
37
|
+
r"\b(is\s+(it|this|that)\s+)?(a\s+)?(derogatory|offensive|slur|racial|racist|sexist|hate)\s*(term|word|phrase|language)?\b",
|
|
38
|
+
re.IGNORECASE,
|
|
39
|
+
),
|
|
40
|
+
re.compile(
|
|
41
|
+
r"\b(what|why)\b.*\b(derogatory|offensive|slur|racist|sexist)\b",
|
|
42
|
+
re.IGNORECASE,
|
|
43
|
+
),
|
|
44
|
+
re.compile(
|
|
45
|
+
r"\b(explain|define|tell me about)\b.*\b(slur|derogatory|hate speech|offensive term)\b",
|
|
46
|
+
re.IGNORECASE,
|
|
47
|
+
),
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class OffTopicAttempt(Exception):
|
|
52
|
+
"""Raised when an off-topic manipulation attempt is detected."""
|
|
53
|
+
|
|
54
|
+
def __init__(self, *, category: str) -> None:
|
|
55
|
+
self.category = category
|
|
56
|
+
super().__init__(REFUSAL_MESSAGE)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def detect_encoding_manipulation(*, text: str) -> Optional[str]:
|
|
60
|
+
"""Check if user input attempts encoding-based content manipulation.
|
|
61
|
+
|
|
62
|
+
Returns the matched pattern description if detected, None otherwise.
|
|
63
|
+
"""
|
|
64
|
+
for pattern in ENCODING_PATTERNS:
|
|
65
|
+
if pattern.search(text):
|
|
66
|
+
return pattern.pattern
|
|
67
|
+
return None
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def detect_offensive_content_request(*, text: str) -> Optional[str]:
|
|
71
|
+
"""Check if user input requests discussion of offensive language.
|
|
72
|
+
|
|
73
|
+
Returns the matched pattern description if detected, None otherwise.
|
|
74
|
+
"""
|
|
75
|
+
for pattern in OFFENSIVE_CONTENT_PATTERNS:
|
|
76
|
+
if pattern.search(text):
|
|
77
|
+
return pattern.pattern
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def detect_off_topic_manipulation(*, text: str) -> Optional[str]:
|
|
82
|
+
"""Check for any off-topic manipulation attempt (encoding or offensive content).
|
|
83
|
+
|
|
84
|
+
Returns the category of detection if found, None otherwise.
|
|
85
|
+
"""
|
|
86
|
+
cleaned = normalize_for_detection(text=text)
|
|
87
|
+
|
|
88
|
+
result = detect_encoding_manipulation(text=cleaned)
|
|
89
|
+
if result:
|
|
90
|
+
return "encoding_manipulation"
|
|
91
|
+
|
|
92
|
+
result = detect_offensive_content_request(text=cleaned)
|
|
93
|
+
if result:
|
|
94
|
+
return "offensive_content_request"
|
|
95
|
+
|
|
96
|
+
return None
|
language_model_common-2.0.77/languagemodelcommon/utilities/security/prompt_extraction_detector.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Detection of prompt extraction and system instruction disclosure attempts."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
from languagemodelcommon.utilities.security.normalize import (
|
|
7
|
+
REFUSAL_MESSAGE,
|
|
8
|
+
normalize_for_detection,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PromptExtractionAttempt(Exception):
|
|
13
|
+
"""Raised when a prompt extraction attempt is detected in user input."""
|
|
14
|
+
|
|
15
|
+
def __init__(self) -> None:
|
|
16
|
+
super().__init__(REFUSAL_MESSAGE)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
PROMPT_EXTRACTION_PATTERNS: list[re.Pattern[str]] = [
|
|
20
|
+
re.compile(
|
|
21
|
+
r"\b(repeat|output|print|show|display|reveal|disclose|give me|write out|put)\b"
|
|
22
|
+
r".*\b(system prompt|system instructions?|your instructions?|your prompt|the prompt|system message|your configuration|your rules)\b",
|
|
23
|
+
re.IGNORECASE | re.DOTALL,
|
|
24
|
+
),
|
|
25
|
+
re.compile(
|
|
26
|
+
r"\b(what are|tell me|share)\b.*\b(your system instructions?|your system prompt|your prompt|your rules|your system message)\b",
|
|
27
|
+
re.IGNORECASE | re.DOTALL,
|
|
28
|
+
),
|
|
29
|
+
re.compile(
|
|
30
|
+
r"\b(text|everything|all)\s+(above|before this)\b",
|
|
31
|
+
re.IGNORECASE,
|
|
32
|
+
),
|
|
33
|
+
re.compile(
|
|
34
|
+
r"\bcode\s*block\b.*\b(above|instructions?|prompt|system)\b",
|
|
35
|
+
re.IGNORECASE | re.DOTALL,
|
|
36
|
+
),
|
|
37
|
+
re.compile(
|
|
38
|
+
r"\b(above|instructions?|prompt|system)\b.*\bcode\s*block\b",
|
|
39
|
+
re.IGNORECASE | re.DOTALL,
|
|
40
|
+
),
|
|
41
|
+
re.compile(
|
|
42
|
+
r"\b(ignore|forget|disregard)\b.*\b(previous|above|prior|instructions?|rules)\b",
|
|
43
|
+
re.IGNORECASE | re.DOTALL,
|
|
44
|
+
),
|
|
45
|
+
re.compile(
|
|
46
|
+
r"\b(pretend|act as if|imagine|you are now)\b.*\b(no rules|no restrictions|unrestricted|jailbreak)\b",
|
|
47
|
+
re.IGNORECASE | re.DOTALL,
|
|
48
|
+
),
|
|
49
|
+
re.compile(
|
|
50
|
+
r"\binitial\s+(instructions?|prompt|message)\b",
|
|
51
|
+
re.IGNORECASE,
|
|
52
|
+
),
|
|
53
|
+
re.compile(
|
|
54
|
+
r"\b(the|your)\s+system\s*(:|message|prompt|instructions?)\b",
|
|
55
|
+
re.IGNORECASE,
|
|
56
|
+
),
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def detect_prompt_extraction(*, text: str) -> Optional[str]:
|
|
61
|
+
"""Check if user input attempts to extract system instructions.
|
|
62
|
+
|
|
63
|
+
Returns the matched pattern description if detected, None otherwise.
|
|
64
|
+
"""
|
|
65
|
+
normalized = normalize_for_detection(text=text)
|
|
66
|
+
for pattern in PROMPT_EXTRACTION_PATTERNS:
|
|
67
|
+
if pattern.search(normalized):
|
|
68
|
+
return pattern.pattern
|
|
69
|
+
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.0.76
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/__init__.py
RENAMED
|
File without changes
|
{language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/auth/__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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/aws/__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
|
|
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
|
{language_model_common-2.0.76 → language_model_common-2.0.77}/languagemodelcommon/graph/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|