chuk-tool-processor 0.22__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.
- {chuk_tool_processor-0.22/src/chuk_tool_processor.egg-info → chuk_tool_processor-0.22.2}/PKG-INFO +5 -6
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/README.md +1 -1
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/pyproject.toml +13 -6
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/processor.py +11 -8
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/inprocess_strategy.py +5 -5
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/context.py +1 -1
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/mcp_tool.py +2 -4
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/register_mcp_tools.py +1 -1
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/metadata.py +9 -11
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2/src/chuk_tool_processor.egg-info}/PKG-INFO +5 -6
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/requires.txt +3 -4
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/LICENSE +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/setup.cfg +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/config.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/context.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/exceptions.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/dynamic_provider.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/search.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/searchable.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/synonyms.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/bulkhead.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/code_sandbox.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/strategies/subprocess_strategy.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/tool_executor.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/caching.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/circuit_breaker.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/factory.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/observable.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/rate_limiting.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/redis_circuit_breaker.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/redis_rate_limiting.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/execution/wrappers/retry.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/assumption_trace.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/base.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/budget.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/chain.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/concurrency.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/contract_guard.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/models.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/network_policy.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/output_size.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/per_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/plan_shape.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/precondition.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/provenance.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/retry_safety.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/runaway.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/saturation.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/schema_strictness.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/sensitive_data.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/side_effect.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/timeout_budget.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/unresolved.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/formatter.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/helpers.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/metrics.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/middleware.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/models.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_http_streamable.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_sse.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_stdio.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/stream_manager.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/base_transport.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/http_streamable_transport.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/models.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/sse_transport.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/transport/stdio_transport.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_span.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_strategy.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/execution_trace.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/return_order.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/sandbox_policy.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/streaming_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_call.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_contract.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_export_mixin.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_result.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_spec.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/validated_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/metrics.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/setup.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/trace_sink.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/observability/tracing.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/discovery.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/base.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/function_call_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/json_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/openai_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/parsers/xml_tool.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/py.typed +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/auto_register.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/decorators.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/interface.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/provider.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/memory.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/providers/redis.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/tool_export.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/greedy_dag.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/policy.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/types.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/__init__.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/fast_json.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/validation.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/SOURCES.txt +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/dependency_links.txt +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/top_level.txt +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/tests/test_bulkhead.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/tests/test_config_coverage.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/tests/test_execution_context.py +0 -0
- {chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/tests/test_scoped_registry.py +0 -0
{chuk_tool_processor-0.22/src/chuk_tool_processor.egg-info → chuk_tool_processor-0.22.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chuk-tool-processor
|
|
3
|
-
Version: 0.22
|
|
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.
|
|
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]<
|
|
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]<
|
|
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
|
|
@@ -655,7 +654,7 @@ python examples/04_mcp_integration/notion_oauth.py
|
|
|
655
654
|
python examples/04_mcp_integration/middleware_demo.py
|
|
656
655
|
```
|
|
657
656
|
|
|
658
|
-
See [examples/](examples/) for
|
|
657
|
+
See [examples/](examples/) for 45+ working examples.
|
|
659
658
|
|
|
660
659
|
---
|
|
661
660
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "chuk-tool-processor"
|
|
7
|
-
version = "0.22"
|
|
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.
|
|
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]>=
|
|
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]>=
|
|
64
|
+
"redis[hiredis]>=7.2,<8",
|
|
66
65
|
]
|
|
67
66
|
|
|
68
67
|
# Tell setuptools to look in src/ for your a2a package
|
|
@@ -82,6 +81,14 @@ addopts = "-v --cov=src --cov-report=term --cov-report=xml --cov-report=html"
|
|
|
82
81
|
asyncio_default_fixture_loop_scope = "function"
|
|
83
82
|
asyncio_mode = "strict"
|
|
84
83
|
minversion = "8.0"
|
|
84
|
+
filterwarnings = [
|
|
85
|
+
# Pydantic V1 compat warning from LangChain (third-party, can't fix)
|
|
86
|
+
"ignore::pydantic.warnings.PydanticDeprecatedSince20",
|
|
87
|
+
# RuntimeWarning from mock coroutines never awaited in tests
|
|
88
|
+
"ignore:coroutine .* was never awaited:RuntimeWarning",
|
|
89
|
+
# PytestCollectionWarning for test helper classes with __init__
|
|
90
|
+
"ignore::pytest.PytestCollectionWarning",
|
|
91
|
+
]
|
|
85
92
|
|
|
86
93
|
[dependency-groups]
|
|
87
94
|
dev = [
|
|
@@ -98,7 +105,7 @@ dev = [
|
|
|
98
105
|
"pre-commit>=3.8.0",
|
|
99
106
|
"coverage[toml]>=7.6.0",
|
|
100
107
|
"orjson>=3.10.0",
|
|
101
|
-
"redis[hiredis]>=
|
|
108
|
+
"redis[hiredis]>=7.2,<8",
|
|
102
109
|
"fakeredis[lua]>=2.32.1",
|
|
103
110
|
]
|
|
104
111
|
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/processor.py
RENAMED
|
@@ -12,6 +12,7 @@ from __future__ import annotations
|
|
|
12
12
|
|
|
13
13
|
import asyncio
|
|
14
14
|
import hashlib
|
|
15
|
+
import inspect
|
|
15
16
|
import json as stdlib_json # Use stdlib json for consistent hashing
|
|
16
17
|
import time
|
|
17
18
|
from typing import Any
|
|
@@ -499,9 +500,10 @@ class ToolProcessor:
|
|
|
499
500
|
|
|
500
501
|
# Execute tool calls
|
|
501
502
|
async with log_context_span("tool_execution", {"num_calls": len(calls)}):
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
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.")
|
|
505
507
|
|
|
506
508
|
# Check if any tools are unknown - search across all namespaces
|
|
507
509
|
unknown_tools = []
|
|
@@ -517,7 +519,8 @@ class ToolProcessor:
|
|
|
517
519
|
|
|
518
520
|
# Execute tools (with context scope if provided)
|
|
519
521
|
async def _execute_with_context() -> list[ToolResult]:
|
|
520
|
-
|
|
522
|
+
if self.executor is None:
|
|
523
|
+
raise RuntimeError("Executor not initialized. Call initialize() first.")
|
|
521
524
|
# If return_order is specified and strategy supports it, call run() directly
|
|
522
525
|
# This bypasses the wrapper chain but preserves return_order semantics
|
|
523
526
|
if return_order is not None and self.strategy is not None and hasattr(self.strategy, "run"):
|
|
@@ -644,7 +647,7 @@ class ToolProcessor:
|
|
|
644
647
|
results = await self.executor.execute(
|
|
645
648
|
calls=calls,
|
|
646
649
|
timeout=timeout,
|
|
647
|
-
use_cache=use_cache
|
|
650
|
+
use_cache=use_cache,
|
|
648
651
|
)
|
|
649
652
|
|
|
650
653
|
# Ensure we always return a list (never None)
|
|
@@ -863,7 +866,7 @@ class ToolProcessor:
|
|
|
863
866
|
# Close the executor if it has a close method
|
|
864
867
|
if self.executor and hasattr(self.executor, "close"):
|
|
865
868
|
close_method = self.executor.close
|
|
866
|
-
if
|
|
869
|
+
if inspect.iscoroutinefunction(close_method):
|
|
867
870
|
await close_method()
|
|
868
871
|
elif callable(close_method):
|
|
869
872
|
close_method()
|
|
@@ -871,7 +874,7 @@ class ToolProcessor:
|
|
|
871
874
|
# Close the strategy if it has a close method
|
|
872
875
|
if self.strategy and hasattr(self.strategy, "close"):
|
|
873
876
|
close_method = self.strategy.close
|
|
874
|
-
if
|
|
877
|
+
if inspect.iscoroutinefunction(close_method):
|
|
875
878
|
await close_method()
|
|
876
879
|
elif callable(close_method):
|
|
877
880
|
result = close_method()
|
|
@@ -887,7 +890,7 @@ class ToolProcessor:
|
|
|
887
890
|
if isinstance(current, CachingToolExecutor):
|
|
888
891
|
if hasattr(current.cache, "clear"):
|
|
889
892
|
clear_method = current.cache.clear
|
|
890
|
-
if
|
|
893
|
+
if inspect.iscoroutinefunction(clear_method):
|
|
891
894
|
await clear_method()
|
|
892
895
|
else:
|
|
893
896
|
clear_result = clear_method()
|
|
@@ -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
|
|
753
|
-
if
|
|
754
|
-
logger.debug(f"Fuzzy match: found '{
|
|
755
|
-
tool = await self.registry.get_tool(
|
|
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}")
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/context.py
RENAMED
|
@@ -149,7 +149,7 @@ class AsyncContextManagerWrapper(contextlib.AbstractAsyncContextManager):
|
|
|
149
149
|
else:
|
|
150
150
|
# Propagate the exception into the generator
|
|
151
151
|
try:
|
|
152
|
-
await self._gen.athrow(
|
|
152
|
+
await self._gen.athrow(exc_val)
|
|
153
153
|
except StopAsyncIteration:
|
|
154
154
|
return False
|
|
155
155
|
# If the generator swallowed the exception, suppress it;
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/mcp_tool.py
RENAMED
|
@@ -327,10 +327,8 @@ class MCPTool:
|
|
|
327
327
|
)
|
|
328
328
|
return True
|
|
329
329
|
|
|
330
|
-
# Fallback -
|
|
331
|
-
server_info: list[dict[str, Any]] =
|
|
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
|
|
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:
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/metadata.py
RENAMED
|
@@ -5,10 +5,10 @@ Tool metadata models for the registry with async-native support.
|
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
from datetime import datetime
|
|
8
|
+
from datetime import UTC, datetime
|
|
9
9
|
from typing import Any
|
|
10
10
|
|
|
11
|
-
from pydantic import BaseModel, Field
|
|
11
|
+
from pydantic import BaseModel, Field
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class MCPToolFactoryParams(BaseModel):
|
|
@@ -83,8 +83,12 @@ class ToolMetadata(BaseModel):
|
|
|
83
83
|
result_schema: dict[str, Any] | None = Field(None, description="Schema for the tool's result")
|
|
84
84
|
requires_auth: bool = Field(False, description="Whether the tool requires authentication")
|
|
85
85
|
tags: set[str] = Field(default_factory=set, description="Tags associated with the tool")
|
|
86
|
-
created_at: datetime = Field(
|
|
87
|
-
|
|
86
|
+
created_at: datetime = Field(
|
|
87
|
+
default_factory=lambda: datetime.now(UTC), description="When the tool was first registered"
|
|
88
|
+
)
|
|
89
|
+
updated_at: datetime = Field(
|
|
90
|
+
default_factory=lambda: datetime.now(UTC), description="When the tool was last updated"
|
|
91
|
+
)
|
|
88
92
|
source: str | None = Field(None, description="Source of the tool (e.g., 'function', 'class', 'langchain')")
|
|
89
93
|
source_name: str | None = Field(None, description="Source identifier (e.g., function name, class name)")
|
|
90
94
|
concurrency_limit: int | None = Field(None, description="Maximum concurrent executions (None = unlimited)")
|
|
@@ -105,15 +109,9 @@ class ToolMetadata(BaseModel):
|
|
|
105
109
|
None, description="Factory parameters for creating deferred MCP tools"
|
|
106
110
|
)
|
|
107
111
|
|
|
108
|
-
@model_validator(mode="after")
|
|
109
|
-
def ensure_async(self) -> ToolMetadata:
|
|
110
|
-
"""Ensure all tools are marked as async in the async-native architecture."""
|
|
111
|
-
self.is_async = True
|
|
112
|
-
return self
|
|
113
|
-
|
|
114
112
|
def with_updated_timestamp(self) -> ToolMetadata:
|
|
115
113
|
"""Create a copy with updated timestamp."""
|
|
116
|
-
return self.model_copy(update={"updated_at": datetime.
|
|
114
|
+
return self.model_copy(update={"updated_at": datetime.now(UTC)})
|
|
117
115
|
|
|
118
116
|
def __str__(self) -> str:
|
|
119
117
|
"""String representation of the tool metadata."""
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2/src/chuk_tool_processor.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chuk-tool-processor
|
|
3
|
-
Version: 0.22
|
|
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.
|
|
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]<
|
|
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]<
|
|
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
|
|
@@ -655,7 +654,7 @@ python examples/04_mcp_integration/notion_oauth.py
|
|
|
655
654
|
python examples/04_mcp_integration/middleware_demo.py
|
|
656
655
|
```
|
|
657
656
|
|
|
658
|
-
See [examples/](examples/) for
|
|
657
|
+
See [examples/](examples/) for 45+ working examples.
|
|
659
658
|
|
|
660
659
|
---
|
|
661
660
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
chuk-mcp>=0.9
|
|
2
|
-
dotenv>=0.
|
|
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]<
|
|
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]<
|
|
17
|
+
redis[hiredis]<8,>=7.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/context.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/core/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/discovery/search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/base.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/budget.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/chain.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/per_tool.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/plan_shape.py
RENAMED
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/provenance.py
RENAMED
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/runaway.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/saturation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/guards/unresolved.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/formatter.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/helpers.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/logging/metrics.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/middleware.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/models.py
RENAMED
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/mcp/setup_mcp_sse.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_call.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/models/tool_spec.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/plugins/discovery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/registry/provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/policy.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/scheduling/types.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/fast_json.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor/utils/validation.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.22 → chuk_tool_processor-0.22.2}/src/chuk_tool_processor.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|