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.
- 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/managers.py
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
from typing import Union, Optional, List
|
|
2
2
|
|
|
3
|
+
from pygeai import logger
|
|
4
|
+
from pygeai.admin.clients import AdminClient
|
|
3
5
|
from pygeai.core.base.mappers import ResponseMapper
|
|
4
|
-
from pygeai.core.base.responses import
|
|
6
|
+
from pygeai.core.base.responses import EmptyResponse
|
|
7
|
+
from pygeai.core.common.exceptions import APIError, MissingRequirementException
|
|
5
8
|
from pygeai.core.handlers import ErrorHandler
|
|
6
9
|
from pygeai.lab.agents.clients import AgentClient
|
|
7
10
|
from pygeai.lab.agents.mappers import AgentMapper
|
|
@@ -19,35 +22,31 @@ from pygeai.lab.tools.mappers import ToolMapper
|
|
|
19
22
|
|
|
20
23
|
class AILabManager:
|
|
21
24
|
|
|
22
|
-
def __init__(self, api_key: str = None, base_url: str = None, alias: str =
|
|
23
|
-
self.__agent_client = AgentClient(api_key=api_key, base_url=base_url, alias=alias)
|
|
24
|
-
self.__tool_client = ToolClient(api_key=api_key, base_url=base_url, alias=alias)
|
|
25
|
-
self.__reasoning_strategy_client = ReasoningStrategyClient(api_key=api_key, base_url=base_url, alias=alias)
|
|
26
|
-
self.__process_client = AgenticProcessClient(api_key=api_key, base_url=base_url, alias=alias)
|
|
25
|
+
def __init__(self, api_key: str = None, base_url: str = None, alias: str = None, project_id: str = None):
|
|
26
|
+
self.__agent_client = AgentClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
|
|
27
|
+
self.__tool_client = ToolClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
|
|
28
|
+
self.__reasoning_strategy_client = ReasoningStrategyClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
|
|
29
|
+
self.__process_client = AgenticProcessClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
|
|
27
30
|
|
|
28
31
|
def get_agent_list(
|
|
29
32
|
self,
|
|
30
|
-
|
|
31
|
-
filter_settings: FilterSettings = None
|
|
33
|
+
filter_settings: Optional[FilterSettings] = None
|
|
32
34
|
) -> AgentList:
|
|
33
35
|
"""
|
|
34
36
|
Retrieves a list of agents for a given project based on filter settings.
|
|
35
37
|
|
|
36
38
|
This method queries the agent client to fetch a list of agents associated with the specified
|
|
37
|
-
project ID, applying the provided filter settings.
|
|
38
|
-
them to an `ErrorListResponse`. Otherwise, it maps the response to an `AgentList`.
|
|
39
|
+
project ID, applying the provided filter settings.
|
|
39
40
|
|
|
40
|
-
:param
|
|
41
|
-
:param filter_settings: FilterSettings - The filter settings to apply to the agent list query.
|
|
41
|
+
:param filter_settings: The filter settings to apply to the agent list query.
|
|
42
42
|
Includes fields such as status, start, count, access_scope, allow_drafts, and allow_external.
|
|
43
|
-
:return:
|
|
44
|
-
|
|
43
|
+
:return: An `AgentList` containing the retrieved agents.
|
|
44
|
+
:raises APIError: If the API returns errors.
|
|
45
45
|
"""
|
|
46
46
|
if not filter_settings:
|
|
47
47
|
filter_settings = FilterSettings()
|
|
48
48
|
|
|
49
49
|
response_data = self.__agent_client.list_agents(
|
|
50
|
-
project_id=project_id,
|
|
51
50
|
status=filter_settings.status,
|
|
52
51
|
start=filter_settings.start,
|
|
53
52
|
count=filter_settings.count,
|
|
@@ -56,36 +55,33 @@ class AILabManager:
|
|
|
56
55
|
allow_external=filter_settings.allow_external
|
|
57
56
|
)
|
|
58
57
|
if ErrorHandler.has_errors(response_data):
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
error = ErrorHandler.extract_error(response_data)
|
|
59
|
+
logger.error(f"Error received while obtaining agent list: {error}")
|
|
60
|
+
raise APIError(f"Error received while obtaining agent list: {error}")
|
|
62
61
|
|
|
62
|
+
result = AgentMapper.map_to_agent_list(response_data)
|
|
63
63
|
return result
|
|
64
64
|
|
|
65
65
|
def create_agent(
|
|
66
66
|
self,
|
|
67
|
-
project_id: str,
|
|
68
67
|
agent: Agent,
|
|
69
68
|
automatic_publish: bool = False
|
|
70
|
-
) ->
|
|
69
|
+
) -> Agent:
|
|
71
70
|
"""
|
|
72
71
|
Creates a new agent in the specified project using the provided agent configuration.
|
|
73
72
|
|
|
74
73
|
This method sends a request to the agent client to create an agent based on the attributes
|
|
75
|
-
of the provided `Agent` object.
|
|
76
|
-
`ErrorListResponse`. Otherwise, it maps the response to an `Agent` object.
|
|
74
|
+
of the provided `Agent` object.
|
|
77
75
|
|
|
78
|
-
:param
|
|
79
|
-
:param agent: Agent - The agent configuration object containing all necessary details,
|
|
76
|
+
:param agent: The agent configuration object containing all necessary details,
|
|
80
77
|
including name, access scope, public name, job description, avatar image, description,
|
|
81
78
|
and agent data (prompt, LLM config, and models).
|
|
82
|
-
:param automatic_publish:
|
|
79
|
+
:param automatic_publish: Whether to automatically publish the agent after creation.
|
|
83
80
|
Defaults to False.
|
|
84
|
-
:return:
|
|
85
|
-
|
|
81
|
+
:return: An `Agent` object representing the created agent.
|
|
82
|
+
:raises APIError: If the API returns errors.
|
|
86
83
|
"""
|
|
87
84
|
response_data = self.__agent_client.create_agent(
|
|
88
|
-
project_id=project_id,
|
|
89
85
|
name=agent.name,
|
|
90
86
|
access_scope=agent.access_scope,
|
|
91
87
|
public_name=agent.public_name,
|
|
@@ -93,48 +89,45 @@ class AILabManager:
|
|
|
93
89
|
avatar_image=agent.avatar_image,
|
|
94
90
|
description=agent.description,
|
|
95
91
|
agent_data_prompt=agent.agent_data.prompt.to_dict() if agent.agent_data is not None else None,
|
|
92
|
+
agent_data_strategy_name=agent.agent_data.strategy_name if agent.agent_data is not None else None,
|
|
96
93
|
agent_data_llm_config=agent.agent_data.llm_config.to_dict() if agent.agent_data is not None else None,
|
|
97
|
-
agent_data_models=agent.agent_data.models.to_dict() if agent.agent_data
|
|
94
|
+
agent_data_models=agent.agent_data.models.to_dict() if agent.agent_data and agent.agent_data.models else None,
|
|
98
95
|
agent_data_resource_pools=agent.agent_data.resource_pools.to_dict() if agent.agent_data and agent.agent_data.resource_pools else None,
|
|
99
96
|
automatic_publish=automatic_publish
|
|
100
97
|
)
|
|
101
98
|
if ErrorHandler.has_errors(response_data):
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
error = ErrorHandler.extract_error(response_data)
|
|
100
|
+
logger.error(f"Error received while creating agent: {error}")
|
|
101
|
+
raise APIError(f"Error received while creating agent: {error}")
|
|
105
102
|
|
|
103
|
+
result = AgentMapper.map_to_agent(response_data)
|
|
106
104
|
return result
|
|
107
105
|
|
|
108
106
|
def update_agent(
|
|
109
107
|
self,
|
|
110
|
-
project_id: str,
|
|
111
108
|
agent: Agent,
|
|
112
109
|
automatic_publish: bool = False,
|
|
113
110
|
upsert: bool = False
|
|
114
|
-
) ->
|
|
111
|
+
) -> Agent:
|
|
115
112
|
"""
|
|
116
113
|
Updates an existing agent in the specified project using the provided agent configuration.
|
|
117
114
|
|
|
118
|
-
This method sends a request to the agent client to update an agent identified by `
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
If the response contains errors, it maps them to an `ErrorListResponse`. Otherwise, it maps
|
|
122
|
-
the response to an `Agent` object.
|
|
115
|
+
This method sends a request to the agent client to update an agent identified by `agent.id`
|
|
116
|
+
based on the attributes of the provided `Agent` object. It can optionally publish the agent
|
|
117
|
+
automatically or perform an upsert if the agent doesn’t exist.
|
|
123
118
|
|
|
124
|
-
:param
|
|
125
|
-
:param agent: Agent - The agent configuration object containing updated details,
|
|
119
|
+
:param agent: The agent configuration object containing updated details,
|
|
126
120
|
including id, name, access scope, public name, job description, avatar image, description,
|
|
127
121
|
and agent data (prompt, LLM config, and models).
|
|
128
|
-
:param automatic_publish:
|
|
122
|
+
:param automatic_publish: Whether to automatically publish the agent after updating.
|
|
129
123
|
Defaults to False.
|
|
130
|
-
:param upsert:
|
|
124
|
+
:param upsert: Whether to insert the agent if it does not exist (upsert) instead of
|
|
131
125
|
just updating. Defaults to False.
|
|
132
|
-
:return:
|
|
133
|
-
|
|
134
|
-
:raises
|
|
126
|
+
:return: An `Agent` object representing the updated agent.
|
|
127
|
+
:raises MissingRequirementException: If `agent.id` is not provided.
|
|
128
|
+
:raises APIError: If the API returns errors.
|
|
135
129
|
"""
|
|
136
130
|
response_data = self.__agent_client.update_agent(
|
|
137
|
-
project_id=project_id,
|
|
138
131
|
agent_id=agent.id,
|
|
139
132
|
name=agent.name,
|
|
140
133
|
access_scope=agent.access_scope,
|
|
@@ -144,37 +137,37 @@ class AILabManager:
|
|
|
144
137
|
description=agent.description,
|
|
145
138
|
agent_data_prompt=agent.agent_data.prompt.to_dict() if agent.agent_data is not None else None,
|
|
146
139
|
agent_data_llm_config=agent.agent_data.llm_config.to_dict() if agent.agent_data is not None else None,
|
|
147
|
-
|
|
140
|
+
agent_data_strategy_name=agent.agent_data.strategy_name if agent.agent_data and agent.agent_data.strategy_name else None,
|
|
141
|
+
agent_data_models=agent.agent_data.models.to_dict() if agent.agent_data and agent.agent_data.models else None,
|
|
142
|
+
agent_data_resource_pools=agent.agent_data.resource_pools.to_dict() if agent.agent_data and agent.agent_data.resource_pools else None,
|
|
148
143
|
automatic_publish=automatic_publish,
|
|
149
144
|
upsert=upsert
|
|
150
145
|
)
|
|
151
146
|
if ErrorHandler.has_errors(response_data):
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
147
|
+
error = ErrorHandler.extract_error(response_data)
|
|
148
|
+
logger.error(f"Error received while updating agent: {error}")
|
|
149
|
+
raise APIError(f"Error received while updating agent: {error}")
|
|
155
150
|
|
|
151
|
+
result = AgentMapper.map_to_agent(response_data)
|
|
156
152
|
return result
|
|
157
153
|
|
|
158
154
|
def get_agent(
|
|
159
155
|
self,
|
|
160
|
-
project_id: str,
|
|
161
156
|
agent_id: str,
|
|
162
157
|
filter_settings: Optional[FilterSettings] = None
|
|
163
|
-
) ->
|
|
158
|
+
) -> Agent:
|
|
164
159
|
"""
|
|
165
160
|
Retrieves details of a specific agent from the specified project.
|
|
166
161
|
|
|
167
162
|
This method sends a request to the agent client to retrieve an agent identified by `agent_id`
|
|
168
163
|
from the specified project. Optional filter settings can be provided to specify the revision,
|
|
169
|
-
version, and whether to allow drafts.
|
|
170
|
-
`ErrorListResponse`. Otherwise, it maps the response to an `Agent` object.
|
|
164
|
+
version, and whether to allow drafts.
|
|
171
165
|
|
|
172
|
-
:param
|
|
173
|
-
:param
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
:
|
|
177
|
-
if successful, or an `ErrorListResponse` if the API returns errors.
|
|
166
|
+
:param agent_id: Unique identifier of the agent to retrieve.
|
|
167
|
+
:param filter_settings: Settings to filter the agent retrieval,
|
|
168
|
+
including revision (defaults to "0"), version (defaults to "0"), and allow_drafts (defaults to True).
|
|
169
|
+
:return: An `Agent` object representing the retrieved agent.
|
|
170
|
+
:raises APIError: If the API returns errors.
|
|
178
171
|
"""
|
|
179
172
|
if filter_settings is None:
|
|
180
173
|
filter_settings = FilterSettings(
|
|
@@ -184,135 +177,120 @@ class AILabManager:
|
|
|
184
177
|
)
|
|
185
178
|
|
|
186
179
|
response_data = self.__agent_client.get_agent(
|
|
187
|
-
project_id=project_id,
|
|
188
180
|
agent_id=agent_id,
|
|
189
181
|
revision=filter_settings.revision,
|
|
190
182
|
version=filter_settings.version,
|
|
191
183
|
allow_drafts=filter_settings.allow_drafts
|
|
192
184
|
)
|
|
193
185
|
if ErrorHandler.has_errors(response_data):
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
186
|
+
error = ErrorHandler.extract_error(response_data)
|
|
187
|
+
logger.error(f"Error received while retrieving agent: {error}")
|
|
188
|
+
raise APIError(f"Error received while retrieving agent: {error}")
|
|
197
189
|
|
|
190
|
+
result = AgentMapper.map_to_agent(response_data)
|
|
198
191
|
return result
|
|
199
192
|
|
|
200
193
|
def create_sharing_link(
|
|
201
194
|
self,
|
|
202
|
-
project_id: str,
|
|
203
195
|
agent_id: str
|
|
204
|
-
) ->
|
|
196
|
+
) -> SharingLink:
|
|
205
197
|
"""
|
|
206
198
|
Creates a sharing link for a specific agent in the specified project.
|
|
207
199
|
|
|
208
200
|
This method sends a request to the agent client to create a sharing link for the agent
|
|
209
|
-
identified by `agent_id` in the specified project.
|
|
210
|
-
them to an `ErrorListResponse`. Otherwise, it maps the response to a `SharingLink` object.
|
|
201
|
+
identified by `agent_id` in the specified project.
|
|
211
202
|
|
|
212
|
-
:param
|
|
213
|
-
:
|
|
214
|
-
:
|
|
215
|
-
sharing link details if successful, or an `ErrorListResponse` if the API returns errors.
|
|
203
|
+
:param agent_id: Unique identifier of the agent for which to create a sharing link.
|
|
204
|
+
:return: A `SharingLink` object representing the sharing link details.
|
|
205
|
+
:raises APIError: If the API returns errors.
|
|
216
206
|
"""
|
|
217
207
|
response_data = self.__agent_client.create_sharing_link(
|
|
218
|
-
project_id=project_id,
|
|
219
208
|
agent_id=agent_id
|
|
220
209
|
)
|
|
221
210
|
if ErrorHandler.has_errors(response_data):
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
211
|
+
error = ErrorHandler.extract_error(response_data)
|
|
212
|
+
logger.error(f"Error received while creating sharing link: {error}")
|
|
213
|
+
raise APIError(f"Error received while creating sharing link: {error}")
|
|
225
214
|
|
|
215
|
+
result = AgentMapper.map_to_sharing_link(response_data)
|
|
226
216
|
return result
|
|
227
217
|
|
|
228
218
|
def publish_agent_revision(
|
|
229
219
|
self,
|
|
230
|
-
project_id: str,
|
|
231
220
|
agent_id: str,
|
|
232
221
|
revision: str
|
|
233
|
-
) ->
|
|
222
|
+
) -> Agent:
|
|
234
223
|
"""
|
|
235
224
|
Publishes a specific revision of an agent in the specified project.
|
|
236
225
|
|
|
237
226
|
This method sends a request to the agent client to publish the specified revision of the agent
|
|
238
|
-
identified by `agent_id` in the specified project.
|
|
239
|
-
them to an `ErrorListResponse`. Otherwise, it maps the response to an `Agent` object
|
|
240
|
-
representing the published agent.
|
|
227
|
+
identified by `agent_id` in the specified project.
|
|
241
228
|
|
|
242
|
-
:param
|
|
243
|
-
:param
|
|
244
|
-
:
|
|
245
|
-
:
|
|
246
|
-
if successful, or an `ErrorListResponse` if the API returns errors.
|
|
229
|
+
:param agent_id: Unique identifier of the agent to publish.
|
|
230
|
+
:param revision: Revision of the agent to publish.
|
|
231
|
+
:return: An `Agent` object representing the published agent.
|
|
232
|
+
:raises APIError: If the API returns errors.
|
|
247
233
|
"""
|
|
248
234
|
response_data = self.__agent_client.publish_agent_revision(
|
|
249
|
-
project_id=project_id,
|
|
250
235
|
agent_id=agent_id,
|
|
251
236
|
revision=revision
|
|
252
237
|
)
|
|
253
238
|
if ErrorHandler.has_errors(response_data):
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
239
|
+
error = ErrorHandler.extract_error(response_data)
|
|
240
|
+
logger.error(f"Error received while publishing agent revision: {error}")
|
|
241
|
+
raise APIError(f"Error received while publishing agent revision: {error}")
|
|
257
242
|
|
|
243
|
+
result = AgentMapper.map_to_agent(response_data)
|
|
258
244
|
return result
|
|
259
245
|
|
|
260
246
|
def delete_agent(
|
|
261
247
|
self,
|
|
262
|
-
project_id: str,
|
|
263
248
|
agent_id: str
|
|
264
|
-
) ->
|
|
249
|
+
) -> EmptyResponse:
|
|
265
250
|
"""
|
|
266
251
|
Deletes a specific agent from the specified project.
|
|
267
252
|
|
|
268
253
|
This method sends a request to the agent client to delete the agent identified by `agent_id`
|
|
269
|
-
from the specified project.
|
|
270
|
-
empty response or success confirmation), or an `ErrorListResponse` if the API returns errors.
|
|
254
|
+
from the specified project.
|
|
271
255
|
|
|
272
|
-
:param
|
|
273
|
-
:
|
|
274
|
-
:
|
|
275
|
-
or an `ErrorListResponse` if the API returns errors.
|
|
256
|
+
:param agent_id: Unique identifier of the agent to delete.
|
|
257
|
+
:return: `EmptyResponse` if the agent was deleted successfully.
|
|
258
|
+
:raises APIError: If the API returns errors.
|
|
276
259
|
"""
|
|
277
260
|
response_data = self.__agent_client.delete_agent(
|
|
278
|
-
project_id=project_id,
|
|
279
261
|
agent_id=agent_id
|
|
280
262
|
)
|
|
281
263
|
if ErrorHandler.has_errors(response_data):
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
result = ResponseMapper.map_to_empty_response(response_data)
|
|
264
|
+
error = ErrorHandler.extract_error(response_data)
|
|
265
|
+
logger.error(f"Error received while deleting agent: {error}")
|
|
266
|
+
raise APIError(f"Error received while deleting agent: {error}")
|
|
286
267
|
|
|
268
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Agent deleted successfully")
|
|
287
269
|
return result
|
|
288
270
|
|
|
289
271
|
def create_tool(
|
|
290
272
|
self,
|
|
291
|
-
project_id: str,
|
|
292
273
|
tool: Tool,
|
|
293
274
|
automatic_publish: bool = False
|
|
294
|
-
) ->
|
|
275
|
+
) -> Tool:
|
|
295
276
|
"""
|
|
296
277
|
Creates a new tool in the specified project using the provided tool configuration.
|
|
297
278
|
|
|
298
279
|
This method sends a request to the tool client to create a tool based on the attributes
|
|
299
280
|
of the provided `Tool` object, including name, description, scope, access_scope, public_name,
|
|
300
|
-
icon, open_api, open_api_json, report_events, and parameters.
|
|
301
|
-
it maps them to an `ErrorListResponse`. Otherwise, it maps the response to a `Tool` object.
|
|
281
|
+
icon, open_api, open_api_json, report_events, and parameters.
|
|
302
282
|
|
|
303
|
-
:param
|
|
304
|
-
:param tool: Tool - The tool configuration object containing name, description, scope,
|
|
283
|
+
:param tool: The tool configuration object containing name, description, scope,
|
|
305
284
|
access_scope, public_name, icon, open_api, open_api_json, report_events, and parameters.
|
|
306
285
|
Optional fields (e.g., id, access_scope) are included if set in the `Tool` object.
|
|
307
|
-
:param automatic_publish:
|
|
286
|
+
:param automatic_publish: Whether to automatically publish the tool after creation.
|
|
308
287
|
Defaults to False.
|
|
309
|
-
:return:
|
|
310
|
-
|
|
288
|
+
:return: A `Tool` object representing the created tool.
|
|
289
|
+
:raises APIError: If the API returns errors.
|
|
311
290
|
"""
|
|
312
291
|
parameters = [param.to_dict() for param in tool.parameters] if tool.parameters else []
|
|
313
292
|
|
|
314
293
|
response_data = self.__tool_client.create_tool(
|
|
315
|
-
project_id=project_id,
|
|
316
294
|
name=tool.name,
|
|
317
295
|
description=tool.description,
|
|
318
296
|
scope=tool.scope,
|
|
@@ -326,19 +304,19 @@ class AILabManager:
|
|
|
326
304
|
automatic_publish=automatic_publish
|
|
327
305
|
)
|
|
328
306
|
if ErrorHandler.has_errors(response_data):
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
307
|
+
error = ErrorHandler.extract_error(response_data)
|
|
308
|
+
logger.error(f"Error received while creating tool: {error}")
|
|
309
|
+
raise APIError(f"Error received while creating tool: {error}")
|
|
332
310
|
|
|
311
|
+
result = ToolMapper.map_to_tool(response_data)
|
|
333
312
|
return result
|
|
334
313
|
|
|
335
314
|
def update_tool(
|
|
336
315
|
self,
|
|
337
|
-
project_id: str,
|
|
338
316
|
tool: Tool,
|
|
339
317
|
automatic_publish: bool = False,
|
|
340
318
|
upsert: bool = False
|
|
341
|
-
) ->
|
|
319
|
+
) -> Tool:
|
|
342
320
|
"""
|
|
343
321
|
Updates an existing tool in the specified project or upserts it if specified.
|
|
344
322
|
|
|
@@ -346,24 +324,20 @@ class AILabManager:
|
|
|
346
324
|
based on the attributes of the provided `Tool` object, including name, description, scope,
|
|
347
325
|
access_scope, public_name, icon, open_api, open_api_json, report_events, and parameters.
|
|
348
326
|
It can optionally publish the tool automatically or perform an upsert if the tool doesn’t exist.
|
|
349
|
-
If the response contains errors, it maps them to an `ErrorListResponse`. Otherwise, it maps
|
|
350
|
-
the response to a `Tool` object.
|
|
351
327
|
|
|
352
|
-
:param
|
|
353
|
-
:param tool: Tool - The tool configuration object containing updated details, including
|
|
328
|
+
:param tool: The tool configuration object containing updated details, including
|
|
354
329
|
id, name, description, scope, access_scope, public_name, icon, open_api, open_api_json,
|
|
355
330
|
report_events, and parameters.
|
|
356
|
-
:param automatic_publish:
|
|
331
|
+
:param automatic_publish: Whether to automatically publish the tool after updating.
|
|
357
332
|
Defaults to False.
|
|
358
|
-
:param upsert:
|
|
333
|
+
:param upsert: Whether to insert the tool if it does not exist (upsert) instead of
|
|
359
334
|
just updating. Defaults to False.
|
|
360
|
-
:return:
|
|
361
|
-
|
|
335
|
+
:return: A `Tool` object representing the updated tool.
|
|
336
|
+
:raises APIError: If the API returns errors.
|
|
362
337
|
"""
|
|
363
338
|
parameters = [param.to_dict() for param in tool.parameters] if tool.parameters else []
|
|
364
339
|
|
|
365
340
|
response_data = self.__tool_client.update_tool(
|
|
366
|
-
project_id=project_id,
|
|
367
341
|
tool_id=tool.id,
|
|
368
342
|
name=tool.name,
|
|
369
343
|
description=tool.description,
|
|
@@ -380,32 +354,30 @@ class AILabManager:
|
|
|
380
354
|
)
|
|
381
355
|
|
|
382
356
|
if ErrorHandler.has_errors(response_data):
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
357
|
+
error = ErrorHandler.extract_error(response_data)
|
|
358
|
+
logger.error(f"Error received while updating tool: {error}")
|
|
359
|
+
raise APIError(f"Error received while updating tool: {error}")
|
|
386
360
|
|
|
361
|
+
result = ToolMapper.map_to_tool(response_data)
|
|
387
362
|
return result
|
|
388
363
|
|
|
389
364
|
def get_tool(
|
|
390
365
|
self,
|
|
391
|
-
project_id: str,
|
|
392
366
|
tool_id: str,
|
|
393
367
|
filter_settings: Optional[FilterSettings] = None
|
|
394
|
-
) ->
|
|
368
|
+
) -> Tool:
|
|
395
369
|
"""
|
|
396
370
|
Retrieves details of a specific tool from the specified project.
|
|
397
371
|
|
|
398
372
|
This method sends a request to the tool client to retrieve a tool identified by `tool_id`
|
|
399
373
|
from the specified project. Optional filter settings can be provided to specify the revision,
|
|
400
|
-
version, and whether to allow drafts.
|
|
401
|
-
`ErrorListResponse`. Otherwise, it maps the response to a `Tool` object.
|
|
374
|
+
version, and whether to allow drafts.
|
|
402
375
|
|
|
403
|
-
:param
|
|
404
|
-
:param
|
|
405
|
-
:param filter_settings: FilterSettings, optional - Settings to filter the tool retrieval,
|
|
376
|
+
:param tool_id: Unique identifier of the tool to retrieve.
|
|
377
|
+
:param filter_settings: Settings to filter the tool retrieval,
|
|
406
378
|
including revision (defaults to "0"), version (defaults to "0"), and allow_drafts (defaults to True).
|
|
407
|
-
:return:
|
|
408
|
-
|
|
379
|
+
:return: A `Tool` object representing the retrieved tool.
|
|
380
|
+
:raises APIError: If the API returns errors.
|
|
409
381
|
"""
|
|
410
382
|
if filter_settings is None:
|
|
411
383
|
filter_settings = FilterSettings(
|
|
@@ -415,7 +387,6 @@ class AILabManager:
|
|
|
415
387
|
)
|
|
416
388
|
|
|
417
389
|
response_data = self.__tool_client.get_tool(
|
|
418
|
-
project_id=project_id,
|
|
419
390
|
tool_id=tool_id,
|
|
420
391
|
revision=filter_settings.revision,
|
|
421
392
|
version=filter_settings.version,
|
|
@@ -423,67 +394,61 @@ class AILabManager:
|
|
|
423
394
|
)
|
|
424
395
|
|
|
425
396
|
if ErrorHandler.has_errors(response_data):
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
397
|
+
error = ErrorHandler.extract_error(response_data)
|
|
398
|
+
logger.error(f"Error received while retrieving tool: {error}")
|
|
399
|
+
raise APIError(f"Error received while retrieving tool: {error}")
|
|
429
400
|
|
|
401
|
+
result = ToolMapper.map_to_tool(response_data)
|
|
430
402
|
return result
|
|
431
403
|
|
|
432
404
|
def delete_tool(
|
|
433
405
|
self,
|
|
434
|
-
project_id: str,
|
|
435
406
|
tool_id: Optional[str] = None,
|
|
436
407
|
tool_name: Optional[str] = None
|
|
437
|
-
) ->
|
|
408
|
+
) -> EmptyResponse:
|
|
438
409
|
"""
|
|
439
410
|
Deletes a specific tool from the specified project.
|
|
440
411
|
|
|
441
412
|
This method sends a request to the tool client to delete the tool identified by either
|
|
442
|
-
`tool_id` or `tool_name`.
|
|
443
|
-
or an `ErrorListResponse` if the API returns errors.
|
|
413
|
+
`tool_id` or `tool_name`.
|
|
444
414
|
|
|
445
|
-
:param
|
|
446
|
-
:param
|
|
447
|
-
:
|
|
448
|
-
:
|
|
449
|
-
|
|
450
|
-
:raises ValueError: If neither tool_id nor tool_name is provided.
|
|
415
|
+
:param tool_id: Unique identifier of the tool to delete.
|
|
416
|
+
:param tool_name: Name of the tool to delete.
|
|
417
|
+
:return: `EmptyResponse` if the tool was deleted successfully.
|
|
418
|
+
:raises MissingRequirementException: If neither tool_id nor tool_name is provided.
|
|
419
|
+
:raises APIError: If the API returns errors.
|
|
451
420
|
"""
|
|
452
421
|
if not (tool_id or tool_name):
|
|
453
|
-
raise
|
|
422
|
+
raise MissingRequirementException("Either tool_id or tool_name must be provided.")
|
|
454
423
|
|
|
455
424
|
response_data = self.__tool_client.delete_tool(
|
|
456
|
-
project_id=project_id,
|
|
457
425
|
tool_id=tool_id,
|
|
458
426
|
tool_name=tool_name
|
|
459
427
|
)
|
|
460
428
|
|
|
461
429
|
if ErrorHandler.has_errors(response_data):
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
result = ResponseMapper.map_to_empty_response(response_data)
|
|
430
|
+
error = ErrorHandler.extract_error(response_data)
|
|
431
|
+
logger.error(f"Error received while deleting tool: {error}")
|
|
432
|
+
raise APIError(f"Error received while deleting tool: {error}")
|
|
466
433
|
|
|
434
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Tool deleted successfully")
|
|
467
435
|
return result
|
|
468
436
|
|
|
469
437
|
def list_tools(
|
|
470
438
|
self,
|
|
471
|
-
project_id: str,
|
|
472
439
|
filter_settings: Optional[FilterSettings] = None
|
|
473
|
-
) ->
|
|
440
|
+
) -> ToolList:
|
|
474
441
|
"""
|
|
475
442
|
Retrieves a list of tools associated with the specified project.
|
|
476
443
|
|
|
477
444
|
This method queries the tool client to fetch a list of tools for the given project ID,
|
|
478
|
-
applying the specified filter settings.
|
|
479
|
-
`ErrorListResponse`. Otherwise, it maps the response to a `ToolList` object using `ToolMapper`.
|
|
445
|
+
applying the specified filter settings.
|
|
480
446
|
|
|
481
|
-
:param
|
|
482
|
-
:param filter_settings: FilterSettings, optional - Settings to filter the tool list query,
|
|
447
|
+
:param filter_settings: Settings to filter the tool list query,
|
|
483
448
|
including id (defaults to ""), count (defaults to "100"), access_scope (defaults to "public"),
|
|
484
449
|
allow_drafts (defaults to True), scope (defaults to "api"), and allow_external (defaults to True).
|
|
485
|
-
:return:
|
|
486
|
-
|
|
450
|
+
:return: A `ToolList` object containing the retrieved tools.
|
|
451
|
+
:raises APIError: If the API returns errors.
|
|
487
452
|
"""
|
|
488
453
|
if filter_settings is None:
|
|
489
454
|
filter_settings = FilterSettings(
|
|
@@ -496,7 +461,6 @@ class AILabManager:
|
|
|
496
461
|
)
|
|
497
462
|
|
|
498
463
|
response_data = self.__tool_client.list_tools(
|
|
499
|
-
project_id=project_id,
|
|
500
464
|
id=filter_settings.id,
|
|
501
465
|
count=filter_settings.count,
|
|
502
466
|
access_scope=filter_settings.access_scope,
|
|
@@ -506,70 +470,65 @@ class AILabManager:
|
|
|
506
470
|
)
|
|
507
471
|
|
|
508
472
|
if ErrorHandler.has_errors(response_data):
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
473
|
+
error = ErrorHandler.extract_error(response_data)
|
|
474
|
+
logger.error(f"Error received while listing tools: {error}")
|
|
475
|
+
raise APIError(f"Error received while listing tools: {error}")
|
|
512
476
|
|
|
477
|
+
result = ToolMapper.map_to_tool_list(response_data)
|
|
513
478
|
return result
|
|
514
479
|
|
|
515
480
|
def publish_tool_revision(
|
|
516
481
|
self,
|
|
517
|
-
project_id: str,
|
|
518
482
|
tool_id: str,
|
|
519
483
|
revision: str
|
|
520
|
-
) ->
|
|
484
|
+
) -> Tool:
|
|
521
485
|
"""
|
|
522
486
|
Publishes a specific revision of a tool in the specified project.
|
|
523
487
|
|
|
524
488
|
This method sends a request to the tool client to publish the specified revision of the tool
|
|
525
|
-
identified by `tool_id`.
|
|
526
|
-
Otherwise, it maps the response to a `Tool` object representing the published tool.
|
|
489
|
+
identified by `tool_id`.
|
|
527
490
|
|
|
528
|
-
:param
|
|
529
|
-
:param
|
|
530
|
-
:
|
|
531
|
-
:
|
|
532
|
-
if successful, or an `ErrorListResponse` if the API returns errors.
|
|
491
|
+
:param tool_id: Unique identifier of the tool to publish.
|
|
492
|
+
:param revision: Revision of the tool to publish.
|
|
493
|
+
:return: A `Tool` object representing the published tool.
|
|
494
|
+
:raises APIError: If the API returns errors.
|
|
533
495
|
"""
|
|
534
496
|
response_data = self.__tool_client.publish_tool_revision(
|
|
535
|
-
project_id=project_id,
|
|
536
497
|
tool_id=tool_id,
|
|
537
498
|
revision=revision
|
|
538
499
|
)
|
|
539
500
|
|
|
540
501
|
if ErrorHandler.has_errors(response_data):
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
502
|
+
error = ErrorHandler.extract_error(response_data)
|
|
503
|
+
logger.error(f"Error received while publishing tool revision: {error}")
|
|
504
|
+
raise APIError(f"Error received while publishing tool revision: {error}")
|
|
544
505
|
|
|
506
|
+
result = ToolMapper.map_to_tool(response_data)
|
|
545
507
|
return result
|
|
546
508
|
|
|
547
509
|
def get_parameter(
|
|
548
510
|
self,
|
|
549
|
-
project_id: str,
|
|
550
511
|
tool_id: Optional[str] = None,
|
|
551
512
|
tool_public_name: Optional[str] = None,
|
|
552
513
|
filter_settings: Optional[FilterSettings] = None
|
|
553
|
-
) ->
|
|
514
|
+
) -> List[ToolParameter]:
|
|
554
515
|
"""
|
|
555
516
|
Retrieves details of parameters for a specific tool in the specified project.
|
|
556
517
|
|
|
557
518
|
This method sends a request to the tool client to retrieve parameters for a tool identified
|
|
558
519
|
by either `tool_id` or `tool_public_name`. Optional filter settings can specify revision,
|
|
559
|
-
version, and whether to allow drafts.
|
|
560
|
-
`ErrorListResponse`. Otherwise, it maps the response to a list of `ToolParameter` objects.
|
|
520
|
+
version, and whether to allow drafts.
|
|
561
521
|
|
|
562
|
-
:param
|
|
563
|
-
:param
|
|
564
|
-
:param
|
|
565
|
-
:param filter_settings: FilterSettings, optional - Settings to filter the parameter retrieval,
|
|
522
|
+
:param tool_id: Unique identifier of the tool whose parameters are to be retrieved.
|
|
523
|
+
:param tool_public_name: Public name of the tool whose parameters are to be retrieved.
|
|
524
|
+
:param filter_settings: Settings to filter the parameter retrieval,
|
|
566
525
|
including revision (defaults to "0"), version (defaults to "0"), and allow_drafts (defaults to True).
|
|
567
|
-
:return:
|
|
568
|
-
|
|
569
|
-
:raises
|
|
526
|
+
:return: A list of `ToolParameter` objects.
|
|
527
|
+
:raises MissingRequirementException: If neither tool_id nor tool_public_name is provided.
|
|
528
|
+
:raises APIError: If the API returns errors.
|
|
570
529
|
"""
|
|
571
530
|
if not (tool_id or tool_public_name):
|
|
572
|
-
raise
|
|
531
|
+
raise MissingRequirementException("Either tool_id or tool_public_name must be provided.")
|
|
573
532
|
|
|
574
533
|
if filter_settings is None:
|
|
575
534
|
filter_settings = FilterSettings(
|
|
@@ -579,7 +538,6 @@ class AILabManager:
|
|
|
579
538
|
)
|
|
580
539
|
|
|
581
540
|
response_data = self.__tool_client.get_parameter(
|
|
582
|
-
project_id=project_id,
|
|
583
541
|
tool_id=tool_id,
|
|
584
542
|
tool_public_name=tool_public_name,
|
|
585
543
|
revision=filter_settings.revision,
|
|
@@ -588,59 +546,69 @@ class AILabManager:
|
|
|
588
546
|
)
|
|
589
547
|
|
|
590
548
|
if ErrorHandler.has_errors(response_data):
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
549
|
+
error = ErrorHandler.extract_error(response_data)
|
|
550
|
+
logger.error(f"Error received while retrieving tool parameters: {error}")
|
|
551
|
+
raise APIError(f"Error received while retrieving tool parameters: {error}")
|
|
594
552
|
|
|
553
|
+
result = ToolMapper.map_to_parameter_list(response_data)
|
|
595
554
|
return result
|
|
596
555
|
|
|
597
556
|
def set_parameter(
|
|
598
557
|
self,
|
|
599
|
-
project_id: str,
|
|
600
558
|
tool_id: Optional[str] = None,
|
|
601
559
|
tool_public_name: Optional[str] = None,
|
|
602
560
|
parameters: List[ToolParameter] = None
|
|
603
|
-
) ->
|
|
561
|
+
) -> EmptyResponse:
|
|
604
562
|
"""
|
|
605
563
|
Sets or updates parameters for a specific tool in the specified project.
|
|
606
564
|
|
|
607
565
|
This method sends a request to the tool client to set parameters for a tool identified by
|
|
608
|
-
either `tool_id` or `tool_public_name`.
|
|
609
|
-
`ErrorListResponse`. Otherwise, it maps the response to a `Tool` object.
|
|
566
|
+
either `tool_id` or `tool_public_name`.
|
|
610
567
|
|
|
611
|
-
:param
|
|
612
|
-
:param
|
|
613
|
-
:param
|
|
614
|
-
:
|
|
615
|
-
:
|
|
616
|
-
|
|
617
|
-
:raises ValueError: If neither tool_id nor tool_public_name is provided, or if parameters is None or empty.
|
|
568
|
+
:param tool_id: Unique identifier of the tool whose parameters are to be set.
|
|
569
|
+
:param tool_public_name: Public name of the tool whose parameters are to be set.
|
|
570
|
+
:param parameters: List of parameter objects defining the tool's parameters.
|
|
571
|
+
:return: A `Tool` object representing the updated tool.
|
|
572
|
+
:raises MissingRequirementException: If neither tool_id nor tool_public_name is provided, or if parameters is None or empty.
|
|
573
|
+
:raises APIError: If the API returns errors.
|
|
618
574
|
"""
|
|
619
575
|
if not (tool_id or tool_public_name):
|
|
620
|
-
raise
|
|
576
|
+
raise MissingRequirementException("Either tool_id or tool_public_name must be provided.")
|
|
621
577
|
if not parameters:
|
|
622
|
-
raise
|
|
578
|
+
raise MissingRequirementException("Parameters list must be provided and non-empty.")
|
|
623
579
|
|
|
624
580
|
params_dict = [param.to_dict() for param in parameters]
|
|
625
581
|
|
|
626
582
|
response_data = self.__tool_client.set_parameter(
|
|
627
|
-
project_id=project_id,
|
|
628
583
|
tool_id=tool_id,
|
|
629
584
|
tool_public_name=tool_public_name,
|
|
630
585
|
parameters=params_dict
|
|
631
586
|
)
|
|
632
587
|
|
|
633
588
|
if ErrorHandler.has_errors(response_data):
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
589
|
+
error = ErrorHandler.extract_error(response_data)
|
|
590
|
+
logger.error(f"Error received while setting tool parameters: {error}")
|
|
591
|
+
raise APIError(f"Error received while setting tool parameters: {error}")
|
|
637
592
|
|
|
593
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Parameter set successfully")
|
|
638
594
|
return result
|
|
639
595
|
|
|
640
596
|
def list_reasoning_strategies(
|
|
641
597
|
self,
|
|
642
598
|
filter_settings: Optional[FilterSettings] = None
|
|
643
|
-
) ->
|
|
599
|
+
) -> ReasoningStrategyList:
|
|
600
|
+
"""
|
|
601
|
+
Retrieves a list of reasoning strategies.
|
|
602
|
+
|
|
603
|
+
This method queries the reasoning strategy client to fetch a list of reasoning strategies,
|
|
604
|
+
applying the specified filter settings.
|
|
605
|
+
|
|
606
|
+
:param filter_settings: Settings to filter the reasoning strategy list query,
|
|
607
|
+
including name (defaults to ""), start (defaults to "0"), count (defaults to "100"),
|
|
608
|
+
allow_external (defaults to True), and access_scope (defaults to "public").
|
|
609
|
+
:return: A `ReasoningStrategyList` object containing the retrieved reasoning strategies.
|
|
610
|
+
:raises APIError: If the API returns errors.
|
|
611
|
+
"""
|
|
644
612
|
if filter_settings is None:
|
|
645
613
|
filter_settings = FilterSettings(
|
|
646
614
|
start="0",
|
|
@@ -658,20 +626,32 @@ class AILabManager:
|
|
|
658
626
|
)
|
|
659
627
|
|
|
660
628
|
if ErrorHandler.has_errors(response_data):
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
629
|
+
error = ErrorHandler.extract_error(response_data)
|
|
630
|
+
logger.error(f"Error received while listing reasoning strategies: {error}")
|
|
631
|
+
raise APIError(f"Error received while listing reasoning strategies: {error}")
|
|
664
632
|
|
|
633
|
+
result = ReasoningStrategyMapper.map_to_reasoning_strategy_list(response_data)
|
|
665
634
|
return result
|
|
666
635
|
|
|
667
636
|
def create_reasoning_strategy(
|
|
668
637
|
self,
|
|
669
|
-
project_id: str,
|
|
670
638
|
strategy: ReasoningStrategy,
|
|
671
639
|
automatic_publish: bool = False
|
|
672
|
-
) ->
|
|
640
|
+
) -> ReasoningStrategy:
|
|
641
|
+
"""
|
|
642
|
+
Creates a new reasoning strategy in the specified project.
|
|
643
|
+
|
|
644
|
+
This method sends a request to the reasoning strategy client to create a reasoning strategy
|
|
645
|
+
based on the attributes of the provided `ReasoningStrategy` object.
|
|
646
|
+
|
|
647
|
+
:param strategy: The reasoning strategy configuration object containing name, system_prompt,
|
|
648
|
+
access_scope, type, and localized_descriptions.
|
|
649
|
+
:param automatic_publish: Whether to automatically publish the reasoning strategy after creation.
|
|
650
|
+
Defaults to False.
|
|
651
|
+
:return: A `ReasoningStrategy` object representing the created reasoning strategy.
|
|
652
|
+
:raises APIError: If the API returns errors.
|
|
653
|
+
"""
|
|
673
654
|
response_data = self.__reasoning_strategy_client.create_reasoning_strategy(
|
|
674
|
-
project_id=project_id,
|
|
675
655
|
name=strategy.name,
|
|
676
656
|
system_prompt=strategy.system_prompt,
|
|
677
657
|
access_scope=strategy.access_scope,
|
|
@@ -681,21 +661,35 @@ class AILabManager:
|
|
|
681
661
|
)
|
|
682
662
|
|
|
683
663
|
if ErrorHandler.has_errors(response_data):
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
664
|
+
error = ErrorHandler.extract_error(response_data)
|
|
665
|
+
logger.error(f"Error received while creating reasoning strategy: {error}")
|
|
666
|
+
raise APIError(f"Error received while creating reasoning strategy: {error}")
|
|
687
667
|
|
|
668
|
+
result = ReasoningStrategyMapper.map_to_reasoning_strategy(response_data)
|
|
688
669
|
return result
|
|
689
670
|
|
|
690
671
|
def update_reasoning_strategy(
|
|
691
672
|
self,
|
|
692
|
-
project_id: str,
|
|
693
673
|
strategy: ReasoningStrategy,
|
|
694
674
|
automatic_publish: bool = False,
|
|
695
675
|
upsert: bool = False
|
|
696
|
-
) ->
|
|
676
|
+
) -> ReasoningStrategy:
|
|
677
|
+
"""
|
|
678
|
+
Updates an existing reasoning strategy in the specified project or upserts it if specified.
|
|
679
|
+
|
|
680
|
+
This method sends a request to the reasoning strategy client to update a reasoning strategy
|
|
681
|
+
identified by `strategy.id` based on the attributes of the provided `ReasoningStrategy` object.
|
|
682
|
+
|
|
683
|
+
:param strategy: The reasoning strategy configuration object containing updated details,
|
|
684
|
+
including id, name, system_prompt, access_scope, type, and localized_descriptions.
|
|
685
|
+
:param automatic_publish: Whether to automatically publish the reasoning strategy after updating.
|
|
686
|
+
Defaults to False.
|
|
687
|
+
:param upsert: Whether to insert the reasoning strategy if it does not exist.
|
|
688
|
+
Defaults to False.
|
|
689
|
+
:return: A `ReasoningStrategy` object representing the updated reasoning strategy.
|
|
690
|
+
:raises APIError: If the API returns errors.
|
|
691
|
+
"""
|
|
697
692
|
response_data = self.__reasoning_strategy_client.update_reasoning_strategy(
|
|
698
|
-
project_id=project_id,
|
|
699
693
|
reasoning_strategy_id=strategy.id,
|
|
700
694
|
name=strategy.name,
|
|
701
695
|
system_prompt=strategy.system_prompt,
|
|
@@ -707,99 +701,118 @@ class AILabManager:
|
|
|
707
701
|
)
|
|
708
702
|
|
|
709
703
|
if ErrorHandler.has_errors(response_data):
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
704
|
+
error = ErrorHandler.extract_error(response_data)
|
|
705
|
+
logger.error(f"Error received while updating reasoning strategy: {error}")
|
|
706
|
+
raise APIError(f"Error received while updating reasoning strategy: {error}")
|
|
713
707
|
|
|
708
|
+
result = ReasoningStrategyMapper.map_to_reasoning_strategy(response_data)
|
|
714
709
|
return result
|
|
715
710
|
|
|
716
711
|
def get_reasoning_strategy(
|
|
717
712
|
self,
|
|
718
|
-
project_id: str,
|
|
719
713
|
reasoning_strategy_id: Optional[str] = None,
|
|
720
714
|
reasoning_strategy_name: Optional[str] = None
|
|
721
|
-
) ->
|
|
715
|
+
) -> ReasoningStrategy:
|
|
716
|
+
"""
|
|
717
|
+
Retrieves details of a specific reasoning strategy from the specified project.
|
|
718
|
+
|
|
719
|
+
This method sends a request to the reasoning strategy client to retrieve a reasoning strategy
|
|
720
|
+
identified by either `reasoning_strategy_id` or `reasoning_strategy_name`.
|
|
721
|
+
|
|
722
|
+
:param reasoning_strategy_id: Unique identifier of the reasoning strategy to retrieve.
|
|
723
|
+
:param reasoning_strategy_name: Name of the reasoning strategy to retrieve.
|
|
724
|
+
:return: A `ReasoningStrategy` object representing the retrieved reasoning strategy.
|
|
725
|
+
:raises MissingRequirementException: If neither reasoning_strategy_id nor reasoning_strategy_name is provided.
|
|
726
|
+
:raises APIError: If the API returns errors.
|
|
727
|
+
"""
|
|
722
728
|
if not (reasoning_strategy_id or reasoning_strategy_name):
|
|
723
|
-
raise
|
|
729
|
+
raise MissingRequirementException("Either reasoning_strategy_id or reasoning_strategy_name must be provided.")
|
|
724
730
|
|
|
725
731
|
response_data = self.__reasoning_strategy_client.get_reasoning_strategy(
|
|
726
|
-
project_id=project_id,
|
|
727
732
|
reasoning_strategy_id=reasoning_strategy_id,
|
|
728
733
|
reasoning_strategy_name=reasoning_strategy_name
|
|
729
734
|
)
|
|
730
735
|
|
|
731
736
|
if ErrorHandler.has_errors(response_data):
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
737
|
+
error = ErrorHandler.extract_error(response_data)
|
|
738
|
+
logger.error(f"Error received while retrieving reasoning strategy: {error}")
|
|
739
|
+
raise APIError(f"Error received while retrieving reasoning strategy: {error}")
|
|
735
740
|
|
|
741
|
+
result = ReasoningStrategyMapper.map_to_reasoning_strategy(response_data)
|
|
736
742
|
return result
|
|
737
743
|
|
|
738
744
|
def create_process(
|
|
739
745
|
self,
|
|
740
|
-
project_id: str,
|
|
741
746
|
process: AgenticProcess,
|
|
742
747
|
automatic_publish: bool = False
|
|
743
|
-
) ->
|
|
748
|
+
) -> AgenticProcess:
|
|
744
749
|
"""
|
|
745
750
|
Creates a new process in the specified project.
|
|
746
751
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
:
|
|
752
|
+
This method sends a request to the process client to create a process based on the attributes
|
|
753
|
+
of the provided `AgenticProcess` object.
|
|
754
|
+
|
|
755
|
+
:param process: The process configuration to create, including key, name, description, kb,
|
|
756
|
+
agentic_activities, artifact_signals, user_signals, start_event, end_event, sequence_flows,
|
|
757
|
+
and variables.
|
|
758
|
+
:param automatic_publish: Whether to publish the process after creation. Defaults to False.
|
|
759
|
+
:return: An `AgenticProcess` object representing the created process.
|
|
760
|
+
:raises APIError: If the API returns errors.
|
|
751
761
|
"""
|
|
752
762
|
response_data = self.__process_client.create_process(
|
|
753
|
-
project_id=project_id,
|
|
754
763
|
key=process.key,
|
|
755
764
|
name=process.name,
|
|
756
765
|
description=process.description,
|
|
757
|
-
kb=process.kb.to_dict(),
|
|
766
|
+
kb=process.kb.to_dict() if process.kb else None,
|
|
758
767
|
agentic_activities=[activity.to_dict() for activity in process.agentic_activities] if process.agentic_activities else None,
|
|
759
768
|
artifact_signals=[signal.to_dict() for signal in process.artifact_signals] if process.artifact_signals else None,
|
|
760
769
|
user_signals=[signal.to_dict() for signal in process.user_signals] if process.user_signals else None,
|
|
761
|
-
start_event=process.start_event.to_dict(),
|
|
762
|
-
end_event=process.end_event.to_dict(),
|
|
770
|
+
start_event=process.start_event.to_dict() if process.start_event else None,
|
|
771
|
+
end_event=process.end_event.to_dict() if process.end_event else None,
|
|
763
772
|
sequence_flows=[flow.to_dict() for flow in process.sequence_flows] if process.sequence_flows else None,
|
|
764
773
|
variables=[variable.to_dict() for variable in process.variables] if process.variables else None,
|
|
765
774
|
automatic_publish=automatic_publish
|
|
766
775
|
)
|
|
767
776
|
|
|
768
777
|
if ErrorHandler.has_errors(response_data):
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
778
|
+
error = ErrorHandler.extract_error(response_data)
|
|
779
|
+
logger.error(f"Error received while creating process: {error}")
|
|
780
|
+
raise APIError(f"Error received while creating process: {error}")
|
|
772
781
|
|
|
782
|
+
result = AgenticProcessMapper.map_to_agentic_process(response_data)
|
|
773
783
|
return result
|
|
774
784
|
|
|
775
785
|
def update_process(
|
|
776
786
|
self,
|
|
777
|
-
project_id: str,
|
|
778
787
|
process: AgenticProcess,
|
|
779
788
|
automatic_publish: bool = False,
|
|
780
789
|
upsert: bool = False
|
|
781
|
-
) ->
|
|
790
|
+
) -> AgenticProcess:
|
|
782
791
|
"""
|
|
783
792
|
Updates an existing process in the specified project or upserts it if specified.
|
|
784
793
|
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
:param
|
|
789
|
-
|
|
794
|
+
This method sends a request to the process client to update a process identified by `process.id`
|
|
795
|
+
based on the attributes of the provided `AgenticProcess` object.
|
|
796
|
+
|
|
797
|
+
:param process: The process configuration to update, including id, key, name, description, kb,
|
|
798
|
+
agentic_activities, artifact_signals, user_signals, start_event, end_event, sequence_flows,
|
|
799
|
+
and variables.
|
|
800
|
+
:param automatic_publish: Whether to publish the process after updating. Defaults to False.
|
|
801
|
+
:param upsert: Whether to insert the process if it does not exist. Defaults to False.
|
|
802
|
+
:return: An `AgenticProcess` object representing the updated process.
|
|
803
|
+
:raises APIError: If the API returns errors.
|
|
790
804
|
"""
|
|
791
805
|
response_data = self.__process_client.update_process(
|
|
792
|
-
project_id=project_id,
|
|
793
806
|
process_id=process.id,
|
|
794
807
|
name=process.name,
|
|
795
808
|
key=process.key,
|
|
796
809
|
description=process.description,
|
|
797
|
-
kb=process.kb.to_dict(),
|
|
810
|
+
kb=process.kb.to_dict() if process.kb else None,
|
|
798
811
|
agentic_activities=[activity.to_dict() for activity in process.agentic_activities] if process.agentic_activities else None,
|
|
799
812
|
artifact_signals=[signal.to_dict() for signal in process.artifact_signals] if process.artifact_signals else None,
|
|
800
813
|
user_signals=[signal.to_dict() for signal in process.user_signals] if process.user_signals else None,
|
|
801
|
-
start_event=process.start_event.to_dict(),
|
|
802
|
-
end_event=process.end_event.to_dict(),
|
|
814
|
+
start_event=process.start_event.to_dict() if process.start_event else None,
|
|
815
|
+
end_event=process.end_event.to_dict() if process.end_event else None,
|
|
803
816
|
sequence_flows=[flow.to_dict() for flow in process.sequence_flows] if process.sequence_flows else None,
|
|
804
817
|
variables=[variable.to_dict() for variable in process.variables] if process.variables else None,
|
|
805
818
|
automatic_publish=automatic_publish,
|
|
@@ -807,35 +820,38 @@ class AILabManager:
|
|
|
807
820
|
)
|
|
808
821
|
|
|
809
822
|
if ErrorHandler.has_errors(response_data):
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
823
|
+
error = ErrorHandler.extract_error(response_data)
|
|
824
|
+
logger.error(f"Error received while updating process: {error}")
|
|
825
|
+
raise APIError(f"Error received while updating process: {error}")
|
|
813
826
|
|
|
827
|
+
result = AgenticProcessMapper.map_to_agentic_process(response_data)
|
|
814
828
|
return result
|
|
815
829
|
|
|
816
830
|
def get_process(
|
|
817
831
|
self,
|
|
818
|
-
project_id: str,
|
|
819
832
|
process_id: Optional[str] = None,
|
|
820
833
|
process_name: Optional[str] = None,
|
|
821
834
|
filter_settings: Optional[FilterSettings] = None
|
|
822
|
-
) ->
|
|
835
|
+
) -> AgenticProcess:
|
|
823
836
|
"""
|
|
824
837
|
Retrieves details of a specific process in the specified project.
|
|
825
838
|
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
:
|
|
831
|
-
:
|
|
839
|
+
This method sends a request to the process client to retrieve a process identified by either
|
|
840
|
+
`process_id` or `process_name`. Optional filter settings can specify revision, version, and
|
|
841
|
+
whether to allow drafts.
|
|
842
|
+
|
|
843
|
+
:param process_id: Unique identifier of the process to retrieve.
|
|
844
|
+
:param process_name: Name of the process to retrieve.
|
|
845
|
+
:param filter_settings: Settings to filter the process retrieval (revision, version, allow_drafts).
|
|
846
|
+
:return: An `AgenticProcess` object representing the retrieved process.
|
|
847
|
+
:raises MissingRequirementException: If neither process_id nor process_name is provided.
|
|
848
|
+
:raises APIError: If the API returns errors.
|
|
832
849
|
"""
|
|
833
850
|
if not (process_id or process_name):
|
|
834
|
-
raise
|
|
851
|
+
raise MissingRequirementException("Either process_id or process_name must be provided.")
|
|
835
852
|
|
|
836
853
|
filter_settings = filter_settings or FilterSettings(revision="0", version="0", allow_drafts=True)
|
|
837
854
|
response_data = self.__process_client.get_process(
|
|
838
|
-
project_id=project_id,
|
|
839
855
|
process_id=process_id,
|
|
840
856
|
process_name=process_name,
|
|
841
857
|
revision=filter_settings.revision,
|
|
@@ -844,27 +860,29 @@ class AILabManager:
|
|
|
844
860
|
)
|
|
845
861
|
|
|
846
862
|
if ErrorHandler.has_errors(response_data):
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
863
|
+
error = ErrorHandler.extract_error(response_data)
|
|
864
|
+
logger.error(f"Error received while retrieving process: {error}")
|
|
865
|
+
raise APIError(f"Error received while retrieving process: {error}")
|
|
850
866
|
|
|
867
|
+
result = AgenticProcessMapper.map_to_agentic_process(response_data)
|
|
851
868
|
return result
|
|
852
869
|
|
|
853
870
|
def list_processes(
|
|
854
871
|
self,
|
|
855
|
-
project_id: str,
|
|
856
872
|
filter_settings: Optional[FilterSettings] = None
|
|
857
|
-
) ->
|
|
873
|
+
) -> AgenticProcessList:
|
|
858
874
|
"""
|
|
859
875
|
Retrieves a list of processes in the specified project.
|
|
860
876
|
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
877
|
+
This method queries the process client to fetch a list of processes for the given project ID,
|
|
878
|
+
applying the specified filter settings.
|
|
879
|
+
|
|
880
|
+
:param filter_settings: Settings to filter the process list (id, name, status, start, count, allow_drafts).
|
|
881
|
+
:return: An `AgenticProcessList` object containing the retrieved processes.
|
|
882
|
+
:raises APIError: If the API returns errors.
|
|
864
883
|
"""
|
|
865
884
|
filter_settings = filter_settings or FilterSettings(start="0", count="100", allow_drafts=True)
|
|
866
885
|
response_data = self.__process_client.list_processes(
|
|
867
|
-
project_id=project_id,
|
|
868
886
|
id=filter_settings.id,
|
|
869
887
|
name=filter_settings.name,
|
|
870
888
|
status=filter_settings.status,
|
|
@@ -874,29 +892,31 @@ class AILabManager:
|
|
|
874
892
|
)
|
|
875
893
|
|
|
876
894
|
if ErrorHandler.has_errors(response_data):
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
895
|
+
error = ErrorHandler.extract_error(response_data)
|
|
896
|
+
logger.error(f"Error received while listing processes: {error}")
|
|
897
|
+
raise APIError(f"Error received while listing processes: {error}")
|
|
880
898
|
|
|
899
|
+
result = AgenticProcessMapper.map_to_agentic_process_list(response_data)
|
|
881
900
|
return result
|
|
882
901
|
|
|
883
902
|
def list_process_instances(
|
|
884
903
|
self,
|
|
885
|
-
project_id: str,
|
|
886
904
|
process_id: str,
|
|
887
905
|
filter_settings: Optional[FilterSettings] = None
|
|
888
|
-
) ->
|
|
906
|
+
) -> ProcessInstanceList:
|
|
889
907
|
"""
|
|
890
908
|
Retrieves a list of process instances for a specific process in the specified project.
|
|
891
909
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
:
|
|
910
|
+
This method queries the process client to fetch a list of process instances for the given
|
|
911
|
+
process ID, applying the specified filter settings.
|
|
912
|
+
|
|
913
|
+
:param process_id: Unique identifier of the process to list instances for.
|
|
914
|
+
:param filter_settings: Settings to filter the instance list (is_active, start, count).
|
|
915
|
+
:return: A `ProcessInstanceList` object containing the retrieved process instances.
|
|
916
|
+
:raises APIError: If the API returns errors.
|
|
896
917
|
"""
|
|
897
918
|
filter_settings = filter_settings or FilterSettings(start="0", count="10", is_active=True)
|
|
898
919
|
response_data = self.__process_client.list_process_instances(
|
|
899
|
-
project_id=project_id,
|
|
900
920
|
process_id=process_id,
|
|
901
921
|
is_active=filter_settings.is_active,
|
|
902
922
|
start=filter_settings.start,
|
|
@@ -904,156 +924,166 @@ class AILabManager:
|
|
|
904
924
|
)
|
|
905
925
|
|
|
906
926
|
if ErrorHandler.has_errors(response_data):
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
927
|
+
error = ErrorHandler.extract_error(response_data)
|
|
928
|
+
logger.error(f"Error received while listing process instances: {error}")
|
|
929
|
+
raise APIError(f"Error received while listing process instances: {error}")
|
|
910
930
|
|
|
931
|
+
result = ProcessInstanceMapper.map_to_process_instance_list(response_data)
|
|
911
932
|
return result
|
|
912
933
|
|
|
913
934
|
def delete_process(
|
|
914
935
|
self,
|
|
915
|
-
project_id: str,
|
|
916
936
|
process_id: Optional[str] = None,
|
|
917
937
|
process_name: Optional[str] = None
|
|
918
|
-
) ->
|
|
938
|
+
) -> EmptyResponse:
|
|
919
939
|
"""
|
|
920
940
|
Deletes a specific process in the specified project.
|
|
921
941
|
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
:
|
|
926
|
-
:
|
|
942
|
+
This method sends a request to the process client to delete a process identified by either
|
|
943
|
+
`process_id` or `process_name`.
|
|
944
|
+
|
|
945
|
+
:param process_id: Unique identifier of the process to delete.
|
|
946
|
+
:param process_name: Name of the process to delete.
|
|
947
|
+
:return: `EmptyResponse` if the process was deleted successfully.
|
|
948
|
+
:raises MissingRequirementException: If neither process_id nor process_name is provided.
|
|
949
|
+
:raises APIError: If the API returns errors.
|
|
927
950
|
"""
|
|
928
951
|
if not (process_id or process_name):
|
|
929
|
-
raise
|
|
952
|
+
raise MissingRequirementException("Either process_id or process_name must be provided.")
|
|
930
953
|
|
|
931
954
|
response_data = self.__process_client.delete_process(
|
|
932
|
-
project_id=project_id,
|
|
933
955
|
process_id=process_id,
|
|
934
956
|
process_name=process_name
|
|
935
957
|
)
|
|
936
958
|
|
|
937
959
|
if ErrorHandler.has_errors(response_data):
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
960
|
+
error = ErrorHandler.extract_error(response_data)
|
|
961
|
+
logger.error(f"Error received while deleting process: {error}")
|
|
962
|
+
raise APIError(f"Error received while deleting process: {error}")
|
|
941
963
|
|
|
964
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Process deleted successfully")
|
|
942
965
|
return result
|
|
943
966
|
|
|
944
967
|
def publish_process_revision(
|
|
945
968
|
self,
|
|
946
|
-
project_id: str,
|
|
947
969
|
process_id: Optional[str] = None,
|
|
948
970
|
process_name: Optional[str] = None,
|
|
949
971
|
revision: str = None
|
|
950
|
-
) ->
|
|
972
|
+
) -> AgenticProcess:
|
|
951
973
|
"""
|
|
952
974
|
Publishes a specific revision of a process in the specified project.
|
|
953
975
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
:param
|
|
958
|
-
:
|
|
959
|
-
:
|
|
976
|
+
This method sends a request to the process client to publish the specified revision of the
|
|
977
|
+
process identified by either `process_id` or `process_name`.
|
|
978
|
+
|
|
979
|
+
:param process_id: Unique identifier of the process to publish.
|
|
980
|
+
:param process_name: Name of the process to publish.
|
|
981
|
+
:param revision: Revision of the process to publish.
|
|
982
|
+
:return: An `AgenticProcess` object representing the published process.
|
|
983
|
+
:raises MissingRequirementException: If neither process_id nor process_name is provided, or if revision is not specified.
|
|
984
|
+
:raises APIError: If the API returns errors.
|
|
960
985
|
"""
|
|
961
986
|
if not (process_id or process_name) or not revision:
|
|
962
|
-
raise
|
|
987
|
+
raise MissingRequirementException("Either process_id or process_name and revision must be provided.")
|
|
963
988
|
|
|
964
989
|
response_data = self.__process_client.publish_process_revision(
|
|
965
|
-
project_id=project_id,
|
|
966
990
|
process_id=process_id,
|
|
967
991
|
process_name=process_name,
|
|
968
992
|
revision=revision
|
|
969
993
|
)
|
|
970
994
|
|
|
971
995
|
if ErrorHandler.has_errors(response_data):
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
996
|
+
error = ErrorHandler.extract_error(response_data)
|
|
997
|
+
logger.error(f"Error received while publishing process revision: {error}")
|
|
998
|
+
raise APIError(f"Error received while publishing process revision: {error}")
|
|
975
999
|
|
|
1000
|
+
result = AgenticProcessMapper.map_to_agentic_process(response_data)
|
|
976
1001
|
return result
|
|
977
1002
|
|
|
978
1003
|
def create_task(
|
|
979
1004
|
self,
|
|
980
|
-
project_id: str,
|
|
981
1005
|
task: Task,
|
|
982
1006
|
automatic_publish: bool = False
|
|
983
|
-
) ->
|
|
1007
|
+
) -> Task:
|
|
984
1008
|
"""
|
|
985
1009
|
Creates a new task in the specified project.
|
|
986
1010
|
|
|
987
|
-
|
|
988
|
-
|
|
1011
|
+
This method sends a request to the process client to create a task based on the attributes
|
|
1012
|
+
of the provided `Task` object.
|
|
1013
|
+
|
|
1014
|
+
:param task: The task configuration to create, including name (required), description,
|
|
989
1015
|
title_template, id, prompt_data, and artifact_types. Optional fields are included if set.
|
|
990
|
-
:param automatic_publish:
|
|
991
|
-
:return:
|
|
1016
|
+
:param automatic_publish: Whether to publish the task after creation. Defaults to False.
|
|
1017
|
+
:return: A `Task` object representing the created task.
|
|
1018
|
+
:raises APIError: If the API returns errors.
|
|
992
1019
|
"""
|
|
993
1020
|
response_data = self.__process_client.create_task(
|
|
994
|
-
project_id=project_id,
|
|
995
1021
|
name=task.name,
|
|
996
1022
|
description=task.description,
|
|
997
1023
|
title_template=task.title_template,
|
|
998
1024
|
id=task.id,
|
|
999
|
-
prompt_data=task.prompt_data.to_dict(),
|
|
1000
|
-
artifact_types=task.artifact_types.to_dict(),
|
|
1025
|
+
prompt_data=task.prompt_data.to_dict() if task.prompt_data else None,
|
|
1026
|
+
artifact_types=task.artifact_types.to_dict() if task.artifact_types else None,
|
|
1001
1027
|
automatic_publish=automatic_publish
|
|
1002
1028
|
)
|
|
1003
1029
|
|
|
1004
1030
|
if ErrorHandler.has_errors(response_data):
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1031
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1032
|
+
logger.error(f"Error received while creating task: {error}")
|
|
1033
|
+
raise APIError(f"Error received while creating task: {error}")
|
|
1008
1034
|
|
|
1035
|
+
result = TaskMapper.map_to_task(response_data)
|
|
1009
1036
|
return result
|
|
1010
1037
|
|
|
1011
1038
|
def get_task(
|
|
1012
1039
|
self,
|
|
1013
|
-
project_id: str,
|
|
1014
1040
|
task_id: Optional[str] = None,
|
|
1015
1041
|
task_name: Optional[str] = None
|
|
1016
|
-
) ->
|
|
1042
|
+
) -> Task:
|
|
1017
1043
|
"""
|
|
1018
1044
|
Retrieves details of a specific task in the specified project.
|
|
1019
1045
|
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
:
|
|
1024
|
-
:
|
|
1046
|
+
This method sends a request to the process client to retrieve a task identified by either
|
|
1047
|
+
`task_id` or `task_name`.
|
|
1048
|
+
|
|
1049
|
+
:param task_id: Unique identifier of the task to retrieve.
|
|
1050
|
+
:param task_name: Name of the task to retrieve.
|
|
1051
|
+
:return: A `Task` object representing the retrieved task.
|
|
1052
|
+
:raises MissingRequirementException: If neither task_id nor task_name is provided.
|
|
1053
|
+
:raises APIError: If the API returns errors.
|
|
1025
1054
|
"""
|
|
1026
1055
|
if not (task_id or task_name):
|
|
1027
|
-
raise
|
|
1056
|
+
raise MissingRequirementException("Either task_id or task_name must be provided.")
|
|
1028
1057
|
|
|
1029
1058
|
response_data = self.__process_client.get_task(
|
|
1030
|
-
project_id=project_id,
|
|
1031
1059
|
task_id=task_id,
|
|
1032
1060
|
task_name=task_name
|
|
1033
1061
|
)
|
|
1034
1062
|
|
|
1035
1063
|
if ErrorHandler.has_errors(response_data):
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1064
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1065
|
+
logger.error(f"Error received while retrieving task: {error}")
|
|
1066
|
+
raise APIError(f"Error received while retrieving task: {error}")
|
|
1039
1067
|
|
|
1068
|
+
result = TaskMapper.map_to_task(response_data)
|
|
1040
1069
|
return result
|
|
1041
1070
|
|
|
1042
1071
|
def list_tasks(
|
|
1043
1072
|
self,
|
|
1044
|
-
project_id: str,
|
|
1045
1073
|
filter_settings: Optional[FilterSettings] = None
|
|
1046
|
-
) ->
|
|
1074
|
+
) -> TaskList:
|
|
1047
1075
|
"""
|
|
1048
1076
|
Retrieves a list of tasks in the specified project.
|
|
1049
1077
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1078
|
+
This method queries the process client to fetch a list of tasks for the given project ID,
|
|
1079
|
+
applying the specified filter settings.
|
|
1080
|
+
|
|
1081
|
+
:param filter_settings: Settings to filter the task list (id, start, count, allow_drafts).
|
|
1082
|
+
:return: A `TaskList` object containing the retrieved tasks.
|
|
1083
|
+
:raises APIError: If the API returns errors.
|
|
1053
1084
|
"""
|
|
1054
1085
|
filter_settings = filter_settings or FilterSettings(start="0", count="100", allow_drafts=True)
|
|
1055
1086
|
response_data = self.__process_client.list_tasks(
|
|
1056
|
-
project_id=project_id,
|
|
1057
1087
|
id=filter_settings.id,
|
|
1058
1088
|
start=filter_settings.start,
|
|
1059
1089
|
count=filter_settings.count,
|
|
@@ -1061,458 +1091,457 @@ class AILabManager:
|
|
|
1061
1091
|
)
|
|
1062
1092
|
|
|
1063
1093
|
if ErrorHandler.has_errors(response_data):
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1094
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1095
|
+
logger.error(f"Error received while listing tasks: {error}")
|
|
1096
|
+
raise APIError(f"Error received while listing tasks: {error}")
|
|
1067
1097
|
|
|
1098
|
+
result = TaskMapper.map_to_task_list(response_data)
|
|
1068
1099
|
return result
|
|
1069
1100
|
|
|
1070
1101
|
def update_task(
|
|
1071
1102
|
self,
|
|
1072
|
-
project_id: str,
|
|
1073
1103
|
task: Task,
|
|
1074
1104
|
automatic_publish: bool = False,
|
|
1075
1105
|
upsert: bool = False
|
|
1076
|
-
) ->
|
|
1106
|
+
) -> Task:
|
|
1077
1107
|
"""
|
|
1078
1108
|
Updates an existing task in the specified project or upserts it if specified.
|
|
1079
1109
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1110
|
+
This method sends a request to the process client to update a task identified by `task.id`
|
|
1111
|
+
based on the attributes of the provided `Task` object.
|
|
1112
|
+
|
|
1113
|
+
:param task: The task configuration to update, including id (required), name, description,
|
|
1082
1114
|
title_template, prompt_data, and artifact_types. Optional fields are included if set.
|
|
1083
|
-
:param automatic_publish:
|
|
1084
|
-
:param upsert:
|
|
1085
|
-
:return:
|
|
1086
|
-
:raises
|
|
1115
|
+
:param automatic_publish: Whether to publish the task after updating. Defaults to False.
|
|
1116
|
+
:param upsert: Whether to insert the task if it does not exist. Defaults to False.
|
|
1117
|
+
:return: A `Task` object representing the updated task.
|
|
1118
|
+
:raises MissingRequirementException: If task.id is not provided.
|
|
1119
|
+
:raises APIError: If the API returns errors.
|
|
1087
1120
|
"""
|
|
1088
1121
|
if not task.id:
|
|
1089
|
-
raise
|
|
1122
|
+
raise MissingRequirementException("Task ID must be provided for update.")
|
|
1090
1123
|
|
|
1091
1124
|
response_data = self.__process_client.update_task(
|
|
1092
|
-
project_id=project_id,
|
|
1093
1125
|
task_id=task.id,
|
|
1094
1126
|
name=task.name,
|
|
1095
1127
|
description=task.description,
|
|
1096
1128
|
title_template=task.title_template,
|
|
1097
1129
|
id=task.id,
|
|
1098
|
-
prompt_data=task.prompt_data.to_dict(),
|
|
1099
|
-
artifact_types=task.artifact_types.to_dict(),
|
|
1130
|
+
prompt_data=task.prompt_data.to_dict() if task.prompt_data else None,
|
|
1131
|
+
artifact_types=task.artifact_types.to_dict() if task.artifact_types else None,
|
|
1100
1132
|
automatic_publish=automatic_publish,
|
|
1101
1133
|
upsert=upsert
|
|
1102
1134
|
)
|
|
1103
1135
|
|
|
1104
1136
|
if ErrorHandler.has_errors(response_data):
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1137
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1138
|
+
logger.error(f"Error received while updating task: {error}")
|
|
1139
|
+
raise APIError(f"Error received while updating task: {error}")
|
|
1108
1140
|
|
|
1141
|
+
result = TaskMapper.map_to_task(response_data)
|
|
1109
1142
|
return result
|
|
1110
1143
|
|
|
1111
1144
|
def delete_task(
|
|
1112
1145
|
self,
|
|
1113
|
-
project_id: str,
|
|
1114
1146
|
task_id: Optional[str] = None,
|
|
1115
1147
|
task_name: Optional[str] = None
|
|
1116
|
-
) ->
|
|
1148
|
+
) -> EmptyResponse:
|
|
1117
1149
|
"""
|
|
1118
1150
|
Deletes a specific task in the specified project.
|
|
1119
1151
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
:
|
|
1124
|
-
:
|
|
1152
|
+
This method sends a request to the process client to delete a task identified by either
|
|
1153
|
+
`task_id` or `task_name`.
|
|
1154
|
+
|
|
1155
|
+
:param task_id: Unique identifier of the task to delete.
|
|
1156
|
+
:param task_name: Name of the task to delete.
|
|
1157
|
+
:return: `EmptyResponse` if the task was deleted successfully.
|
|
1158
|
+
:raises MissingRequirementException: If neither task_id nor task_name is provided.
|
|
1159
|
+
:raises APIError: If the API returns errors.
|
|
1125
1160
|
"""
|
|
1126
1161
|
if not (task_id or task_name):
|
|
1127
|
-
raise
|
|
1162
|
+
raise MissingRequirementException("Either task_id or task_name must be provided.")
|
|
1128
1163
|
|
|
1129
1164
|
response_data = self.__process_client.delete_task(
|
|
1130
|
-
project_id=project_id,
|
|
1131
1165
|
task_id=task_id,
|
|
1132
1166
|
task_name=task_name
|
|
1133
1167
|
)
|
|
1134
1168
|
|
|
1135
1169
|
if ErrorHandler.has_errors(response_data):
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1170
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1171
|
+
logger.error(f"Error received while deleting task: {error}")
|
|
1172
|
+
raise APIError(f"Error received while deleting task: {error}")
|
|
1139
1173
|
|
|
1174
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Task deleted successfully")
|
|
1140
1175
|
return result
|
|
1141
1176
|
|
|
1142
1177
|
def publish_task_revision(
|
|
1143
1178
|
self,
|
|
1144
|
-
project_id: str,
|
|
1145
1179
|
task_id: Optional[str] = None,
|
|
1146
1180
|
task_name: Optional[str] = None,
|
|
1147
1181
|
revision: str = None
|
|
1148
|
-
) ->
|
|
1182
|
+
) -> Task:
|
|
1149
1183
|
"""
|
|
1150
1184
|
Publishes a specific revision of a task in the specified project.
|
|
1151
1185
|
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
:param
|
|
1156
|
-
:
|
|
1157
|
-
:
|
|
1186
|
+
This method sends a request to the process client to publish the specified revision of the
|
|
1187
|
+
task identified by either `task_id` or `task_name`.
|
|
1188
|
+
|
|
1189
|
+
:param task_id: Unique identifier of the task to publish.
|
|
1190
|
+
:param task_name: Name of the task to publish.
|
|
1191
|
+
:param revision: Revision of the task to publish.
|
|
1192
|
+
:return: A `Task` object representing the published task.
|
|
1193
|
+
:raises MissingRequirementException: If neither task_id nor task_name is provided, or if revision is not specified.
|
|
1194
|
+
:raises APIError: If the API returns errors.
|
|
1158
1195
|
"""
|
|
1159
1196
|
if not (task_id or task_name) or not revision:
|
|
1160
|
-
raise
|
|
1197
|
+
raise MissingRequirementException("Either task_id or task_name and revision must be provided.")
|
|
1161
1198
|
|
|
1162
1199
|
response_data = self.__process_client.publish_task_revision(
|
|
1163
|
-
project_id=project_id,
|
|
1164
1200
|
task_id=task_id,
|
|
1165
1201
|
task_name=task_name,
|
|
1166
1202
|
revision=revision
|
|
1167
1203
|
)
|
|
1168
1204
|
|
|
1169
1205
|
if ErrorHandler.has_errors(response_data):
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1206
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1207
|
+
logger.error(f"Error received while publishing task revision: {error}")
|
|
1208
|
+
raise APIError(f"Error received while publishing task revision: {error}")
|
|
1173
1209
|
|
|
1210
|
+
result = TaskMapper.map_to_task(response_data)
|
|
1174
1211
|
return result
|
|
1175
1212
|
|
|
1176
1213
|
def start_instance(
|
|
1177
1214
|
self,
|
|
1178
|
-
project_id: str,
|
|
1179
1215
|
process_name: str,
|
|
1180
1216
|
subject: Optional[str] = None,
|
|
1181
|
-
variables: Optional[List[Variable]
|
|
1182
|
-
) ->
|
|
1217
|
+
variables: Optional[Union[List[Variable], VariableList]] = None
|
|
1218
|
+
) -> ProcessInstance:
|
|
1183
1219
|
"""
|
|
1184
1220
|
Starts a new process instance in the specified project.
|
|
1185
1221
|
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
:param
|
|
1190
|
-
:
|
|
1222
|
+
This method sends a request to the process client to start a new process instance for the
|
|
1223
|
+
specified `process_name`.
|
|
1224
|
+
|
|
1225
|
+
:param process_name: Name of the process to start an instance for.
|
|
1226
|
+
:param subject: Subject of the process instance. Defaults to None.
|
|
1227
|
+
:param variables: List of variables for the instance. Defaults to None.
|
|
1228
|
+
:return: A `ProcessInstance` object representing the started instance.
|
|
1229
|
+
:raises APIError: If the API returns errors.
|
|
1191
1230
|
"""
|
|
1192
1231
|
if not isinstance(variables, VariableList):
|
|
1193
1232
|
variables = VariableList(variables=variables)
|
|
1194
1233
|
|
|
1195
1234
|
response_data = self.__process_client.start_instance(
|
|
1196
|
-
project_id=project_id,
|
|
1197
1235
|
process_name=process_name,
|
|
1198
1236
|
subject=subject,
|
|
1199
1237
|
variables=variables.to_dict()
|
|
1200
1238
|
)
|
|
1201
1239
|
|
|
1202
1240
|
if ErrorHandler.has_errors(response_data):
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1241
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1242
|
+
logger.error(f"Error received while starting process instance: {error}")
|
|
1243
|
+
raise APIError(f"Error received while starting process instance: {error}")
|
|
1206
1244
|
|
|
1245
|
+
result = ProcessInstanceMapper.map_to_process_instance(response_data)
|
|
1207
1246
|
return result
|
|
1208
1247
|
|
|
1209
1248
|
def abort_instance(
|
|
1210
1249
|
self,
|
|
1211
|
-
project_id: str,
|
|
1212
1250
|
instance_id: str
|
|
1213
|
-
) ->
|
|
1251
|
+
) -> EmptyResponse:
|
|
1214
1252
|
"""
|
|
1215
1253
|
Aborts a specific process instance in the specified project.
|
|
1216
1254
|
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
:
|
|
1255
|
+
This method sends a request to the process client to abort a process instance identified
|
|
1256
|
+
by `instance_id`.
|
|
1257
|
+
|
|
1258
|
+
:param instance_id: Unique identifier of the instance to abort.
|
|
1259
|
+
:return: `EmptyResponse` if the instance was aborted successfully.
|
|
1260
|
+
:raises MissingRequirementException: If instance_id is not provided.
|
|
1261
|
+
:raises APIError: If the API returns errors.
|
|
1221
1262
|
"""
|
|
1222
1263
|
if not instance_id:
|
|
1223
|
-
raise
|
|
1264
|
+
raise MissingRequirementException("Instance ID must be provided.")
|
|
1224
1265
|
|
|
1225
1266
|
response_data = self.__process_client.abort_instance(
|
|
1226
|
-
project_id=project_id,
|
|
1227
1267
|
instance_id=instance_id
|
|
1228
1268
|
)
|
|
1229
1269
|
|
|
1230
1270
|
if ErrorHandler.has_errors(response_data):
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1271
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1272
|
+
logger.error(f"Error received while aborting process instance: {error}")
|
|
1273
|
+
raise APIError(f"Error received while aborting process instance: {error}")
|
|
1234
1274
|
|
|
1275
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Instance aborted successfully")
|
|
1235
1276
|
return result
|
|
1236
1277
|
|
|
1237
1278
|
def get_instance(
|
|
1238
1279
|
self,
|
|
1239
|
-
project_id: str,
|
|
1240
1280
|
instance_id: str
|
|
1241
|
-
) ->
|
|
1281
|
+
) -> ProcessInstance:
|
|
1242
1282
|
"""
|
|
1243
1283
|
Retrieves details of a specific process instance in the specified project.
|
|
1244
1284
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
:
|
|
1285
|
+
This method sends a request to the process client to retrieve a process instance identified
|
|
1286
|
+
by `instance_id`.
|
|
1287
|
+
|
|
1288
|
+
:param instance_id: Unique identifier of the instance to retrieve.
|
|
1289
|
+
:return: A `ProcessInstance` object representing the retrieved instance.
|
|
1290
|
+
:raises MissingRequirementException: If instance_id is not provided.
|
|
1291
|
+
:raises APIError: If the API returns errors.
|
|
1249
1292
|
"""
|
|
1250
1293
|
if not instance_id:
|
|
1251
|
-
raise
|
|
1294
|
+
raise MissingRequirementException("Instance ID must be provided.")
|
|
1252
1295
|
|
|
1253
1296
|
response_data = self.__process_client.get_instance(
|
|
1254
|
-
project_id=project_id,
|
|
1255
1297
|
instance_id=instance_id
|
|
1256
1298
|
)
|
|
1257
1299
|
if ErrorHandler.has_errors(response_data):
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1300
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1301
|
+
logger.error(f"Error received while retrieving process instance: {error}")
|
|
1302
|
+
raise APIError(f"Error received while retrieving process instance: {error}")
|
|
1261
1303
|
|
|
1304
|
+
result = ProcessInstanceMapper.map_to_process_instance(response_data)
|
|
1262
1305
|
return result
|
|
1263
1306
|
|
|
1264
1307
|
def get_instance_history(
|
|
1265
1308
|
self,
|
|
1266
|
-
project_id: str,
|
|
1267
1309
|
instance_id: str
|
|
1268
|
-
) ->
|
|
1310
|
+
) -> dict:
|
|
1269
1311
|
"""
|
|
1270
1312
|
Retrieves the history of a specific process instance in the specified project.
|
|
1271
1313
|
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
:
|
|
1314
|
+
This method sends a request to the process client to retrieve the history of a process instance
|
|
1315
|
+
identified by `instance_id`.
|
|
1316
|
+
|
|
1317
|
+
:param instance_id: Unique identifier of the instance to retrieve history for.
|
|
1318
|
+
:return: A dictionary containing the instance history.
|
|
1319
|
+
:raises MissingRequirementException: If instance_id is not provided.
|
|
1320
|
+
:raises APIError: If the API returns errors.
|
|
1276
1321
|
"""
|
|
1277
1322
|
if not instance_id:
|
|
1278
|
-
raise
|
|
1323
|
+
raise MissingRequirementException("Instance ID must be provided.")
|
|
1279
1324
|
|
|
1280
1325
|
response_data = self.__process_client.get_instance_history(
|
|
1281
|
-
project_id=project_id,
|
|
1282
1326
|
instance_id=instance_id
|
|
1283
1327
|
)
|
|
1284
1328
|
|
|
1285
1329
|
if ErrorHandler.has_errors(response_data):
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1330
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1331
|
+
logger.error(f"Error received while retrieving instance history: {error}")
|
|
1332
|
+
raise APIError(f"Error received while retrieving instance history: {error}")
|
|
1289
1333
|
|
|
1334
|
+
result = response_data
|
|
1290
1335
|
return result
|
|
1291
1336
|
|
|
1292
1337
|
def get_thread_information(
|
|
1293
1338
|
self,
|
|
1294
|
-
project_id: str,
|
|
1295
1339
|
thread_id: str
|
|
1296
|
-
) ->
|
|
1340
|
+
) -> dict:
|
|
1297
1341
|
"""
|
|
1298
1342
|
Retrieves information about a specific thread in the specified project.
|
|
1299
1343
|
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
:
|
|
1344
|
+
This method sends a request to the process client to retrieve information about a thread
|
|
1345
|
+
identified by `thread_id`.
|
|
1346
|
+
|
|
1347
|
+
:param thread_id: Unique identifier of the thread to retrieve information for.
|
|
1348
|
+
:return: A dictionary containing the thread information.
|
|
1349
|
+
:raises MissingRequirementException: If thread_id is not provided.
|
|
1350
|
+
:raises APIError: If the API returns errors.
|
|
1304
1351
|
"""
|
|
1305
1352
|
if not thread_id:
|
|
1306
|
-
raise
|
|
1353
|
+
raise MissingRequirementException("Thread ID must be provided.")
|
|
1307
1354
|
|
|
1308
1355
|
response_data = self.__process_client.get_thread_information(
|
|
1309
|
-
project_id=project_id,
|
|
1310
1356
|
thread_id=thread_id
|
|
1311
1357
|
)
|
|
1312
1358
|
|
|
1313
1359
|
if ErrorHandler.has_errors(response_data):
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1360
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1361
|
+
logger.error(f"Error received while retrieving thread information: {error}")
|
|
1362
|
+
raise APIError(f"Error received while retrieving thread information: {error}")
|
|
1317
1363
|
|
|
1364
|
+
result = response_data
|
|
1318
1365
|
return result
|
|
1319
1366
|
|
|
1320
1367
|
def send_user_signal(
|
|
1321
1368
|
self,
|
|
1322
|
-
project_id: str,
|
|
1323
1369
|
instance_id: str,
|
|
1324
1370
|
signal_name: str
|
|
1325
|
-
) ->
|
|
1371
|
+
) -> EmptyResponse:
|
|
1326
1372
|
"""
|
|
1327
1373
|
Sends a user signal to a specific process instance in the specified project.
|
|
1328
1374
|
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
:
|
|
1333
|
-
:
|
|
1375
|
+
This method sends a request to the process client to send a user signal identified by
|
|
1376
|
+
`signal_name` to a process instance identified by `instance_id`.
|
|
1377
|
+
|
|
1378
|
+
:param instance_id: Unique identifier of the instance to send the signal to.
|
|
1379
|
+
:param signal_name: Name of the user signal to send.
|
|
1380
|
+
:return: `EmptyResponse` if the signal was sent successfully.
|
|
1381
|
+
:raises MissingRequirementException: If instance_id or signal_name is not provided.
|
|
1382
|
+
:raises APIError: If the API returns errors.
|
|
1334
1383
|
"""
|
|
1335
1384
|
if not instance_id or not signal_name:
|
|
1336
|
-
raise
|
|
1385
|
+
raise MissingRequirementException("Instance ID and signal name must be provided.")
|
|
1337
1386
|
|
|
1338
1387
|
response_data = self.__process_client.send_user_signal(
|
|
1339
|
-
project_id=project_id,
|
|
1340
1388
|
instance_id=instance_id,
|
|
1341
1389
|
signal_name=signal_name
|
|
1342
1390
|
)
|
|
1343
1391
|
|
|
1344
1392
|
if ErrorHandler.has_errors(response_data):
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1393
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1394
|
+
logger.error(f"Error received while sending user signal: {error}")
|
|
1395
|
+
raise APIError(f"Error received while sending user signal: {error}")
|
|
1348
1396
|
|
|
1397
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Signal sent successfully")
|
|
1349
1398
|
return result
|
|
1350
1399
|
|
|
1351
1400
|
def create_knowledge_base(
|
|
1352
1401
|
self,
|
|
1353
|
-
project_id: str,
|
|
1354
1402
|
knowledge_base: KnowledgeBase,
|
|
1355
|
-
) ->
|
|
1403
|
+
) -> KnowledgeBase:
|
|
1356
1404
|
"""
|
|
1357
1405
|
Creates a new knowledge base in the specified project using the provided configuration.
|
|
1358
1406
|
|
|
1359
1407
|
This method sends a request to the process client to create a knowledge base based on
|
|
1360
|
-
the attributes of the provided `KnowledgeBase` object.
|
|
1361
|
-
maps them to an `ErrorListResponse`. Otherwise, it maps the response to a `KnowledgeBase` object.
|
|
1408
|
+
the attributes of the provided `KnowledgeBase` object.
|
|
1362
1409
|
|
|
1363
|
-
:param
|
|
1364
|
-
:param knowledge_base: KnowledgeBase - The knowledge base configuration object containing name
|
|
1410
|
+
:param knowledge_base: The knowledge base configuration object containing name
|
|
1365
1411
|
and artifact type names.
|
|
1366
|
-
:return:
|
|
1367
|
-
|
|
1412
|
+
:return: A `KnowledgeBase` object representing the created knowledge base.
|
|
1413
|
+
:raises APIError: If the API returns errors.
|
|
1368
1414
|
"""
|
|
1369
1415
|
response_data = self.__process_client.create_kb(
|
|
1370
|
-
project_id=project_id,
|
|
1371
1416
|
name=knowledge_base.name,
|
|
1372
1417
|
artifacts=knowledge_base.artifacts if knowledge_base.artifacts else None,
|
|
1373
1418
|
metadata=knowledge_base.metadata if knowledge_base.metadata else None
|
|
1374
1419
|
)
|
|
1375
1420
|
if ErrorHandler.has_errors(response_data):
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1421
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1422
|
+
logger.error(f"Error received while creating knowledge base: {error}")
|
|
1423
|
+
raise APIError(f"Error received while creating knowledge base: {error}")
|
|
1379
1424
|
|
|
1425
|
+
result = KnowledgeBaseMapper.map_to_knowledge_base(response_data)
|
|
1380
1426
|
return result
|
|
1381
1427
|
|
|
1382
1428
|
def list_knowledge_bases(
|
|
1383
1429
|
self,
|
|
1384
|
-
project_id: str,
|
|
1385
1430
|
name: Optional[str] = None,
|
|
1386
1431
|
start: Optional[int] = 0,
|
|
1387
1432
|
count: Optional[int] = 10
|
|
1388
|
-
) ->
|
|
1433
|
+
) -> KnowledgeBaseList:
|
|
1389
1434
|
"""
|
|
1390
1435
|
Retrieves a list of knowledge bases for the specified project.
|
|
1391
1436
|
|
|
1392
1437
|
This method queries the process client to fetch a list of knowledge bases associated
|
|
1393
|
-
with the specified project ID, applying optional filters for name and pagination.
|
|
1394
|
-
response contains errors, it maps them to an `ErrorListResponse`. Otherwise, it maps the
|
|
1395
|
-
response to a `KnowledgeBaseList`.
|
|
1438
|
+
with the specified project ID, applying optional filters for name and pagination.
|
|
1396
1439
|
|
|
1397
|
-
:param
|
|
1398
|
-
:param
|
|
1399
|
-
:param
|
|
1400
|
-
:
|
|
1401
|
-
:
|
|
1402
|
-
retrieved knowledge bases if successful, or an `ErrorListResponse` if the API returns errors.
|
|
1440
|
+
:param name: Name filter to narrow down the list of knowledge bases.
|
|
1441
|
+
:param start: Starting index for pagination, defaults to 0.
|
|
1442
|
+
:param count: Number of knowledge bases to return, defaults to 10.
|
|
1443
|
+
:return: A `KnowledgeBaseList` containing the retrieved knowledge bases.
|
|
1444
|
+
:raises APIError: If the API returns errors.
|
|
1403
1445
|
"""
|
|
1404
1446
|
response_data = self.__process_client.list_kbs(
|
|
1405
|
-
project_id=project_id,
|
|
1406
1447
|
name=name,
|
|
1407
1448
|
start=start,
|
|
1408
1449
|
count=count
|
|
1409
1450
|
)
|
|
1410
1451
|
if ErrorHandler.has_errors(response_data):
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1452
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1453
|
+
logger.error(f"Error received while listing knowledge bases: {error}")
|
|
1454
|
+
raise APIError(f"Error received while listing knowledge bases: {error}")
|
|
1414
1455
|
|
|
1456
|
+
result = KnowledgeBaseMapper.map_to_knowledge_base_list(response_data)
|
|
1415
1457
|
return result
|
|
1416
1458
|
|
|
1417
1459
|
def get_knowledge_base(
|
|
1418
1460
|
self,
|
|
1419
|
-
project_id: str,
|
|
1420
1461
|
kb_name: Optional[str] = None,
|
|
1421
1462
|
kb_id: Optional[str] = None
|
|
1422
|
-
) ->
|
|
1463
|
+
) -> KnowledgeBase:
|
|
1423
1464
|
"""
|
|
1424
1465
|
Retrieves details of a specific knowledge base from the specified project.
|
|
1425
1466
|
|
|
1426
1467
|
This method sends a request to the process client to retrieve a knowledge base
|
|
1427
|
-
identified by either `kb_name` or `kb_id`.
|
|
1428
|
-
an `ErrorListResponse`. Otherwise, it maps the response to a `KnowledgeBase` object.
|
|
1468
|
+
identified by either `kb_name` or `kb_id`.
|
|
1429
1469
|
|
|
1430
|
-
:param
|
|
1431
|
-
:param
|
|
1432
|
-
:
|
|
1433
|
-
:
|
|
1434
|
-
|
|
1435
|
-
:raises ValueError: If neither `kb_name` nor `kb_id` is provided.
|
|
1470
|
+
:param kb_name: Name of the knowledge base to retrieve.
|
|
1471
|
+
:param kb_id: Unique identifier of the knowledge base to retrieve.
|
|
1472
|
+
:return: A `KnowledgeBase` object representing the retrieved knowledge base.
|
|
1473
|
+
:raises MissingRequirementException: If neither `kb_name` nor `kb_id` is provided.
|
|
1474
|
+
:raises APIError: If the API returns errors.
|
|
1436
1475
|
"""
|
|
1437
1476
|
if not (kb_name or kb_id):
|
|
1438
|
-
raise
|
|
1477
|
+
raise MissingRequirementException("Either kb_name or kb_id must be provided.")
|
|
1439
1478
|
|
|
1440
1479
|
response_data = self.__process_client.get_kb(
|
|
1441
|
-
project_id=project_id,
|
|
1442
1480
|
kb_name=kb_name,
|
|
1443
1481
|
kb_id=kb_id
|
|
1444
1482
|
)
|
|
1445
1483
|
if ErrorHandler.has_errors(response_data):
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1484
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1485
|
+
logger.error(f"Error received while retrieving knowledge base: {error}")
|
|
1486
|
+
raise APIError(f"Error received while retrieving knowledge base: {error}")
|
|
1449
1487
|
|
|
1488
|
+
result = KnowledgeBaseMapper.map_to_knowledge_base(response_data)
|
|
1450
1489
|
return result
|
|
1451
1490
|
|
|
1452
1491
|
def delete_knowledge_base(
|
|
1453
1492
|
self,
|
|
1454
|
-
project_id: str,
|
|
1455
1493
|
kb_name: Optional[str] = None,
|
|
1456
1494
|
kb_id: Optional[str] = None
|
|
1457
|
-
) ->
|
|
1495
|
+
) -> EmptyResponse:
|
|
1458
1496
|
"""
|
|
1459
1497
|
Deletes a specific knowledge base from the specified project.
|
|
1460
1498
|
|
|
1461
1499
|
This method sends a request to the process client to delete a knowledge base
|
|
1462
|
-
identified by either `kb_name` or `kb_id`.
|
|
1463
|
-
successful, or an `ErrorListResponse` if the API returns errors.
|
|
1500
|
+
identified by either `kb_name` or `kb_id`.
|
|
1464
1501
|
|
|
1465
|
-
:param
|
|
1466
|
-
:param
|
|
1467
|
-
:
|
|
1468
|
-
:
|
|
1469
|
-
|
|
1470
|
-
:raises ValueError: If neither `kb_name` nor `kb_id` is provided.
|
|
1502
|
+
:param kb_name: Name of the knowledge base to delete.
|
|
1503
|
+
:param kb_id: Unique identifier of the knowledge base to delete.
|
|
1504
|
+
:return: `EmptyResponse` if the knowledge base was deleted successfully.
|
|
1505
|
+
:raises MissingRequirementException: If neither `kb_name` nor `kb_id` is provided.
|
|
1506
|
+
:raises APIError: If the API returns errors.
|
|
1471
1507
|
"""
|
|
1472
1508
|
if not (kb_name or kb_id):
|
|
1473
|
-
raise
|
|
1509
|
+
raise MissingRequirementException("Either kb_name or kb_id must be provided.")
|
|
1474
1510
|
|
|
1475
1511
|
response_data = self.__process_client.delete_kb(
|
|
1476
|
-
project_id=project_id,
|
|
1477
1512
|
kb_name=kb_name,
|
|
1478
1513
|
kb_id=kb_id
|
|
1479
1514
|
)
|
|
1480
1515
|
if ErrorHandler.has_errors(response_data):
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
result = ResponseMapper.map_to_empty_response(response_data)
|
|
1516
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1517
|
+
logger.error(f"Error received while deleting knowledge base: {error}")
|
|
1518
|
+
raise APIError(f"Error received while deleting knowledge base: {error}")
|
|
1485
1519
|
|
|
1520
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Knowledge base deleted successfully")
|
|
1486
1521
|
return result
|
|
1487
1522
|
|
|
1488
1523
|
def list_jobs(
|
|
1489
1524
|
self,
|
|
1490
|
-
project_id: str,
|
|
1491
1525
|
filter_settings: Optional[FilterSettings] = None,
|
|
1492
1526
|
topic: Optional[str] = None,
|
|
1493
1527
|
token: Optional[str] = None
|
|
1494
|
-
) ->
|
|
1528
|
+
) -> JobList:
|
|
1495
1529
|
"""
|
|
1496
1530
|
Retrieves a list of jobs in the specified project.
|
|
1497
1531
|
|
|
1498
1532
|
This method queries the process client to fetch a list of jobs associated with the specified
|
|
1499
|
-
project ID, applying optional filter settings.
|
|
1500
|
-
it maps them to an `ErrorListResponse`. Otherwise, it maps the response to a `JobList`.
|
|
1533
|
+
project ID, applying optional filter settings.
|
|
1501
1534
|
|
|
1502
|
-
:param
|
|
1503
|
-
:param
|
|
1504
|
-
:param
|
|
1505
|
-
:
|
|
1506
|
-
:
|
|
1507
|
-
|
|
1508
|
-
:raises ValueError: If project_id is not provided.
|
|
1535
|
+
:param filter_settings: Settings to filter the job list (start, count).
|
|
1536
|
+
:param topic: Topic to filter the jobs (e.g., 'Default', 'Event'). Defaults to None.
|
|
1537
|
+
:param token: Unique token identifier to filter a specific job. Defaults to None.
|
|
1538
|
+
:return: A `JobList` containing the retrieved jobs.
|
|
1539
|
+
:raises MissingRequirementException: If project_id is not provided.
|
|
1540
|
+
:raises APIError: If the API returns errors.
|
|
1509
1541
|
"""
|
|
1510
|
-
if not project_id:
|
|
1511
|
-
raise ValueError("Project ID must be provided.")
|
|
1512
1542
|
|
|
1513
1543
|
filter_settings = filter_settings or FilterSettings(start="0", count="100")
|
|
1514
1544
|
response_data = self.__process_client.list_jobs(
|
|
1515
|
-
project_id=project_id,
|
|
1516
1545
|
start=filter_settings.start,
|
|
1517
1546
|
count=filter_settings.count,
|
|
1518
1547
|
topic=topic,
|
|
@@ -1521,8 +1550,9 @@ class AILabManager:
|
|
|
1521
1550
|
)
|
|
1522
1551
|
|
|
1523
1552
|
if ErrorHandler.has_errors(response_data):
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1553
|
+
error = ErrorHandler.extract_error(response_data)
|
|
1554
|
+
logger.error(f"Error received while listing jobs: {error}")
|
|
1555
|
+
raise APIError(f"Error received while listing jobs: {error}")
|
|
1527
1556
|
|
|
1557
|
+
result = JobMapper.map_to_job_list(response_data)
|
|
1528
1558
|
return result
|