praisonaiagents 0.0.83__tar.gz → 0.0.84__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 (51) hide show
  1. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/PKG-INFO +1 -1
  2. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/mcp/mcp.py +8 -7
  3. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/mcp/mcp_sse.py +9 -5
  4. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents.egg-info/PKG-INFO +1 -1
  5. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/pyproject.toml +1 -1
  6. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/README.md +0 -0
  7. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/__init__.py +0 -0
  8. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agent/__init__.py +0 -0
  9. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agent/agent.py +0 -0
  10. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agent/image_agent.py +0 -0
  11. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agents/__init__.py +0 -0
  12. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agents/agents.py +0 -0
  13. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/agents/autoagents.py +0 -0
  14. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/knowledge/__init__.py +0 -0
  15. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/knowledge/chunking.py +0 -0
  16. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/knowledge/knowledge.py +0 -0
  17. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/llm/__init__.py +0 -0
  18. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/llm/llm.py +0 -0
  19. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/main.py +0 -0
  20. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/mcp/__init__.py +0 -0
  21. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/memory/memory.py +0 -0
  22. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/process/__init__.py +0 -0
  23. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/process/process.py +0 -0
  24. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/task/__init__.py +0 -0
  25. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/task/task.py +0 -0
  26. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/__init__.py +0 -0
  27. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/arxiv_tools.py +0 -0
  28. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/calculator_tools.py +0 -0
  29. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/csv_tools.py +0 -0
  30. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/duckdb_tools.py +0 -0
  31. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/duckduckgo_tools.py +0 -0
  32. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/excel_tools.py +0 -0
  33. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/file_tools.py +0 -0
  34. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/json_tools.py +0 -0
  35. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/newspaper_tools.py +0 -0
  36. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/pandas_tools.py +0 -0
  37. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/python_tools.py +0 -0
  38. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/shell_tools.py +0 -0
  39. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/spider_tools.py +0 -0
  40. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/test.py +0 -0
  41. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/tools.py +0 -0
  42. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/train/data/generatecot.py +0 -0
  43. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/wikipedia_tools.py +0 -0
  44. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/xml_tools.py +0 -0
  45. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/yaml_tools.py +0 -0
  46. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents/tools/yfinance_tools.py +0 -0
  47. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents.egg-info/SOURCES.txt +0 -0
  48. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents.egg-info/dependency_links.txt +0 -0
  49. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents.egg-info/requires.txt +0 -0
  50. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/praisonaiagents.egg-info/top_level.txt +0 -0
  51. {praisonaiagents-0.0.83 → praisonaiagents-0.0.84}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praisonaiagents
3
- Version: 0.0.83
3
+ Version: 0.0.84
4
4
  Summary: Praison AI agents for completing complex tasks with Self Reflection Agents
5
5
  Author: Mervin Praison
6
6
  Requires-Dist: pydantic
@@ -16,13 +16,14 @@ from mcp.client.stdio import stdio_client
16
16
  class MCPToolRunner(threading.Thread):
17
17
  """A dedicated thread for running MCP operations."""
18
18
 
19
- def __init__(self, server_params):
19
+ def __init__(self, server_params, timeout=60):
20
20
  super().__init__(daemon=True)
21
21
  self.server_params = server_params
22
22
  self.queue = queue.Queue()
23
23
  self.result_queue = queue.Queue()
24
24
  self.initialized = threading.Event()
25
25
  self.tools = []
26
+ self.timeout = timeout
26
27
  self.start()
27
28
 
28
29
  def run(self):
@@ -74,9 +75,9 @@ class MCPToolRunner(threading.Thread):
74
75
  def call_tool(self, tool_name, arguments):
75
76
  """Call an MCP tool and wait for the result."""
76
77
  if not self.initialized.is_set():
77
- self.initialized.wait(timeout=30)
78
+ self.initialized.wait(timeout=self.timeout)
78
79
  if not self.initialized.is_set():
79
- return "Error: MCP initialization timed out"
80
+ return f"Error: MCP initialization timed out after {self.timeout} seconds"
80
81
 
81
82
  # Put request in queue
82
83
  self.queue.put((tool_name, arguments))
@@ -189,7 +190,7 @@ class MCP:
189
190
  if isinstance(command_or_string, str) and re.match(r'^https?://', command_or_string):
190
191
  # Import the SSE client implementation
191
192
  from .mcp_sse import SSEMCPClient
192
- self.sse_client = SSEMCPClient(command_or_string, debug=debug)
193
+ self.sse_client = SSEMCPClient(command_or_string, debug=debug, timeout=timeout)
193
194
  self._tools = list(self.sse_client.tools)
