chuk-tool-processor 0.22.1__tar.gz → 0.22.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 (127) hide show
  1. {chuk_tool_processor-0.22.1/src/chuk_tool_processor.egg-info → chuk_tool_processor-0.22.2}/PKG-INFO +4 -5
  2. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/pyproject.toml +5 -6
  3. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/processor.py +7 -5
  4. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/inprocess_strategy.py +5 -5
  5. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/mcp_tool.py +2 -4
  6. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/register_mcp_tools.py +1 -1
  7. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/metadata.py +1 -7
  8. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2/src/chuk_tool_processor.egg-info}/PKG-INFO +4 -5
  9. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/requires.txt +3 -4
  10. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/LICENSE +0 -0
  11. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/README.md +0 -0
  12. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/setup.cfg +0 -0
  13. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/__init__.py +0 -0
  14. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/config.py +0 -0
  15. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/__init__.py +0 -0
  16. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/context.py +0 -0
  17. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/exceptions.py +0 -0
  18. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/__init__.py +0 -0
  19. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/dynamic_provider.py +0 -0
  20. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/search.py +0 -0
  21. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/searchable.py +0 -0
  22. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/synonyms.py +0 -0
  23. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/__init__.py +0 -0
  24. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/bulkhead.py +0 -0
  25. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/code_sandbox.py +0 -0
  26. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/__init__.py +0 -0
  27. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/subprocess_strategy.py +0 -0
  28. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/tool_executor.py +0 -0
  29. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/__init__.py +0 -0
  30. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/caching.py +0 -0
  31. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/circuit_breaker.py +0 -0
  32. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/factory.py +0 -0
  33. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/observable.py +0 -0
  34. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/rate_limiting.py +0 -0
  35. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/redis_circuit_breaker.py +0 -0
  36. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/redis_rate_limiting.py +0 -0
  37. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/retry.py +0 -0
  38. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/__init__.py +0 -0
  39. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/assumption_trace.py +0 -0
  40. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/base.py +0 -0
  41. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/budget.py +0 -0
  42. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/chain.py +0 -0
  43. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/concurrency.py +0 -0
  44. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/contract_guard.py +0 -0
  45. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/models.py +0 -0
  46. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/network_policy.py +0 -0
  47. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/output_size.py +0 -0
  48. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/per_tool.py +0 -0
  49. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/plan_shape.py +0 -0
  50. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/precondition.py +0 -0
  51. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/provenance.py +0 -0
  52. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/retry_safety.py +0 -0
  53. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/runaway.py +0 -0
  54. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/saturation.py +0 -0
  55. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/schema_strictness.py +0 -0
  56. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/sensitive_data.py +0 -0
  57. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/side_effect.py +0 -0
  58. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/timeout_budget.py +0 -0
  59. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/unresolved.py +0 -0
  60. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/__init__.py +0 -0
  61. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/context.py +0 -0
  62. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/formatter.py +0 -0
  63. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/helpers.py +0 -0
  64. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/metrics.py +0 -0
  65. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/__init__.py +0 -0
  66. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/middleware.py +0 -0
  67. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/models.py +0 -0
  68. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_http_streamable.py +0 -0
  69. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_sse.py +0 -0
  70. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_stdio.py +0 -0
  71. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/stream_manager.py +0 -0
  72. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/__init__.py +0 -0
  73. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/base_transport.py +0 -0
  74. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/http_streamable_transport.py +0 -0
  75. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/models.py +0 -0
  76. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/sse_transport.py +0 -0
  77. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/stdio_transport.py +0 -0
  78. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/__init__.py +0 -0
  79. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_span.py +0 -0
  80. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_strategy.py +0 -0
  81. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_trace.py +0 -0
  82. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/return_order.py +0 -0
  83. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/sandbox_policy.py +0 -0
  84. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/streaming_tool.py +0 -0
  85. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_call.py +0 -0
  86. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_contract.py +0 -0
  87. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_export_mixin.py +0 -0
  88. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_result.py +0 -0
  89. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_spec.py +0 -0
  90. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/validated_tool.py +0 -0
  91. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/__init__.py +0 -0
  92. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/metrics.py +0 -0
  93. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/setup.py +0 -0
  94. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/trace_sink.py +0 -0
  95. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/tracing.py +0 -0
  96. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/__init__.py +0 -0
  97. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/discovery.py +0 -0
  98. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/__init__.py +0 -0
  99. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/base.py +0 -0
  100. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/function_call_tool.py +0 -0
  101. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/json_tool.py +0 -0
  102. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/openai_tool.py +0 -0
  103. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/xml_tool.py +0 -0
  104. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/py.typed +0 -0
  105. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/__init__.py +0 -0
  106. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/auto_register.py +0 -0
  107. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/decorators.py +0 -0
  108. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/interface.py +0 -0
  109. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/provider.py +0 -0
  110. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/__init__.py +0 -0
  111. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/memory.py +0 -0
  112. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/redis.py +0 -0
  113. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/tool_export.py +0 -0
  114. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/__init__.py +0 -0
  115. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/greedy_dag.py +0 -0
  116. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/policy.py +0 -0
  117. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/types.py +0 -0
  118. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/__init__.py +0 -0
  119. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/fast_json.py +0 -0
  120. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/validation.py +0 -0
  121. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/SOURCES.txt +0 -0
  122. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/dependency_links.txt +0 -0
  123. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/top_level.txt +0 -0
  124. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/tests/test_bulkhead.py +0 -0
  125. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/tests/test_config_coverage.py +0 -0
  126. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/tests/test_execution_context.py +0 -0
  127. {chuk_tool_processor-0.22.1 → chuk_tool_processor-0.22.2}/tests/test_scoped_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chuk-tool-processor
