language-model-common 2.0.83__tar.gz → 2.0.85__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 (205) hide show
  1. {language_model_common-2.0.83/language_model_common.egg-info → language_model_common-2.0.85}/PKG-INFO +1 -1
  2. language_model_common-2.0.85/VERSION +1 -0
  3. {language_model_common-2.0.83 → language_model_common-2.0.85/language_model_common.egg-info}/PKG-INFO +1 -1
  4. {language_model_common-2.0.83 → language_model_common-2.0.85}/language_model_common.egg-info/SOURCES.txt +1 -0
  5. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/langgraph_to_openai_converter.py +149 -37
  6. language_model_common-2.0.85/languagemodelcommon/exceptions/rate_limit_exception.py +22 -0
  7. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/mcp_tool_list_store.py +12 -1
  8. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/environment/language_model_common_environment_variables.py +15 -0
  9. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/tool_display_name_mapper.py +2 -2
  10. language_model_common-2.0.83/VERSION +0 -1
  11. {language_model_common-2.0.83 → language_model_common-2.0.85}/LICENSE +0 -0
  12. {language_model_common-2.0.83 → language_model_common-2.0.85}/MANIFEST.in +0 -0
  13. {language_model_common-2.0.83 → language_model_common-2.0.85}/README.md +0 -0
  14. {language_model_common-2.0.83 → language_model_common-2.0.85}/language_model_common.egg-info/dependency_links.txt +0 -0
  15. {language_model_common-2.0.83 → language_model_common-2.0.85}/language_model_common.egg-info/requires.txt +0 -0
  16. {language_model_common-2.0.83 → language_model_common-2.0.85}/language_model_common.egg-info/top_level.txt +0 -0
  17. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/__init__.py +0 -0
  18. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/__init__.py +0 -0
  19. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/authenticator/__init__.py +0 -0
  20. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/exceptions/__init__.py +0 -0
  21. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/exceptions/authorization_mcp_tool_token_invalid_exception.py +0 -0
  22. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/exceptions/authorization_token_cache_item_expired_exception.py +0 -0
  23. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/exceptions/authorization_token_cache_item_not_found_exception.py +0 -0
  24. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/models/__init__.py +0 -0
  25. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/models/token_cache_item.py +0 -0
  26. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/oauth_provider_registrar.py +0 -0
  27. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/pass_through_token_manager.py +0 -0
  28. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/token_exchange/__init__.py +0 -0
  29. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/token_exchange/token_exchange_manager.py +0 -0
  30. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/token_storage_auth_manager.py +0 -0
  31. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/tools/__init__.py +0 -0
  32. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/auth/tools/tool_auth_manager.py +0 -0
  33. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/aws/__init__.py +0 -0
  34. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/aws/aws_client_factory.py +0 -0
  35. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/__init__.py +0 -0
  36. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/__init__.py +0 -0
  37. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/config_reader.py +0 -0
  38. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/file_config_reader.py +0 -0
  39. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/github_directory_downloader.py +0 -0
  40. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/github_directory_helper.py +0 -0
  41. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/mcp_json_fetcher.py +0 -0
  42. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/mcp_json_reader.py +0 -0
  43. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/config_reader/s3_config_reader.py +0 -0
  44. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/prompt_library/__init__.py +0 -0
  45. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/prompt_library/prompt_library_environment_variables.py +0 -0
  46. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/prompt_library/prompt_library_manager.py +0 -0
  47. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/prompt_library/prompt_store.py +0 -0
  48. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/schemas/__init__.py +0 -0
  49. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/schemas/config_schema.py +0 -0
  50. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/configs/schemas/mcp_json_schema.py +0 -0
  51. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/container/__init__.py +0 -0
  52. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/container/container_factory.py +0 -0
  53. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/context/__init__.py +0 -0
  54. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/context/request_context.py +0 -0
  55. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/__init__.py +0 -0
  56. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/stream_buffer.py +0 -0
  57. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/stream_context_mixin.py +0 -0
  58. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/stream_debug_output_manager.py +0 -0
  59. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/streaming_formatters.py +0 -0
  60. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/streaming_manager.py +0 -0
  61. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/streaming_tool_node.py +0 -0
  62. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/converters/tool_event_handlers.py +0 -0
  63. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/exceptions/__init__.py +0 -0
  64. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/exceptions/bailey_exception.py +0 -0
  65. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/__init__.py +0 -0
  66. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/aws_s3_file_manager.py +0 -0
  67. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/file_manager.py +0 -0
  68. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/file_manager_factory.py +0 -0
  69. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/file_writer.py +0 -0
  70. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/file_managers/local_file_manager.py +0 -0
  71. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/github/__init__.py +0 -0
  72. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/github/token_provider.py +0 -0
  73. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/graph/__init__.py +0 -0
  74. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/graph/graph_builder.py +0 -0
  75. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/history/__init__.py +0 -0
  76. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/history/context_compactor.py +0 -0
  77. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/history/conversation_history_manager.py +0 -0
  78. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/history/smart_history_manager.py +0 -0
  79. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/http/__init__.py +0 -0
  80. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/http/http_client_factory.py +0 -0
  81. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/__init__.py +0 -0
  82. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/aws_image_generator.py +0 -0
  83. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/image_generator.py +0 -0
  84. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/image_generator_factory.py +0 -0
  85. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/managers/__init__.py +0 -0
  86. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/managers/image_generation_manager.py +0 -0
  87. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/openai_image_generator.py +0 -0
  88. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/providers/__init__.py +0 -0
  89. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/providers/base_image_generation_provider.py +0 -0
  90. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/image_generation/providers/image_generation_provider.py +0 -0
  91. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/markdown/__init__.py +0 -0
  92. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/markdown/html_to_markdown_converter.py +0 -0
  93. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/__init__.py +0 -0
  94. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/auth/__init__.py +0 -0
  95. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/auth/auth_server_metadata_discovery.py +0 -0
  96. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/auth/mcp_authorization_helper.py +0 -0
  97. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/callbacks.py +0 -0
  98. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/exceptions/__init__.py +0 -0
  99. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/exceptions/mcp_tool_exception.py +0 -0
  100. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/exceptions/mcp_tool_not_found_exception.py +0 -0
  101. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/exceptions/mcp_tool_unauthorized_exception.py +0 -0
  102. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/exceptions/mcp_tool_unknown_exception.py +0 -0
  103. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/interceptors/__init__.py +0 -0
  104. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/interceptors/auth.py +0 -0
  105. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/interceptors/tracing.py +0 -0
  106. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/interceptors/truncation.py +0 -0
  107. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/interceptors/types.py +0 -0
  108. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/__init__.py +0 -0
  109. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/content_conversion.py +0 -0
  110. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/langchain_adapter.py +0 -0
  111. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/mcp_app_proxy.py +0 -0
  112. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/server_card_discovery.py +0 -0
  113. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/session.py +0 -0
  114. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/session_pool.py +0 -0
  115. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/tool_invocation.py +0 -0
  116. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/tool_list_cache.py +0 -0
  117. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_client/ui_resource.py +0 -0
  118. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/mcp_tool_provider.py +0 -0
  119. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/tool_catalog.py +0 -0
  120. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mcp/tool_discovery_middleware.py +0 -0
  121. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mocks/__init__.py +0 -0
  122. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mocks/mock_aws_client_factory.py +0 -0
  123. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mocks/mock_http_client_factory.py +0 -0
  124. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mocks/mock_image_generator.py +0 -0
  125. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/mocks/mock_image_generator_factory.py +0 -0
  126. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/models/__init__.py +0 -0
  127. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/models/bedrock_models.py +0 -0
  128. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/models/model_factory.py +0 -0
  129. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/models/sanitizing_bedrock_converse.py +0 -0
  130. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/ocr/__init__.py +0 -0
  131. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/ocr/aws_ocr_extractor.py +0 -0
  132. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/ocr/ocr_extractor.py +0 -0
  133. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/ocr/ocr_extractor_factory.py +0 -0
  134. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/persistence/__init__.py +0 -0
  135. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/persistence/persistence_factory.py +0 -0
  136. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/__init__.py +0 -0
  137. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/context.py +0 -0
  138. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/output/__init__.py +0 -0
  139. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/pipeline.py +0 -0
  140. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/step.py +0 -0
  141. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/pipeline/steps/__init__.py +0 -0
  142. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/py.typed +0 -0
  143. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/schema/__init__.py +0 -0
  144. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/schema/openai/__init__.py +0 -0
  145. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/schema/openai/completions.py +0 -0
  146. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/schema/openai/image_generation.py +0 -0
  147. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/schema/openai/responses.py +0 -0
  148. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/state/__init__.py +0 -0
  149. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/state/messages_state.py +0 -0
  150. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/__init__.py +0 -0
  151. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/__init__.py +0 -0
  152. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/message/__init__.py +0 -0
  153. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/message/chat_completion_api_message_wrapper.py +0 -0
  154. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/message/chat_message_wrapper.py +0 -0
  155. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/message/responses_api_message_wrapper.py +0 -0
  156. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/request/__init__.py +0 -0
  157. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/request/chat_completion_api_request_wrapper.py +0 -0
  158. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/request/chat_request_wrapper.py +0 -0
  159. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/structures/openai/request/responses_api_request_wrapper.py +0 -0
  160. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/tools/__init__.py +0 -0
  161. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/tools/mcp/__init__.py +0 -0
  162. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/tools/mcp/call_tool_tool.py +0 -0
  163. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/tools/mcp/search_tools_tool.py +0 -0
  164. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/__init__.py +0 -0
  165. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/cache/__init__.py +0 -0
  166. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/cache/advisory_lock.py +0 -0
  167. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/cache/model_config_cache_store.py +0 -0
  168. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/chat_message_helpers.py +0 -0
  169. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/config_substitution.py +0 -0
  170. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/environment/__init__.py +0 -0
  171. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/header_reader/__init__.py +0 -0
  172. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/header_reader/header_reader.py +0 -0
  173. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/__init__.py +0 -0
  174. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/debug_configuration.py +0 -0
  175. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/exception_formatter.py +0 -0
  176. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/exception_logger.py +0 -0
  177. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/log_levels.py +0 -0
  178. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/logging_response.py +0 -0
  179. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/logger/logging_transport.py +0 -0
  180. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/message_preprocessing/__init__.py +0 -0
  181. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/message_preprocessing/composite_message_preprocessor.py +0 -0
  182. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/message_preprocessing/message_preprocessor.py +0 -0
  183. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/mongo_url_utils.py +0 -0
  184. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/openai/__init__.py +0 -0
  185. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/openai/responses_api_converter.py +0 -0
  186. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/request_information.py +0 -0
  187. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/s3_url.py +0 -0
  188. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/security/__init__.py +0 -0
  189. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/security/normalize.py +0 -0
  190. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/security/off_topic_detector.py +0 -0
  191. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/security/prompt_extraction_detector.py +0 -0
  192. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/security/prompt_sanitizer.py +0 -0
  193. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/__init__.py +0 -0
  194. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/handlers/__init__.py +0 -0
  195. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/handlers/debug_command_handler.py +0 -0
  196. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/handlers/skill_command_handler.py +0 -0
  197. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/slash_command_handler.py +0 -0
  198. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/slash_command_parser.py +0 -0
  199. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/slash_command/slash_command_processor.py +0 -0
  200. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/text_humanizer.py +0 -0
  201. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/token_reducer/__init__.py +0 -0
  202. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/token_reducer/token_reducer.py +0 -0
  203. {language_model_common-2.0.83 → language_model_common-2.0.85}/languagemodelcommon/utilities/url_parser.py +0 -0
  204. {language_model_common-2.0.83 → language_model_common-2.0.85}/pyproject.toml +0 -0
  205. {language_model_common-2.0.83 → language_model_common-2.0.85}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: language-model-common