194
195
  self.is_sse = True
195
196
  self.is_npx = False
@@ -216,11 +217,11 @@ class MCP:
216
217
  args=arguments,
217
218
  **kwargs
218
219
  )
219
- self.runner = MCPToolRunner(self.server_params)
220
+ self.runner = MCPToolRunner(self.server_params, timeout)
220
221
 
221
222
  # Wait for initialization
222
- if not self.runner.initialized.wait(timeout=30):
223
- print("Warning: MCP initialization timed out")
223
+ if not self.runner.initialized.wait(timeout=self.timeout):
224
+ print(f"Warning: MCP initialization timed out after {self.timeout} seconds")
224
225
 
225
226
  # Automatically detect if this is an NPX command
226
227
  self.is_npx = cmd == 'npx' or (isinstance(cmd, str) and os.path.basename(cmd) == 'npx')
@@ -31,7 +31,7 @@ def get_event_loop():
31
31
  class SSEMCPTool:
32
32
  """A wrapper for an MCP tool that can be used with praisonaiagents."""
33
33
 
34
- def __init__(self, name: str, description: str, session: ClientSession, input_schema: Optional[Dict[str, Any]] = None):
34
+ def __init__(self, name: str, description: str, session: ClientSession, input_schema: Optional[Dict[str, Any]] = None, timeout: int = 60):
35
35
  self.name = name
36
36
  self.__name__ = name # Required for Agent to recognize it as a tool
37
37
  self.__qualname__ = name # Required for Agent to recognize it as a tool
@@ -39,6 +39,7 @@ class SSEMCPTool:
39
39
  self.description = description
40
40
  self.session = session
41
41
  self.input_schema = input_schema or {}
42
+ self.timeout = timeout
42
43
 
43
44
  # Create a signature based on input schema
44
45
  params = []
@@ -66,7 +67,7 @@ class SSEMCPTool:
66
67
  future = asyncio.run_coroutine_threadsafe(self._async_call(**kwargs), loop)
67
68
  try:
68
69
  # Wait for the result with a timeout
69
- return future.result(timeout=30)
70
+ return future.result(timeout=self.timeout)
70
71
  except Exception as e:
71
72
  logger.error(f"Error calling tool {self.name}: {e}")
72
73
  return f"Error: {str(e)}"
@@ -102,16 +103,18 @@ class SSEMCPTool:
102
103
  class SSEMCPClient:
103
104
  """A client for connecting to an MCP server over SSE."""
104
105
 
105
- def __init__(self, server_url: str, debug: bool = False):
106
+ def __init__(self, server_url: str, debug: bool = False, timeout: int = 60):
106
107
  """
107
108
  Initialize an SSE MCP client.
108
109
 
109
110
  Args:
110
111
  server_url: The URL of the SSE MCP server
111
112
  debug: Whether to enable debug logging
113
+ timeout: Timeout in seconds for operations (default: 60)
112
114
  """
113
115
  self.server_url = server_url
114
116
  self.debug = debug
117
+ self.timeout = timeout
115
118
  self.session = None
116
119
  self.tools = []
117
120
 
@@ -139,7 +142,7 @@ class SSEMCPClient:
139
142
 
140
143
  # Run the initialization in the event loop
141
144
  future = asyncio.run_coroutine_threadsafe(self._async_initialize(), loop)
142
- self.tools = future.result(timeout=30)
145
+ self.tools = future.result(timeout=self.timeout)
143
146
 
144
147
  async def _async_initialize(self):
145
148
  """Asynchronously initialize the connection and tools."""
@@ -169,7 +172,8 @@ class SSEMCPClient:
169
172
  name=tool.name,
170
173
  description=tool.description if hasattr(tool, 'description') else f"Call the {tool.name} tool",
171
174
  session=self.session,
172
- input_schema=input_schema
175
+ input_schema=input_schema,
176
+ timeout=self.timeout
173
177
  )
174
178
  tools.append(wrapper)
175
179
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praisonaiagents
3
- Version: 0.0.83
3
+ Version: 0.0.84
4
4
  Summary: Praison AI agents for completing complex tasks with Self Reflection Agents
5
5
  Author: Mervin Praison
6
6
  Requires-Dist: pydantic
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "praisonaiagents"
7
- version = "0.0.83"
7
+ version = "0.0.84"
8
8
  description = "Praison AI agents for completing complex tasks with Self Reflection Agents"
9
9
  authors = [
10
10
  { name="Mervin Praison" }