pygeai 0.3.2__py3-none-any.whl → 0.4.0__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.
- pygeai/__init__.py +1 -1
- pygeai/chat/ui.py +0 -1
- pygeai/cli/__init__.py +1 -1
- pygeai/cli/commands/chat.py +54 -56
- pygeai/cli/commands/lab/ai_lab.py +129 -466
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/geai.py +5 -2
- pygeai/cli/texts/help.py +12 -0
- pygeai/core/common/config.py +0 -2
- pygeai/core/common/exceptions.py +6 -0
- pygeai/lab/agents/clients.py +30 -61
- pygeai/lab/clients.py +20 -0
- pygeai/lab/managers.py +6 -58
- pygeai/lab/processes/clients.py +81 -129
- pygeai/lab/strategies/clients.py +11 -17
- pygeai/lab/tools/clients.py +59 -59
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +72 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +162 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +9 -13
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +0 -1
- pygeai/tests/integration/lab/agents/test_update_agent.py +6 -15
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +292 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +268 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +1 -2
- pygeai/tests/snippets/lab/tools/create_tool.py +1 -1
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/METADATA +1 -1
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/RECORD +45 -25
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/WHEEL +0 -0
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/entry_points.txt +0 -0
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.3.2.dist-info → pygeai-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampling, PromptExample, PromptOutput
|
|
3
|
+
|
|
4
|
+
agent = Agent(
|
|
5
|
+
id="f64ba214-152b-4dd4-be0d-2920da415f5d",
|
|
6
|
+
status="active",
|
|
7
|
+
name="Private Translator V25",
|
|
8
|
+
access_scope="private",
|
|
9
|
+
public_name="com.genexus.geai.private_translator#",
|
|
10
|
+
job_description="Translates",
|
|
11
|
+
avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
12
|
+
description="Agent that translates from any language to english.",
|
|
13
|
+
is_draft=False,
|
|
14
|
+
is_readonly=False,
|
|
15
|
+
revision=1,
|
|
16
|
+
version=None,
|
|
17
|
+
agent_data=AgentData(
|
|
18
|
+
prompt=Prompt(
|
|
19
|
+
instructions="the user will provide a text, you must return the same text translated to english",
|
|
20
|
+
inputs=["text", "avoid slang indicator"],
|
|
21
|
+
outputs=[
|
|
22
|
+
PromptOutput(key="translated_text", description="translated text, with slang or not depending on the indication. in plain text."),
|
|
23
|
+
PromptOutput(key="summary", description="a summary in the original language of the text to be translated, also in plain text.")
|
|
24
|
+
],
|
|
25
|
+
examples=[
|
|
26
|
+
PromptExample(input_data="opitiiiis mundo [no-slang]", output='{"translated_text":"hello world","summary":"saludo"}'),
|
|
27
|
+
PromptExample(input_data="esto es una prueba pincheguey [keep-slang]", output='{"translated_text":"this is a test pal","summary":"prueba"}')
|
|
28
|
+
]
|
|
29
|
+
),
|
|
30
|
+
llm_config=LlmConfig(
|
|
31
|
+
max_tokens=5000,
|
|
32
|
+
timeout=0,
|
|
33
|
+
sampling=Sampling(temperature=0.5, top_k=0, top_p=0)
|
|
34
|
+
),
|
|
35
|
+
models=[Model(name="gpt-4-turbo-preview")]
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
manager = AILabManager()
|
|
41
|
+
result = manager.create_agent(
|
|
42
|
+
agent=agent,
|
|
43
|
+
automatic_publish=False
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
print(f"Agent: {agent.to_dict()}")
|
|
48
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampling, PromptExample, PromptOutput
|
|
3
|
+
|
|
4
|
+
agent = Agent(
|
|
5
|
+
id="f64ba214-152b-4dd4-be0d-2920da415f5d",
|
|
6
|
+
status="active",
|
|
7
|
+
name="Private Translator V25",
|
|
8
|
+
access_scope="private",
|
|
9
|
+
public_name="com.genexus.geai.private_translator_25",
|
|
10
|
+
job_description="Translates",
|
|
11
|
+
avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
12
|
+
description="Agent that translates from any language to english.",
|
|
13
|
+
is_draft=False,
|
|
14
|
+
is_readonly=False,
|
|
15
|
+
revision=1,
|
|
16
|
+
version=None,
|
|
17
|
+
agent_data=AgentData(
|
|
18
|
+
prompt=Prompt(
|
|
19
|
+
instructions="the user will provide a text, you must return the same text translated to english",
|
|
20
|
+
inputs=["text", "avoid slang indicator"],
|
|
21
|
+
outputs=[
|
|
22
|
+
PromptOutput(key="translated_text", description="translated text, with slang or not depending on the indication. in plain text."),
|
|
23
|
+
PromptOutput(key="summary", description="a summary in the original language of the text to be translated, also in plain text.")
|
|
24
|
+
],
|
|
25
|
+
examples=[
|
|
26
|
+
PromptExample(input_data="opitiiiis mundo [no-slang]", output='{"translated_text":"hello world","summary":"saludo"}'),
|
|
27
|
+
PromptExample(input_data="esto es una prueba pincheguey [keep-slang]", output='{"translated_text":"this is a test pal","summary":"prueba"}')
|
|
28
|
+
]
|
|
29
|
+
),
|
|
30
|
+
llm_config=LlmConfig(
|
|
31
|
+
max_tokens=5000,
|
|
32
|
+
timeout=0,
|
|
33
|
+
sampling=Sampling(temperature=0.5, top_k=0, top_p=0)
|
|
34
|
+
),
|
|
35
|
+
models=[Model(name="gpt-4-turbo-preview")]
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
manager = AILabManager()
|
|
41
|
+
result = manager.create_agent(
|
|
42
|
+
agent=agent,
|
|
43
|
+
automatic_publish=False
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
print(f"Agent: {agent.to_dict()}")
|
|
48
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Tool, ToolParameter
|
|
3
|
+
|
|
4
|
+
parameters = [
|
|
5
|
+
ToolParameter(
|
|
6
|
+
key="input",
|
|
7
|
+
data_type="String",
|
|
8
|
+
description="some input that the tool needs.",
|
|
9
|
+
is_required=True
|
|
10
|
+
),
|
|
11
|
+
ToolParameter(
|
|
12
|
+
key="some_nonsensitive_id",
|
|
13
|
+
data_type="String",
|
|
14
|
+
description="Configuration that is static, in the sense that whenever the tool is used, the value for this parameter is configured here. The llm will not know about it.",
|
|
15
|
+
is_required=True,
|
|
16
|
+
type="config",
|
|
17
|
+
from_secret=False,
|
|
18
|
+
value="b001e30b4016001f5f76b9ae9215ac40"
|
|
19
|
+
),
|
|
20
|
+
ToolParameter(
|
|
21
|
+
key="api_token",
|
|
22
|
+
data_type="String",
|
|
23
|
+
description="Configuration that is static, but it is sensitive information . The value is stored in secret-manager",
|
|
24
|
+
is_required=True,
|
|
25
|
+
type="config",
|
|
26
|
+
value="0cd84dc7-f3f5-4a03-9288-cdfd8d72fde1"
|
|
27
|
+
)
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
tool = Tool(
|
|
31
|
+
name="sample_tool_v5",
|
|
32
|
+
access_scope="private",
|
|
33
|
+
public_name="sample.tool.test#",
|
|
34
|
+
description="a builtin tool that does something but really does nothing cos it does not exist.",
|
|
35
|
+
scope="builtin",
|
|
36
|
+
parameters=parameters
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
manager = AILabManager()
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
result = manager.create_tool(
|
|
44
|
+
tool=tool,
|
|
45
|
+
automatic_publish=False
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
print(f"Created tool: {result.name}, ID: {result.id}")
|
|
49
|
+
print(f"Description: {result.description}")
|
|
50
|
+
print(f"Messages: {result.messages}")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pygeai/__init__.py,sha256=
|
|
1
|
+
pygeai/__init__.py,sha256=robCZ_NkO88faXr08sW9mAJ-eBXAcAUU24mINsALRVs,502
|
|
2
2
|
pygeai/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
pygeai/admin/clients.py,sha256=2wuXSmTyg-gCbempDFCeI1yCKeOlKDBZsrFyFWxcwBg,6698
|
|
4
4
|
pygeai/admin/endpoints.py,sha256=Osi8UIBhrEzKlTLF2a-q2boDUl0XMR3lQ8sDrz72TL0,747
|
|
@@ -25,10 +25,10 @@ pygeai/chat/iris.py,sha256=-9pDHQpWhR_PvbZ6rD8eMPFk46PI9sCdPQ9aAyvSexs,413
|
|
|
25
25
|
pygeai/chat/managers.py,sha256=f0BGfu9EF0G8rUyARslZi0pyDTL2yQadav0taCljI_I,3114
|
|
26
26
|
pygeai/chat/session.py,sha256=k7Y6rr9x7CfAGDI-Vt3c6eGLQX57YZ74lEVJGzwwdzw,1193
|
|
27
27
|
pygeai/chat/settings.py,sha256=-B2fEemZLifdsf7_7xNmWuFZYzL-yRqefivBmv3w8j8,124
|
|
28
|
-
pygeai/chat/ui.py,sha256
|
|
29
|
-
pygeai/cli/__init__.py,sha256=
|
|
28
|
+
pygeai/chat/ui.py,sha256=-xvjCzBwWlvyq-C0kN2YPczl4Q0alyJamXULOlGjKRA,34595
|
|
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=
|
|
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=
|
|
40
|
+
pygeai/cli/commands/chat.py,sha256=Y2e3NjDXYjutdxbpGUDmewZfKnR_QHb69Jz4L-2GHY4,25170
|
|
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,13 @@ 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=
|
|
60
|
+
pygeai/cli/commands/lab/ai_lab.py,sha256=KJMRY_xA-B_XBM2VjgniYt5UeAbcvUCZhzb1jXUUni8,129235
|
|
61
61
|
pygeai/cli/commands/lab/common.py,sha256=YBenPCVgK01Xaxgj1429bp_Ri1SN4beBxZk3dCLp7X0,6590
|
|
62
|
+
pygeai/cli/commands/lab/options.py,sha256=T13Vi97zochr0cU4yjyvvwWRPENILFDYpvqpU4uEBis,165
|
|
62
63
|
pygeai/cli/commands/lab/spec.py,sha256=EjNdEnljKpYPQyT4d4ViAPrM1g7oIitv6ddnWVkWXPk,8301
|
|
64
|
+
pygeai/cli/commands/lab/utils.py,sha256=uxhgHvCRrV6WYRxR2qd3nED_hhXcxJ1tAU8MlzoshEg,456
|
|
63
65
|
pygeai/cli/texts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
-
pygeai/cli/texts/help.py,sha256=
|
|
66
|
+
pygeai/cli/texts/help.py,sha256=0idAj91GTubRRXgN1t8_SRiF1Ou89ssHC5vKwONDxMM,16074
|
|
65
67
|
pygeai/core/__init__.py,sha256=bbNktFp7t2dOBIvWto-uGVBW8acaKIe8EKcfuLV-HmA,189
|
|
66
68
|
pygeai/core/handlers.py,sha256=la1QcQbLwfiNd-xDQ3jtWRHmeEm6E93Rfx5c-5bkLmw,934
|
|
67
69
|
pygeai/core/models.py,sha256=uIwrmlB6yuulScUcYIBSH3Sxm5YyzaicV7Dz2bYLi2I,24229
|
|
@@ -74,9 +76,9 @@ pygeai/core/base/models.py,sha256=_h62nnMhJXr1BLNoaldT4d9oqCTSistfF3D2LQ3bvlg,38
|
|
|
74
76
|
pygeai/core/base/responses.py,sha256=k-mrzNO_AtEsGTUJnyRT76FJ7gfYxQ_SAhB8MBNqPZI,763
|
|
75
77
|
pygeai/core/base/session.py,sha256=WVb4MmptwdgK7paHOSvfEle_HPXRRXO8CHgi0qbgtOg,2990
|
|
76
78
|
pygeai/core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
-
pygeai/core/common/config.py,sha256=
|
|
79
|
+
pygeai/core/common/config.py,sha256=uEPqTTonya8IBX0KSRI927cjUJ39JvYExnkqep-5U6o,4395
|
|
78
80
|
pygeai/core/common/decorators.py,sha256=X7Tv5XBmsuS7oZHSmI95eX8UkuukKoiOiNRl5w9lgR4,1227
|
|
79
|
-
pygeai/core/common/exceptions.py,sha256
|
|
81
|
+
pygeai/core/common/exceptions.py,sha256=-eF4V0B-27zfp0aHMlZWqWRIty6P7TCOrzMRW87ZnlE,1251
|
|
80
82
|
pygeai/core/embeddings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
83
|
pygeai/core/embeddings/clients.py,sha256=0r-BX4ptivIBNrsOAMgw0q5nNLrIU7UxJ3SD6MkfXX4,3543
|
|
82
84
|
pygeai/core/embeddings/endpoints.py,sha256=b__cuKQjribog9PSUeDzwrQ0vBO4WyYahLhLjDiUpL0,98
|
|
@@ -142,27 +144,28 @@ pygeai/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
142
144
|
pygeai/health/clients.py,sha256=U2eb1tkXt1Rf_KdV0ZFQS2k4wGnJTXHHd9-Er0eWQuw,1011
|
|
143
145
|
pygeai/health/endpoints.py,sha256=UAzMcqSXZtMj4r8M8B7a_a5LT6X_jMFNsCTvcsjNTYA,71
|
|
144
146
|
pygeai/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
|
+
pygeai/lab/clients.py,sha256=5JebyNpKCVwAQpeOAkJPIHRf_6hoKA3uUm9xewm01UQ,816
|
|
145
148
|
pygeai/lab/constants.py,sha256=ddgDnXP4GD0woi-FUJaJXzaWS3H6zmDN0B-v8utM95Q,170
|
|
146
|
-
pygeai/lab/managers.py,sha256=
|
|
149
|
+
pygeai/lab/managers.py,sha256=EGU2NTpZyWtPo-VBX_wSrNOjLNPBIt7cxha9lIbuXgk,70725
|
|
147
150
|
pygeai/lab/models.py,sha256=1m41gSqpXZVO9AcPVxzlsC-TgxZcCsgGUbpN5zoDMjU,71451
|
|
148
151
|
pygeai/lab/runners.py,sha256=-uaCPHpFyiKtVOxlEjPjAc9h-onSdGAcYJ5IAZPqlb0,4147
|
|
149
152
|
pygeai/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
150
|
-
pygeai/lab/agents/clients.py,sha256=
|
|
153
|
+
pygeai/lab/agents/clients.py,sha256=VIbKSDxSNH1P-CX6hF7LUcgtvrE3jvO_gu4KCtyzyls,21213
|
|
151
154
|
pygeai/lab/agents/endpoints.py,sha256=RpWbFwqgX_GCVn29DYM46PVon5qjD7C1SmzvcjEKMzI,696
|
|
152
155
|
pygeai/lab/agents/mappers.py,sha256=K6rxsO2Nq6GglmCUmyDKUNmzTG8HRbCelap6qaVKXQw,10583
|
|
153
156
|
pygeai/lab/processes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
|
-
pygeai/lab/processes/clients.py,sha256=
|
|
157
|
+
pygeai/lab/processes/clients.py,sha256=4OUf36Dhyd4hJZomeLcq9XDpLiCINwmfu6tHy69TkDE,49417
|
|
155
158
|
pygeai/lab/processes/endpoints.py,sha256=nFIEcNP22xe4j6URI6KcwTh7h-xgYjYYuHT6PDPiO3I,2100
|
|
156
159
|
pygeai/lab/processes/mappers.py,sha256=YOWcVKdcJmLMAq-f3qevzqQ8L_hjb0_jVXBdCHutpzk,15815
|
|
157
160
|
pygeai/lab/spec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
161
|
pygeai/lab/spec/loader.py,sha256=Dq9MhLqFwF4RPdBBaqKPGqt43-PrNlsHpe-NXe4S0qQ,709
|
|
159
162
|
pygeai/lab/spec/parsers.py,sha256=oG7tY-GylweRxpvtCl3p53t0IoTX3UZFiB77x__3Qp8,646
|
|
160
163
|
pygeai/lab/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
|
-
pygeai/lab/strategies/clients.py,sha256=
|
|
164
|
+
pygeai/lab/strategies/clients.py,sha256=_a1yc8kwd50Yv4g1jqfa0gRnMiROR7Dn0gx3xqFUjVE,10316
|
|
162
165
|
pygeai/lab/strategies/endpoints.py,sha256=LgEvUgeeN-X6VMl-tpl9_N12GRppLPScQmiMRk7Ri28,541
|
|
163
166
|
pygeai/lab/strategies/mappers.py,sha256=6C_jubAVXMKLGQy5NUD0OX7SlrU2mLe2QsgzeJ1-WKw,2437
|
|
164
167
|
pygeai/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
|
-
pygeai/lab/tools/clients.py,sha256=
|
|
168
|
+
pygeai/lab/tools/clients.py,sha256=3yESr0NQoO7qKi9s7VodxaV_4qjBlJ6cT_fBmEhyT48,28151
|
|
166
169
|
pygeai/lab/tools/endpoints.py,sha256=HiGoMs4OVeCgH7EAERTtifFPl53NryA1Awh7D6AO8bA,699
|
|
167
170
|
pygeai/lab/tools/mappers.py,sha256=bYi5k36h0k4mCvOnV-r8YOHKz0U9P0mH21GNs20w2eM,4998
|
|
168
171
|
pygeai/man/__init__.py,sha256=gqGI92vUPt6RPweoWX3mTUYPWNDlm6aGUjQOnYXqthk,53
|
|
@@ -268,15 +271,29 @@ pygeai/tests/gam/test_clients.py,sha256=vNz-4ux0cubztTY-_fEPWEoMCt5VAmZLecd0V-sE
|
|
|
268
271
|
pygeai/tests/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
269
272
|
pygeai/tests/health/test_clients.py,sha256=kfakkZHFMfo2IAN-PzmtMGmgR4iNiN1RpRopI--0qHI,1525
|
|
270
273
|
pygeai/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
274
|
+
pygeai/tests/integration/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
275
|
+
pygeai/tests/integration/assistants/rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
276
|
+
pygeai/tests/integration/assistants/rag/test_create_rag.py,sha256=yTHlfTUi7DeZRzo4T25sqAAoS3mV5apN-Elf1DX8aoM,2121
|
|
277
|
+
pygeai/tests/integration/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
278
|
+
pygeai/tests/integration/chat/test_generate_image.py,sha256=byCQQK6dIy68yPAhAa66bh7N0Xz5WnKSClx1vaIIzZA,5431
|
|
271
279
|
pygeai/tests/integration/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
272
280
|
pygeai/tests/integration/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
273
281
|
pygeai/tests/integration/lab/agents/test_agents_list.py,sha256=F2KUCdeiaBC3dn8ARNWqSz_kJcRyA0HC1nquhamN35Q,4187
|
|
274
|
-
pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=
|
|
282
|
+
pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=JLCnrij_uS4wTvu06Ng3ODfLTikFQwmPep4HG0ebUKI,14104
|
|
275
283
|
pygeai/tests/integration/lab/agents/test_create_sharing_link.py,sha256=y-e8Q_TfuLz7XXMRERSKA_-OQJUMBIsJcK0lQ0Oh858,2467
|
|
276
284
|
pygeai/tests/integration/lab/agents/test_delete_agent.py,sha256=sb3RfoZJdzQvcVdNcXY2C2FO3yY1ZNiAZ_6Ay6f331E,2524
|
|
277
285
|
pygeai/tests/integration/lab/agents/test_get_agent.py,sha256=oW1F6SENvhL9jZC021Rj-f_Xek2DSTx3SsZBr3YT6Hk,3666
|
|
278
|
-
pygeai/tests/integration/lab/agents/test_publish_agent_revision.py,sha256=
|
|
279
|
-
pygeai/tests/integration/lab/agents/test_update_agent.py,sha256=
|
|
286
|
+
pygeai/tests/integration/lab/agents/test_publish_agent_revision.py,sha256=PGlYn8y2L2FUfSG3NGDPHl3ZyIiohhir1spYqO6J3xY,5182
|
|
287
|
+
pygeai/tests/integration/lab/agents/test_update_agent.py,sha256=X3SpA1CPr4ZZQazsCSv8Z9rDcHJTih1c8AFKdwW80xg,11624
|
|
288
|
+
pygeai/tests/integration/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
289
|
+
pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=0Yzlu9ATnsxPVPa4vO4j-j5Hc6VyHQ2KoSaf0dfmqpk,12351
|
|
290
|
+
pygeai/tests/integration/lab/tools/test_delete_tool.py,sha256=wy979nZh8ERd-k3jhJTjHqG4wxWE4sx-r4yn2nBc7Aw,2913
|
|
291
|
+
pygeai/tests/integration/lab/tools/test_get_parameter.py,sha256=r5TIaY_ABdyrtGfQwvs6F76dxEoy5HnvOSDwYpZo4ow,3610
|
|
292
|
+
pygeai/tests/integration/lab/tools/test_get_tool.py,sha256=3fVDQlklmvOUgYDp0ATv5RqRmApgD4Qw_YGqjBOaOOo,3437
|
|
293
|
+
pygeai/tests/integration/lab/tools/test_list_tools.py,sha256=KMLWXUmk_hKChKo4t5xEZtuIS1UmhAH6VdEq15KCrbY,3744
|
|
294
|
+
pygeai/tests/integration/lab/tools/test_publish_tool_revision.py,sha256=AoCdHF8f7jUwAEL3PUvZMEE67m8OCcn_hqY67thJplU,4589
|
|
295
|
+
pygeai/tests/integration/lab/tools/test_set_parameter.py,sha256=NqLVMlOF4QiTcc2HTdVaJuWCrEvb5QkOX_xScyjyWGU,4025
|
|
296
|
+
pygeai/tests/integration/lab/tools/test_update_tool.py,sha256=tZKZDoYS6RuTdRLgAmENq5tRvK-MohJGCt-s83QoBCA,11683
|
|
280
297
|
pygeai/tests/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
281
298
|
pygeai/tests/lab/test_managers.py,sha256=AsOAvyCkRpbskEy214aV2TwrqilWH6bxOiTWDOb1twQ,29778
|
|
282
299
|
pygeai/tests/lab/test_mappers.py,sha256=2cLSggf168XWFpeZeBR7uJ-8C32TKb7qA91i_9fr_b0,11409
|
|
@@ -368,9 +385,11 @@ pygeai/tests/snippets/lab/runner_1.py,sha256=QD92MvC22wpWj6YyrSgpp46EcL0ciac2x1z
|
|
|
368
385
|
pygeai/tests/snippets/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
369
386
|
pygeai/tests/snippets/lab/agents/create_agent.py,sha256=EVyfQzDST9A9KaM0ToZJKlJ7yCbfhpSVkVK_MaUVQPw,1875
|
|
370
387
|
pygeai/tests/snippets/lab/agents/create_agent_2.py,sha256=jd7HKhle_c0S0vI80AejOyLaNqBWkILlRF_znzyCGcQ,1879
|
|
388
|
+
pygeai/tests/snippets/lab/agents/create_agent_edge_case.py,sha256=8dA9giNdsHjFZsIWTlBFk8e1QS3YtbZxklsVu0ZrDrk,1877
|
|
389
|
+
pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py,sha256=jd7HKhle_c0S0vI80AejOyLaNqBWkILlRF_znzyCGcQ,1879
|
|
371
390
|
pygeai/tests/snippets/lab/agents/delete_agent.py,sha256=GfDX667_V3tZMz3vjsbrxoFZggzpwjZYH_PVO2Qjw5s,269
|
|
372
391
|
pygeai/tests/snippets/lab/agents/get_agent.py,sha256=bcqloJHwmNsFjEfri6QIRaTuHzwLtfEqIQPIC5pdkWQ,516
|
|
373
|
-
pygeai/tests/snippets/lab/agents/get_sharing_link.py,sha256=
|
|
392
|
+
pygeai/tests/snippets/lab/agents/get_sharing_link.py,sha256=FSXuzbX8Folh1h_6liHeZyA8T21_Y-2Ws9B6-uXatDU,316
|
|
374
393
|
pygeai/tests/snippets/lab/agents/list_agents.py,sha256=gY5RBFUozhkk1uJO6opjkLmKmYpF9Ws-B7Oibhs99qQ,457
|
|
375
394
|
pygeai/tests/snippets/lab/agents/publish_agent_revision.py,sha256=ATbFnnSLYRmFTC4GJJUyBwxKosoTWx661Q9FpuktREM,344
|
|
376
395
|
pygeai/tests/snippets/lab/agents/update_agent.py,sha256=6qCnqkowCCygEl3tv_nvdlwXG8k0-LEloKYQUdIfkrs,1943
|
|
@@ -393,7 +412,8 @@ pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py,sha256=OxxXIRWH_c
|
|
|
393
412
|
pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py,sha256=4pqsW16m-oiv_UUVLgZrkeWZESIfDq2nvcfNC0ZpAGo,485
|
|
394
413
|
pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py,sha256=OIoHNkdnXbC9GacPgXUG1jKlVizVtWfRI-E8_3xF5b0,889
|
|
395
414
|
pygeai/tests/snippets/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
396
|
-
pygeai/tests/snippets/lab/tools/create_tool.py,sha256=
|
|
415
|
+
pygeai/tests/snippets/lab/tools/create_tool.py,sha256=X8qoL7TOk9Gm7jyk5MvhB5V-TBvog3TETCLNL90Z3HA,1400
|
|
416
|
+
pygeai/tests/snippets/lab/tools/create_tool_edge_case.py,sha256=8w4mvoRTMTyc70yYm2bgV2dr_Rh5QpPJR8VoqX-eY-s,1465
|
|
397
417
|
pygeai/tests/snippets/lab/tools/delete_tool.py,sha256=pnIkYvdP7X7Gx79AMK5MSVliIXdHSpyVwRhH3kgi7ys,452
|
|
398
418
|
pygeai/tests/snippets/lab/tools/get_parameter.py,sha256=dXdlHhoWxzZIYdsvHKnLLT5Vff2Tip46XCoOo-B8Gf0,490
|
|
399
419
|
pygeai/tests/snippets/lab/tools/get_tool.py,sha256=-fkKAE6nflwtLY_Lf6itZJyx_9aanFp-TSDHUzub1AM,477
|
|
@@ -482,9 +502,9 @@ pygeai/vendor/a2a/utils/helpers.py,sha256=6Tbd8SVfXvdNEk6WYmLOjrAxkzFf1aIg8dkFfB
|
|
|
482
502
|
pygeai/vendor/a2a/utils/message.py,sha256=gc_EKO69CJ4HkR76IFgsy-kENJz1dn7CfSgWJWvt-gs,2197
|
|
483
503
|
pygeai/vendor/a2a/utils/task.py,sha256=BYRA_L1HpoUGJAVlyHML0lCM9Awhf2Ovjj7oPFXKbh0,1647
|
|
484
504
|
pygeai/vendor/a2a/utils/telemetry.py,sha256=VvSp1Ztqaobkmq9-3sNhhPEilJS32-JTSfKzegkj6FU,10861
|
|
485
|
-
pygeai-0.
|
|
486
|
-
pygeai-0.
|
|
487
|
-
pygeai-0.
|
|
488
|
-
pygeai-0.
|
|
489
|
-
pygeai-0.
|
|
490
|
-
pygeai-0.
|
|
505
|
+
pygeai-0.4.0.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
|
|
506
|
+
pygeai-0.4.0.dist-info/METADATA,sha256=1mO96mgfRX1G1mJivH1rOUJP3B6maoRX3Ckb3IK_3ig,6938
|
|
507
|
+
pygeai-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
508
|
+
pygeai-0.4.0.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
|
|
509
|
+
pygeai-0.4.0.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
|
|
510
|
+
pygeai-0.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|