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 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
- env_var = self.name.replace("-", "_").upper()
34
- if env[f"BL_AGENT_{env_var}_URL"]:
35
- return env[f"BL_AGENT_{env_var}_URL"]
36
- if f"BL_AGENT_{env_var}_SERVICE_NAME" in settings.env:
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
- self.url,
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
- with SpanManager("blaxel-tracer").create_active_span(self.name, {"agent.name": self.name, "agent.args": json.dumps(input)}):
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
- raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
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
- logger.debug(f"Agent Calling: {self.name}")
81
- response = await self.acall(input, headers, params)
82
- if response.status_code >= 400:
83
- raise Exception(f"Agent {self.name} returned status code {response.status_code} with body {response.text}")
84
- return response.text
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
@@ -1,10 +1,7 @@
1
-
2
-
3
1
  from ..client import client
4
2
  from ..instrumentation.manager import telemetry_manager
5
3
  from .settings import settings
6
4
 
7
-
8
5
  def autoload() -> None:
9
6
  client.with_base_url(settings.base_url)
10
7
  client.with_auth(settings.auth)
@@ -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
- await self._initialize()
53
- if self.timeout_enabled:
54
- self._remove_timer()
55
- logger.debug("Listing tools")
56
- list_tools_result = await self.session.list_tools()
57
- self.tools_cache = list_tools_result.tools
58
- logger.debug(f"Tools listed: {list_tools_result}")
59
- if self.timeout_enabled:
60
- self._reset_timer()
61
- return list_tools_result
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 _external_url(self, name: str) -> str:
167
- return f"{settings.run_url}/{settings.auth.workspace_name}/functions/{name}"
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 _url(self, name: str) -> str:
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
- elif env[f"BL_FUNCTION_{env_var}_SERVICE_NAME"]:
174
- return f"https://{env[f'BL_FUNCTION_{env_var}_SERVICE_NAME']}.{settings.run_internal_hostname}"
175
- return self._external_url(name)
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) -> str | None:
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
- await self.connect_with_url(name, url)
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
- toolPersistances[name] = PersistentWebSocket(url, timeout=self.timeout, timeout_enabled=self.timeout_enabled)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blaxel
3
- Version: 0.1.9rc36
3
+ Version: 0.1.9rc37
4
4
  Summary: Add your description here
5
5
  Author-email: cploujoux <cploujoux@blaxel.ai>
6
6
  License-File: LICENSE
@@ -1,5 +1,5 @@
1
1
  blaxel/__init__.py,sha256=qmuJKjl5oGnjj4TbqHcJqUkKoxk4PvCsMb6-8rp67pE,159
2
- blaxel/agents/__init__.py,sha256=HCyqYdDHr0GkET2BBhoVpR2ZRFq824LqrYK4zf2C0dk,3369
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=SXlmPBcXUFSgqPCE4PKLYoIceloVUeDYRRI1QvDpvQA,265
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=cTPeFQ4fie23dLJUqnxqkVWbT1i1tsATDhEFE1vf74s,1959
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=Rqa6fXoP96-ePz0OIBlsFhwcBa6s5NfR87_3SRUj50Q,7249
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=zBWKvxl0c3Oc24ZqP6ICvQ4GrCHXGTlySNWVzOGFHKY,9626
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.9rc36.dist-info/METADATA,sha256=SZtld07RmNMSYyFr-EiHMrmAmWk5jFINSNfGH-Hdy74,11606
273
- blaxel-0.1.9rc36.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
274
- blaxel-0.1.9rc36.dist-info/licenses/LICENSE,sha256=p5PNQvpvyDT_0aYBDgmV1fFI_vAD2aSV0wWG7VTgRis,1069
275
- blaxel-0.1.9rc36.dist-info/RECORD,,
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,,