3
- Version: 2.0.83
3
+ Version: 2.0.85
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
@@ -0,0 +1 @@
1
+ 2.0.85
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: language-model-common
3
- Version: 2.0.83
3
+ Version: 2.0.85
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
@@ -58,6 +58,7 @@ languagemodelcommon/converters/streaming_tool_node.py
58
58
  languagemodelcommon/converters/tool_event_handlers.py
59
59
  languagemodelcommon/exceptions/__init__.py
60
60
  languagemodelcommon/exceptions/bailey_exception.py
61
+ languagemodelcommon/exceptions/rate_limit_exception.py
61
62
  languagemodelcommon/file_managers/__init__.py
62
63
  languagemodelcommon/file_managers/aws_s3_file_manager.py
63
64
  languagemodelcommon/file_managers/file_manager.py
@@ -1,5 +1,7 @@
1
+ import asyncio
1
2
  import botocore
2
3
  import logging
4
+ import random
3
5
  import re
4
6
  import traceback
5
7
  import uuid
@@ -50,6 +52,7 @@ from languagemodelcommon.converters.stream_debug_output_manager import (
50
52
  )
51
53
  from languagemodelcommon.converters.streaming_manager import LangGraphStreamingManager
52
54
  from languagemodelcommon.exceptions.bailey_exception import BaileyException
