pygeai 0.4.0b4__py3-none-any.whl → 0.4.0b6__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.
@@ -0,0 +1,268 @@
1
+ from unittest import TestCase
2
+ import uuid
3
+ from pygeai.core.common.exceptions import APIError
4
+ from pygeai.lab.managers import AILabManager
5
+ from pygeai.lab.models import Tool, ToolParameter
6
+
7
+
8
+ class TestAILabUpdateToolIntegration(TestCase):
9
+ def setUp(self):
10
+ """
11
+ Set up the test environment.
12
+ """
13
+ self.ai_lab_manager = AILabManager(alias="beta")
14
+ self.tool_to_update = self.__load_tool()
15
+
16
+
17
+ def __load_tool(self):
18
+ self.random_str = str(uuid.uuid4())
19
+ return Tool(
20
+ id="c77e1f2e-0322-4dd0-b6ec-aff217f1cb32",
21
+ name=f"sdk_project_updated_tool_{self.random_str}",
22
+ description=f"Tool updated for sdk testing purposes {self.random_str}",
23
+ scope="builtin",
24
+ openApi="https://raw.usercontent.com//openapi.json",
25
+ openApiJson={"openapi": "3.0.0","info": {"title": f"Simple API overview {self.random_str}","version": "3.0.0"}},
26
+ accessScope="private",
27
+ reportEvents="None",
28
+ parameters=[{
29
+ "key": "param",
30
+ "description": f"param description {self.random_str}",
31
+ "type":"app",
32
+ "value": f"value {self.random_str}",
33
+ "data_type": "String",
34
+ "isRequired": False
35
+ }]
36
+ )
37
+
38
+
39
+ def __update_tool(self, tool: Tool = None, automatic_publish: bool = False, upsert: bool = False):
40
+ """
41
+ Helper method to update a tool.
42
+ """
43
+ return self.ai_lab_manager.update_tool(
44
+ tool = self.tool_to_update if tool is None else tool,
45
+ automatic_publish=automatic_publish,
46
+ upsert=upsert
47
+ )
48
+
49
+
50
+ def test_update_tool_all_fields_success(self):
51
+ updated_tool = self.__update_tool()
52
+ self.assertEqual(updated_tool.name, self.tool_to_update.name)
53
+ self.assertEqual(updated_tool.description, self.tool_to_update.description)
54
+ self.assertEqual(updated_tool.open_api_json, self.tool_to_update.open_api_json)
55
+ self.assertEqual(updated_tool.parameters[0].description, self.tool_to_update.parameters[0].description)
56
+ self.assertEqual(updated_tool.parameters[0].value, self.tool_to_update.parameters[0].value)
57
+ self.assertTrue(updated_tool.is_draft, "Expected tool to be in draft state after update")
58
+
59
+
60
+ def test_update_tool_invalid_name(self):
61
+ test_params = [ True, False ]
62
+
63
+ for auto_publish in test_params:
64
+ with self.subTest(input=auto_publish):
65
+ tool = self.__load_tool()
66
+ tool2 = self.__load_tool()
67
+
68
+ with self.assertRaises(APIError) as exception:
69
+ tool.name = f"{tool.name}:invalid"
70
+ self.__update_tool(tool=tool, automatic_publish=auto_publish)
71
+ self.assertIn(
72
+ "Invalid character in name (: is not allowed).",
73
+ str(exception.exception),
74
+ f"Expected an error about invalid character (:) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
75
+ )
76
+
77
+ with self.assertRaises(APIError) as exception:
78
+ tool2.name = f"{tool2.name}/invalid"
79
+ self.__update_tool(tool=tool2, automatic_publish=auto_publish)
80
+ self.assertIn(
81
+ "Invalid character in name (/ is not allowed).",
82
+ str(exception.exception),
83
+ f"Expected an error about invalid character (/) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
84
+ )
85
+
86
+
87
+ def test_update_tool_duplicated_name(self):
88
+ test_params = [ True, False ]
89
+
90
+ for auto_publish in test_params:
91
+
92
+ with self.subTest(input=auto_publish):
93
+ self.tool_to_update.name = "sdk_project_gemini_tool"
94
+ with self.assertRaises(APIError) as exception:
95
+ self.__update_tool(automatic_publish=auto_publish)
96
+ self.assertIn(
97
+ "Tool already exists",
98
+ str(exception.exception),
99
+ f"Expected an error about duplicated tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
100
+ )
101
+
102
+
103
+ def test_update_tool_no_name(self):
104
+ test_params = [ True, False ]
105
+
106
+ for auto_publish in test_params:
107
+
108
+ with self.subTest(input=auto_publish):
109
+ self.tool_to_update.name = ""
110
+ with self.assertRaises(APIError) as exception:
111
+ self.__update_tool(automatic_publish=auto_publish)
112
+ self.assertIn(
113
+ "Tool name cannot be empty",
114
+ str(exception.exception),
115
+ f"Expected an error when tool name is not provided with autopublish {'enabled' if auto_publish else 'disabled'}"
116
+ )
117
+
118
+
119
+ def test_update_tool_invalid_id(self):
120
+ test_params = [ True, False ]
121
+
122
+ for auto_publish in test_params:
123
+ with self.subTest(input=auto_publish):
124
+ invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
125
+ self.tool_to_update.id = invalid_id
126
+ with self.assertRaises(APIError) as exception:
127
+ self.__update_tool(automatic_publish=auto_publish)
128
+ self.assertIn(
129
+ f"Tool not found [IdOrName= {invalid_id}",
130
+ str(exception.exception),
131
+ f"Expected an error when tool id is invalid and autopublish is {'enabled' if auto_publish else 'disabled'}"
132
+ )
133
+
134
+
135
+ def test_update_tool_scope(self):
136
+ for scope in ["builtin", "external", "api"]:
137
+ tool = self.__load_tool()
138
+ tool.scope = scope
139
+ result = self.__update_tool(tool=tool)
140
+ self.assertEqual(result.scope, scope)
141
+
142
+
143
+ def test_update_tool_invalid_scope(self):
144
+ test_params = [ True, False ]
145
+ self.tool_to_update.scope = "project"
146
+ for auto_publish in test_params:
147
+ with self.subTest(input=auto_publish):
148
+ with self.assertRaises(ValueError) as exception:
149
+ self.__update_tool(automatic_publish=auto_publish)
150
+ self.assertIn(
151
+ f"Scope must be one of builtin, external, api, proxied",
152
+ str(exception.exception),
153
+ f"Expected an error when tool scope is invalid and autopublish {'enabled' if auto_publish else 'disabled'}"
154
+ )
155
+
156
+
157
+ def test_update_tool_access_scope(self):
158
+ for access_scope in ["public", "private"]:
159
+ tool = self.__load_tool()
160
+ tool.access_scope = access_scope
161
+
162
+ if access_scope == "public":
163
+ tool.public_name = f"com.sdk.testing.{self.random_str}"
164
+
165
+ updated_tool = self.__update_tool(tool=tool)
166
+ self.assertEqual(updated_tool.access_scope, access_scope)
167
+
168
+
169
+ def test_update_tool_invalid_public_name(self):
170
+ test_params = [ True, False ]
171
+ self.tool_to_update.access_scope = "public"
172
+ self.tool_to_update.public_name = "invalid#name"
173
+ for auto_publish in test_params:
174
+ with self.subTest(input=auto_publish):
175
+ with self.assertRaises(APIError) as exception:
176
+ self.__update_tool(automatic_publish=auto_publish)
177
+ self.assertIn(
178
+ "Invalid public name, it can only contain lowercase letters, numbers, periods (.), dashes (-), and underscores (_). Please remove any other characters.",
179
+ str(exception.exception),
180
+ f"Expected error when invalid public name is sent and autopublish is {'enabled' if auto_publish else 'disabled'}"
181
+ )
182
+
183
+ def test_update_tool_duplicate_public_name(self):
184
+ test_params = [ True, False ]
185
+ self.tool_to_update.access_scope = "public"
186
+ self.tool_to_update.public_name = "test.sdk.beta.tool"
187
+ for auto_publish in test_params:
188
+ with self.subTest(input=auto_publish):
189
+ with self.assertRaises(Exception) as exc:
190
+ self.__update_tool(automatic_publish=auto_publish)
191
+ self.assertIn(
192
+ "Tool already exists",
193
+ str(exc.exception),
194
+ f"Expected error when public name is duplicated and autopublish is {'enabled' if auto_publish else 'disabled'}"
195
+ )
196
+
197
+
198
+ def test_update_tool_no_public_name(self):
199
+ test_params = [ True, False ]
200
+ self.tool_to_update.access_scope = "public"
201
+ self.tool_to_update.public_name = ""
202
+
203
+ for auto_publish in test_params:
204
+ with self.subTest(input=auto_publish):
205
+ with self.assertRaises(Exception) as exc:
206
+ self.__update_tool(automatic_publish=auto_publish)
207
+ self.assertIn(
208
+ "Tool publicName is required for tools with accessScope=public.",
209
+ str(exc.exception),
210
+ f"Expected error when public name is not provided and autopublish is {'enabled' if auto_publish else 'disabled'}"
211
+ )
212
+
213
+
214
+ def test_update_tool_no_open_api_nor_json(self):
215
+ test_params = [ True, False ]
216
+ self.tool_to_update.scope = "api"
217
+ self.tool_to_update.open_api = ""
218
+ self.tool_to_update.open_api_json = None
219
+
220
+ for auto_publish in test_params:
221
+ with self.subTest(input=auto_publish):
222
+ with self.assertRaises(APIError) as exc:
223
+ self.__update_tool(automatic_publish=auto_publish)
224
+ self.assertIn(
225
+ "Either openApi (URL with the OpenAPI definition) or the openApiJson (with the conent) are required for api-tools.",
226
+ str(exc.exception),
227
+ f"Expected error when no openApi or openApiJson are provided and autopublish is {'enabled' if auto_publish else 'disabled'}"
228
+ )
229
+
230
+
231
+ def test_update_tool_parameters(self):
232
+ self.tool_to_update.parameters = [
233
+ ToolParameter(key="paramA", data_type="String", description="descA", is_required=True),
234
+ ToolParameter(key="paramB", data_type="String", description="descB", is_required=False)
235
+ ]
236
+ result = self.__update_tool()
237
+ self.assertEqual(len(result.parameters), 2)
238
+ self.assertEqual(result.parameters[0].key, "paramA")
239
+ self.assertEqual(result.parameters[1].key, "paramB")
240
+
241
+
242
+ def test_update_tool_automatic_publish(self):
243
+ result = self.__update_tool(automatic_publish=True)
244
+ self.assertFalse(result.is_draft, "Expected tool to be published after update with automatic_publish=True")
245
+
246
+
247
+ def test_update_tool_upsert(self):
248
+ print(self.tool_to_update)
249
+ self.tool_to_update.id = str(uuid.uuid4())
250
+ self.tool_to_update.name = str(uuid.uuid4())
251
+ result = self.__update_tool(upsert=True)
252
+
253
+ if isinstance(result, Tool):
254
+ self.ai_lab_manager.delete_tool(result.id)
255
+
256
+ self.assertEqual(result.name, self.tool_to_update.name)
257
+
258
+
259
+ def test_update_tool_upsert_false_not_exists(self):
260
+ new_id = str(uuid.uuid4())
261
+ self.tool_to_update.id = new_id
262
+ with self.assertRaises(Exception) as exc:
263
+ self.__update_tool(upsert=False)
264
+ self.assertIn(f"Tool not found [IdOrName= {new_id}]", str(exc.exception))
265
+
266
+
267
+
268
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.4.0b4
3
+ Version: 0.4.0b6
4
4
  Summary: Software Development Kit to interact with Globant Enterprise AI.
