praisonaiagents 0.0.145__tar.gz → 0.0.147__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 (92) hide show
  1. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/PKG-INFO +9 -3
  2. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/__init__.py +8 -22
  3. praisonaiagents-0.0.147/praisonaiagents/_logging.py +134 -0
  4. praisonaiagents-0.0.147/praisonaiagents/_warning_patch.py +73 -0
  5. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/agent.py +358 -48
  6. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/llm/__init__.py +3 -22
  7. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/llm/llm.py +724 -153
  8. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/llm/openai_client.py +98 -16
  9. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/main.py +1 -5
  10. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/memory/memory.py +45 -0
  11. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/telemetry/__init__.py +63 -3
  12. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/telemetry/integration.py +78 -10
  13. praisonaiagents-0.0.147/praisonaiagents/telemetry/performance_cli.py +397 -0
  14. praisonaiagents-0.0.147/praisonaiagents/telemetry/performance_monitor.py +573 -0
  15. praisonaiagents-0.0.147/praisonaiagents/telemetry/performance_utils.py +571 -0
  16. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/telemetry/telemetry.py +35 -11
  17. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents.egg-info/PKG-INFO +9 -3
  18. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents.egg-info/SOURCES.txt +6 -0
  19. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents.egg-info/requires.txt +9 -2
  20. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/pyproject.toml +12 -4
  21. praisonaiagents-0.0.147/tests/test_gemini_streaming_fix.py +88 -0
  22. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/README.md +0 -0
  23. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/__init__.py +0 -0
  24. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/context_agent.py +0 -0
  25. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/handoff.py +0 -0
  26. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/image_agent.py +0 -0
  27. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agent/router_agent.py +0 -0
  28. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agents/__init__.py +0 -0
  29. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agents/agents.py +0 -0
  30. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/agents/autoagents.py +0 -0
  31. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/approval.py +0 -0
  32. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/guardrails/__init__.py +0 -0
  33. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/guardrails/guardrail_result.py +0 -0
  34. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/guardrails/llm_guardrail.py +0 -0
  35. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/knowledge/__init__.py +0 -0
  36. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/knowledge/chunking.py +0 -0
  37. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/knowledge/knowledge.py +0 -0
  38. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/llm/model_capabilities.py +0 -0
  39. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/llm/model_router.py +0 -0
  40. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/mcp/__init__.py +0 -0
  41. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/mcp/mcp.py +0 -0
  42. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/mcp/mcp_http_stream.py +0 -0
  43. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/mcp/mcp_sse.py +0 -0
  44. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/memory/__init__.py +0 -0
  45. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/process/__init__.py +0 -0
  46. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/process/process.py +0 -0
  47. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/session.py +0 -0
  48. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/task/__init__.py +0 -0
  49. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/task/task.py +0 -0
  50. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/README.md +0 -0
  51. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/__init__.py +0 -0
  52. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/arxiv_tools.py +0 -0
  53. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/calculator_tools.py +0 -0
  54. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/csv_tools.py +0 -0
  55. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/duckdb_tools.py +0 -0
  56. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
  57. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/excel_tools.py +0 -0
  58. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/file_tools.py +0 -0
  59. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/json_tools.py +0 -0
  60. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/mongodb_tools.py +0 -0
  61. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/newspaper_tools.py +0 -0
  62. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/pandas_tools.py +0 -0
  63. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/python_tools.py +0 -0
  64. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/searxng_tools.py +0 -0
  65. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/shell_tools.py +0 -0
  66. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/spider_tools.py +0 -0
  67. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/test.py +0 -0
  68. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/tools.py +0 -0
  69. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/train/data/generatecot.py +0 -0
  70. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/wikipedia_tools.py +0 -0
  71. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/xml_tools.py +0 -0
  72. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/yaml_tools.py +0 -0
  73. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents/tools/yfinance_tools.py +0 -0
  74. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents.egg-info/dependency_links.txt +0 -0
  75. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/praisonaiagents.egg-info/top_level.txt +0 -0
  76. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/setup.cfg +0 -0
  77. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test-graph-memory.py +0 -0
  78. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test.py +0 -0
  79. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_context_agent.py +0 -0
  80. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_embedding_logging.py +0 -0
  81. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_fix_comprehensive.py +0 -0
  82. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_handoff_compatibility.py +0 -0
  83. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_http_stream_basic.py +0 -0
  84. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_llm_self_reflection_direct.py +0 -0
  85. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_ollama_async_fix.py +0 -0
  86. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_ollama_fix.py +0 -0
  87. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_ollama_sequential_fix.py +0 -0
  88. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_posthog_fixed.py +0 -0
  89. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_self_reflection_comprehensive.py +0 -0
  90. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_self_reflection_fix_simple.py +0 -0
  91. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_self_reflection_fix_verification.py +0 -0
  92. {praisonaiagents-0.0.145 → praisonaiagents-0.0.147}/tests/test_validation_feedback.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praisonaiagents
