chuk-tool-processor 0.6.4__py3-none-any.whl → 0.9.7__py3-none-any.whl

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.

Potentially problematic release.


This version of chuk-tool-processor might be problematic. Click here for more details.

Files changed (66) hide show
  1. chuk_tool_processor/core/__init__.py +32 -1
  2. chuk_tool_processor/core/exceptions.py +225 -13
  3. chuk_tool_processor/core/processor.py +135 -104
  4. chuk_tool_processor/execution/strategies/__init__.py +6 -0
  5. chuk_tool_processor/execution/strategies/inprocess_strategy.py +142 -150
  6. chuk_tool_processor/execution/strategies/subprocess_strategy.py +202 -206
  7. chuk_tool_processor/execution/tool_executor.py +82 -84
  8. chuk_tool_processor/execution/wrappers/__init__.py +42 -0
  9. chuk_tool_processor/execution/wrappers/caching.py +150 -116
  10. chuk_tool_processor/execution/wrappers/circuit_breaker.py +370 -0
  11. chuk_tool_processor/execution/wrappers/rate_limiting.py +76 -43
  12. chuk_tool_processor/execution/wrappers/retry.py +116 -78
  13. chuk_tool_processor/logging/__init__.py +23 -17
  14. chuk_tool_processor/logging/context.py +40 -45
  15. chuk_tool_processor/logging/formatter.py +22 -21
  16. chuk_tool_processor/logging/helpers.py +28 -42
  17. chuk_tool_processor/logging/metrics.py +13 -15
  18. chuk_tool_processor/mcp/__init__.py +8 -12
  19. chuk_tool_processor/mcp/mcp_tool.py +158 -114
  20. chuk_tool_processor/mcp/register_mcp_tools.py +22 -22
  21. chuk_tool_processor/mcp/setup_mcp_http_streamable.py +57 -17
  22. chuk_tool_processor/mcp/setup_mcp_sse.py +57 -17
  23. chuk_tool_processor/mcp/setup_mcp_stdio.py +11 -11
  24. chuk_tool_processor/mcp/stream_manager.py +333 -276
  25. chuk_tool_processor/mcp/transport/__init__.py +22 -29
  26. chuk_tool_processor/mcp/transport/base_transport.py +180 -44
  27. chuk_tool_processor/mcp/transport/http_streamable_transport.py +505 -325
  28. chuk_tool_processor/mcp/transport/models.py +100 -0
  29. chuk_tool_processor/mcp/transport/sse_transport.py +607 -276
  30. chuk_tool_processor/mcp/transport/stdio_transport.py +597 -116
  31. chuk_tool_processor/models/__init__.py +21 -1
  32. chuk_tool_processor/models/execution_strategy.py +16 -21
  33. chuk_tool_processor/models/streaming_tool.py +28 -25
  34. chuk_tool_processor/models/tool_call.py +49 -31
  35. chuk_tool_processor/models/tool_export_mixin.py +22 -8
  36. chuk_tool_processor/models/tool_result.py +40 -77
  37. chuk_tool_processor/models/tool_spec.py +350 -0
  38. chuk_tool_processor/models/validated_tool.py +36 -18
  39. chuk_tool_processor/observability/__init__.py +30 -0
  40. chuk_tool_processor/observability/metrics.py +312 -0
  41. chuk_tool_processor/observability/setup.py +105 -0
  42. chuk_tool_processor/observability/tracing.py +345 -0
  43. chuk_tool_processor/plugins/__init__.py +1 -1
  44. chuk_tool_processor/plugins/discovery.py +11 -11
  45. chuk_tool_processor/plugins/parsers/__init__.py +1 -1
  46. chuk_tool_processor/plugins/parsers/base.py +1 -2
  47. chuk_tool_processor/plugins/parsers/function_call_tool.py +13 -8
  48. chuk_tool_processor/plugins/parsers/json_tool.py +4 -3
  49. chuk_tool_processor/plugins/parsers/openai_tool.py +12 -7
  50. chuk_tool_processor/plugins/parsers/xml_tool.py +4 -4
  51. chuk_tool_processor/registry/__init__.py +12 -12
  52. chuk_tool_processor/registry/auto_register.py +22 -30
  53. chuk_tool_processor/registry/decorators.py +127 -129
  54. chuk_tool_processor/registry/interface.py +26 -23
  55. chuk_tool_processor/registry/metadata.py +27 -22
  56. chuk_tool_processor/registry/provider.py +17 -18
  57. chuk_tool_processor/registry/providers/__init__.py +16 -19
  58. chuk_tool_processor/registry/providers/memory.py +18 -25
  59. chuk_tool_processor/registry/tool_export.py +42 -51
  60. chuk_tool_processor/utils/validation.py +15 -16
  61. chuk_tool_processor-0.9.7.dist-info/METADATA +1813 -0
  62. chuk_tool_processor-0.9.7.dist-info/RECORD +67 -0
  63. chuk_tool_processor-0.6.4.dist-info/METADATA +0 -697
  64. chuk_tool_processor-0.6.4.dist-info/RECORD +0 -60
  65. {chuk_tool_processor-0.6.4.dist-info → chuk_tool_processor-0.9.7.dist-info}/WHEEL +0 -0
  66. {chuk_tool_processor-0.6.4.dist-info → chuk_tool_processor-0.9.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,100 @@
1
+ # chuk_tool_processor/mcp/transport/models.py
2
+ """
3
+ Pydantic models for MCP transport configuration and metrics.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Any
9
+
10
+ from pydantic import BaseModel, Field
11
+
12
+
13
+ class TimeoutConfig(BaseModel):
14
+ """
15
+ Unified timeout configuration for all MCP operations.
16
+
17
+ Just 4 simple, logical timeout categories:
18
+ - connect: Connection establishment, initialization, session discovery (30s default)
19
+ - operation: Normal operations like tool calls, listing resources (30s default)
20
+ - quick: Fast health checks and pings (5s default)
21
+ - shutdown: Cleanup and shutdown operations (2s default)
22
+ """
23
+
24
+ connect: float = Field(
25
+ default=30.0, description="Timeout for connection establishment, initialization, and session discovery"
26
+ )
27
+ operation: float = Field(
28
+ default=30.0, description="Timeout for normal operations (tool calls, listing tools/resources/prompts)"
29
+ )
30
+ quick: float = Field(default=5.0, description="Timeout for quick health checks and pings")
31
+ shutdown: float = Field(default=2.0, description="Timeout for shutdown and cleanup operations")
32
+
33
+
34
+ class TransportMetrics(BaseModel):
35
+ """Performance and connection metrics for transports."""
36
+
37
+ model_config = {"validate_assignment": True}
38
+
39
+ total_calls: int = Field(default=0, description="Total number of calls made")
40
+ successful_calls: int = Field(default=0, description="Number of successful calls")
41
+ failed_calls: int = Field(default=0, description="Number of failed calls")
42
+ total_time: float = Field(default=0.0, description="Total time spent on calls")
43
+ avg_response_time: float = Field(default=0.0, description="Average response time")
44
+ last_ping_time: float | None = Field(default=None, description="Time taken for last ping")
45
+ initialization_time: float | None = Field(default=None, description="Time taken for initialization")
46
+ connection_resets: int = Field(default=0, description="Number of connection resets")
47
+ stream_errors: int = Field(default=0, description="Number of stream errors")
48
+ connection_errors: int = Field(default=0, description="Number of connection errors")
49
+ recovery_attempts: int = Field(default=0, description="Number of recovery attempts")
50
+ session_discoveries: int = Field(default=0, description="Number of session discoveries (SSE)")
51
+
52
+ def to_dict(self) -> dict[str, Any]:
53
+ """Convert to dictionary format."""
54
+ return self.model_dump()
55
+
56
+ def update_call_metrics(self, response_time: float, success: bool) -> None:
57
+ """Update metrics after a call."""
58
+ if success:
59
+ self.successful_calls += 1
60
+ else:
61
+ self.failed_calls += 1
62
+
63
+ self.total_time += response_time
64
+ if self.total_calls > 0:
65
+ self.avg_response_time = self.total_time / self.total_calls
66
+
67
+
68
+ class ServerInfo(BaseModel):
69
+ """Information about a server in StreamManager."""
70
+
71
+ id: int = Field(description="Server ID")
72
+ name: str = Field(description="Server name")
73
+ tools: int = Field(description="Number of tools available")
74
+ status: str = Field(description="Server status (Up/Down)")
75
+
76
+ def to_dict(self) -> dict[str, Any]:
77
+ """Convert to dictionary format."""
78
+ return self.model_dump()
79
+
80
+
81
+ class HeadersConfig(BaseModel):
82
+ """Configuration for HTTP headers."""
83
+
84
+ headers: dict[str, str] = Field(default_factory=dict, description="Custom HTTP headers")
85
+
86
+ def get_headers(self) -> dict[str, str]:
87
+ """Get headers as dict."""
88
+ return self.headers.copy()
89
+
90
+ def update_headers(self, new_headers: dict[str, str]) -> None:
91
+ """Update headers with new values."""
92
+ self.headers.update(new_headers)
93
+
94
+ def has_authorization(self) -> bool:
95
+ """Check if Authorization header is present."""
96
+ return "Authorization" in self.headers
97
+
98
+ def to_dict(self) -> dict[str, Any]:
99
+ """Convert to dictionary format."""
100
+ return self.model_dump()