5
5
  Author-email: Globant <geai-sdk@globant.com>
6
6
  License-Expression: MIT
@@ -28,7 +28,7 @@ pygeai/chat/settings.py,sha256=-B2fEemZLifdsf7_7xNmWuFZYzL-yRqefivBmv3w8j8,124
28
28
  pygeai/chat/ui.py,sha256=_t4ehG-n2-nxlc4esL09ORjmjTHhLWybUiEwGstIo-g,34620
29
29
  pygeai/cli/__init__.py,sha256=9fVRZ6_hmlv9adqGukFuS_s5Yb3jSyF8vv50-d4mbQo,117
30
30
  pygeai/cli/__main__.py,sha256=2RkQaX48mS2keTpv3-9rxk5dw35PL_deqxcKUUNhp6E,154
31
- pygeai/cli/geai.py,sha256=W-zhw4NSJxQ5KDOjksLREjySKWs962IGV6y3YW1tDFY,4247
31
+ pygeai/cli/geai.py,sha256=Smqxqc3XIy8RMuFVIsS9qNuYtqkNWba_CJJrhe7kW0E,4451
32
32
  pygeai/cli/geai_proxy.py,sha256=BSoeh32fhATxbsAA_B92HKDBiLgfejEQ0XwXfeOk49g,13356