3
- Version: 0.0.145
3
+ Version: 0.0.147
4
4
  Summary: Praison AI agents for completing complex tasks with Self Reflection Agents
5
5
  Author: Mervin Praison
6
6
  Requires-Python: >=3.10
@@ -15,7 +15,7 @@ Requires-Dist: fastapi>=0.115.0; extra == "mcp"
15
15
  Requires-Dist: uvicorn>=0.34.0; extra == "mcp"
16
16
  Provides-Extra: memory
17
17
  Requires-Dist: chromadb>=1.0.0; extra == "memory"
18
- Requires-Dist: litellm>=1.72.0; extra == "memory"
18
+ Requires-Dist: litellm>=1.72.6; extra == "memory"
19
19
  Provides-Extra: knowledge
20
20
  Requires-Dist: mem0ai>=0.1.0; extra == "knowledge"
21
21
  Requires-Dist: chromadb>=1.0.0; extra == "knowledge"
@@ -25,7 +25,7 @@ Provides-Extra: graph
25
25
  Requires-Dist: mem0ai[graph]>=0.1.0; extra == "graph"
26
26
  Requires-Dist: chromadb>=1.0.0; extra == "graph"
27
27
  Provides-Extra: llm
28
- Requires-Dist: litellm>=1.72.0; extra == "llm"
28
+ Requires-Dist: litellm>=1.72.6; extra == "llm"
29
29
  Requires-Dist: pydantic>=2.4.2; extra == "llm"
30
30
  Provides-Extra: api
31
31
  Requires-Dist: fastapi>=0.115.0; extra == "api"
@@ -35,6 +35,11 @@ Requires-Dist: posthog>=3.0.0; extra == "telemetry"
35
35
  Provides-Extra: mongodb
36
36
  Requires-Dist: pymongo>=4.6.3; extra == "mongodb"
37
37
  Requires-Dist: motor>=3.4.0; extra == "mongodb"
38
+ Provides-Extra: auth
39
+ Requires-Dist: PyJWT>=2.8.0; extra == "auth"
40
+ Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "auth"
41
+ Requires-Dist: python-jose[cryptography]>=3.3.0; extra == "auth"
42
+ Requires-Dist: python-multipart>=0.0.6; extra == "auth"
38
43
  Provides-Extra: all
39
44
  Requires-Dist: praisonaiagents[memory]; extra == "all"
40
45
  Requires-Dist: praisonaiagents[knowledge]; extra == "all"
@@ -44,3 +49,4 @@ Requires-Dist: praisonaiagents[mcp]; extra == "all"
44
49
  Requires-Dist: praisonaiagents[api]; extra == "all"
45
50
  Requires-Dist: praisonaiagents[telemetry]; extra == "all"
46
51
  Requires-Dist: praisonaiagents[mongodb]; extra == "all"
52
+ Requires-Dist: praisonaiagents[auth]; extra == "all"
@@ -2,30 +2,16 @@
2
2
  Praison AI Agents - A package for hierarchical AI agent task execution
