pygeai 0.4.0b10__py3-none-any.whl → 0.4.0b12__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/chat/ui.py +0 -1
- pygeai/cli/commands/chat.py +47 -55
- pygeai/cli/commands/lab/ai_lab.py +0 -1
- pygeai/core/common/config.py +0 -2
- pygeai/lab/managers.py +2 -2
- pygeai/lab/tools/clients.py +13 -17
- 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/lab/agents/test_create_agent.py +0 -1
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +0 -1
- pygeai/tests/integration/lab/agents/test_update_agent.py +0 -1
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -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/snippets/lab/agents/get_sharing_link.py +1 -2
- pygeai/tests/snippets/lab/tools/create_tool.py +1 -1
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/METADATA +1 -1
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/RECORD +23 -17
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/WHEEL +0 -0
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/entry_points.txt +0 -0
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.4.0b10.dist-info → pygeai-0.4.0b12.dist-info}/top_level.txt +0 -0
pygeai/chat/ui.py
CHANGED
pygeai/cli/commands/chat.py
CHANGED
|
@@ -362,7 +362,7 @@ def chat_with_agent(option_list: list):
|
|
|
362
362
|
raise MissingRequirementException(f"Agent name must be specified.")
|
|
363
363
|
|
|
364
364
|
project_id = get_project_id()
|
|
365
|
-
agent_data = AgentClient().get_agent(
|
|
365
|
+
agent_data = AgentClient(project_id=project_id).get_agent(agent_id=agent_name)
|
|
366
366
|
if 'errors' in agent_data:
|
|
367
367
|
raise InvalidAgentException(f"There is no agent with that name: {agent_data.get('errors')}")
|
|
368
368
|
|
|
@@ -374,62 +374,54 @@ def chat_with_agent(option_list: list):
|
|
|
374
374
|
Console.write_stderr("Streamlit is required for GUI mode. Install it with 'pip install streamlit'.")
|
|
375
375
|
sys.exit(1)
|
|
376
376
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
377
|
+
try:
|
|
378
|
+
ui_path = resources.files("pygeai.chat").joinpath("ui.py")
|
|
379
|
+
ui_file_path = str(ui_path)
|
|
380
|
+
|
|
381
|
+
# Add the top-level project root to PYTHONPATH
|
|
382
|
+
package_root = str(Path(ui_file_path).resolve().parents[2])
|
|
383
|
+
env = os.environ.copy()
|
|
384
|
+
env["PYTHONPATH"] = package_root + os.pathsep + env.get("PYTHONPATH", "")
|
|
385
|
+
|
|
386
|
+
streamlit_cmd = [
|
|
387
|
+
sys.executable, "-m", "streamlit", "run", ui_file_path,
|
|
388
|
+
"--server.address", "127.0.0.1",
|
|
389
|
+
"--", "--agent-name", agent_name
|
|
390
|
+
]
|
|
391
|
+
|
|
392
|
+
if platform.system() == "Linux":
|
|
393
|
+
streamlit_cmd.insert(5, "--server.headless=true")
|
|
394
|
+
|
|
395
|
+
process = subprocess.Popen(
|
|
396
|
+
streamlit_cmd,
|
|
397
|
+
stdout=subprocess.PIPE,
|
|
398
|
+
stderr=subprocess.PIPE,
|
|
399
|
+
text=True
|
|
400
|
+
)
|
|
384
401
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
# Add the top-level project root to PYTHONPATH
|
|
390
|
-
package_root = str(Path(ui_file_path).resolve().parents[2])
|
|
391
|
-
env = os.environ.copy()
|
|
392
|
-
env["PYTHONPATH"] = package_root + os.pathsep + env.get("PYTHONPATH", "")
|
|
393
|
-
|
|
394
|
-
streamlit_cmd = [
|
|
395
|
-
sys.executable, "-m", "streamlit", "run", ui_file_path,
|
|
396
|
-
"--server.address", "127.0.0.1",
|
|
397
|
-
"--", "--agent-name", agent_name
|
|
398
|
-
]
|
|
399
|
-
|
|
400
|
-
if platform.system() == "Linux":
|
|
401
|
-
streamlit_cmd.insert(5, "--server.headless=true")
|
|
402
|
-
|
|
403
|
-
process = subprocess.Popen(
|
|
404
|
-
streamlit_cmd,
|
|
405
|
-
stdout=subprocess.PIPE,
|
|
406
|
-
stderr=subprocess.PIPE,
|
|
407
|
-
text=True
|
|
408
|
-
)
|
|
409
|
-
|
|
410
|
-
url = "http://localhost:8501"
|
|
411
|
-
if platform.system() == "Linux":
|
|
412
|
-
Console.write_stdout(f"Open Streamlit app at {url} (or next port like 8502 if 8501 is taken)")
|
|
413
|
-
|
|
414
|
-
try:
|
|
415
|
-
stdout, stderr = process.communicate()
|
|
416
|
-
if stderr:
|
|
417
|
-
logger.error(f"Streamlit stderr:\n{stderr}")
|
|
418
|
-
Console.write_stderr(f"Streamlit error:\n{stderr}")
|
|
419
|
-
except KeyboardInterrupt:
|
|
420
|
-
process.terminate()
|
|
421
|
-
Console.write_stdout("Streamlit stopped.")
|
|
422
|
-
sys.exit(0)
|
|
402
|
+
url = "http://localhost:8501"
|
|
403
|
+
if platform.system() == "Linux":
|
|
404
|
+
Console.write_stdout(f"Open Streamlit app at {url} (or next port like 8502 if 8501 is taken)")
|
|
423
405
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
sys.exit(
|
|
406
|
+
try:
|
|
407
|
+
stdout, stderr = process.communicate()
|
|
408
|
+
if stderr:
|
|
409
|
+
logger.error(f"Streamlit stderr:\n{stderr}")
|
|
410
|
+
Console.write_stderr(f"Streamlit error:\n{stderr}")
|
|
411
|
+
except KeyboardInterrupt:
|
|
412
|
+
process.terminate()
|
|
413
|
+
Console.write_stdout("Streamlit stopped.")
|
|
414
|
+
sys.exit(0)
|
|
415
|
+
|
|
416
|
+
except FileNotFoundError:
|
|
417
|
+
logger.error("Could not locate pygeai/chat/ui.py")
|
|
418
|
+
Console.write_stderr("Streamlit UI file not found. Ensure pygeai is installed correctly.")
|
|
419
|
+
sys.exit(1)
|
|
420
|
+
except Exception as e:
|
|
421
|
+
logger.error(f"Streamlit error: {e}")
|
|
422
|
+
Console.write_stderr(
|
|
423
|
+
f"Failed to launch Streamlit. Check port with 'lsof -i :8501' and kill any process, or try {url}.")
|
|
424
|
+
sys.exit(1)
|
|
433
425
|
else:
|
|
434
426
|
chat_session = AgentChatSession(agent_name)
|
|
435
427
|
messages = list()
|
|
@@ -15,7 +15,6 @@ from pygeai.lab.processes.clients import AgenticProcessClient
|
|
|
15
15
|
from pygeai.lab.strategies.clients import ReasoningStrategyClient
|
|
16
16
|
from pygeai.lab.tools.clients import ToolClient
|
|
17
17
|
from pygeai.lab.constants import VALID_SCOPES
|
|
18
|
-
from pygeai.tests.snippets.lab.crud_ui import project_id
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
def show_help():
|
pygeai/core/common/config.py
CHANGED
|
@@ -114,9 +114,7 @@ def get_settings():
|
|
|
114
114
|
|
|
115
115
|
if __name__ == "__main__":
|
|
116
116
|
settings = get_settings()
|
|
117
|
-
geai_api_key = settings.get_api_key()
|
|
118
117
|
geai_base_url = settings.get_base_url()
|
|
119
118
|
geai_eval_url = settings.get_eval_url()
|
|
120
|
-
print(f"api_key: {geai_api_key}")
|
|
121
119
|
print(f"base_url: {geai_base_url}")
|
|
122
120
|
print(f"eval_url: {geai_eval_url}")
|
pygeai/lab/managers.py
CHANGED
|
@@ -559,7 +559,7 @@ class AILabManager:
|
|
|
559
559
|
tool_id: Optional[str] = None,
|
|
560
560
|
tool_public_name: Optional[str] = None,
|
|
561
561
|
parameters: List[ToolParameter] = None
|
|
562
|
-
) ->
|
|
562
|
+
) -> EmptyResponse:
|
|
563
563
|
"""
|
|
564
564
|
Sets or updates parameters for a specific tool in the specified project.
|
|
565
565
|
|
|
@@ -591,7 +591,7 @@ class AILabManager:
|
|
|
591
591
|
logger.error(f"Error received while setting tool parameters: {error}")
|
|
592
592
|
raise APIError(f"Error received while setting tool parameters: {error}")
|
|
593
593
|
|
|
594
|
-
result =
|
|
594
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Parameter set successfully")
|
|
595
595
|
return result
|
|
596
596
|
|
|
597
597
|
def list_reasoning_strategies(
|
pygeai/lab/tools/clients.py
CHANGED
|
@@ -114,7 +114,8 @@ class ToolClient(AILabClient):
|
|
|
114
114
|
headers=headers,
|
|
115
115
|
data=data
|
|
116
116
|
)
|
|
117
|
-
|
|
117
|
+
|
|
118
|
+
if response.status_code >= 300:
|
|
118
119
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
119
120
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
120
121
|
try:
|
|
@@ -168,7 +169,7 @@ class ToolClient(AILabClient):
|
|
|
168
169
|
"allowExternal": allow_external
|
|
169
170
|
}
|
|
170
171
|
)
|
|
171
|
-
if response.status_code
|
|
172
|
+
if response.status_code >= 300:
|
|
172
173
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
173
174
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
174
175
|
try:
|
|
@@ -212,7 +213,7 @@ class ToolClient(AILabClient):
|
|
|
212
213
|
"allowDrafts": allow_drafts,
|
|
213
214
|
}
|
|
214
215
|
)
|
|
215
|
-
if response.status_code
|
|
216
|
+
if response.status_code >= 300:
|
|
216
217
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
217
218
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
218
219
|
try:
|
|
@@ -255,7 +256,7 @@ class ToolClient(AILabClient):
|
|
|
255
256
|
endpoint=endpoint,
|
|
256
257
|
headers=headers
|
|
257
258
|
)
|
|
258
|
-
if response.status_code
|
|
259
|
+
if response.status_code >= 300:
|
|
259
260
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
260
261
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
261
262
|
|
|
@@ -375,7 +376,7 @@ class ToolClient(AILabClient):
|
|
|
375
376
|
headers=headers,
|
|
376
377
|
data=data
|
|
377
378
|
)
|
|
378
|
-
if response.status_code
|
|
379
|
+
if response.status_code >= 300:
|
|
379
380
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
380
381
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
381
382
|
try:
|
|
@@ -463,7 +464,7 @@ class ToolClient(AILabClient):
|
|
|
463
464
|
"allowDrafts": allow_drafts,
|
|
464
465
|
}
|
|
465
466
|
)
|
|
466
|
-
if response.status_code
|
|
467
|
+
if response.status_code >= 300:
|
|
467
468
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
468
469
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
469
470
|
try:
|
|
@@ -520,16 +521,11 @@ class ToolClient(AILabClient):
|
|
|
520
521
|
headers=headers,
|
|
521
522
|
data=data
|
|
522
523
|
)
|
|
523
|
-
if response.status_code !=
|
|
524
|
-
logger.error(f"
|
|
525
|
-
raise
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
except JSONDecodeError as e:
|
|
529
|
-
logger.error(f"Unable to set parameters for tool {tool_id or tool_public_name} in project {self.project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
|
|
530
|
-
raise InvalidAPIResponseException(f"Unable to set parameters for tool {tool_id or tool_public_name} in project {self.project_id}: {response.text}")
|
|
531
|
-
|
|
532
|
-
return result
|
|
524
|
+
if response.status_code != 204:
|
|
525
|
+
logger.error(f"Unable to set parameter for tool {tool_id or tool_public_name} from project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
526
|
+
raise InvalidAPIResponseException(f"Unable to set parameter for tool {tool_id or tool_public_name} from project {self.project_id}: {response.text}")
|
|
527
|
+
else:
|
|
528
|
+
return {}
|
|
533
529
|
|
|
534
530
|
def export_tool(
|
|
535
531
|
self,
|
|
@@ -559,7 +555,7 @@ class ToolClient(AILabClient):
|
|
|
559
555
|
endpoint=endpoint,
|
|
560
556
|
headers=headers,
|
|
561
557
|
)
|
|
562
|
-
if response.status_code
|
|
558
|
+
if response.status_code >= 300:
|
|
563
559
|
logger.error(f"Invalid status code returned from the API endpoint: {response.text}")
|
|
564
560
|
raise APIResponseError(f"API returned an error: {response.text}")
|
|
565
561
|
try:
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
from pygeai.assistant.managers import AssistantManager
|
|
3
|
+
from pygeai.core.models import WelcomeData, LlmSettings
|
|
4
|
+
from pygeai.assistant.rag.models import (
|
|
5
|
+
Search,
|
|
6
|
+
RetrieverOptions,
|
|
7
|
+
SearchOptions,
|
|
8
|
+
ChunkOptions,
|
|
9
|
+
IndexOptions,
|
|
10
|
+
RAGAssistant,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
assistant_manager = AssistantManager(alias="beta")
|
|
14
|
+
|
|
15
|
+
class TestAssistantCreateRagIntegration(TestCase):
|
|
16
|
+
|
|
17
|
+
def __load_rag(self):
|
|
18
|
+
llm_options = LlmSettings(
|
|
19
|
+
cache=False,
|
|
20
|
+
temperature=0.1,
|
|
21
|
+
max_tokens=999,
|
|
22
|
+
model_name="gpt-3.5-turbo-16k",
|
|
23
|
+
n=1,
|
|
24
|
+
presence_penalty=0,
|
|
25
|
+
frequency_penalty=0,
|
|
26
|
+
provider="OpenAI",
|
|
27
|
+
stream=False,
|
|
28
|
+
top_p=1.0,
|
|
29
|
+
type=None,
|
|
30
|
+
verbose=True,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
retriever_options = RetrieverOptions(type="vectorStore")
|
|
34
|
+
|
|
35
|
+
search_options = SearchOptions(
|
|
36
|
+
history_count=2,
|
|
37
|
+
llm=llm_options,
|
|
38
|
+
search=Search(
|
|
39
|
+
k=5,
|
|
40
|
+
return_source_documents=False,
|
|
41
|
+
score_threshold=0,
|
|
42
|
+
prompt="Use {context} and {question}",
|
|
43
|
+
template="",
|
|
44
|
+
),
|
|
45
|
+
retriever=retriever_options,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
chunk_options = ChunkOptions(chunk_size=999, chunk_overlap=0)
|
|
49
|
+
|
|
50
|
+
index_options = IndexOptions(chunks=chunk_options)
|
|
51
|
+
|
|
52
|
+
welcome_data = WelcomeData(
|
|
53
|
+
title="Test Profile Welcome Data",
|
|
54
|
+
description="Test Profile with WelcomeData",
|
|
55
|
+
features=[],
|
|
56
|
+
examples_prompt=[],
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return RAGAssistant(
|
|
60
|
+
name="Testaasdfasdfsasdfdfsdfsdf123in123g12355",
|
|
61
|
+
description="Test Profile with WelcomeData",
|
|
62
|
+
search_options=search_options,
|
|
63
|
+
index_options=index_options,
|
|
64
|
+
welcome_data=welcome_data,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_create_rag_assistant(self):
|
|
69
|
+
rag_assistant = self.__load_rag()
|
|
70
|
+
response = assistant_manager.create_assistant(rag_assistant)
|
|
71
|
+
|
|
72
|
+
self.assertIsInstance(response, RAGAssistant, "Failed to create RAG assistant")
|
|
@@ -33,7 +33,6 @@ class TestAILabCreateAgentIntegration(TestCase):
|
|
|
33
33
|
access_scope="public",
|
|
34
34
|
public_name=f"public_{random_str}",
|
|
35
35
|
job_description="Translator",
|
|
36
|
-
avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
37
36
|
description="Agent that translates from any language to english.",
|
|
38
37
|
agent_data=AgentData(
|
|
39
38
|
prompt=Prompt(
|
|
@@ -28,7 +28,6 @@ class TestAILabPublishAgentRevisionIntegration(TestCase):
|
|
|
28
28
|
access_scope="public",
|
|
29
29
|
public_name=f"public_{random_str}",
|
|
30
30
|
job_description=f"SummarizerAgent{random_str}",
|
|
31
|
-
avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
32
31
|
description=f"Agent that summarized documents. {random_str}",
|
|
33
32
|
agent_data=AgentData(
|
|
34
33
|
prompt=Prompt(
|
|
@@ -25,7 +25,6 @@ class TestAILabUpdateAgentIntegration(TestCase):
|
|
|
25
25
|
access_scope="public",
|
|
26
26
|
public_name=f"public_{random_str}",
|
|
27
27
|
job_description=f"SummarizerAgent{random_str}",
|
|
28
|
-
avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
29
28
|
description=f"Agent that summarized documents. {random_str}",
|
|
30
29
|
agent_data=AgentData(
|
|
31
30
|
prompt=Prompt(
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
from pygeai.lab.managers import AILabManager
|
|
3
|
+
from pygeai.lab.models import FilterSettings, ToolParameter
|
|
4
|
+
from pygeai.core.common.exceptions import APIResponseError, MissingRequirementException
|
|
5
|
+
import copy
|
|
6
|
+
|
|
7
|
+
ai_lab_manager: AILabManager
|
|
8
|
+
|
|
9
|
+
class TestAILabGetParameterIntegration(TestCase):
|
|
10
|
+
|
|
11
|
+
def setUp(self):
|
|
12
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
13
|
+
self.tool_id = "42610b61-cb47-49bf-9475-36ee652f31f3"
|
|
14
|
+
self.filter_settings = FilterSettings(
|
|
15
|
+
revision="0",
|
|
16
|
+
version="0",
|
|
17
|
+
allow_drafts=True
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def __get_parameter(self, tool_id: str = None, tool_public_name: str = None, filter_settings: FilterSettings = None):
|
|
22
|
+
return self.ai_lab_manager.get_parameter(
|
|
23
|
+
tool_id=self.tool_id if tool_id is None else tool_id,
|
|
24
|
+
tool_public_name=tool_public_name,
|
|
25
|
+
filter_settings=self.filter_settings if filter_settings is None else filter_settings
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_get_parameter(self):
|
|
30
|
+
tool_parameters = self.__get_parameter()
|
|
31
|
+
|
|
32
|
+
for param in tool_parameters:
|
|
33
|
+
self.assertIsInstance(param, ToolParameter, "Expected a tool parameter")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_get_parameter_invalid_tool_id(self):
|
|
37
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
38
|
+
|
|
39
|
+
with self.assertRaises(APIResponseError) as exception:
|
|
40
|
+
self.__get_parameter(tool_id=invalid_id)
|
|
41
|
+
self.assertIn(
|
|
42
|
+
f"Tool not found [IdOrName= {invalid_id}]",
|
|
43
|
+
str(exception.exception),
|
|
44
|
+
"Expected error when trying to send an invalid tool id"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_get_parameter_no_tool_id(self):
|
|
49
|
+
with self.assertRaises(MissingRequirementException) as exception:
|
|
50
|
+
self.__get_parameter(tool_id="")
|
|
51
|
+
self.assertIn(
|
|
52
|
+
"Either tool_id or tool_public_name must be provided.",
|
|
53
|
+
str(exception.exception),
|
|
54
|
+
"Expected error when trying to send a request without tool_id"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_get_parameter_by_tool_public_name(self):
|
|
59
|
+
tool_parameters = self.__get_parameter(tool_public_name="test.sdk.beta.tool")
|
|
60
|
+
|
|
61
|
+
for param in tool_parameters:
|
|
62
|
+
self.assertIsInstance(param, ToolParameter, "Expected a tool parameter")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_get_parameter_by_invalid_public_name(self):
|
|
66
|
+
invalid_public_name = "test.sdk.beta.tool.invalid"
|
|
67
|
+
|
|
68
|
+
with self.assertRaises(APIResponseError) as exception:
|
|
69
|
+
self.__get_parameter(tool_public_name=invalid_public_name)
|
|
70
|
+
self.assertIn(
|
|
71
|
+
f"Tool not found [IdOrName= {invalid_public_name}]",
|
|
72
|
+
str(exception.exception),
|
|
73
|
+
"Expected error when trying to send a request without tool_id"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_get_parameter_by_past_revision(self):
|
|
78
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
79
|
+
filter_settings.revision = "3"
|
|
80
|
+
|
|
81
|
+
with self.assertRaises(APIResponseError) as exception:
|
|
82
|
+
self.__get_parameter(filter_settings=filter_settings)
|
|
83
|
+
self.assertIn(
|
|
84
|
+
"Requested revision not found [revision=3].",
|
|
85
|
+
str(exception.exception),
|
|
86
|
+
"Expected error when trying to send a request without tool_id"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_get_parameter_by_draft_revision(self):
|
|
91
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
92
|
+
filter_settings.revision = "10"
|
|
93
|
+
tool_parameters = self.__get_parameter(filter_settings=filter_settings)
|
|
94
|
+
|
|
95
|
+
for param in tool_parameters:
|
|
96
|
+
self.assertIsInstance(param, ToolParameter, "Expected a tool parameter")
|
|
97
|
+
|
|
98
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import uuid
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import Tool
|
|
5
|
+
from pygeai.core.common.exceptions import APIError
|
|
6
|
+
|
|
7
|
+
ai_lab_manager: AILabManager
|
|
8
|
+
|
|
9
|
+
class TestAILabPublishToolRevisionIntegration(TestCase):
|
|
10
|
+
|
|
11
|
+
def setUp(self):
|
|
12
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
13
|
+
self.tool_id = "c77e1f2e-0322-4dd0-b6ec-aff217f1cb32"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def __publish_tool_revision(self, revision: str, tool_id=None):
|
|
17
|
+
return self.ai_lab_manager.publish_tool_revision(
|
|
18
|
+
tool_id=self.tool_id if tool_id is None else tool_id,
|
|
19
|
+
revision=revision
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
def __load_tool(self):
|
|
23
|
+
self.random_str = str(uuid.uuid4())
|
|
24
|
+
return Tool(
|
|
25
|
+
id="c77e1f2e-0322-4dd0-b6ec-aff217f1cb32",
|
|
26
|
+
name=f"sdk_project_updated_tool_{self.random_str}",
|
|
27
|
+
description=f"Tool updated for sdk testing purposes {self.random_str}",
|
|
28
|
+
scope="builtin",
|
|
29
|
+
openApi="https://raw.usercontent.com//openapi.json",
|
|
30
|
+
openApiJson={"openapi": "3.0.0","info": {"title": f"Simple API overview {self.random_str}","version": "3.0.0"}},
|
|
31
|
+
accessScope="private",
|
|
32
|
+
reportEvents="None",
|
|
33
|
+
parameters=[{
|
|
34
|
+
"key": "param",
|
|
35
|
+
"description": f"param description {self.random_str}",
|
|
36
|
+
"type":"app",
|
|
37
|
+
"value": f"value {self.random_str}",
|
|
38
|
+
"data_type": "String",
|
|
39
|
+
"isRequired": False
|
|
40
|
+
}]
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def __update_tool(self, tool: Tool = None, automatic_publish: bool = False, upsert: bool = False):
|
|
45
|
+
"""
|
|
46
|
+
Helper method to update a tool.
|
|
47
|
+
"""
|
|
48
|
+
tool = self.__load_tool()
|
|
49
|
+
return self.ai_lab_manager.update_tool(
|
|
50
|
+
tool = tool,
|
|
51
|
+
automatic_publish=False,
|
|
52
|
+
upsert=False
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_publish_tool_revision(self):
|
|
57
|
+
updated_tool = self.__update_tool()
|
|
58
|
+
new_revision = updated_tool.revision
|
|
59
|
+
|
|
60
|
+
published_tool = self.__publish_tool_revision(revision=str(new_revision))
|
|
61
|
+
|
|
62
|
+
self.assertFalse(published_tool.is_draft, "Expected draft to be false after publishing the revision")
|
|
63
|
+
self.assertEqual(published_tool.revision, new_revision, "Expected last revision to be published")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_publish_tool_earlier_revision_with_newer_revision_published(self):
|
|
67
|
+
with self.assertRaises(APIError) as exception:
|
|
68
|
+
self.__publish_tool_revision(revision="1")
|
|
69
|
+
self.assertIn(
|
|
70
|
+
"There are newer published revisions.",
|
|
71
|
+
str(exception.exception),
|
|
72
|
+
"Expected error when trying to send a earlier revision"
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_publish_tool_earlier_revision(self):
|
|
77
|
+
earlier_revision = (self.__update_tool()).revision
|
|
78
|
+
#update the tool to create a newer revision
|
|
79
|
+
self.__update_tool()
|
|
80
|
+
|
|
81
|
+
published_tool = self.__publish_tool_revision(revision=earlier_revision)
|
|
82
|
+
|
|
83
|
+
self.assertFalse(published_tool.is_draft, "Expected draft to be false after publishing the revision")
|
|
84
|
+
self.assertEqual(published_tool.revision, earlier_revision, "Expected last revision to be published")
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def test_publish_tool_invalid_revision(self):
|
|
88
|
+
with self.assertRaises(APIError) as exception:
|
|
89
|
+
self.__publish_tool_revision(revision="10000000")
|
|
90
|
+
self.assertIn(
|
|
91
|
+
"Invalid revision [rev=10000000]",
|
|
92
|
+
str(exception.exception),
|
|
93
|
+
"Expected error when trying to send a revision that does not exist"
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_publish_tool_string_revision(self):
|
|
98
|
+
with self.assertRaises(APIError) as exception:
|
|
99
|
+
self.__publish_tool_revision(revision="revision")
|
|
100
|
+
self.assertIn("Bad Request", str(exception.exception))
|
|
101
|
+
self.assertIn("400", str(exception.exception))
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_publish_tool_invalid_tool_id(self):
|
|
105
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
106
|
+
with self.assertRaises(APIError) as exception:
|
|
107
|
+
self.__publish_tool_revision(revision="103", tool_id=invalid_id)
|
|
108
|
+
self.assertIn(
|
|
109
|
+
f"Tool not found [IdOrName= {invalid_id}].",
|
|
110
|
+
str(exception.exception),
|
|
111
|
+
"Expected error when sending and invalid agent id"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def test_publish_tool_no_tool_id(self):
|
|
116
|
+
with self.assertRaises(APIError) as exception:
|
|
117
|
+
self.__publish_tool_revision(revision="103", tool_id="")
|
|
118
|
+
self.assertIn("Not Found", str(exception.exception))
|
|
119
|
+
self.assertIn("404", str(exception.exception))
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import uuid
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import ToolParameter
|
|
5
|
+
from pygeai.core.common.exceptions import MissingRequirementException, InvalidAPIResponseException
|
|
6
|
+
|
|
7
|
+
ai_lab_manager: AILabManager
|
|
8
|
+
|
|
9
|
+
class TestAILabSetParameterIntegration(TestCase):
|
|
10
|
+
def setUp(self):
|
|
11
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
12
|
+
self.tool_id = "42610b61-cb47-49bf-9475-36ee652f31f3"
|
|
13
|
+
self.tool_parameters = self.__load_parameters()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def __set_parameter(self, tool_id: str = None, tool_public_name: str = None, parameters: list = None):
|
|
17
|
+
return self.ai_lab_manager.set_parameter(
|
|
18
|
+
tool_id = self.tool_id if tool_id is None else tool_id,
|
|
19
|
+
tool_public_name = tool_public_name,
|
|
20
|
+
parameters = self.tool_parameters if parameters is None else parameters,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def __load_parameters(self):
|
|
25
|
+
random_str = str(uuid.uuid4())
|
|
26
|
+
return [
|
|
27
|
+
ToolParameter(
|
|
28
|
+
key="param3",
|
|
29
|
+
data_type="String",
|
|
30
|
+
description=f"{random_str}_config",
|
|
31
|
+
is_required=True,
|
|
32
|
+
type="config",
|
|
33
|
+
value=random_str
|
|
34
|
+
)
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_set_parameter(self):
|
|
39
|
+
result = self.__set_parameter()
|
|
40
|
+
self.assertEqual(
|
|
41
|
+
result.content,
|
|
42
|
+
"Parameter set successfully",
|
|
43
|
+
"Expected successful parameter update"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_set_parameter_invalid_tool_id(self):
|
|
48
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
49
|
+
|
|
50
|
+
with self.assertRaises(InvalidAPIResponseException) as context:
|
|
51
|
+
self.__set_parameter(tool_id=invalid_id)
|
|
52
|
+
|
|
53
|
+
self.assertIn(
|
|
54
|
+
f"Unable to set parameter for tool {invalid_id}",
|
|
55
|
+
str(context.exception),
|
|
56
|
+
"Expected error for invalid tool ID"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_set_parameter_no_tool_id(self):
|
|
61
|
+
with self.assertRaises(MissingRequirementException) as context:
|
|
62
|
+
self.__set_parameter(tool_id="")
|
|
63
|
+
|
|
64
|
+
self.assertIn(
|
|
65
|
+
"Either tool_id or tool_public_name must be provided.",
|
|
66
|
+
str(context.exception),
|
|
67
|
+
"Expected error for invalid tool ID"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_set_parameter_by_tool_public_name(self):
|
|
72
|
+
self.tool_parameters[0].key = "Param1"
|
|
73
|
+
|
|
74
|
+
result = self.__set_parameter(tool_id = "", tool_public_name="test.sdk.beta.tool")
|
|
75
|
+
self.assertEqual(
|
|
76
|
+
result.content,
|
|
77
|
+
"Parameter set successfully",
|
|
78
|
+
"Expected successful parameter update"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_set_parameter_by_invalid_public_name(self):
|
|
83
|
+
invalid_public_name = "test.sdk.beta.tool.invalid"
|
|
84
|
+
|
|
85
|
+
with self.assertRaises(InvalidAPIResponseException) as exception:
|
|
86
|
+
self.__set_parameter(tool_id = "", tool_public_name=invalid_public_name)
|
|
87
|
+
self.assertIn(
|
|
88
|
+
f"Unable to set parameter for tool {invalid_public_name}",
|
|
89
|
+
str(exception.exception),
|
|
90
|
+
"Expected error when trying to send a request without tool_id"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_set_parameter_no_parameters(self):
|
|
95
|
+
self.tool_parameters = []
|
|
96
|
+
|
|
97
|
+
with self.assertRaises(MissingRequirementException) as exception:
|
|
98
|
+
self.__set_parameter()
|
|
99
|
+
self.assertIn(
|
|
100
|
+
"Parameters list must be provided and non-empty.",
|
|
101
|
+
str(exception.exception),
|
|
102
|
+
"Expected error when trying to send a request without parameters"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_set_parameter_not_added_parameters(self):
|
|
107
|
+
#param3 set on self.tool_parameters, does not exist in the public tool
|
|
108
|
+
with self.assertRaises(InvalidAPIResponseException) as exception:
|
|
109
|
+
self.__set_parameter(tool_id = "", tool_public_name = "test.sdk.beta.tool")
|
|
110
|
+
self.assertIn(
|
|
111
|
+
"Parameter param3 not found in this tool",
|
|
112
|
+
str(exception.exception),
|
|
113
|
+
"Expected error when trying to send a request without parameters"
|
|
114
|
+
)
|
|
@@ -25,7 +25,7 @@ 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
|
|
28
|
+
pygeai/chat/ui.py,sha256=-xvjCzBwWlvyq-C0kN2YPczl4Q0alyJamXULOlGjKRA,34595
|
|
29
29
|
pygeai/cli/__init__.py,sha256=9fVRZ6_hmlv9adqGukFuS_s5Yb3jSyF8vv50-d4mbQo,117
|
|
30
30
|
pygeai/cli/__main__.py,sha256=2RkQaX48mS2keTpv3-9rxk5dw35PL_deqxcKUUNhp6E,154
|
|
31
31
|
pygeai/cli/geai.py,sha256=Smqxqc3XIy8RMuFVIsS9qNuYtqkNWba_CJJrhe7kW0E,4451
|
|
@@ -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,7 +57,7 @@ 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
62
|
pygeai/cli/commands/lab/options.py,sha256=T13Vi97zochr0cU4yjyvvwWRPENILFDYpvqpU4uEBis,165
|
|
63
63
|
pygeai/cli/commands/lab/spec.py,sha256=EjNdEnljKpYPQyT4d4ViAPrM1g7oIitv6ddnWVkWXPk,8301
|
|
@@ -76,7 +76,7 @@ pygeai/core/base/models.py,sha256=_h62nnMhJXr1BLNoaldT4d9oqCTSistfF3D2LQ3bvlg,38
|
|
|
76
76
|
pygeai/core/base/responses.py,sha256=k-mrzNO_AtEsGTUJnyRT76FJ7gfYxQ_SAhB8MBNqPZI,763
|
|
77
77
|
pygeai/core/base/session.py,sha256=WVb4MmptwdgK7paHOSvfEle_HPXRRXO8CHgi0qbgtOg,2990
|
|
78
78
|
pygeai/core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
-
pygeai/core/common/config.py,sha256=
|
|
79
|
+
pygeai/core/common/config.py,sha256=uEPqTTonya8IBX0KSRI927cjUJ39JvYExnkqep-5U6o,4395
|
|
80
80
|
pygeai/core/common/decorators.py,sha256=X7Tv5XBmsuS7oZHSmI95eX8UkuukKoiOiNRl5w9lgR4,1227
|
|
81
81
|
pygeai/core/common/exceptions.py,sha256=-eF4V0B-27zfp0aHMlZWqWRIty6P7TCOrzMRW87ZnlE,1251
|
|
82
82
|
pygeai/core/embeddings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -146,7 +146,7 @@ pygeai/health/endpoints.py,sha256=UAzMcqSXZtMj4r8M8B7a_a5LT6X_jMFNsCTvcsjNTYA,71
|
|
|
146
146
|
pygeai/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
147
|
pygeai/lab/clients.py,sha256=5JebyNpKCVwAQpeOAkJPIHRf_6hoKA3uUm9xewm01UQ,816
|
|
148
148
|
pygeai/lab/constants.py,sha256=ddgDnXP4GD0woi-FUJaJXzaWS3H6zmDN0B-v8utM95Q,170
|
|
149
|
-
pygeai/lab/managers.py,sha256=
|
|
149
|
+
pygeai/lab/managers.py,sha256=EGU2NTpZyWtPo-VBX_wSrNOjLNPBIt7cxha9lIbuXgk,70725
|
|
150
150
|
pygeai/lab/models.py,sha256=1m41gSqpXZVO9AcPVxzlsC-TgxZcCsgGUbpN5zoDMjU,71451
|
|
151
151
|
pygeai/lab/runners.py,sha256=-uaCPHpFyiKtVOxlEjPjAc9h-onSdGAcYJ5IAZPqlb0,4147
|
|
152
152
|
pygeai/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -165,7 +165,7 @@ pygeai/lab/strategies/clients.py,sha256=_a1yc8kwd50Yv4g1jqfa0gRnMiROR7Dn0gx3xqFU
|
|
|
165
165
|
pygeai/lab/strategies/endpoints.py,sha256=LgEvUgeeN-X6VMl-tpl9_N12GRppLPScQmiMRk7Ri28,541
|
|
166
166
|
pygeai/lab/strategies/mappers.py,sha256=6C_jubAVXMKLGQy5NUD0OX7SlrU2mLe2QsgzeJ1-WKw,2437
|
|
167
167
|
pygeai/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
|
-
pygeai/lab/tools/clients.py,sha256=
|
|
168
|
+
pygeai/lab/tools/clients.py,sha256=3yESr0NQoO7qKi9s7VodxaV_4qjBlJ6cT_fBmEhyT48,28151
|
|
169
169
|
pygeai/lab/tools/endpoints.py,sha256=HiGoMs4OVeCgH7EAERTtifFPl53NryA1Awh7D6AO8bA,699
|
|
170
170
|
pygeai/lab/tools/mappers.py,sha256=bYi5k36h0k4mCvOnV-r8YOHKz0U9P0mH21GNs20w2eM,4998
|
|
171
171
|
pygeai/man/__init__.py,sha256=gqGI92vUPt6RPweoWX3mTUYPWNDlm6aGUjQOnYXqthk,53
|
|
@@ -271,22 +271,28 @@ pygeai/tests/gam/test_clients.py,sha256=vNz-4ux0cubztTY-_fEPWEoMCt5VAmZLecd0V-sE
|
|
|
271
271
|
pygeai/tests/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
272
272
|
pygeai/tests/health/test_clients.py,sha256=kfakkZHFMfo2IAN-PzmtMGmgR4iNiN1RpRopI--0qHI,1525
|
|
273
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
|
|
274
277
|
pygeai/tests/integration/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
275
278
|
pygeai/tests/integration/chat/test_generate_image.py,sha256=byCQQK6dIy68yPAhAa66bh7N0Xz5WnKSClx1vaIIzZA,5431
|
|
276
279
|
pygeai/tests/integration/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
277
280
|
pygeai/tests/integration/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
278
281
|
pygeai/tests/integration/lab/agents/test_agents_list.py,sha256=F2KUCdeiaBC3dn8ARNWqSz_kJcRyA0HC1nquhamN35Q,4187
|
|
279
|
-
pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=
|
|
282
|
+
pygeai/tests/integration/lab/agents/test_create_agent.py,sha256=JLCnrij_uS4wTvu06Ng3ODfLTikFQwmPep4HG0ebUKI,14104
|
|
280
283
|
pygeai/tests/integration/lab/agents/test_create_sharing_link.py,sha256=y-e8Q_TfuLz7XXMRERSKA_-OQJUMBIsJcK0lQ0Oh858,2467
|
|
281
284
|
pygeai/tests/integration/lab/agents/test_delete_agent.py,sha256=sb3RfoZJdzQvcVdNcXY2C2FO3yY1ZNiAZ_6Ay6f331E,2524
|
|
282
285
|
pygeai/tests/integration/lab/agents/test_get_agent.py,sha256=oW1F6SENvhL9jZC021Rj-f_Xek2DSTx3SsZBr3YT6Hk,3666
|
|
283
|
-
pygeai/tests/integration/lab/agents/test_publish_agent_revision.py,sha256=
|
|
284
|
-
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
|
|
285
288
|
pygeai/tests/integration/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
286
289
|
pygeai/tests/integration/lab/tools/test_create_tool.py,sha256=0Yzlu9ATnsxPVPa4vO4j-j5Hc6VyHQ2KoSaf0dfmqpk,12351
|
|
287
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
|
|
288
292
|
pygeai/tests/integration/lab/tools/test_get_tool.py,sha256=3fVDQlklmvOUgYDp0ATv5RqRmApgD4Qw_YGqjBOaOOo,3437
|
|
289
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
|
|
290
296
|
pygeai/tests/integration/lab/tools/test_update_tool.py,sha256=tZKZDoYS6RuTdRLgAmENq5tRvK-MohJGCt-s83QoBCA,11683
|
|
291
297
|
pygeai/tests/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
292
298
|
pygeai/tests/lab/test_managers.py,sha256=AsOAvyCkRpbskEy214aV2TwrqilWH6bxOiTWDOb1twQ,29778
|
|
@@ -383,7 +389,7 @@ pygeai/tests/snippets/lab/agents/create_agent_edge_case.py,sha256=8dA9giNdsHjFZs
|
|
|
383
389
|
pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py,sha256=jd7HKhle_c0S0vI80AejOyLaNqBWkILlRF_znzyCGcQ,1879
|
|
384
390
|
pygeai/tests/snippets/lab/agents/delete_agent.py,sha256=GfDX667_V3tZMz3vjsbrxoFZggzpwjZYH_PVO2Qjw5s,269
|
|
385
391
|
pygeai/tests/snippets/lab/agents/get_agent.py,sha256=bcqloJHwmNsFjEfri6QIRaTuHzwLtfEqIQPIC5pdkWQ,516
|
|
386
|
-
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
|
|
387
393
|
pygeai/tests/snippets/lab/agents/list_agents.py,sha256=gY5RBFUozhkk1uJO6opjkLmKmYpF9Ws-B7Oibhs99qQ,457
|
|
388
394
|
pygeai/tests/snippets/lab/agents/publish_agent_revision.py,sha256=ATbFnnSLYRmFTC4GJJUyBwxKosoTWx661Q9FpuktREM,344
|
|
389
395
|
pygeai/tests/snippets/lab/agents/update_agent.py,sha256=6qCnqkowCCygEl3tv_nvdlwXG8k0-LEloKYQUdIfkrs,1943
|
|
@@ -406,7 +412,7 @@ pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py,sha256=OxxXIRWH_c
|
|
|
406
412
|
pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py,sha256=4pqsW16m-oiv_UUVLgZrkeWZESIfDq2nvcfNC0ZpAGo,485
|
|
407
413
|
pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py,sha256=OIoHNkdnXbC9GacPgXUG1jKlVizVtWfRI-E8_3xF5b0,889
|
|
408
414
|
pygeai/tests/snippets/lab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
409
|
-
pygeai/tests/snippets/lab/tools/create_tool.py,sha256=
|
|
415
|
+
pygeai/tests/snippets/lab/tools/create_tool.py,sha256=X8qoL7TOk9Gm7jyk5MvhB5V-TBvog3TETCLNL90Z3HA,1400
|
|
410
416
|
pygeai/tests/snippets/lab/tools/create_tool_edge_case.py,sha256=8w4mvoRTMTyc70yYm2bgV2dr_Rh5QpPJR8VoqX-eY-s,1465
|
|
411
417
|
pygeai/tests/snippets/lab/tools/delete_tool.py,sha256=pnIkYvdP7X7Gx79AMK5MSVliIXdHSpyVwRhH3kgi7ys,452
|
|
412
418
|
pygeai/tests/snippets/lab/tools/get_parameter.py,sha256=dXdlHhoWxzZIYdsvHKnLLT5Vff2Tip46XCoOo-B8Gf0,490
|
|
@@ -496,9 +502,9 @@ pygeai/vendor/a2a/utils/helpers.py,sha256=6Tbd8SVfXvdNEk6WYmLOjrAxkzFf1aIg8dkFfB
|
|
|
496
502
|
pygeai/vendor/a2a/utils/message.py,sha256=gc_EKO69CJ4HkR76IFgsy-kENJz1dn7CfSgWJWvt-gs,2197
|
|
497
503
|
pygeai/vendor/a2a/utils/task.py,sha256=BYRA_L1HpoUGJAVlyHML0lCM9Awhf2Ovjj7oPFXKbh0,1647
|
|
498
504
|
pygeai/vendor/a2a/utils/telemetry.py,sha256=VvSp1Ztqaobkmq9-3sNhhPEilJS32-JTSfKzegkj6FU,10861
|
|
499
|
-
pygeai-0.4.
|
|
500
|
-
pygeai-0.4.
|
|
501
|
-
pygeai-0.4.
|
|
502
|
-
pygeai-0.4.
|
|
503
|
-
pygeai-0.4.
|
|
504
|
-
pygeai-0.4.
|
|
505
|
+
pygeai-0.4.0b12.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
|
|
506
|
+
pygeai-0.4.0b12.dist-info/METADATA,sha256=4GKLJjLWFsGzD8vMzbE90o9HKovdZsG4_Ip_EBAOBU0,6941
|
|
507
|
+
pygeai-0.4.0b12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
508
|
+
pygeai-0.4.0b12.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
|
|
509
|
+
pygeai-0.4.0b12.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
|
|
510
|
+
pygeai-0.4.0b12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|