33
33
  pygeai/cli/install_man.py,sha256=DjZ3k05sKSzpLFqsU4LHz1b37NHLVdOvS6oZihdBSis,3794
34
34
  pygeai/cli/parsers.py,sha256=8kKvUbg33K4VbE7ryHwq3Uwwp42BK6ZOAKycYjEj1Io,2525
@@ -37,7 +37,7 @@ pygeai/cli/commands/admin.py,sha256=LDxUrq9qGAswT4HbaN_c_ovVKbgGct7ffjXA8zVYjWY,
37
37
  pygeai/cli/commands/assistant.py,sha256=fQ_El6_BmFDpFjm_gPxzWk7bOzhimhiTwG8K0UpcxDo,18711
38
38
  pygeai/cli/commands/base.py,sha256=kkJEObpT2xSiObWAliJfGV73JS3LjLTMq7FEd4SpxkE,6930
39
39
  pygeai/cli/commands/builders.py,sha256=xXk1F4phSQxHN3NiQltl_KEZdCwwJiKLmVqQsft2OC4,1130
40
- pygeai/cli/commands/chat.py,sha256=vQ-NyMHdsbTy1Rc2obT3IB-OIFn0ngFmPG76ZqB4_pY,25304
40
+ pygeai/cli/commands/chat.py,sha256=F9SOJWfW577y9lF6xR_LLpvVB2jevGvLH1KG7NqOdfc,25640
41
41
  pygeai/cli/commands/common.py,sha256=zL1cWKMTqzqMsHBDFfVzbZe0i2l0hgJNpzjSRgvloY8,16568