55
+ from languagemodelcommon.exceptions.rate_limit_exception import RateLimitException
53
56
  from languagemodelcommon.mcp.tool_catalog import ToolCatalog
54
57
  from languagemodelcommon.mcp.tool_discovery_middleware import ToolDiscoveryMiddleware
55
58
  from languagemodelcommon.state.messages_state import MyMessagesState
@@ -133,6 +136,53 @@ class LangGraphToOpenAIConverter(StreamContextMixin):
133
136
  current = current.__cause__ or current.__context__
134
137
  return False
135
138
 
139
+ _RATE_LIMIT_PATTERNS: tuple[str, ...] = (
140
+ "too many tokens",
141
+ "rate limit",
142
+ "rate_limit",
143
+ "error code: 429",
144
+ )
145
+
146
+ @staticmethod
147
+ def _is_rate_limit_error(exception: BaseException) -> bool:
148
+ """Check if any exception in the cause chain is an upstream rate limit (HTTP 429).
149
+
150
+ Detects structurally rather than importing a specific vendor SDK: a
151
+ ``status_code``/``code`` of 429, a class named ``*RateLimitError*``
152
+ (Anthropic, OpenAI), or a recognizable message pattern.
153
+ """
154
+ current: BaseException | None = exception
155
+ while current is not None:
156
+ if (
157
+ getattr(current, "status_code", None) == 429
158
+ or getattr(current, "code", None) == 429
159
+ ):
160
+ return True
161
+ if "ratelimiterror" in current.__class__.__name__.lower():
162
+ return True
163
+ msg = str(current).lower()
164
+ if any(p in msg for p in LangGraphToOpenAIConverter._RATE_LIMIT_PATTERNS):
165
+ return True
166
+ current = current.__cause__ or current.__context__
167
+ return False
168
+
169
+ @staticmethod
170
+ def _get_retry_after_seconds(exception: BaseException) -> float | None:
171
+ """Extract a ``Retry-After`` hint (seconds) from the exception's response, if present."""
172
+ current: BaseException | None = exception
173
+ while current is not None:
174
+ response = getattr(current, "response", None)
175
+ headers = getattr(response, "headers", None)
176
+ if headers is not None:
177
+ retry_after = headers.get("retry-after") or headers.get("Retry-After")
178
+ if retry_after is not None:
179
+ try:
180
+ return float(retry_after)
181
+ except (TypeError, ValueError):
182
+ pass
183
+ current = current.__cause__ or current.__context__
184
+ return None
185
+
136
186
  @staticmethod
