blaxel 0.2.0rc2__py3-none-any.whl → 0.2.0rc4__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.
- blaxel/core/mcp/client.py +13 -8
- blaxel/core/mcp/server.py +8 -7
- {blaxel-0.2.0rc2.dist-info → blaxel-0.2.0rc4.dist-info}/METADATA +4 -4
- {blaxel-0.2.0rc2.dist-info → blaxel-0.2.0rc4.dist-info}/RECORD +6 -6
- {blaxel-0.2.0rc2.dist-info → blaxel-0.2.0rc4.dist-info}/WHEEL +0 -0
- {blaxel-0.2.0rc2.dist-info → blaxel-0.2.0rc4.dist-info}/licenses/LICENSE +0 -0
blaxel/core/mcp/client.py
CHANGED
@@ -7,6 +7,7 @@ import anyio
|
|
7
7
|
import mcp.types as types
|
8
8
|
from anyio.abc import TaskStatus
|
9
9
|
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
|
10
|
+
from mcp.shared.message import SessionMessage
|
10
11
|
from websockets.asyncio.client import ClientConnection
|
11
12
|
from websockets.asyncio.client import connect as ws_connect
|
12
13
|
|
@@ -28,11 +29,11 @@ async def websocket_client(
|
|
28
29
|
|
29
30
|
The `timeout` parameter controls connection timeout.
|
30
31
|
"""
|
31
|
-
read_stream: MemoryObjectReceiveStream[
|
32
|
-
read_stream_writer: MemoryObjectSendStream[
|
32
|
+
read_stream: MemoryObjectReceiveStream[SessionMessage | Exception]
|
33
|
+
read_stream_writer: MemoryObjectSendStream[SessionMessage | Exception]
|
33
34
|
|
34
|
-
write_stream: MemoryObjectSendStream[
|
35
|
-
write_stream_reader: MemoryObjectReceiveStream[
|
35
|
+
write_stream: MemoryObjectSendStream[SessionMessage]
|
36
|
+
write_stream_reader: MemoryObjectReceiveStream[SessionMessage]
|
36
37
|
|
37
38
|
read_stream_writer, read_stream = anyio.create_memory_object_stream(0)
|
38
39
|
write_stream, write_stream_reader = anyio.create_memory_object_stream(0)
|
@@ -64,7 +65,9 @@ async def websocket_client(
|
|
64
65
|
message
|
65
66
|
)
|
66
67
|
logger.debug(f"Received server message: {parsed_message}")
|
67
|
-
await read_stream_writer.send(
|
68
|
+
await read_stream_writer.send(
|
69
|
+
SessionMessage(message=parsed_message)
|
70
|
+
)
|
68
71
|
except Exception as exc:
|
69
72
|
logger.error(f"Error parsing server message: {exc}")
|
70
73
|
await read_stream_writer.send(exc)
|
@@ -77,10 +80,12 @@ async def websocket_client(
|
|
77
80
|
async def ws_writer(websocket: ClientConnection):
|
78
81
|
try:
|
79
82
|
async with write_stream_reader:
|
80
|
-
async for
|
81
|
-
logger.debug(
|
83
|
+
async for session_message in write_stream_reader:
|
84
|
+
logger.debug(
|
85
|
+
f"Sending client message: {session_message.message}"
|
86
|
+
)
|
82
87
|
await websocket.send(
|
83
|
-
message.model_dump_json(
|
88
|
+
session_message.message.model_dump_json(
|
84
89
|
by_alias=True,
|
85
90
|
exclude_none=True,
|
86
91
|
)
|
blaxel/core/mcp/server.py
CHANGED
@@ -8,6 +8,7 @@ import anyio
|
|
8
8
|
import mcp.types as types
|
9
9
|
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
|
10
10
|
from mcp.server.fastmcp import FastMCP as FastMCPBase
|
11
|
+
from mcp.shared.message import SessionMessage
|
11
12
|
from websockets.asyncio.server import ServerConnection, serve
|
12
13
|
|
13
14
|
from ..common.env import env
|
@@ -34,11 +35,11 @@ class BlaxelMcpServerTransport:
|
|
34
35
|
@asynccontextmanager
|
35
36
|
async def websocket_server(self):
|
36
37
|
"""Create and run a WebSocket server for MCP communication."""
|
37
|
-
read_stream: MemoryObjectReceiveStream[
|
38
|
-
read_stream_writer: MemoryObjectSendStream[
|
38
|
+
read_stream: MemoryObjectReceiveStream[SessionMessage | Exception]
|
39
|
+
read_stream_writer: MemoryObjectSendStream[SessionMessage | Exception]
|
39
40
|
|
40
|
-
write_stream: MemoryObjectSendStream[
|
41
|
-
write_stream_reader: MemoryObjectReceiveStream[
|
41
|
+
write_stream: MemoryObjectSendStream[SessionMessage]
|
42
|
+
write_stream_reader: MemoryObjectReceiveStream[SessionMessage]
|
42
43
|
|
43
44
|
read_stream_writer, read_stream = anyio.create_memory_object_stream(0)
|
44
45
|
write_stream, write_stream_reader = anyio.create_memory_object_stream(0)
|
@@ -56,7 +57,7 @@ class BlaxelMcpServerTransport:
|
|
56
57
|
if hasattr(msg, "id") and msg.id is not None:
|
57
58
|
original_id = msg.id
|
58
59
|
msg.id = f"{client_id}:{original_id}"
|
59
|
-
await read_stream_writer.send(msg)
|
60
|
+
await read_stream_writer.send(SessionMessage(message=msg))
|
60
61
|
except Exception as exc:
|
61
62
|
logger.error(f"Failed to parse message: {exc}\n{traceback.format_exc()}")
|
62
63
|
await read_stream_writer.send(exc)
|
@@ -69,11 +70,11 @@ class BlaxelMcpServerTransport:
|
|
69
70
|
|
70
71
|
async def message_sender():
|
71
72
|
async with write_stream_reader:
|
72
|
-
async for
|
73
|
+
async for session_message in write_stream_reader:
|
73
74
|
# Extract client ID from message ID
|
74
75
|
client_id = None
|
75
76
|
msg_id = None
|
76
|
-
|
77
|
+
message = session_message.message
|
77
78
|
if hasattr(message, "id") and message.id is not None:
|
78
79
|
parts = str(message.id).split(":", 1)
|
79
80
|
if len(parts) == 2:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: blaxel
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.0rc4
|
4
4
|
Summary: Blaxel - AI development platform SDK
|
5
5
|
Project-URL: Homepage, https://blaxel.ai
|
6
6
|
Project-URL: Documentation, https://docs.blaxel.ai
|
@@ -11,7 +11,7 @@ License-File: LICENSE
|
|
11
11
|
Requires-Python: >=3.10
|
12
12
|
Requires-Dist: attrs>=21.3.0
|
13
13
|
Requires-Dist: httpx>=0.27.0
|
14
|
-
Requires-Dist: mcp
|
14
|
+
Requires-Dist: mcp>=1.9.4
|
15
15
|
Requires-Dist: pydantic>=2.0.0
|
16
16
|
Requires-Dist: pyjwt>=2.0.0
|
17
17
|
Requires-Dist: python-dateutil>=2.8.0
|
@@ -43,7 +43,7 @@ Requires-Dist: llama-index-llms-groq>=0.3.1; extra == 'all'
|
|
43
43
|
Requires-Dist: llama-index-llms-mistralai>=0.4.0; extra == 'all'
|
44
44
|
Requires-Dist: llama-index-llms-openai>=0.3.42; extra == 'all'
|
45
45
|
Requires-Dist: llama-index>=0.12.37; extra == 'all'
|
46
|
-
Requires-Dist: openai-agents>=0.0.
|
46
|
+
Requires-Dist: openai-agents>=0.0.19; extra == 'all'
|
47
47
|
Requires-Dist: opentelemetry-exporter-otlp>=1.28.0; extra == 'all'
|
48
48
|
Requires-Dist: opentelemetry-instrumentation-anthropic==0.40.6; extra == 'all'
|
49
49
|
Requires-Dist: opentelemetry-instrumentation-cohere==0.40.6; extra == 'all'
|
@@ -95,7 +95,7 @@ Requires-Dist: llama-index-llms-openai>=0.3.42; extra == 'llamaindex'
|
|
95
95
|
Requires-Dist: llama-index>=0.12.37; extra == 'llamaindex'
|
96
96
|
Requires-Dist: opentelemetry-instrumentation-llamaindex>=0.40.7; extra == 'llamaindex'
|
97
97
|
Provides-Extra: openai
|
98
|
-
Requires-Dist: openai-agents>=0.0.
|
98
|
+
Requires-Dist: openai-agents>=0.0.19; extra == 'openai'
|
99
99
|
Provides-Extra: pydantic
|
100
100
|
Requires-Dist: pydantic-ai>=0.0.48; extra == 'pydantic'
|
101
101
|
Provides-Extra: telemetry
|
@@ -301,8 +301,8 @@ blaxel/core/common/logger.py,sha256=Jt0MCJgYDPq36rl7UyKRDJH76a-AwYdfggNeNYJt6N0,
|
|
301
301
|
blaxel/core/common/settings.py,sha256=7KTryuBdud0IfHqykX7xEEtpgq5M5h1Z8YEzYKsHB-Q,2327
|
302
302
|
blaxel/core/jobs/__init__.py,sha256=tApZ6t6Savd5c9yH1RhuiPDGq19B464Fakd-YqCOEtI,5441
|
303
303
|
blaxel/core/mcp/__init__.py,sha256=5VjkiQFb1QWW5QKRgwPHARlxZJ9Xqaz0diJTpM8LLF0,142
|
304
|
-
blaxel/core/mcp/client.py,sha256=
|
305
|
-
blaxel/core/mcp/server.py,sha256=
|
304
|
+
blaxel/core/mcp/client.py,sha256=aK3wSnsO8DmT1BZqw4eiCMF71Jwvni6Qga0DhPP806Y,5437
|
305
|
+
blaxel/core/mcp/server.py,sha256=tXySGZKgK3IllYOzYOecp58BixKBkmAIvQp_4nSM_Ww,5919
|
306
306
|
blaxel/core/models/__init__.py,sha256=HbRDsMnUFHkPC-MMkzPXh4mUqkVjqO6p3j7m00N_XSo,1722
|
307
307
|
blaxel/core/sandbox/__init__.py,sha256=eWTH7PWNQZe9efqParwgXzltc7L4OyPtT_REqCdQybU,551
|
308
308
|
blaxel/core/sandbox/action.py,sha256=9Zjkco7YkLzBThD3N2Hr5SpeEiqU_-Ktk8HlKpkpiAg,2802
|
@@ -402,7 +402,7 @@ blaxel/telemetry/instrumentation/map.py,sha256=EVCw6ug1hemE-9kh77Vxs9cqr_p9TPzFw
|
|
402
402
|
blaxel/telemetry/instrumentation/utils.py,sha256=KInMYZH-mu9_wvetmf0EmgrfN3Sw8IWk2Y95v2u90_U,1901
|
403
403
|
blaxel/telemetry/log/log.py,sha256=RvQByRjZMoP_dRaAZu8oK6DTegsHs-xV4W-UIqis6CA,2461
|
404
404
|
blaxel/telemetry/log/logger.py,sha256=NPAS3g82ryROjvc_DEZaTIfrcehoLEZoP-JkLxADxc0,4113
|
405
|
-
blaxel-0.2.
|
406
|
-
blaxel-0.2.
|
407
|
-
blaxel-0.2.
|
408
|
-
blaxel-0.2.
|
405
|
+
blaxel-0.2.0rc4.dist-info/METADATA,sha256=hiJxnxbAbdimLOYp6zQdrKBYLxCLFIBnSmHZZCX7VDw,9878
|
406
|
+
blaxel-0.2.0rc4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
407
|
+
blaxel-0.2.0rc4.dist-info/licenses/LICENSE,sha256=p5PNQvpvyDT_0aYBDgmV1fFI_vAD2aSV0wWG7VTgRis,1069
|
408
|
+
blaxel-0.2.0rc4.dist-info/RECORD,,
|
File without changes
|
File without changes
|