42
42
  pygeai/cli/commands/configuration.py,sha256=J1Y8AH1xYWvcY4bzqKvF-_ggEDJ22Dv4iEcCBi2pq_8,4140
43
43
  pygeai/cli/commands/embeddings.py,sha256=om_RR3CHgfmHcTN43F6TzP71n-BS8Lf589wyBMVZJ3g,4220
@@ -57,11 +57,12 @@ pygeai/cli/commands/validators.py,sha256=lNtYSJvKFrEeg_h0oYURMuoQbNG5r6QdjzDL-aT
57
57
  pygeai/cli/commands/version.py,sha256=vyJcnxwL_TfpOQI0yE2a1ZyA3VRAE7ssh9APNBXpmqk,1701
58
58
  pygeai/cli/commands/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  pygeai/cli/commands/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- pygeai/cli/commands/lab/ai_lab.py,sha256=oiCYN_1mLXwbOQ7rh-MXVp9xUcRFTy6b0hNHcS4ytg8,137440
60
+ pygeai/cli/commands/lab/ai_lab.py,sha256=mS6QtRuCjQvA71CTD657tUYYvtw_mtDWLsGvzARSi2U,122999
61
61
  pygeai/cli/commands/lab/common.py,sha256=YBenPCVgK01Xaxgj1429bp_Ri1SN4beBxZk3dCLp7X0,6590