3
3
  """
4
4
 
5
- # Configure logging before any other imports
6
- import os
7
- import logging
8
- from rich.logging import RichHandler
5
+ # Apply warning patch BEFORE any imports to intercept warnings at the source
6
+ from . import _warning_patch
9
7
 
10
- # Get log level from environment variable
11
- LOGLEVEL = os.environ.get('LOGLEVEL', 'INFO').upper()
8
+ # Import centralized logging configuration FIRST
9
+ from . import _logging
12
10
 
13
- # Configure root logger
14
- logging.basicConfig(
15
- level=getattr(logging, LOGLEVEL, logging.INFO),
16
- format="%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s",
17
- datefmt="[%X]",
18
- handlers=[RichHandler(rich_tracebacks=True)]
19
- )
20
-
21
- # Suppress specific noisy loggers
22
- logging.getLogger("litellm").setLevel(logging.WARNING)
23
- logging.getLogger("litellm.utils").setLevel(logging.WARNING)
24
- logging.getLogger("markdown_it").setLevel(logging.WARNING)
25
- logging.getLogger("rich.markdown").setLevel(logging.WARNING)
26
- logging.getLogger("httpx").setLevel(logging.WARNING)
27
- logging.getLogger("httpcore").setLevel(logging.WARNING)
11
+ # Configure root logger after logging is initialized
12
+ _logging.configure_root_logger()
28
13
 
14
+ # Now import everything else
29
15
  from .agent.agent import Agent
30
16
  from .agent.image_agent import ImageAgent
31
17
  from .agent.context_agent import ContextAgent, create_context_agent
@@ -149,4 +135,4 @@ __all__ = [
149
135
 
150
136
  # Add MCP to __all__ if available
151
137
  if _mcp_available:
152
- __all__.append('MCP')
138
+ __all__.append('MCP')
@@ -0,0 +1,134 @@
1
+ """
2
+ Centralized logging configuration for PraisonAI Agents.
3
+ This module consolidates all logging configuration in one place to avoid duplication.
4
+ """
5
+
6
+ import os
7
+ import logging
8
+ from typing import List
9
+
10
+ # ========================================================================
11
+ # ENVIRONMENT CONFIGURATION
12
+ # ========================================================================
13
+ def _configure_environment():
14
+ """Set environment variables to suppress debug messages at the source."""
15
+ env_vars = {
16
+ # LiteLLM configuration
17
+ "LITELLM_TELEMETRY": "False",
18
+ "LITELLM_DROP_PARAMS": "True",
19
+ "LITELLM_LOG": "ERROR",
20
+ "LITELLM_DEBUG": "False",
21
+ "LITELLM_SUPPRESS_DEBUG_INFO": "True",
22
+ "LITELLM_VERBOSE": "False",
23
+ "LITELLM_SET_VERBOSE": "False",
24
+ # HTTPX configuration
25
+ "HTTPX_DISABLE_WARNINGS": "True",
26
+ "HTTPX_LOG_LEVEL": "ERROR",
27
+ # Pydantic configuration
28
+ "PYDANTIC_WARNINGS_ENABLED": "False",
29
+ }
30
+
31
+ for key, value in env_vars.items():
32
+ os.environ[key] = value
33
+
34
+
35
+ # ========================================================================
36
+ # LOGGER CONFIGURATION
37
+ # ========================================================================
38
+ def _get_all_noisy_loggers() -> List[str]:
39
+ """Get list of all loggers that should be suppressed."""
40
+ return [
41
+ # LiteLLM and variants
42
+ "litellm", "LiteLLM", "LiteLLM Router", "LiteLLM Proxy",
43
+ # HTTP libraries
44
+ "httpx", "httpx._trace", "httpx._client",
45
+ "httpcore", "httpcore._trace",
46
+ # OpenAI
47
+ "openai._base_client", "openai._client",
48
+ # Markdown
49
+ "markdown_it", "rich.markdown",
50
+ # System
51
+ "asyncio", "selector_events", "pydantic",
52
+ "praisonaiagents.telemetry.telemetry",
53
+ ]
54
+
55
+
56
+ def _configure_loggers():
57
+ """Configure all loggers based on LOGLEVEL environment variable."""
58
+ loglevel = os.environ.get('LOGLEVEL', 'INFO').upper()
59
+
60
+ # When DEBUG is set, allow some HTTP logging for API endpoints
61
+ if loglevel == 'DEBUG':
62
+ allowed_debug_loggers = {"httpx._client", "openai._client"}
63
+
64
+ for logger_name in _get_all_noisy_loggers():
65
+ if logger_name not in allowed_debug_loggers:
66
+ logger = logging.getLogger(logger_name)
67
+ logger.setLevel(logging.CRITICAL)
68
+ logger.handlers = []
69
+ logger.propagate = False
70
+
71
+ # Ensure allowed loggers are at INFO level to show API calls
72
+ for logger_name in allowed_debug_loggers:
73
+ logger = logging.getLogger(logger_name)
74
+ logger.setLevel(logging.INFO)
75
+ else:
76
+ # Suppress all noisy loggers when not in DEBUG mode
77
+ for logger_name in _get_all_noisy_loggers():
78
+ logger = logging.getLogger(logger_name)
79
+ logger.setLevel(logging.CRITICAL)
80
+ logger.handlers = []
81
+ logger.propagate = False
82
+
83
+
84
+ # ========================================================================
85
+ # LITELLM CONFIGURATION
86
+ # ========================================================================
87
+ def _configure_litellm():
88
+ """Configure litellm after it's imported."""
89
+ try:
90
+ import litellm
91
+ litellm.telemetry = False
92
+ litellm.drop_params = True
93
+ litellm.suppress_debug_info = True
94
+
95
+ if hasattr(litellm, '_logging_obj'):
96
+ litellm._logging_obj.setLevel(logging.CRITICAL)
97
+
98
+ if hasattr(litellm, 'set_verbose'):
99
+ litellm.set_verbose = False
100
+
101
+ except (ImportError, AttributeError):
102
+ pass
103
+
104
+
105
+ # ========================================================================
106
+ # ROOT LOGGER CONFIGURATION
107
+ # ========================================================================
108
+ def configure_root_logger():
109
+ """Configure the root logger with RichHandler."""
110
+ from rich.logging import RichHandler
111
+
112
+ loglevel = os.environ.get('LOGLEVEL', 'INFO').upper()
113
+
114
+ logging.basicConfig(
115
+ level=getattr(logging, loglevel, logging.INFO),
116
+ format="%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s",
117
+ datefmt="[%X]",
118
+ handlers=[RichHandler(rich_tracebacks=True)],
119
+ force=True
120
+ )
121
+
122
+
123
+ # ========================================================================
124
+ # INITIALIZATION
125
+ # ========================================================================
126
+ def initialize_logging():
127
+ """Initialize all logging configuration."""
128
+ _configure_environment()
129
+ _configure_loggers()
130
+ _configure_litellm()
131
+
132
+
133
+ # Auto-initialize on import
134
+ initialize_logging()
@@ -0,0 +1,73 @@
1
+ """
2
+ Minimal warning patch to suppress specific third-party warnings.
3
+ This module patches the warnings module to intercept specific messages.
4
+ """
5
+
6
+ import warnings
7
+ import functools
8
+ import sys
9
+
10
+ # Apply aggressive warning filters first
11
+ warnings.filterwarnings("ignore", message=".*Pydantic serializer warnings.*")
12
+ warnings.filterwarnings("ignore", message=".*PydanticSerializationUnexpectedValue.*")
13
+ warnings.filterwarnings("ignore", message=".*Expected 9 fields but got.*")
14
+ warnings.filterwarnings("ignore", message=".*Expected `StreamingChoices` but got.*")
15
+ warnings.filterwarnings("ignore", message=".*serialized value may not be as expected.*")
16
+ warnings.filterwarnings("ignore", message=".*Use 'content=<...>' to upload raw bytes/text content.*")
17
+ warnings.filterwarnings("ignore", message=".*The `dict` method is deprecated.*")
18
+ warnings.filterwarnings("ignore", category=UserWarning, module="pydantic.*")
19
+
20
+ # Store the original warn function
21
+ _original_warn = warnings.warn
22
+ _original_warn_explicit = warnings.warn_explicit
23
+
24
+ # Messages to suppress (partial matches)
25
+ SUPPRESSED_PATTERNS = [
26
+ "Use 'content=<...>' to upload raw bytes/text content",
27
+ "The `dict` method is deprecated; use `model_dump` instead",
28
+ "Pydantic serializer warnings",
29
+ "PydanticSerializationUnexpectedValue",
30
+ "Expected 9 fields but got 5 for type `Message`",
31
+ "Expected `StreamingChoices` but got `Choices`",
32
+ "serialized value may not be as expected"
33
+ ]
34
+
35
+ @functools.wraps(_original_warn)
36
+ def _patched_warn(message, category=None, stacklevel=1, source=None):
37
+ """Patched warn function that suppresses specific messages."""
38
+ msg_str = str(message)
39
+
40
+ for pattern in SUPPRESSED_PATTERNS:
41
+ if pattern in msg_str:
42
+ return
43
+
44
+ if category == UserWarning and "pydantic" in msg_str.lower():
45
+ return
46
+
47
+ _original_warn(message, category, stacklevel, source)
48
+
49
+ @functools.wraps(_original_warn_explicit)
50
+ def _patched_warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None, source=None):
51
+ """Patched warn_explicit function that suppresses specific messages."""
52
+ msg_str = str(message)
53
+
54
+ for pattern in SUPPRESSED_PATTERNS:
55
+ if pattern in msg_str:
56
+ return
57
+
58
+ if category == UserWarning and "pydantic" in msg_str.lower():
59
+ return
60
+
61
+ if module and "pydantic" in str(module):
62
+ return
63
+
64
+ _original_warn_explicit(message, category, filename, lineno, module, registry, module_globals, source)
65
+
66
+ # Apply the patches
67
+ warnings.warn = _patched_warn
68
+ warnings.warn_explicit = _patched_warn_explicit
69
+
70
+ # Also patch sys.modules warnings if it exists
71
+ if 'warnings' in sys.modules:
72
+ sys.modules['warnings'].warn = _patched_warn
73
+ sys.modules['warnings'].warn_explicit = _patched_warn_explicit