137
187
  def _find_cause(
138
188
  exception: BaseException, target_type: type[BaseException]
@@ -693,50 +743,101 @@ class LangGraphToOpenAIConverter(StreamContextMixin):
693
743
  config=config,
694
744
  )
695
745
 
696
- try:
697
- async for event in self._attempt_stream(
698
- messages=messages,
699
- compiled_state_graph=compiled_state_graph,
700
- request_information=request_information,
701
- config=config,
702
- state=state,
703
- ):
704
- yield event
705
- except BaileyException as e:
706
- if "context window" not in str(e):
707
- raise
708
-
709
- if not self.environment_variables.context_compaction_enabled:
710
- raise
711
-
712
- # Compact and retry once
713
- compacted_messages = self._context_compactor.compact(messages=messages)
714
- if compacted_messages is messages or compacted_messages == messages:
715
- raise
716
-
717
- logger.info(
718
- "Retrying after compaction. request_id=%s original_messages=%d compacted_messages=%d",
719
- request_information.request_id,
720
- len(messages),
721
- len(compacted_messages),
722
- )
723
-
746
+ rate_limit_attempt = 0
747
+ while True:
748
+ yielded_any = False
724
749
  try:
725
750
  async for event in self._attempt_stream(
726
- messages=compacted_messages,
751
+ messages=messages,
727
752
  compiled_state_graph=compiled_state_graph,
728
753
  request_information=request_information,
729
754
  config=config,
730
- state=None,
755
+ state=state,
731
756
  ):