62
62
  pygeai/cli/commands/lab/spec.py,sha256=EjNdEnljKpYPQyT4d4ViAPrM1g7oIitv6ddnWVkWXPk,8301
63
+ pygeai/cli/commands/lab/utils.py,sha256=uxhgHvCRrV6WYRxR2qd3nED_hhXcxJ1tAU8MlzoshEg,456
63
64
  pygeai/cli/texts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- pygeai/cli/texts/help.py,sha256=IgifNjO22kbRB5bsuckFrzRvg7Q14y96IfxRnlJAUcw,15516
65
+ pygeai/cli/texts/help.py,sha256=0idAj91GTubRRXgN1t8_SRiF1Ou89ssHC5vKwONDxMM,16074
65
66
  pygeai/core/__init__.py,sha256=bbNktFp7t2dOBIvWto-uGVBW8acaKIe8EKcfuLV-HmA,189
66
67
  pygeai/core/handlers.py,sha256=la1QcQbLwfiNd-xDQ3jtWRHmeEm6E93Rfx5c-5bkLmw,934
67
68
  pygeai/core/models.py,sha256=uIwrmlB6yuulScUcYIBSH3Sxm5YyzaicV7Dz2bYLi2I,24229
@@ -76,7 +77,7 @@ pygeai/core/base/session.py,sha256=WVb4MmptwdgK7paHOSvfEle_HPXRRXO8CHgi0qbgtOg,2
76
77
  pygeai/core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
78
  pygeai/core/common/config.py,sha256=zrlNF-0AE54qZ-XpR0RgYzM_7v8LtS0jUpM7UXrbSqQ,4475
78
79
  pygeai/core/common/decorators.py,sha256=X7Tv5XBmsuS7oZHSmI95eX8UkuukKoiOiNRl5w9lgR4,1227
79
- pygeai/core/common/exceptions.py,sha256=9h_el66mS838l-FINY3gO8CrSQuFhXyljHtdrn5AOnM,1085
80
+ pygeai/core/common/exceptions.py,sha256=hfyCj5iLuWJzg93rGrR9wpVESGnq6Dq0HJQBuuitNo0,1204
80
81
  pygeai/core/embeddings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
82
  pygeai/core/embeddings/clients.py,sha256=0r-BX4ptivIBNrsOAMgw0q5nNLrIU7UxJ3SD6MkfXX4,3543
82
83
  pygeai/core/embeddings/endpoints.py,sha256=b__cuKQjribog9PSUeDzwrQ0vBO4WyYahLhLjDiUpL0,98
@@ -142,27 +143,28 @@ pygeai/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
143
  pygeai/health/clients.py,sha256=U2eb1tkXt1Rf_KdV0ZFQS2k4wGnJTXHHd9-Er0eWQuw,1011
143
144
  pygeai/health/endpoints.py,sha256=UAzMcqSXZtMj4r8M8B7a_a5LT6X_jMFNsCTvcsjNTYA,71
144
145
  pygeai/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
+ pygeai/lab/clients.py,sha256=mhtJw_cEFC1Cd6KIrcX6KxcRseKN3N_GtjlyUlLaah4,762
145
147
  pygeai/lab/constants.py,sha256=ddgDnXP4GD0woi-FUJaJXzaWS3H6zmDN0B-v8utM95Q,170
