pygeai 0.4.0b3__py3-none-any.whl → 0.4.0b4__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 pygeai might be problematic. Click here for more details.

@@ -227,7 +227,7 @@ class SearchOptions(CustomBaseModel):
227
227
  "ingestion": self.ingestion.to_dict() if self.ingestion else None,
228
228
  "options": self.options,
229
229
  "rerank": self.rerank,
230
- "variables": self.variables.to_dict() if self.variables else None,
230
+ "variables": self.variables.to_list() if self.variables else None,
231
231
  "vectorStore": self.vector_store
232
232
  }
233
233
  return {k: v for k, v in result.items() if v is not None}
pygeai/lab/models.py CHANGED
@@ -94,7 +94,7 @@ class Model(CustomBaseModel):
94
94
  :param llm_config: Optional[LlmConfig] - Overrides default agent LLM settings.
95
95
  :param prompt: Optional[dict] - A tailored prompt specific to this model.
96
96
  """
97
- name: str = Field(..., alias="name")
97
+ name: Optional[str] = Field(None, alias="name")
98
98
  llm_config: Optional[LlmConfig] = Field(None, alias="llmConfig")
99
99
  prompt: Optional[Dict[str, Any]] = Field(None, alias="prompt")
100
100
 
@@ -110,8 +110,8 @@ class AgenticProcessMapper:
110
110
  """
111
111
  return [
112
112
  Variable(
113
- key=var["key"],
114
- value=var["value"]
113
+ key=var.get("key"),
114
+ value=var.get("value")
115
115
  )
116
116
  for var in data
117
117
  ]
@@ -37,8 +37,8 @@ class ToolMapper:
37
37
  """
38
38
  return [
39
39
  ToolMessage(
40
- description=msg["description"],
41
- type=msg["type"]
40
+ description=msg.get("description"),
41
+ type=msg.get("type")
42
42
  )
43
43
  for msg in messages_data
44
44
  ]
@@ -55,9 +55,9 @@ class ToolMapper:
55
55
  """
56
56
  tool_data = data.get("tool", data)
57
57
 
58
- name = tool_data["name"]
59
- description = tool_data["description"]
60
- scope = tool_data["scope"]
58
+ name = tool_data.get("name")
59
+ description = tool_data.get("description")
60
+ scope = tool_data.get("scope")
61
61
  parameter_data = tool_data.get("parameters")
62
62
  parameters = cls._map_parameters(parameter_data) if parameter_data else None
63
63
 