3
- Version: 0.22.1
3
+ Version: 0.22.2
4
4
  Summary: Async-native framework for registering, discovering, and executing tools referenced in LLM responses
5
5
  License: Apache-2.0
6
6
  Keywords: llm,tools,async,ai,openai,mcp,model-context-protocol,tool-calling,function-calling
@@ -20,19 +20,18 @@ Requires-Python: >=3.11
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: chuk-mcp>=0.9
23
- Requires-Dist: dotenv>=0.9.9
23
+ Requires-Dist: python-dotenv>=1.0.0
24
24
  Requires-Dist: psutil>=7.0.0
25
25
  Requires-Dist: pydantic>=2.11.3
26
- Requires-Dist: uuid>=1.30
27
26
  Provides-Extra: fast-json
28
27
  Requires-Dist: orjson<4,>=3.10.0; extra == "fast-json"
29
28
  Provides-Extra: redis
30
- Requires-Dist: redis[hiredis]<6,>=5.0.0; extra == "redis"
29
+ Requires-Dist: redis[hiredis]<8,>=7.2; extra == "redis"
31
30
  Provides-Extra: full
32
31
  Requires-Dist: orjson<4,>=3.10.0; extra == "full"
33
32
  Provides-Extra: all
34
33
  Requires-Dist: orjson<4,>=3.10.0; extra == "all"
35
- Requires-Dist: redis[hiredis]<6,>=5.0.0; extra == "all"
34
+ Requires-Dist: redis[hiredis]<8,>=7.2; extra == "all"
36
35
  Dynamic: license-file
37
36
 
38
37
  # CHUK Tool Processor — A Tool Execution Runtime for AI Systems
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "chuk-tool-processor"
7
- version = "0.22.1"
7
+ version = "0.22.2"
8
8
  description = "Async-native framework for registering, discovering, and executing tools referenced in LLM responses"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -36,10 +36,9 @@ classifiers = [
36
36
  ]
37
37
  dependencies = [
38
38
  "chuk-mcp>=0.9",
39
- "dotenv>=0.9.9",
39
+ "python-dotenv>=1.0.0",
40
40
  "psutil>=7.0.0",
41
41
  "pydantic>=2.11.3",
42
- "uuid>=1.30",
43
42
  ]
44
43
 
45
44
  # Optional dependency groups