146
- pygeai/lab/managers.py,sha256=9wV6SipzsIwFP9SXsKqZ0X5x6KbUuo6iCxPZF4zNGj4,72714
148
+ pygeai/lab/managers.py,sha256=eDnT31n-xPUcK_Hjfe9FXjz6dAwAqmrbaYZ6XEHonQE,70554
147
149
  pygeai/lab/models.py,sha256=1m41gSqpXZVO9AcPVxzlsC-TgxZcCsgGUbpN5zoDMjU,71451
148
150
  pygeai/lab/runners.py,sha256=-uaCPHpFyiKtVOxlEjPjAc9h-onSdGAcYJ5IAZPqlb0,4147
149
151
  pygeai/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
- pygeai/lab/agents/clients.py,sha256=2SYNjyD9LZaOUxmTcrwzqcHwW7K1wAmYwen_u0G-RfU,22659
152
+ pygeai/lab/agents/clients.py,sha256=VIbKSDxSNH1P-CX6hF7LUcgtvrE3jvO_gu4KCtyzyls,21213
151
153
  pygeai/lab/agents/endpoints.py,sha256=RpWbFwqgX_GCVn29DYM46PVon5qjD7C1SmzvcjEKMzI,696
152
154
  pygeai/lab/agents/mappers.py,sha256=K6rxsO2Nq6GglmCUmyDKUNmzTG8HRbCelap6qaVKXQw,10583
153
155
  pygeai/lab/processes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- pygeai/lab/processes/clients.py,sha256=C1YYJE7c5qJSZUIDKzo5kK-LOZP6jbdrG01aE8zoEYg,51403
156
+ pygeai/lab/processes/clients.py,sha256=4OUf36Dhyd4hJZomeLcq9XDpLiCINwmfu6tHy69TkDE,49417
155
157
  pygeai/lab/processes/endpoints.py,sha256=nFIEcNP22xe4j6URI6KcwTh7h-xgYjYYuHT6PDPiO3I,2100
156
158
  pygeai/lab/processes/mappers.py,sha256=YOWcVKdcJmLMAq-f3qevzqQ8L_hjb0_jVXBdCHutpzk,15815
157
159
  pygeai/lab/spec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
160
  pygeai/lab/spec/loader.py,sha256=Dq9MhLqFwF4RPdBBaqKPGqt43-PrNlsHpe-NXe4S0qQ,709
159
161
  pygeai/lab/spec/parsers.py,sha256=oG7tY-GylweRxpvtCl3p53t0IoTX3UZFiB77x__3Qp8,646
160
162
  pygeai/lab/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
- pygeai/lab/strategies/clients.py,sha256=UZV21W-F7CHmi53oDWDloEQ4vf9DW8G_DNpB3nWDfeg,10563
163
+ pygeai/lab/strategies/clients.py,sha256=_a1yc8kwd50Yv4g1jqfa0gRnMiROR7Dn0gx3xqFUjVE,10316
162
164
  pygeai/lab/strategies/endpoints.py,sha256=LgEvUgeeN-X6VMl-tpl9_N12GRppLPScQmiMRk7Ri28,541
163
165
  pygeai/lab/strategies/mappers.py,sha256=6C_jubAVXMKLGQy5NUD0OX7SlrU2mLe2QsgzeJ1-WKw,2437
164
166
  pygeai/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
- pygeai/lab/tools/clients.py,sha256=TfgociWyvzao3B6g2VfjAb6FmXp1YqmJRG2TT7RwOic,27441
167
+ pygeai/lab/tools/clients.py,sha256=cjoNIdCTYqVIw4MpEnwtFt4HSGl1snYFSEEOo_jZWUs,26515
166
168
  pygeai/lab/tools/endpoints.py,sha256=HiGoMs4OVeCgH7EAERTtifFPl53NryA1Awh7D6AO8bA,699
167
169
  pygeai/lab/tools/mappers.py,sha256=bYi5k36h0k4mCvOnV-r8YOHKz0U9P0mH21GNs20w2eM,4998
168
170
  pygeai/man/__init__.py,sha256=gqGI92vUPt6RPweoWX3mTUYPWNDlm6aGUjQOnYXqthk,53