File without changes
@@ -0,0 +1,162 @@
1
+ from unittest import TestCase
2
+ from pygeai.chat.clients import ChatClient
3
+
4
+ chat_client: ChatClient
5
+
6
+ class TestChatGenerateImageIntegration(TestCase):
7
+
8
+ def setUp(self):
9
+ self.chat_client = ChatClient(alias="beta")
10
+ self.new_image = self.__load_image()
11
+
12
+
13
+ def __load_image(self):
14
+ return {
15
+ "model": "openai/gpt-image-1",
16
+ "prompt": "generate an image of a futuristic city skyline at sunset",
17
+ "n": 1,
18
+ "quality": "high",
19
+ "size": "1024x1536"
20
+ }
21
+
22
+
23
+ def __generate_image(self, image = None):
24
+ image = image if image is not None else self.new_image
25
+ return self.chat_client.generate_image(
26
+ model=image["model"],
27
+ prompt=image["prompt"],
28
+ n=image["n"],
29
+ quality=image["quality"],
30
+ size=image["size"],
31
+ aspect_ratio= image["aspect_ratio"] if "aspect_ratio" in image else None
32
+ )
33
+
34
+
35
+ def test_generate_image(self):
36
+ created_image = self.__generate_image()
37
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
38
+
39
+
40
+ def test_generate_image_invalid_model(self):
41
+ self.new_image["model"] = "openai/gpt-image-10",
42
+ created_image = self.__generate_image()
43
+
44
+ self.assertEqual(
45
+ created_image["error"]["code"], 400,
46
+ "Expected a 400 code for invalid model"
47
+ )
48
+ self.assertEqual(
49
+ created_image["error"]["message"],
50
+ 'Provider \'["openai\' does not exists.',
51
+ "Expected an error message when model does not exists"
52
+ )
53
+
54
+
55
+ def test_generate_image_no_model(self):
56
+ self.new_image["model"] = ""
57
+ created_image = self.__generate_image()
58
+
59
+ self.assertEqual(
60
+ created_image["error"]["code"], 400,
61
+ "Expected a 400 code for no model"
62
+ )
63
+ self.assertEqual(
64
+ created_image["error"]["message"],
65
+ "Invalid 'model' name. Must follow pattern {provider}/{modelName}",
66
+ "Expected an error message when no model is provided"
67
+ )
68
+
69
+
70
+ def test_generate_image_no_prompt(self):
71
+ self.new_image["prompt"] = ""
72
+ created_image = self.__generate_image()
73
+
74
+ self.assertEqual(
75
+ created_image["error"]["type"],
76
+ "invalid_request_error",
77
+ "Expected a 400 code for no model"
78
+ )
79
+ self.assertEqual(
80
+ created_image["error"]["param"], "prompt",
81
+ "Expected an error message when no model is provided"
82
+ )
83
+
84
+
85
+ def test_generate_image_specific_n(self):
86
+ self.new_image["n"] = 2
87
+
88
+ created_image = self.__generate_image()
89
+ self.assertEqual(len(created_image["data"]), 2, "Expected two images to be generated")
90
+
91
+
92
+ def test_generate_image_no_n(self):
93
+ self.new_image["n"] = None # default is 1
94
+
95
+ created_image = self.__generate_image()
96
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
97
+
98
+
99
+ def test_generate_image_no_supported_n(self):
100
+ self.new_image["model"] = "openai/dall-e-3"
101
+ self.new_image["n"] = 5
102
+
103
+ created_image = self.__generate_image()
104
+ self.assertIn(
105
+ "Invalid 'n': integer above maximum value",
106
+ created_image["error"]["message"],
107
+ "Expected an error message when n is not supported by the model"
108
+ )
109
+
110
+
111
+ def test_generate_image_no_quality(self):
112
+ self.new_image["quality"] = ""
113
+
114
+ created_image = self.__generate_image()
115
+ self.assertIn(
116
+ "Invalid value: ''. Supported values are: 'low', 'medium', 'high', and 'auto'",
117
+ created_image["error"]["message"],
118
+ "Expected an error message when quality is not provided"
119
+ )
120
+
121
+
122
+ def test_generate_image_no_supported_quality(self):
123
+ self.new_image["model"] = "openai/dall-e-3"
124
+
125
+ created_image = self.__generate_image()
126
+ self.assertIn(
127
+ "Invalid value: 'high'. Supported values are: 'standard' and 'hd'",
128
+ created_image["error"]["message"],
129
+ "Expected an error message when quality is not supported by the model"
130
+ )
131
+
132
+
133
+ def test_generate_image_no_size(self):
134
+ self.new_image["size"] = ""
135
+
136
+ created_image = self.__generate_image()
137
+ self.assertIn(
138
+ "Invalid value: ''. Supported values are: '1024x1024', '1024x1536', '1536x1024', and 'auto'",
139
+ created_image["error"]["message"],
140
+ "Expected an error message when no size is provided"
141
+ )
142
+
143
+
144
+ def test_generate_image_no_supported_size(self):
145
+ self.new_image["size"] = 1024
146
+ self.new_image["quality"] = None
147
+
148
+ created_image = self.__generate_image()
149
+ self.assertIn(
150
+ "Invalid type for 'size': expected one of '1024x1024', '1024x1536', '1536x1024', or 'auto', but got an integer instead",
151
+ created_image["error"]["message"],
152
+ "Expected an error message when no size is provided"
153
+ )
154
+
155
+
156
+ def test_generate_image_with_aspect_ratio(self):
157
+ self.new_image["model"] = "vertex_ai/imagen-3.0-generate-001"
158
+ self.new_image["aspect_ratio"] = "4:3"
159
+ self.new_image["quality"] = None
160
+
161
+ created_image = self.__generate_image()
162
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
@@ -287,21 +287,18 @@ class TestAILabCreateAgentIntegration(TestCase):
287
287
  )