757
+ yielded_any = True
732
758
  yield event
733
- except BaileyException:
734
- raise
735
- except Exception as retry_error:
736
- raise BaileyException(
737
- "The conversation input exceeds the model's context window "
738
- "even after compaction. Please start a new conversation."
739
- ) from retry_error
759
+ return
760
+ except RateLimitException as e:
761
+ # Only safe to retry before the first token is streamed to the
762
+ # client; once partial output is sent, re-running would duplicate it.
763
+ if (
764
+ yielded_any
765
+ or not self.environment_variables.rate_limit_retry_enabled
766
+ or rate_limit_attempt
767
+ >= self.environment_variables.rate_limit_max_retries
768
+ ):
769
+ raise
770
+
771
+ delay_seconds = self._compute_rate_limit_backoff(
772
+ attempt=rate_limit_attempt,
773
+ retry_after_seconds=e.retry_after_seconds,
774
+ )
775
+ logger.warning(
776
+ "Retrying after rate limit before first token. "
777
+ "request_id=%s attempt=%d delay_seconds=%.2f",
778
+ request_information.request_id,
779
+ rate_limit_attempt + 1,
780
+ delay_seconds,
781
+ )
782
+ await asyncio.sleep(delay_seconds)
783
+ rate_limit_attempt += 1
784
+ continue
785
+ except BaileyException as e:
786
+ if "context window" not in str(e):
787
+ raise
788
+
789
+ if not self.environment_variables.context_compaction_enabled:
790
+ raise
791
+
792
+ # Compact and retry once
793
+ compacted_messages = self._context_compactor.compact(messages=messages)
794
+ if compacted_messages is messages or compacted_messages == messages:
795
+ raise
796
+
797
+ logger.info(
798
+ "Retrying after compaction. request_id=%s original_messages=%d compacted_messages=%d",
799
+ request_information.request_id,
800
+ len(messages),
801
+ len(compacted_messages),
802
+ )
803
+
804
+ try:
805
+ async for event in self._attempt_stream(
806
+ messages=compacted_messages,
807
+ compiled_state_graph=compiled_state_graph,
808
+ request_information=request_information,
809
+ config=config,
810
+ state=None,
811
+ ):
812
+ yield event
813
+ return
814
+ except BaileyException:
815
+ raise
816
+ except Exception as retry_error:
817
+ raise BaileyException(
818
+ "The conversation input exceeds the model's context window "
819
+ "even after compaction. Please start a new conversation."
820
+ ) from retry_error
821
+
822
+ def _compute_rate_limit_backoff(
823
+ self,
824
+ *,
825
+ attempt: int,
826
+ retry_after_seconds: float | None,
827
+ ) -> float:
828
+ """Compute backoff delay for a rate-limit retry.
829
+
830
+ Honors an upstream ``Retry-After`` hint when present; otherwise uses
831
+ exponential backoff with full jitter based on the configured base delay.
832
+ """
833
+ if retry_after_seconds is not None and retry_after_seconds > 0:
834
+ return retry_after_seconds
835
+ base_delay_seconds = (
836
+ self.environment_variables.rate_limit_retry_base_delay_ms / 1000.0
837
+ )
838
+ exponential_delay = base_delay_seconds * (2**attempt)
839
+ # Full jitter: random point in [0, exponential_delay] avoids thundering herd.
840
+ return random.uniform(0, exponential_delay)
740
841
 
741
842
  async def _attempt_stream(
742
843
  self,
@@ -800,6 +901,17 @@ class LangGraphToOpenAIConverter(StreamContextMixin):
800
901
  "The graph reached its recursion limit before completing. "
801
902
  "Please try again with a more focused request."
802
903
  ) from e