@@ -51,7 +50,7 @@ fast-json = [
51
50
 
52
51
  # Redis registry for distributed deployments
53
52
  redis = [
54
- "redis[hiredis]>=5.0.0,<6",
53
+ "redis[hiredis]>=7.2,<8",
55
54
  ]
56
55
 
57
56
  # Full feature set with performance optimizations
@@ -62,7 +61,7 @@ full = [
62
61
  # All extras combined
63
62
  all = [
64
63
  "orjson>=3.10.0,<4",
65
- "redis[hiredis]>=5.0.0,<6",
64
+ "redis[hiredis]>=7.2,<8",
66
65
  ]
67
66
 
68
67
  # Tell setuptools to look in src/ for your a2a package
@@ -106,7 +105,7 @@ dev = [
106
105
  "pre-commit>=3.8.0",
107
106
  "coverage[toml]>=7.6.0",
108
107
  "orjson>=3.10.0",
109
- "redis[hiredis]>=5.0.0,<6",
108
+ "redis[hiredis]>=7.2,<8",
110
109
  "fakeredis[lua]>=2.32.1",
111
110
  ]
112
111
 
@@ -500,9 +500,10 @@ class ToolProcessor:
500
500
 
501
501
  # Execute tool calls
502
502
  async with log_context_span("tool_execution", {"num_calls": len(calls)}):
503
- # Assert that initialization completed successfully
504
- assert self.registry is not None, "Registry must be initialized"
505
- assert self.executor is not None, "Executor must be initialized"
503
+ if self.registry is None:
504
+ raise RuntimeError("Registry not initialized. Call initialize() first.")
505
+ if self.executor is None:
506
+ raise RuntimeError("Executor not initialized. Call initialize() first.")
506
507
 
507
508
  # Check if any tools are unknown - search across all namespaces
508
509
  unknown_tools = []
@@ -518,7 +519,8 @@ class ToolProcessor:
518
519
 
519
520
  # Execute tools (with context scope if provided)
520
521
  async def _execute_with_context() -> list[ToolResult]:
521
- assert self.executor is not None
522
+ if self.executor is None:
523
+ raise RuntimeError("Executor not initialized. Call initialize() first.")
522
524
  # If return_order is specified and strategy supports it, call run() directly
523
525
  # This bypasses the wrapper chain but preserves return_order semantics
524
526
  if return_order is not None and self.strategy is not None and hasattr(self.strategy, "run"):
@@ -645,7 +647,7 @@ class ToolProcessor:
645
647
  results = await self.executor.execute(
646
648
  calls=calls,
647
649
  timeout=timeout,
648
- use_cache=use_cache if hasattr(self.executor, "use_cache") else True,
650
+ use_cache=use_cache,
649
651
  )
650
652
 
651
653
  # Ensure we always return a list (never None)
@@ -749,12 +749,12 @@ class InProcessStrategy(ExecutionStrategy):
749
749
  all_tools = await self.registry.list_tools()
750
750
 
751
751
  # Look for exact matches in tool name (ignoring namespace)
752
- for namespace, registered_name in all_tools:
753
- if registered_name == tool_name:
754
- logger.debug(f"Fuzzy match: found '{registered_name}' in namespace '{namespace}'")
755
- tool = await self.registry.get_tool(registered_name, namespace)
752
+ for tool_info in all_tools:
753
+ if tool_info.name == tool_name:
754
+ logger.debug(f"Fuzzy match: found '{tool_info.name}' in namespace '{tool_info.namespace}'")
755
+ tool = await self.registry.get_tool(tool_info.name, tool_info.namespace)
756
756
  if tool is not None:
757
- return tool, namespace
757
+ return tool, tool_info.namespace
758
758
 
759
759
  # Log all available tools for debugging
760
760
  logger.debug(f"Available tools: {all_tools}")
@@ -327,10 +327,8 @@ class MCPTool:
327
327
  )
328
328
  return True
329
329
 
330
- # Fallback - try very quick operation with short timeout
331
- server_info: list[dict[str, Any]] = await asyncio.wait_for( # type: ignore[arg-type]
332
- self._sm.get_server_info(), timeout=1.0
333
- )
330
+ # Fallback - check server_info synchronously (get_server_info is not a coroutine)
331
+ server_info: list[dict[str, Any]] = self._sm.get_server_info()
334
332
  healthy = len(server_info) > 0
335
333
  logger.debug(f"StreamManager health for '{self.tool_name}': {healthy} (via server_info)")
336
334
  return healthy
@@ -187,7 +187,7 @@ async def update_mcp_tools_stream_manager(
187
187
  try:
188
188
  # List all tools in the namespace
189
189
  all_tools = await registry.list_tools()
190
- namespace_tools = [name for ns, name in all_tools if ns == namespace]
190
+ namespace_tools = [tool_info.name for tool_info in all_tools if tool_info.namespace == namespace]
191
191
 
192
192
  for tool_name in namespace_tools:
193
193
  try:
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  from datetime import UTC, datetime
9
9
  from typing import Any
10
10
 
11
- from pydantic import BaseModel, Field, model_validator
11
+ from pydantic import BaseModel, Field
12
12
 
13
13
 
14
14
  class MCPToolFactoryParams(BaseModel):
@@ -109,12 +109,6 @@ class ToolMetadata(BaseModel):
109
109
  None, description="Factory parameters for creating deferred MCP tools"
110
110
  )
111
111
 
112
- @model_validator(mode="after")
113
- def ensure_async(self) -> ToolMetadata:
114
- """Ensure all tools are marked as async in the async-native architecture."""
115
- self.is_async = True
116
- return self
117
-
118
112
  def with_updated_timestamp(self) -> ToolMetadata:
119
113
  """Create a copy with updated timestamp."""
120
114
  return self.model_copy(update={"updated_at": datetime.now(UTC)})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chuk-tool-processor
3
- Version: 0.22.1
3
+ Version: 0.22.2
4
4
  Summary: Async-native framework for registering, discovering, and executing tools referenced in LLM responses
5
5
  License: Apache-2.0
6
6
  Keywords: llm,tools,async,ai,openai,mcp,model-context-protocol,tool-calling,function-calling
@@ -20,19 +20,18 @@ Requires-Python: >=3.11
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: chuk-mcp>=0.9
23
- Requires-Dist: dotenv>=0.9.9
23
+ Requires-Dist: python-dotenv>=1.0.0
24
24
  Requires-Dist: psutil>=7.0.0
25
25
  Requires-Dist: pydantic>=2.11.3
26
- Requires-Dist: uuid>=1.30
27
26
  Provides-Extra: fast-json
28
27
  Requires-Dist: orjson<4,>=3.10.0; extra == "fast-json"
29
28
  Provides-Extra: redis
30
- Requires-Dist: redis[hiredis]<6,>=5.0.0; extra == "redis"
29
+ Requires-Dist: redis[hiredis]<8,>=7.2; extra == "redis"
31
30
  Provides-Extra: full
32
31
  Requires-Dist: orjson<4,>=3.10.0; extra == "full"
33
32
  Provides-Extra: all
34
33
  Requires-Dist: orjson<4,>=3.10.0; extra == "all"
35
- Requires-Dist: redis[hiredis]<6,>=5.0.0; extra == "all"
34
+ Requires-Dist: redis[hiredis]<8,>=7.2; extra == "all"
36
35
  Dynamic: license-file
37
36
 
38
37
  # CHUK Tool Processor — A Tool Execution Runtime for AI Systems
@@ -1,12 +1,11 @@
1
1
  chuk-mcp>=0.9
2
- dotenv>=0.9.9
2
+ python-dotenv>=1.0.0
3
3
  psutil>=7.0.0
4
4
  pydantic>=2.11.3
5
- uuid>=1.30
6
5
 
7
6
  [all]
8
7
  orjson<4,>=3.10.0
9
- redis[hiredis]<6,>=5.0.0
8
+ redis[hiredis]<8,>=7.2
10
9
 
11
10
  [fast-json]
12
11
  orjson<4,>=3.10.0
@@ -15,4 +14,4 @@ orjson<4,>=3.10.0
15
14
  orjson<4,>=3.10.0
16
15
 
17
16
  [redis]
18
- redis[hiredis]<6,>=5.0.0
17
+ redis[hiredis]<8,>=7.2