pygeai 0.4.0b2__tar.gz → 0.4.0b3__tar.gz
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.
- {pygeai-0.4.0b2/pygeai.egg-info → pygeai-0.4.0b3}/PKG-INFO +1 -1
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/models.py +6 -2
- pygeai-0.4.0b3/pygeai/tests/integration/lab/tools/test_create_tool.py +294 -0
- pygeai-0.4.0b3/pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai-0.4.0b3/pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai-0.4.0b3/pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai-0.4.0b3/pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai-0.4.0b3/pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai-0.4.0b3/pygeai/vendor/a2a/py.typed +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3/pygeai.egg-info}/PKG-INFO +1 -1
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai.egg-info/SOURCES.txt +7 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pyproject.toml +1 -1
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/LICENSE +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/MANIFEST.in +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/README.md +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/docs/geai-proxy/README.md +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/admin/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/admin/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/admin/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/data/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/data/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/data_analyst/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/data_analyst/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/data_analyst/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/assistant/rag/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/iris.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/session.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/settings.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/chat/ui.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/__main__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/admin.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/base.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/builders.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/chat.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/common.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/configuration.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/embeddings.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/evaluation.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/feedback.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/files.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/flows/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/gam.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/lab/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/lab/ai_lab.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/lab/common.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/lab/spec.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/llm.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/migrate.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/options.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/rag.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/rerank.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/secrets.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/usage_limits.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/validators.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/commands/version.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/geai.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/geai_proxy.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/install_man.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/parsers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/texts/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/cli/texts/help.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/base/session.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/common/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/common/config.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/common/decorators.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/common/exceptions.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/embeddings/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/feedback/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/feedback/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/feedback/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/feedback/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/files/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/handlers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/llm/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/llm/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/llm/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/plugins/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/plugins/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/plugins/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/plugins/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/rerank/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/secrets/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/secrets/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/secrets/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/llm/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/llm/model.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/llm/providers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/response.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/services/rest.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/singleton.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/utils/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/core/utils/console.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/dbg/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/dbg/debugger.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/dataset/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/dataset/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/dataset/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/plan/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/plan/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/plan/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/result/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/result/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/evaluation/result/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/flows/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/flows/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/flows/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/gam/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/gam/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/gam/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/health/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/health/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/health/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/agents/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/agents/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/agents/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/agents/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/constants.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/processes/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/processes/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/processes/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/processes/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/runners.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/spec/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/spec/loader.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/spec/parsers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/strategies/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/strategies/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/strategies/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/strategies/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/tools/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/tools/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/tools/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/lab/tools/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/man/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/man/man1/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/man/man1/geai-proxy.1 +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/man/man1/geai.1 +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/migration/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/migration/strategies.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/migration/tools.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/limits/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/limits/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/limits/endpoints.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/limits/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/limits/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/organization/responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/config.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/servers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/proxy/tool.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/admin/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/admin/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/rag/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/rag/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/rag/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/rag/test_models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/assistants/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/chat/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/chat/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/chat/test_iris.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/chat/test_session.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/chat/test_ui.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/lab/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/lab/test_ai_lab.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/lab/test_common.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/lab/test_spec.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_chat.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_common.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_embeddings.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_feedback.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_files.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_gam.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_llm.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_migrate.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_rag.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_rerank.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_show_help.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_usage_limits.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_validators.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/commands/test_version.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/cli/test_parsers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/data/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/data/mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/data/models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/base/test_models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/common/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/common/data/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/common/test_config.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/common/test_decorators.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/embeddings/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/embeddings/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/feedback/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/feedback/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/files/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/files/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/files/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/files/test_models.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/files/test_responses.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/llm/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/llm/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/rerank/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/rerank/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/rerank/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/rerank/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/secrets/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/secrets/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/services/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/services/test_rest.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/test_handlers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/utils/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/core/utils/test_console.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/dbg/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/dbg/test_debugger.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/gam/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/gam/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/health/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/health/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_agents_list.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_create_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_create_sharing_link.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_delete_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_get_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/integration/lab/agents/test_update_agent.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab → pygeai-0.4.0b3/pygeai/tests/integration/lab/tools}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab/agents → pygeai-0.4.0b3/pygeai/tests/lab}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab/processes → pygeai-0.4.0b3/pygeai/tests/lab/agents}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/agents/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/agents/test_mappers.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab/spec → pygeai-0.4.0b3/pygeai/tests/lab/processes}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/processes/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/processes/test_mappers.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab/strategies → pygeai-0.4.0b3/pygeai/tests/lab/spec}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/spec/test_loader.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/spec/test_parsers.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/lab/tools → pygeai-0.4.0b3/pygeai/tests/lab/strategies}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/strategies/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/strategies/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/test_models.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/migration → pygeai-0.4.0b3/pygeai/tests/lab/tools}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/tools/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/lab/tools/test_mappers.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/organization → pygeai-0.4.0b3/pygeai/tests/migration}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/migration/test_strategies.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/migration/test_tools.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/organization/limits → pygeai-0.4.0b3/pygeai/tests/organization}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets → pygeai-0.4.0b3/pygeai/tests/organization/limits}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/organization/limits/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/organization/limits/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/organization/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/organization/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/organization/test_mappers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_clients.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_config.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_integration.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_managers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_servers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/proxy/test_tool.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/assistants → pygeai-0.4.0b3/pygeai/tests/snippets}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/assistants/data_analyst → pygeai-0.4.0b3/pygeai/tests/snippets/assistants}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/create_chat_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/create_text_assistant.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/assistants/rag → pygeai-0.4.0b3/pygeai/tests/snippets/assistants/data_analyst}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/data_analyst/get_status.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/file_summarizer_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/get_assistant_data.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/get_assistant_list.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/chat → pygeai-0.4.0b3/pygeai/tests/snippets/assistants/rag}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/delete_al_documents.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/delete_document.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/get_document.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/get_documents.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/rag/upload_document.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/send_feedback.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/assistants/update_chat_assistant.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/embeddings → pygeai-0.4.0b3/pygeai/tests/snippets/chat}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/cancel_request.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion_1.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion_2.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion_3.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion_4.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/chat_completion_streaming.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/get_request_status.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/chat/send_chat_request.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/evaluation → pygeai-0.4.0b3/pygeai/tests/snippets/embeddings}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/embeddings/generate_embeddings.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/files → pygeai-0.4.0b3/pygeai/tests/snippets/evaluation}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/gam → pygeai-0.4.0b3/pygeai/tests/snippets/files}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/files/delete_file.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/files/get_file_content.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/files/get_file_data.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/files/get_file_list.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/files/upload_file.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab → pygeai-0.4.0b3/pygeai/tests/snippets/gam}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/gam/gam_access_token.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/agents → pygeai-0.4.0b3/pygeai/tests/snippets/lab}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agentic_flow_example_1.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agentic_flow_example_2.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agentic_flow_example_3.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agentic_flow_example_4.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes → pygeai-0.4.0b3/pygeai/tests/snippets/lab/agents}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/create_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/create_agent_2.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/delete_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/get_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/get_sharing_link.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/list_agents.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/publish_agent_revision.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/agents/update_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/assistant_to_agent.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/crud_ui.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes/jobs → pygeai-0.4.0b3/pygeai/tests/snippets/lab/processes}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/create_process.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/create_task.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes/kbs → pygeai-0.4.0b3/pygeai/tests/snippets/lab/processes/jobs}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/samples → pygeai-0.4.0b3/pygeai/tests/snippets/lab/processes/kbs}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/kbs/create_kb.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/kbs/get_kb.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/kbs/try_all.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/processes/list_processes.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/runner_1.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/strategies → pygeai-0.4.0b3/pygeai/tests/snippets/lab/samples}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/samples/summarize_files.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/tools → pygeai-0.4.0b3/pygeai/tests/snippets/lab/strategies}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/lab/use_cases → pygeai-0.4.0b3/pygeai/tests/snippets/lab/tools}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/create_tool.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/delete_tool.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/get_parameter.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/get_tool.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/list_tools.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/publish_tool_revision.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/set_parameters.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/tools/update_tool.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/migrate → pygeai-0.4.0b3/pygeai/tests/snippets/lab/use_cases}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/create_web_designer.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/create_web_reader.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/update_web_designer.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/update_web_reader.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/organization → pygeai-0.4.0b3/pygeai/tests/snippets/migrate}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/rerank → pygeai-0.4.0b3/pygeai/tests/snippets/organization}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/create_project.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/delete_project.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/export_request_data.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/get_project_data.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/get_project_list.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/get_project_tokens.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/organization/update_project.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/secrets → pygeai-0.4.0b3/pygeai/tests/snippets/rerank}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/rerank/rerank_chunks.py +0 -0
- {pygeai-0.4.0b2/pygeai/tests/snippets/usage_limit → pygeai-0.4.0b3/pygeai/tests/snippets/secrets}/__init__.py +0 -0
- {pygeai-0.4.0b2/pygeai/vendor/a2a/auth → pygeai-0.4.0b3/pygeai/tests/snippets/usage_limit}/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/delete_usage_limit.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/__init__.py +0 -0
- /pygeai-0.4.0b2/pygeai/vendor/a2a/py.typed → /pygeai-0.4.0b3/pygeai/vendor/a2a/auth/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/auth/user.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/client/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/client/client.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/client/errors.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/client/helpers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/agent_execution/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/agent_execution/agent_executor.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/agent_execution/context.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/apps/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/context.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/events/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/events/event_consumer.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/events/event_queue.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/events/queue_manager.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/request_handlers/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/request_handlers/request_handler.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/request_handlers/response_helpers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/push_notifier.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/result_aggregator.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/task_manager.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/task_store.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/server/tasks/task_updater.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/types.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/__init__.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/artifact.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/errors.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/helpers.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/message.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/task.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai/vendor/a2a/utils/telemetry.py +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai.egg-info/dependency_links.txt +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai.egg-info/entry_points.txt +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai.egg-info/requires.txt +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/pygeai.egg-info/top_level.txt +0 -0
- {pygeai-0.4.0b2 → pygeai-0.4.0b3}/setup.cfg +0 -0
|
@@ -161,12 +161,13 @@ class Prompt(CustomBaseModel):
|
|
|
161
161
|
:param context: Optional[str] - Background context for the agent # NOT IMPLEMENTED YET
|
|
162
162
|
:param examples: List[PromptExample] - List of example input-output pairs.
|
|
163
163
|
"""
|
|
164
|
-
instructions: str = Field(
|
|
164
|
+
instructions: Optional[str] = Field(None, alias="instructions")
|
|
165
165
|
inputs: Optional[List[str]] = Field(None, alias="inputs")
|
|
166
166
|
outputs: Optional[List[PromptOutput]] = Field([], alias="outputs")
|
|
167
167
|
context: Optional[str] = Field(None, alias="context", description="Background context for the agent")
|
|
168
168
|
examples: Optional[List[PromptExample]] = Field(None, alias="examples")
|
|
169
169
|
|
|
170
|
+
'''
|
|
170
171
|
@field_validator("instructions")
|
|
171
172
|
@classmethod
|
|
172
173
|
def validate_instructions(cls, value: str) -> str:
|
|
@@ -174,6 +175,7 @@ class Prompt(CustomBaseModel):
|
|
|
174
175
|
raise ValueError("instructions cannot be blank")
|
|
175
176
|
|
|
176
177
|
return value
|
|
178
|
+
'''
|
|
177
179
|
|
|
178
180
|
@field_validator("outputs", mode="before")
|
|
179
181
|
@classmethod
|
|
@@ -687,7 +689,7 @@ class Tool(CustomBaseModel):
|
|
|
687
689
|
:param status: Optional[str] - Current status of the tool (e.g., "active"), defaults to None.
|
|
688
690
|
"""
|
|
689
691
|
name: str = Field(..., alias="name", description="The name of the tool")
|
|
690
|
-
description: str = Field(
|
|
692
|
+
description: Optional[str] = Field(None, alias="description", description="Description of the tool's purpose")
|
|
691
693
|
scope: str = Field("builtin", alias="scope", description="The scope of the tool (e.g., 'builtin', 'external', 'api')")
|
|
692
694
|
parameters: Optional[List[ToolParameter]] = Field(None, alias="parameters", description="List of parameters required by the tool")
|
|
693
695
|
access_scope: Optional[str] = Field(None, alias="accessScope", description="The access scope of the tool ('public' or 'private')")
|
|
@@ -730,6 +732,7 @@ class Tool(CustomBaseModel):
|
|
|
730
732
|
raise ValueError("public_name is required if access_scope is 'public'")
|
|
731
733
|
return self
|
|
732
734
|
|
|
735
|
+
'''
|
|
733
736
|
@model_validator(mode="after")
|
|
734
737
|
def validate_api_tool_requirements(self):
|
|
735
738
|
if self.scope == "api" and not (self.open_api or self.open_api_json):
|
|
@@ -739,6 +742,7 @@ class Tool(CustomBaseModel):
|
|
|
739
742
|
if len(param_keys) != len(set(param_keys)):
|
|
740
743
|
raise ValueError("All parameter keys must be unique within the tool")
|
|
741
744
|
return self
|
|
745
|
+
'''
|
|
742
746
|
|
|
743
747
|
@field_validator("parameters", mode="before")
|
|
744
748
|
@classmethod
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import unittest
|
|
3
|
+
import uuid
|
|
4
|
+
from pygeai.lab.managers import AILabManager
|
|
5
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Tool, ToolParameter,Sampling, PromptExample, PromptOutput
|
|
6
|
+
from pydantic import ValidationError
|
|
7
|
+
from pygeai.core.common.exceptions import APIError, InvalidAPIResponseException
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestAILabCreateToolIntegration(TestCase):
|
|
11
|
+
def setUp(self):
|
|
12
|
+
"""
|
|
13
|
+
Set up the test environment.
|
|
14
|
+
"""
|
|
15
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
16
|
+
self.new_tool = self.__load_tool()
|
|
17
|
+
self.created_tool: Agent = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def tearDown(self):
|
|
21
|
+
"""
|
|
22
|
+
Clean up after each test if necessary.
|
|
23
|
+
This can be used to delete the created tool
|
|
24
|
+
"""
|
|
25
|
+
if isinstance(self.created_tool, Tool):
|
|
26
|
+
|
|
27
|
+
self.ai_lab_manager.delete_tool(self.created_tool.id)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def __load_tool(self):
|
|
31
|
+
#random_str = str(uuid.uuid4())
|
|
32
|
+
return Tool(
|
|
33
|
+
name=str(uuid.uuid4()),
|
|
34
|
+
description="Tool created for sdk testing purposes",
|
|
35
|
+
scope="builtin",
|
|
36
|
+
openApi="https://raw.usercontent.com//openapi.json",
|
|
37
|
+
openApiJson={"openapi": "3.0.0","info": {"title": "Simple API overview","version": "2.0.0"}},
|
|
38
|
+
accessScope="private",
|
|
39
|
+
reportEvents="None",
|
|
40
|
+
parameters=[{"key": "param", "description": "param description", "type":"app", "value":"param value", "data_type": "String", "isRequired": False}],
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def __create_tool(self, tool=None, automatic_publish=False):
|
|
45
|
+
"""
|
|
46
|
+
Helper to create a tool using ai_lab_manager.
|
|
47
|
+
"""
|
|
48
|
+
return self.ai_lab_manager.create_tool(
|
|
49
|
+
tool=self.new_tool if tool is None else tool,
|
|
50
|
+
automatic_publish=automatic_publish
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_create_tool_full_data(self):
|
|
55
|
+
self.created_tool = self.__create_tool()
|
|
56
|
+
created_tool = self.created_tool
|
|
57
|
+
tool = self.new_tool
|
|
58
|
+
self.assertTrue(isinstance(created_tool, Tool), "Expected a created tool")
|
|
59
|
+
|
|
60
|
+
# Assert the main fields of the created tool
|
|
61
|
+
self.assertIsNotNone(created_tool.id)
|
|
62
|
+
self.assertEqual(created_tool.name, tool.name)
|
|
63
|
+
self.assertEqual(created_tool.description, tool.description)
|
|
64
|
+
self.assertEqual(created_tool.scope, tool.scope)
|
|
65
|
+
self.assertEqual(created_tool.access_scope, tool.access_scope)
|
|
66
|
+
self.assertEqual(created_tool.open_api, tool.open_api)
|
|
67
|
+
self.assertEqual(created_tool.status, "active")
|
|
68
|
+
|
|
69
|
+
# Assert agentData fields
|
|
70
|
+
tool_param = created_tool.parameters[0]
|
|
71
|
+
self.assertTrue(isinstance(tool_param, ToolParameter), "Expected parameters to be of type ToolParameter")
|
|
72
|
+
self.assertEqual(tool_param.key, tool.parameters[0].key)
|
|
73
|
+
self.assertEqual(tool_param.data_type, tool.parameters[0].data_type)
|
|
74
|
+
self.assertEqual(tool_param.description, tool.parameters[0].description)
|
|
75
|
+
self.assertEqual(tool_param.is_required, tool.parameters[0].is_required)
|
|
76
|
+
self.assertEqual(tool_param.type, tool.parameters[0].type)
|
|
77
|
+
self.assertEqual(tool_param.value, tool.parameters[0].value)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_create_tool_minimum_required_data(self):
|
|
81
|
+
self.new_tool = Tool(
|
|
82
|
+
name=str(uuid.uuid4()),
|
|
83
|
+
description="Tool created for sdk testing purposes",
|
|
84
|
+
scope="builtin"
|
|
85
|
+
)
|
|
86
|
+
self.created_tool = self.__create_tool()
|
|
87
|
+
tool = self.new_tool
|
|
88
|
+
|
|
89
|
+
self.assertIsNotNone(self.created_tool.id)
|
|
90
|
+
self.assertEqual(self.created_tool.name, tool.name)
|
|
91
|
+
self.assertEqual(self.created_tool.description, tool.description)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_create_tool_without_required_data(self):
|
|
95
|
+
test_params = [ True, False ]
|
|
96
|
+
|
|
97
|
+
for auto_publish in test_params:
|
|
98
|
+
|
|
99
|
+
with self.subTest(input=auto_publish):
|
|
100
|
+
with self.assertRaises(ValidationError) as context:
|
|
101
|
+
self.new_tool = Tool(
|
|
102
|
+
name=str(uuid.uuid4())
|
|
103
|
+
)
|
|
104
|
+
self.__create_tool(automatic_publish=auto_publish)
|
|
105
|
+
|
|
106
|
+
self.assertIn("description", str(context.exception))
|
|
107
|
+
self.assertIn("Field required", str(context.exception))
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_create_tool_no_name(self):
|
|
111
|
+
test_params = [ True, False ]
|
|
112
|
+
|
|
113
|
+
for auto_publish in test_params:
|
|
114
|
+
with self.subTest(input=auto_publish):
|
|
115
|
+
self.new_tool.name = ""
|
|
116
|
+
with self.assertRaises(APIError) as exception:
|
|
117
|
+
self.__create_tool(automatic_publish=auto_publish)
|
|
118
|
+
|
|
119
|
+
self.assertIn(
|
|
120
|
+
"Tool name cannot be empty.",
|
|
121
|
+
str(exception.exception),
|
|
122
|
+
f"Expected an error about the missing tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_create_tool_duplicated_name(self):
|
|
127
|
+
test_params = [ True, False ]
|
|
128
|
+
|
|
129
|
+
for auto_publish in test_params:
|
|
130
|
+
|
|
131
|
+
with self.subTest(input=auto_publish):
|
|
132
|
+
self.new_tool.name = "sdk_project_gemini_tool"
|
|
133
|
+
with self.assertRaises(APIError) as exception:
|
|
134
|
+
self.__create_tool(automatic_publish=auto_publish)
|
|
135
|
+
self.assertIn(
|
|
136
|
+
"Tool already exists [name=sdk_project_gemini_tool]..",
|
|
137
|
+
str(exception.exception),
|
|
138
|
+
f"Expected an error about duplicated tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_create_tool_invalid_name(self):
|
|
143
|
+
test_params = [ True, False ]
|
|
144
|
+
|
|
145
|
+
for auto_publish in test_params:
|
|
146
|
+
with self.subTest(input=auto_publish):
|
|
147
|
+
new_tool = self.__load_tool()
|
|
148
|
+
new_tool2 = self.__load_tool()
|
|
149
|
+
|
|
150
|
+
with self.assertRaises(APIError) as exception:
|
|
151
|
+
new_tool.name = f"{new_tool.name}:invalid"
|
|
152
|
+
self.__create_tool(tool=new_tool, automatic_publish=auto_publish)
|
|
153
|
+
self.assertIn(
|
|
154
|
+
"Invalid character in name (: is not allowed).",
|
|
155
|
+
str(exception.exception),
|
|
156
|
+
f"Expected an error about invalid character (:) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
with self.assertRaises(APIError) as exception:
|
|
160
|
+
new_tool2.name = f"{new_tool2.name}/invalid"
|
|
161
|
+
self.__create_tool(tool=new_tool2, automatic_publish=auto_publish)
|
|
162
|
+
self.assertIn(
|
|
163
|
+
"Invalid character in name (/ is not allowed).",
|
|
164
|
+
str(exception.exception),
|
|
165
|
+
f"Expected an error about invalid character (/) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def test_create_tool_invalid_access_scope(self):
|
|
170
|
+
self.new_tool.access_scope = "project"
|
|
171
|
+
with self.assertRaises(ValueError) as exc:
|
|
172
|
+
self.__create_tool()
|
|
173
|
+
self.assertEqual(
|
|
174
|
+
str(exc.exception),
|
|
175
|
+
"Access scope must be one of public, private.",
|
|
176
|
+
"Expected a ValueError exception for invalid access scope"
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def test_create_tool_default_scope(self):
|
|
181
|
+
self.new_tool.access_scope = None
|
|
182
|
+
self.created_tool = self.__create_tool()
|
|
183
|
+
|
|
184
|
+
self.assertEqual(self.created_tool.access_scope, "private", "Expected the default access scope to be 'private' when not specified")
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def test_create_tool_no_public_name(self):
|
|
188
|
+
test_params = [ True, False ]
|
|
189
|
+
|
|
190
|
+
for auto_publish in test_params:
|
|
191
|
+
|
|
192
|
+
with self.subTest(input=auto_publish):
|
|
193
|
+
self.new_tool.access_scope = "public"
|
|
194
|
+
self.new_tool.public_name = None
|
|
195
|
+
with self.assertRaises(APIError) as exception:
|
|
196
|
+
self.__create_tool(automatic_publish=auto_publish)
|
|
197
|
+
self.assertIn(
|
|
198
|
+
"Tool publicName is required for tools with accessScope=public.",
|
|
199
|
+
str(exception.exception),
|
|
200
|
+
f"Expected an error about missing publicName for public access scope with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def test_create_tool_invalid_public_name(self):
|
|
205
|
+
test_params = [ True, False ]
|
|
206
|
+
|
|
207
|
+
for auto_publish in test_params:
|
|
208
|
+
with self.subTest(input=auto_publish):
|
|
209
|
+
self.new_tool.access_scope = "public"
|
|
210
|
+
self.new_tool.public_name = "com.sdk.testing#" # Add invalid character to public name
|
|
211
|
+
with self.assertRaises(APIError) as exception:
|
|
212
|
+
self.__create_tool(automatic_publish=auto_publish)
|
|
213
|
+
|
|
214
|
+
self.assertIn(
|
|
215
|
+
"Invalid public name, it can only contain lowercase letters, numbers, periods (.), dashes (-), and underscores (_). Please remove any other characters.",
|
|
216
|
+
str(exception.exception),
|
|
217
|
+
f"The expected error about invalid publicName was not returned when autopublish is {'enabled' if auto_publish else 'disabled'}"
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def test_create_tool_duplicated_public_name(self):
|
|
222
|
+
test_params = [ True, False ]
|
|
223
|
+
|
|
224
|
+
# Set the scope as public and assign a public name
|
|
225
|
+
self.new_tool.access_scope = "public"
|
|
226
|
+
self.new_tool.public_name=f"public_{self.new_tool.name}"
|
|
227
|
+
self.created_tool = self.__create_tool()
|
|
228
|
+
|
|
229
|
+
for auto_publish in test_params:
|
|
230
|
+
with self.subTest(input=auto_publish):
|
|
231
|
+
|
|
232
|
+
# Create a new with the same public name of created_tool
|
|
233
|
+
duplicated_pn_tool = self.__load_tool()
|
|
234
|
+
duplicated_pn_tool.access_scope = "public"
|
|
235
|
+
duplicated_pn_tool.public_name = self.created_tool.public_name
|
|
236
|
+
|
|
237
|
+
with self.assertRaises(APIError) as exception:
|
|
238
|
+
self.__create_tool(tool=duplicated_pn_tool, automatic_publish=auto_publish)
|
|
239
|
+
self.assertIn(
|
|
240
|
+
f"Tool already exists [publicName={self.created_tool.public_name}].",
|
|
241
|
+
str(exception.exception),
|
|
242
|
+
f"Expected an error about the duplicated public name when autopublish is {'enabled' if auto_publish else 'disabled'}"
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def test_create_tool_api_scope_with_no_open_api(self):
|
|
247
|
+
self.new_tool.scope = "api"
|
|
248
|
+
with self.assertRaises(ValueError) as exception:
|
|
249
|
+
self.new_tool.openApi = ""
|
|
250
|
+
self.assertIn(
|
|
251
|
+
'"Tool" object has no field "openApi"',
|
|
252
|
+
str(exception.exception),
|
|
253
|
+
"Expected a validation error when openApi is not provided for api scope"
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def test_create_tool_api_scope_with_no_open_api_json(self):
|
|
258
|
+
self.new_tool.scope = "api"
|
|
259
|
+
with self.assertRaises(ValueError) as exception:
|
|
260
|
+
self.new_tool.openApiJson = ""
|
|
261
|
+
|
|
262
|
+
self.assertIn(
|
|
263
|
+
'"Tool" object has no field "openApiJson"',
|
|
264
|
+
str(exception.exception),
|
|
265
|
+
"Expected a validation error when openApiJson is not provided for api scope"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def test_create_tool_invalid_scope(self):
|
|
270
|
+
test_params = [ True, False ]
|
|
271
|
+
|
|
272
|
+
for auto_publish in test_params:
|
|
273
|
+
with self.subTest(input=auto_publish):
|
|
274
|
+
|
|
275
|
+
with self.assertRaises(ValueError) as exception:
|
|
276
|
+
self.new_tool.scope = "source"
|
|
277
|
+
self.__create_tool()
|
|
278
|
+
self.assertIn(
|
|
279
|
+
'Scope must be one of builtin, external, api, proxied',
|
|
280
|
+
str(exception.exception),
|
|
281
|
+
"Expected a validation error about allowed values for instructions"
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def test_create_tool_autopublish(self):
|
|
286
|
+
self.created_tool = self.__create_tool(automatic_publish=True)
|
|
287
|
+
self.assertFalse(self.created_tool.is_draft, "Expected the tool to be published automatically")
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def test_create_tool_autopublish_private_scope(self):
|
|
291
|
+
self.new_tool.access_scope = "private"
|
|
292
|
+
|
|
293
|
+
self.created_tool = self.__create_tool(automatic_publish=True)
|
|
294
|
+
self.assertFalse(self.created_tool.is_draft, "Expected the tool to be published automatically even with private scope")
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import uuid
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import Tool, AgentData, Prompt, LlmConfig, Model
|
|
5
|
+
from pygeai.core.common.exceptions import MissingRequirementException, InvalidAPIResponseException
|
|
6
|
+
|
|
7
|
+
ai_lab_manager: AILabManager
|
|
8
|
+
|
|
9
|
+
class TestAILabDeleteToolIntegration(TestCase):
|
|
10
|
+
|
|
11
|
+
def setUp(self):
|
|
12
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def __create_tool(self):
|
|
16
|
+
"""
|
|
17
|
+
Helper to create a tool
|
|
18
|
+
"""
|
|
19
|
+
tool = Tool(
|
|
20
|
+
name=str(uuid.uuid4()),
|
|
21
|
+
description="Agent that translates from any language to english.",
|
|
22
|
+
scope="builtin"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
return self.ai_lab_manager.create_tool(
|
|
27
|
+
tool=tool
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def __delete_tool(self, tool_id: str = None, tool_name: str = None):
|
|
31
|
+
return self.ai_lab_manager.delete_tool(tool_id=tool_id, tool_name=tool_name)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_delete_tool_by_id(self):
|
|
35
|
+
created_tool = self.__create_tool()
|
|
36
|
+
deleted_tool = self.__delete_tool(tool_id=created_tool.id)
|
|
37
|
+
|
|
38
|
+
self.assertEqual(
|
|
39
|
+
deleted_tool.content,
|
|
40
|
+
"Tool deleted successfully",
|
|
41
|
+
"Expected confirmation message after deletion"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_delete_tool_by_name(self):
|
|
46
|
+
created_tool = self.__create_tool()
|
|
47
|
+
deleted_tool = self.__delete_tool(tool_name=created_tool.name)
|
|
48
|
+
|
|
49
|
+
self.assertEqual(
|
|
50
|
+
deleted_tool.content,
|
|
51
|
+
"Tool deleted successfully",
|
|
52
|
+
"Expected confirmation message after deletion"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_delete_tool_no_id_nor_name(self):
|
|
57
|
+
with self.assertRaises(MissingRequirementException) as exception:
|
|
58
|
+
self.__delete_tool()
|
|
59
|
+
self.assertIn(
|
|
60
|
+
"Either tool_id or tool_name must be provided",
|
|
61
|
+
str(exception.exception),
|
|
62
|
+
"Expected error message when neither tool_id nor tool_name is provided"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_delete_tool_invalid_id_valid_name(self):
|
|
67
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
68
|
+
created_tool = self.__create_tool()
|
|
69
|
+
with self.assertRaises(InvalidAPIResponseException) as exception:
|
|
70
|
+
self.__delete_tool(tool_name=created_tool.name, tool_id=invalid_id)
|
|
71
|
+
|
|
72
|
+
self.assertIn(
|
|
73
|
+
f"Tool not found [IdOrName= {invalid_id}].",
|
|
74
|
+
str(exception.exception),
|
|
75
|
+
"Expected error message for valid tool name and invalid tool id"
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def test_delete_tool_invalid_name_valid_id(self):
|
|
80
|
+
created_tool = self.__create_tool()
|
|
81
|
+
deleted_tool = self.__delete_tool(tool_id=created_tool.id, tool_name="toolName")
|
|
82
|
+
|
|
83
|
+
self.assertEqual(
|
|
84
|
+
deleted_tool.content,
|
|
85
|
+
"Tool deleted successfully",
|
|
86
|
+
"Expected confirmation message after deletion"
|
|
87
|
+
)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import unittest
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import Tool, FilterSettings
|
|
5
|
+
from pygeai.core.common.exceptions import APIError
|
|
6
|
+
import copy
|
|
7
|
+
|
|
8
|
+
ai_lab_manager: AILabManager
|
|
9
|
+
|
|
10
|
+
class TestAILabGetToolIntegration(TestCase):
|
|
11
|
+
|
|
12
|
+
def setUp(self):
|
|
13
|
+
self.ai_lab_manager = AILabManager(alias="beta")
|
|
14
|
+
self.tool_id = "e3e4d64f-ce52-467e-90a9-aa4d08425e82"
|
|
15
|
+
self.filter_settings = FilterSettings(
|
|
16
|
+
revision="0",
|
|
17
|
+
version="0"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
def __get_tool(self, tool_id=None, filter_settings: FilterSettings = None):
|
|
21
|
+
return self.ai_lab_manager.get_tool(
|
|
22
|
+
tool_id=self.tool_id if tool_id is None else tool_id,
|
|
23
|
+
filter_settings=self.filter_settings if filter_settings is None else filter_settings
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
def test_get_tool(self):
|
|
27
|
+
tool = self.__get_tool()
|
|
28
|
+
self.assertIsInstance(tool, Tool, "Expected a tool")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@unittest.skip("Skipped: Validate that when no tool_id is provided, the complete tool list is returned")
|
|
32
|
+
def test_get_tool_no_tool_id(self):
|
|
33
|
+
with self.assertRaises(Exception) as context:
|
|
34
|
+
self.__get_tool(tool_id="")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_get_tool_invalid_tool_id(self):
|
|
38
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
39
|
+
with self.assertRaises(APIError) as context:
|
|
40
|
+
self.__get_tool(tool_id=invalid_id)
|
|
41
|
+
self.assertIn(
|
|
42
|
+
f"Tool not found [IdOrName= {invalid_id}].",
|
|
43
|
+
str(context.exception),
|
|
44
|
+
"Expected an error for invalid tool id"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_get_tool_no_revision(self):
|
|
49
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
50
|
+
filter_settings.revision = None
|
|
51
|
+
tool = self.__get_tool(filter_settings=filter_settings)
|
|
52
|
+
|
|
53
|
+
self.assertIsInstance(tool, Tool, "Expected a tool")
|
|
54
|
+
self.assertGreaterEqual(tool.revision, 1, "Expected tool revision to be the latest")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_get_tool_by_revision(self):
|
|
58
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
59
|
+
filter_settings.revision = "6"
|
|
60
|
+
tool = self.__get_tool(filter_settings=filter_settings)
|
|
61
|
+
|
|
62
|
+
self.assertEqual(6, tool.revision, "Expected agent revision to be 6")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_get_tool_by_earlier_revision(self):
|
|
66
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
67
|
+
filter_settings.revision = "2"
|
|
68
|
+
with self.assertRaises(APIError) as context:
|
|
69
|
+
self.__get_tool(filter_settings=filter_settings)
|
|
70
|
+
self.assertIn(
|
|
71
|
+
f"Requested revision not found [revision={filter_settings.revision}].",
|
|
72
|
+
str(context.exception),
|
|
73
|
+
"Expected an error for revision not found"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
#TODO: The API is returning the version of the tool, but the sdk does not
|
|
77
|
+
def test_get_tool_no_version(self):
|
|
78
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
79
|
+
filter_settings.version = None
|
|
80
|
+
tool = self.__get_tool(filter_settings=filter_settings)
|
|
81
|
+
|
|
82
|
+
self.assertIsInstance(tool, Tool, "Expected a tool")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
#TODO: The API is returning the version of the tool, but the sdk does not
|
|
86
|
+
def test_get_tool_by_version(self):
|
|
87
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
88
|
+
filter_settings.version = "1"
|
|
89
|
+
tool = self.__get_tool(filter_settings=filter_settings)
|
|
90
|
+
|
|
91
|
+
self.assertIsInstance(tool, Tool, "Expected a tool")
|
|
@@ -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}")
|
|
File without changes
|