chuk-tool-processor 0.6.24__tar.gz → 0.6.26__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.
Potentially problematic release.
This version of chuk-tool-processor might be problematic. Click here for more details.
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/PKG-INFO +1 -1
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/pyproject.toml +1 -1
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/processor.py +5 -3
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/metrics.py +2 -2
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/transport/stdio_transport.py +35 -4
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor.egg-info/PKG-INFO +1 -1
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/README.md +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/setup.cfg +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/exceptions.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/strategies/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/strategies/inprocess_strategy.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/strategies/subprocess_strategy.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/tool_executor.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/wrappers/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/wrappers/caching.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/wrappers/rate_limiting.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/execution/wrappers/retry.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/context.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/formatter.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/helpers.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/mcp_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/register_mcp_tools.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/setup_mcp_http_streamable.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/setup_mcp_sse.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/setup_mcp_stdio.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/stream_manager.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/transport/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/transport/base_transport.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/transport/http_streamable_transport.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/transport/sse_transport.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/execution_strategy.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/streaming_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/tool_call.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/tool_export_mixin.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/tool_result.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/models/validated_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/discovery.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/base.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/function_call_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/json_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/openai_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/plugins/parsers/xml_tool.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/auto_register.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/decorators.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/interface.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/metadata.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/provider.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/providers/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/providers/memory.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/registry/tool_export.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/utils/__init__.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/utils/validation.py +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor.egg-info/SOURCES.txt +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor.egg-info/dependency_links.txt +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor.egg-info/requires.txt +0 -0
- {chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chuk-tool-processor
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.26
|
|
4
4
|
Summary: Async-native framework for registering, discovering, and executing tools referenced in LLM responses
|
|
5
5
|
Author-email: CHUK Team <chrishayuk@somejunkmailbox.com>
|
|
6
6
|
Maintainer-email: CHUK Team <chrishayuk@somejunkmailbox.com>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "chuk-tool-processor"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.26"
|
|
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"
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/processor.py
RENAMED
|
@@ -250,11 +250,13 @@ class ToolProcessor:
|
|
|
250
250
|
|
|
251
251
|
# Execute tool calls
|
|
252
252
|
async with log_context_span("tool_execution", {"num_calls": len(calls)}):
|
|
253
|
-
# Check if any tools are unknown
|
|
253
|
+
# Check if any tools are unknown - search across all namespaces
|
|
254
254
|
unknown_tools = []
|
|
255
|
+
all_tools = await self.registry.list_tools() # Returns list of (namespace, name) tuples
|
|
256
|
+
tool_names_in_registry = {name for ns, name in all_tools}
|
|
257
|
+
|
|
255
258
|
for call in calls:
|
|
256
|
-
tool
|
|
257
|
-
if not tool:
|
|
259
|
+
if call.tool not in tool_names_in_registry:
|
|
258
260
|
unknown_tools.append(call.tool)
|
|
259
261
|
|
|
260
262
|
if unknown_tools:
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/metrics.py
RENAMED
|
@@ -45,7 +45,7 @@ class MetricsLogger:
|
|
|
45
45
|
cached: Whether the result was retrieved from cache
|
|
46
46
|
attempts: Number of execution attempts
|
|
47
47
|
"""
|
|
48
|
-
self.logger.
|
|
48
|
+
self.logger.debug(
|
|
49
49
|
f"Tool execution metric: {tool}",
|
|
50
50
|
extra={
|
|
51
51
|
"context": {
|
|
@@ -76,7 +76,7 @@ class MetricsLogger:
|
|
|
76
76
|
duration: Parsing duration in seconds
|
|
77
77
|
num_calls: Number of tool calls parsed
|
|
78
78
|
"""
|
|
79
|
-
self.logger.
|
|
79
|
+
self.logger.debug(
|
|
80
80
|
f"Parser metric: {parser}",
|
|
81
81
|
extra={
|
|
82
82
|
"context": {
|
|
@@ -389,9 +389,40 @@ class StdioTransport(MCPBaseTransport):
|
|
|
389
389
|
try:
|
|
390
390
|
response = await asyncio.wait_for(send_tools_list(*self._streams), timeout=self.default_timeout)
|
|
391
391
|
|
|
392
|
-
# Normalize response
|
|
393
|
-
if
|
|
394
|
-
|
|
392
|
+
# Normalize response - handle multiple formats including Pydantic models
|
|
393
|
+
# 1. Check if it's a Pydantic model with tools attribute (e.g., ListToolsResult from chuk_mcp)
|
|
394
|
+
if hasattr(response, "tools"):
|
|
395
|
+
tools = response.tools
|
|
396
|
+
# Convert Pydantic Tool models to dicts if needed
|
|
397
|
+
if tools and len(tools) > 0 and hasattr(tools[0], "model_dump"):
|
|
398
|
+
tools = [tool.model_dump() if hasattr(tool, "model_dump") else tool for tool in tools]
|
|
399
|
+
elif tools and len(tools) > 0 and hasattr(tools[0], "dict"):
|
|
400
|
+
# Older Pydantic versions use dict() instead of model_dump()
|
|
401
|
+
tools = [tool.dict() if hasattr(tool, "dict") else tool for tool in tools]
|
|
402
|
+
# 2. Check if it's a Pydantic model that can be dumped
|
|
403
|
+
elif hasattr(response, "model_dump"):
|
|
404
|
+
dumped = response.model_dump()
|
|
405
|
+
tools = dumped.get("tools", [])
|
|
406
|
+
# 3. Handle dict responses
|
|
407
|
+
elif isinstance(response, dict):
|
|
408
|
+
# Check for tools at top level
|
|
409
|
+
if "tools" in response:
|
|
410
|
+
tools = response["tools"]
|
|
411
|
+
# Check for nested result.tools (common in some MCP implementations)
|
|
412
|
+
elif "result" in response and isinstance(response["result"], dict):
|
|
413
|
+
tools = response["result"].get("tools", [])
|
|
414
|
+
# Check if response itself is the result with MCP structure
|
|
415
|
+
elif "jsonrpc" in response and "result" in response:
|
|
416
|
+
result = response["result"]
|
|
417
|
+
if isinstance(result, dict):
|
|
418
|
+
tools = result.get("tools", [])
|
|
419
|
+
elif isinstance(result, list):
|
|
420
|
+
tools = result
|
|
421
|
+
else:
|
|
422
|
+
tools = []
|
|
423
|
+
else:
|
|
424
|
+
tools = []
|
|
425
|
+
# 4. Handle list responses
|
|
395
426
|
elif isinstance(response, list):
|
|
396
427
|
tools = response
|
|
397
428
|
else:
|
|
@@ -443,7 +474,7 @@ class StdioTransport(MCPBaseTransport):
|
|
|
443
474
|
return {"isError": True, "error": "Failed to recover connection"}
|
|
444
475
|
|
|
445
476
|
response = await asyncio.wait_for(
|
|
446
|
-
send_tools_call(*self._streams, tool_name, arguments), timeout=tool_timeout
|
|
477
|
+
send_tools_call(*self._streams, tool_name, arguments, timeout=tool_timeout), timeout=tool_timeout
|
|
447
478
|
)
|
|
448
479
|
|
|
449
480
|
response_time = time.time() - start_time
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/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.6.
|
|
3
|
+
Version: 0.6.26
|
|
4
4
|
Summary: Async-native framework for registering, discovering, and executing tools referenced in LLM responses
|
|
5
5
|
Author-email: CHUK Team <chrishayuk@somejunkmailbox.com>
|
|
6
6
|
Maintainer-email: CHUK Team <chrishayuk@somejunkmailbox.com>
|
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/core/exceptions.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
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/context.py
RENAMED
|
File without changes
|
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/logging/helpers.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/__init__.py
RENAMED
|
File without changes
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/mcp/mcp_tool.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
|
{chuk_tool_processor-0.6.24 → chuk_tool_processor-0.6.26}/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
|
|
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.6.24 → chuk_tool_processor-0.6.26}/src/chuk_tool_processor/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|