288
288
 
289
289
 
290
- @unittest.skip("Agent is getting created regardless of the prompt instructions being empty")
291
290
  def test_create_agent_no_prompt_instructions(self):
292
291
  self.new_agent.agent_data.prompt.instructions = ""
293
- with self.assertRaises(ValidationError) as exception:
294
- self.__create_agent()
295
- self.assertIn(
296
- "instructions",
297
- str(exception.exception),
298
- "Expected a validation error about allowed values for instructions"
299
- )
292
+ self.created_agent = self.__create_agent()
300
293
 
301
- self.assertIn(
302
- "Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]",
303
- str(exception.exception),
304
- "Expected a validation error about allowed values for instructions"
294
+ self.assertTrue(
295
+ isinstance(self.created_agent, Agent),
296
+ "Expected a created agent"
297
+ )
298
+
299
+ self.assertIsNone(
300
+ self.created_agent.agent_data.prompt.instructions,
301
+ "Expected the created agent to not have prompt instructions"
305
302
  )
306
303
 
307
304
 
@@ -207,28 +207,20 @@ class TestAILabUpdateAgentIntegration(TestCase):
207
207
  f"Expected a validation error about allowed values for instructions when autopublish is {'enabled' if auto_publish else 'disabled'}"
208
208
  )
209
209
 
210
-
210
+ # TODO: Change validation when API behavior is fixed
211
211
  def test_update_agent_no_model(self):
212
212
  test_params = [ True, False ]
213
213
  self.agent_to_update.agent_data.models[0].name = ""
214
214
 
215
215
  for auto_publish in test_params:
216
216
  with self.subTest(input=auto_publish):
217
- if auto_publish == False:
218
- with self.assertRaises(ValidationError) as exception:
219
- self.__update_agent(automatic_publish=auto_publish)
217
+
218
+ # If the agent is not published, the API returns a warning message for invalid model name. However, the sdk mapping is not returning it.
219
+ if auto_publish == False:
220
+ updated_agent = self.__update_agent(automatic_publish=auto_publish)
220
221
  error_msg = str(exception.exception)
221
222
 
222
- self.assertIn(
223
- "name",
224
- error_msg,
225
- "Expected a validation error about empty model name"
226
- )
227
- self.assertIn(
228
- "Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]",
229
- error_msg,
230
- "Expected a validation error about empty model name"
231
- )
223
+ self.assertTrue(self.isInstance(updated_agent), Agent)
232
224
  else:
233
225
  with self.assertRaises(APIError) as exception:
234
226
  self.__update_agent(automatic_publish=auto_publish)
@@ -28,7 +28,6 @@ class TestAILabCreateToolIntegration(TestCase):
28
28
 
29
29
 
30
30
  def __load_tool(self):
