language-model-common 3.0.0__tar.gz → 3.0.2__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.
Files changed (182) hide show
  1. {language_model_common-3.0.0/language_model_common.egg-info → language_model_common-3.0.2}/PKG-INFO +2 -2
  2. language_model_common-3.0.2/VERSION +1 -0
  3. {language_model_common-3.0.0 → language_model_common-3.0.2/language_model_common.egg-info}/PKG-INFO +2 -2
  4. {language_model_common-3.0.0 → language_model_common-3.0.2}/language_model_common.egg-info/requires.txt +1 -1
  5. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/mcp_json_fetcher.py +2 -2
  6. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/callbacks.py +1 -1
  7. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/interceptors/tracing.py +1 -1
  8. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/interceptors/truncation.py +3 -1
  9. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/content_conversion.py +6 -6
  10. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/langchain_adapter.py +1 -1
  11. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/session.py +32 -22
  12. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/session_pool.py +2 -2
  13. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/tool_invocation.py +12 -12
  14. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/tool_list_cache.py +5 -3
  15. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/logging_response.py +10 -8
  16. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/logging_transport.py +9 -9
  17. {language_model_common-3.0.0 → language_model_common-3.0.2}/pyproject.toml +1 -1
  18. language_model_common-3.0.0/VERSION +0 -1
  19. {language_model_common-3.0.0 → language_model_common-3.0.2}/LICENSE +0 -0
  20. {language_model_common-3.0.0 → language_model_common-3.0.2}/MANIFEST.in +0 -0
  21. {language_model_common-3.0.0 → language_model_common-3.0.2}/README.md +0 -0
  22. {language_model_common-3.0.0 → language_model_common-3.0.2}/language_model_common.egg-info/SOURCES.txt +0 -0
  23. {language_model_common-3.0.0 → language_model_common-3.0.2}/language_model_common.egg-info/dependency_links.txt +0 -0
  24. {language_model_common-3.0.0 → language_model_common-3.0.2}/language_model_common.egg-info/top_level.txt +0 -0
  25. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/__init__.py +0 -0
  26. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/auth/__init__.py +0 -0
  27. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/auth/authenticator/__init__.py +0 -0
  28. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/auth/exceptions/__init__.py +0 -0
  29. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/auth/models/__init__.py +0 -0
  30. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/aws/__init__.py +0 -0
  31. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/aws/aws_client_factory.py +0 -0
  32. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/__init__.py +0 -0
  33. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/__init__.py +0 -0
  34. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/config_reader.py +0 -0
  35. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/file_config_reader.py +0 -0
  36. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/github_directory_downloader.py +0 -0
  37. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/github_directory_helper.py +0 -0
  38. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/mcp_json_reader.py +0 -0
  39. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/config_reader/s3_config_reader.py +0 -0
  40. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/prompt_library/__init__.py +0 -0
  41. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/prompt_library/prompt_library_environment_variables.py +0 -0
  42. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/prompt_library/prompt_library_manager.py +0 -0
  43. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/prompt_library/prompt_store.py +0 -0
  44. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/schemas/__init__.py +0 -0
  45. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/schemas/config_schema.py +0 -0
  46. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/configs/schemas/mcp_json_schema.py +0 -0
  47. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/container/__init__.py +0 -0
  48. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/container/container_factory.py +0 -0
  49. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/context/__init__.py +0 -0
  50. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/context/request_context.py +0 -0
  51. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/__init__.py +0 -0
  52. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/history_cache_middleware.py +0 -0
  53. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/langgraph_to_openai_converter.py +0 -0
  54. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/stream_buffer.py +0 -0
  55. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/stream_context_mixin.py +0 -0
  56. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/stream_debug_output_manager.py +0 -0
  57. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/streaming_formatters.py +0 -0
  58. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/streaming_manager.py +0 -0
  59. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/streaming_tool_node.py +0 -0
  60. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/converters/tool_event_handlers.py +0 -0
  61. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/exceptions/__init__.py +0 -0
  62. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/exceptions/bailey_exception.py +0 -0
  63. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/exceptions/rate_limit_exception.py +0 -0
  64. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/__init__.py +0 -0
  65. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/aws_s3_file_manager.py +0 -0
  66. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/file_manager.py +0 -0
  67. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/file_manager_factory.py +0 -0
  68. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/file_writer.py +0 -0
  69. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/file_managers/local_file_manager.py +0 -0
  70. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/github/__init__.py +0 -0
  71. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/github/token_provider.py +0 -0
  72. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/graph/__init__.py +0 -0
  73. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/graph/graph_builder.py +0 -0
  74. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/history/__init__.py +0 -0
  75. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/history/context_compactor.py +0 -0
  76. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/history/conversation_history_manager.py +0 -0
  77. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/history/smart_history_manager.py +0 -0
  78. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/http/__init__.py +0 -0
  79. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/http/http_client_factory.py +0 -0
  80. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/__init__.py +0 -0
  81. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/aws_image_generator.py +0 -0
  82. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/image_generator.py +0 -0
  83. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/image_generator_factory.py +0 -0
  84. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/managers/__init__.py +0 -0
  85. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/managers/image_generation_manager.py +0 -0
  86. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/openai_image_generator.py +0 -0
  87. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/providers/__init__.py +0 -0
  88. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/providers/base_image_generation_provider.py +0 -0
  89. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/image_generation/providers/image_generation_provider.py +0 -0
  90. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/markdown/__init__.py +0 -0
  91. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/markdown/html_to_markdown_converter.py +0 -0
  92. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/__init__.py +0 -0
  93. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/auth/__init__.py +0 -0
  94. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/exceptions/__init__.py +0 -0
  95. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/interceptors/__init__.py +0 -0
  96. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/interceptors/types.py +0 -0
  97. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/__init__.py +0 -0
  98. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/mcp_tool_list_store.py +0 -0
  99. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mcp/mcp_client/server_card_discovery.py +0 -0
  100. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mocks/__init__.py +0 -0
  101. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mocks/mock_aws_client_factory.py +0 -0
  102. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mocks/mock_http_client_factory.py +0 -0
  103. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mocks/mock_image_generator.py +0 -0
  104. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/mocks/mock_image_generator_factory.py +0 -0
  105. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/models/__init__.py +0 -0
  106. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/models/bedrock_models.py +0 -0
  107. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/models/model_factory.py +0 -0
  108. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/models/sanitizing_bedrock_converse.py +0 -0
  109. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/ocr/__init__.py +0 -0
  110. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/ocr/aws_ocr_extractor.py +0 -0
  111. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/ocr/ocr_extractor.py +0 -0
  112. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/ocr/ocr_extractor_factory.py +0 -0
  113. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/persistence/__init__.py +0 -0
  114. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/persistence/persistence_factory.py +0 -0
  115. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/__init__.py +0 -0
  116. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/context.py +0 -0
  117. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/output/__init__.py +0 -0
  118. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/pipeline.py +0 -0
  119. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/step.py +0 -0
  120. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/pipeline/steps/__init__.py +0 -0
  121. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/py.typed +0 -0
  122. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/schema/__init__.py +0 -0
  123. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/schema/openai/__init__.py +0 -0
  124. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/schema/openai/completions.py +0 -0
  125. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/schema/openai/image_generation.py +0 -0
  126. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/schema/openai/responses.py +0 -0
  127. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/state/__init__.py +0 -0
  128. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/state/messages_state.py +0 -0
  129. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/__init__.py +0 -0
  130. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/__init__.py +0 -0
  131. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/message/__init__.py +0 -0
  132. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/message/chat_completion_api_message_wrapper.py +0 -0
  133. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/message/chat_message_wrapper.py +0 -0
  134. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/message/responses_api_message_wrapper.py +0 -0
  135. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/request/__init__.py +0 -0
  136. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/request/chat_completion_api_request_wrapper.py +0 -0
  137. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/request/chat_request_wrapper.py +0 -0
  138. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/structures/openai/request/responses_api_request_wrapper.py +0 -0
  139. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/tools/__init__.py +0 -0
  140. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/tools/mcp/__init__.py +0 -0
  141. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/__init__.py +0 -0
  142. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/cache/__init__.py +0 -0
  143. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/cache/advisory_lock.py +0 -0
  144. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/cache/model_config_cache_store.py +0 -0
  145. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/chat_message_helpers.py +0 -0
  146. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/config_substitution.py +0 -0
  147. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/environment/__init__.py +0 -0
  148. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/environment/language_model_common_environment_variables.py +0 -0
  149. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/header_reader/__init__.py +0 -0
  150. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/header_reader/header_reader.py +0 -0
  151. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/__init__.py +0 -0
  152. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/debug_configuration.py +0 -0
  153. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/exception_formatter.py +0 -0
  154. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/exception_logger.py +0 -0
  155. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/logger/log_levels.py +0 -0
  156. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/message_preprocessing/__init__.py +0 -0
  157. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/message_preprocessing/composite_message_preprocessor.py +0 -0
  158. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/message_preprocessing/message_preprocessor.py +0 -0
  159. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/mongo_url_utils.py +0 -0
  160. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/openai/__init__.py +0 -0
  161. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/openai/responses_api_converter.py +0 -0
  162. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/request_information.py +0 -0
  163. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/s3_url.py +0 -0
  164. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/__init__.py +0 -0
  165. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/normalize.py +0 -0
  166. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/off_topic_detector.py +0 -0
  167. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/prompt_extraction_detector.py +0 -0
  168. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/prompt_sanitizer.py +0 -0
  169. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/security/url_validation.py +0 -0
  170. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/__init__.py +0 -0
  171. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/handlers/__init__.py +0 -0
  172. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/handlers/debug_command_handler.py +0 -0
  173. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/handlers/skill_command_handler.py +0 -0
  174. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/slash_command_handler.py +0 -0
  175. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/slash_command_parser.py +0 -0
  176. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/slash_command/slash_command_processor.py +0 -0
  177. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/text_humanizer.py +0 -0
  178. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/token_reducer/__init__.py +0 -0
  179. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/token_reducer/token_reducer.py +0 -0
  180. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/tool_display_name_mapper.py +0 -0
  181. {language_model_common-3.0.0 → language_model_common-3.0.2}/languagemodelcommon/utilities/url_parser.py +0 -0
  182. {language_model_common-3.0.0 → language_model_common-3.0.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: language-model-common
3
- Version: 3.0.0
3
+ Version: 3.0.2
4
4
  Summary: Provides the underlying framework to enhance langchain and add loading configurations
5
5
  Author-email: Imran Qureshi <imran.qureshi@bwell.com>
6
6
  License: Apache-2.0
@@ -30,7 +30,7 @@ Requires-Dist: simple-container>=1.0.2
30
30
  Requires-Dist: pypdf>=6.6.0
31
31
  Requires-Dist: markdownify>=0.14.1
32
32
  Requires-Dist: beautifulsoup4>=4.12.3
33
- Requires-Dist: oidcauthlib>=3.0.18
33
+ Requires-Dist: oidcauthlib>=3.0.21
34
34
  Requires-Dist: fsspec>=2026.2.0
35
35
  Requires-Dist: authlib>=1.6.5
36
36
  Requires-Dist: langchain-google-genai>=4.1.3
@@ -0,0 +1 @@
1
+ 3.0.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: language-model-common
3
- Version: 3.0.0
3
+ Version: 3.0.2
4
4
  Summary: Provides the underlying framework to enhance langchain and add loading configurations
5
5
  Author-email: Imran Qureshi <imran.qureshi@bwell.com>
6
6
  License: Apache-2.0
@@ -30,7 +30,7 @@ Requires-Dist: simple-container>=1.0.2
30
30
  Requires-Dist: pypdf>=6.6.0
31
31
  Requires-Dist: markdownify>=0.14.1
32
32
  Requires-Dist: beautifulsoup4>=4.12.3
33
- Requires-Dist: oidcauthlib>=3.0.18
33
+ Requires-Dist: oidcauthlib>=3.0.21
34
34
  Requires-Dist: fsspec>=2026.2.0
35
35
  Requires-Dist: authlib>=1.6.5
36
36
  Requires-Dist: langchain-google-genai>=4.1.3
@@ -17,7 +17,7 @@ simple-container>=1.0.2
17
17
  pypdf>=6.6.0
18
18
  markdownify>=0.14.1
19
19
  beautifulsoup4>=4.12.3
20
- oidcauthlib>=3.0.18
20
+ oidcauthlib>=3.0.21
21
21
  fsspec>=2026.2.0
22
22
  authlib>=1.6.5
23
23
  langchain-google-genai>=4.1.3
@@ -74,7 +74,7 @@ class McpJsonFetcher:
74
74
 
75
75
  raw_json = text_parts[0]
76
76
 
77
- if getattr(result, "isError", False):
77
+ if getattr(result, "is_error", False):
78
78
  error_msg = (
79
79
  f"get_mcp_servers_config returned an error for plugin "
80
80
  f"'{plugin_name}' from {self._url}: {raw_json}"
@@ -140,7 +140,7 @@ class McpJsonFetcher:
140
140
 
141
141
  raw_json = text_parts[0]
142
142
 
143
- if getattr(result, "isError", False):
143
+ if getattr(result, "is_error", False):
144
144
  logger.warning(
145
145
  "get_mcp_servers_config returned an error from %s: %s",
146
146
  self._url,
@@ -7,7 +7,7 @@ from dataclasses import dataclass
7
7
  from typing import Protocol, runtime_checkable
8
8
 
9
9
  from mcp.client.session import LoggingFnT as MCPLoggingFnT
10
- from mcp.shared.session import ProgressFnT as MCPProgressFnT
10
+ from mcp.shared.dispatcher import ProgressFnT as MCPProgressFnT
11
11
  from mcp.types import LoggingMessageNotificationParams
12
12
 
13
13
 
@@ -116,7 +116,7 @@ class TracingMcpCallInterceptor:
116
116
  span.set_attribute(
117
117
  "mcp.result.content_blocks", len(result.content)
118
118
  )
119
- if result.structuredContent is not None:
119
+ if result.structured_content is not None:
120
120
  span.set_attribute("mcp.result.structured", True)
121
121
  except Exception:
122
122
  pass
@@ -80,7 +80,9 @@ class TruncationMcpCallInterceptor:
80
80
  if isinstance(result, CallToolResult):
81
81
  if logger.isEnabledFor(DEBUG):
82
82
  # See if there is structured_content
83
- structured_content: dict[str, Any] | None = result.structuredContent
83
+ structured_content: dict[str, Any] | None = (
84
+ result.structured_content
85
+ )
84
86
  logger.debug(
85
87
  f"=== Tool structured output received: {type(structured_content)}: {structured_content} ==="
86
88
  )
@@ -31,15 +31,15 @@ def convert_mcp_content_to_lc_block(
31
31
  return create_text_block(text=content.text)
32
32
 
33
33
  if isinstance(content, ImageContent):
34
- return create_image_block(base64=content.data, mime_type=content.mimeType)
34
+ return create_image_block(base64=content.data, mime_type=content.mime_type)
35
35
 
36
36
  if isinstance(content, AudioContent):
37
37
  raise NotImplementedError(
38
- f"AudioContent conversion not supported. Mime type: {content.mimeType}"
38
+ f"AudioContent conversion not supported. Mime type: {content.mime_type}"
39
39
  )
40
40
 
41
41
  if isinstance(content, ResourceLink):
42
- mime_type = content.mimeType or None
42
+ mime_type = content.mime_type or None
43
43
  if mime_type and mime_type.startswith("image/"):
44
44
  return create_image_block(url=str(content.uri), mime_type=mime_type)
45
45
  return create_file_block(url=str(content.uri), mime_type=mime_type)
@@ -49,7 +49,7 @@ def convert_mcp_content_to_lc_block(
49
49
  if isinstance(resource, TextResourceContents):
50
50
  return create_text_block(text=resource.text)
51
51
  if isinstance(resource, BlobResourceContents):
52
- mime_type = resource.mimeType or None
52
+ mime_type = resource.mime_type or None
53
53
  if mime_type and mime_type.startswith("image/"):
54
54
  return create_image_block(base64=resource.blob, mime_type=mime_type)
55
55
  return create_file_block(base64=resource.blob, mime_type=mime_type)
@@ -63,11 +63,11 @@ def convert_call_tool_result(
63
63
  ) -> list[ToolMessageContentBlock]:
64
64
  """Convert a CallToolResult to LangChain content blocks.
65
65
 
66
- When the MCP server signals an error (isError=True), the error content is
66
+ When the MCP server signals an error (is_error=True), the error content is
67
67
  returned as normal text blocks prefixed with "Error:" so the LLM can see
68
68
  the failure reason and retry with corrected parameters.
69
69
  """
70
- if result.isError:
70
+ if result.is_error:
71
71
  error_parts = [
72
72
  block.text for block in result.content if isinstance(block, TextContent)
73
73
  ]
@@ -114,7 +114,7 @@ def mcp_tool_to_langchain_tool(
114
114
  return StructuredTool(
115
115
  name=_sanitize_tool_name(tool.name),
116
116
  description=tool.description or "",
117
- args_schema=tool.inputSchema,
117
+ args_schema=tool.input_schema,
118
118
  coroutine=call_tool,
119
119
  response_format="content_and_artifact",
120
120
  metadata=metadata or None,
@@ -6,9 +6,9 @@ from contextlib import asynccontextmanager
6
6
  from datetime import timedelta
7
7
  from typing import Any
8
8
 
9
- import httpx
9
+ import httpx2
10
10
  from mcp import ClientSession
11
- from mcp.client.streamable_http import streamablehttp_client
11
+ from mcp.client.streamable_http import streamable_http_client
12
12
  from typing_extensions import NotRequired, TypedDict
13
13
 
14
14
  from languagemodelcommon.mcp.callbacks import _MCPCallbacks
@@ -35,15 +35,15 @@ class McpSessionError(Exception):
35
35
 
36
36
 
37
37
  class McpHttpClientFactory:
38
- """Protocol-compatible callable for creating httpx async clients."""
38
+ """Protocol-compatible callable for creating httpx2 async clients."""
39
39
 
40
40
  def __call__(
41
41
  self,
42
42
  headers: dict[str, str] | None = None,
43
- timeout: httpx.Timeout | None = None,
44
- auth: httpx.Auth | None = None,
45
- ) -> httpx.AsyncClient:
46
- return httpx.AsyncClient(
43
+ timeout: httpx2.Timeout | None = None,
44
+ auth: httpx2.Auth | None = None,
45
+ ) -> httpx2.AsyncClient:
46
+ return httpx2.AsyncClient(
47
47
  auth=auth,
48
48
  headers=headers,
49
49
  timeout=timeout,
@@ -73,11 +73,20 @@ async def create_mcp_session(
73
73
  headers = config.get("headers")
74
74
  timeout = config.get("timeout", DEFAULT_TIMEOUT)
75
75
  sse_read_timeout = config.get("sse_read_timeout", DEFAULT_SSE_READ_TIMEOUT)
76
- httpx_client_factory = config.get("httpx_client_factory")
77
-
78
- kwargs: dict[str, Any] = {}
79
- if httpx_client_factory is not None:
80
- kwargs["httpx_client_factory"] = httpx_client_factory
76
+ httpx_client_factory = config.get("httpx_client_factory") or McpHttpClientFactory()
77
+
78
+ # mcp>=2.0's streamable_http_client takes a ready-made httpx2.AsyncClient
79
+ # (http_client=) instead of individual headers/timeout/sse_read_timeout
80
+ # kwargs. connect/write/pool keep `timeout`; `read` gets the longer
81
+ # `sse_read_timeout`, since the streamable HTTP connection is a
82
+ # long-lived read that would otherwise be cut short by `timeout`.
83
+ http_client = httpx_client_factory(
84
+ headers=headers,
85
+ timeout=httpx2.Timeout(
86
+ timeout.total_seconds(),
87
+ read=sse_read_timeout.total_seconds(),
88
+ ),
89
+ )
81
90
 
82
91
  session_kwargs: dict[str, Any] = {}
83
92
  if mcp_callbacks is not None:
@@ -85,37 +94,38 @@ async def create_mcp_session(
85
94
  session_kwargs["logging_callback"] = mcp_callbacks.logging_callback
86
95
 
87
96
  try:
97
+ # streamable_http_client only manages the http_client's lifecycle
98
+ # when it creates one itself (http_client=None) -- since we always
99
+ # pass a pre-built client, we own closing it.
88
100
  async with (
89
- streamablehttp_client(
101
+ http_client,
102
+ streamable_http_client(
90
103
  url,
91
- headers,
92
- timeout,
93
- sse_read_timeout,
94
- **kwargs,
95
- ) as (read, write, _),
104
+ http_client=http_client,
105
+ ) as (read, write),
96
106
  ClientSession(read, write, **session_kwargs) as session,
97
107
  ):
98
108
  yield session
99
- except httpx.ConnectError as e:
109
+ except httpx2.ConnectError as e:
100
110
  raise McpSessionError(
101
111
  f"Connection refused — is the MCP server running at {url}? "
102
112
  f"({type(e).__name__}: {e})",
103
113
  url=url,
104
114
  ) from e
105
- except httpx.ConnectTimeout as e:
115
+ except httpx2.ConnectTimeout as e:
106
116
  raise McpSessionError(
107
117
  f"Connection timed out reaching MCP server at {url} "
108
118
  f"(timeout={timeout}). ({type(e).__name__}: {e})",
109
119
  url=url,
110
120
  ) from e
111
- except httpx.ReadTimeout as e:
121
+ except httpx2.ReadTimeout as e:
112
122
  raise McpSessionError(
113
123
  f"Read timed out waiting for MCP server at {url} "
114
124
  f"(sse_read_timeout={sse_read_timeout}). "
115
125
  f"({type(e).__name__}: {e})",
116
126
  url=url,
117
127
  ) from e
118
- except httpx.HTTPStatusError as e:
128
+ except httpx2.HTTPStatusError as e:
119
129
  raise McpSessionError(
120
130
  f"MCP server at {url} returned HTTP {e.response.status_code}. "
121
131
  f"({type(e).__name__}: {e})",
@@ -23,7 +23,7 @@ logger.setLevel(SRC_LOG_LEVELS.MCP)
23
23
  class _PooledSession:
24
24
  """A live MCP session whose CM lifecycle runs in a dedicated task.
25
25
 
26
- ``streamablehttp_client`` uses anyio task groups whose cancel scopes
26
+ ``streamable_http_client`` uses anyio task groups whose cancel scopes
27
27
  enforce that ``__aexit__`` is called in the same asyncio task that
28
28
  called ``__aenter__``. To satisfy this, a background task runs the
29
29
  CM and keeps it alive until ``close_event`` is set. The session
@@ -119,7 +119,7 @@ class McpSessionPool:
119
119
  Each session's context manager lifecycle runs in a dedicated asyncio
120
120
  task so that ``__aenter__`` and ``__aexit__`` execute in the same
121
121
  task — required by anyio cancel scopes used inside
122
- ``streamablehttp_client``.
122
+ ``streamable_http_client``.
123
123
  """
124
124
 
125
125
  def __init__(self) -> None:
@@ -93,7 +93,7 @@ async def _tool_supports_tasks(
93
93
  """Check whether a specific tool supports task-augmented execution.
94
94
 
95
95
  Server-level task capability is necessary but not sufficient. Each tool
96
- declares its own task support via execution.taskSupport in the tools/list
96
+ declares its own task support via execution.task_support in the tools/list
97
97
  response. Only tools with "optional" or "required" support tasks.
98
98
 
99
99
  Reads from the existing ToolListCache (populated when tools are listed)
@@ -112,7 +112,7 @@ async def _tool_supports_tasks(
112
112
  for tool in tools:
113
113
  if tool.name == tool_name:
114
114
  if tool.execution is not None:
115
- task_support = getattr(tool.execution, "taskSupport", None)
115
+ task_support = getattr(tool.execution, "task_support", None)
116
116
  return task_support in ("optional", "required")
117
117
  return False
118
118
 
@@ -120,20 +120,20 @@ async def _tool_supports_tasks(
120
120
 
121
121
 
122
122
  def _extract_task_id_from_create_result(create_result: Any) -> str:
123
- """Extract taskId from CreateTaskResult, handling both spec versions.
123
+ """Extract task_id from CreateTaskResult, handling both spec versions.
124
124
 
125
- Old spec: result.task.taskId (nested under 'task' field)
126
- New spec: result.taskId (flat, Result & Task merged)
125
+ Old spec: result.task.task_id (nested under 'task' field)
126
+ New spec: result.task_id (flat, Result & Task merged)
127
127
  """
128
- # New spec: taskId directly on result
129
- if hasattr(create_result, "taskId"):
130
- return str(create_result.taskId)
128
+ # New spec: task_id directly on result
129
+ if hasattr(create_result, "task_id"):
130
+ return str(create_result.task_id)
131
131
 
132
132
  # Old spec: nested under .task
133
133
  if hasattr(create_result, "task"):
134
- return str(create_result.task.taskId)
134
+ return str(create_result.task.task_id)
135
135
 
136
- raise ValueError(f"Cannot extract taskId from {type(create_result)}")
136
+ raise ValueError(f"Cannot extract task_id from {type(create_result)}")
137
137
 
138
138
 
139
139
  def _extract_result_from_task_status(task_status: Any) -> CallToolResult | None:
@@ -196,7 +196,7 @@ async def _execute_tool_as_task(
196
196
  {
197
197
  "task_id": task_id,
198
198
  "status": status.status,
199
- "message": getattr(status, "statusMessage", None),
199
+ "message": getattr(status, "status_message", None),
200
200
  "server_name": server_name,
201
201
  "tool_name": name,
202
202
  },
@@ -297,7 +297,7 @@ def _make_execute_tool(
297
297
 
298
298
  If the server and tool both advertise task support, the tool is
299
299
  executed via the MCP task protocol with polling and progress events.
300
- Per-tool ``execution.taskSupport`` is checked from the already-cached
300
+ Per-tool ``execution.task_support`` is checked from the already-cached
301
301
  tool list so that tools with ``"forbidden"`` (or no declaration) use
302
302
  normal call_tool.
303
303
  """
@@ -8,6 +8,7 @@ from dataclasses import dataclass
8
8
  from typing import Protocol
9
9
 
10
10
  from mcp import ClientSession
11
+ from mcp.types import PaginatedRequestParams
11
12
  from mcp.types import Tool as MCPTool
12
13
 
13
14
  from languagemodelcommon.utilities.logger.log_levels import SRC_LOG_LEVELS
@@ -266,12 +267,13 @@ async def list_all_tools(session: ClientSession) -> list[MCPTool]:
266
267
  if iterations > MAX_ITERATIONS:
267
268
  raise RuntimeError("Exceeded max iterations while listing tools")
268
269
 
269
- result = await session.list_tools(cursor=cursor)
270
+ params = PaginatedRequestParams(cursor=cursor) if cursor is not None else None
271
+ result = await session.list_tools(params=params)
270
272
  if result.tools:
271
273
  all_tools.extend(result.tools)
272
- if not result.nextCursor:
274
+ if not result.next_cursor:
273
275
  break
274
- cursor = result.nextCursor
276
+ cursor = result.next_cursor
275
277
 
276
278
  return all_tools
277
279
 
@@ -1,7 +1,8 @@
1
1
  import logging
2
- from typing import Any, AsyncIterator, override
2
+ from collections.abc import AsyncGenerator
3
+ from typing import override
3
4
 
4
- import httpx
5
+ import httpx2
5
6
 
6
7
  from languagemodelcommon.utilities.logger.log_levels import SRC_LOG_LEVELS
7
8
 
@@ -9,28 +10,29 @@ logger = logging.getLogger(__name__)
9
10
  logger.setLevel(SRC_LOG_LEVELS.HTTP)
10
11
 
11
12
 
12
- class LoggingResponse(httpx.Response):
13
+ class LoggingResponse(httpx2.Response):
13
14
  """
14
15
  A custom HTTP response class that logs the request and response details.
15
- This class extends httpx.Response to log the request method, URL, status code,
16
+ This class extends httpx2.Response to log the request method, URL, status code,
16
17
  and response content in bytes as they are streamed.
17
18
  """
18
19
 
19
20
  @override
20
- async def aiter_bytes(self, *args: Any, **kwargs: Any) -> AsyncIterator[bytes]:
21
+ async def aiter_bytes(
22
+ self, chunk_size: int | None = None
23
+ ) -> AsyncGenerator[bytes, None]:
21
24
  """
22
25
  Asynchronously iterate over the response content in bytes, logging each chunk.
23
26
  This method overrides the default aiter_bytes method to include logging.
24
27
  Args:
25
- *args: Positional arguments passed to the parent method.
26
- **kwargs: Keyword arguments passed to the parent method.
28
+ chunk_size: Passed through to the parent method.
27
29
  Yields:
28
30
  bytes: The next chunk of response content in bytes.
29
31
  """
30
32
  logger.debug(
31
33
  f"====== Response: {self.request.method} {self.url} {self.status_code} ====="
32
34
  )
33
- async for chunk in super().aiter_bytes(*args, **kwargs):
35
+ async for chunk in super().aiter_bytes(chunk_size):
34
36
  logger.debug(chunk)
35
37
  yield chunk
36
38
  logger.debug(
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  from typing import override
3
3
 
4
- import httpx
4
+ import httpx2
5
5
 
6
6
  from languagemodelcommon.utilities.logger.log_levels import SRC_LOG_LEVELS
7
7
  from languagemodelcommon.utilities.logger.logging_response import (
@@ -12,29 +12,29 @@ logger = logging.getLogger(__name__)
12
12
  logger.setLevel(SRC_LOG_LEVELS.HTTP)
13
13
 
14
14
 
15
- class LoggingTransport(httpx.AsyncBaseTransport):
15
+ class LoggingTransport(httpx2.AsyncBaseTransport):
16
16
  """
17
17
  A custom HTTP transport that logs request and response details.
18
- This class extends httpx.AsyncBaseTransport to log the request method, URL,
18
+ This class extends httpx2.AsyncBaseTransport to log the request method, URL,
19
19
  headers, and content before sending the request, and logs the response status code,
20
20
  headers, and content as it is streamed back.
21
- It is designed to be used with httpx for asynchronous HTTP requests.
21
+ It is designed to be used with httpx2 for asynchronous HTTP requests.
22
22
  It logs the request method, URL, headers, and content before sending the request,
23
23
  and logs the response status code, headers, and content as it is streamed back.
24
24
  This transport can be used to monitor and debug HTTP requests and responses in an application.
25
25
  """
26
26
 
27
- def __init__(self, transport: httpx.AsyncBaseTransport) -> None:
27
+ def __init__(self, transport: httpx2.AsyncBaseTransport) -> None:
28
28
  """
29
29
  Initialize the LoggingTransport with a given transport.
30
30
  Args:
31
- transport (httpx.AsyncBaseTransport): The underlying transport to wrap.
31
+ transport (httpx2.AsyncBaseTransport): The underlying transport to wrap.
32
32
  This transport will handle the actual HTTP requests and responses.
33
33
  """
34
- self.transport: httpx.AsyncBaseTransport = transport
34
+ self.transport: httpx2.AsyncBaseTransport = transport
35
35
 
36
36
  @override
37
- async def handle_async_request(self, request: httpx.Request) -> LoggingResponse:
37
+ async def handle_async_request(self, request: httpx2.Request) -> LoggingResponse:
38
38
  """
39
39
  Handle an asynchronous HTTP request, logging the request details and returning a LoggingResponse.
40
40
  Args:
@@ -60,7 +60,7 @@ class LoggingTransport(httpx.AsyncBaseTransport):
60
60
  stream=response.stream,
61
61
  extensions=response.extensions,
62
62
  )
63
- except httpx.HTTPError as e:
63
+ except httpx2.HTTPError as e:
64
64
  logger.exception(f"HTTP error occurred: {e}")
65
65
  raise
66
66
  except Exception as e:
@@ -37,7 +37,7 @@ dependencies = [
37
37
  "pypdf>=6.6.0",
38
38
  "markdownify>=0.14.1",
39
39
  "beautifulsoup4>=4.12.3",
40
- "oidcauthlib>=3.0.18",
40
+ "oidcauthlib>=3.0.21",
41
41
  "fsspec>=2026.2.0",
42
42
  "authlib>=1.6.5",
43
43
  "langchain-google-genai>=4.1.3",
@@ -1 +0,0 @@
1
- 3.0.0