pygeai 0.1.51b3__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 +9 -1
- 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 +18 -45
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +8 -12
- pygeai/assistant/managers.py +195 -157
- pygeai/assistant/mappers.py +4 -2
- pygeai/assistant/rag/clients.py +27 -67
- pygeai/assistant/rag/mappers.py +12 -6
- pygeai/assistant/rag/models.py +301 -159
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +308 -37
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +2 -8
- pygeai/chat/managers.py +9 -6
- 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 +7 -10
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +9 -9
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +71 -9
- pygeai/cli/commands/chat.py +676 -19
- pygeai/cli/commands/common.py +28 -24
- pygeai/cli/commands/configuration.py +66 -13
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +58 -11
- pygeai/cli/commands/evaluation.py +38 -38
- pygeai/cli/commands/feedback.py +3 -4
- pygeai/cli/commands/files.py +7 -8
- pygeai/cli/commands/gam.py +85 -10
- pygeai/cli/commands/lab/ai_lab.py +340 -484
- 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 +6 -7
- pygeai/cli/commands/migrate.py +1064 -436
- pygeai/cli/commands/organization.py +516 -11
- pygeai/cli/commands/rag.py +13 -14
- pygeai/cli/commands/rerank.py +3 -5
- pygeai/cli/commands/secrets.py +8 -9
- pygeai/cli/commands/usage_limits.py +18 -20
- pygeai/cli/commands/validators.py +144 -1
- pygeai/cli/commands/version.py +4 -5
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +170 -31
- pygeai/cli/geai_proxy.py +86 -25
- pygeai/cli/install_man.py +93 -22
- pygeai/cli/parsers.py +75 -25
- pygeai/cli/texts/help.py +265 -28
- pygeai/core/base/clients.py +53 -12
- pygeai/core/base/mappers.py +11 -2
- pygeai/core/base/session.py +95 -11
- pygeai/core/common/config.py +78 -14
- pygeai/core/common/exceptions.py +96 -6
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +23 -5
- pygeai/core/embeddings/managers.py +9 -4
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +8 -3
- pygeai/core/files/clients.py +23 -24
- pygeai/core/files/managers.py +121 -30
- pygeai/core/files/responses.py +4 -3
- pygeai/core/handlers.py +10 -1
- pygeai/core/llm/clients.py +22 -29
- pygeai/core/models.py +127 -11
- pygeai/core/plugins/clients.py +6 -6
- pygeai/core/rerank/clients.py +9 -3
- pygeai/core/rerank/managers.py +22 -5
- pygeai/core/secrets/clients.py +16 -37
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +159 -49
- 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 +854 -14
- pygeai/evaluation/clients.py +7 -4
- pygeai/evaluation/dataset/clients.py +46 -44
- pygeai/evaluation/plan/clients.py +28 -26
- pygeai/evaluation/result/clients.py +38 -5
- pygeai/gam/clients.py +50 -28
- pygeai/gam/endpoints.py +2 -1
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -90
- pygeai/lab/agents/clients.py +203 -162
- pygeai/lab/agents/endpoints.py +4 -0
- pygeai/lab/agents/mappers.py +57 -7
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +571 -541
- pygeai/lab/models.py +108 -19
- pygeai/lab/processes/clients.py +332 -340
- pygeai/lab/processes/mappers.py +3 -3
- 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/clients.py +67 -63
- pygeai/lab/strategies/mappers.py +1 -1
- pygeai/lab/tools/clients.py +85 -118
- pygeai/lab/tools/endpoints.py +4 -0
- pygeai/lab/tools/mappers.py +5 -5
- pygeai/man/man1/geai-proxy.1 +116 -0
- pygeai/man/man1/geai.1 +2580 -66
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +468 -146
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +245 -50
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/clients.py +34 -32
- pygeai/organization/limits/managers.py +108 -49
- pygeai/organization/managers.py +347 -53
- pygeai/organization/mappers.py +102 -2
- pygeai/organization/responses.py +58 -1
- pygeai/proxy/clients.py +6 -3
- pygeai/proxy/config.py +14 -1
- pygeai/proxy/managers.py +61 -33
- pygeai/proxy/servers.py +196 -51
- pygeai/proxy/tool.py +33 -16
- 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/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -82
- pygeai/tests/assistants/test_managers.py +191 -57
- 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/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 +5 -5
- pygeai/tests/core/base/data/models.py +7 -0
- pygeai/tests/core/base/test_mappers.py +43 -11
- pygeai/tests/core/base/test_models.py +3 -1
- 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/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +124 -78
- 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/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +61 -39
- 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/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_models.py +500 -3
- 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/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +298 -56
- pygeai/tests/organization/test_clients.py +600 -30
- 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/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/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -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/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/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -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/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/delete_file.py +1 -4
- pygeai/tests/snippets/files/get_file_content.py +2 -4
- pygeai/tests/snippets/files/get_file_data.py +1 -4
- pygeai/tests/snippets/files/get_file_list.py +1 -6
- pygeai/tests/snippets/files/upload_file.py +1 -5
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +23 -23
- pygeai/tests/snippets/lab/agents/create_agent.py +5 -8
- pygeai/tests/snippets/lab/agents/create_agent_2.py +1 -5
- 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 +1 -5
- pygeai/tests/snippets/lab/agents/get_agent.py +2 -11
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +2 -7
- pygeai/tests/snippets/lab/agents/list_agents.py +4 -7
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +2 -6
- pygeai/tests/snippets/lab/agents/update_agent.py +1 -5
- 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/create_process.py +3 -5
- pygeai/tests/snippets/lab/processes/create_task.py +3 -5
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +10 -19
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +2 -5
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +10 -16
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +13 -20
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +5 -7
- pygeai/tests/snippets/lab/processes/list_processes.py +5 -7
- pygeai/tests/snippets/lab/runner_1.py +1 -1
- pygeai/tests/snippets/lab/samples/summarize_files.py +3 -3
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +3 -6
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/tools/create_tool.py +4 -10
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +2 -6
- pygeai/tests/snippets/lab/tools/get_parameter.py +5 -7
- pygeai/tests/snippets/lab/tools/get_tool.py +5 -7
- pygeai/tests/snippets/lab/tools/list_tools.py +3 -7
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +3 -5
- pygeai/tests/snippets/lab/tools/set_parameters.py +4 -9
- pygeai/tests/snippets/lab/tools/update_tool.py +4 -8
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -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/{file_summarizer_example.py → use_cases/file_summarizer_example.py} +3 -3
- pygeai/tests/snippets/lab/{file_summarizer_example_2.py → use_cases/file_summarizer_example_2.py} +12 -12
- 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/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +2 -2
- 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_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/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.51b3.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/entry_points.txt +2 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/licenses/LICENSE +13 -1
- pygeai-0.6.0b15.dist-info/top_level.txt +1 -0
- docs/geai-proxy/README.md +0 -145
- docs/source/conf.py +0 -45
- pygeai/tests/core/test_managers.py +0 -233
- pygeai-0.1.51b3.dist-info/METADATA +0 -130
- pygeai-0.1.51b3.dist-info/RECORD +0 -324
- pygeai-0.1.51b3.dist-info/top_level.txt +0 -3
- scripts/bump_beta_version.py +0 -56
- {scripts → pygeai/analytics}/__init__.py +0 -0
- /pygeai/tests/snippets/lab/{c_code_fixer_agent_flow.py → use_cases/c_code_fixer_agent_flow.py} +0 -0
pygeai/lab/processes/clients.py
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
from json import JSONDecodeError
|
|
3
|
-
from typing import Any, Union, List
|
|
1
|
+
from typing import List
|
|
4
2
|
|
|
5
|
-
from pygeai
|
|
3
|
+
from pygeai import logger
|
|
4
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
6
7
|
from pygeai.lab.processes.endpoints import CREATE_PROCESS_V2, UPDATE_PROCESS_V2, UPSERT_PROCESS_V2, GET_PROCESS_V2, \
|
|
7
8
|
LIST_PROCESSES_V2, LIST_PROCESS_INSTANCES_V2, DELETE_PROCESS_V2, PUBLISH_PROCESS_REVISION_V2, CREATE_TASK_V2, \
|
|
8
9
|
UPDATE_TASK_V2, UPSERT_TASK_V2, GET_TASK_V2, LIST_TASKS_V2, DELETE_TASK_V2, PUBLISH_TASK_REVISION_V2, \
|
|
9
10
|
START_INSTANCE_V2, ABORT_INSTANCE_V2, GET_INSTANCE_V2, GET_INSTANCE_HISTORY_V2, GET_THREAD_INFORMATION_V2, \
|
|
10
11
|
SEND_USER_SIGNAL_V2, CREATE_KB_V1, GET_KB_V1, LIST_KBS_V1, DELETE_KB_V1, LIST_JOBS_V1
|
|
12
|
+
from pygeai.lab.clients import AILabClient
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
class AgenticProcessClient(
|
|
15
|
+
class AgenticProcessClient(AILabClient):
|
|
14
16
|
|
|
15
17
|
def create_process(
|
|
16
18
|
self,
|
|
17
|
-
project_id: str,
|
|
18
19
|
key: str,
|
|
19
20
|
name: str,
|
|
20
21
|
description: str = None,
|
|
@@ -27,14 +28,13 @@ class AgenticProcessClient(BaseClient):
|
|
|
27
28
|
sequence_flows: list = None,
|
|
28
29
|
variables: list = None,
|
|
29
30
|
automatic_publish: bool = False
|
|
30
|
-
):
|
|
31
|
+
) -> dict:
|
|
31
32
|
"""
|
|
32
33
|
Creates a new process in the specified project.
|
|
33
34
|
|
|
34
|
-
:param
|
|
35
|
-
:param key: str - Unique key for the process.
|
|
35
|
+
:param key: str - Unique key for the process within the project.
|
|
36
36
|
:param name: str - Name of the process.
|
|
37
|
-
:param description: str, optional - Description of the process.
|
|
37
|
+
:param description: str, optional - Description of the process purpose.
|
|
38
38
|
:param kb: dict, optional - Knowledge base configuration.
|
|
39
39
|
:param agentic_activities: list, optional - List of agentic activity definitions.
|
|
40
40
|
:param artifact_signals: list, optional - List of artifact signal definitions.
|
|
@@ -42,9 +42,10 @@ class AgenticProcessClient(BaseClient):
|
|
|
42
42
|
:param start_event: dict, optional - Start event definition.
|
|
43
43
|
:param end_event: dict, optional - End event definition.
|
|
44
44
|
:param sequence_flows: list, optional - List of sequence flow definitions.
|
|
45
|
-
:param variables: list, optional -
|
|
46
|
-
:param automatic_publish: bool -
|
|
47
|
-
:return: dict or str -
|
|
45
|
+
:param variables: list, optional - List of variables used in the process.
|
|
46
|
+
:param automatic_publish: bool, optional - Publish the process after creation (default: False).
|
|
47
|
+
:return: dict or str - Created process details or error message.
|
|
48
|
+
:raises InvalidAPIResponseException: If an error occurs during creation.
|
|
48
49
|
"""
|
|
49
50
|
endpoint = CREATE_PROCESS_V2
|
|
50
51
|
if automatic_publish:
|
|
@@ -52,7 +53,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
52
53
|
|
|
53
54
|
headers = {
|
|
54
55
|
"Authorization": self.api_service.token,
|
|
55
|
-
"ProjectId": project_id,
|
|
56
|
+
"ProjectId": self.project_id,
|
|
56
57
|
"Content-Type": "application/json",
|
|
57
58
|
"Accept": "application/json"
|
|
58
59
|
}
|
|
@@ -81,17 +82,15 @@ class AgenticProcessClient(BaseClient):
|
|
|
81
82
|
if variables:
|
|
82
83
|
data["processDefinition"]["variables"] = variables
|
|
83
84
|
|
|
85
|
+
logger.debug(f"Creating agentic process with data: {data}")
|
|
86
|
+
|
|
84
87
|
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
except JSONDecodeError:
|
|
88
|
-
result = response.text
|
|
88
|
+
validate_status_code(response)
|
|
89
|
+
return parse_json_response(response, f"create process for project {self.project_id}")
|
|
89
90
|
|
|
90
|
-
return result
|
|
91
91
|
|
|
92
92
|
def update_process(
|
|
93
93
|
self,
|
|
94
|
-
project_id: str,
|
|
95
94
|
process_id: str = None,
|
|
96
95
|
name: str = None,
|
|
97
96
|
key: str = None,
|
|
@@ -106,13 +105,12 @@ class AgenticProcessClient(BaseClient):
|
|
|
106
105
|
variables: list = None,
|
|
107
106
|
automatic_publish: bool = False,
|
|
108
107
|
upsert: bool = False
|
|
109
|
-
):
|
|
108
|
+
) -> dict:
|
|
110
109
|
"""
|
|
111
|
-
Updates an existing process
|
|
110
|
+
Updates an existing process or creates it if upsert is enabled.
|
|
112
111
|
|
|
113
|
-
:param project_id: str - Unique identifier of the project.
|
|
114
112
|
:param process_id: str, optional - Unique identifier of the process to update.
|
|
115
|
-
:param name: str, optional - Name of the process to update
|
|
113
|
+
:param name: str, optional - Name of the process to update or create.
|
|
116
114
|
:param key: str, optional - Updated unique key for the process.
|
|
117
115
|
:param description: str, optional - Updated description of the process.
|
|
118
116
|
:param kb: dict, optional - Updated knowledge base configuration.
|
|
@@ -123,10 +121,11 @@ class AgenticProcessClient(BaseClient):
|
|
|
123
121
|
:param end_event: dict, optional - Updated end event definition.
|
|
124
122
|
:param sequence_flows: list, optional - Updated list of sequence flow definitions.
|
|
125
123
|
:param variables: list, optional - Updated list of variables.
|
|
126
|
-
:param automatic_publish: bool -
|
|
127
|
-
:param upsert: bool -
|
|
128
|
-
:return: dict or str -
|
|
124
|
+
:param automatic_publish: bool, optional - Publish the process after updating (default: False).
|
|
125
|
+
:param upsert: bool, optional - Create the process if it does not exist (default: False).
|
|
126
|
+
:return: dict or str - Updated or created process details or error message.
|
|
129
127
|
:raises ValueError: If neither process_id nor name is provided.
|
|
128
|
+
:raises InvalidAPIResponseException: If an error occurs during the update.
|
|
130
129
|
"""
|
|
131
130
|
if not (process_id or name):
|
|
132
131
|
raise ValueError("Either process_id or name must be provided.")
|
|
@@ -140,7 +139,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
140
139
|
|
|
141
140
|
headers = {
|
|
142
141
|
"Authorization": self.api_service.token,
|
|
143
|
-
"ProjectId": project_id,
|
|
142
|
+
"ProjectId": self.project_id,
|
|
144
143
|
"Content-Type": "application/json",
|
|
145
144
|
"Accept": "application/json"
|
|
146
145
|
}
|
|
@@ -171,49 +170,50 @@ class AgenticProcessClient(BaseClient):
|
|
|
171
170
|
data["processDefinition"]["variables"] = variables
|
|
172
171
|
|
|
173
172
|
if kb is None and not upsert:
|
|
174
|
-
current_process = self.get_process(
|
|
173
|
+
current_process = self.get_process(process_id=process_id, process_name=name)
|
|
175
174
|
if isinstance(current_process, dict) and "processDefinition" in current_process:
|
|
176
175
|
kb = current_process["processDefinition"].get("kb")
|
|
177
176
|
|
|
178
177
|
if agentic_activities is None and not upsert:
|
|
179
|
-
current_process = self.get_process(
|
|
178
|
+
current_process = self.get_process(process_id=process_id, process_name=name)
|
|
180
179
|
if isinstance(current_process, dict) and "processDefinition" in current_process:
|
|
181
180
|
agentic_activities = current_process["processDefinition"].get("agenticActivities")
|
|
182
181
|
if agentic_activities is not None:
|
|
183
182
|
data["processDefinition"]["agenticActivities"] = agentic_activities
|
|
184
183
|
|
|
184
|
+
if process_id:
|
|
185
|
+
logger.debug(f"Updating agentic process with ID {process_id} with data: {data}")
|
|
186
|
+
else:
|
|
187
|
+
logger.debug(f"Updating agentic process with name{name} with data: {data}")
|
|
188
|
+
|
|
185
189
|
response = self.api_service.put(
|
|
186
190
|
endpoint=endpoint,
|
|
187
191
|
headers=headers,
|
|
188
192
|
data=data
|
|
189
193
|
)
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
except JSONDecodeError:
|
|
193
|
-
result = response.text
|
|
194
|
+
validate_status_code(response)
|
|
195
|
+
return parse_json_response(response, f"update process {process_id or name} in project {self.project_id}")
|
|
194
196
|
|
|
195
|
-
return result
|
|
196
197
|
|
|
197
198
|
def get_process(
|
|
198
199
|
self,
|
|
199
|
-
project_id: str,
|
|
200
200
|
process_id: str = None,
|
|
201
201
|
process_name: str = None,
|
|
202
202
|
revision: str = "0",
|
|
203
203
|
version: int = 0,
|
|
204
204
|
allow_drafts: bool = True
|
|
205
|
-
):
|
|
205
|
+
) -> dict:
|
|
206
206
|
"""
|
|
207
|
-
Retrieves details of a specific process
|
|
208
|
-
|
|
209
|
-
:param
|
|
210
|
-
:param
|
|
211
|
-
:param
|
|
212
|
-
:param
|
|
213
|
-
:param
|
|
214
|
-
:
|
|
215
|
-
:return: dict or str - JSON response containing the process details if successful, otherwise the raw response text.
|
|
207
|
+
Retrieves details of a specific process by its ID or name.
|
|
208
|
+
|
|
209
|
+
:param process_id: str, optional - Unique identifier of the process.
|
|
210
|
+
:param process_name: str, optional - Name of the process.
|
|
211
|
+
:param revision: str, optional - Revision of the process (default: '0').
|
|
212
|
+
:param version: int, optional - Version of the process (default: 0).
|
|
213
|
+
:param allow_drafts: bool, optional - Include draft processes (default: True).
|
|
214
|
+
:return: dict or str - Process details or error message.
|
|
216
215
|
:raises ValueError: If neither process_id nor process_name is provided.
|
|
216
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
217
217
|
"""
|
|
218
218
|
if not (process_id or process_name):
|
|
219
219
|
raise ValueError("Either process_id or process_name must be provided.")
|
|
@@ -223,7 +223,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
223
223
|
|
|
224
224
|
headers = {
|
|
225
225
|
"Authorization": self.api_service.token,
|
|
226
|
-
"ProjectId": project_id
|
|
226
|
+
"ProjectId": self.project_id
|
|
227
227
|
}
|
|
228
228
|
params = {
|
|
229
229
|
"revision": revision,
|
|
@@ -231,44 +231,45 @@ class AgenticProcessClient(BaseClient):
|
|
|
231
231
|
"allowDrafts": allow_drafts
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
+
if process_id:
|
|
235
|
+
logger.debug(f"Retrieving agentic process detail with ID {process_id}")
|
|
236
|
+
else:
|
|
237
|
+
logger.debug(f"Retrieving agentic process detail with name '{process_name}'")
|
|
238
|
+
|
|
234
239
|
response = self.api_service.get(
|
|
235
240
|
endpoint=endpoint,
|
|
236
241
|
headers=headers,
|
|
237
242
|
params=params
|
|
238
243
|
)
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
except JSONDecodeError:
|
|
242
|
-
result = response.text
|
|
244
|
+
validate_status_code(response)
|
|
245
|
+
return parse_json_response(response, f"retrieve process {process_id or process_name} for project {self.project_id}")
|
|
243
246
|
|
|
244
|
-
return result
|
|
245
247
|
|
|
246
248
|
def list_processes(
|
|
247
249
|
self,
|
|
248
|
-
project_id: str,
|
|
249
250
|
id: str = None,
|
|
250
251
|
name: str = None,
|
|
251
252
|
status: str = None,
|
|
252
253
|
start: str = "0",
|
|
253
254
|
count: str = "100",
|
|
254
255
|
allow_draft: bool = True
|
|
255
|
-
):
|
|
256
|
+
) -> dict:
|
|
256
257
|
"""
|
|
257
|
-
Retrieves a list of processes in the specified project
|
|
258
|
-
|
|
259
|
-
:param
|
|
260
|
-
:param
|
|
261
|
-
:param
|
|
262
|
-
:param
|
|
263
|
-
:param
|
|
264
|
-
:param
|
|
265
|
-
:
|
|
266
|
-
:
|
|
258
|
+
Retrieves a list of processes in the specified project.
|
|
259
|
+
|
|
260
|
+
:param id: str, optional - ID of the process to filter by.
|
|
261
|
+
:param name: str, optional - Name of the process to filter by.
|
|
262
|
+
:param status: str, optional - Status of the processes (e.g., 'active', 'inactive').
|
|
263
|
+
:param start: str, optional - Starting index for pagination (default: '0').
|
|
264
|
+
:param count: str, optional - Number of processes to retrieve (default: '100').
|
|
265
|
+
:param allow_draft: bool, optional - Include draft processes (default: True).
|
|
266
|
+
:return: dict or str - List of processes or error message.
|
|
267
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
267
268
|
"""
|
|
268
269
|
endpoint = LIST_PROCESSES_V2
|
|
269
270
|
headers = {
|
|
270
271
|
"Authorization": self.api_service.token,
|
|
271
|
-
"ProjectId": project_id
|
|
272
|
+
"ProjectId": self.project_id
|
|
272
273
|
}
|
|
273
274
|
params = {
|
|
274
275
|
"start": start,
|
|
@@ -282,36 +283,34 @@ class AgenticProcessClient(BaseClient):
|
|
|
282
283
|
if status:
|
|
283
284
|
params["status"] = status
|
|
284
285
|
|
|
286
|
+
logger.debug(f"Listing agentic processes for project with ID {self.project_id}")
|
|
287
|
+
|
|
285
288
|
response = self.api_service.get(
|
|
286
289
|
endpoint=endpoint,
|
|
287
290
|
headers=headers,
|
|
288
291
|
params=params
|
|
289
292
|
)
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
except JSONDecodeError:
|
|
293
|
-
result = response.text
|
|
293
|
+
validate_status_code(response)
|
|
294
|
+
return parse_json_response(response, f"list processes for project {self.project_id}")
|
|
294
295
|
|
|
295
|
-
return result
|
|
296
296
|
|
|
297
297
|
def list_process_instances(
|
|
298
298
|
self,
|
|
299
|
-
project_id: str,
|
|
300
299
|
process_id: str,
|
|
301
300
|
is_active: bool = True,
|
|
302
301
|
start: str = "0",
|
|
303
302
|
count: str = "10"
|
|
304
|
-
):
|
|
303
|
+
) -> dict:
|
|
305
304
|
"""
|
|
306
|
-
Retrieves a list of process instances for a specific process
|
|
307
|
-
|
|
308
|
-
:param
|
|
309
|
-
:param
|
|
310
|
-
:param
|
|
311
|
-
:param
|
|
312
|
-
:
|
|
313
|
-
:return: dict or str - JSON response containing the list of process instances if successful, otherwise the raw response text.
|
|
305
|
+
Retrieves a list of process instances for a specific process.
|
|
306
|
+
|
|
307
|
+
:param process_id: str - Unique identifier of the process.
|
|
308
|
+
:param is_active: bool, optional - List only active instances (default: True).
|
|
309
|
+
:param start: str, optional - Starting index for pagination (default: '0').
|
|
310
|
+
:param count: str, optional - Number of instances to retrieve (default: '10').
|
|
311
|
+
:return: dict or str - List of process instances or error message.
|
|
314
312
|
:raises ValueError: If process_id is not provided.
|
|
313
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
315
314
|
"""
|
|
316
315
|
if not process_id:
|
|
317
316
|
raise ValueError("Process ID must be provided.")
|
|
@@ -319,7 +318,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
319
318
|
endpoint = LIST_PROCESS_INSTANCES_V2.format(processId=process_id)
|
|
320
319
|
headers = {
|
|
321
320
|
"Authorization": self.api_service.token,
|
|
322
|
-
"ProjectId": project_id
|
|
321
|
+
"ProjectId": self.project_id
|
|
323
322
|
}
|
|
324
323
|
params = {
|
|
325
324
|
"isActive": is_active,
|
|
@@ -327,32 +326,30 @@ class AgenticProcessClient(BaseClient):
|
|
|
327
326
|
"count": count
|
|
328
327
|
}
|
|
329
328
|
|
|
329
|
+
logger.debug(f"Listing instances for agentic process with ID {process_id}")
|
|
330
|
+
|
|
330
331
|
response = self.api_service.get(
|
|
331
332
|
endpoint=endpoint,
|
|
332
333
|
headers=headers,
|
|
333
334
|
params=params
|
|
334
335
|
)
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
except JSONDecodeError:
|
|
338
|
-
result = response.text
|
|
336
|
+
validate_status_code(response)
|
|
337
|
+
return parse_json_response(response, f"list process instances for process {process_id} in project {self.project_id}")
|
|
339
338
|
|
|
340
|
-
return result
|
|
341
339
|
|
|
342
340
|
def delete_process(
|
|
343
341
|
self,
|
|
344
|
-
project_id: str,
|
|
345
342
|
process_id: str = None,
|
|
346
343
|
process_name: str = None
|
|
347
|
-
):
|
|
344
|
+
) -> dict:
|
|
348
345
|
"""
|
|
349
|
-
Deletes a specific process
|
|
346
|
+
Deletes a specific process by its ID or name.
|
|
350
347
|
|
|
351
|
-
:param
|
|
352
|
-
:param
|
|
353
|
-
:
|
|
354
|
-
:return: dict or str - JSON response confirming the deletion if successful, otherwise the raw response text.
|
|
348
|
+
:param process_id: str, optional - Unique identifier of the process.
|
|
349
|
+
:param process_name: str, optional - Name of the process.
|
|
350
|
+
:return: dict or str - Confirmation of deletion or error message.
|
|
355
351
|
:raises ValueError: If neither process_id nor process_name is provided.
|
|
352
|
+
:raises InvalidAPIResponseException: If an error occurs during deletion.
|
|
356
353
|
"""
|
|
357
354
|
if not (process_id or process_name):
|
|
358
355
|
raise ValueError("Either process_id or process_name must be provided.")
|
|
@@ -362,36 +359,37 @@ class AgenticProcessClient(BaseClient):
|
|
|
362
359
|
|
|
363
360
|
headers = {
|
|
364
361
|
"Authorization": self.api_service.token,
|
|
365
|
-
"ProjectId": project_id
|
|
362
|
+
"ProjectId": self.project_id
|
|
366
363
|
}
|
|
367
364
|
|
|
365
|
+
logger.debug(f"Deleting agentic process with ID {process_id}")
|
|
366
|
+
|
|
368
367
|
response = self.api_service.delete(
|
|
369
368
|
endpoint=endpoint,
|
|
370
369
|
headers=headers
|
|
371
370
|
)
|
|
372
|
-
try:
|
|
373
|
-
result = response.json()
|
|
374
|
-
except JSONDecodeError:
|
|
375
|
-
result = response.text
|
|
376
371
|
|
|
377
|
-
|
|
372
|
+
if response.status_code != 204:
|
|
373
|
+
logger.error(f"Unable to delete process {process_id or process_name} from project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
374
|
+
raise InvalidAPIResponseException(f"Unable to delete process {process_id or process_name} from project {self.project_id}: {response.text}")
|
|
375
|
+
else:
|
|
376
|
+
return {}
|
|
378
377
|
|
|
379
378
|
def publish_process_revision(
|
|
380
379
|
self,
|
|
381
|
-
project_id: str,
|
|
382
380
|
process_id: str = None,
|
|
383
381
|
process_name: str = None,
|
|
384
382
|
revision: str = None
|
|
385
|
-
):
|
|
383
|
+
) -> dict:
|
|
386
384
|
"""
|
|
387
|
-
Publishes a specific revision of a process
|
|
385
|
+
Publishes a specific revision of a process.
|
|
388
386
|
|
|
389
|
-
:param
|
|
390
|
-
:param
|
|
391
|
-
:param
|
|
392
|
-
:
|
|
393
|
-
:return: dict or str - JSON response containing the result of the publish operation if successful, otherwise the raw response text.
|
|
387
|
+
:param process_id: str, optional - Unique identifier of the process.
|
|
388
|
+
:param process_name: str, optional - Name of the process.
|
|
389
|
+
:param revision: str, optional - Revision of the process to publish.
|
|
390
|
+
:return: dict or str - Result of the publish operation or error message.
|
|
394
391
|
:raises ValueError: If neither process_id nor process_name is provided, or if revision is not specified.
|
|
392
|
+
:raises InvalidAPIResponseException: If an error occurs during publishing.
|
|
395
393
|
"""
|
|
396
394
|
if not (process_id or process_name):
|
|
397
395
|
raise ValueError("Either process_id or process_name must be provided.")
|
|
@@ -403,9 +401,14 @@ class AgenticProcessClient(BaseClient):
|
|
|
403
401
|
|
|
404
402
|
headers = {
|
|
405
403
|
"Authorization": self.api_service.token,
|
|
406
|
-
"ProjectId": project_id
|
|
404
|
+
"ProjectId": self.project_id
|
|
407
405
|
}
|
|
408
406
|
|
|
407
|
+
if process_id:
|
|
408
|
+
logger.debug(f"Publishing revision {revision} for agentic process with ID {process_id}")
|
|
409
|
+
else:
|
|
410
|
+
logger.debug(f"Publishing revision {revision} for agentic process with name '{process_name}'")
|
|
411
|
+
|
|
409
412
|
response = self.api_service.post(
|
|
410
413
|
endpoint=endpoint,
|
|
411
414
|
headers=headers,
|
|
@@ -413,16 +416,12 @@ class AgenticProcessClient(BaseClient):
|
|
|
413
416
|
"revision": revision
|
|
414
417
|
}
|
|
415
418
|
)
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
except JSONDecodeError:
|
|
419
|
-
result = response.text
|
|
419
|
+
validate_status_code(response)
|
|
420
|
+
return parse_json_response(response, f"publish revision {revision} for process {process_id or process_name} in project {self.project_id}")
|
|
420
421
|
|
|
421
|
-
return result
|
|
422
422
|
|
|
423
423
|
def create_task(
|
|
424
424
|
self,
|
|
425
|
-
project_id: str,
|
|
426
425
|
name: str,
|
|
427
426
|
description: str = None,
|
|
428
427
|
title_template: str = None,
|
|
@@ -430,19 +429,19 @@ class AgenticProcessClient(BaseClient):
|
|
|
430
429
|
prompt_data: dict = None,
|
|
431
430
|
artifact_types: List[dict] = None,
|
|
432
431
|
automatic_publish: bool = False
|
|
433
|
-
):
|
|
432
|
+
) -> dict:
|
|
434
433
|
"""
|
|
435
434
|
Creates a new task in the specified project.
|
|
436
435
|
|
|
437
|
-
:param
|
|
438
|
-
:param
|
|
439
|
-
:param
|
|
440
|
-
:param
|
|
441
|
-
:param
|
|
442
|
-
:param
|
|
443
|
-
:param
|
|
444
|
-
:
|
|
445
|
-
:
|
|
436
|
+
:param name: str - Name of the task, unique within the project, excluding ':' or '/'.
|
|
437
|
+
:param description: str, optional - Description of the task purpose.
|
|
438
|
+
:param title_template: str, optional - Template for task instance names (e.g., 'specs for {{issue}}').
|
|
439
|
+
:param id: str, optional - Custom identifier for the task.
|
|
440
|
+
:param prompt_data: dict, optional - Prompt configuration for task execution.
|
|
441
|
+
:param artifact_types: List[dict], optional - List of artifact types with 'name', 'description', 'isRequired', 'usageType', and 'artifactVariableKey'.
|
|
442
|
+
:param automatic_publish: bool, optional - Publish the task after creation (default: False).
|
|
443
|
+
:return: dict or str - Created task details or error message.
|
|
444
|
+
:raises InvalidAPIResponseException: If an error occurs during creation.
|
|
446
445
|
"""
|
|
447
446
|
endpoint = CREATE_TASK_V2
|
|
448
447
|
if automatic_publish:
|
|
@@ -450,7 +449,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
450
449
|
|
|
451
450
|
headers = {
|
|
452
451
|
"Authorization": self.api_service.token,
|
|
453
|
-
"ProjectId": project_id,
|
|
452
|
+
"ProjectId": self.project_id,
|
|
454
453
|
"Content-Type": "application/json",
|
|
455
454
|
"Accept": "application/json"
|
|
456
455
|
}
|
|
@@ -470,26 +469,24 @@ class AgenticProcessClient(BaseClient):
|
|
|
470
469
|
if artifact_types:
|
|
471
470
|
data["taskDefinition"]["artifactTypes"] = artifact_types
|
|
472
471
|
|
|
473
|
-
|
|
474
|
-
try:
|
|
475
|
-
return response.json()
|
|
476
|
-
except JSONDecodeError:
|
|
477
|
-
return response.text
|
|
472
|
+
logger.debug(f"Creating task with data: {data}")
|
|
478
473
|
|
|
474
|
+
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
475
|
+
validate_status_code(response)
|
|
476
|
+
return parse_json_response(response, f"create task for project {self.project_id}")
|
|
479
477
|
def get_task(
|
|
480
478
|
self,
|
|
481
|
-
project_id: str,
|
|
482
479
|
task_id: str,
|
|
483
480
|
task_name: str = None
|
|
484
|
-
):
|
|
481
|
+
) -> dict:
|
|
485
482
|
"""
|
|
486
|
-
Retrieves details of a specific task
|
|
483
|
+
Retrieves details of a specific task by its ID or name.
|
|
487
484
|
|
|
488
|
-
:param
|
|
489
|
-
:param
|
|
490
|
-
:
|
|
491
|
-
:return: dict or str - JSON response containing the task details if successful, otherwise raw text.
|
|
485
|
+
:param task_id: str, optional - Unique identifier of the task.
|
|
486
|
+
:param task_name: str, optional - Name of the task.
|
|
487
|
+
:return: dict or str - Task details or error message.
|
|
492
488
|
:raises ValueError: If neither task_id nor task_name is provided.
|
|
489
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
493
490
|
"""
|
|
494
491
|
if not (task_id or task_name):
|
|
495
492
|
raise ValueError("Either task_id or task_name must be provided.")
|
|
@@ -498,37 +495,38 @@ class AgenticProcessClient(BaseClient):
|
|
|
498
495
|
endpoint = GET_TASK_V2.format(taskId=identifier)
|
|
499
496
|
headers = {
|
|
500
497
|
"Authorization": self.api_service.token,
|
|
501
|
-
"ProjectId": project_id
|
|
498
|
+
"ProjectId": self.project_id
|
|
502
499
|
}
|
|
503
500
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
return response.text
|
|
501
|
+
if task_id:
|
|
502
|
+
logger.debug(f"Retrieving task detail with ID {task_id}")
|
|
503
|
+
else:
|
|
504
|
+
logger.debug(f"Retrieving task detail with name {task_name}")
|
|
509
505
|
|
|
506
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers)
|
|
507
|
+
validate_status_code(response)
|
|
508
|
+
return parse_json_response(response, f"retrieve task {task_id or task_name} for project {self.project_id}")
|
|
510
509
|
def list_tasks(
|
|
511
510
|
self,
|
|
512
|
-
project_id: str,
|
|
513
511
|
id: str = None,
|
|
514
512
|
start: str = "0",
|
|
515
513
|
count: str = "100",
|
|
516
514
|
allow_drafts: bool = True
|
|
517
|
-
):
|
|
515
|
+
) -> dict:
|
|
518
516
|
"""
|
|
519
517
|
Retrieves a list of tasks in the specified project.
|
|
520
518
|
|
|
521
|
-
:param project_id: str - Unique identifier of the project.
|
|
522
519
|
:param id: str, optional - ID of the task to filter by.
|
|
523
|
-
:param start: str - Starting index for pagination
|
|
524
|
-
:param count: str - Number of tasks to retrieve
|
|
525
|
-
:param allow_drafts: bool -
|
|
526
|
-
:return: dict or str -
|
|
520
|
+
:param start: str, optional - Starting index for pagination (default: '0').
|
|
521
|
+
:param count: str, optional - Number of tasks to retrieve (default: '100').
|
|
522
|
+
:param allow_drafts: bool, optional - Include draft tasks (default: True).
|
|
523
|
+
:return: dict or str - List of tasks or error message.
|
|
524
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
527
525
|
"""
|
|
528
526
|
endpoint = LIST_TASKS_V2
|
|
529
527
|
headers = {
|
|
530
528
|
"Authorization": self.api_service.token,
|
|
531
|
-
"ProjectId": project_id
|
|
529
|
+
"ProjectId": self.project_id
|
|
532
530
|
}
|
|
533
531
|
params = {
|
|
534
532
|
"start": start,
|
|
@@ -538,15 +536,13 @@ class AgenticProcessClient(BaseClient):
|
|
|
538
536
|
if id:
|
|
539
537
|
params["id"] = id
|
|
540
538
|
|
|
541
|
-
|
|
542
|
-
try:
|
|
543
|
-
return response.json()
|
|
544
|
-
except JSONDecodeError:
|
|
545
|
-
return response.text
|
|
539
|
+
logger.debug(f"Listing tasks for project with ID {self.project_id}")
|
|
546
540
|
|
|
541
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers, params=params)
|
|
542
|
+
validate_status_code(response)
|
|
543
|
+
return parse_json_response(response, f"list tasks for project {self.project_id}")
|
|
547
544
|
def update_task(
|
|
548
545
|
self,
|
|
549
|
-
project_id: str,
|
|
550
546
|
task_id: str,
|
|
551
547
|
name: str = None,
|
|
552
548
|
description: str = None,
|
|
@@ -556,22 +552,22 @@ class AgenticProcessClient(BaseClient):
|
|
|
556
552
|
artifact_types: List[dict] = None,
|
|
557
553
|
automatic_publish: bool = False,
|
|
558
554
|
upsert: bool = False
|
|
559
|
-
):
|
|
555
|
+
) -> dict:
|
|
560
556
|
"""
|
|
561
|
-
Updates an existing task
|
|
557
|
+
Updates an existing task or creates it if upsert is enabled.
|
|
562
558
|
|
|
563
|
-
:param project_id: str - Unique identifier of the project where the task resides.
|
|
564
559
|
:param task_id: str - Unique identifier of the task to update.
|
|
565
|
-
:param name: str, optional - Updated name of the task,
|
|
566
|
-
:param description: str, optional - Updated description of
|
|
567
|
-
:param title_template: str, optional - Updated template for
|
|
568
|
-
:param id: str, optional - Custom identifier for the task
|
|
569
|
-
:param prompt_data: dict, optional - Updated prompt configuration
|
|
570
|
-
:param artifact_types: List[dict], optional - Updated list of artifact types
|
|
571
|
-
:param automatic_publish: bool -
|
|
572
|
-
:param upsert: bool -
|
|
573
|
-
:return: dict or str -
|
|
560
|
+
:param name: str, optional - Updated name of the task, unique within the project, excluding ':' or '/'.
|
|
561
|
+
:param description: str, optional - Updated description of the task purpose.
|
|
562
|
+
:param title_template: str, optional - Updated template for task instance names (e.g., 'specs for {{issue}}').
|
|
563
|
+
:param id: str, optional - Custom identifier for the task (used in upsert mode).
|
|
564
|
+
:param prompt_data: dict, optional - Updated prompt configuration for task execution.
|
|
565
|
+
:param artifact_types: List[dict], optional - Updated list of artifact types with 'name', 'description', 'isRequired', 'usageType', and 'artifactVariableKey'.
|
|
566
|
+
:param automatic_publish: bool, optional - Publish the task after updating (default: False).
|
|
567
|
+
:param upsert: bool, optional - Create the task if it does not exist (default: False).
|
|
568
|
+
:return: dict or str - Updated or created task details or error message.
|
|
574
569
|
:raises ValueError: If task_id is not provided.
|
|
570
|
+
:raises InvalidAPIResponseException: If an error occurs during the update.
|
|
575
571
|
"""
|
|
576
572
|
if not task_id:
|
|
577
573
|
raise ValueError("Task ID must be provided.")
|
|
@@ -584,7 +580,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
584
580
|
|
|
585
581
|
headers = {
|
|
586
582
|
"Authorization": self.api_service.token,
|
|
587
|
-
"ProjectId": project_id,
|
|
583
|
+
"ProjectId": self.project_id,
|
|
588
584
|
"Content-Type": "application/json",
|
|
589
585
|
"Accept": "application/json"
|
|
590
586
|
}
|
|
@@ -604,26 +600,24 @@ class AgenticProcessClient(BaseClient):
|
|
|
604
600
|
if artifact_types is not None:
|
|
605
601
|
data["taskDefinition"]["artifactTypes"] = artifact_types
|
|
606
602
|
|
|
607
|
-
|
|
608
|
-
try:
|
|
609
|
-
return response.json()
|
|
610
|
-
except JSONDecodeError:
|
|
611
|
-
return response.text
|
|
603
|
+
logger.debug(f"Updating task with ID {task_id} with data: {data}")
|
|
612
604
|
|
|
605
|
+
response = self.api_service.put(endpoint=endpoint, headers=headers, data=data)
|
|
606
|
+
validate_status_code(response)
|
|
607
|
+
return parse_json_response(response, f"update task {task_id} in project {self.project_id}")
|
|
613
608
|
def delete_task(
|
|
614
609
|
self,
|
|
615
|
-
project_id: str,
|
|
616
610
|
task_id: str,
|
|
617
611
|
task_name: str = None
|
|
618
|
-
):
|
|
612
|
+
) -> dict:
|
|
619
613
|
"""
|
|
620
|
-
Deletes a specific task
|
|
614
|
+
Deletes a specific task by its ID or name.
|
|
621
615
|
|
|
622
|
-
:param
|
|
623
|
-
:param
|
|
624
|
-
:
|
|
625
|
-
:return: dict or str - JSON response confirming deletion if successful, otherwise raw text.
|
|
616
|
+
:param task_id: str, optional - Unique identifier of the task.
|
|
617
|
+
:param task_name: str, optional - Name of the task.
|
|
618
|
+
:return: dict or str - Confirmation of deletion or error message.
|
|
626
619
|
:raises ValueError: If neither task_id nor task_name is provided.
|
|
620
|
+
:raises InvalidAPIResponseException: If an error occurs during deletion.
|
|
627
621
|
"""
|
|
628
622
|
if not (task_id or task_name):
|
|
629
623
|
raise ValueError("Either task_id or task_name must be provided.")
|
|
@@ -632,31 +626,37 @@ class AgenticProcessClient(BaseClient):
|
|
|
632
626
|
endpoint = DELETE_TASK_V2.format(taskId=identifier)
|
|
633
627
|
headers = {
|
|
634
628
|
"Authorization": self.api_service.token,
|
|
635
|
-
"ProjectId": project_id
|
|
629
|
+
"ProjectId": self.project_id
|
|
636
630
|
}
|
|
637
631
|
|
|
632
|
+
if task_id:
|
|
633
|
+
logger.debug(f"Deleting task with ID {task_id}")
|
|
634
|
+
else:
|
|
635
|
+
logger.debug(f"Deleting task with name {task_name}")
|
|
636
|
+
|
|
638
637
|
response = self.api_service.delete(endpoint=endpoint, headers=headers)
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
638
|
+
|
|
639
|
+
if response.status_code != 204:
|
|
640
|
+
logger.error(f"Unable to delete task {task_id or task_name} from project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
641
|
+
raise InvalidAPIResponseException(f"Unable to delete task {task_id or task_name} from project {self.project_id}: {response.text}")
|
|
642
|
+
else:
|
|
643
|
+
return {}
|
|
643
644
|
|
|
644
645
|
def publish_task_revision(
|
|
645
646
|
self,
|
|
646
|
-
project_id: str,
|
|
647
647
|
task_id: str,
|
|
648
648
|
task_name: str = None,
|
|
649
649
|
revision: str = None
|
|
650
|
-
):
|
|
650
|
+
) -> dict:
|
|
651
651
|
"""
|
|
652
|
-
Publishes a specific revision of a task
|
|
652
|
+
Publishes a specific revision of a task.
|
|
653
653
|
|
|
654
|
-
:param
|
|
655
|
-
:param
|
|
656
|
-
:param
|
|
657
|
-
:
|
|
658
|
-
:return: dict or str - JSON response containing the result of the publish operation if successful, otherwise raw text.
|
|
654
|
+
:param task_id: str, optional - Unique identifier of the task.
|
|
655
|
+
:param task_name: str, optional - Name of the task.
|
|
656
|
+
:param revision: str, optional - Revision of the task to publish.
|
|
657
|
+
:return: dict or str - Result of the publish operation or error message.
|
|
659
658
|
:raises ValueError: If neither task_id nor task_name is provided, or if revision is not specified.
|
|
659
|
+
:raises InvalidAPIResponseException: If an error occurs during publishing.
|
|
660
660
|
"""
|
|
661
661
|
if not (task_id or task_name):
|
|
662
662
|
raise ValueError("Either task_id or task_name must be provided.")
|
|
@@ -667,7 +667,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
667
667
|
endpoint = PUBLISH_TASK_REVISION_V2.format(taskId=identifier)
|
|
668
668
|
headers = {
|
|
669
669
|
"Authorization": self.api_service.token,
|
|
670
|
-
"ProjectId": project_id,
|
|
670
|
+
"ProjectId": self.project_id,
|
|
671
671
|
"Content-Type": "application/json",
|
|
672
672
|
"Accept": "application/json"
|
|
673
673
|
}
|
|
@@ -675,32 +675,33 @@ class AgenticProcessClient(BaseClient):
|
|
|
675
675
|
"revision": revision
|
|
676
676
|
}
|
|
677
677
|
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
return response.text
|
|
678
|
+
if task_id:
|
|
679
|
+
logger.debug(f"Publishing revision {revision} for task with ID {task_id}")
|
|
680
|
+
else:
|
|
681
|
+
logger.debug(f"Publishing revision {revision} for task with name {task_name}")
|
|
683
682
|
|
|
683
|
+
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
684
|
+
validate_status_code(response)
|
|
685
|
+
return parse_json_response(response, f"publish revision {revision} for task {task_id or task_name} in project {self.project_id}")
|
|
684
686
|
def start_instance(
|
|
685
687
|
self,
|
|
686
|
-
project_id: str,
|
|
687
688
|
process_name: str,
|
|
688
689
|
subject: str = None,
|
|
689
690
|
variables: list = None
|
|
690
|
-
):
|
|
691
|
+
) -> dict:
|
|
691
692
|
"""
|
|
692
|
-
Starts a new process instance
|
|
693
|
+
Starts a new process instance.
|
|
693
694
|
|
|
694
|
-
:param
|
|
695
|
-
:param process_name: str - Name of the process to start an instance for.
|
|
695
|
+
:param process_name: str - Name of the process to start.
|
|
696
696
|
:param subject: str, optional - Subject of the process instance.
|
|
697
|
-
:param variables: list, optional - List of variables
|
|
698
|
-
:return: dict or str -
|
|
697
|
+
:param variables: list, optional - List of variables (e.g., [{"key": "location", "value": "Paris"}]).
|
|
698
|
+
:return: dict or str - Started instance details or error message.
|
|
699
|
+
:raises InvalidAPIResponseException: If an error occurs during instance creation.
|
|
699
700
|
"""
|
|
700
701
|
endpoint = START_INSTANCE_V2
|
|
701
702
|
headers = {
|
|
702
703
|
"Authorization": self.api_service.token,
|
|
703
|
-
"ProjectId": project_id,
|
|
704
|
+
"ProjectId": self.project_id,
|
|
704
705
|
"Content-Type": "application/json",
|
|
705
706
|
"Accept": "application/json"
|
|
706
707
|
}
|
|
@@ -714,24 +715,22 @@ class AgenticProcessClient(BaseClient):
|
|
|
714
715
|
if variables:
|
|
715
716
|
data["instanceDefinition"]["variables"] = variables
|
|
716
717
|
|
|
717
|
-
|
|
718
|
-
try:
|
|
719
|
-
return response.json()
|
|
720
|
-
except JSONDecodeError:
|
|
721
|
-
return response.text
|
|
718
|
+
logger.info(f"Starting instance for process with name '{process_name}'")
|
|
722
719
|
|
|
720
|
+
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
721
|
+
validate_status_code(response)
|
|
722
|
+
return parse_json_response(response, f"start instance for process {process_name} in project {self.project_id}")
|
|
723
723
|
def abort_instance(
|
|
724
724
|
self,
|
|
725
|
-
project_id: str,
|
|
726
725
|
instance_id: str
|
|
727
|
-
):
|
|
726
|
+
) -> dict:
|
|
728
727
|
"""
|
|
729
|
-
Aborts a specific process instance
|
|
728
|
+
Aborts a specific process instance.
|
|
730
729
|
|
|
731
|
-
:param project_id: str - Unique identifier of the project.
|
|
732
730
|
:param instance_id: str - Unique identifier of the instance to abort.
|
|
733
|
-
:return: dict or str -
|
|
731
|
+
:return: dict or str - Confirmation of abort operation or error message.
|
|
734
732
|
:raises ValueError: If instance_id is not provided.
|
|
733
|
+
:raises InvalidAPIResponseException: If an error occurs during the abort.
|
|
735
734
|
"""
|
|
736
735
|
if not instance_id:
|
|
737
736
|
raise ValueError("Instance ID must be provided.")
|
|
@@ -739,29 +738,27 @@ class AgenticProcessClient(BaseClient):
|
|
|
739
738
|
endpoint = ABORT_INSTANCE_V2.format(instanceId=instance_id)
|
|
740
739
|
headers = {
|
|
741
740
|
"Authorization": self.api_service.token,
|
|
742
|
-
"ProjectId": project_id,
|
|
741
|
+
"ProjectId": self.project_id,
|
|
743
742
|
"Content-Type": "application/json",
|
|
744
743
|
"Accept": "application/json"
|
|
745
744
|
}
|
|
746
745
|
|
|
747
|
-
|
|
748
|
-
try:
|
|
749
|
-
return response.json()
|
|
750
|
-
except JSONDecodeError:
|
|
751
|
-
return response.text
|
|
746
|
+
logger.info(f"Aborting instance with ID '{instance_id}'")
|
|
752
747
|
|
|
748
|
+
response = self.api_service.post(endpoint=endpoint, headers=headers, data={})
|
|
749
|
+
validate_status_code(response)
|
|
750
|
+
return parse_json_response(response, f"abort instance {instance_id} in project {self.project_id}")
|
|
753
751
|
def get_instance(
|
|
754
752
|
self,
|
|
755
|
-
project_id: str,
|
|
756
753
|
instance_id: str
|
|
757
|
-
):
|
|
754
|
+
) -> dict:
|
|
758
755
|
"""
|
|
759
|
-
Retrieves details of a specific process instance
|
|
756
|
+
Retrieves details of a specific process instance.
|
|
760
757
|
|
|
761
|
-
:param
|
|
762
|
-
:
|
|
763
|
-
:return: dict or str - JSON response containing the instance details if successful, otherwise raw text.
|
|
758
|
+
:param instance_id: str - Unique identifier of the instance.
|
|
759
|
+
:return: dict or str - Instance details or error message.
|
|
764
760
|
:raises ValueError: If instance_id is not provided.
|
|
761
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
765
762
|
"""
|
|
766
763
|
if not instance_id:
|
|
767
764
|
raise ValueError("Instance ID must be provided.")
|
|
@@ -769,27 +766,25 @@ class AgenticProcessClient(BaseClient):
|
|
|
769
766
|
endpoint = GET_INSTANCE_V2.format(instanceId=instance_id)
|
|
770
767
|
headers = {
|
|
771
768
|
"Authorization": self.api_service.token,
|
|
772
|
-
"ProjectId": project_id
|
|
769
|
+
"ProjectId": self.project_id
|
|
773
770
|
}
|
|
774
771
|
|
|
775
|
-
|
|
776
|
-
try:
|
|
777
|
-
return response.json()
|
|
778
|
-
except JSONDecodeError:
|
|
779
|
-
return response.text
|
|
772
|
+
logger.info(f"Retrieving instance detail with ID '{instance_id}'")
|
|
780
773
|
|
|
774
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers)
|
|
775
|
+
validate_status_code(response)
|
|
776
|
+
return parse_json_response(response, f"retrieve instance {instance_id} for project {self.project_id}")
|
|
781
777
|
def get_instance_history(
|
|
782
778
|
self,
|
|
783
|
-
project_id: str,
|
|
784
779
|
instance_id: str
|
|
785
|
-
):
|
|
780
|
+
) -> dict:
|
|
786
781
|
"""
|
|
787
|
-
Retrieves the history
|
|
782
|
+
Retrieves the history of a specific process instance.
|
|
788
783
|
|
|
789
|
-
:param
|
|
790
|
-
:
|
|
791
|
-
:return: dict or str - JSON response containing the instance history if successful, otherwise raw text.
|
|
784
|
+
:param instance_id: str - Unique identifier of the instance.
|
|
785
|
+
:return: dict or str - Instance history or error message.
|
|
792
786
|
:raises ValueError: If instance_id is not provided.
|
|
787
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
793
788
|
"""
|
|
794
789
|
if not instance_id:
|
|
795
790
|
raise ValueError("Instance ID must be provided.")
|
|
@@ -797,27 +792,25 @@ class AgenticProcessClient(BaseClient):
|
|
|
797
792
|
endpoint = GET_INSTANCE_HISTORY_V2.format(instanceId=instance_id)
|
|
798
793
|
headers = {
|
|
799
794
|
"Authorization": self.api_service.token,
|
|
800
|
-
"ProjectId": project_id
|
|
795
|
+
"ProjectId": self.project_id
|
|
801
796
|
}
|
|
802
797
|
|
|
803
|
-
|
|
804
|
-
try:
|
|
805
|
-
return response.json()
|
|
806
|
-
except JSONDecodeError:
|
|
807
|
-
return response.text
|
|
798
|
+
logger.info(f"Retrieving instance history with ID '{instance_id}'")
|
|
808
799
|
|
|
800
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers)
|
|
801
|
+
validate_status_code(response)
|
|
802
|
+
return parse_json_response(response, f"retrieve history for instance {instance_id} in project {self.project_id}")
|
|
809
803
|
def get_thread_information(
|
|
810
804
|
self,
|
|
811
|
-
project_id: str,
|
|
812
805
|
thread_id: str
|
|
813
|
-
):
|
|
806
|
+
) -> dict:
|
|
814
807
|
"""
|
|
815
|
-
Retrieves information about a specific thread
|
|
808
|
+
Retrieves information about a specific thread.
|
|
816
809
|
|
|
817
|
-
:param
|
|
818
|
-
:
|
|
819
|
-
:return: dict or str - JSON response containing the thread information if successful, otherwise raw text.
|
|
810
|
+
:param thread_id: str - Unique identifier of the thread.
|
|
811
|
+
:return: dict or str - Thread information or error message.
|
|
820
812
|
:raises ValueError: If thread_id is not provided.
|
|
813
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
821
814
|
"""
|
|
822
815
|
if not thread_id:
|
|
823
816
|
raise ValueError("Thread ID must be provided.")
|
|
@@ -825,29 +818,27 @@ class AgenticProcessClient(BaseClient):
|
|
|
825
818
|
endpoint = GET_THREAD_INFORMATION_V2.format(threadId=thread_id)
|
|
826
819
|
headers = {
|
|
827
820
|
"Authorization": self.api_service.token,
|
|
828
|
-
"ProjectId": project_id
|
|
821
|
+
"ProjectId": self.project_id
|
|
829
822
|
}
|
|
830
823
|
|
|
831
|
-
|
|
832
|
-
try:
|
|
833
|
-
return response.json()
|
|
834
|
-
except JSONDecodeError:
|
|
835
|
-
return response.text
|
|
824
|
+
logger.debug(f"Retrieving information about thread with ID {thread_id}")
|
|
836
825
|
|
|
826
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers)
|
|
827
|
+
validate_status_code(response)
|
|
828
|
+
return parse_json_response(response, f"retrieve thread information for thread {thread_id} in project {self.project_id}")
|
|
837
829
|
def send_user_signal(
|
|
838
830
|
self,
|
|
839
|
-
project_id: str,
|
|
840
831
|
instance_id: str,
|
|
841
832
|
signal_name: str
|
|
842
|
-
):
|
|
833
|
+
) -> dict:
|
|
843
834
|
"""
|
|
844
|
-
Sends a user signal to a specific process instance
|
|
835
|
+
Sends a user signal to a specific process instance.
|
|
845
836
|
|
|
846
|
-
:param
|
|
847
|
-
:param
|
|
848
|
-
:
|
|
849
|
-
:return: dict or str - JSON response confirming the signal operation if successful, otherwise raw text.
|
|
837
|
+
:param instance_id: str - Unique identifier of the instance.
|
|
838
|
+
:param signal_name: str - Name of the user signal (e.g., 'approval').
|
|
839
|
+
:return: dict or str - Confirmation of signal operation or error message.
|
|
850
840
|
:raises ValueError: If instance_id or signal_name is not provided.
|
|
841
|
+
:raises InvalidAPIResponseException: If an error occurs during signal sending.
|
|
851
842
|
"""
|
|
852
843
|
if not instance_id:
|
|
853
844
|
raise ValueError("Instance ID must be provided.")
|
|
@@ -857,7 +848,7 @@ class AgenticProcessClient(BaseClient):
|
|
|
857
848
|
endpoint = SEND_USER_SIGNAL_V2.format(instanceId=instance_id)
|
|
858
849
|
headers = {
|
|
859
850
|
"Authorization": self.api_service.token,
|
|
860
|
-
"ProjectId": project_id,
|
|
851
|
+
"ProjectId": self.project_id,
|
|
861
852
|
"Content-Type": "application/json",
|
|
862
853
|
"Accept": "application/json"
|
|
863
854
|
}
|
|
@@ -865,32 +856,30 @@ class AgenticProcessClient(BaseClient):
|
|
|
865
856
|
"name": signal_name
|
|
866
857
|
}
|
|
867
858
|
|
|
868
|
-
|
|
869
|
-
try:
|
|
870
|
-
return response.json()
|
|
871
|
-
except JSONDecodeError:
|
|
872
|
-
return response.text
|
|
859
|
+
logger.debug(f"Sending user signal to process instance with ID {instance_id} with data: {data}")
|
|
873
860
|
|
|
861
|
+
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
862
|
+
validate_status_code(response)
|
|
863
|
+
return parse_json_response(response, f"send user signal {signal_name} to instance {instance_id} in project {self.project_id}")
|
|
874
864
|
def create_kb(
|
|
875
865
|
self,
|
|
876
|
-
project_id: str,
|
|
877
866
|
name: str,
|
|
878
867
|
artifacts: List[str] = None,
|
|
879
868
|
metadata: List[str] = None
|
|
880
|
-
):
|
|
869
|
+
) -> dict:
|
|
881
870
|
"""
|
|
882
871
|
Creates a new knowledge base (KB) in the specified project.
|
|
883
872
|
|
|
884
|
-
:param project_id: str - Unique identifier of the project.
|
|
885
873
|
:param name: str - Name of the knowledge base.
|
|
886
874
|
:param artifacts: List[str], optional - List of artifact names associated with the KB.
|
|
887
875
|
:param metadata: List[str], optional - List of metadata fields for the KB.
|
|
888
|
-
:return: dict or str -
|
|
876
|
+
:return: dict or str - Created KB details or error message.
|
|
877
|
+
:raises InvalidAPIResponseException: If an error occurs during creation.
|
|
889
878
|
"""
|
|
890
879
|
endpoint = CREATE_KB_V1
|
|
891
880
|
headers = {
|
|
892
881
|
"Authorization": self.api_service.token,
|
|
893
|
-
"ProjectId": project_id,
|
|
882
|
+
"ProjectId": self.project_id,
|
|
894
883
|
"Content-Type": "application/json",
|
|
895
884
|
"Accept": "application/json"
|
|
896
885
|
}
|
|
@@ -904,30 +893,28 @@ class AgenticProcessClient(BaseClient):
|
|
|
904
893
|
if metadata:
|
|
905
894
|
data["KBDefinition"]["metadata"] = metadata
|
|
906
895
|
|
|
896
|
+
logger.debug(f"Creating KB with data: {data}")
|
|
897
|
+
|
|
907
898
|
response = self.api_service.post(
|
|
908
899
|
endpoint=endpoint,
|
|
909
900
|
headers=headers,
|
|
910
901
|
data=data
|
|
911
902
|
)
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
except JSONDecodeError:
|
|
915
|
-
return response.text
|
|
916
|
-
|
|
903
|
+
validate_status_code(response)
|
|
904
|
+
return parse_json_response(response, f"create knowledge base for project {self.project_id}")
|
|
917
905
|
def get_kb(
|
|
918
906
|
self,
|
|
919
|
-
project_id: str,
|
|
920
907
|
kb_id: str = None,
|
|
921
908
|
kb_name: str = None
|
|
922
|
-
):
|
|
909
|
+
) -> dict:
|
|
923
910
|
"""
|
|
924
|
-
Retrieves details of a specific knowledge base (KB)
|
|
911
|
+
Retrieves details of a specific knowledge base (KB) by its ID or name.
|
|
925
912
|
|
|
926
|
-
:param
|
|
927
|
-
:param
|
|
928
|
-
:
|
|
929
|
-
:return: dict or str - JSON response containing the KB details if successful, otherwise raw text.
|
|
913
|
+
:param kb_id: str, optional - Unique identifier of the KB.
|
|
914
|
+
:param kb_name: str, optional - Name of the KB.
|
|
915
|
+
:return: dict or str - KB details or error message.
|
|
930
916
|
:raises ValueError: If neither kb_id nor kb_name is provided.
|
|
917
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
931
918
|
"""
|
|
932
919
|
if not (kb_id or kb_name):
|
|
933
920
|
raise ValueError("Either kb_id or kb_name must be provided.")
|
|
@@ -936,35 +923,37 @@ class AgenticProcessClient(BaseClient):
|
|
|
936
923
|
endpoint = GET_KB_V1.format(kbId=identifier)
|
|
937
924
|
headers = {
|
|
938
925
|
"Authorization": self.api_service.token,
|
|
939
|
-
"ProjectId": project_id
|
|
926
|
+
"ProjectId": self.project_id
|
|
940
927
|
}
|
|
941
928
|
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
return response.text
|
|
929
|
+
if kb_id:
|
|
930
|
+
logger.debug(f"Retrieving KB detail with ID {kb_id}")
|
|
931
|
+
else:
|
|
932
|
+
logger.debug(f"Retrieving KB detail with name {kb_name}")
|
|
947
933
|
|
|
934
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers)
|
|
935
|
+
kb_identifier = kb_id or kb_name
|
|
936
|
+
validate_status_code(response)
|
|
937
|
+
return parse_json_response(response, f"retrieve knowledge base {kb_identifier} for project {self.project_id}")
|
|
948
938
|
def list_kbs(
|
|
949
939
|
self,
|
|
950
|
-
project_id: str,
|
|
951
940
|
name: str = None,
|
|
952
941
|
start: str = "0",
|
|
953
942
|
count: str = "100"
|
|
954
|
-
):
|
|
943
|
+
) -> dict:
|
|
955
944
|
"""
|
|
956
|
-
Retrieves a list of knowledge bases (KBs) in the specified project
|
|
945
|
+
Retrieves a list of knowledge bases (KBs) in the specified project.
|
|
957
946
|
|
|
958
|
-
:param
|
|
959
|
-
:param
|
|
960
|
-
:param
|
|
961
|
-
:
|
|
962
|
-
:
|
|
947
|
+
:param name: str, optional - Name of the KB to filter by.
|
|
948
|
+
:param start: str, optional - Starting index for pagination (default: '0').
|
|
949
|
+
:param count: str, optional - Number of KBs to retrieve (default: '100').
|
|
950
|
+
:return: dict or str - List of KBs or error message.
|
|
951
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
963
952
|
"""
|
|
964
953
|
endpoint = LIST_KBS_V1
|
|
965
954
|
headers = {
|
|
966
955
|
"Authorization": self.api_service.token,
|
|
967
|
-
"ProjectId": project_id
|
|
956
|
+
"ProjectId": self.project_id
|
|
968
957
|
}
|
|
969
958
|
params = {
|
|
970
959
|
"start": start,
|
|
@@ -973,26 +962,24 @@ class AgenticProcessClient(BaseClient):
|
|
|
973
962
|
if name:
|
|
974
963
|
params["name"] = name
|
|
975
964
|
|
|
976
|
-
|
|
977
|
-
try:
|
|
978
|
-
return response.json()
|
|
979
|
-
except JSONDecodeError:
|
|
980
|
-
return response.text
|
|
965
|
+
logger.debug(f"Listing tasks in project with ID {self.project_id}")
|
|
981
966
|
|
|
967
|
+
response = self.api_service.get(endpoint=endpoint, headers=headers, params=params)
|
|
968
|
+
validate_status_code(response)
|
|
969
|
+
return parse_json_response(response, f"list knowledge bases for project {self.project_id}")
|
|
982
970
|
def delete_kb(
|
|
983
971
|
self,
|
|
984
|
-
project_id: str,
|
|
985
972
|
kb_id: str = None,
|
|
986
973
|
kb_name: str = None
|
|
987
|
-
):
|
|
974
|
+
) -> dict:
|
|
988
975
|
"""
|
|
989
|
-
Deletes a specific knowledge base (KB)
|
|
976
|
+
Deletes a specific knowledge base (KB) by its ID or name.
|
|
990
977
|
|
|
991
|
-
:param
|
|
992
|
-
:param
|
|
993
|
-
:
|
|
994
|
-
:return: dict or str - JSON response confirming deletion if successful, otherwise raw text.
|
|
978
|
+
:param kb_id: str, optional - Unique identifier of the KB.
|
|
979
|
+
:param kb_name: str, optional - Name of the KB.
|
|
980
|
+
:return: dict or str - Confirmation of deletion or error message.
|
|
995
981
|
:raises ValueError: If neither kb_id nor kb_name is provided.
|
|
982
|
+
:raises InvalidAPIResponseException: If an error occurs during deletion.
|
|
996
983
|
"""
|
|
997
984
|
if not (kb_id or kb_name):
|
|
998
985
|
raise ValueError("Either kb_id or kb_name must be provided.")
|
|
@@ -1001,39 +988,45 @@ class AgenticProcessClient(BaseClient):
|
|
|
1001
988
|
endpoint = DELETE_KB_V1.format(kbId=identifier)
|
|
1002
989
|
headers = {
|
|
1003
990
|
"Authorization": self.api_service.token,
|
|
1004
|
-
"ProjectId": project_id
|
|
991
|
+
"ProjectId": self.project_id
|
|
1005
992
|
}
|
|
1006
993
|
|
|
994
|
+
if kb_id:
|
|
995
|
+
logger.debug(f"Deleting KB with ID {kb_id}")
|
|
996
|
+
else:
|
|
997
|
+
logger.debug(f"Deleting KB with name {kb_name}")
|
|
998
|
+
|
|
1007
999
|
response = self.api_service.delete(endpoint=endpoint, headers=headers)
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1000
|
+
|
|
1001
|
+
if response.status_code != 204:
|
|
1002
|
+
logger.error(f"Unable to delete knowledge base {kb_id or kb_name} from project {self.project_id}: JSONDecodeError parsing error (status {response.status_code}). Response: {response.text}")
|
|
1003
|
+
raise InvalidAPIResponseException(f"Unable to delete knowledge base {kb_id or kb_name} from project {self.project_id}: {response.text}")
|
|
1004
|
+
else:
|
|
1005
|
+
return {}
|
|
1012
1006
|
|
|
1013
1007
|
def list_jobs(
|
|
1014
1008
|
self,
|
|
1015
|
-
project_id: str,
|
|
1016
1009
|
start: str = "0",
|
|
1017
1010
|
count: str = "100",
|
|
1018
1011
|
topic: str = None,
|
|
1019
1012
|
token: str = None,
|
|
1020
1013
|
name: str = None
|
|
1021
|
-
):
|
|
1014
|
+
) -> dict:
|
|
1022
1015
|
"""
|
|
1023
|
-
Retrieves a list of jobs in the specified project
|
|
1024
|
-
|
|
1025
|
-
:param
|
|
1026
|
-
:param
|
|
1027
|
-
:param
|
|
1028
|
-
:param
|
|
1029
|
-
:param
|
|
1030
|
-
:
|
|
1031
|
-
:
|
|
1016
|
+
Retrieves a specific list of jobs in the specified project.
|
|
1017
|
+
|
|
1018
|
+
:param start: str, optional - Starting index for pagination (default: '0').
|
|
1019
|
+
:param count: str, optional - Number of jobs to retrieve (default: '100').
|
|
1020
|
+
:param topic: str - optional - Topiccollege of the jobs to filter by.
|
|
1021
|
+
:param token: str, optional - Token of the jobs to filter by.
|
|
1022
|
+
:param name: str, optional - Name of the jobs to filter by.
|
|
1023
|
+
:return: dict or str - List of jobs or error message.
|
|
1024
|
+
:raises InvalidAPIResponseException: If an error occurs during retrieval.
|
|
1032
1025
|
"""
|
|
1033
1026
|
endpoint = LIST_JOBS_V1
|
|
1034
1027
|
headers = {
|
|
1035
1028
|
"Authorization": self.api_service.token,
|
|
1036
|
-
"ProjectId": project_id
|
|
1029
|
+
"ProjectId": self.project_id
|
|
1037
1030
|
}
|
|
1038
1031
|
params = {
|
|
1039
1032
|
"start": start,
|
|
@@ -1046,14 +1039,13 @@ class AgenticProcessClient(BaseClient):
|
|
|
1046
1039
|
if name:
|
|
1047
1040
|
params["name"] = name
|
|
1048
1041
|
|
|
1042
|
+
logger.debug(f"Listing jobs for project with ID {self.project_id}")
|
|
1043
|
+
|
|
1049
1044
|
response = self.api_service.get(
|
|
1050
1045
|
endpoint=endpoint,
|
|
1051
1046
|
headers=headers,
|
|
1052
1047
|
params=params
|
|
1053
1048
|
)
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
except JSONDecodeError:
|
|
1057
|
-
result = response.text
|
|
1049
|
+
validate_status_code(response)
|
|
1050
|
+
return parse_json_response(response, f"list jobs for project {self.project_id}")
|
|
1058
1051
|
|
|
1059
|
-
return result
|