@@ -280,10 +282,11 @@ pygeai/tests/integration/lab/agents/test_get_agent.py,sha256=oW1F6SENvhL9jZC021R
280
282
  pygeai/tests/integration/lab/agents/test_publish_agent_revision.py,sha256=4vpuAVBenLCyWvaKTA2PQVLn_e-abGDscngUzZm3dMs,5284
281
283
  pygeai/tests/integration/lab/agents/test_update_agent.py,sha256=1seho_GOtOHik_YJ9GPA4McSZorohhFRvuzY7UYXbxo,11726
282
284
  pygeai/tests/integration/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
283
- pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=G74P0_DUMpfCH3HBvImpUKD_aMHT8V6uPyVzo2V81lg,12479
285
+ pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=0Yzlu9ATnsxPVPa4vO4j-j5Hc6VyHQ2KoSaf0dfmqpk,12351
284
286
  pygeai/tests/integration/lab/tools/test_delete_tool.py,sha256=wy979nZh8ERd-k3jhJTjHqG4wxWE4sx-r4yn2nBc7Aw,2913
285
287
  pygeai/tests/integration/lab/tools/test_get_tool.py,sha256=3fVDQlklmvOUgYDp0ATv5RqRmApgD4Qw_YGqjBOaOOo,3437
286
- pygeai/tests/integration/lab/tools/test_list_tools.py,sha256=afJ-Y11uCJEvfzs0FzdjExqksO3PswglWHEg2_nBJ-4,1725
288
+ pygeai/tests/integration/lab/tools/test_list_tools.py,sha256=KMLWXUmk_hKChKo4t5xEZtuIS1UmhAH6VdEq15KCrbY,3744
289
+ pygeai/tests/integration/lab/tools/test_update_tool.py,sha256=tZKZDoYS6RuTdRLgAmENq5tRvK-MohJGCt-s83QoBCA,11683
287
290
  pygeai/tests/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
291
  pygeai/tests/lab/test_managers.py,sha256=AsOAvyCkRpbskEy214aV2TwrqilWH6bxOiTWDOb1twQ,29778
289
292
  pygeai/tests/lab/test_mappers.py,sha256=2cLSggf168XWFpeZeBR7uJ-8C32TKb7qA91i_9fr_b0,11409
@@ -492,9 +495,9 @@ pygeai/vendor/a2a/utils/helpers.py,sha256=6Tbd8SVfXvdNEk6WYmLOjrAxkzFf1aIg8dkFfB
492
495
  pygeai/vendor/a2a/utils/message.py,sha256=gc_EKO69CJ4HkR76IFgsy-kENJz1dn7CfSgWJWvt-gs,2197
493
496
  pygeai/vendor/a2a/utils/task.py,sha256=BYRA_L1HpoUGJAVlyHML0lCM9Awhf2Ovjj7oPFXKbh0,1647
494
497
  pygeai/vendor/a2a/utils/telemetry.py,sha256=VvSp1Ztqaobkmq9-3sNhhPEilJS32-JTSfKzegkj6FU,10861
495
- pygeai-0.4.0b4.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
496
- pygeai-0.4.0b4.dist-info/METADATA,sha256=plyocQ_kqcryzOcFS26Ontgdg5bv5yMrbcitm3bsOcQ,6940
497
- pygeai-0.4.0b4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
498
- pygeai-0.4.0b4.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
499
- pygeai-0.4.0b4.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
500
- pygeai-0.4.0b4.dist-info/RECORD,,
498
+ pygeai-0.4.0b6.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
499
+ pygeai-0.4.0b6.dist-info/METADATA,sha256=Vw_S0OHG34fpDSiQqF_VexSPvyelYRGqn-Pf5og7Ack,6940
500
+ pygeai-0.4.0b6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
501
+ pygeai-0.4.0b6.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
502
+ pygeai-0.4.0b6.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
503
+ pygeai-0.4.0b6.dist-info/RECORD,,