pygeai 0.1.6__py3-none-any.whl → 0.6.0b15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +11 -2
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/__init__.py +0 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- 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 +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/__init__.py +0 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/__init__.py +0 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/chat/send_chat_request.py +33 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/__init__.py +0 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import unittest
|
|
3
|
+
import uuid
|
|
4
|
+
from pygeai.lab.managers import AILabManager
|
|
5
|
+
from pygeai.lab.models import Task, Prompt, ArtifactTypeList, ArtifactType
|
|
6
|
+
from pygeai.core.common.exceptions import APIResponseError, APIError
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TestAILabCreateTaskIntegration(TestCase):
|
|
10
|
+
|
|
11
|
+
def setUp(self):
|
|
12
|
+
"""
|
|
13
|
+
Set up the test environment.
|
|
14
|
+
"""
|
|
15
|
+
self.ai_lab_manager = AILabManager()
|
|
16
|
+
self.new_task = self.__load_task()
|
|
17
|
+
self.created_task: Task = 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 task
|
|
24
|
+
"""
|
|
25
|
+
if isinstance(self.created_task, Task):
|
|
26
|
+
self.ai_lab_manager.delete_task(task_id=self.created_task.id)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def __load_task(self):
|
|
30
|
+
"""
|
|
31
|
+
Helper to load a complete task configuration for testing.
|
|
32
|
+
"""
|
|
33
|
+
unique_key = str(uuid.uuid4())
|
|
34
|
+
task = Task(
|
|
35
|
+
name=f"test_task_{unique_key[:8]}",
|
|
36
|
+
description=f"This is a sample task for testing 'test_task_{unique_key[:8]}'"
|
|
37
|
+
)
|
|
38
|
+
return task
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def __create_task(self, task=None, automatic_publish=False):
|
|
42
|
+
"""
|
|
43
|
+
Helper to create a task using ai_lab_manager.
|
|
44
|
+
"""
|
|
45
|
+
return self.ai_lab_manager.create_task(
|
|
46
|
+
task=self.new_task if task is None else task,
|
|
47
|
+
automatic_publish=automatic_publish
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_create_task(self):
|
|
52
|
+
"""
|
|
53
|
+
Test creating a task with all available fields populated.
|
|
54
|
+
"""
|
|
55
|
+
self.created_task = self.__create_task()
|
|
56
|
+
created_task = self.created_task
|
|
57
|
+
task = self.new_task
|
|
58
|
+
|
|
59
|
+
self.assertTrue(isinstance(created_task, Task), "Expected a created task")
|
|
60
|
+
|
|
61
|
+
# Assert the main fields of the created task
|
|
62
|
+
self.assertIsNotNone(created_task.id)
|
|
63
|
+
self.assertEqual(created_task.name, task.name)
|
|
64
|
+
self.assertEqual(created_task.description, task.description)
|
|
65
|
+
|
|
66
|
+
# Assert revision and status
|
|
67
|
+
self.assertEqual(self.created_task.revision, 1)
|
|
68
|
+
self.assertEqual(self.created_task.status, 'active')
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_create_task_with_prompt_data(self):
|
|
72
|
+
"""
|
|
73
|
+
Test creating a task with prompt data.
|
|
74
|
+
"""
|
|
75
|
+
unique_key = str(uuid.uuid4())
|
|
76
|
+
self.new_task = task = Task(
|
|
77
|
+
name=f"test_task_{unique_key[:8]}",
|
|
78
|
+
description=f"This is a sample task for testing 'test_task_{unique_key[:8]}'",
|
|
79
|
+
title_template="Test Task: {{issue}}",
|
|
80
|
+
prompt_data=Prompt(
|
|
81
|
+
instructions="Analyze the provided data and generate a summary.",
|
|
82
|
+
inputs=["input_data"],
|
|
83
|
+
outputs=[]
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
self.created_task = self.__create_task()
|
|
87
|
+
|
|
88
|
+
# Assert prompt data
|
|
89
|
+
self.assertIsNotNone(self.created_task.prompt_data)
|
|
90
|
+
self.assertEqual(self.created_task.prompt_data.instructions, "Analyze the provided data and generate a summary.")
|
|
91
|
+
self.assertEqual(self.created_task.prompt_data.inputs, ["input_data"])
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_create_task_with_custom_id(self):
|
|
95
|
+
"""
|
|
96
|
+
Test creating a task with a custom ID.
|
|
97
|
+
"""
|
|
98
|
+
unique_key = str(uuid.uuid4())
|
|
99
|
+
custom_id = unique_key
|
|
100
|
+
self.new_task = Task(
|
|
101
|
+
name=f"task_with_custom_id_{unique_key[:8]}",
|
|
102
|
+
id=custom_id
|
|
103
|
+
)
|
|
104
|
+
self.created_task = self.__create_task()
|
|
105
|
+
|
|
106
|
+
self.assertTrue(isinstance(self.created_task, Task), "Expected a created task")
|
|
107
|
+
self.assertEqual(self.created_task.id, custom_id)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_create_task_empty_name(self):
|
|
111
|
+
"""
|
|
112
|
+
Test creating a task with empty name should raise an error.
|
|
113
|
+
"""
|
|
114
|
+
test_params = [True, False]
|
|
115
|
+
|
|
116
|
+
for auto_publish in test_params:
|
|
117
|
+
with self.subTest(auto_publish=auto_publish):
|
|
118
|
+
self.new_task.name = ""
|
|
119
|
+
with self.assertRaises((APIError, ValueError)) as exception:
|
|
120
|
+
self.__create_task(automatic_publish=auto_publish)
|
|
121
|
+
|
|
122
|
+
self.assertTrue(
|
|
123
|
+
"Task name cannot be empty" in str(exception.exception),
|
|
124
|
+
f"Expected an error about empty task name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_create_task_duplicated_name(self):
|
|
129
|
+
"""
|
|
130
|
+
Test creating a task with a duplicate name should raise an error.
|
|
131
|
+
"""
|
|
132
|
+
test_params = [True, False]
|
|
133
|
+
created_task = self.__create_task()
|
|
134
|
+
|
|
135
|
+
for auto_publish in test_params:
|
|
136
|
+
with self.subTest(auto_publish=auto_publish):
|
|
137
|
+
loaded_task = self.__load_task()
|
|
138
|
+
loaded_task.name = created_task.name
|
|
139
|
+
with self.assertRaises(APIError) as exception:
|
|
140
|
+
self.__create_task(task=loaded_task, automatic_publish=auto_publish)
|
|
141
|
+
|
|
142
|
+
self.assertIn(
|
|
143
|
+
"already exists",
|
|
144
|
+
str(exception.exception).lower(),
|
|
145
|
+
f"Expected an error about duplicated task name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def test_create_task_invalid_name_characters(self):
|
|
150
|
+
"""
|
|
151
|
+
Test creating a task with invalid characters in name should raise a validation error.
|
|
152
|
+
"""
|
|
153
|
+
test_params = [True, False]
|
|
154
|
+
|
|
155
|
+
for auto_publish in test_params:
|
|
156
|
+
with self.subTest(auto_publish=auto_publish):
|
|
157
|
+
invalid_names = [
|
|
158
|
+
f"task_{str(uuid.uuid4())[:8]}:invalid",
|
|
159
|
+
f"task_{str(uuid.uuid4())[:8]}/invalid"
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
for invalid_name in invalid_names:
|
|
163
|
+
new_task = self.__load_task()
|
|
164
|
+
new_task.name = invalid_name
|
|
165
|
+
|
|
166
|
+
with self.assertRaises((APIError, ValueError)) as exception:
|
|
167
|
+
self.__create_task(task=new_task, automatic_publish=auto_publish)
|
|
168
|
+
|
|
169
|
+
self.assertTrue(
|
|
170
|
+
f"Invalid character in name ({':' if ':' in invalid_name else '/'} is not allowed).",
|
|
171
|
+
f"Expected an error about invalid character in task name with autopublish {'enabled' if auto_publish else 'disabled'}"
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def test_create_task_autopublish_disabled(self):
|
|
176
|
+
"""
|
|
177
|
+
Test creating a task without automatic publish (default behavior).
|
|
178
|
+
"""
|
|
179
|
+
self.created_task = self.__create_task(automatic_publish=False)
|
|
180
|
+
|
|
181
|
+
# Task should be created as draft by default
|
|
182
|
+
self.assertTrue(
|
|
183
|
+
self.created_task.is_draft is True or
|
|
184
|
+
self.created_task.is_draft is None,
|
|
185
|
+
"Expected the task to be created as draft when autopublish is disabled"
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def test_create_task_with_complex_prompt_data(self):
|
|
190
|
+
"""
|
|
191
|
+
Test creating a task with complex prompt data including outputs.
|
|
192
|
+
"""
|
|
193
|
+
unique_key = str(uuid.uuid4())
|
|
194
|
+
self.new_task = Task(
|
|
195
|
+
name=f"task_complex_prompt_{unique_key[:8]}",
|
|
196
|
+
prompt_data=Prompt(
|
|
197
|
+
instructions="Analyze the provided data and generate multiple outputs.",
|
|
198
|
+
inputs=["input_data", "parameters"],
|
|
199
|
+
outputs=[
|
|
200
|
+
{"key": "summary", "description": "Data summary"},
|
|
201
|
+
{"key": "analysis", "description": "Detailed analysis"}
|
|
202
|
+
]
|
|
203
|
+
)
|
|
204
|
+
)
|
|
205
|
+
self.created_task = self.__create_task()
|
|
206
|
+
|
|
207
|
+
self.assertIsNotNone(self.created_task.prompt_data)
|
|
208
|
+
self.assertEqual(len(self.created_task.prompt_data.inputs), 2)
|
|
209
|
+
self.assertIn("input_data", self.created_task.prompt_data.inputs)
|
|
210
|
+
self.assertIn("parameters", self.created_task.prompt_data.inputs)
|
|
211
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import uuid
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import AgenticProcess, KnowledgeBase, AgenticActivity, ArtifactSignal, UserSignal, Event, SequenceFlow
|
|
5
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, MissingRequirementException
|
|
6
|
+
from pygeai.core.base.responses import EmptyResponse
|
|
7
|
+
|
|
8
|
+
ai_lab_manager: AILabManager
|
|
9
|
+
|
|
10
|
+
class TestAILabDeleteProcessIntegration(TestCase):
|
|
11
|
+
|
|
12
|
+
def setUp(self):
|
|
13
|
+
self.ai_lab_manager = AILabManager()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def __create_process(self):
|
|
17
|
+
"""
|
|
18
|
+
Helper to create a process with the current ai_lab_manager.
|
|
19
|
+
"""
|
|
20
|
+
unique_key = str(uuid.uuid4())
|
|
21
|
+
process = AgenticProcess(
|
|
22
|
+
key="product_def",
|
|
23
|
+
name=f"Test Process {unique_key[:8]}",
|
|
24
|
+
description="This is a sample process",
|
|
25
|
+
kb=KnowledgeBase(name="basic-sample", artifact_type_name=["sample-artifact"]),
|
|
26
|
+
agentic_activities=[
|
|
27
|
+
AgenticActivity(key="activityOne", name="First Step", task_name="basic-task", agent_name="GoogleSummarizer2", agent_revision_id=0)
|
|
28
|
+
],
|
|
29
|
+
artifact_signals=[
|
|
30
|
+
ArtifactSignal(key="artifact.upload.1", name="artifact.upload", handling_type="C", artifact_type_name=["sample-artifact"])
|
|
31
|
+
],
|
|
32
|
+
user_signals=[
|
|
33
|
+
UserSignal(key="signal_done", name="process-completed")
|
|
34
|
+
],
|
|
35
|
+
start_event=Event(key="artifact.upload.1", name="artifact.upload"),
|
|
36
|
+
end_event=Event(key="end", name="Done"),
|
|
37
|
+
sequence_flows=[
|
|
38
|
+
SequenceFlow(key="step1", source_key="artifact.upload.1", target_key="activityOne"),
|
|
39
|
+
SequenceFlow(key="step2", source_key="activityOne", target_key="signal_done"),
|
|
40
|
+
SequenceFlow(key="stepEnd", source_key="signal_done", target_key="end")
|
|
41
|
+
]
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return self.ai_lab_manager.create_process(
|
|
45
|
+
process=process,
|
|
46
|
+
automatic_publish=False
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def __delete_process(self, process_id: str = None, process_name: str = None):
|
|
51
|
+
return self.ai_lab_manager.delete_process(
|
|
52
|
+
process_id=process_id,
|
|
53
|
+
process_name=process_name
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_delete_process_by_id(self):
|
|
58
|
+
created_process = self.__create_process()
|
|
59
|
+
deleted_process = self.__delete_process(process_id=created_process.id)
|
|
60
|
+
print(deleted_process)
|
|
61
|
+
|
|
62
|
+
self.assertEqual(
|
|
63
|
+
deleted_process.content,
|
|
64
|
+
"Process deleted successfully",
|
|
65
|
+
"Expected confirmation message after deletion"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def test_delete_process_by_name(self):
|
|
70
|
+
created_process = self.__create_process()
|
|
71
|
+
deleted_process = self.__delete_process(process_id="",process_name=created_process.name)
|
|
72
|
+
|
|
73
|
+
self.assertEqual(
|
|
74
|
+
deleted_process.content,
|
|
75
|
+
"Process deleted successfully",
|
|
76
|
+
"Expected confirmation message after deletion"
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_delete_process_no_parameters(self):
|
|
81
|
+
with self.assertRaises(MissingRequirementException) as exception:
|
|
82
|
+
self.__delete_process()
|
|
83
|
+
self.assertIn(
|
|
84
|
+
"Either process_id or process_name must be provided",
|
|
85
|
+
str(exception.exception),
|
|
86
|
+
"Expected error message for missing parameters"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_delete_process_invalid_process_id(self):
|
|
91
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
92
|
+
with self.assertRaises(InvalidAPIResponseException) as exception:
|
|
93
|
+
self.__delete_process(process_id=invalid_id)
|
|
94
|
+
|
|
95
|
+
self.assertIn(
|
|
96
|
+
f"Unable to delete process {invalid_id}",
|
|
97
|
+
str(exception.exception),
|
|
98
|
+
"Expected error message for invalid process id"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_delete_process_invalid_process_name(self):
|
|
103
|
+
invalid_name = "NonExistentProcessName123"
|
|
104
|
+
with self.assertRaises(InvalidAPIResponseException) as exception:
|
|
105
|
+
self.__delete_process(process_name=invalid_name)
|
|
106
|
+
|
|
107
|
+
self.assertIn(
|
|
108
|
+
f"Unable to delete process {invalid_name}",
|
|
109
|
+
str(exception.exception),
|
|
110
|
+
"Expected error message for invalid process name"
|
|
111
|
+
)
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import unittest
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import AgenticProcess, FilterSettings, KnowledgeBase, AgenticActivity, ArtifactSignal, UserSignal, Event, SequenceFlow
|
|
5
|
+
from pygeai.core.common.exceptions import APIResponseError, APIError, MissingRequirementException
|
|
6
|
+
import copy
|
|
7
|
+
import uuid
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestAILabGetProcessIntegration(TestCase):
|
|
11
|
+
|
|
12
|
+
def setUp(self):
|
|
13
|
+
"""
|
|
14
|
+
Set up the test environment.
|
|
15
|
+
"""
|
|
16
|
+
self.ai_lab_manager = AILabManager()
|
|
17
|
+
self.process_id = "7e28e9ab-b9a2-417e-9e87-ed7f6ec9534b"
|
|
18
|
+
self.process_name = "Test Process For Sdk Project"
|
|
19
|
+
self.filter_settings = FilterSettings(
|
|
20
|
+
revision="0",
|
|
21
|
+
version="0"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def __get_process(self, process_id=None, process_name=None, filter_settings: FilterSettings = None):
|
|
26
|
+
"""
|
|
27
|
+
Helper method to get a process.
|
|
28
|
+
"""
|
|
29
|
+
return self.ai_lab_manager.get_process(
|
|
30
|
+
process_id=self.process_id if process_id is None else process_id,
|
|
31
|
+
process_name=self.process_name if process_name is None else process_name,
|
|
32
|
+
filter_settings=self.filter_settings if filter_settings is None else filter_settings
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def test_get_process_by_id(self):
|
|
36
|
+
"""
|
|
37
|
+
Test getting a process by ID.
|
|
38
|
+
"""
|
|
39
|
+
process = self.__get_process(process_name="")
|
|
40
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
41
|
+
self.assertEqual(process.id, self.process_id)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_get_process_by_name(self):
|
|
45
|
+
"""
|
|
46
|
+
Test getting a process by name instead of ID.
|
|
47
|
+
"""
|
|
48
|
+
process = self.__get_process(process_id=None)
|
|
49
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
50
|
+
self.assertEqual(process.name, self.process_name)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_get_process_no_id_or_name(self):
|
|
54
|
+
"""
|
|
55
|
+
Test getting a process without providing ID or name should raise an error.
|
|
56
|
+
"""
|
|
57
|
+
with self.assertRaises(MissingRequirementException) as context:
|
|
58
|
+
self.__get_process(process_id="", process_name="")
|
|
59
|
+
self.assertIn(
|
|
60
|
+
"Either process_id or process_name must be provided",
|
|
61
|
+
str(context.exception),
|
|
62
|
+
"Expected an error for no id or name provided"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_get_process_invalid_process_id(self):
|
|
67
|
+
"""
|
|
68
|
+
Test getting a process with an invalid ID.
|
|
69
|
+
"""
|
|
70
|
+
invalid_id = "0026e53d-ea78-4cac-af9f-12650invalid"
|
|
71
|
+
with self.assertRaises(APIError) as context:
|
|
72
|
+
self.__get_process(process_id=invalid_id, process_name="")
|
|
73
|
+
self.assertIn(
|
|
74
|
+
f"Process not found [IdOrName= {invalid_id}]",
|
|
75
|
+
str(context.exception),
|
|
76
|
+
"Expected an error for invalid process id"
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_get_process_invalid_process_name(self):
|
|
81
|
+
"""
|
|
82
|
+
Test getting a process with an invalid name.
|
|
83
|
+
"""
|
|
84
|
+
invalid_name = "NonExistentProcessName_12345"
|
|
85
|
+
with self.assertRaises(APIError) as context:
|
|
86
|
+
self.__get_process(process_id="", process_name=invalid_name)
|
|
87
|
+
self.assertIn(
|
|
88
|
+
f"Process not found [IdOrName= {invalid_name}]",
|
|
89
|
+
str(context.exception),
|
|
90
|
+
"Expected an error for invalid process name"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def test_get_process_no_revision(self):
|
|
94
|
+
"""
|
|
95
|
+
Test getting a process without specifying revision (should return latest).
|
|
96
|
+
"""
|
|
97
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
98
|
+
filter_settings.revision = None
|
|
99
|
+
process = self.__get_process(filter_settings=filter_settings)
|
|
100
|
+
|
|
101
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
102
|
+
self.assertGreaterEqual(process.revision or 0, 0, "Expected process revision to be the latest")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def test_get_process_by_revision(self):
|
|
106
|
+
"""
|
|
107
|
+
Test getting a process by specific revision.
|
|
108
|
+
"""
|
|
109
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
110
|
+
filter_settings.revision = 4
|
|
111
|
+
process = self.__get_process(filter_settings=filter_settings)
|
|
112
|
+
|
|
113
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
114
|
+
self.assertEqual(process.revision, filter_settings.revision, f"Expected process revision to be {filter_settings.revision}")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_get_process_by_earlier_revision(self):
|
|
118
|
+
"""
|
|
119
|
+
Test getting a process by an earlier revision that might not exist.
|
|
120
|
+
"""
|
|
121
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
122
|
+
filter_settings.revision = 3
|
|
123
|
+
process = self.__get_process(filter_settings=filter_settings)
|
|
124
|
+
|
|
125
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
126
|
+
self.assertEqual(process.revision, filter_settings.revision, f"Expected process revision to be {filter_settings.revision}")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_get_process_no_version(self):
|
|
130
|
+
"""
|
|
131
|
+
Test getting a process without specifying version (should return latest).
|
|
132
|
+
"""
|
|
133
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
134
|
+
filter_settings.version = None
|
|
135
|
+
process = self.__get_process(filter_settings=filter_settings)
|
|
136
|
+
|
|
137
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
138
|
+
self.assertGreaterEqual(process.version_id or 0, 0, "Expected process version to be the latest")
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def test_get_process_by_version(self):
|
|
142
|
+
"""
|
|
143
|
+
Test getting a process by specific version.
|
|
144
|
+
"""
|
|
145
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
146
|
+
filter_settings.version = "2"
|
|
147
|
+
process = self.__get_process(filter_settings=filter_settings)
|
|
148
|
+
|
|
149
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
150
|
+
self.assertEqual(process.version_id, 2, "Expected process version to be 2")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def test_get_process_by_invalid_version(self):
|
|
154
|
+
"""
|
|
155
|
+
Test getting a process by an invalid version.
|
|
156
|
+
"""
|
|
157
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
158
|
+
filter_settings.version = "999" # Non-existent version
|
|
159
|
+
|
|
160
|
+
with self.assertRaises(APIError) as context:
|
|
161
|
+
self.__get_process(filter_settings=filter_settings)
|
|
162
|
+
|
|
163
|
+
self.assertIn(
|
|
164
|
+
"Requested version not found [version=999]",
|
|
165
|
+
str(context.exception),
|
|
166
|
+
"Expected an error for version not found"
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def test_get_process_allow_drafts_true(self):
|
|
171
|
+
"""
|
|
172
|
+
Test getting a process with allow_drafts=True (should include drafts).
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
176
|
+
filter_settings.allow_drafts = True
|
|
177
|
+
process = self.__get_process(filter_settings = filter_settings)
|
|
178
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
179
|
+
# Draft processes should be retrievable
|
|
180
|
+
self.assertTrue(
|
|
181
|
+
process.is_draft,
|
|
182
|
+
"Should be able to retrieve both draft and published processes"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def test_get_process_allow_drafts_false(self):
|
|
187
|
+
"""
|
|
188
|
+
Test getting a process with allow_drafts=False (should exclude drafts).
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
192
|
+
filter_settings.allow_drafts = False
|
|
193
|
+
process = self.__get_process(filter_settings = filter_settings)
|
|
194
|
+
|
|
195
|
+
self.assertIsInstance(process, AgenticProcess, "Expected an AgenticProcess")
|
|
196
|
+
self.assertFalse(
|
|
197
|
+
process.is_draft,
|
|
198
|
+
"Should be able to retrieve published revisions"
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from unittest import TestCase
|
|
2
|
+
import uuid
|
|
3
|
+
from pygeai.lab.managers import AILabManager
|
|
4
|
+
from pygeai.lab.models import FilterSettings, ProcessInstanceList, AgenticProcess, KnowledgeBase, AgenticActivity, ArtifactSignal, UserSignal, Event, SequenceFlow
|
|
5
|
+
from pygeai.core.common.exceptions import APIError, MissingRequirementException
|
|
6
|
+
import copy
|
|
7
|
+
|
|
8
|
+
ai_lab_manager: AILabManager
|
|
9
|
+
|
|
10
|
+
class TestAILabListProcessInstancesIntegration(TestCase):
|
|
11
|
+
|
|
12
|
+
def setUp(self):
|
|
13
|
+
self.ai_lab_manager = AILabManager()
|
|
14
|
+
# Using a known process ID that should have instances for testing
|
|
15
|
+
self.process_id = "6c9c99a0-9eb1-4647-9f2f-886cf6a51ac0"
|
|
16
|
+
self.filter_settings = FilterSettings(
|
|
17
|
+
start=0,
|
|
18
|
+
count=10,
|
|
19
|
+
is_active=False
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def __list_process_instances(self, process_id: str = None, filter_settings: FilterSettings = None):
|
|
24
|
+
process_id = process_id if process_id is not None else self.process_id
|
|
25
|
+
filter_settings = filter_settings if filter_settings is not None else self.filter_settings
|
|
26
|
+
return self.ai_lab_manager.list_process_instances(
|
|
27
|
+
process_id=process_id,
|
|
28
|
+
filter_settings=filter_settings
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_default_list_process_instances(self):
|
|
33
|
+
result = self.__list_process_instances()
|
|
34
|
+
self.assertIsInstance(result, ProcessInstanceList, "Expected a ProcessInstanceList")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_list_process_instances_completed(self):
|
|
38
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
39
|
+
filter_settings.status = "Completed"
|
|
40
|
+
result = self.__list_process_instances(filter_settings=filter_settings)
|
|
41
|
+
|
|
42
|
+
self.assertIsInstance(result, ProcessInstanceList, "Expected a ProcessInstanceList")
|
|
43
|
+
if result.instances:
|
|
44
|
+
for instance in result.instances:
|
|
45
|
+
self.assertTrue(
|
|
46
|
+
instance.status == 'Completed',
|
|
47
|
+
"Expected all instances to be completed"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_list_process_instances_include_inactive(self):
|
|
52
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
53
|
+
filter_settings.is_active = True
|
|
54
|
+
result = self.__list_process_instances(filter_settings=filter_settings)
|
|
55
|
+
|
|
56
|
+
self.assertIsInstance(result, ProcessInstanceList, "Expected a ProcessInstanceList")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def test_list_process_instances_small_count(self):
|
|
60
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
61
|
+
filter_settings.count = 2
|
|
62
|
+
result = self.__list_process_instances(filter_settings=filter_settings)
|
|
63
|
+
|
|
64
|
+
self.assertIsInstance(result, ProcessInstanceList, "Expected a ProcessInstanceList")
|
|
65
|
+
self.assertLessEqual(
|
|
66
|
+
len(result.instances), 2,
|
|
67
|
+
"Expected list of process instances returned to be 2 or less"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_list_process_instances_big_count(self):
|
|
72
|
+
filter_settings = copy.deepcopy(self.filter_settings)
|
|
73
|
+
filter_settings.count = 50
|
|
74
|
+
result = self.__list_process_instances(filter_settings=filter_settings)
|
|
75
|
+
|
|
76
|
+
self.assertIsInstance(result, ProcessInstanceList, "Expected a ProcessInstanceList")
|
|
77
|
+
self.assertLessEqual(
|
|
78
|
+
len(result.instances), 50,
|
|
79
|
+
"Expected list of process instances returned to be 50 or less"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_list_process_instances_empty_process_id(self):
|
|
84
|
+
with self.assertRaises(ValueError) as exception:
|
|
85
|
+
self.__list_process_instances(process_id="")
|
|
86
|
+
|
|
87
|
+
# The specific error message will depend on implementation
|
|
88
|
+
self.assertTrue(
|
|
89
|
+
"Process ID must be provided" in str(exception.exception),
|
|
90
|
+
"Expected error message for empty process id"
|
|
91
|
+
)
|