904
+ if self._is_rate_limit_error(e):
905
+ logger.warning(
906
+ "Rate limited while streaming. request_id=%s message_count=%d error=%s",
907
+ request_information.request_id,
908
+ len(messages),
909
+ e,
910
+ )
911
+ raise RateLimitException(
912
+ f"Upstream model rate limit exceeded: {e}",
913
+ retry_after_seconds=self._get_retry_after_seconds(e),
914
+ ) from e
803
915
  if self._is_timeout_exception(e):
804
916
  logger.warning(
805
917
  "Timeout while streaming graph. request_id=%s message_count=%d error=%s",
@@ -0,0 +1,22 @@
1
+ from typing import Optional
2
+
3
+ from languagemodelcommon.exceptions.bailey_exception import BaileyException
4
+
5
+
6
+ class RateLimitException(BaileyException):
7
+ """Raised when an upstream model rejects a request with a rate limit (HTTP 429).
8
+
9
+ Subclasses :class:`BaileyException` so existing callers that catch the base
10
+ type continue to work. Carries an optional ``retry_after_seconds`` hint
11
+ parsed from the upstream ``Retry-After`` header so callers can honor the
12
+ server's requested backoff.
13
+ """
14
+
15
+ def __init__(
16
+ self,
17
+ message: str,
18
+ *,
19
+ retry_after_seconds: Optional[float] = None,
20
+ ) -> None:
21
+ super().__init__(message)
22
+ self.retry_after_seconds = retry_after_seconds
@@ -91,7 +91,18 @@ class McpToolListStore:
91
91
 
92
92
  async def clear(self) -> None:
93
93
  if isinstance(self._store, BaseDestroyCollectionStore):
94
- await self._store.destroy_collection(collection=self._collection)
94
+ try:
95
+ await self._store.destroy_collection(collection=self._collection)
96
+ except KeyError:
97
+ # py-key-value-aio's MongoDBStore lazy-registers collections in
98
+ # _collections_by_name on first read/write and raises KeyError
99
+ # from destroy_collection when the collection was never touched.
100
+ # Treat as a no-op: nothing was stored, nothing to clear.
101
+ logger.debug(
102
+ "Collection %s not initialized; clear is a no-op",
103
+ self._collection,
104
+ )
105
+ return
95
106
  self._store._setup_collection_complete[self._collection] = False
96
107
  else:
97
108
  logger.warning(
@@ -235,6 +235,21 @@ class LanguageModelCommonEnvironmentVariables(
235
235
  """When True, automatically compact conversation context on input-too-long errors."""
236
236
  return self.str2bool(os.environ.get("CONTEXT_COMPACTION_ENABLED", "true"))
237
237
 
238
+ @property
239
+ def rate_limit_retry_enabled(self) -> bool:
240
+ """When True, retry upstream model rate limits (HTTP 429) before surfacing them."""
241
+ return self.str2bool(os.environ.get("RATE_LIMIT_RETRY_ENABLED", "true"))
242
+
243
+ @property
244
+ def rate_limit_max_retries(self) -> int:
245
+ """Maximum number of retries for an upstream rate limit before giving up."""
246
+ return int(os.environ.get("RATE_LIMIT_MAX_RETRIES", "3"))
247
+
248
+ @property
249
+ def rate_limit_retry_base_delay_ms(self) -> int:
250
+ """Base delay in milliseconds for rate-limit retry exponential backoff."""
251
+ return int(os.environ.get("RATE_LIMIT_RETRY_BASE_DELAY_MS", "500"))
252
+
238
253
  @property
239
254
  def mongo_db_token_collection_name(self) -> Optional[str]:
240
255
  return os.environ.get("MONGO_DB_TOKEN_COLLECTION_NAME")
@@ -154,8 +154,8 @@ class ToolDisplayNameMapper:
154
154
  return ""
155
155
 
156
156
  if self._starts_with_emoji(name_for_tool):
157
- return f"\n{name_for_tool}.\n"
158
- return f"\n🛠️ {name_for_tool}.\n"
157
+ return f"\n\n{name_for_tool}.\n\n"
158
+ return f"\n\n🛠️ {name_for_tool}.\n\n"
159
159
 
160
160
  def get_name_for_tool(
161
161
  self, *, tool_name: str | None, tool_input: Dict[str, Any] | None
@@ -1 +0,0 @@
1
- 2.0.83