blaxel 0.1.9rc36__py3-none-any.whl → 0.1.9rc37__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/agents/__init__.py +52 -15
- blaxel/common/autoload.py +0 -3
- blaxel/common/internal.py +75 -0
- blaxel/common/settings.py +6 -1
- blaxel/mcp/server.py +2 -1
- blaxel/tools/__init__.py +62 -21
- {blaxel-0.1.9rc36.dist-info → blaxel-0.1.9rc37.dist-info}/METADATA +1 -1
- {blaxel-0.1.9rc36.dist-info → blaxel-0.1.9rc37.dist-info}/RECORD +10 -9
- {blaxel-0.1.9rc36.dist-info → blaxel-0.1.9rc37.dist-info}/WHEEL +0 -0
- {blaxel-0.1.9rc36.dist-info → blaxel-0.1.9rc37.dist-info}/licenses/LICENSE +0 -0
blaxel/agents/__init__.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
import json
|
3
2
|
from logging import getLogger
|
4
3
|
from typing import Any, Awaitable
|
@@ -8,6 +7,7 @@ from ..client import client
|
|
8
7
|
from ..client.api.agents import get_agent
|
9
8
|
from ..client.models import Agent
|
10
9
|
from ..common.env import env
|
10
|
+
from ..common.internal import get_global_unique_hash
|
11
11
|
from ..common.settings import settings
|
12
12
|
from ..instrumentation.span import SpanManager
|
13
13
|
|
@@ -17,6 +17,19 @@ class BlAgent:
|
|
17
17
|
def __init__(self, name: str):
|
18
18
|
self.name = name
|
19
19
|
|
20
|
+
@property
|
21
|
+
def internal_url(self):
|
22
|
+
"""Get the internal URL for the agent using a hash of workspace and agent name."""
|
23
|
+
hash = get_global_unique_hash(settings.workspace, "agent", self.name)
|
24
|
+
return f"{settings.run_internal_protocol}://bl-{settings.env}-{hash}.{settings.run_internal_hostname}"
|
25
|
+
|
26
|
+
@property
|
27
|
+
def forced_url(self):
|
28
|
+
"""Get the forced URL from environment variables if set."""
|
29
|
+
env_var = self.name.replace("-", "_").upper()
|
30
|
+
if env[f"BL_AGENT_{env_var}_URL"]:
|
31
|
+
return env[f"BL_AGENT_{env_var}_URL"]
|
32
|
+
return None
|
20
33
|
|
21
34
|
@property
|
22
35
|
def external_url(self):
|
@@ -30,11 +43,10 @@ class BlAgent:
|
|
30
43
|
|
31
44
|
@property
|
32
45
|
def url(self):
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
return f"https://{settings.env[f'BL_AGENT_{env_var}_SERVICE_NAME']}.{settings.run_internal_hostname}"
|
46
|
+
if self.forced_url:
|
47
|
+
return self.forced_url
|
48
|
+
if settings.run_internal_hostname:
|
49
|
+
return self.internal_url
|
38
50
|
return self.external_url
|
39
51
|
|
40
52
|
def call(self, url, input_data, headers: dict = {}, params: dict = {}):
|
@@ -52,14 +64,14 @@ class BlAgent:
|
|
52
64
|
params=params
|
53
65
|
)
|
54
66
|
|
55
|
-
async def acall(self, input_data, headers: dict = {}, params: dict = {}):
|
67
|
+
async def acall(self, url, input_data, headers: dict = {}, params: dict = {}):
|
56
68
|
logger.debug(f"Agent Calling: {self.name}")
|
57
69
|
body = input_data
|
58
70
|
if not isinstance(body, str):
|
59
71
|
body = json.dumps(body)
|
60
72
|
|
61
73
|
return await client.get_async_httpx_client().post(
|
62
|
-
|
74
|
+
url,
|
63
75
|
headers={
|
64
76
|
'Content-Type': 'application/json',
|
65
77
|
**headers
|
@@ -69,19 +81,44 @@ class BlAgent:
|
|
69
81
|
)
|
70
82
|
|
71
83
|
def run(self, input: Any, headers: dict = {}, params: dict = {}) -> str:
|
72
|
-
|
84
|
+
attributes = {
|
85
|
+
"agent.name": self.name,
|
86
|
+
"agent.args": json.dumps(input),
|
87
|
+
"span.type": "agent.run",
|
88
|
+
}
|
89
|
+
with SpanManager("blaxel-tracer").create_active_span(self.name, attributes) as span:
|
73
90
|
logger.debug(f"Agent Calling: {self.name}")
|
74
91
|
response = self.call(self.url, input, headers, params)
|
75
92
|
if response.status_code >= 400:
|
76
|
-
|
93
|
+
if not self.fallback_url:
|
94
|
+
span.set_attribute("agent.run.error", response.text)
|
95
|
+
raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
|
96
|
+
response = self.call(self.fallback_url, input, headers, params)
|
97
|
+
if response.status_code >= 400:
|
98
|
+
span.set_attribute("agent.run.error", response.text)
|
99
|
+
raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
|
100
|
+
span.set_attribute("agent.run.result", response.text)
|
77
101
|
return response.text
|
78
102
|
|
79
103
|
async def arun(self, input: Any, headers: dict = {}, params: dict = {}) -> Awaitable[str]:
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
104
|
+
attributes = {
|
105
|
+
"agent.name": self.name,
|
106
|
+
"agent.args": json.dumps(input),
|
107
|
+
"span.type": "agent.run",
|
108
|
+
}
|
109
|
+
with SpanManager("blaxel-tracer").create_active_span(self.name, attributes) as span:
|
110
|
+
logger.debug(f"Agent Calling: {self.name}")
|
111
|
+
response = await self.acall(self.url, input, headers, params)
|
112
|
+
if response.status_code >= 400:
|
113
|
+
if not self.fallback_url:
|
114
|
+
span.set_attribute("agent.run.error", response.text)
|
115
|
+
raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
|
116
|
+
response = await self.acall(self.fallback_url, input, headers, params)
|
117
|
+
if response.status_code >= 400:
|
118
|
+
span.set_attribute("agent.run.error", response.text)
|
119
|
+
raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
|
120
|
+
span.set_attribute("agent.run.result", response.text)
|
121
|
+
return response.text
|
85
122
|
|
86
123
|
def __str__(self):
|
87
124
|
return f"Agent {self.name}"
|
blaxel/common/autoload.py
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
import base64
|
2
|
+
import hashlib
|
3
|
+
import os
|
4
|
+
import re
|
5
|
+
from typing import Optional
|
6
|
+
from logging import getLogger
|
7
|
+
|
8
|
+
logger = getLogger(__name__)
|
9
|
+
|
10
|
+
def get_alphanumeric_limited_hash(input_str, max_size):
|
11
|
+
# Create SHA-256 hash of the input string
|
12
|
+
hash_obj = hashlib.sha256(input_str.encode('utf-8'))
|
13
|
+
|
14
|
+
# Get the hash digest in base64 format
|
15
|
+
hash_base64 = base64.b64encode(hash_obj.digest()).decode('utf-8')
|
16
|
+
|
17
|
+
# Remove non-alphanumeric characters and convert to lowercase
|
18
|
+
alphanumeric = re.sub(r'[^a-zA-Z0-9]', '', hash_base64).lower()
|
19
|
+
|
20
|
+
# Skip the first character to match the Node.js crypto output
|
21
|
+
alphanumeric = alphanumeric[1:]
|
22
|
+
|
23
|
+
# Limit to max_size characters
|
24
|
+
return alphanumeric[:max_size] if len(alphanumeric) > max_size else alphanumeric
|
25
|
+
|
26
|
+
|
27
|
+
def get_global_unique_hash(workspace: str, type: str, name: str) -> str:
|
28
|
+
"""
|
29
|
+
Generate a unique hash for a combination of workspace, type, and name.
|
30
|
+
|
31
|
+
Args:
|
32
|
+
workspace: The workspace identifier
|
33
|
+
type: The type identifier
|
34
|
+
name: The name identifier
|
35
|
+
|
36
|
+
Returns:
|
37
|
+
A unique alphanumeric hash string of maximum length 48
|
38
|
+
"""
|
39
|
+
global_unique_name = f"{workspace}-{type}-{name}"
|
40
|
+
hash = get_alphanumeric_limited_hash(global_unique_name, 48)
|
41
|
+
return hash
|
42
|
+
|
43
|
+
class Agent:
|
44
|
+
def __init__(self, agent_name: str, workspace: str, run_internal_protocol: str, run_internal_hostname: str):
|
45
|
+
self.agent_name = agent_name
|
46
|
+
self.workspace = workspace
|
47
|
+
self.run_internal_protocol = run_internal_protocol
|
48
|
+
self.run_internal_hostname = run_internal_hostname
|
49
|
+
|
50
|
+
@property
|
51
|
+
def internal_url(self) -> str:
|
52
|
+
"""
|
53
|
+
Generate the internal URL for the agent using a unique hash.
|
54
|
+
|
55
|
+
Returns:
|
56
|
+
The internal URL as a string
|
57
|
+
"""
|
58
|
+
hash_value = get_global_unique_hash(
|
59
|
+
self.workspace,
|
60
|
+
"agent",
|
61
|
+
self.agent_name
|
62
|
+
)
|
63
|
+
return f"{self.run_internal_protocol}://{hash_value}.{self.run_internal_hostname}"
|
64
|
+
|
65
|
+
@property
|
66
|
+
def forced_url(self) -> Optional[str]:
|
67
|
+
"""
|
68
|
+
Check for a forced URL in environment variables.
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
The forced URL if found in environment variables, None otherwise
|
72
|
+
"""
|
73
|
+
env_var = self.agent_name.replace("-", "_").upper()
|
74
|
+
env_key = f"BL_AGENT_{env_var}_URL"
|
75
|
+
return os.environ.get(env_key)
|
blaxel/common/settings.py
CHANGED
@@ -21,7 +21,7 @@ class Settings:
|
|
21
21
|
@property
|
22
22
|
def log_level(self) -> str:
|
23
23
|
"""Get the log level."""
|
24
|
-
return os.environ.get("LOG_LEVEL", "INFO")
|
24
|
+
return os.environ.get("LOG_LEVEL", "INFO").upper()
|
25
25
|
|
26
26
|
@property
|
27
27
|
def base_url(self) -> str:
|
@@ -69,6 +69,11 @@ class Settings:
|
|
69
69
|
"""Is running on bl cloud."""
|
70
70
|
return os.environ.get("BL_CLOUD", "") == "true"
|
71
71
|
|
72
|
+
@property
|
73
|
+
def run_internal_protocol(self) -> str:
|
74
|
+
"""Get the run internal protocol."""
|
75
|
+
return os.environ.get("BL_RUN_INTERNAL_PROTOCOL", "https")
|
76
|
+
|
72
77
|
@property
|
73
78
|
def enable_opentelemetry(self) -> bool:
|
74
79
|
"""Get the enable opentelemetry."""
|
blaxel/mcp/server.py
CHANGED
@@ -65,7 +65,8 @@ class BlaxelMcpServerTransport:
|
|
65
65
|
"mcp.message.parsed": True,
|
66
66
|
"mcp.method": getattr(msg, "method", None),
|
67
67
|
"mcp.messageId": getattr(msg, "id", None),
|
68
|
-
"mcp.toolName": getattr(getattr(msg, "params", None), "name", None)
|
68
|
+
"mcp.toolName": getattr(getattr(msg, "params", None), "name", None),
|
69
|
+
"span.type": "mcp.message",
|
69
70
|
})
|
70
71
|
self.spans[client_id+":"+msg.id] = span
|
71
72
|
await read_stream_writer.send(msg)
|
blaxel/tools/__init__.py
CHANGED
@@ -4,12 +4,14 @@ import os
|
|
4
4
|
from contextlib import AsyncExitStack
|
5
5
|
from logging import getLogger
|
6
6
|
from typing import Any, cast
|
7
|
+
import traceback
|
7
8
|
|
8
9
|
from mcp import ClientSession
|
9
10
|
from mcp.types import CallToolResult
|
10
11
|
from mcp.types import Tool as MCPTool
|
11
12
|
|
12
13
|
from ..common.env import env
|
14
|
+
from ..common.internal import get_global_unique_hash
|
13
15
|
from ..common.settings import settings
|
14
16
|
from ..instrumentation.span import SpanManager
|
15
17
|
from ..mcp.client import websocket_client
|
@@ -22,15 +24,19 @@ if os.getenv("BL_SERVER_PORT"):
|
|
22
24
|
DEFAULT_TIMEOUT = 5
|
23
25
|
|
24
26
|
class PersistentWebSocket:
|
25
|
-
def __init__(self, url: str, timeout: int = DEFAULT_TIMEOUT, timeout_enabled: bool = True):
|
27
|
+
def __init__(self, url: str, name: str, timeout: int = DEFAULT_TIMEOUT, timeout_enabled: bool = True):
|
26
28
|
self.url = url
|
29
|
+
self.name = name
|
27
30
|
self.timeout = timeout
|
28
|
-
self.timeout_enabled = timeout_enabled
|
29
31
|
self.session_exit_stack = AsyncExitStack()
|
30
32
|
self.client_exit_stack = AsyncExitStack()
|
31
33
|
self.session: ClientSession = None
|
32
34
|
self.timer_task = None
|
33
35
|
self.tools_cache = []
|
36
|
+
if settings.bl_cloud:
|
37
|
+
self.timeout_enabled = False
|
38
|
+
else:
|
39
|
+
self.timeout_enabled = timeout_enabled
|
34
40
|
|
35
41
|
def with_metas(self, metas: dict[str, Any]):
|
36
42
|
self.metas = metas
|
@@ -46,19 +52,32 @@ class PersistentWebSocket:
|
|
46
52
|
logger.debug(f"Tool {tool_name} returned {call_tool_result}")
|
47
53
|
if self.timeout_enabled:
|
48
54
|
self._reset_timer()
|
55
|
+
else:
|
56
|
+
await self._close()
|
49
57
|
return call_tool_result
|
50
58
|
|
51
59
|
async def list_tools(self):
|
52
|
-
|
53
|
-
|
54
|
-
self.
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
self.
|
61
|
-
|
60
|
+
logger.debug(f"Listing tools for {self.name}")
|
61
|
+
span_attributes = {
|
62
|
+
"tool.server": self.url,
|
63
|
+
"tool.server_name": self.name,
|
64
|
+
"span.type": "tool.list",
|
65
|
+
}
|
66
|
+
with SpanManager("blaxel-tracer").create_active_span(self.name, span_attributes) as span:
|
67
|
+
await self._initialize()
|
68
|
+
logger.debug(f"Initialized websocket for {self.name}")
|
69
|
+
if self.timeout_enabled:
|
70
|
+
self._remove_timer()
|
71
|
+
logger.debug("Listing tools")
|
72
|
+
list_tools_result = await self.session.list_tools()
|
73
|
+
self.tools_cache = list_tools_result.tools
|
74
|
+
logger.debug(f"Tools listed: {list_tools_result}")
|
75
|
+
if self.timeout_enabled:
|
76
|
+
self._reset_timer()
|
77
|
+
else:
|
78
|
+
await self._close()
|
79
|
+
span.set_attribute("tool.list.result", list_tools_result.model_dump_json())
|
80
|
+
return list_tools_result
|
62
81
|
|
63
82
|
def get_tools(self):
|
64
83
|
return self.tools_cache
|
@@ -125,6 +144,7 @@ def convert_mcp_tool_to_blaxel_tool(
|
|
125
144
|
"tool.args": json.dumps(arguments),
|
126
145
|
"tool.server": url,
|
127
146
|
"tool.server_name": name,
|
147
|
+
"span.type": "tool.call",
|
128
148
|
}
|
129
149
|
with SpanManager("blaxel-tracer").create_active_span("blaxel-tool-call", span_attributes):
|
130
150
|
logger.debug(f"Calling tool {tool.name} with arguments {arguments}")
|
@@ -163,22 +183,37 @@ class BlTools:
|
|
163
183
|
self.timeout = timeout
|
164
184
|
self.timeout_enabled = timeout_enabled
|
165
185
|
|
166
|
-
def
|
167
|
-
|
186
|
+
def _internal_url(self, name: str):
|
187
|
+
"""Get the internal URL for the agent using a hash of workspace and agent name."""
|
188
|
+
hash = get_global_unique_hash(settings.workspace, "function", name)
|
189
|
+
return f"{settings.run_internal_protocol}://bl-{settings.env}-{hash}.{settings.run_internal_hostname}"
|
168
190
|
|
169
|
-
def
|
191
|
+
def _forced_url(self, name: str):
|
192
|
+
"""Get the forced URL from environment variables if set."""
|
170
193
|
env_var = name.replace("-", "_").upper()
|
171
194
|
if env[f"BL_FUNCTION_{env_var}_URL"]:
|
172
195
|
return env[f"BL_FUNCTION_{env_var}_URL"]
|
173
|
-
|
174
|
-
|
175
|
-
|
196
|
+
return None
|
197
|
+
|
198
|
+
def _external_url(self, name: str):
|
199
|
+
return f"{settings.run_url}/{settings.workspace}/functions/{name}"
|
176
200
|
|
177
|
-
def _fallback_url(self, name: str)
|
201
|
+
def _fallback_url(self, name: str):
|
178
202
|
if self._external_url(name) != self._url(name):
|
179
203
|
return self._external_url(name)
|
180
204
|
return None
|
181
205
|
|
206
|
+
def _url(self, name: str):
|
207
|
+
logger.debug(f"Getting URL for {name}")
|
208
|
+
if self._forced_url(name):
|
209
|
+
logger.debug(f"Forced URL found for {name}: {self._forced_url(name)}")
|
210
|
+
return self._forced_url(name)
|
211
|
+
if settings.run_internal_hostname:
|
212
|
+
logger.debug(f"Internal hostname found for {name}: {self._internal_url(name)}")
|
213
|
+
return self._internal_url(name)
|
214
|
+
logger.debug(f"No URL found for {name}, using external URL")
|
215
|
+
return self._external_url(name)
|
216
|
+
|
182
217
|
def get_tools(self) -> list[Tool]:
|
183
218
|
"""Get a list of all tools from all connected servers."""
|
184
219
|
all_tools: list[Tool] = []
|
@@ -240,8 +275,13 @@ class BlTools:
|
|
240
275
|
except Exception as e:
|
241
276
|
if not self._fallback_url(name):
|
242
277
|
raise e
|
278
|
+
logger.warning(f"Error connecting to {name}: {e}\n{traceback.format_exc()}")
|
243
279
|
url = self._fallback_url(name)
|
244
|
-
|
280
|
+
try:
|
281
|
+
await self.connect_with_url(name, url)
|
282
|
+
except Exception as e:
|
283
|
+
logger.error(f"Error connecting to {name} with fallback URL: {e}\n{traceback.format_exc()}")
|
284
|
+
raise e
|
245
285
|
|
246
286
|
async def connect_with_url(
|
247
287
|
self, name: str, url: str
|
@@ -255,7 +295,8 @@ class BlTools:
|
|
255
295
|
logger.debug(f"Initializing session and loading tools from {url}")
|
256
296
|
|
257
297
|
if not toolPersistances.get(name):
|
258
|
-
|
298
|
+
logger.debug(f"Creating new persistent websocket for {name}")
|
299
|
+
toolPersistances[name] = PersistentWebSocket(url, name, timeout=self.timeout, timeout_enabled=self.timeout_enabled)
|
259
300
|
await toolPersistances[name].list_tools()
|
260
301
|
logger.debug(f"Loaded {len(toolPersistances[name].get_tools())} tools from {url}")
|
261
302
|
return toolPersistances[name].with_metas(self.metas)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
blaxel/__init__.py,sha256=qmuJKjl5oGnjj4TbqHcJqUkKoxk4PvCsMb6-8rp67pE,159
|
2
|
-
blaxel/agents/__init__.py,sha256=
|
2
|
+
blaxel/agents/__init__.py,sha256=RDWkvfICIXXaQxJuuSu63jsFj_F8NBAL4U752hfN4AE,5262
|
3
3
|
blaxel/authentication/__init__.py,sha256=WInBOiziLiEbBcrE0QXF10Ue2HJkL8aCIXjNcF5OvTA,2942
|
4
4
|
blaxel/authentication/apikey.py,sha256=nOgLVba7EfVk3V-qm7cj-30LAL-BT7NOMIlGL9Ni1jY,1249
|
5
5
|
blaxel/authentication/clientcredentials.py,sha256=SfWNuZVHZw6jjMqoBMMB4ZawmpyKbVPbOpv-JDFqzw8,3080
|
@@ -236,10 +236,11 @@ blaxel/client/models/workspace.py,sha256=K_xs5Z6qFVgw6ShzaSBtTLIdltcpfu1Op422IA2
|
|
236
236
|
blaxel/client/models/workspace_labels.py,sha256=WbnUY6eCTkUNdY7hhhSF-KQCl8fWFfkCf7hzCTiNp4A,1246
|
237
237
|
blaxel/client/models/workspace_runtime.py,sha256=dxEpmwCFPOCRKHRKhY-iW7j6TbtL5qUsbjzSn00uTXU,1665
|
238
238
|
blaxel/client/models/workspace_user.py,sha256=70CcifQWYbeWG7TDui4pblTzUe5sVK0AS19vNCzKE8g,3423
|
239
|
-
blaxel/common/autoload.py,sha256=
|
239
|
+
blaxel/common/autoload.py,sha256=gPDNZrVzh28iYUwUbwKudf5y0SvcJ9zBgWibVXEN3fM,262
|
240
240
|
blaxel/common/env.py,sha256=wTbzPDdNgz4HMJiS2NCZmQlN0qpxy1PQEYBaZgtvhoc,1247
|
241
|
+
blaxel/common/internal.py,sha256=3jIr8wDbi5ErR_N8jebaqize6SEnImq0XcGXnc7EPN8,2406
|
241
242
|
blaxel/common/logger.py,sha256=emqgonfZMBIaQPowpngWOOZxWQieKP-yj_OzGZT8Oe8,1918
|
242
|
-
blaxel/common/settings.py,sha256=
|
243
|
+
blaxel/common/settings.py,sha256=X0g0_hIR19qfjSeWNf8qraxb_UTSbYukVHJeRHKLTn8,2138
|
243
244
|
blaxel/instrumentation/exporters.py,sha256=EoX3uaBVku1Rg49pSNXKFyHhgY5OV3Ih6UlqgjF5epw,1670
|
244
245
|
blaxel/instrumentation/log.py,sha256=4tGyvLg6r4DbjqJfajYbbZ1toUzF4Q4H7kHVqYWFAEA,2537
|
245
246
|
blaxel/instrumentation/manager.py,sha256=jVwVasyMI6tu0zv27DVYOaN57nXYuHFJ8QzJQKaNoK4,8880
|
@@ -247,7 +248,7 @@ blaxel/instrumentation/map.py,sha256=zZoiUiQHmik5WQZ4VCWNARSa6ppMi0r7D6hlb41N-Mg
|
|
247
248
|
blaxel/instrumentation/span.py,sha256=X2lwfu_dyxwQTMQJT2vbXOrbVSChEhjRLc413QOxQJM,3244
|
248
249
|
blaxel/mcp/__init__.py,sha256=KednMrtuc4Y0O3lv7u1Lla54FCk8UX9c1k0USjL3Ahk,69
|
249
250
|
blaxel/mcp/client.py,sha256=cFFXfpKXoMu8qTUly2ejF0pX2iBQkSNAxqwvDV1V6xY,4979
|
250
|
-
blaxel/mcp/server.py,sha256=
|
251
|
+
blaxel/mcp/server.py,sha256=GIldtA_NgIc2dzd7ZpPvpbhpIt_7AfKu5yS_YJ0bDGg,7310
|
251
252
|
blaxel/models/__init__.py,sha256=BawkSR3ociBSHAXr42upBiX8AFJTXFVdvnt8F_CMdpc,3880
|
252
253
|
blaxel/models/crewai.py,sha256=xsp8TmbtDjtqj5std5Gpg-yammhhgdTNL7Vlr1RSPa8,1705
|
253
254
|
blaxel/models/googleadk.py,sha256=I2rH3ZpzdrLnFhNt01XqAC73rGvQ9gnwXjIEagFWBk8,1951
|
@@ -259,7 +260,7 @@ blaxel/models/pydantic.py,sha256=4_z2KtaeEiRMt_Zz6Ghy6il-QiaXzE3yizDJnCBcWO8,332
|
|
259
260
|
blaxel/models/custom/langchain/gemini.py,sha256=AkhpuVMXnh1CyJ0zR2NMTtxQFPPHtAdHf_cyNzV3EsA,55421
|
260
261
|
blaxel/models/custom/llamaindex/cohere.py,sha256=Igj5Y1ozf1V4feIXfBHDdaTFU7od_wuOhm0yChZNxMY,19109
|
261
262
|
blaxel/models/custom/pydantic/gemini.py,sha256=rbsunh-M7EEKlD5ir3GlA-8a12JzPFcvsf6NISjzE5I,1052
|
262
|
-
blaxel/tools/__init__.py,sha256=
|
263
|
+
blaxel/tools/__init__.py,sha256=Ihxy3AHgh4eUK4hbVf01w6jemjZynbZ4xxK9vTd0l-k,11520
|
263
264
|
blaxel/tools/common.py,sha256=JGK052v_fvwWBFYnIArlBnFFViYyFrqdDn3gdVf53EU,1332
|
264
265
|
blaxel/tools/crewai.py,sha256=rPrRGwkXejunJQ6In1IsYAxJPNbr6d9EckXrSIHQods,638
|
265
266
|
blaxel/tools/googleadk.py,sha256=65qJysecgAMujxsyGxuCEVL0fWoR5I489DMiSA3ZaGs,2265
|
@@ -269,7 +270,7 @@ blaxel/tools/llamaindex.py,sha256=-gQ-C9V_h9a11J4ItsbWjXrCJOg0lRKsb98v9rVsNak,71
|
|
269
270
|
blaxel/tools/openai.py,sha256=GuFXkj6bXEwldyVr89jEsRAi5ihZUVEVe327QuWiGNs,653
|
270
271
|
blaxel/tools/pydantic.py,sha256=CvnNbAG_J4yBtA-XFI4lQrq3FYKjNd39hu841vZT004,1801
|
271
272
|
blaxel/tools/types.py,sha256=YPCGJ4vZDhqR0X2H_TWtc5chQScsC32nGTQdRKJlO8Y,707
|
272
|
-
blaxel-0.1.
|
273
|
-
blaxel-0.1.
|
274
|
-
blaxel-0.1.
|
275
|
-
blaxel-0.1.
|
273
|
+
blaxel-0.1.9rc37.dist-info/METADATA,sha256=CwCyqpx3AtQTXCJEFxTt4Ikuz1VSK1WMyIF1q-ye9Rs,11606
|
274
|
+
blaxel-0.1.9rc37.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
275
|
+
blaxel-0.1.9rc37.dist-info/licenses/LICENSE,sha256=p5PNQvpvyDT_0aYBDgmV1fFI_vAD2aSV0wWG7VTgRis,1069
|
276
|
+
blaxel-0.1.9rc37.dist-info/RECORD,,
|
File without changes
|
File without changes
|