31
- #random_str = str(uuid.uuid4())
32
31
  return Tool(
33
32
  name=str(uuid.uuid4()),
34
33
  description="Tool created for sdk testing purposes",
@@ -0,0 +1,38 @@
1
+ from unittest import TestCase
2
+ from pygeai.lab.managers import AILabManager
3
+ from pygeai.lab.models import ToolList, FilterSettings
4
+ import copy
5
+
6
+ ai_lab_manager: AILabManager
7
+
8
+ class TestAILabListToolsIntegration(TestCase):
9
+
10
+ def setUp(self):
11
+ self.ai_lab_manager = AILabManager(alias="beta")
12
+ self.filter_settings = FilterSettings(
13
+ allow_external=False,
14
+ allow_drafts=True,
15
+ access_scope="private"
16
+ )
17
+ """ list-tools or lt List tools
18
+ --project-id or --pid ID of the project
19
+ --id ID of the tool to filter by. Defaults to an empty string (no filtering).
20
+ --count Number of tools to retrieve. Defaults to '100'.
21
+ --access-scope Access scope of the tools, either "public" or "private". Defaults to "public".
22
+ --allow-drafts Whether to include draft tools. Defaults to 1 (True).
23
+ --scope Scope of the tools, must be 'builtin', 'external', or 'api'. Defaults to 'api'.
24
+ --allow-external Whether to include external tools. Defaults to 1 (True). """
25
+
26
+ def __list_tools(self, filter_settings: FilterSettings = None):
27
+ filter_settings = filter_settings if filter_settings != None else self.filter_settings
28
+ return self.ai_lab_manager.list_tools(filter_settings=filter_settings)
29
+
30
+ def test_private_list_tools(self):
31
+ result = self.__list_tools()
32
+ self.assertIsInstance(result, ToolList , "Expected a list of tools")
33
+ print(result)
34
+ for tool in result.tools:
35
+ self.assertTrue(tool.access_scope == "private", "Expected all tools to be private")
36
+
37
+
38
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.4.0b3
3
+ Version: 0.4.0b4
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
@@ -41,11 +41,11 @@ Dynamic: license-file
41
41
 
42
42
  PyGEAI is a Software Development Kit (SDK) for interacting with [Globant Enterprise AI](https://wiki.genexus.com/enterprise-ai/wiki?8,Table+of+contents%3AEnterprise+AI). It comprises libraries, tools, code samples, and documentation to simplify your experience with the platform.
43
43
 
44
- ## Repository
44
+ ## Terms and conditions
45
45
 
46
- Find the PyGEAI source code and documentation in the following GitHub repository:
46
+ By using the Python SDK to interact with Globant Enterprise AI, you agree with the following Terms and Conditions:
47
47
 
48
- [GitHub repository](https://github.com/RT-GEN029-GI/pygeai)
48
+ [Terms and Conditions](https://www.globant.com/enterprise-ai/terms-of-use)
49
49
 
50
50
  ## Compatibility
51
51
  This package is compatible with the Globant Enterprise AI release from June 2025.
@@ -16,7 +16,7 @@ pygeai/assistant/rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
16
16
  pygeai/assistant/rag/clients.py,sha256=9a8loVLRnVkA3nHvvOpbdUEhy_TEnHm1rhdBYrBVABE,15893
17
17
  pygeai/assistant/rag/endpoints.py,sha256=7YlHIvAYj3-xsCWtVMDYobxXbAO0lCo9yJdOrQxwCrQ,1145
18
18
  pygeai/assistant/rag/mappers.py,sha256=n3aeNXqz_7zq_JWq5wJfeNX1kvV3arOxAoUsqRYOZsc,8645
19
- pygeai/assistant/rag/models.py,sha256=xqYJiFMpDztRdjsb-pSAd1k3POmLJFM4hH6SaJ_4pto,15732
19
+ pygeai/assistant/rag/models.py,sha256=g5UiHuRjobgU1WgUMxeBzXykxgJ5q7eb_YY8qDciNvw,15732
20
20
  pygeai/assistant/rag/responses.py,sha256=fY97ibsCVLQ3Ssnjuvj-JeA883WqjOw7ZdxbpQp_B1E,196
21
21
  pygeai/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  pygeai/chat/clients.py,sha256=QEyeTIPxp6xXKAEkE_XkjIxZDnaH808GKhIYr7ulrSA,10785
@@ -144,7 +144,7 @@ pygeai/health/endpoints.py,sha256=UAzMcqSXZtMj4r8M8B7a_a5LT6X_jMFNsCTvcsjNTYA,71
144
144
  pygeai/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  pygeai/lab/constants.py,sha256=ddgDnXP4GD0woi-FUJaJXzaWS3H6zmDN0B-v8utM95Q,170
146
146
  pygeai/lab/managers.py,sha256=9wV6SipzsIwFP9SXsKqZ0X5x6KbUuo6iCxPZF4zNGj4,72714
147
- pygeai/lab/models.py,sha256=djbSMdm95kgnqsgohfXTSybylFp_jevMj6SoWuU_P9A,71440
147
+ pygeai/lab/models.py,sha256=1m41gSqpXZVO9AcPVxzlsC-TgxZcCsgGUbpN5zoDMjU,71451
148
148
  pygeai/lab/runners.py,sha256=-uaCPHpFyiKtVOxlEjPjAc9h-onSdGAcYJ5IAZPqlb0,4147
149
149
  pygeai/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  pygeai/lab/agents/clients.py,sha256=2SYNjyD9LZaOUxmTcrwzqcHwW7K1wAmYwen_u0G-RfU,22659
@@ -153,7 +153,7 @@ pygeai/lab/agents/mappers.py,sha256=K6rxsO2Nq6GglmCUmyDKUNmzTG8HRbCelap6qaVKXQw,
153
153
  pygeai/lab/processes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  pygeai/lab/processes/clients.py,sha256=C1YYJE7c5qJSZUIDKzo5kK-LOZP6jbdrG01aE8zoEYg,51403
155
155
  pygeai/lab/processes/endpoints.py,sha256=nFIEcNP22xe4j6URI6KcwTh7h-xgYjYYuHT6PDPiO3I,2100
156
- pygeai/lab/processes/mappers.py,sha256=QBpDT3wlyRNNUMa_vDP2vhQ4pD0vwnjXc1ahckfRVX0,15807
156
+ pygeai/lab/processes/mappers.py,sha256=YOWcVKdcJmLMAq-f3qevzqQ8L_hjb0_jVXBdCHutpzk,15815
157
157
  pygeai/lab/spec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  pygeai/lab/spec/loader.py,sha256=Dq9MhLqFwF4RPdBBaqKPGqt43-PrNlsHpe-NXe4S0qQ,709
159
159
  pygeai/lab/spec/parsers.py,sha256=oG7tY-GylweRxpvtCl3p53t0IoTX3UZFiB77x__3Qp8,646
@@ -164,7 +164,7 @@ pygeai/lab/strategies/mappers.py,sha256=6C_jubAVXMKLGQy5NUD0OX7SlrU2mLe2QsgzeJ1-
164
164
  pygeai/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
165
  pygeai/lab/tools/clients.py,sha256=TfgociWyvzao3B6g2VfjAb6FmXp1YqmJRG2TT7RwOic,27441
166
166
  pygeai/lab/tools/endpoints.py,sha256=HiGoMs4OVeCgH7EAERTtifFPl53NryA1Awh7D6AO8bA,699
167
- pygeai/lab/tools/mappers.py,sha256=6xcR7lIOYrvUG8SERQIx_bsK-_To316BUql8UPLHWco,4978
167
+ pygeai/lab/tools/mappers.py,sha256=bYi5k36h0k4mCvOnV-r8YOHKz0U9P0mH21GNs20w2eM,4998
168
168
  pygeai/man/__init__.py,sha256=gqGI92vUPt6RPweoWX3mTUYPWNDlm6aGUjQOnYXqthk,53
169
169
  pygeai/man/man1/__init__.py,sha256=CFvES6cP_sbhgpm-I-QSbPC1f7Bw7cFsMW2-sxm4FtM,54
170
170
  pygeai/man/man1/geai-proxy.1,sha256=N5jtjzS5dB3JjAkG0Rw8EBzhC6Jgoy6zbS7XDgcE4EA,6735
@@ -268,19 +268,22 @@ pygeai/tests/gam/test_clients.py,sha256=vNz-4ux0cubztTY-_fEPWEoMCt5VAmZLecd0V-sE
268
268
  pygeai/tests/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
269
  pygeai/tests/health/test_clients.py,sha256=kfakkZHFMfo2IAN-PzmtMGmgR4iNiN1RpRopI--0qHI,1525
270
270
  pygeai/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
+ pygeai/tests/integration/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
272
+ pygeai/tests/integration/chat/test_generate_image.py,sha256=byCQQK6dIy68yPAhAa66bh7N0Xz5WnKSClx1vaIIzZA,5431
271
273
  pygeai/tests/integration/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
272
274
  pygeai/tests/integration/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
275
  pygeai/tests/integration/lab/agents/test_agents_list.py,sha256=F2KUCdeiaBC3dn8ARNWqSz_kJcRyA0HC1nquhamN35Q,4187
274
- pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=J3_QYCQM02LVdYZN3Y4nFmqn43_BgbV6ZELtLhZnjl0,14475
276
+ pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=yL3owPJP0RoHSy3lEAdH06LJXqxgt3f2l2plk75d4cc,14206
275
277
  pygeai/tests/integration/lab/agents/test_create_sharing_link.py,sha256=y-e8Q_TfuLz7XXMRERSKA_-OQJUMBIsJcK0lQ0Oh858,2467
276
278
  pygeai/tests/integration/lab/agents/test_delete_agent.py,sha256=sb3RfoZJdzQvcVdNcXY2C2FO3yY1ZNiAZ_6Ay6f331E,2524
277
279
  pygeai/tests/integration/lab/agents/test_get_agent.py,sha256=oW1F6SENvhL9jZC021Rj-f_Xek2DSTx3SsZBr3YT6Hk,3666
278
280
  pygeai/tests/integration/lab/agents/test_publish_agent_revision.py,sha256=4vpuAVBenLCyWvaKTA2PQVLn_e-abGDscngUzZm3dMs,5284
279
- pygeai/tests/integration/lab/agents/test_update_agent.py,sha256=vme9TJij46U55oOvUYGdKRyzZn-UKzXXYGJH0-zCeRs,11959
281
+ pygeai/tests/integration/lab/agents/test_update_agent.py,sha256=1seho_GOtOHik_YJ9GPA4McSZorohhFRvuzY7UYXbxo,11726
280
282
  pygeai/tests/integration/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
- pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=QjJT_L47wwl8_GcqIRCMgDiF817rADHBgY-xPO3omd0,12519
283
+ pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=G74P0_DUMpfCH3HBvImpUKD_aMHT8V6uPyVzo2V81lg,12479
282
284
  pygeai/tests/integration/lab/tools/test_delete_tool.py,sha256=wy979nZh8ERd-k3jhJTjHqG4wxWE4sx-r4yn2nBc7Aw,2913
283
285
  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
284
287
  pygeai/tests/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
288
  pygeai/tests/lab/test_managers.py,sha256=AsOAvyCkRpbskEy214aV2TwrqilWH6bxOiTWDOb1twQ,29778
286
289
  pygeai/tests/lab/test_mappers.py,sha256=2cLSggf168XWFpeZeBR7uJ-8C32TKb7qA91i_9fr_b0,11409
@@ -489,9 +492,9 @@ pygeai/vendor/a2a/utils/helpers.py,sha256=6Tbd8SVfXvdNEk6WYmLOjrAxkzFf1aIg8dkFfB
489
492
  pygeai/vendor/a2a/utils/message.py,sha256=gc_EKO69CJ4HkR76IFgsy-kENJz1dn7CfSgWJWvt-gs,2197
490
493
  pygeai/vendor/a2a/utils/task.py,sha256=BYRA_L1HpoUGJAVlyHML0lCM9Awhf2Ovjj7oPFXKbh0,1647
491
494
  pygeai/vendor/a2a/utils/telemetry.py,sha256=VvSp1Ztqaobkmq9-3sNhhPEilJS32-JTSfKzegkj6FU,10861
492
- pygeai-0.4.0b3.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
493
- pygeai-0.4.0b3.dist-info/METADATA,sha256=lq_Zxuj3ryFc5mcZrxNp29ohgxV_qOBtyQJqPWumxWk,6882
494
- pygeai-0.4.0b3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
495
- pygeai-0.4.0b3.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
496
- pygeai-0.4.0b3.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
497
- pygeai-0.4.0b3.dist-info/RECORD,,
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,,