aixtools 0.2.18__py3-none-any.whl → 0.2.20__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 aixtools might be problematic. Click here for more details.
- aixtools/_version.py +2 -2
- aixtools/a2a/google_sdk/utils.py +15 -7
- aixtools/mcp/__init__.py +5 -1
- aixtools/mcp/client.py +44 -41
- aixtools/{logging/mcp_middleware.py → mcp/middleware.py} +1 -1
- aixtools/mcp/server.py +72 -0
- aixtools/server/utils.py +36 -2
- {aixtools-0.2.18.dist-info → aixtools-0.2.20.dist-info}/METADATA +1 -1
- {aixtools-0.2.18.dist-info → aixtools-0.2.20.dist-info}/RECORD +12 -11
- {aixtools-0.2.18.dist-info → aixtools-0.2.20.dist-info}/WHEEL +0 -0
- {aixtools-0.2.18.dist-info → aixtools-0.2.20.dist-info}/entry_points.txt +0 -0
- {aixtools-0.2.18.dist-info → aixtools-0.2.20.dist-info}/top_level.txt +0 -0
aixtools/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.2.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
31
|
+
__version__ = version = '0.2.20'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 20)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
aixtools/a2a/google_sdk/utils.py
CHANGED
|
@@ -11,6 +11,7 @@ from a2a.utils import AGENT_CARD_WELL_KNOWN_PATH, PREV_AGENT_CARD_WELL_KNOWN_PAT
|
|
|
11
11
|
from aixtools.a2a.google_sdk.remote_agent_connection import RemoteAgentConnection
|
|
12
12
|
from aixtools.context import DEFAULT_SESSION_ID, DEFAULT_USER_ID, SessionIdTuple
|
|
13
13
|
from aixtools.logging.logging_config import get_logger
|
|
14
|
+
from aixtools.server.utils import create_session_headers
|
|
14
15
|
|
|
15
16
|
logger = get_logger(__name__)
|
|
16
17
|
|
|
@@ -23,6 +24,7 @@ class AgentCardLoadFailedError(Exception):
|
|
|
23
24
|
|
|
24
25
|
async def get_agent_card(client: httpx.AsyncClient, address: str) -> AgentCard:
|
|
25
26
|
"""Retrieve the agent card from the given agent address."""
|
|
27
|
+
warnings = []
|
|
26
28
|
for card_path in [AGENT_CARD_WELL_KNOWN_PATH, PREV_AGENT_CARD_WELL_KNOWN_PATH]:
|
|
27
29
|
try:
|
|
28
30
|
card_resolver = A2ACardResolver(client, address, card_path)
|
|
@@ -30,8 +32,10 @@ async def get_agent_card(client: httpx.AsyncClient, address: str) -> AgentCard:
|
|
|
30
32
|
card.url = address
|
|
31
33
|
return card
|
|
32
34
|
except Exception as e:
|
|
33
|
-
|
|
35
|
+
warnings.append(f"Error retrieving agent card from {address} at path {card_path}: {e}")
|
|
34
36
|
|
|
37
|
+
for warning in warnings:
|
|
38
|
+
logger.warning(warning)
|
|
35
39
|
raise AgentCardLoadFailedError(f"Failed to load agent card from {address}")
|
|
36
40
|
|
|
37
41
|
|
|
@@ -65,15 +69,19 @@ class _AgentCardResolver:
|
|
|
65
69
|
|
|
66
70
|
|
|
67
71
|
async def get_a2a_clients(
|
|
68
|
-
|
|
72
|
+
agent_hosts: list[str],
|
|
73
|
+
session_id_tuple: SessionIdTuple,
|
|
74
|
+
auth_token: str = None,
|
|
75
|
+
*,
|
|
76
|
+
timeout: float = DEFAULT_A2A_TIMEOUT,
|
|
69
77
|
) -> dict[str, RemoteAgentConnection]:
|
|
70
78
|
"""Get A2A clients for all agents defined in the configuration."""
|
|
71
|
-
headers =
|
|
72
|
-
"user-id": ctx[0],
|
|
73
|
-
"session-id": ctx[1],
|
|
74
|
-
}
|
|
79
|
+
headers = create_session_headers(session_id_tuple, auth_token)
|
|
75
80
|
httpx_client = httpx.AsyncClient(headers=headers, timeout=timeout, follow_redirects=True)
|
|
76
|
-
|
|
81
|
+
clients = await _AgentCardResolver(httpx_client).get_a2a_clients(agent_hosts)
|
|
82
|
+
for client in clients.values():
|
|
83
|
+
logger.info("Using A2A server at: %s", client.get_agent_card().url)
|
|
84
|
+
return clients
|
|
77
85
|
|
|
78
86
|
|
|
79
87
|
def card2description(card: AgentCard) -> str:
|
aixtools/mcp/__init__.py
CHANGED
|
@@ -4,8 +4,12 @@ Model Context Protocol (MCP) implementation for AI agent communication.
|
|
|
4
4
|
|
|
5
5
|
from aixtools.mcp.exceptions import AixToolError
|
|
6
6
|
from aixtools.mcp.fast_mcp_log import FastMcpLog
|
|
7
|
+
from aixtools.mcp.middleware import AixErrorHandlingMiddleware
|
|
8
|
+
from aixtools.mcp.server import create_mcp_server
|
|
7
9
|
|
|
8
10
|
__all__ = [
|
|
9
|
-
"
|
|
11
|
+
"AixErrorHandlingMiddleware",
|
|
10
12
|
"AixToolError",
|
|
13
|
+
"FastMcpLog",
|
|
14
|
+
"create_mcp_server",
|
|
11
15
|
]
|
aixtools/mcp/client.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
5
|
from contextlib import asynccontextmanager
|
|
6
|
+
from dataclasses import dataclass, field
|
|
6
7
|
from datetime import timedelta
|
|
7
8
|
from typing import Any, AsyncGenerator
|
|
8
9
|
|
|
@@ -21,6 +22,7 @@ from pydantic_ai.toolsets.abstract import ToolsetTool
|
|
|
21
22
|
|
|
22
23
|
from aixtools.context import SessionIdTuple
|
|
23
24
|
from aixtools.logging.logging_config import get_logger
|
|
25
|
+
from aixtools.server.utils import create_session_headers
|
|
24
26
|
|
|
25
27
|
MCP_TOOL_CACHE_TTL = 300 # 5 minutes
|
|
26
28
|
DEFAULT_MCP_CONNECTION_TIMEOUT = 30
|
|
@@ -49,6 +51,14 @@ async def default_mcp_log_handler(message: LogMessage):
|
|
|
49
51
|
logger.log(level, msg, extra=extra)
|
|
50
52
|
|
|
51
53
|
|
|
54
|
+
@dataclass
|
|
55
|
+
class MCPConfig:
|
|
56
|
+
"""Configuration for an MCP server retrieved from config.yaml"""
|
|
57
|
+
|
|
58
|
+
url: str
|
|
59
|
+
read_timeout: float = field(default=DEFAULT_MCP_READ_TIMEOUT)
|
|
60
|
+
|
|
61
|
+
|
|
52
62
|
def get_mcp_client(
|
|
53
63
|
url: str | None = None,
|
|
54
64
|
command: str | None = None,
|
|
@@ -73,57 +83,50 @@ def get_mcp_client(
|
|
|
73
83
|
raise ValueError("Either url or command must be provided to create MCP client.")
|
|
74
84
|
|
|
75
85
|
|
|
76
|
-
def
|
|
86
|
+
def get_mcp_servers(
|
|
87
|
+
mcp_configs: list[MCPConfig],
|
|
88
|
+
session_id_tuple: SessionIdTuple,
|
|
89
|
+
auth_token: str = None,
|
|
90
|
+
*,
|
|
91
|
+
timeout: float = DEFAULT_MCP_CONNECTION_TIMEOUT,
|
|
92
|
+
):
|
|
77
93
|
"""
|
|
78
|
-
|
|
94
|
+
Create cached MCP server instances with robust error handling and isolation.
|
|
79
95
|
|
|
80
|
-
This function creates a
|
|
81
|
-
the
|
|
82
|
-
|
|
96
|
+
This function creates and returns a list of `CachedMCPServerStreamableHTTP` instances
|
|
97
|
+
based on the provided URLs. Each server instance includes:
|
|
98
|
+
- TTL-based caching for tool lists (5 minutes default)
|
|
99
|
+
- Complete task isolation to prevent cancellation propagation
|
|
100
|
+
- Comprehensive error handling and fallback mechanisms
|
|
101
|
+
- Optional user/session headers for request authentication
|
|
83
102
|
|
|
84
103
|
Args:
|
|
85
|
-
|
|
104
|
+
mcp_configs (list[MCPConfig]): A list of MCP server configurations to use.
|
|
105
|
+
session_id_tuple (SessionIdTuple): A tuple containing (user_id, session_id).
|
|
106
|
+
auth_token (str, optional): The authentication token for the user. Defaults to None.
|
|
107
|
+
timeout (float, optional): Timeout in seconds for MCP server connections.
|
|
86
108
|
Returns:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
109
|
+
list[CachedMCPServerStreamableHTTP]: List of cached MCP server instances with
|
|
110
|
+
isolation and error handling. Each server
|
|
111
|
+
operates independently - failures in one
|
|
112
|
+
server won't affect others.
|
|
91
113
|
"""
|
|
92
|
-
headers =
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return
|
|
114
|
+
headers = create_session_headers(session_id_tuple, auth_token)
|
|
115
|
+
servers = []
|
|
116
|
+
for config in mcp_configs:
|
|
117
|
+
server = CachedMCPServerStreamableHTTP(
|
|
118
|
+
url=config.url, headers=headers, timeout=timeout, read_timeout=config.read_timeout
|
|
119
|
+
)
|
|
120
|
+
logger.info("Using MCP server at %s", config.url)
|
|
121
|
+
servers.append(server)
|
|
122
|
+
return servers
|
|
101
123
|
|
|
102
124
|
|
|
103
125
|
def get_configured_mcp_servers(
|
|
104
126
|
session_id_tuple: SessionIdTuple, mcp_urls: list[str], timeout: int = DEFAULT_MCP_CONNECTION_TIMEOUT
|
|
105
127
|
):
|
|
106
|
-
"""
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
Context values `user_id` and `session_id` are included in the headers for each server request.
|
|
110
|
-
|
|
111
|
-
Each server is wrapped in a try-except block to isolate them from each other.
|
|
112
|
-
If one server fails, it won't affect the others.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
session_id_tuple (SessionIdTuple): A tuple containing (user_id, session_id).
|
|
116
|
-
mcp_urls: (list[str], optional): A list of MCP server URLs to use.
|
|
117
|
-
timeout (int, optional): Timeout in seconds for MCP server connections. Defaults to 30 seconds.
|
|
118
|
-
Returns:
|
|
119
|
-
list[MCPServerStreamableHTTP]: A list of configured MCP server instances. If
|
|
120
|
-
neither user_id nor session_id is provided, the
|
|
121
|
-
server instances will use default headers defined
|
|
122
|
-
by the underlying HTTP implementation.
|
|
123
|
-
"""
|
|
124
|
-
headers = get_mcp_headers(session_id_tuple)
|
|
125
|
-
|
|
126
|
-
return [CachedMCPServerStreamableHTTP(url=url, headers=headers, timeout=timeout) for url in mcp_urls]
|
|
128
|
+
"""Create MCP server instances from a list of URLs."""
|
|
129
|
+
return get_mcp_servers([MCPConfig(url=url) for url in mcp_urls], session_id_tuple, timeout=timeout)
|
|
127
130
|
|
|
128
131
|
|
|
129
132
|
class CachedMCPServerStreamableHTTP(MCPServerStreamableHTTP):
|
|
@@ -259,7 +262,7 @@ class CachedMCPServerStreamableHTTP(MCPServerStreamableHTTP):
|
|
|
259
262
|
|
|
260
263
|
# First, check if we have a valid cached result
|
|
261
264
|
if CACHE_KEY in self._tools_cache:
|
|
262
|
-
logger.
|
|
265
|
+
logger.debug("Using cached tools for %s", self.url)
|
|
263
266
|
return self._tools_cache[CACHE_KEY]
|
|
264
267
|
|
|
265
268
|
# Create isolated task to prevent cancellation propagation
|
|
@@ -7,7 +7,7 @@ import traceback
|
|
|
7
7
|
from fastmcp.server.middleware.error_handling import ErrorHandlingMiddleware
|
|
8
8
|
from fastmcp.server.middleware.middleware import MiddlewareContext
|
|
9
9
|
|
|
10
|
-
from aixtools.mcp import AixToolError
|
|
10
|
+
from aixtools.mcp.exceptions import AixToolError
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class AixErrorHandlingMiddleware(ErrorHandlingMiddleware):
|
aixtools/mcp/server.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Utilities for FastMCP servers."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from fastmcp import FastMCP
|
|
6
|
+
from fastmcp.server.middleware.logging import LoggingMiddleware
|
|
7
|
+
from fastmcp.server.middleware.timing import TimingMiddleware
|
|
8
|
+
from fastmcp.utilities.types import NotSet
|
|
9
|
+
|
|
10
|
+
from aixtools.auth.auth import AccessTokenAuthProvider
|
|
11
|
+
from aixtools.logging.logging_config import get_logger
|
|
12
|
+
from aixtools.mcp.middleware import AixErrorHandlingMiddleware
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def create_mcp_server(
|
|
16
|
+
*,
|
|
17
|
+
name: str,
|
|
18
|
+
instructions: str | None = None,
|
|
19
|
+
**kwargs: Any,
|
|
20
|
+
) -> FastMCP:
|
|
21
|
+
"""
|
|
22
|
+
MCP server instance with preconfigured auth and middleware.
|
|
23
|
+
|
|
24
|
+
All FastMCP constructor parameters are supported via **kwargs.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
name: Server name
|
|
28
|
+
instructions: Optional server instructions
|
|
29
|
+
**kwargs: All other FastMCP constructor parameters:
|
|
30
|
+
- version: str | None
|
|
31
|
+
- auth: AuthProvider | None (AccessTokenAuthProvider if not set, pass None to disable)
|
|
32
|
+
- middleware: list[Middleware] | None (custom middleware if not set, pass None to disable)
|
|
33
|
+
- lifespan: Callable | None
|
|
34
|
+
- tool_serializer: Callable[[Any], str] | None
|
|
35
|
+
- cache_expiration_seconds: float | None
|
|
36
|
+
- on_duplicate_tools: DuplicateBehavior | None
|
|
37
|
+
- on_duplicate_resources: DuplicateBehavior | None
|
|
38
|
+
- on_duplicate_prompts: DuplicateBehavior | None
|
|
39
|
+
- resource_prefix_format: Literal["protocol", "path"] | None
|
|
40
|
+
- mask_error_details: bool | None
|
|
41
|
+
- tools: list[Tool | Callable] | None
|
|
42
|
+
- tool_transformations: dict[str, ToolTransformConfig] | None
|
|
43
|
+
- dependencies: list[str] | None
|
|
44
|
+
- include_tags: set[str] | None
|
|
45
|
+
- exclude_tags: set[str] | None
|
|
46
|
+
- include_fastmcp_meta: bool | None
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Configured FastMCP server instance
|
|
50
|
+
"""
|
|
51
|
+
middleware = kwargs.pop("middleware", NotSet)
|
|
52
|
+
auth = kwargs.pop("auth", NotSet)
|
|
53
|
+
|
|
54
|
+
if middleware is NotSet:
|
|
55
|
+
middleware = [
|
|
56
|
+
LoggingMiddleware(include_payloads=True, logger=get_logger("middleware.log")),
|
|
57
|
+
AixErrorHandlingMiddleware(include_traceback=True, logger=get_logger("middleware.err")),
|
|
58
|
+
TimingMiddleware(logger=get_logger("middleware.timing")),
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
if auth is NotSet:
|
|
62
|
+
auth = AccessTokenAuthProvider()
|
|
63
|
+
|
|
64
|
+
mcp_args = {
|
|
65
|
+
"name": name,
|
|
66
|
+
"instructions": instructions,
|
|
67
|
+
"auth": auth,
|
|
68
|
+
"middleware": middleware,
|
|
69
|
+
**kwargs,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return FastMCP(**mcp_args)
|
aixtools/server/utils.py
CHANGED
|
@@ -8,10 +8,13 @@ from functools import wraps
|
|
|
8
8
|
from fastmcp import Context
|
|
9
9
|
from fastmcp.server import dependencies
|
|
10
10
|
|
|
11
|
-
from ..context import DEFAULT_SESSION_ID, DEFAULT_USER_ID, session_id_var, user_id_var
|
|
11
|
+
from ..context import DEFAULT_SESSION_ID, DEFAULT_USER_ID, SessionIdTuple, session_id_var, user_id_var
|
|
12
|
+
from ..logging.logging_config import get_logger
|
|
12
13
|
|
|
14
|
+
logger = get_logger(__name__)
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
|
|
17
|
+
def get_session_id_tuple(ctx: Context | None = None) -> SessionIdTuple:
|
|
15
18
|
"""
|
|
16
19
|
Get the user and session IDs from the user session.
|
|
17
20
|
If `ctx` is None, the current FastMCP request HTTP headers are used.
|
|
@@ -60,6 +63,37 @@ def get_session_id_str(ctx: Context | None = None) -> str:
|
|
|
60
63
|
return f"{user_id}:{session_id}"
|
|
61
64
|
|
|
62
65
|
|
|
66
|
+
def create_session_headers(session_id_tuple: SessionIdTuple, auth_token: str | None = None) -> dict[str, str]:
|
|
67
|
+
"""
|
|
68
|
+
Generate headers for MCP or A2A server requests.
|
|
69
|
+
|
|
70
|
+
This function creates a dictionary of headers to be used in requests to
|
|
71
|
+
the MCP servers. If a `user_id` or `session_id` is provided, they are
|
|
72
|
+
included in the headers.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
session_id_tuple (SessionIdTuple): user_id and session_id tuple
|
|
76
|
+
auth_token (str | None): Optional authorization token to include in headers
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
dict[str, str]: A dictionary of headers for MCP server requests.
|
|
80
|
+
May be empty if no user_id, session_id, or auth_token is provided.
|
|
81
|
+
"""
|
|
82
|
+
headers = {}
|
|
83
|
+
user_id, session_id = session_id_tuple
|
|
84
|
+
if auth_token:
|
|
85
|
+
logger.debug("Using auth token for MCP server authentication for user:%s, session_id:%s", user_id, session_id)
|
|
86
|
+
headers["Authorization"] = f"Bearer {auth_token}"
|
|
87
|
+
else:
|
|
88
|
+
logger.warning("No auth token found to forward to MCP/A2A servers.")
|
|
89
|
+
|
|
90
|
+
if session_id:
|
|
91
|
+
headers["session-id"] = session_id
|
|
92
|
+
if user_id:
|
|
93
|
+
headers["user-id"] = user_id
|
|
94
|
+
return headers
|
|
95
|
+
|
|
96
|
+
|
|
63
97
|
def run_in_thread(func):
|
|
64
98
|
"""decorator to run blocking function with `asyncio.to_thread`"""
|
|
65
99
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
aixtools/__init__.py,sha256=9NGHm7LjsQmsvjTZvw6QFJexSvAU4bCoN_KBk9SCa00,260
|
|
2
|
-
aixtools/_version.py,sha256=
|
|
2
|
+
aixtools/_version.py,sha256=4N3ayuoZZJYPEGMvrxu7tnGigRTxbAdCyp5a8y7c6aw,706
|
|
3
3
|
aixtools/app.py,sha256=JzQ0nrv_bjDQokllIlGHOV0HEb-V8N6k_nGQH-TEsVU,5227
|
|
4
4
|
aixtools/chainlit.md,sha256=yC37Ly57vjKyiIvK4oUvf4DYxZCwH7iocTlx7bLeGLU,761
|
|
5
5
|
aixtools/context.py,sha256=I_MD40ZnvRm5WPKAKqBUAdXIf8YaurkYUUHSVVy-QvU,598
|
|
@@ -21,7 +21,7 @@ aixtools/a2a/app.py,sha256=p18G7fAInl9dcNYq6RStBjv1C3aD6oilQq3WXtBuk30,5069
|
|
|
21
21
|
aixtools/a2a/utils.py,sha256=EHr3IyyBJn23ni-JcfAf6i3VpQmPs0g1TSnAZazvY_8,4039
|
|
22
22
|
aixtools/a2a/google_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
aixtools/a2a/google_sdk/remote_agent_connection.py,sha256=gFsIja_nIQsAzxElv3A7_hG9GpDI5pkV-B_KDlcYlnc,3329
|
|
24
|
-
aixtools/a2a/google_sdk/utils.py,sha256=
|
|
24
|
+
aixtools/a2a/google_sdk/utils.py,sha256=rMezLwv7P-Drn2TPkuwTBkbW23yPhwOIywGb5CrFKE0,3828
|
|
25
25
|
aixtools/a2a/google_sdk/pydantic_ai_adapter/agent_executor.py,sha256=8VuU2WXeSHUK3_rRm_mjX6elqdC9NA2uz1aELzeC8BU,9784
|
|
26
26
|
aixtools/a2a/google_sdk/pydantic_ai_adapter/storage.py,sha256=nGoVL7MPoZJW7iVR71laqpUYP308yFKZIifJtvUgpiU,878
|
|
27
27
|
aixtools/agents/__init__.py,sha256=MAW196S2_G7uGqv-VNjvlOETRfuV44WlU1leO7SiR0A,282
|
|
@@ -59,21 +59,22 @@ aixtools/logging/log_objects.py,sha256=gohsgcfyr8vsY7G_hfmj973-Ek1_PN-bMMLEUA-4u
|
|
|
59
59
|
aixtools/logging/logging_config.py,sha256=LvxV3C75-I0096PpcCIbgM-Cp998LzWXeMM14HYbU20,4985
|
|
60
60
|
aixtools/logging/mcp_log_models.py,sha256=7-H2GJXiiyLhpImuyLLftAGG4skxJal8Swax0ob04MY,3463
|
|
61
61
|
aixtools/logging/mcp_logger.py,sha256=d2I5l4t0d6rQH17w23FpE1IUD8Ax-mSaKfByCH86q4I,6257
|
|
62
|
-
aixtools/logging/mcp_middleware.py,sha256=0kpTAwvz9Fd_mFDP3J9ldH4dPP-bhcUjLJKELGOx0IQ,2257
|
|
63
62
|
aixtools/logging/model_patch_logging.py,sha256=CW5-kKI-zNEgZhNV4vx3EQu6fbrEtX7VjA6fE5loRLQ,2916
|
|
64
63
|
aixtools/logging/open_telemetry.py,sha256=fJjF1ou_8GyfNfbyWDQPGK6JAUrUaPwURYPHhXEtDBE,1121
|
|
65
|
-
aixtools/mcp/__init__.py,sha256=
|
|
66
|
-
aixtools/mcp/client.py,sha256=
|
|
64
|
+
aixtools/mcp/__init__.py,sha256=y6Akm5xeEFJ0K0TNM6aiTsUSe5k5kft8LSTaSEaY7vE,404
|
|
65
|
+
aixtools/mcp/client.py,sha256=1flZ49irNzM6kdoKKocwFslFR3exDVWccoR0fp9SPvk,18396
|
|
67
66
|
aixtools/mcp/example_client.py,sha256=QCFGP3NCNJMOKWjUOnFwjnbJhUSb879IA1ZYmwjRnmc,889
|
|
68
67
|
aixtools/mcp/example_server.py,sha256=1SWCyrLWsAnOa81HC4QbPJo_lBVu0b3SZBWI-qDh1vQ,458
|
|
69
68
|
aixtools/mcp/exceptions.py,sha256=9m3hy9fRINbXTSgkE71XW_luklgH6xBRp7VnSRfpyzQ,173
|
|
70
69
|
aixtools/mcp/fast_mcp_log.py,sha256=XYOS406dVjn5YTHyGRsRvVNQ0SKlRObfrKj6EeLFjHg,1057
|
|
71
70
|
aixtools/mcp/faulty_mcp.py,sha256=uU9vlNGCS_i2k20wocVMaDHTlYjMQxuzjILad9O1cjA,12807
|
|
71
|
+
aixtools/mcp/middleware.py,sha256=V-bWhSL6F-tv74EtqaoYjbvxIUCIfG3XKz1khU7ebU4,2268
|
|
72
|
+
aixtools/mcp/server.py,sha256=wpN7tJmUZqGsb_rOVfXbyTFJ9VPnQl7nG5wa1JAz-No,2566
|
|
72
73
|
aixtools/model_patch/model_patch.py,sha256=JT-oHubIn2LeoSwWbzEQ5vLH7crJmFUecHyQfaAFHa0,1813
|
|
73
74
|
aixtools/server/__init__.py,sha256=rwPx020YpOzCnrxA80Lc4yLLcIp-Mpe9hNqVO9wDPv0,448
|
|
74
75
|
aixtools/server/app_mounter.py,sha256=0tJ0tC140ezAjnYdlhpLJQjY-TO8NVw7D8LseYCCVY8,3336
|
|
75
76
|
aixtools/server/path.py,sha256=nI4yRQcE6gjKx5GG3PmHf7iT1FelT6Q8Xhw4ol9O1e0,5219
|
|
76
|
-
aixtools/server/utils.py,sha256=
|
|
77
|
+
aixtools/server/utils.py,sha256=jIRgFT_tdgwuyI8vjc9iQJyDvC0CAoi09Gc5of6I1dg,3554
|
|
77
78
|
aixtools/testing/__init__.py,sha256=mlmaAR2gmS4SbsYNCxnIprmFpFp-syjgVUkpUszo3mE,166
|
|
78
79
|
aixtools/testing/agent_mock.py,sha256=D4DrRGaeKuWEhq8hdB5s9PdfLAXHMKiC3JA7M8yN13o,4244
|
|
79
80
|
aixtools/testing/aix_test_model.py,sha256=i0xBdmpKoEfJHle6JDmcoJLUENN8Eqt181_WZ7XtDdU,6240
|
|
@@ -94,8 +95,8 @@ aixtools/utils/chainlit/cl_agent_show.py,sha256=vaRuowp4BRvhxEr5hw0zHEJ7iaSF_5bo
|
|
|
94
95
|
aixtools/utils/chainlit/cl_utils.py,sha256=fxaxdkcZg6uHdM8uztxdPowg3a2f7VR7B26VPY4t-3c,5738
|
|
95
96
|
aixtools/vault/__init__.py,sha256=fsr_NuX3GZ9WZ7dGfe0gp_5-z3URxAfwVRXw7Xyc0dU,141
|
|
96
97
|
aixtools/vault/vault.py,sha256=9dZLWdZQk9qN_Q9Djkofw9LUKnJqnrX5H0fGusVLBhA,6037
|
|
97
|
-
aixtools-0.2.
|
|
98
|
-
aixtools-0.2.
|
|
99
|
-
aixtools-0.2.
|
|
100
|
-
aixtools-0.2.
|
|
101
|
-
aixtools-0.2.
|
|
98
|
+
aixtools-0.2.20.dist-info/METADATA,sha256=Z5i3qRQdNfrFrKutnd6j0UMFab38xzXcKl7Hr2GKnos,27958
|
|
99
|
+
aixtools-0.2.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
100
|
+
aixtools-0.2.20.dist-info/entry_points.txt,sha256=q8412TG4T0S8K0SKeWp2vkVPIDYQs0jNoHqcQ7qxOiA,155
|
|
101
|
+
aixtools-0.2.20.dist-info/top_level.txt,sha256=wBn-rw9bCtxrR4AYEYgjilNCUVmKY0LWby9Zan2PRJM,9
|
|
102
|
+
aixtools-0.2.20.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|